[MHo] The layout manager procedure: ====== proc grid {grid {colgroup {"" ""}} args} { set cols [llength $colgroup] append ret "\n" append ret " \n" foreach g $colgroup { append ret " \n" } append ret " \n" foreach row $grid { set r [string trim $row] lassign [split $r |] r p # Problem: woher sollen nun die kommen? append ret " \n" if {[string eq $r "----"]} { append ret " " } elseif {[string length $r] == 0} { # leere Zeilen machen Sinn, weil tr ein Attribut tragen kann (z.B. Höhe) append ret " ";#   oder nicht? } else { append ret " " set i 0 foreach col $r { incr i set c [string trim $col] lassign [split $c §] c p if {[string eq $c "-"]} { append ret "" } else { append ret "" } } if {$i < $cols} { # fehlende Spalten ohne Parms ergänzen append ret [string repeat "" [expr {$cols-$i}]] } } append ret "\n \n" } append ret "

 [subst $c] 
\n"; # Ergebnis wird automatisch zurückgegeben } ====== An example: ====== puts [grid { { - 1b 1c |bgcolor grey} { 2a - {2c§rowspan 2} } { |height 30} { ---- } { 3a 3b } } {"width 20%" "width 40%" "width 40%"} border 1 width 40%] ====== Html generated by example: ======
 1b1c
2a 2c

3a3b 
====== ---- Of course, this needs to be commented...