Dokumentation von stz2html

von Helmut Richter


Dokumentation eines Perl-Scripts zur Erstellung von HTML-Tabellen aus dem übersichtlicheren Stanza-Format


Einführung

Das Schreiben von HTML-Text für Tabellen von Hand kann sehr mühsam sein. Um das zu erleichtern, dient das Script stz2html, das nicht als Ersatz für bequemere Tools zum Schreiben von HTML gedacht ist, sondern als Ersatz für das Von-Hand-Schreiben. Einsatzbereiche sind z.B.:

stz2html steht für "Stanza to HTML". Ausgangsformat ist also das Stanza-Format, in welchem jedes Tabellenelement durch eine Zeile des Formats "Überschrift: Wert" dargestellt wird. Mit einer optionalen zusätzlichen Beschreibungsdatei läßt sich das Aussehen der generierten Tabelle weiter variieren. Siehe dazu das Beispiel.

Aufruf

Das Kommando befindet sich im Pfad /afs/lrz/home/a/a282244/pub/bin.

Für den Aufruf gibt es zwei mögliche Formate. Entweder

stz2html filename

oder

stz2html input-file descr-file output-file

wobei die erste Form eine Abkürzung ist für

stz2html filename.stz filename.stzd filename.html

Das erste Format wird verwendet, wenn genau ein Parameter angegeben ist und die Datei filename.stz existiert.

Inhalt der Eingabedatei xxx.stz

Jede Tabellenzeile bildet eine "Stanza" (Strophe), die von den benachbarten durch eine Leerzeile getrennt ist. Jedes Tabellenelement hat die Form "Überschrift: Wert", muß also mindestens einen Doppelpunkt enthalten - der erste davon wird verwendet. Wenn die Überschrift selbst einen Doppelpunkt enthält, muß dieser als ":" geschrieben werde, damit er nicht erkannt wird.

Die Titelzeile(n) der Tabellenspalten erscheinen nirgends explizit; sie ergeben sich aus den jeweiligen Überschriften der Tabellenelemente. Eine Überschrift kann auch der leere String sein; das ist aber nur für die erste (evtl. auch für die letzte) Spalte der Tabelle sinnvoll.

Enthält die Überschrift die Zeichenfolge ">>", so wird dadurch eine doppelte Überschrift markiert; haben mehrere aufeinanderfolgende solche doppelten Überschriften denselben ersten Teil, so wird dieser in der Ausgabe nur einmal über beide gesetzt (siehe Beispiel in der Einführung). Das läßt sich nach Belieben auch tiefer schachteln.

Kommt innerhalb einer Stanza eine Überschrift mehr als einmal vor, so werden die Werte mit "<BR>"miteinander verbunden; es entsteht also ein einziges mehrzeiliges Tabellenelement.

Inhalt der Beschreibungsdatei xxx.stzd

Fehlt die Beschreibungsdatei oder fehlt in ihr eine Angabe, so tritt jeweils das unten unter Voreinstellung gesagte in Kraft.

In der Beschreibungsdatei wird jede Zeile ignoriert, die entweder nur unsichtbare Zeichen ("white space") enthält oder deren erstes sichtbares Zeichen "#" ist.

Die Beschreibungsdatei beginnt mit null oder mehr Zeilen, die das sog. "Präludium" enthalten: Text, der vor der Tabelle stehen soll oder deren Anfang bildet. Beginnt die erste Zeile nicht mit "<", so wird angenommen, daß dieser Teil fehlt. Andernfalls gehören zum Präludium:

Das Präludium wird in die Ausgabe übernommen; am Ende der Tabelle werden TABLE-, BODY- und HTML-Tags geschlossen, soweit sie im Präludium eröffnet wurden.

Voreinstellung: Gibt es keine Beschreibungdatei oder gibt es in ihr kein Präludium, so wird so verfahren, als hätte das Präludium

<HTML><BODY>
<TABLE ALIGN=CENTER BORDER=1 CELLPADDING=4>

gelautet. Diese Voreinstellung ist zum Testen nützlich, da die Ausgabe komplett genug für jeden Browser sein dürfte; für eine Publikation im WWW fehlen jedoch die wichtigen Angaben im Kopf der Seite.

Danach kommen pro Ausgabespalte eine Zeile des Formats

Überschrift : Attribute

wobei Überschrift die in der Ausgabe zu verwendende Spaltenüberschrift ist, die nicht unbedingt mit der Überschrift in der Eingabedatei übereinstimmen muß. Die Menge der Attribute kann auch leer sein; in diesem Fall darf der Doppelpunkt auch weggelassen werden. Die Attribute sind untereinander durch Zwischenräume getrennt; die Attribute, die durch geschweifte (alte Überschrift, s.u.) oder eckige (Optionen für das TH- bzw. TD-Tag, s.u.) gekennzeichnet sind, dürfen selbst Zwischenräume enthalten.

Voreinstellung: Gibt es überhaupt eine Beschreibungsdatei, so müssen die gewünschten Ausgabespalten in ihr aufgelistet sein. Gibt es keine, so erscheinen alle Ausgabespalten, und zwar in der Reihenfolge, in der sie in der Eingabedatei erstmals vorkommen.

Mögliche Attribute sind:

{Überschrift in der Eingabedatei}

Damit kann eine von der Eingabedatei abweichende Überschrift gewählt werden, etwa in einer anderen Sprache oder ohne eine Unterteilung, z.B. "Größe: {Größe>>neu}", wenn die Spalte "Größe>>alt" weggelassen wird.

Voreinstellung: dieselbe Überschrift in der Ein- und Ausgabe

Typ

Eine der Angaben "num" (für Zahlen), "int" (für ganze Zahlen), "name" (für Namen und ähnliche Bezeichnungen) oder "text" (für beliebige Texte. Diese Angabe hat Einfluß auf die Sortierreihenfolge und auf die Voreinstellung der horizontalen Textausrichtung (siehe unten).

Voreinstellung: "num" bzw. "int", falls alle Werte bis auf ein gemeinsames Suffix (die Benennung) Zahlen sind, "name", falls keiner der Werte Zwischenräume enthält, "text" sonst.

sort

Die Zeilen sollen nach den Werten in dieser Spalte sortiert werden. Soll absteigend sortiert werden, so ist "sortd" anstelle von "sort" anzugeben. Die Sortierung ist je nach Typ verschieden:

Werden mehrere Spalten zur Sortierung vorgemerkt, so kann man durch Anfügen einer Ziffer (also "sort1", "sort2", . . .) deren Priorität festlegen.

Voreinstellung: keine Sortierung; Reihenfolge der Zeilen wie in der Eingabedatei

coal

(steht für "coalesce", darf auch ausgeschrieben werden): Tabellenelemente in mehreren aufeinanderfolgenden Zeilen, die in dieser Spalte den gleichen Wert haben, werden zu einem mehrzeiligen Tabellenelement zusammengefaßt. Es gibt jedoch nur eine solche Zusammenfassung: Ändert sich von einer der Zeile zur nächsten nur ein Teil der Werte in den mit "coal"markierten Spalten, so wird trotzdem der Aufbau der mehrzeiligen Tabellenelemente in allen diesen Spalten beendet. Diese Angabe ist eigentlich nur in Verbindung mit einer "sort"-Angabe hoher Priorität sinnvoll, da "coal" die gleichen Werte nicht von sich aus zusammensortiert.

Voreinstellung: keine Zusammenfassung von Tabellenelementen

[Optionen für das TD- bzw. TH-Tag]

Damit können Angaben wie "ALIGN=LEFT" für das TD- bzw. TH-Tag gemacht werden; auch die Angabe "TH" (für die Spalte mit Zeilenüberschriften) oder "TD" (für andere Spalten) ist hier möglich.

Voreinstellung: "TH", falls die Überschrift der leere String ist, sonst "TD". "ALIGN=RIGHT" für Zahlen, "ALIGN=CENTER" für Namen und "ALIGN=LEFT" für Texte.

Schwachstellen ("Bugs")

Alle auftretenden Fehler und Ungereimtheiten bitte ich mir zu melden.

Beispiel

Ohne Beschreibungsdatei wird aus der folgenden Eingabedatei mit Stanzas:

: exbi-
Präfix: Ei
Faktor>>Potenz: 2<SUP>60</SUP>
Faktor>>numerischer Wert: 1152921504606846976

: exa-
Präfix: E
Faktor>>Potenz: 10<SUP>18</SUP>
Faktor>>numerischer Wert: 1000000000000000000

: pebi-
Präfix: Pi
Faktor>>Potenz: 2<SUP>50</SUP>
Faktor>>numerischer Wert: 1125899906842624

: peta-
Präfix: P
Faktor>>Potenz: 10<SUP>15</SUP>
Faktor>>numerischer Wert: 1000000000000000

: tebi-
Präfix: Ti
Faktor>>Potenz: 2<SUP>40</SUP>
Faktor>>numerischer Wert: 1099511627776

: tera-
Präfix: T
Faktor>>Potenz: 10<SUP>12</SUP>
Faktor>>numerischer Wert: 1000000000000

: gibi-
Präfix: Gi
Faktor>>Potenz: 2<SUP>30</SUP>
Faktor>>numerischer Wert: 1073741824

: giga-
Präfix: G
Faktor>>Potenz: 10<SUP>9</SUP>
Faktor>>numerischer Wert: 1000000000

: mebi-
Präfix: Mi
Faktor>>Potenz: 2<SUP>20</SUP>
Faktor>>numerischer Wert: 1048576

: mega-
Präfix: M
Faktor>>Potenz: 10<SUP>6</SUP>
Faktor>>numerischer Wert: 1000000

: kibi-
Präfix: Ki
Faktor>>Potenz: 2<SUP>10</SUP>
Faktor>>numerischer Wert: 1024

: kilo-
Präfix: k
Faktor>>Potenz: 10<SUP>3</SUP>
Faktor>>numerischer Wert: 1000

: hekto- (hecto-)
Präfix: h
Faktor>>Potenz: 10<SUP>2</SUP>
Faktor>>numerischer Wert: 100

: dezi- (deci-)
Präfix: d
Faktor>>Potenz: 10<SUP>-1</SUP>
Faktor>>numerischer Wert: 0.1

: zenti- (centi-)
Präfix: c
Faktor>>Potenz: 10<SUP>-2</SUP>
Faktor>>numerischer Wert: 0.01

: milli-
Präfix: m
Faktor>>Potenz: 10<SUP>-3</SUP>
Faktor>>numerischer Wert: 0.001

: mikro- (micro-)
Präfix: µ
Faktor>>Potenz: 10<SUP>-6</SUP>
Faktor>>numerischer Wert: 0.000001

: nano-
Präfix: n
Faktor>>Potenz: 10<SUP>-9</SUP>
Faktor>>numerischer Wert: 0.000000001

: pico-
Präfix: p
Faktor>>Potenz: 10<SUP>-12</SUP>
Faktor>>numerischer Wert: 0.000000000001

: femto-
Präfix: f
Faktor>>Potenz: 10<SUP>-15</SUP>
Faktor>>numerischer Wert: 0.000000000000001

: atto-
Präfix: a
Faktor>>Potenz: 10<SUP>-18</SUP>
Faktor>>numerischer Wert: 0.000000000000000001

die folgende Tabelle generiert:

Präfix Faktor
Potenz numerischer Wert
exbi- Ei 260 1152921504606846976
exa- E 1018 1000000000000000000
pebi- Pi 250 1125899906842624
peta- P 1015 1000000000000000
tebi- Ti 240 1099511627776
tera- T 1012 1000000000000
gibi- Gi 230 1073741824
giga- G 109 1000000000
mebi- Mi 220 1048576
mega- M 106 1000000
kibi- Ki 210 1024
kilo- k 103 1000
hekto- (hecto-) h 102 100
dezi- (deci-) d 10-1 0.1
zenti- (centi-) c 10-2 0.01
milli- m 10-3 0.001
mikro- (micro-) µ 10-6 0.000001
nano- n 10-9 0.000000001
pico- p 10-12 0.000000000001
femto- f 10-15 0.000000000000001
atto- a 10-18 0.000000000000000001

Dazu ein Ausschnitt des erzeugten HTML-Textes:

<TABLE ALIGN=CENTER BORDER=1 CELLPADDING=4>
<TR>
<TH ALIGN=CENTER></TH>
<TH ALIGN=CENTER ROWSPAN=2>Präfix</TH>
<TH ALIGN=CENTER COLSPAN=2>Faktor</TH>
</TR>
<TH ALIGN=CENTER></TH>
<TH ALIGN=CENTER ROWSPAN=1>Potenz</TH>
<TH ALIGN=CENTER ROWSPAN=1>numerischer Wert</TH>
</TR>
<TR>
<TH ALIGN=LEFT>exbi-</TH>
<TD ALIGN=CENTER>Ei</TD>
<TD ALIGN=CENTER>2<SUP>60</SUP></TD>
<TD ALIGN=RIGHT>1152921504606846976</TD>
</TR>
...
<TR>
<TH ALIGN=LEFT>atto-</TH>
<TD ALIGN=CENTER>a</TD>
<TD ALIGN=CENTER>10<SUP>-18</SUP></TD>
<TD ALIGN=RIGHT>0.000000000000000001</TD>
</TR>
</TABLE>

Wird hingegen eine Beschreibungsdatei folgenden Inhalts benutzt:

<TABLE>
<CAPTION>Tabelle sortiert nach Namen</CAPTION>
Name: {} sort [BGCOLOR="green"]
Wert: {Faktor>>numerischer Wert}

so bekommt die Tabelle folgendes Aussehen:

Tabelle sortiert nach Namen
Name Wert
    atto- 0.000000000000000001
    dezi- (deci-) 0.1
    exa- 1000000000000000000
    exbi- 1152921504606846976
    femto- 0.000000000000001
    gibi- 1073741824
    giga- 1000000000
    hekto- (hecto-) 100
    kibi- 1024
    kilo- 1000
    mebi- 1048576
    mega- 1000000
    mikro- (micro-) 0.000001
    milli- 0.001
    nano- 0.000000001
    pebi- 1125899906842624
    peta- 1000000000000000
    pico- 0.000000000001
    tebi- 1099511627776
    tera- 1000000000000
    zenti- (centi-) 0.01

© Helmut Richter      published here 1999-07-05; last update 1998-07-05      http://www.lrz.de/~hr/tools/stz2html.html