Version 1 of Brace-level pretty printer

Updated 2002-07-06 11:49:19

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 <braclevel.tcl:

 0       # prefix the current brace level on each line -[jcw]
 0
 0       proc bracelevel {str} {
 1         set lev 0
 1         set out ""
 1         foreach l [split $str \n] {
 2           append out $lev \t
 2           foreach c [split $l ""] {
 3             append out $c
 3             switch -- $c \{ { incr lev } \} { incr lev -1 }
 3           }
 2           append out \n
 2         }
 1         return $out
 1       }
 0
 0       puts [bracelevel [read stdin]]
 0