Datové strukrury textového editoru

Title Datové struktury textového editoru
Author Jan Liška
Date 23.11.1998
Reference lisak@infonet.cz
File plpoint/docs/textform.html
Project KTTV
Shrnutí: Dokument se snaží zmapovat problémy datových struktur editoru textů a jejich vzájemné součinnosti. Vznikl jako výsledek diskuse, která nebyla definitivně ukončena, a proto jeho obsah podléhá změnám a trvalému růstu.

Celkový návrh

Dokument po načtení z disku a rozparsování obsahu vystupuje jako objekt dokument, který se dále rozpadá na jednotlivé bloky. Bloky se dělí na řádky které jsou složeny ze stylů řádku.

Dokument

Layout box

Nadtřída dvou základních prvků dokumentu - bloku a řádku. Obsahuje informace o šířce, výšce, offsetu a dalších společných atributech objektů.

Bloky

Blok je obecné označení libovolného samostatného oddílu v dokumentu. Uvažujeme následující typy bloků: Bloky všech typů mají společné následující vlastnosti:

 

výška
Aktuální výška bloku. Součet výšek všech elementů vnitřního vertikálního seznamu + mezera před a za blokem. Během editace se průběžně mění (přidávání nových řádek).
šířka
Šířka odstavce. Je ovlivněná šířkou canvasu, do kterého se text formátuje (případně vztaženo k velikosti okna). U tabulek je situace jiná - vyžaduje podrobnější rozbor. Obecně řečeno se jedná o atribut dodávaný zvnějšku bloku.
vertikální odsazení
vynechané místo před a za blokem
offseturčuje vertikální pozici v dokumentu. Vztahuje se k viditelnému textu (momentálně zobrazovanému na obrazovce + buffer pro plynulé skrolování). U bloků mimo viditelný výřez má nedefinovanou hodnotu. Rovněž přichází zvnějšku bloku. Offset se mapuje od offsetu vlastníka (u bloků dokument, u řádků příslušný blok).
možnost stránkového zlomu
 (?) přípustnost stránkového zlomu v tomto bloku
Předpokládané metody bloku:
vykreslit se
Zajišťuje vykreslení obsahu bloku na plátno - obvykle se bude jednat o volání vykreslovacích metod všech vnitřních prvků.
uložit se
z interní datové struktury vygenerovat strukturu zpracovatelnou parserem
načíst se
z výstupu parseru vytvořit interní datové struktury textového editoru.

Řádek

Bloky textu se dále rozpadají na řádky. Podobně jako blok si nese řádek informaci o své výšce, šířce a offsetu (průběžně se měnící), navíc však obsahuje metody pro formátování a zalamování:

Styly

Řádky jsou složeny z horizontálního seznamu stylů. V otázce stylů se rozvinula dlouhá diskuse a valná většina nastolených otázek nebyla dosud uspokojivě zodpovězena.

Styl je část textu v rozmezí maximálně 1 řádku. Text uvnitř stylu je homogenní (má stejné vlastnosti). Mezi základní metody stylu patří funkce na zjištění výšky a šířky (délky) stylu. Styl v sobě zahrnuje bitovou masku, která specifikuje jeho atributy - řez písma, druh písma, jeho barvu, označení cíle hyperlinku apod.

Kurzor

V dokumentu existuje několik kurzorů - jednak editační, který označuje pozici na které probíhá uživatelem řízená editace, a pak doplňkové - např. kurzory pro označení úseku textu apod. Kurzory se úzce váží na řešení jednoznačné identifikace konkrétního místa v textu, což má vztah k funkci UNDO (potíže s "fyzickými" ukazateli jazyka C - po zrušení a opětovném obnovení neukazují na tutéž pozici), nad kterýmžto dumá Králík. 
QOTD: (a.k.a 'Lokomotiva quote'):
Lišák (v diskusi o třešních): Zdá se mi, že zatímco v prvním kole navrhujeme myčku nádobí, vypadají ambice druhého spíš na lokomotivu. Stejně nakonec postavíme jenom tu myčku.

Einstein: Budiž, třeba i myčku... Ale s nárazníkem!