Rozhraní parseru pro editor slidů

Title Rozhraní parseru pro editor slidů
Author Jiří Krutil
Date 23. 11. 1998
Reference jkru5249@artax.karlin.mff.cuni.cz
File plpoint/docs/parser2slide.html
Project KTTV
Version 1

O čem je tento dokument

V tomto dokumentu je popsáno rozhraní mezi parserem a editorem slidů, které se používá při načítání slidů ze souboru. Parser čte z textového souboru zdrojové informace a tvoří podle nich datovou strukturu v paměti, kterou pak předá editoru slidů. Editor potom tuto strukturu přetransformuje pro vlastní použití při editaci a zobrazování.

Rozdíly v reprezentaci dat v souboru a v paměti

Data jsou v souboru reprezentována mírně odlišně od reprezentace v paměti. Kromě toho, že jsou uložena jako text a není to struktura objektů v paměti se tyto dvě reprezentace mírně liší v chápání elementů, které něco obsahují. Jedná se o slide, skupinu, textový rámeček a bublinu. Tato odlišnost byla již zmíněna v dokumentu  reprezentace slidu v paměti.
Jedná se o to, že například skupina je v paměti reprezentována instancí třídy Group (která je potomkem třídy Element) obsahující ukazatele na jednotlivé prvky této skupiny (jedná se o ukazatele na instance potomků třídy Element). V souboru je tentýž vztah vyjádřen tak, že zdrojový kód odpovídající jednotlivým prvků skupiny je "uzavřen" pomocí párového tagu <GROUP>.
Naprosto obdobná situace je u definice slidu, textového rámečku a bubliny. U těch posledních dvou zmíněných se v roli prvků vyskytuje formátovaný text, který tyto elementy obsahují.

Vztah mezi parserem a editorem slidu

Jak je vidět, obě reprezentace jsou si velmi blízké (na rozdíl od editoru textu). Úkolem parseru je vytvořit v paměti strom objektů odpovídající obsahu souboru. Podle mého názoru není třeba uměle vytvářet nějaký mezistupeň mezi reprezentací v souboru a reprezentací používanou editorem. Navrhuji, aby parser dával na výstup slide ve formátu, v jakém bude editován.

Co musí parser dodělat při načítání ze souboru

Na základě dohody mezi mnou a Martinem budou pro všechny typy elementů definovány předvolené hodnoty jimi používaných vlastností. V souboru potom budou explicitně uvedeny pouze hodnoty těch vlastností, které se od předvolby liší. Tím se ušetří zbytečné opakování běžně používaných nastavení a kód se zpřehlední. Parser pak při čtení ze souboru bude neuvedené hodnoty nahrazovat předvolenými.
Podobná strategie se použije pro identifikátory. V souboru budou uvedeny pouze ty, které jsou použity jako cíl odkazu. Pro klíčové body to například znamená, že identifikátor bude v souboru uveden pouze u pevných klíčových bodů a kotev, které jsou použity k ukotvení aspoň jednoho plovoucího klíčového bodu. Tentýž princip platí pro identifikátory elementů. Po krátké úvaze jistě čtenář dospěje k názoru, že identifikátory elementů se v souboru neobjeví nikde, protože na element se nikdo nebude odkazovat pomocí jeho identifikátoru. Skupina je totiž řešena pomocí uzavření do párového tagu a odkaz typu <A HREF> zase pomocí argumentu NAME, který je uveden v definici elementu, který je cílem nějakého odkazu. Stejným způsobem je ukládán i odkaz na celý slide.