HTML
Beschrijving
Tom heeft geen GUI. 's Sneu voor Tom. Maar hij wil wel op het internet
kunnen surfen. Het probleem ligt niet in het ophalen van de
documenten, als wel in de weergave daarvan op zijn
computerscherm. Daarom heeft Tom besloten zelf een browser voor
tekst-schermen te schrijven, zoiets als Lynx. Tom is erin geslaagd
diverse HTML-tag's te herkennen en de meeste kan hij ook verwerken,
maar hij heeft nog problemen met tabellen.
Het Probleem
Gegeven een correcte HTML-tabel, maak een versie die geschikt is voor op een
computer-scherm (80 tekens breed). Voor de minder fervente Web-page-bouwers
onder ons: Een tag is een reeks tekens, beginnend met een `<' en
eindigend met een `>', bijvoorbeeld <tt><HTML></tt> en <tt></HTML></tt>.
De Invoer
Een regel met daarop het aantal runs. Daarna per run een correcte
HTML-tabel tabel\ (in EBNF-notatie):
tabel | `{\tt }' |
line | `{\tt |
}' item\ + `{\tt
}'
item `{\tt | }' string\ $\star$ `{\tt | }'
string teken\ + |
teken `{\tt a}'-`{\tt z}' $|$ `{\tt A}'-`{\tt Z}' $|$ `{\tt
0}'-`{\tt 9}' $|$ `{\tt !}' $|$ `{\tt /}' |
Merk op dat onze tags (i.t.t. de echte HTML-tags) alleen
hoofdletters bevatten. Whitespace (spaties, newlines, carriage return en tabs)
kan overal tussendoor aanwezig zijn (behalve binnen een tag en binnen een string, omdat in de set van tekens geen
whitespace voorkomt). Tevens bevatten strings niet alle mogelijke tekens, met
name het kleiner-dan-teken mist.
De Uitvoer
Per run moet een ASCII-versie van de HTML-tabel gegeven worden, dat
wil zeggen:
- Voor de eerste line, tussen alle lines in en na de laatste
line komt een regel met min-tekens (`-').
- Eén line komt op één regel, beginnend en eindigend
met een pipe (`|').
- item binnen één line\ worden gescheiden door pipes.
- Tussen strings binnen één item staat precies één spatie.
- items moeten links worden uitgelijnd.
- Tussen items en pipes onderling staat tenminste één spatie.
- De pipes die twee opvolgende items scheiden staan voor elke line\
recht onder elkaar.
- De gehele tabel\ moet zo smal mogelijk. Gegeven is dat bij
deze opgave een tabel hooguit 80 tekens breed is (op het scherm)
en hooguit 750 lines bevat.
- Daar waar mintekens en pipes elkaar raken, worden plustekens (`+') gebruikt.
Voorbeeld
Bij de invoer
1
<TABLE>
<TR>
<TD>Hello</TD>
</TR>
<TR>
<TD></TD>
<TD>world!</TD>
</TR>
</TABLE>
<
hoort de uitvoer
+-------+--------+
| Hello | |
+-------+--------+
| | world! |
+-------+--------+