Ein kleines aber nicht mehr triviales Beispiel soll dies veranschaulichen. Es sollen die Identifikationsnummern, Attribute, Ereignisse und Koordinaten eines Datensatzes in einer Liste in HTML ausgegeben werden. Ein Fragment der Ausgabe, dargestellt in einem Browser, zeigt Abbildung 10.17. Zu jedem Attribut eines Objekts sind die aktuell vergebenen Ereignisse in einer Spalte in der Reihenfolge der angegebenen Attribute aufgeführt. Ist einem Attribut mehr als ein Ereignis zugeordnet, sind diese als Gruppe mit geschwungenen Klammern umgeben.
Durch ein kleines Skript, das in der Shell der Kernkomponente lauffähig ist, kann diese Ausgabe erzeugt werden (Abbildung 10.18). Es werden die übergebenen Argumente übernommen, eine Datei geöffnet, die Identifikationsnummern der aktuell eingeschlossenen Objekte in eine Liste geschrieben und in einer Schleife die Attribute der Objekte und die zugehörigen Ereignisse und Koordinaten der Objekte in eine HTML-Tabelle geschrieben.
Dabei werden bestimmte Attribute in einem optionalen Block farblich und mit unterschiedlichen Zeichensätzen aufbereitet.
Anschließend werden die farblich hervorgehobenen Tabellenzeilen geschrieben und die Datei geschlossen.
Abbildung 10.17: Fallbeispiel: Fragment des dargestellten Reports
#======================================================================= # report_itemtags_html.tcl -- Example -- (c) Claus-Peter Rückemann, 2001 # # Report of enclosed item id, tags, bind and coords in HTML format. # # usage from interactive actmap shell: # source report_itemtags_html.tcl # report_itemtags_html report_itemtags_html.html 0 0 1000 1000 # # proc arg1 : file to output data [report_itemtags_html.html] # proc arg2-5 : x0, y0, x1, y1 for selected area [0],[0],[1000],[1000] #======================================================================= proc report_itemtags_html { FileName x0 y0 x1 y1 } { global w set F [open $FileName w+] set listone [getItemsEnclosed $x0 $y0 $x1 $y1] puts $F "<table>" foreach { a } $listone { puts $F "<tr>" set myitemtags [getItemTags $a] set myitembinds "" foreach { i } $myitemtags { catch { lappend myitembinds [$w bind $i] } } regsub -all "bg_bitmap " $myitemtags "<b>bg_bitmap</b> " myitemtags regsub -all "photo " $myitemtags \ "<font color=\"#0000ff\"><b>photo</b></font> " myitemtags regsub -all "bitmap " $myitemtags \ "<font color=\"#0000dd\"><b>bitmap</b></font> " myitemtags regsub -all "itemshape " $myitemtags \ "<font color=\"\#ff0000\"><b>itemshape</b></font> " myitemtags regsub -all "itemtext " $myitemtags \ "<font color=\"\#007700\"><b>itemtext</b></font> " myitemtags regsub -all "<" $myitembinds "\\<" myitembinds regsub -all ">" $myitembinds "\\>" myitembinds puts $F [ format "<td bgcolor=\"\#ffeeaa\" align=\"right\">%s</td>" $a ] puts $F [ format "<td bgcolor=\"\#eaeaea\">%s</td>" $myitemtags ] puts $F [ format "<td bgcolor=\"\#efefef\">%s</td>" $myitembinds ] puts $F [ format "<td bgcolor=\"\#e4e4e4\">%s</td>" [$w coords $a] ] puts $F "</tr>" } puts $F "</table>" close $F } ##EOF:
Abbildung 10.18: Fallbeispiel: Funktion für benutzerdefinierten Report mit HTML Ausgabe