Linky

Title Linky
Author Jiří Krutil
Date 7. 10. 1999
Project KTTV
CVS $Id: links.html,v 2.6 1999/10/12 17:47:35 jehne Exp $

Poznámka: Toto je původní dokument pocházející z ledna 99 upravený dne 7. 10. 99 podle skutečného stavu. Další změny funkčnosti ani implementace by již neměly nastat.

Vzhledem k tomu, že jsme rozhodli, že nebude žádný zvláštní prohlížeč, budou se linky v editoru zároven vytvářet i používat. Text zdroje linku lze normálně editovat, pouze s tím rozdílem, že když se na něj klikne levým tlačítkem myši, tak se po linku skočí. Pokud se na něj klikne pravým tlačítkem, umístí se do textu linku kurzor. Je dovoleno vytvářet i neplatné linky - nijak se to nekontroluje.

Link se skládá ze dvou částí - zdroje a cíle. Jak zdroj, tak cíl jsou párovými značkami v textu. Zdroj nebo cíl linku tedy může být pouze spojitý úsek textu v rámci jednoho odstavce. Nejprve se podíváme na cíl.

Cíl je nějaký úsek textu s přiřazeným jménem. Usek textu nesmí být prázdný a je zvýrazněn přerušovaným podtžením. Cíle se nesmí vzájemně prolínat (to je zajištěno způsobem jejich vytváření - viz dále). Jméno cíli přiřazuje uživatel při jeho vytvoření. Musí být jedinečné v rámci dokumentu (to lze při vytvoření zkontrolovat, nebot při editaci jsou v paměti všechny stávající cíle). Jméno tedy cíl identifikuje. Ve zdroji linku se píše za znak '#'. Cíl je v editoru implementován pomocí párových značek uvnitř odstavce, z nichz zacatecni znacka obsahuje čtyřbajtový ukazatel na příslušný řetězec jména.

Vytváření/editace/odstranění: Cíl se vytváří tak, že se označí oblast textu a klikne se na ikonu 'Link target'. Pokud oblast obsahuje zdroj nebo cíl linku, vypíše se chybová hláška (to se totiž nesmí). Pokud není žádná oblast označena a kurzor stojí ve cíli, objeví se dialog pro editaci tohoto cíle. Jinak se objeví dialog pro editaci nového cíle, který se umístí právě do označené oblasti. Editovat cíl lze i pokud pouze kurzor stojí v nějakém cíli (není označena oblast). Zmíněný dialog obsahuje pouze jedno textové pole pro jméno cíle a tlačítka OK a Remove. Tlačítkem OK se potvrzuje změna (ev. vytváří nový cíl), tlačítkem Remove se odstranuje stávající cíl (ev. stornuje vytvoření nového). Při vytváření nového cíle nebo při změně jména se kontroluje, zda je jméno jedinečné.

Zdroj je také úsek textu, který se nesmí prolínat s jiným zdrojem ani cílem. Obsahuje řetězec (uložený stejně jako u cíle pomocí ukazatele), který říká, kam link ukazuje. Tento řetězec má formát dokument#jméno, kde dokument je cesta k souboru, který obsahuje cíl linku (může být prázdná = tento dokument) a jméno je jméno cíle, na který se má skočit. Jméno nemusí být uvedeno (tehdy se neuvádí ani znak #).

Vytváření/editace/odstranění: Systém vytváření, editace a odstanování je u zdroje linku stejný jako u cíle, ale liší se dialog. Ten obsahuje textové pole pro název (cestu) souboru 'Target document'. Do tohoto pole se dá název bud napsat, nebo použít tlačítko Browse a vybrat jej z dialogu. Dále je tam textové pole 'Target name', do něhož se dá napsat jméno cíle, nebo se dá toto jméno vybrat z listboxu 'Found targets'. Pokud se použije tlačítko Browse nebo listbox, vždy se volba objeví v příslušném textovém poli a lze ji dále editovat. Listbox při otevření dialogu obsahuje cíle pro dokument v poli Target document (tzn. pro nový link aktuální dokument, jinak dokument použitý v linku). Pokud se do tohoto pole vloží jiný dokument, pokusí se parser tento dokument najít a nalézt v něm všechna jména cílů. Tyto jména se vloží do listboxu. Pokud dokument neexistuje nebo neobsahuje cíle, bude listbox prázdný (žádná chybová hláška). Pokud se jedná o aktuální dokument, nebude se nic parsovat, ale informace se najde v seznamu cílů aktuálního dokumentu v mainblocku. (Tento seznam je vyplněn při otevření dokumentu a při přidávání/editaci/mazání cílů se aktualizuje)

Používání linků

Z uživatelského hlediska se link použije tak, že se na něj klikne levým tlačítkem myši.
V linky fungují podobně jako v prohlížeči WWW. Při klinutí na zdroj se objeví odpovídající cíl. Pokud je cíl v jiném dokumentu, otevře se tento dokument v novém okně. Je-li ale již tento dokument v nějakém okně otevřen, neotevírá se nové okno, ale pouze se přepne na to stávající. Pokud dokument neexistuje, objeví se chybová hláška 'Invalid link'. Pokud link nemá jméno cíle, skočí se na začátek dokumentu. Pokud jméno v daném dokumentu neexistuje, objeví se zase chybová hláška a dokument se otevře na začátku (pokud se nejedná o aktuální - to by se na začátek neskákalo). Aktuální dokument se pozná tak, že nemá uvedeno jméno dokumentu před znakem '#'. Pokud by tam jméno bylo, bere se jako jiný dokument, i kdyby cesta ukazovala na aktuální.

Skok po linku se provádí tak, že se načte z linku cíl (tzn. načte se řetězec, na který ukazuje značka v odstavci). Podle toho se otevře daný dokument (pokud to jde) a v něm se skočí na daný cíl (pokud to jde). Jinak se dokument otevře na začátku.

Při skoku po linku se vždy v cílový dokument znovu od začátku prohledává a hledá se v něm příslušný cíl. Hledání prochází rekurzivně všechny odstavce textu. Tento poněkud neefektivní způsob je použit, protože udržování aktuálního seznamu cílů linků spolu s jejich pozicemi by bylo neúnosně složité (téměř při každé editační operaci by se tento seznam musel aktualizovat). Je sice udržován seznam jmen cílů linků, ale bez jejich pozic v dokumentu (slouží pouze pro ověření jednoznačnosti jména cíle linku).