|  | ## | 
|  | ## -- parray_table <arrayName> ?pattern? ?html-attibutes? | 
|  | ## | 
|  | ##	tablearray prints an array data in HTML table | 
|  | ##	This is good when a table is enough to print consistently | 
|  | ##	related data. | 
|  | ## | 
|  | ##	arrayName - Name of the array to display | 
|  | ##	pattern   - Wildcard pattern of variables. An empty string | 
|  | ##		        is tantamout a "*" and prints the whole array | 
|  | ##	html-attributes - | 
|  | ##              list attribute-value pairs to be given | 
|  | ##              to the <table> element tag | 
|  | ## | 
|  | ## $Id$ | 
|  | ## | 
|  | ## | 
|  |  | 
|  | namespace eval ::rivet { | 
|  |  | 
|  | proc parray_table {arrayName {pattern "*"} {htmlAttributes ""}} { | 
|  | upvar 1 $arrayName array | 
|  | if {![array exists array]} { | 
|  | return -code error "\"$arrayName\" isn't an array" | 
|  | } | 
|  | puts -nonewline stdout "<table" | 
|  | foreach {attr attrval} $htmlAttributes { | 
|  | puts -nonewline " $attr=\"$attrval\"" | 
|  | } | 
|  |  | 
|  | puts "><thead><tr><th colspan=\"2\">$arrayName</th></tr></thead>" | 
|  | puts stdout "<tbody>" | 
|  | foreach name [lsort [array names array $pattern]] { | 
|  | puts stdout [format "<tr><td>%s</td><td>%s</td></tr>" [::rivet::escape_sgml_chars $name]    \ | 
|  | [::rivet::escape_sgml_chars $array($name)]] | 
|  | } | 
|  | puts stdout "</tbody></table>" | 
|  | } | 
|  |  | 
|  | } |