MHo The layout manager procedure:
proc grid {grid {colgroup {"" ""}} args} {
set cols [llength $colgroup]
append ret "<table [eval nameValParms $args]>\n"
append ret " <colgroup>\n"
foreach g $colgroup {
append ret " <col [eval nameValParms $g]>\n"
}
append ret " </colgroup>\n"
foreach row $grid {
set r [string trim $row]
lassign [split $r |] r p
# Problem: woher sollen nun die <tr args> kommen?
append ret " <tr [eval nameValParms $p]>\n"
if {[string eq $r "----"]} {
append ret " <td colspan=\"$cols\"><hr></td>"
} elseif {[string length $r] == 0} {
# leere Zeilen machen Sinn, weil tr ein Attribut tragen kann (z.B. Höhe)
append ret " <td colspan=\"$cols\"></td>";# 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 "<td [eval nameValParms $p]> </td>"
} else {
append ret "<td [eval nameValParms $p]>[subst $c]</td>"
}
}
if {$i < $cols} {
# fehlende Spalten ohne Parms ergänzen
append ret [string repeat "<td> </td>" [expr {$cols-$i}]]
}
}
append ret "\n </tr>\n"
}
append ret "</table>\n"; # Ergebnis wird automatisch zurückgegeben
}A helper proc:
proc nameValParms {args} {
set ret ""
foreach {name val} $args {
append ret "$name=\"$val\" "
}
return $ret
}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:
<table border="1" width="40%" > <colgroup> <col width="20%" > <col width="40%" > <col width="40%" > </colgroup> <tr bgcolor="grey" > <td > </td><td >1b</td><td >1c</td> </tr> <tr > <td >2a</td><td > </td><td rowspan="2" >2c</td> </tr> <tr height="30" > <td colspan="3"></td> </tr> <tr > <td colspan="3"><hr></td> </tr> <tr > <td >3a</td><td >3b</td><td> </td> </tr> </table>
Of course, this needs to be commented...