
Napište prohlížeč stránek zapsaných v jednoduchém značkovacím jazyce. Značkovací jazyk umožňuje používání libovolně pojmenovaných značek. Značka označí vždy část dokumentu. Například:
<paragraph>The sample paragraph</paragraph>
Takto označené části dokumentu se říká element. Je vždy ohraničen
počáteční značkou (má tvar <název>) a koncovou
značkou (má tvar </název>). Název elementu může
obsahovat pouze znaky anglické abecedy, rozlišuje se přitom mezi malými a velkými
písmeny.
Dokument může obsahovat libovolné množství elementů, které do sebe mohou být libovolně vnořovány. Celý dokument musí být vždy obsažen v jednom elementu.
<article> <author>James Brown</author> <title>Sample doc</title> <para>First sample paragraph. It contains <em>some marked text</em> inside.</para> <para>Second very simple paragraph.</para> <para>Last paragraph contains link to <link><target>second.sml</target>other file</link>. Paragraph then continues.</para> </article>
Protože znak '<' má speciální význam ve značkách, do dokumentu se zapisuje jako sekvence znaků '<'. Ampersand '&' se zapisuje jako '&'. Například dokument
<document>3 < 5</document>
se zobrazí jako '3 < 5'.
Při zobrazování jsou konce řádek chápány jako mezery a více mezer jdoucích bezprostředně za sebou je chápáno jako jedna mezera.
Zobrazení dokumentu bude definováno stylem uloženým v samostatném souboru
s příponou sty. Styl, který se použije, se určí podle názvu
kořenového elementu. Například styl pro náš ukázkový dokument se bude načítat ze
souboru article.sty, protože celý dokument je uzavřen v elementu article.
Styly se budou hledat v adresáři, který půjde určit v konfiguraci vašeho
programu. Pokud se styl nenalezne v tomto adresáři, bude se soubor hledat ve
stejném adresáři jako je uložen zobrazovaný dokument. Pokud ani tam nebude styl
nalezen, prohlížeč ohlásí chybu a nebude dokument zobrazovat.
Soubor s definicí stylu používá rovněž syntaxi našeho jednoduchého značkovacího jazyka. Pro každý element, který se vyskytuje v dokumentu, obsahuje styl definici jeho zobrazení. Pro každý element se ve stylu určí jeho barva, velikost písma a typ zobrazení.
<style>
<article>
<display>block</display>
<size>12</size>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</article>
<author>
<display>block</display>
<size>11</size>
<color>
<red>0</red>
<green>255</green>
<blue>0</blue>
</color>
</author>
<title>
<display>block</display>
<size>20</size>
<color>
<red>0</red>
<green>0</green>
<blue>255</blue>
</color>
</title>
<para>
<display>block</display>
</para>
<em>
<display>inline</display>
<color>
<red>255</red>
<green>0</green>
<blue>0</blue>
</color>
</em>
<link>
<display>inline</display>
<color>
<red>0</red>
<green>0</green>
<blue>255</blue>
</color>
</link>
<target>
<display>fileref</display>
<color>
<red>0</red>
<green>0</green>
<blue>255</blue>
</color>
</target>
</style>
Každý element ve stylu může obsahovat tři elementy -- display, size
a color.
Obsah elementu display definuje způsob zobrazení elementu. Hodnota block
určuje, že element se bude formátovat jako samostatný odstavec -- před ním i za ním
dojde k zalomení řádky. Hodnota inline pouze element zobrazí jako
součást nadřazeného elementu s případnou změnu velikosti písma a barvy.
Hodnota fileref říká, že element obsahuje jméno souboru, na který vede
odkaz. Bezprostředně nadřazený element pak slouží k aktivaci odkazu --
například kliknutím myší.
Obsah elementu size obsahuje velikost písma v pixelech. Písmo
o této velikosti se použije pro zobrazení elementu.
Obsah elementu color určuje barvu zobrazení obsahu elementu. Barva je
definována pomocí složek v barevném modelu RGB. Podelementy red, green
a blue obsahují hodnotu odpovídající barevné složky jako celé číslo
od 0 do 255.
Uvádění elementů color a size ve stylu je nepovinné.
Hodnota těchto parametrů se dědí z nadřazených elementů.
Prohlížeč v libovolném okamžiku umožní výběr souboru, který si chceme
prohlížet. Mezi soubory lze přecházet i pomocí vytvořených odkazů.
Předpokládejte, že dokumenty obsahují pouze znaky ze znakové sady us-ascii.
Jména souborů v odkazech mohou obsahovat znaky '..', které mají
význam přechodu do adresáře na vyšší úrovni. Pro oddělování adresářů
používejte znak '/'.
Volitelně můžete prohlížeč rozšířit o podporu obrázků. Ve stylu půjde
použít v elementu display ještě hodnotu picture. Obsah
elementu pak bude chápán jako jméno souboru obsahujícího obrázek ve vámi
podporovaných formátech.
Prohlížeč můžete rozšířit o podporu protokolu HTTP. Místo jména souboru v odkazu pak půjde použít URL adresu.
Snažte se napsat co nejefektivněji část prohlížeče, která se stará o zobrazování. Pro zobrazení nemůžete použít žádnou již hotovou komponentu (například Internet Explorer). Protože náš jazyk je podmnožinou XML, můžete pro čtení dokumentů použít již existující knihovny. Není to však podmínkou.