SO - 18809745
by Arun P Johny
HTML
<div id = "board_code_dup">
<div>cout<<"something";</div>
<div>if(a>b && b<c ){</div>
<div>cout<<"hi";</div>
<div>if(a==0)</div>
<div>cout<<"hello";</div>
<div>}</div>
<div>else if(a<b)</div>
<div>cout<<"yow";</div>
<div>else{</div>
<div>cout<<"not here";</div>
<div>cout<<"sure";</div>
<div>}</div>
<div>cout<<"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" />')
}
})