Script '''bracelevel.tcl''': # prefix the current brace level on each line -[jcw] proc bracelevel {str} { set lev 0 set out "" foreach l [split $str \n] { append out $lev \t foreach c [split $l ""] { append out $c switch -- $c \{ { incr lev } \} { incr lev -1 } } append out \n } return $out } puts [bracelevel [read stdin]] ---- Output of '''tclsh bracelevel.tcl