SO - 18809745

by Arun P Johny

HTML

<div id = "board_code_dup">
    <div>cout&lt;&lt;"something";</div>
    <div>if(a&gt;b &amp;&amp; b&lt;c ){</div>
    <div>cout&lt;&lt;"hi";</div>
    <div>if(a==0)</div>
    <div>cout&lt;&lt;"hello";</div>
    <div>}</div>
    <div>else if(a&lt;b)</div>
    <div>cout&lt;&lt;"yow";</div>
    <div>else{</div>
    <div>cout&lt;&lt;"not here";</div>
    <div>cout&lt;&lt;"sure";</div>
    <div>}</div>
    <div>cout&lt;&lt;"something"</div>
</div>

CSS

.condBlock{
    margin-left: 20px;
}

JavaScript

var stack = [], regex1 = /^(if|else|else\s+if).*{$/, regex2 =  /^(if|else|else\s+if).*$/, closing = /^}$/;

$('#board_code_dup').children().each(function(){
    var $this = $(this), text = $.trim($this.text());
    
    if(regex1.test(text)){
        stack.unshift(this);
    } else if(closing.test(text)){
        $(stack.shift()).nextUntil(this).addBack().add(this).wrapAll('<div class="condBlock" />')
    } else if(regex2.test(text)){
        $(this).next().addBack().wrapAll('<div class="condBlock" />')
    }
})