115
Sem vložte zadání Vaší práce.

SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Sem vložte zadání Vaší práce.

Page 2: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 3: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

České vysoké učení technické v Praze

Fakulta informačních technologií

Katedra softwarové inženýrství

Diplomová práce

Konverze dokumentů Microsoft Word do for-mátu LATEXbc. Jiří Anděl

Vedoucí práce: Ing. Jiří Kašpar

4. ledna 2013

Page 4: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 5: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Poděkování

Největší poděkování patří mému vedoucímu práce Ing. Jiřímu Kašparovi, ježmě výborně vedl a poskytl maximální pomoc při její tvorbě. Dále bych rádpoděkoval svému otci a sestře za psychickou podporu a za příjemné domácíprostředí, v kterém jsem práci převážně psal. Nakonec bych rád poděkovalmým nejbližším přátelům, kteří mi ochotně pomáhali s překladem abstraktu.

Page 6: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 7: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Prohlášení

Prohlašuji, že jsem předloženou práci vypracoval samostatně a že jsem uvedlveškeré použité informační zdroje v souladu s Metodickým pokynem o eticképřípravě vysokoškolských závěrečných prací.

Beru na vědomí, že se na moji práci vztahují práva a povinnosti vyplývajícíze zákona č. 121/2000 Sb., autorského zákona, ve znění pozdějších předpisů. Vsouladu s ust. § 46 odst. 6 tohoto zákona tímto uděluji nevýhradní oprávnění(licenci) k užití této mojí práce, a to včetně všech počítačových programů, ježjsou její součástí či přílohou a veškeré jejich dokumentace (dále souhrnně jen„Dílo”), a to všem osobám, které si přejí Dílo užít. Tyto osoby jsou oprávněnyDílo užít jakýmkoli způsobem, který nesnižuje hodnotu Díla, avšak pouze knevýdělečným účelům. Toto oprávnění je časově, teritoriálně i množstevněneomezené.

V Praze dne 4. ledna 2013 . . . . . . . . . . . . . . . . . . . . .

7

Page 8: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

České vysoké učení technické v PrazeFakulta informačních technologií© 2013 Jiří Anděl. Všechna práva vyhrazena.Tato práce vznikla jako školní dílo na Českém vysokém učení technickémv Praze, Fakultě informačních technologií. Práce je chráněna právními před-pisy a mezinárodními úmluvami o právu autorském a právech souvisejícíchs právem autorským. K jejímu užití, s výjimkou bezúplatných zákonných li-cencí, je nezbytný souhlas autora.

Odkaz na tuto práci

Jiří Anděl.Konverze dokumentů Microsoft Word do formátu LATEX: Diplomovápráce. Praha: ČVUT v Praze, Fakulta informačních technologií, 2013.

Page 9: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Abstract

This work implements converter fromMicrosoft OfficeWord into the LATEX for-mat. It analyses used data patterns, suggests principles of conversion betweenthem and verifies reliability of the conversion. Suggested principles of conver-sion are then being implemented in Visual Basic for Application. Converter issuitable tool for automatization of described process. It allows rapid boost ofconversion speed for text documents created and sustained in Microsoft OfficeWord, for publications which requies LATEX enviroment.

Keywords conversion, converter, LATEX, Microsoft Office Word

Abstrakt

Tato práce implementuje převodník z dokumentu Microsoft Office Word doformátu LATEX. Analyzuje použité datové formáty, navrhuje principy převodutextu mezi nimi a ověřuje věrnost tohoto převodu. Navržené principy konverzedokumentů implementuje v jazyce Visual Basic for Application. Převodník jevhodným nástrojem pro automatizaci převodu, umožňuje výrazné urychlenípřevodu textů vytvořených a udržovaných v prostředí Microsoft Office Wordupro publikace vyžadující prostředí LATEX.

Klíčová slova konverze textu, LATEX, Microsoft Office Word, převod textu,převodník

9

Page 10: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 11: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Obsah

Úvod 17Uvedení do problematiky . . . . . . . . . . . . . . . . . . . . . . . . . . 17Stanovení cílů a požadavků na implementovaný produkt (funkční

požadavky) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Popis struktury diplomové práce . . . . . . . . . . . . . . . . . . . . . . 20Rešeršní zpracování existujících implementací . . . . . . . . . . . . . 20

1 Analýza 251.1 Datová struktura objektového modelu MS Word . . . . . . . . . 261.2 Visual Basic for Applications . . . . . . . . . . . . . . . . . . . . . 331.3 TEX a LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2 Návrh konverze 472.1 Návrh převodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.2 Návrh chování aplikace . . . . . . . . . . . . . . . . . . . . . . . . 682.3 Návrh uživatelského rozhraní . . . . . . . . . . . . . . . . . . . . . 79

3 Realizace 853.1 Realizace převodu . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.2 Realizace vzhledu aplikace . . . . . . . . . . . . . . . . . . . . . . 91

4 Testování 954.1 Testování atributů a jejich vzájemných prolínání . . . . . . . . . 954.2 Testování formátování a jejich vzájemných prolínání . . . . . . . 974.3 Testování tabulek a jejich odkazů . . . . . . . . . . . . . . . . . . 974.4 Testování obrázků a jejich odkazů . . . . . . . . . . . . . . . . . . 974.5 Testování nadpisů . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.6 Testování rovnic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

Závěr 107

Literatura 111

A Seznam použitých zkratek 113

11

Page 12: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

B Obsah přiloženého CD 115

12

Page 13: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Seznam obrázků

1.1 Převodník . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.2 Datová struktura objektového modelu . . . . . . . . . . . . . . . . . 281.3 Struktura kolekce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.4 Objekt Character a jeho členění . . . . . . . . . . . . . . . . . . . . . 30

2.1 Detekce tučného textu . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.2 Detekce Italic textu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.3 Detekce Italic textu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.4 Detekce barvy textu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.5 Detekce zarovnání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.6 Detekce výčtu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.7 Detekce nadpisů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.8 Detekce znaků . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.9 Detekce tabulky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.10 Detekce grafického objektu . . . . . . . . . . . . . . . . . . . . . . . . 622.11 Detekce poznámky pod čarou . . . . . . . . . . . . . . . . . . . . . . 632.12 Detekce titulku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642.13 Detekce odkazu na web . . . . . . . . . . . . . . . . . . . . . . . . . . 652.14 Use case diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.15 State machine diagram . . . . . . . . . . . . . . . . . . . . . . . . . . 752.16 Diagram stavového stroje - Spuštění převodníku . . . . . . . . . . . 772.17 Návrh vzhledu - spuštěn . . . . . . . . . . . . . . . . . . . . . . . . . . 822.18 Návrh vzhledu - nastavení převodu . . . . . . . . . . . . . . . . . . . 822.19 Návrh vzhledu - správa znaků . . . . . . . . . . . . . . . . . . . . . . 832.20 Návrh vzhledu - správa příkazů . . . . . . . . . . . . . . . . . . . . . 83

3.1 Realizace vzhledu - spuštěn . . . . . . . . . . . . . . . . . . . . . . . . 923.2 Realizace vzhledu - nastavení převodu . . . . . . . . . . . . . . . . . 923.3 Realizace vzhledu - správa znaků . . . . . . . . . . . . . . . . . . . . 933.4 Realizace vzhledu - správa příkazů . . . . . . . . . . . . . . . . . . . 93

4.1 Zobrazení dokumentu před konverzí ve v MS Word . . . . . . . . . 954.2 Zdrojový kód výstupního souboru . . . . . . . . . . . . . . . . . . . . 964.3 Zobrazení dokumentu po konverzi v LATEX formátu . . . . . . . . . 964.4 Zobrazení dokumentu před konverzí ve v MS Word . . . . . . . . . 97

13

Page 14: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4.5 Zdrojový kód výstupního souboru . . . . . . . . . . . . . . . . . . . . 984.6 Zobrazení dokumentu po konverzi v LATEX formátu . . . . . . . . . 984.7 Zobrazení dokumentu před konverzí ve v MS Word . . . . . . . . . 994.8 Zdrojový kód výstupního souboru . . . . . . . . . . . . . . . . . . . . 994.9 Zobrazení dokumentu po konverzi v LATEX formátu . . . . . . . . . 994.10 Zobrazení dokumentu před konverzí ve v MS Word . . . . . . . . . 1004.11 Zdrojový kód výstupního souboru . . . . . . . . . . . . . . . . . . . . 1004.12 Zobrazení dokumentu po konverzi v LATEX formátu . . . . . . . . . 1014.13 Zobrazení dokumentu před konverzí ve v MS Word . . . . . . . . . 1024.14 Zdrojový kód výstupního souboru . . . . . . . . . . . . . . . . . . . . 1024.15 Zobrazení dokumentu po konverzi v LATEX formátu . . . . . . . . . 1034.16 Zobrazení dokumentu před konverzí ve v MS Word . . . . . . . . . 1044.17 Zdrojový kód výstupního souboru . . . . . . . . . . . . . . . . . . . . 1054.18 Zobrazení dokumentu po konverzi v LATEX formátu . . . . . . . . . 106

14

Page 15: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Seznam tabulek

0.1 Mapovací tabulka UNIX . . . . . . . . . . . . . . . . . . . . . . . . . 230.2 Mapovací tabulka operačního systému MS Word . . . . . . . . . . . 23

1.1 Přehled datových typů . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.2 Určení velikosti papíru . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.3 Demonstrační tabulka . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2.1 Mapovací tabulka konstrukcí rovnic . . . . . . . . . . . . . . . . . . . 67

3.1 Parametrická tabulka 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 893.2 Parametrická tabulka 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 90

4.1 Mapovací tabulka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

15

Page 16: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 17: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Úvod

Uvedení do problematiky

Microsoft Office Word

Microsoft Office Word (dále pouze MS Word) patří mezi nejpoužívanější tex-tové procesory. Textový procesor je v informatice program sloužící k vytvá-ření formátovaného textu - na rozdíl od textových editorů, s nimiž jsou častošpatně spojovány. Textové editory postrádají schopnost měnit vzhled obsahudokumentu.

TEX

Mezi oblíbené (zejména v akademických kruzích) jazyky pro počítačovou sazbuje TEX. Zvláště v oborech jako je matematika, fyzika a informatika. Jedná se ovelmi silný makrojazyk. TEX je obecně považován za nejlepší nástroj pro sazbusložitých matematických vzorců. Je však i hojně využíván v běžné sazbě stejnětak jako jeho odvozeniny a nadstavby, zvláště pak rozšířující makra LATEX,kterým se v této práci věnujeme.

Konverze

Jelikož se popularita TEXu zvyšuje, nastala na trhu poptávka po převodníku,který by dokázal formátovaný text vytvořený v textovém procesoru Micro-soft Office Word překonvertovat do formátovaného textu sázecího jazyka TEX.Tímto převodníkem se v této práci zabýváme. Jeho návrhem, analýzou a reali-zací. V této práci se nebudeme zabývat tím, zda je ten či onen princip tvorbytextu lepší, či horší, nýbrž způsobem, jak z jednoho formátu udělat druhý.K realizaci využíváme vnitřní reprezentaci dat, jež MS Word vytváří formouobjektové hierarchie. Konkrétně se jedná o převod z Microsoft Office Word2003 objektové reprezentace do kolekce maker LATEX.

17

Page 18: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Úvod

Stanovení cílů a požadavků na implementovanýprodukt (funkční požadavky)

V této části jsou detailně popsány úkoly, jež má tato diplomová práce obsa-hovat.

Analýza použitých datových struktur objektového modelu MSWord

MS Word vytváří ze vstupního souboru datovou reprezentaci souboru vyjád-řenou objektovým modelem. Cílem tohoto úkolu je danou datovou strukturuobjektového modelu rozebrat, popsat a vysvětlit, které objekty se použijí akteré jsou naopak pro konverzi redundantní.

Analýza syntaxe formátu LATEX

Datová struktura vnitřní reprezentace dat je potřeba přeložit do LATEXovépodoby tak, aby formát a obsah textu zůstal stejný. K tomu je nezbytné znátpravidla pro zápis jazyka LATEX. Jako v předchozím úkolu není ke konverzipotřeba znát všechny funkce a příkazy.

Konverze

Pomocí znalostí datových struktur objektového modelu MS Word a znalostísyntaxe formátu jazyka LATEX je možno sestavit převodník. Cílem tohoto úkoluje pomocí konverzních tabulek a programovacího jazyka Visual basic for Ap-plication vytvořit převodník, který dokáže objektovou reprezentaci vytvoře-nou systémem MS Word vyjádřit ve formátu jazyka LATEX. Obsah a formátvstupního souboru musí zůstat zachován.

Znaková sada

MS Word disponuje velmi obsáhlou sadou znaků. Cílem tohoto úkolu je za-jistit, aby veškeré znaky, jež se mohou vyskytnout v MS Word, mohly býtpřevedeny do LATEX formátu. Význam a vzhled daného znaku však musí zů-stat zachován.

Styl textu

Styl textu jsou předem nastavené formáty a atributy textu. Uživatel si může vMS Word vybrat s předem nadefinovaných stylů, nebo si sám některý vytvořit,či upravit. Tento úkol požaduje vytvoření převodu těchto stylů a zachováníjejich významu a obsahu.

18

Page 19: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Stanovení cílů a požadavků na implementovaný produkt (funkční požadavky)

Formát textu

Každý text má svůj formát určený zarovnáním, pozicí a strukturou textu.Cílem tohoto úkolu je tento formát zachovat. Zarovnání, pozice a strukturatextu daného textu musí zůstat zachována.

Atributy textu

Každý text má mnoho atributů jako je velikost písma, druh písma, barvapísma, barva pozadí atd. Smyslem tohoto úkolu je tyto vlastnosti zachovat.Vzhled daného textu ve vstupním souboru musí být na pohled stejný jako textve výstupním formátu.

Hierarchie nadpisů

Stejně jako styl si může uživatel v MS Word vybrat s předem nadefinovanýchnadpisů, nebo si sám některý vytvořit, či upravit. Existuje 5 úrovní nadpisů.Cílem tohoto úkolu je zachovat tuto hierarchii. Zároveň je nezbytné dodržetstyl daného nadpisu.

Tabulky

MS Word umožňuje vytvoření tabulek, jejichž obsahem je libolně formátovanýtext. Cílem tohoto úkolu je zachovat vzhled dané tabulky včetně jejího obsahu.Zároveň je potřeba zajistit popis tabulky a odkaz na ní.

Vložené obrázky a další typy objektů

Ve vstupním souboru se mohou nacházet i grafické objekty. Cílem tohoto úkoluje zajistit jejich převod tak, aby se ve výsledném formátu zobrazily stejně.Zároveň je potřeba zajistit popis objektu a odkaz na něj.

Seznam použité literatury

Tento úkol pojednává o tom, že převodník musí umožnit zachovávat citace aseznam použité literatury. Zároveň je potřeba umožnit odkázat na libovolnouliteraturu.

Návrh uživatelského prostředí

Cílem tohoto úkolu je, aby byla aplikace uživatelsky příjemná a intuitivní.Neměla by chybět nápověda a možnost uživatelského přizpůsobení. Návrh uži-vatelského rozhraní se bude provádět pomocí Nielsenově heuristické analýzy.

19

Page 20: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Úvod

Testování

Posledním úkolem je zajištění testování. Aplikace by měla být jako správnýsoftware, náležitě otestován. Existuje několik druhů testování (White box,Black box), které budou na finálním produktu použity.

Popis struktury diplomové prácePopis struktury diplomové práce ve vztahu k vytyčeným cílům. Tato imple-mentační diplomová práce má 5 hlavních části.

• Úvod - seznámení s problematikou.

• Analýza - rozvaha nad existujícími řešení.

• Návrh - výběr nejvhodnějšího řešení, jež jsou v analýze popsány.

• Realizace - implementace nejvhodnějšího řešení a výsledná realizace.

• Testování - testování výsledného řešení.

Rešeršní zpracování existujících implementacíNa začátek před samotným návrhem aplikace je rozumné zjistit současný stav.Zjistit, zda podobná aplikace již neexistuje a pokud ano, tak jaký je její sou-časný stav. Po analýze současného stavu se teprve můžeme rozhodnout, zdamá smysl tuto aplikaci vůbec vytvářet.

Porovnání současných aplikací

Po důkladném prohledání webu jsme nalezli několik aplikací a metod, jež bydisponovaly funkcí odpovídající konvertoru z MS word souboru do LATEX for-mátu. Nalezené aplikace a metody konverze se dají rozdělit podle operačníhosystému. Pod Unixovým prostředím existuje několik metod, jenž jsou zdarma,jsou však bohužel zastaralé. Pod operačním systémem Windows od Microsoftjsou všechny aplikace komerčního typu a jejich použití je placené. Výrobcivšak zdarma poskytují zkušební lhůtu. Současné aplikace jsme vyzkoušeli aporovnali.

UNIX prostředí

Pro unixové prostředí se nachazí tyto metody a aplikace:

• WV - balík knihoven a nástrojů pro čtení MS Word dokumentů. Tentobalík knihoven si však nedokáže poradit s dokumenty psaném ve formátuMS Word 2003.

20

Page 21: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Rešeršní zpracování existujících implementací

• word2x - zastaralý nástroj pro generování LATEX formátu z MS Worddokumentu. Převádí pouze holý text. Vynechává obrázky a styly a tudížje prakticky nepoužitelný.

• HTML metoda - Tato metoda spočívá v převedení souboru do HTMLformátu. Následně se tento formát převede do LATEX formátu. Nejdříve seMS Word dokument převede pomocí WV knihoven do HTML formátu.Z tohoto formátu se poté perlovým skriptem s názvem gbuhtml2latexpřevede do výsledného LATEX formátu. Neporadí si však s tabulkami.

Operační systém MS Windows

Pro operačním systém MS Windows se nacházejí tyto aplikace:

• Word2TEX - Firma Chikrii Softlab nabízí na svém webu konvertor Word2TEX,jež nabízí konverzi MS Word dokumentu od verze 95 a výše. Konvertormá občas potíže s některými obrázky. K vyzkoušení nabízejí 30-denníverzi.

– Výrobce: Chikrii Softlab.

– Webová stránka: http://www.chikrii.com/.

– Ceny:

∗ normální cena: $99,∗ studentská sleva: $45,∗ profesionální licence: $300,∗ upgrade starší verze na novější: $25.

• Word-to-LATEX - Česká firma nabízející konvertor MS Word dokumentudo LATEX, nebo XML formátu. Firma ke konvertoru nabízí i české pro-středí a českou podporu. Zkušební verze je časově neomezená, je všakomezená počtem konverzí.

– Výrobce: Word-to-LaTeX.

– Webová stránka: http://www.wordtolatex.com.

– Ceny:

∗ normální cena: $99,∗ studentská sleva: $99,∗ profesionální licence: $289,∗ upgrade starší verze na novější : rok zdarma, poté je potřebakoupit nový produkt, nebo se spokojit se starým.

21

Page 22: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Úvod

• GrindEQ™ Math Utilities - konvertor MSWord dokumentu do LATEX for-mátu je zde součástí balíku utilit pojmenované GrindEQ™ Math Uti-lities. Mimo konvertoru zde nabízejí funkce jako je například převodLATEXu do MS Wordu, Normalizér, nebo Image do PostScript konver-tor.

– Výrobce: GrindEQ.– Webová stránka: http://www.grindeq.com.– Ceny:

∗ normální cena: $99,∗ studentská sleva: $49,∗ profesionální licence: $1300,∗ upgrade starší verze na novější : $12.

• Word-to-LATEX od SoftSea - tento produkt je až podezřele velmi podobnýproduktuWord-to-LATEX. Nejspíš se jedná o distributora, jenž si zakoupilprofesionální licenci.

– Výrobce: SoftSea.– Webová stránka: http://www.softsea.com.– Cena: $99.

Porovnání současně existujících implementací

Porovnání současných aplikací a metod jsou vyzobrazeny na tabulce porov-nání. Porovnali jsme služby a funkce, které jsou k danému konvertoru ne-zbytné. Čili podpora českých znaků, podpora obrázků, podpora tabulek, pře-vod stylů formátů a atributů písma, cena, kvalita uživatelské rozhraní, uži-vatelská podpora a podporovaná verze MS Wordu. Jelikož je tabulka velmirozsáhlá, je rozdělena do dvou podtabulek rozdělených podle operačního sys-tému. Mapovací tabulka 0.1 UNIX a mapovací tabulka 0.2 operačního systémuMS Word.

Závěr porovnání současně existujících implementací

• Z porovnání lze vidět, že pokud si chce člověk pořídit kvalitní konvertor,musí za něj zaplatit. Existují sice způsoby, které jsou zadarmo, má tovšak dopad na kvalitu konverze (chybějící tabulky, chybějící obrázky).

• Konvertory volně ke stažení jsou nepoužitelné. Kvalitní konvertory jsoupro akademické užití moc drahé.

• Žádná z distribucí nepodporuje MS Word 2003.

• Tato implemetační práce má tedy smysl a má i uplatnění na trhu.

22

Page 23: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Rešeršní zpracování existujících implementací

Tabulka 0.1: Mapovací tabulka UNIX

Funkce a služby WV word2x HTML metodaPodpora českých znaků Ano Ne NePodpora obrázků Ano Ne AnoPodpora tabulek Ano Ne NePřevod stylů, formátů a atributů písma Ano Ne AnoCena Ano Ano AnoUživatelské rozhraní Ne Ne NeUživatelská podpora Ne Ne NePodporovaná verze MS Wordu Od 2005 výše Všechny Všechny

Tabulka 0.2: Mapovací tabulka operačního systému MS Word

Funkce a služby Word2TEXod SoftSe Word-to-LATEX GrindEQ™Podpora českého kódování Ano Ano AnoPodpora obrázků S potížemi Ano AnoPodpora tabulek Ano Ano AnoPřevod stylů, formátů Ano Ano Anoa atributů písmaCena (normál/student/profi) $99/ $45/ $300 $99/ $99/ $289 $99/ $49/ $1300Uživatelské rozhraní Ne Ano AnoUživatelská podpora Ano Ano AnoPodporovaná verze MS Wordu Od 2007 výše Od 2007 výše Od 2007 výše

23

Page 24: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 25: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

KAPITOLA 1Analýza

V této kapitole budeme analyzovat prvky, které se podílejí na převodu externíreprezentaci vstupního textového dokumentu na výstup v LATEXu. Celý procesje znázorněn na tomto obrázku 1.1. Popis prvků figurující v tomto procesu jevysvětlen v následujícím výčtu.

• Externí reprezentace vstupního textového dokumentu. Jedná se o doku-ment, který chceme převést do LATEX formy.

• MS Word. MS Word ve kterém dokument otevřeme.

• Uživatel. Osoba, jež chce p6eložit dokument do LATEX formy.

• Externí reprezentace výstupního textového souboru.

• Vnitřní reprezentace vstupního textového souboru. Jedná se o vnitřnídatový model reprezentující vstupní textový dokument.

• Převodník. Cíl naší práce. Jeho úkolem je převádět vnitřní reprezentacevýstupního textového souboru do LATEX formy.

• Výstup v LATEXu. Obsah a vzhled externí reprezentace vstupního texto-vého dokumentu vyjádřený pomocí LATEXu.

Proces probíhá následujícím způsobem.

1. Uživatel spustí textový dokument, jenž chce převést do LATEX formy.

2. MS Word automaticky převede externí reprezentaci vstupního textovéhodokumentu na vnitřní reprezentaci vstupního textového dokumentu.

3. Uživatel spustí převodník, který pomocí převodních tabulek a algoritmůvytvoří výstupní soubor v LATEX formě.

25

Page 26: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

Obrázek 1.1: Převodník

1.1 Datová struktura objektového modelu MSWord

MS Word používá pro veškeré manipulace s textem dokumentu načtenéhoze vstupního souboru vnitřní objektovou reprezentaci. Díky tomu nemusímevstupní soubor syntakticky analyzovat a dělit ho na dílčí prvky. Můžeme pra-covat rovnou s objekty, jež nám MS Word automaticky po načtení souboruvytvoří. V této kapitole si popíšeme datovou strukturu tohoto modelu. Celástruktura je velmi obsáhlá, proto si popíšeme pouze části, které jsou potřebnéke konverzi. Hlavním a kořenovým prvkem tohoto objektového modelu je ob-jekt ActiveDocument, který reprezentuje dokument, který máme otevřený.Tento objekt se skládá z kolekcí, jejichž hlavni hierarchie je znázorněna naobrázku 1.2. Kolekce jsou skupiny objektů stejných datových typů. Strukturakolekce je u všech kolekcí stejná a je znázorněna na obrázku 1.3. Např. kolekceCharacters obsahuje kromě metody pro práci s kolekcí také objekty typu Cha-racter, jež jsou na obrázku pojmenovány jako Item 1 ... Item N. Hierarchie naobrázku 1.2 je uspořádána následovně.

26

Page 27: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.1. Datová struktura objektového modelu MS Word

1.1.1 Popis hierarchie ActiveDocument

• Active Document - je kořenový prvek celé hierarchie. Obsahuje všechnyobjekty typu Character (znak), všechny objekty typu Word (slovo),všechny objekty typu Sentence (věta), všechny objekty typu InlineShape(vložený objekt) a všechny objekty typu Table (Tabulka). Všechny tytoobjekty uskupuje pomocí následujících kolekcí.

• Sentences - kolekce objektů typu Sentence. Tato kolekce soustřeďujevšechny věty obsažené v dokumentu. Kromě objektů obsahuje kolekcetaké metody. Např. metodu Count pro zjištění počtu vět v dokumentu.Zároveň konkrétní objekt Sentence obsahuje všechny objekty typu Cha-racter (znak) a všechny objekty typu Word (slovo), které do dané Sen-tence(věty) patří. Např. věta: Kobyla má malý bok obsahuje kolekci slov,jež jsou Kobyla, má, malý a bok. A kolekci znaků K,o,b,y,l,a, ,m,á,,m,a,lý, ,b,o,k. S oběma těmito kolekcemi může libovolně pracovat. Dálese též odkazuje na kolekci, jejíž je součástí. Např. konkrétní věta se můžeodkazovat na kolekci vět. Tato kolekce však v sobě má pouze tuto větu.Tímto se ze stromu stává graf a musíme si tedy dát pozor na zacyklení.

• Words - kolekce objektů typu Word. V případě, že se na ní dotazujemez objektu ActiveDocument, obsahuje tato kolekce všechna slova. V pří-padě, že se na ní dotazujeme z objektu věta, obsahuje pouze slova danévěty. V případě, že se na ní dotazujeme z objektu slovo, obsahuje tatokolekce pouze toto slovo. V případě, že se na ní dotazujeme z objektuznak, obsahuje tato kolekce pouze tento znak.

• Characters - kolekce objektů typu Character. V případě, že se na nídotazujeme z objektu ActiveDocument, obsahuje tato kolekce všechnyznaky. V případě, že se na ní dotazujeme z objektu věta, obsahuje pouzeznaky dané věty. V případě, že se na ní dotazujeme z objektu slovo,obsahuje pouze znaky daného slova. V případě, že se na ní odkazuje zobjektu znak, obsahuje tato kolekce pouze tento znak.

• InlineShapes - kolekce objektů typu InlineShape (vložený objekt). Vpřípadě, že se na tuto kolekci dotazujeme z objektu ActiveDocument,obsahuje tato kolekce veškeré vložené objekty. V případě, že se na nídotazujeme z objektu věta, slovo, nebo znak, obsahuje pouze vloženéobjekty, kterých jsou věta, slovo, nebo znak součástí.

• Tables - kolekce objektů typu Table.V případě, že se na tuto kolekcidotazujeme z objektu ActiveDocument, obsahuje tato kolekce veškerétabulky. V případě, že se na ní dotazujeme z objektu věta, slovo, neboznak, obsahuje pouze tabulky, kterých jsou věta, slovo, nebo znak sou-částí.

27

Page 28: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

Obrázek 1.2: Datová struktura objektového modelu

Obrázek 1.3: Struktura kolekce

28

Page 29: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.1. Datová struktura objektového modelu MS Word

Elementární datovou strukturou je znak a tudíž budeme veškeré informaceo vzhledu textu čerpat z něho. Samozřejmě, že by se vzhled dal čerpat i z jehoabstraktů jako je slovo, nebo věta, ale může zde nastat problém, jež budu figu-rovat na následujícím příkladu. Představme si toto slovo: "napůl". Toto slovo jepodtržené pouze do půlky, čímž se dostáváme k jádru problému. Kdybychomtotiž čerpali vzled z objektu slovo, dostali by jsme informaci o tom, že je slovocelé podtržené (nebo, že není podtržené vůbec), což je nežádoucí. Výsledkempříkladu tedy je, že z důvodů, že se vzhled textu může měnit od písmena kpísmenu, musíme volit jako elementární datovou strukturu znak, neboli ob-ject Character. Proto se dále budeme zabývat objektovým modelem pouzez pohledu znaku. Tento pohled lze vidět na obrázku 1.4.

1.1.2 Popis objektu Character a jeho částí

Následuje popis vlastností objektu typu Character (znak).

Atributy textu

• Bold - tato metoda vrací jako parametr hodnoty

– -1 je-li znak tučné.– 0 je-li znak netučný.

• Italic - tato metoda vrací jako parametr hodnoty

– -1 je-li znak typu italic.– 0 není-li znak typu italic.

• Underline - tato metoda vrací jako parametr hodnoty

– 1 je-li znak podtržený.– 0 není-li znak podtržený.

• Font - Pod tento objekt spadají ještě dvě další metody , které ke konverzibudeme potřebovat.

– Size - Metoda Size objektu Font vrací velikost znaku v tzv. poin-tech. 1 point = 0,3528 mm.

– Color - Metoda Color objektu Font vrací barvu ve 4 bytech veformátu 00BBGGRR, kde R je obsažení červené v rozmezí od 0-255, G je obsažení zelené v rozmezí 0-255 a B je obsažení modrétaké v rozmezí 0-255.

• HighlightColorIndex - tato metoda vrací jako parametr číslo, kteréoznačuje typ barvy, kterým je písmo zvýrazněno. Je-li 0, písmo zvýraz-něné není. Pro kladné hodnoty má Word vlastní tabulku, kde číslo určujetyp barvy.

29

Page 30: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

Obrázek 1.4: Objekt Character a jeho členění

30

Page 31: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.1. Datová struktura objektového modelu MS Word

• Text - tato metoda vrací jako parametr hodnotu znaku v Unicode kó-dování.

Formátování textu

• List - tento objekt reprezenteje skutečnost, zda je znak součástí něja-kého výčtu (neboli formátovaného prostředí), či nikoliv. Zda tomu takje zjistíme díky metodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se ve výčtu na-chází.

– Vrací-li metoda count nulovou hodnotu, znak se ve výčtu nena-chází.

Pod tento objekt spadají ještě dvě metody, které ke konverzi budemepotřebovat.

– ListType - Metoda ListType objektu List vrací typ výčtu. Typvýčtu může být:

∗ číslovaný,∗ nečíslovaný.

– ListLevelNumber - Metoda ListLevelNumber objektu List vracíúroveň vnoření. Může nabývat kladných hodnot od 1-9.

• ParagraphFormat - tento objekt reprezentuje skutečnost, zda je znaksoučástí nějakého odstavce, či nikoliv. Zda tomu tak je, zjistíme díkymetodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se v odstavci na-chází.

– Vrací-li metoda count nulovou hodnotu, znak se v odstavci nena-chází.

Pod tento objekt spadá metoda, kterou budeme ke konverzi také potře-bovat. Jedná se o metodu alignment, která určuje zarovnání. A můženabývat těchto hodnot:

– 0 - pro zarovnání nalevo,

– 1 - pro zarovnání na střed,

– 2 - pro zarovnání napravo,

– 3 - pro zarovnání do bloku.

31

Page 32: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

Tabulky

• Tables - kolekce tabulek. Zda se znak v nějaké tabulce nachází, zjistímedíky metodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se v tabulce na-chází.

– Vrací-li metoda count nulovou hodnotu, znak se v tabulce nena-chází.

Tato kolekce tabulek v sobě obsahuje i kolekci řádků, sloupců a buněk.Každá tabulka obsahuje pouze dané objekty, které jsou její součástí.

• Cells - kolekce buňek. Zda se znak v nějaké buňce tabulky nachází,zjistíme díky metodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se v buňce nachází.– Vrací-li metoda count nulovou hodnotu, znak se v buňce nenachází.

• Columns - kolekce sloupců. Zda se znak v nějakém sloupci tabulkynachází, zjistíme díky metodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se ve sloupci na-chází.

– Vrací-li metoda count nulovou hodnotu, znak se ve sloupci nena-chází.

• Rows - kolekce řádků. Zda se znak v nějakém řádku tabulky nachází,zjistíme díky metodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se v řádce nachází.– Vrací-li metoda count nulovou hodnotu, znak se v řádce nenachází.

Odkazy

• Hyperlinks - kolekce odkazů . Zda se znak v nějakém odkazu zjistímedíky metodě count, jež tato kolekce nabízí.

– Vrací-li metoda count nenulovou hodnotu, znak se nachází ve slově,které je zároveň odkazem.

– Vrací-li metoda count nulovou hodnotu, znak se nenachází ve slově,které je zároveň odkazem.

• Pod objekt Hyperlink spadá metoda, kterou ke konverzi budeme potře-bovat. Jedná se o metodu Address, jež vrací adresu, na kterou danýobjekt Hyperlink odkazuje.

32

Page 33: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.2. Visual Basic for Applications

Vložené objekty

• InlineShapes - kolekce vložených objektů. Zda je znak součástí něja-kého vloženého objektu, zjistíme pomocí metody count.

– Vrací-li metoda count nenulovou hodnotu, znak se ve vloženémobjektu nachází.

– Vrací-li metoda count nulovou hodnotu, znak se ve vloženém ob-jektu nenachází.

Styly a nadpisy

• Style - tento objekt (konkrétně jeho metoda), vrací jako parametr názevstylu, v kterém se nachází. Defaultně jsou tyto styly Nadpis 1 - Nadpis5. Uživatel si je však může změnit.

1.2 Visual Basic for Applications

Historie programovacího jazyku Visual Basic pro Aplikace (dále jen VBA)sahá do roku 1994, kdy byl poprvé integrován do aplikací Microsoft Excel aProject (verze 95). Jedná se o jednoduché, velmi silně objektově orientovanéprostředí. Využívá technologii ActiveX, což je objektově orientovaný proto-kol (Framework), kterým aplikace zveřejňují a umožňují použití svých služebostatním aplikacím v prostředí operačního systému Windows. Smysl Active Xje myšlenka, že každá nová aplikace v prostředí operačního systému Windowsnemusí být programována od základů. Většina aplikací již v sobě obsahujestejné funkce, jež by mohly být mezi aplikacemi sdílené. Například stejnoukontrolou pravopisu disponuje Word i Outlook Express, a tak na místo psanídvou samostatných verzí kódu, postačí jedna, která bude sdílena mezi oběmaaplikacemi. Ušetří se tím mnoho času programování, testování a následnýchoprav chyb. Pomocí ActiveX se tedy mohou vytvářet stavební bloky, z jejichžpomocí se potom sestaví větší aplikace. Programovací jazyk VBA zaujme tím,že oproti běžným programovacím jazykům nevyžaduje své vlastní vývojovéprostředí. Veškeré programování pod tímto jazykem se provádí např. v pro-středí nástrojů Microsoft Office, jež je většinou k dispozici na každém počítači.Microsoft Office prezentuje veškerá svá data jako objekty se kterými VBAmůže a umí pracovat. Tyto objekty byly představeny v předchozí kapitole.

1.2.1 Úvod do programování ve VBA

Data

VBA není striktně typový jazyk. To znamená, že typ proměnné si programo-vací jazyk určí sám až při jejím použití.

33

Page 34: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

• Proměnné. Příklad: dim i as integer. Tato deklarace určuje, že překladačbude pracovat s proměnnou, jež se nazývá i a bude typu celé číslo. Jakuž bylo řečeno, jazyk není striktně typovaný, takže máme dvě možnostideklarace.

– Implicitní deklarace. Do proměnné se zapisuje před jejím vlastnímpoužitím. Příklad: Dim Prijmeni As String

– Explicitní deklarace. Deklarace se provádí přímo při jejím použití.Příklad: Prijmeni="Novák"

• Konstanty. Příklad: Const Pi = 3.14

V tabulce se nachází přehled datových typů, jejich velikost a rozsah 1.1.

Výrazy

Výraz je konstrukce složená z proměnných, operátorů a volání metod, kteréjsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.

• Aritmetické - ,̂*,/,/,Mod,+,-

• Relační - <,<=,>,>=,<>,=,Is,Like

• Spojovací - &,+

• Logické - And, Eqv, Imp, Not, Or, Xor

Příkazy

Příkazy jsou zhruba shodné s větami běžných jazyků. Příkaz tvoří kompletníjednotku vykonávání kódu.

• Přiřazovací výrazy

• Volání metod

• Tvoření dat (definice, deklarace)

Bloky

Blok je skupina žádného nebo více příkazů, která může být použita kdekolimísto normálního příkazu.

34

Page 35: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.2. Visual Basic for Applications

Tabulka 1.1: Přehled datových typů

Datový typ Velikost paměti RozsahByte 1 bajt 0 až 255Boolean 2 bajty True nebo FalseInteger 2 bajty -32 768 až 32 767Long 4 bajty -2 147 483 648 až 2 147 483 647Single 4 bajty -3,402823E38 až -1,401298E-45 pro záporné hodnoty

1,401298E-45 až 3,402823E38 pro kladné hodnotyDouble 8 bajtů -1,79769313486232E308 až -4,94065645841247E-324

pro záporné hodnoty4,94065645841247E-324 až 1,79769313486232E308pro kladné hodnoty

Currency 8 bajtů -922 337 203 685 477,5808 až922 337 203 685 477,5807

Decimal 14 bajtů +/-79 228 162 514 264 337 593 543 950 335Date 8 bajtů Od 1. ledna 100 do 31. prosince 9999Object 4 bajty Libovolný odkaz na ObjectString 10 bajtů Od 0 do přibližně 2 miliard(proměnná délka) + Délka řetězceString Délka řetězce Od 1 do přibližně 65 400(pevná délka)Variant (s čísly) 16 bajtů Libovolná číselná hodnota

až do rozsahu typu DoubleVariant (se znaky) 22 bajtů Od 1 do přibližně 65 400

+ délka řetězceType Podle typů, Podle typů,(Struktura) z nichž je složen z nichž je složen.Collection Podle objektů Podle objektů(Kolekce) jež obsahuje jež obsahuje.

Příkazy pro ovlivnění průběhu cyklu

• Podmíněné zpracování.

– Jednoduchá forma. Příklad: If podmínka Then Příkaz Endif– Úplná forma. Příklad: If podmínka Then Příkaz Else Příkaz Endif– Rozhodovací větvení. Příklad: Select Case Číslo Case 1 Příkaz1

Case 2 Příkaz2 Case Else PříkazDefault End Select

• Cykly

– For. Příklad: For i=0 To 10 Příkaz Next i– Do

35

Page 36: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

∗ S testem na konci. Příklad: Do While Podmínka Příkaz Loop∗ S testem na začátku. Příklad: Do Příkaz Loop While Pod-mínka

– For Each. Příklad: For Each item In Array Příkaz Next

Moduly a procedury

Modul je struktura obsahující globální proměnné a procedury typu Function,Sub a Property.

• Function - klasická funkce s návratovou hodnotou a vstupními para-metry.

• Sub - klasická procedura, nevrací žádnou hodnotu.

• Property - vlastnost předem nadefinovaná uživatelem.

Kolekce a pole

• Kolekce - Objekt kolekce je uspořádáná množina prvků, kterou lze chá-pat jako samostatnou jednotku. Může odkazovat na skupinu souvisejí-cích položek jako na jediný objekt. Příklad: Dim X As New Collection

• Pole - klasické pole, deklaruje se stejně jako proměnné.

– Dynamické - délka pole není předem známa a jeho délka se tudížv průbéhu programu uzpůsobuje počtu položek.

– Statické - délka pole je již staticky přiřazena na začátku programu.

1.3 TEX a LATEX

TEX je jazyk pro sazení textu. Jeho tvůrcem je profesor Donald Ervin Knuth,který byl nespokojen se školním nakladatelstvím. Konkrétně s přístupem na-kladatelství k sázení jeho skript. Ve skriptech se objevovalo mnoho chyb, pře-devším v matematických vzorcích, a ani typografie nedosahovala dobré úrovně.Stalo se tomu tak ve 70. letech 20. století.

PlainTEX

Jelikož je TEX sám o sobě uživatelsky velmi nepříjemný, rozhodl se DonaldErvin Knuth k napsání sady maker, jenž měly usnadnit práci s TEXem, po-jmenoval je PlainTEX. Tento poměrně jednoduchý formát je občas nesprávnězaměňován se skutečným programem TEX.

36

Page 37: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.3. TEX a LATEX

LATEX

Vychází z PlainTEXu. Je to jeho nástavba, neboli abstrakce. LATEX poskytujesadu maker pro vytváření komplexních dokumentů. Je mnohem více značko-vacím jazykem než jeho předchůdce PlainTEX. Integruje podporu pro členěnítextu, obsah, křížové odkazy, živá záhlaví, číslování rovnic, citace, plovoucítabulky a obrázky, bez toho, aniž by autor musel vědět, jak se má všechnoformátovat. Tuto nadstavbu sestavil v roce 1985 americký počítačový specia-lista Leslie Lamport.

LATEX 2ε

Roku 1989 spustili pánové Leslie Lamport, Frank Mittelbach, Chris Rowlaya Rainer Shöpf projekt LATEX 3, jehož cílem je sestavit výkonnou a optima-lizovanou sadu základních příkazů doplněnou různými baličky, které podlepotřeby doplní specifické funknce. Jedná se však o problém dlouhodobý a po-slední zmíňka o něm byla v roce 1997 v knize Goossens. Proto vznikl vývojovýmezistupeň s názvem LATEX 2ε.

1.3.1 Syntaxe

• Příkazy - Každý příkaz v LATEXu začíná znakem \(zvaného backslash) asvým jménem, jež je tvořeno řetězcem písmen, nebo jedním nepísmenem.Po názvu následují dva druhy argumentů.Příklad: \názevPříkazu[NepovinnéParametry]{PovinnéParamtry}

– Povinné par. - jež jsou umístěny ve složených závorkách {}– Nepovinné par. - jež jsou umístěny v závorkách hranatých [ ]

• Prostředí - Určitá část dokumentu, na kterou je aplikováno nějakéformátování, nebo speciální syntaxe, seznamy, zarovnání textu, apod.Zároveň definuje rozsah působnosti příkazů. Je-li použit příkaz uvnitřprostředí, má vliv pouze v tomto prostředí.Příklad: \begin{Název prosředí}...end{Název prosředí}

• Poznámka. Příklad: %toto je poznámka

• Mezery a nové řádky. Je - li mezi slovy více mezer, tabulátorů, nebokonec řádku, LATEX to považuje za jednu mezeru.

• Speciální znaky. LATEX obsahuje speciální znaky, které se nezobrazína výstupu. Musí být vyvolány pomocí speciálních příkazů.

1.3.2 Struktura dokumentu

Dokument v LATEXu se dělí do dvou částí. Hlavička, jež obsahuje základnídefinici celého dokumentu a zbytek, kde se nachází vlastní text.

37

Page 38: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

1.3.2.1 Třída dokumentu

Třída dokumentu definuje defaultní nastavení vzhledu celého dokumentu. Tentopříkaz má nepovinné atributy "volby"a povinný atribut "třída".Příklad: \documentclass [volby] { třída} .

Nepovinné atributy

• Velikost písma : 10pt,11pt,12pt.

• Velikost papíru : je zobrazena v následující tabulce 1.2.

• Změnu orientace papíru na šířku provede atribut landscape.

• Zobrazení černého čtverečku, jež značí problém s umístěním textu nakonci řádku.

– zobrazení - draft

– nezobrazení - final

• Formátování stránky.

– pro jednostranný tisk - oneside

– pro dvoustranný tisk - twoside

• Určení, kde může začínat nová kapitola.

– kdekoliv - openany

– napravo - openright

• Nastavení sazby.

– do jednoho sloupce - onecolumn

– do dvou sloupců - twocolumn

• Sazba titulní stránky a abstraktu na samotné stránce.

– povolení - notitlepage

– zakázání - titlepage

• Způsob sazby literatury - openbib

• Zobrazení čísla rovnice na levé straně - leqno

• Zarovnání rovnice nalevo - fleqn

38

Page 39: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.3. TEX a LATEX

Tabulka 1.2: Určení velikosti papíru

Atribut Velikost v palcích Velikost v mmletterpaper 8.5"x 11" 216mm x 279mmlegalpaper 8.5"x 14" 216mm x 356mmexecutivepaper 7.25"x 10.5" 184mm x 267mma4paper 210mm x 297mma5paper 148mm x 210mmb5paper 176mm x 250mm

Povinné atributy

• article - nejčastější a nejvšeobecnější použití. Určena k psaní vědeckýchčlánků.

• report - Určena pro psaní delších textů.

• book - Určena pro psaní knih.

• slides, beamer - Určeny pro tvorbu prezentací. Třída beamer je novějšíverze slides.

• letter- Určena pro psaní dopisů.

1.3.2.2 Balíčky

Balíčky je myšleno rozšířění LATEX maker napsané prostřednictvím PlainTEXu.Těchto balíčků existuje mnoho, proto zde bude pro příklad vypsáno pouzedeset u nás nejpoužívanějších.

• graphicx - Díky tomuto balíčku můžeme pracovat s grafikou jako jsouobrázky.

• ammssymb - Přidává nové matematické symboly, které jsou použité vmatematickém módu.

• amsmath - Obsahuje matematické rozšíření pro LATEX.

• bm - Umožňuje použití řeckých znaků v matematickém módu.

• color - Slouží k vytváření barevných pozadí a ke změně barvy písma.

• babel - Snaží se poskytnout podporu pro sazbu ve všech evropskýchjazycích, jež používají latinku.

• inputenc - Slouží k nastavení kódování. Můžeme si vybrat například meziWindows-1250, UTF-8 ,nebo latin2 kódováním.

39

Page 40: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

• czech - Slouží k informaci, že daný dokument bude psaný v češtine.LaTeX se podle toho zařídí.

• fontenc - Slouží k zajištění načtení správných fontů.

• a4wide - Slouží k nastavení okrajů na evropské poměry.

1.3.3 Hierarchické členění textu

Každý text se dá členit do kapitol, sekcí, paragrafů apod. K jejich sázení máLATEX samozřejmě nadefinované své příkazy. Veškeré členění je automatickyčíslováno. Číslování se dá vypnout přidáním hvezdičky na konci názvu příkazu.Všechny číslované části jsou automaticky přidávány do obsahu. Následujícívýpis je řazen od nejvyšší úrovně členění po nejmenší.

• Část knihy - Nejvyšší úroveň. Označuje se tak část knihy. Pro jejívyvolání se používá příkaz \part. Při psaní této diplomové práce všakpoužita nebyla.

• Kapitola - Druhá nejvyšší úroveň. Každá kapitola je při tisku ozna-čena slovem "Kapitola" a pořadovým číslem kapitoly, pod tím je vysá-zen vlastní název. Nová kapitola je vždy vysázena na novou stránku.Pro Kapitolu se používá příkaz \caption.

• Sekce - Jedná se o nejpoužívanější členění. Číslování jednotlivých sekcí apodsekcí je hierarchické. Pro vytvoření sekce se používá příkaz \section.

• Podsekce - Nižší úroveň sekce. Pro vytvoření sekce se používá příkaz\subsection.

• Podpodsekce - Nejnižší úroveň sekce. Pro vytvoření sekce se používáanalogicky příkaz \subsubsection.

• Paragraf - Po podpodsekci následuje paragraf. Text, jenž následuje ponázvu paragrafu nepokračuje na dalším řádku, ale rovnou vedle něho.Pro jeho vyvolání se používá příkaz \paragraph.

• podparagraf - Poslední a nejnižší forma členění je podparagraf prokterý se používá příkaz \subparagraph.

1.3.4 Formátování textu

Může nastat situace, kdy je potřeba násilně ukončit řádek, stránku, nebo zasebou použít více mezer (jež LATEX úmyslně ignoruje). Pro tyto účel disponujelatex těmito příkazy.

• Nová stránka - Násilný přechod na novou stránku se dá zařídit třemizpůsoby:

40

Page 41: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.3. TEX a LATEX

– \newpage– \clearpage– \pagebreak - tento příkaz se navíc bude snažit zaplnit stránku roz-

tažením pružných mezer.

• Nový odstavec - Nový odstavec můžeme vložit dvěma způsoby

– Nejméně jedním prázdným řádkem.– Pomocí příkazu \par

• Nový řádek - pro násilný přechod na nový řádek (Stiknutí enteru totižnemá pro LaTex vliv) se používají příkazy

– \newline– \linebreak– \\[velikost], kde volitelný parametr velikost udává, kolik místa se

má vynechat. Může se zadat záporná hodnota. Velikost můžemeurčit v mm, cm, in, ex, nebo pt.

• Mezera - pro vysázení mezery existuje několik příkazů:

– Vertikální mezery∗ Vertikální mezera přesně dané velikosti se vysází pomocí pří-kazu \vspace{velikost}, kde velikost značí výšku dané velikosti.Tato forma, ale nevykreslí mezeru na začátku, nebo na koncistránky. Oproti tomu příkaz \vspace{velikost}, jenž má navíchvězdičku, jí vysází vždy.

∗ Speciální vertikální mezera, která se vysází tak dlouhá, jak jento je možné. Platí pro ní příkaz \vfill

– Horizontální mezery∗ Pro vysázení jednoslovné mezery se používá příkaz \_∗ Pro menší mezery, než je mezislovní, se používají příkazy:

· \,· \quad· \qquad

∗ Pro mezery o velikosti jedné číslice se použije příkaz \enspace∗ Mezera přesně dané velikosti se vysází pomocí příkaz \hspace{velikost},

kde velikost značí šířku dané velikosti. Tato forma, ale nevy-kreslí mezeru na začátku řádku. Oproti tomu příkaz \hspace{velikost},jež má navíc hvězdičku jí vysází vždy.

∗ Speciální horizontální mezera, která se vysází tak dlouhá, jakjen to je možné. Platí pro ní příkaz \hfill

41

Page 42: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

∗ Je-li potřeba mezeru maximálně natáhnout a zároveň vyplnittečkami, nebo čárou, se dá použít jeden z těchto příkazů:· \hrulefill - pro zaplnění čárou· \dotfill - pro zaplnění tečkami

∗ Je-li potřeba mezeru maximálně natáhnout a zároveň vyplnitšipkou se může jeden z těchto příkazů:· \leftarrowfill - šipka bude mít orientaci doleva· \dotfill - šipka bude mít orientaci doprava

∗ Pro vyplnění maximální mezery svorkami pak následují tytopříkazy:· \upbracefill· \downbracefill

– Nezlomitelná mezera. Většinou se vkládá mezi předložku a dalšíslovo. Pro použití se použije příkaz ∼

• Je-li potřeba stránku od začátku řádku odsadit, použije se příkaz \indent.Je-li to nežádoucí, použije se naopak příkaz \noindent.

1.3.5 Formátovací prostředí

Formátovací prostředí se dá chápat jako hromadné formátování delšího textu,u jehož se předpokládá nějaké uspořádání. Latex disponuje různými druhy pro-středí, které se používají pro jednoduché utváření efektů. Největším prostředímje prostředí document, kterým musí každý text začínat. Definice prostředí jestejné a pro všechny prostředí platí, že musí začít tagem \begin{povinnéPar.}a končit tagem \end{povinnéPar.}. Uvedené parametry v počátečním tagua koncovém tagu musejí být stejná. Prostředí se nesmí překrývat. Mohou sevšak do sebe vnořovat.

• Výčtová prostředí

– Enumerate je prostředí, které umožňuje zadávání číslovaných polo-žek.

– Itemize je prostředí, které umožní k položkám přidat nějaký ne-literální symbol (např. Puntík). Pro představu je pomocí itemizevytvořen tento výčet prostředí.

– Description, prostředí pro sazbu popisných výčtů. Používá se na-příklad pro encyklopedické výklady.

– Trivlist je nejjednodušší prostředí, které je funkčností stejný jakoenumerate, nebo itemize. S tím rozdílem, že nevkládá před položkyžádné číslo, nebo symbol.

42

Page 43: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.3. TEX a LATEX

– List je nejobecnější výčtové prostředí, z něhož můžou být ostatníodvozena. Pomocí dvou parametrů, jež první určuje formování znakua druhý formátování, můžeme docílit libovolného výčtového pro-středí. K druhému parametru se nastavuje i parametr odsazení:

∗ \Rightmargin - nastavuje odsazení od pravého kraje∗ \Leftmargin - nastavuje odsazení od levého kraje∗ \Parsep - určuje vzdálenost mezi odstavci jedné položky∗ \Itemsep - určuje vzdálenost od návěští k textu položky∗ \Listparident - nastavuje odsazení odstavce∗ \Labelwidt - slouží k určení šířky návěští

– Prostředí thebibliography se používá pro sazbu použité literatury.Toto prostředí je použito na konci diplomové práce v sekci "Použitáliteratura"

– Prostředí theindex se používá k vytváření rejstříků.

• Sloupcová prostředí

– Tabular je prostředí, kterým můžeme tvořit libovolné tabulky, včetněviditelných čar oddělujících buňky.

– Tabbing je v podstatě tabular, akorát jsou zde čáry, jež oddělujíbuňky neviditelné.

• Textová prostředí

– Quote se používá pro vysázení krátkého citátu.– Quotation je stejné jako quote s tím rozdílem, že je odsazen první

řádek odstavců.– Flushleft je klasické zarovnání doleva– Flushright je obdobné zarovnání doprava– Center je zarovnání na střed– Verse je prostředí pro sazbu veršů– Verbatim je prostředí, které nepodléhá formátování. Hodí se napří-

klad pro výpis zdrojového kódu.– Minipage, prostředí chovající se jako malá stránka.

• Plovoucí prostředí v Textu můžeme narazit na objekty, které nemajípřesné umístění. K těmto objektům se používá tzv. plovoucí prostředí.Používá se převážně pro obrázky a tabulky. Pomocí plovoucích objektůjsou vysázeny obrázky a tabulky v této diplomové práci. Z důvodů ty-pografických konvencí nevadí, když je obrázek umístěn jinde, než bylopůvodně zamýšleno.

43

Page 44: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1. Analýza

Tabulka 1.3: Demonstrační tabulkabuňka11 buňka12buňka21 buňka22

– figure - plovoucí obrázek.∗ K použití plovoucího obrázku je zapotřebí balíček graphicx.∗ Požadovaný obrázek se umístí mezi \begin{figure} a \end{figure}.∗ Vysázení obrázku pomocí příkazu \includegraphics{NázevObrázku}.∗ Chceme-li na obrázek odkazovat z textu, použijeme příkaz\ref{fig:NázevObrázku}.

– table - plovoucí tabulka∗ Požadovaná se umístí mezi \begin{table} a \end{table}.∗ Pro nastavení zarovnání v tabulce se musí vnořit ješte jednabegin-end dvojice. A to dvojice \begin{tabular}{| z | z |} a\end{tabular}, kde | označuje existenci vertikálních rámečkůa z je parametr zarovnání, který může nabývat hodnoty:· l - pro zarovnání sloupce doleva,· r - pro zarovnání sloupce doprava,· c - pro zarovnání sloupce na střed.

∗ Obsah tabulky je potom ve tvaru: \hline buňka11 & buňka12\\ buňka21 & buňka22 \\ \hline , kde \hline označuje existencihorizontálních rámečků, & odděluje sloupce a \\ řádky. Příkladtéto tabulky je vyobrazen na této demonstrační tabulce 1.3.

∗ Chceme-li na tabulku odkazovat z textu, použijeme příkaz\ref{tab:NázevTabulky}.

1.3.6 Písmo

• Rodina písma

– pro deklaraci nové rodiny písma se použije příkaz \DecklareFontFamily {kódování}.– pro definici potom \DecklareFontShape {kódování} {jméno rodiny} {váha}

{tvar} {seznam velikostí a jméno souboru}.

• Velikost písma - k nastavení velikosti písma slouží tyto příkazy, seřa-zené od nejmenšího, k nejvěšímu písmu.

– \tiny– \scriptsize– \footnitesize

44

Page 45: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

1.3. TEX a LATEX

– \small– \normalsize– \large– \Large– \LARGE– \huge– \Huge

• Zvýraznění písma- běžně používané písmo bez zvýraznění se nazýváantikva. Pomocí jednoduchých příkazů však toto písmo můžeme zvýraz-nit.

– Pro zvýraznění pasáží textu, citátů apod. se používá tzv. italika,neboli kurzíva. Je to písmo skloněné na pravou stranu a je mírněužší než antikva. Více připomíná rukpis. Pro toto zvýraznění mů-žeme použít příkaz, nebo prostředí.

∗ Kurzíva jako prostředí - \begin{it}...\end{it}.∗ Kurzíva jako příkaz - \it.

– Další možností zvýraznění je podtržení. Opět má i toto zvýrazněnídva možné způsoby zápisu.

∗ Podtržení jako prostředí - \begin{underline}...\end{underline}.∗ Odtržení jako příkaz - \underline.

– Poslední nezbytnou možností zvýraznění je tučné písmo, jež se dáopět zapsat dvěma způsoby.

∗ Tučné písmo jako prostředí - \begin{bf}...\end{bf}.∗ Tučné písmo jako příkaz - \bf.

Příkazové způsoby jsou zastaralé, ale přesto kompatibilní. Všechny tytozvýraznění se dají kombinovat. Například pro tučné, podtržené písmo skurzívou by to bylo: \it{\underline{\bf{ TEXT}}}.

• Explicitní nastavení písma - Chceme-li dodatečně přenastavit samo-statné atributy daného písma, dají se použít tyto příkazy:

– Pro explicitní kódování se použije příkaz \fontencoding{kódování}.– Pro explicitní nastavení fontu se použije příkaz \fontfamily{rodina}.– Pro explicitní váhu písma se použije příkaz \fontseries{váha}.– Pro explicitní tvar písma se použije příkaz \fontshape{tvar}.– Pro explicitní velikost písma se použije příkaz \fontsize{tvar}.

45

Page 46: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 47: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

KAPITOLA 2Návrh konverze

2.1 Návrh převoduJelikož z předchozí kapitoly známe veškeré potřebné informace k převodu,můžeme navrhnout převodník. Z analýzy vyšlo také najevo, že převod se musíprovádět po znacích (popsáno v kapitole 1.1.1). V následujícíh podkapitoláchse zaměříme na návrh převodu z objektového modelu MS Word 2003 (popsánv kapitole 1.1) do výstupního souboru v LATEX (popsán v kapitole 1.3) forměprostřednictvím VBA (popsán v kapitole 1.2).

2.1.1 Princip

Celý dokument procházíme (prostřednictvím VBA For each cyklu) jednou a ukaždého znaku sledujeme jeho atributy. Pro každý znak vyhodnocujeme jehoatributy a jejich změny vůči předchozímu znaku, a ty převádíme do výstupníreprezentace ve formě LATEX. Pro veškeré demonstrace bude používán objekt,jež jsme příhodně pojmenovali Char, typu Character, jež je součástí kolekceCharacters (popsáno v kapitole 1.1.1).

2.1.2 Registr příznaků

Pro uchování příznaků si musí převodník vytvořit tzv. registr příznaků. Zaznamená-li dejme tomu, že je právě zkoumaný znak tučný a bude třeba jej zobrazit navýstup, musí vědět, zda tato změna již na výstupu provedena nebyla. Kdybyjsme vypisovali LATEX příkaz pro tučnost před každým tučným znakem, bylby výstup nepřehledný, mnohonásobně by se zvětšil a navíc by takovéto zpra-cování bylo velmi pomalé. Vytvořili jsme proto ve VBA jednoduchou datovoustrukturu formou pole, které uchovává příznaky, zda byl daný příkaz jiz pou-žit. Díky tomu, že existují i párové LATEX příkazy, nemusíme pro každý znakdefinovat danou změnu, ale můžeme ho pomocí značek {} uzavřít do bloku,

47

Page 48: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

kde se automaticky změna projeví na všech znacích. V rámci všech příkazůtedy budeme mluvit o otevírání bloku { a o uzavírání bloku }. Aby byla do-držena syntaxe LATEX formátu, musíme zároveň hlídat, aby každý otevřenýblok byl nakonec také zavřen.

2.1.3 Atributy textu

Tučné písmo

Detekujeme ho tak, že testujeme, zda metoda Char.Bold vrací hodnotu -1.Pokud ano, nahlédneme do registru příznaků, zda příkaz již nebyl otevřen.Pokud otevřen byl, neděje se nic. Pokud otevřen nebyl, otevře se (Do výstup-ního souboru se zapíše \textbf{). Testovat, zda je písmo tučné však nestačí.Musíme testovat i zda písmo tučné není. Jestliže tedy metoda Char.Boldnevrátí hodnotu -1 je zřejmé, že písmo tučné není. Jestliže písmo tučné není,mohou nastat dvě možnosti. Pokud příkaz otevřen (viz. registr příznaků) ne-byl a písmo tučné není, nic se neděje. Pokud však příkaz otevřen byl, zavře se(Do výstupního souboru se zapíše }). Popsaná demonstrace je pro přehlednostznázorněna na následujícím vývojovém diagramu 2.1.

Písmo typu Italic

Detekujeme ho tak, že testujeme, zda metoda Char.Italic vrací hodnotu -1.Pokud ano, nahlédneme do registru příznaků, zda příkaz již nebyl otevřen.Pokud otevřen byl, neděje se nic. Pokud otevřen nebyl, otevře se (Do vý-stupního souboru se zapíše \textit{) . Testovat, zda je písmo typu Italic všaknestačí. Musíme testovat i zda písmo typu Italic není. Jestliže tedy metodaChar.Italic nevrátí hodnotu -1 je zřejmé, že písmo typu Italic není. Jestližepísmo typu Italic není, můžou nastat dvě možnosti. Pokud příkaz otevřen(viz. registr příznaků) nebyl a písmo není typu Italic, nic se neděje. Pokudvšak příkaz otevřen byl, zavře se (Do výstupního souboru se zapíše }). Po-psaná demonstrace je pro přehlednost znázorněna na následujícím vývojovémdiagramu 2.2.

Podtržené písmo

Detekujeme ho tak, že testujeme, zda metoda Char.Underline vrací hod-notu 1. Pokud ano, koukneme se do registru příznaků, zda příkaz již nebylotevřen. Pokud otevřen byl, neděje se nic. Pokud otevřen nebyl, otevře se (Dovýstupního souboru se zapíše \underline{). Testovat, zda je písmo podtrženévšak nestačí. Musíme testovat i zda písmo podtržené není. Jestliže tedy me-toda Char.Underline nevrátí hodnotu 1 je zřejmé, že písmo podtržené není.Jestliže písmo podtržené není, můžou nastat dvě možnosti. Pokud příkaz ote-vřen (viz. registr příznaků) nebyl a písmo není typu Underline, nic se neděje.Pokud však příkaz otevřen byl, zavře se (Do výstupního souboru se zapíše }).

48

Page 49: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Detekcetučnéhopísma

Výstup=Výstup+"\textbf{"

Flags[Bold] = 1

Výstup=Výstup+"}"

Flags[Bold] = 1

Konecdetekce

Char.Bold = -1

[ano] [ne]

[ano][ne]

Obrázek 2.1: Detekce tučného textu

Popsaná demonstrace je pro přehlednost znázorněna na následujícím vývojo-vém diagramu 2.3.

Barva písma

Barvu písma detekujeme pomocí metody Char.Font.Color, jež vrací přímočíselný výraz barvy ve 4 bytech ve formátu 00BBGGRR, kde R je obsaženíčervené v rozmezí od 0-255, G je obsažení zelené v rozmezí od 0-255 a N jeobsažení modré v rozmezí od 0-255. Pro výstupní zobrazení však neexistujedvou párový blokový příkaz, ale pouze příkaz nepárový, který definuje změnubarvy od vložení příkazu do konce formátovaného celku. Aby jsme příkaznevkládali při každém znaku, využijeme opět registr příznaků, který si ovšemmísto příznaku otevření bude pamatovat hodnotu poslední barvy. V případě,že se bude barva vůči předchozímu znaku lišit, stane se následující:

1. Jelikož LATEXový příkaz, jež nastavuje barvu textu se musí deklarovat vhlavičce dokumentu, musíme nejdřív vytvořit tuto definici.

49

Page 50: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Detekce italicpísma

Výstup=Výstup+"\italic{"

Flags[Italic] = 1

Výstup=Výstup+"}"

Flags[Italic] = 1

Konecdetekce

Char.Italic = -1

[ano] [ne]

[ano][ne]

Obrázek 2.2: Detekce Italic textu

2. Nejdříve zjistíme, zda definice již neexistuje, k tomuto účelu využijemedatovou strukturu pole, do které vytvořené definice budeme ukládat.

3. Pokud Definice existuje, vezme se její index a do výstupního souboru sezapíše \color{index}.

4. Pokud Definice neexistuje, vytvoří se tak, že se do výstupního souboruzapíše tento příkaz \definecolor{index}{rgb}, následně se uloží do poledefinic a nakonec se do výstupního souboru zapíše obdobně jako by tomubylo v předchozím bodě \color{index}.

Popsaná demonstrace je pro přehlednost znázorněna na následujícím vý-vojovém diagramu 2.4.

Zvýraznění písma

Postup je zde stejný jako tomu bylo u získávání barvy písma. S tím rozdílem,že barvu získáváme pomocí metody Char.HighlightColorIndex a že do

50

Page 51: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Detekcepodtrženéhopísma

Výstup=Výstup+"\underline{"

Flags[Underline] = 1

Výstup=Výstup+"}"

Flags[Underline] = 1

Konecdetekce

Char.Underline = 1

[ano] [ne]

[ano][ne]

Obrázek 2.3: Detekce podtrženého textu

výstupního souboru se zapíše příkaz \colorbox{index}.

Velikost písma

Velikost znaku detekujeme pomocí metody Char.Font.Size, jež vrací velikostznaku udanou v pointech. Získanou velikost potom zapisujeme do výslednéhosouboru tímto příkazem \fontsize {Char.Font.Size pt}{0pt}\selectfont. Jeli-kož se opět jedná o nepárový příkaz, jako tomu bylo s barvou, je dobré pama-tovat si předchozí velikost znaku a příkaz vypisovat pouze, dojde-li ke změně.

2.1.4 Formátování textu

LATEX má předefinované chovaní pro rozložení textů, odstavců a dalších ob-jektů. Detekujeme-li jiné uspořádání než standartní, musí se do výstupníhosouboru zapsat explicitně.

51

Page 52: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Detekcebarvy

Konecdetekce

Je barva Char.Font.Colorjiž nadefinována?

Výstup=výstup+"\definecolor{index}{Char.Font.Color}"

Výstup=výstup+"color{index}"

Zjistí se index definované barvy

Obrázek 2.4: Detekce barvy textu

Zarovnání textu

Zda je text zarovnán doleva, doprava, do bloku, či na střed zjistíme pomocímetody Char.ParagraphFormat.Alignment která vrací číselnou hodnotuv rozmezí 0-3.

• 0 - zarovnání doleva, jestliže metoda vrátí tuto hodnotu a registr pří-znaků udává, že je příkaz jiz otevřen, nic se neděje. V opačném případěse příkaz otevře, registr příznaku zarovnání doleva se nastaví a do vý-stupního souboru se vypíše: \begin{flushleft}. Všechny ostatní příznakyse nastaví na 0 a v případě jejich otevření se uzavřou výpisem }

• 1 - zarovnání doprava, jestliže metoda vrátí tuto hodnotu a registr pří-znaků udává, že je příkaz jiz otevřen, nic se neděje. V opačném případěse příkaz otevře, registr příznaku zarovnání doprava se nastaví a dovýstupního souboru se vypíše: \begin{flushright}. Všechny ostatní pří-

52

Page 53: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

znaky se nastaví na 0 a v případě jejich otevření se uzavřou výpisem}

• 2 - zarovnání na střed, jestliže metoda vrátí tuto hodnotu a registr pří-znaků udává, že je příkaz jiz otevřen, nic se neděje. V opačném případěse příkaz otevře, registr příznaku zarovnání na střed se nastaví a dovýstupního souboru se vypíše: \begin{flushcenter}. Všechny ostatní pří-znaky se nastaví na 0 a v případě jejich otevření se uzavřou výpisem}.

• 3 - zarovnání na blok, jestliže metoda vrátí tuto hodnotu a registr pří-znaků udává, že je příkaz jiz otevřen, nic se neděje. V opačném případěse ukončí všechny ostatní příkazy zarovnání. Jakmile není spuštěn žádnýpříkaz, LATEX zarovnává defaultně text do bloku.

Popsaná demonstrace je pro přehlednost znázorněna na následujícím vývojo-vém diagramu 2.5.

2.1.4.1 Výčet

Zda je na text použito výčtové prostředí zjistíme pomocí metodyChar.ListParagraphs.Count. Jestliže tato metoda nevrací nulovou hod-notu, je text formátován jako výčtové prostředí. Ve Wordu je možné použítdva druhy výčtového prostředí.

• Číslovaný - Zda je výčet číslovaný, zjistíme pomocí metodyChar.ListType.Vrací-li tato metoda hodnotu "wdListSimpleNumbering", je zřejmé,že se jedná o číslovaný výčet. Jestliže registr příznaků udává, že je pří-kaz již otevřen, nic se neděje. V opačném případě se příkaz otevře, doregistru příznaků číslovaného výčtu se nastaví a do výstupního souboruse vypíše: \begin{enumerate} a za ním bude následovat: \item kterýmdáváme najevo, že se rovnou do výčtu bude zapisovat.

• Nečíslovaný - Zda je výčet nečíslovaný zjistíme pomocí metodyChar.ListType. Vrací-li tato metada hodnotu "wdListBullet" je zřejmé,že se jedná o nečíslovaný výčet. Jestliže registr příznaků udává, že je pří-kaz již otevřen, nic se neděje. V opačném případě se příkaz otevře, doregistru příznaků nečíslovaný výčtu se nastaví a do výstupního souboruse vypíše: \begin{itemize} a za ním bude následovat: \item kterám dá-váme najevo, že se rovnou do výčtu bude zapisovat.

Tím však je vyřešena pouze první položka výčtu. Další položka se pozná podlesymbolu nového řádku (viz. další podkapitola). Bude-li zaznamenán tentosymbol a zároveň je příkaz výčtu stále otevřený, víme, že bude následovatdalší položka výčtu. Pro další položku se použije opět příkaz \item, který vy-píšeme do výstupního souboru. Pro oba výčty platí, že jakmile je detekováno,

53

Page 54: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Konecdetekce

Detekcezarovnání

Char.ParagraphFormat.Alignment

Uzavření všech

otev řených zarovnání

Výstup=Výstup+"\begin{flushleft}"

Uzavření všech

otev řených zarovnání

Uzavření všech

otev řených zarovnání

Výstup=Výstup+"\begin{flushcenter}" Výstup=Výstup+"\begin{flushright}"

Uzavření všech

otev řených zarovnání

[=3]

[=1]

[=2]

[=0]

Obrázek 2.5: Detekce zarovnání

že metoda Char.ListParagraphs.Count vrací 0, uzavřou se a nastaví sepříznaky do registru příznaků. Pro odrážkový výčet se do výstupního souboruzapíše: \end{itemize} a pro číselný výčet: \end{enumerate}. Pro oba výčtyzároveň platí, že mohou být víceúrovňové. Hloubka zanoření se pozná podlehodnoty, kterou vrací metoda pChar.ListFormat.ListLevelNumber. Je-li vrácená hodnota jedna, jedná se o kořenovou úroveň, je-li hodnota devět,jedná se o nejhlubší vnoření. Pro úrovně jsme vytvořili následující pravidlo.Je-li nově vytvořená úroveň hlubší, než předchozí, nic se neděje, příkaz se ote-vře a zaznamená do registru příznaků bez toho, aniž by se předchozí úroveňuzavřela. Je-li tomu naopak a hlubší byla předchozí úroveň, předchozí úroveňse uzavře. Díky tomu bude zachována syntaxe otevření a uzavření bloku. Po-

54

Page 55: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Detekcevýčtu

Konecdetekce

Char.Paragraphs.count <> 0

Všechny otev řené výčty se uzav řou pomocí p říkazu: Výstup:Výstup+"\end{enumerate/itemize}"

Char.ListFormat.ListLevelNumber > předchozí

Uzavře se p ředchozí úrove ň pomocí p říkazu: Výstup:Výstup+"\end{enumerate/itemize}"

Char.List.Type

Výstup=výstup+"\begin{enumerate}"

Výstup=výstup+"\begin{itemize}"

Flag[L]=1

Nový řádek

Výstup=výstup+"\item"

[wdListBullet]

[ne]

[ne][ano]

[ano]

[wdListSimpleNumbering]

[ne][ano]

[ano]

[ne]

Obrázek 2.6: Detekce výčtu

psaná demonstrace je pro přehlednost znázorněna na následujícím vývojovémdiagramu 2.6.

Nový řádek

Nový řádek detekuje tak, že si vezmeme hodnotu metody objektu Char, kterávrací znak daného objektu. Jestliže číslo dané hodnoty v ASCII tabulce je 13,vložíme do výstupního souboru tento nepárový příkaz: \newline

55

Page 56: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

2.1.5 Styl textu a nadpisy

Jelikož řešíme vzhled konkrétního znaku, nemusí nás styly, jež může uživatel vMS Wordu použít, zajímat. Zajímají nás však vzhledem k nadpisům. Nadpisyjsou totiž v MS Word definovány pomocí stylů. Jelikož si uživatel může stylypojmenovat, nastává zde problém, jak jednoznačně rozpoznat nadpis. Uživatelsi totiž defaultní názvy pro nadpisy může předělat, nebo může používat jinoujazykovou verzi. Řešením je, že si uživatel při spuštění aplikace může určit,jak jsou styly definující nadpisy pojmenované. Pokud tak neučiní, použijí sepro převod styly s názvem Nadpis 1 až Nadpis 5. Z textu potom poznáme,zda se jedná o daný nadpis pomocí metody Char.style. Jestliže se hodnota,jež tato metoda vrací, bude shodovat s názvem z některého z nadpisů, určíme,že se jedná o nadpis. Jestliže v registru příznaku nebude zaznamenáno, že jejiž příkaz otevřen, otevře se, příznak se zapíše do registru a do výstupníhosouboru se zapíše:

• \section{, jedná-li se o nadpis nejvyšší úrovně.

• \subsection{, jedná-li se o nadpis druhé úrovně.

• \subsubsection{, jedná-li se o nadpis třetí úrovně.

• \paragraph{, jedná-li se o nadpis čtvrté úrovně.

• \subparagraph{, jedná-li se o nadpis páté úrovně.

Jestliže, bude detekováno, že znak není stylem a v registru příznaků budenějaký nadpis otevřen, tak se pomocí příkazu } ukončí a registr příznaků pronadpisy se nastaví na signalizaci zavřeného příkazu. Popsaná demonstrace jepro přehlednost znázorněna na následujícím vývojovém diagramu 2.7.

2.1.6 Znaková sada

Při zavolání metody Char.Text můžeme zjistit hodnotu znaku v UNICODEkódování. Nejjednoduší rešení je do výstupního souboru tuto hodnotu rov-nou vypsat. Může se však stát, že tento LATEX dotyčný symbol znát nebude.Proto je zapotřebí převodní tabulka, která bude řešená hashovací tabulkou.Index hashovací tabulky bude znak, který chceme přeložit a hodnota hasho-vací tabulky bude vracet znak v LATEX podobě. Tuto tabulku však musímesami nejdříve naplnit. Jelikož Word používá kódování UNICODE znaků veschématu USC-2, může nastat i situace, že znak bude obsažen ve dvou slo-vech. Takovýto znak poznáme podle toho, že metoda Len(Char.text) budevracet hodnotu větší než jedna (znak je zakódován do dvou částí). VýslednouUNICODE hodnotu takto rozpoznaného znaku získáme sloučením bitovýchpolí z obou částí. Celá situace je pro přehlednost znázorněna na vývojovémdiagramu 2.8.

56

Page 57: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Detekcenadpisů

Konecdetekce

Char.Style = "Nadpis 1"

Char.Style = "Nadpis 2"

Char.Style = "Nadpis 3"

Char.Style = "Nadpis 4"

Char.Style = "Nadpis 5"

Výstup=Výstup+"\section{"

Výstup=Výstup+"\subsection{"

Výstup=Výstup+"\subsubsection{"

Výstup=Výstup+"\paragraph{"

Výstup=Výstup+"\subparagraph{"

Flag[N1|N2|N3|N4|N5]=1

Výstup=Výstup+"}"

[ne]

[ano] [ne]

[ano] [ne]

[ano] [ne]

[ne]

[ano]

[ne] [ano]

[ano]

Obrázek 2.7: Detekce nadpisů

57

Page 58: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Detekceznaků

Konecdetekce

Len(Char.Text) > 1

Rozdělení na dv ě části

Slou čení obou částí

Získání hodnoty z obou částí

Převedení na LaTeX p říkaz pomocí hashovací tabulky

Znak se ponechá

LaTeX umí zobrazit znakbez dodatečného příkazu

[ne] [ano]

[ano] [ne]

Obrázek 2.8: Detekce znaků

2.1.7 Definice tabulky

Zda je znak součástí tabulky, zjistíme díky metoděChar.Tables.count, kterávrací počet tabulek, jež je znak součástí. Vrátí-li tato metoda jinou hod-notu než je nula a zároveň bude-li registr příznaků tabulky vracet infor-maci o tom, že příkaz není otevřen, vypíše se do výstupního souboru příkaz\begin{tabular}, který definuje, že se bude vykreslovat tabulka. Dále pak musínásledovat příkaz {z,z,z...}, který určuje, jak se sloupce budou zarovnávat.Příkaz zarovnání budeme postupně vyplňovat podle první buňky v sloupci.Zarovnání pro danou buňku zjistíme díky metoděChar.ParagraphFormat.Alignment, která může vrátit hodnotu od 0 do3.

• 0 - zarovnání doleva. Bude li v prvním řádku v x-tém sloupci tato hod-nota, nastaví se v příkazu {z,z,z...} hodnota l na x té místo.

• 1 - zarovnání doprava. Bude li v prvním řádku v x-tém sloupci tatohodnota, nastaví se v příkazu {z,z,z...} hodnota r na x té místo.

• 2 - zarovnání na střed. Bude li v prvním řádku v x-tém sloupci tatohodnota, nastaví se v příkazu {z,z,z...} hodnota c na x té místo.

58

Page 59: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

• 3 - zarovnání na blok. Jelikož LATEX zarovnání na blok nepodporuje,použije se zarovnání na střed popsané v předchozím případě.

Obsah tabulky

U vytváření obsahu používáme tyto dvě metody.Char.Cells(1).ColumnIndex,jež značí index sloupce a Char.Rows(1).Index, jež značí index řádku. Abyjsme poznali, zda se znak nenachází již v dalším řádku, nebo sloupci, musímesi pamatovat předchozí indexy. Pokud bude se bude index sloupce současnéhoznaku oproti indexu sloupce předchozího znaku lišit, vložíme do výstupníhosouboru příkaz &, který LATEX informuje o tom, že má vykreslit další sloupec.Pokud se bude index řádku současného znaku oproti indexu řádku předchozíhoznaku lišit, vložíme do výstupního souboru příkaz \\, který LATEX informuje otom, že má vykreslit další řádek. V případě, že metoda Char.Tables.countbude vracet nulu a registr příznaku tabulky bude pozitivní, tabulka se tímtopříkazem \end{tabular} uzavře. Uzavření se poté zaznamená do registru pří-znaků. Zarovnání sloupců zjišťujeme průběžně, má však být napsané na za-čátku příkazu. Proto je výstupní text rozdělen na hlavičku a tělo. Do hlavičkyse ukládají zarovnání sloupců a do těla obsah. Při zavírání příkazu, se hlavičkaa obsah spojí a vypíšou se do výstupního souboru. Popsaná demonstrace jepro přehlednost znázorněna na následujícím vývojovém diagramu 2.9.

2.1.8 Vyexportování a definice grafických objektů

Grafické objekty jsou obrázky, grafy, ale i matematické rovnice. Export grafic-kých objektů z vnitřní reprezentace vstupního textového dokumentu je velmiobtížný. Byly nalezeny tři teoreticky možná řešení.

• Uložení grafického objektu do objektu graf a následné použití metodyexport().

• Použití knihoven MS Power Point a následné použití metody export().

• Uložení stránky jako HTML.

Uložení grafického objektu do objektu graf a následné použitímetody export().

Tato metoda spočívá v tom, že si aplikace převede grafický objekt na ob-jekt graf, kde následně použije VBA metodu export(), jež má objekt graf kdispozici. Jsou tu však tři problémy.

1. Metoda export() je již zastaralá a v manuálu k VBA se můžeme dočístdoporučení, že by se již neměla používat.

2. Z jednoduchého objektu se zbytečně stává objekt složitější.

3. Tato metoda je celkově velmi pomalá.

59

Page 60: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Detekcetabulky

Konecdetekce

Char.Tables.count > 0

Flags[table]=0Flags[table]=1

Hlavi čka=Hlavi čka+"\begin{tabular}{" Char.Cells(1).ColumnIndex <> předchozí

Tělo=Tělo+"&"

Char.Rows(1).Index <> předchozí

Tělo=Tělo+Char

První řádek

Char.ParagraphFormat.Alignment

Tělo=Tělo+"\\"Hlavi čka=Hlavi čka+"l"

Hlavi čka=Hlavi čka+"r"

Hlavi čka=Hlavi čka+"c"

Výstup=Výstup+Hlavi čka+"}" +Tělo+"\end{tabular}"

[ne]

[ne]

[ano] [ne]

[ne]

[ano]

[ano]

[ne]

[ano]

[ano]

[ano][ne]

[0,3]

[2]

[1]

Obrázek 2.9: Detekce tabulky

60

Page 61: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Použití knihoven MS Power Point a následné použití metodyexport().

Tato metoda spočívá v tom, že se přidá knihovna podporující práci s MSPower Point, dokument se uloží jako soubor spustitelný v MS Power Point atím získá grafický objekt metodu export(). Jsou tu však čtyři problémy.

1. Převodem do MS Power Pointu může přijít grafický objekt o některévlastnosti.

2. Metoda export() je již zastaralá a v manuálu k VBA se můžeme dočístdoporučení, že by se již neměla používat.

3. Z jednoduchého objektu se zbytečně stává objekt složitější.

4. Tato metoda je celkově velmi pomalá.

Uložení stránky jako HTML.

Tato metoda je ze všech tří nejefektivnější.

Definice grafického objektu na výstup

Pro definici objektu je potřeba znát jeho dva parametry. Umístění obrázku ajeho název. Jelikož z předchozí úvahy víme, kam se obrázky ukládají. Známe je-jich umístění. Název zjistíme tak, že zkoumáme, zda metodaChar.InlineShapes.countaktuálního znaku vrací nenulovou hodnotu. Pokud ano, znak je součástí ob-rázku. Zároveň si udržujeme čítač vypsaných obrázků. Díky tomu víme, žemá-li čítač hodnotu 3, že vypisujeme třetí obrázek a že bude ve složce umístěnína třetím pořadí. Název zjistíme podle názvu souboru. Příkaz, jež vypíšemedo výstupního souboru má tuto podobu:\begin{figure} \includegraphics{cestaKSouboru}\label{fig:názevSouboru}\end{figure} .Kde text napsaný kurzívou jsou parametry, které jsme získali v předchozíúvaze. Popsaná demonstrace je pro přehlednost znázorněna na následujícímvývojovém diagramu 2.10.

2.1.9 Odkazy

Každý odkaz funguje tak, že vytvoříme jeho label(jmenovku) a poté na nějodkudkoliv pomocí reference odkazujeme. V MS Word může uživatel vytvořitčtyři druhy odkazů.

1. Poznámku pod čarou.

2. Titulek.

3. Křížový odkaz.

4. odkaz na web.

61

Page 62: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Detekcegrafickéhoobjektu

Konecdetekce

Uložení souboru jako html

Char.InlineShapes.count<>0

Výstup=výstup+"\begin{figure}\includegraphics\{cesta KSouboru} \label\{fig:názevSouboru}\end{figure} "

Čítač=čítač+1

Výstup=výstup+"\ref{fig:názevSouboru}"

[ano][ne]

Obrázek 2.10: Detekce grafického objektu

Poznámku pod čarou

Zda se v textu objeví znak odkazující na text, jež je umístěn pod čarou zjis-tíme pomocí metody Char.Footnotes.count. Vrací- li nenulovou hodnotu,znamená to, že je symbol odkazuje na text pod čarou. V případě, že je re-gistr příznaku odkazu pod čarou není aktivní, spustíme příkaz \footnote{, ježsignalizuje, že následující text bude vyobrazen pod čarou. Následovat budetext, který zjistíme pomocí metody Char.Footnotes.Item(1).Range.Text.Jestliže vrací Char.Footnotes.count nulovou hodntou a registr příznaku od-kazu je nastaven na otevřen, příkaz se zavře }. LATEX automaticky vytvoříreferenci tam, kde byl příkaz zavolán. Odkaz bude mít číselnou hodnotu podletoho, kolikátý je pořadově v dokumentu. Pro tuto potřebu si udržujeme čítač.Popsaná demonstrace je pro přehlednost znázorněna na následujícím vývojo-vém diagramu 2.11.

Titulek

Titulek, neboli label je popis prvku (prvkem rozumíme tabulku, obrázek, nad-pis, nebo rovnici), jež se pod (nebo nad) daným prvkem nachází. U danéhoprvku můžeme vytvořit label, díky kterému můžeme na daný prvek odkazo-

62

Page 63: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Konecdetekce

Detekcepoznámky podčarou

Char.Footnotes.count<>0

Flags[F]=1 Flags[F]=0

Výstup=Výstup+ "\footnote{Char.Footnotes.Item(1).Range.text}"Výstup=Výstup+"}"

Čítač=čítač+1

[ne][ne][ano]

[ne] [ano]

Obrázek 2.11: Detekce poznámky pod čarou

vat. Jedná se o příkaz \label{názevLabelu}. Label rozpoznáme pomocí metodychar.style. Pokud nám tato metoda vrátí označení labelu pro danou jazyko-vou verzi (v případě češké jazykové verze to bude Titulek, v případě anglickéjazykové verze to bude Title), víme, že se jedná o label. Pokud se tento la-bel vyskytuje před daným prvkem, umístíme příkaz \label{názevLabelu} dohorní části definice prvku (bude se vykreslovat nad prvkem). Pokud se labelvyskytne až po prvku, umístíme příkaz \label{názevLabelu} do spodní defi-nice prvku. Tímto zajistíme, zda se titulek bude vykreslovat pod prvkem, nebonad. Parametr názevLabelu získáme přímo z textové hodnoty znaků, jež majíoznačení labelu (char.style = "Titulek"(pro českou jazykovou verzi)). Taktovytvořený titulek poté uložíme do datové struktury titulků v které zazname-náváme název titulku, typ prvku a pořadí prvku. Tuto datovou strukturu potépoužíváme pro přiřazení referencí. Celý tento proces je znázorněn na následu-jícím vývojovém diagramu 2.12.

Křížový odkaz

Zda je znak křížový odkaz poznáme pomocí metody Char.Fields.Count.Bude-li metoda vracet hodnotu větší než 1, budeme vědět, že se jedná o refe-renci. To, na co reference odkazuje zjistíme pomocí metodychar.Fields.item(1).Result.Text. Reference odkazuje na label (titulek),

63

Page 64: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Detekcetitulku

label = Zjišt ění pojmenování labelu dle jazykové verze

Flags[t]=1

labelName = labelName + char.Text

Uložení do datové struktury titulk ů

Flags[t]=0Flags[t]=1

Char.Style = label

Konecdetekce

Přiřazení labelu k prvku

Flags[t]=0

[ano]

[ano][ne]

Obrázek 2.12: Detekce titulku

jenž je umístěn v definici prvku, na něhož se chceme odkazovat. To na jakýkonkrétní prvek se reference odkazuje, zjistíme díky tomu, že si vedeme dato-vou strukturu titulků, ve které máme labely (titulky) nadefinované a popsané.Bude-li například metoda char.Fields.item(1).Result.Text vracet hodnotu"Obrázek 1 popis funkce", rozdělíme si daný text na:

• typ prvku (v našem případě "obrázek")

• pořadí prvku (v našem případě "1")

• hodnota prvku (v našem případě "popis funkce")

Pomocí těchto indicií dokážeme spolu s datovou strukturou titulků rozpo-znat a provázat danou referenci s daným labelem prvku.

64

Page 65: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Konecdetekce

Detekceodkazu naweb

Char.Hyperlink.count<>""

Flags[Cr]=1 Flags[Cr]=0

Výstup=Výstup+ "\url{Char.Hyperlink.Address}{"

Flags[Cr]=0

Výstup=Výstup+Slovo+"}"Slovo=Slovo+Char

Slovo=""

[ne][ano][ne] [ano]

[ano][ne]

Obrázek 2.13: Detekce odkazu na web

Odkaz na web

Zda znak odkazuje na web, zjistíme podle metody Char.Hyperlink.count.Vrací-li nenulovou hodnotu, jedná se o odkaz. Je-li registr příznaku URL od-kazu negativní (příkaz doposud nebyl spuštěn), spustí se příkaz \url{}{ aregistr přiznaku URL odkazu se nastaví na otevřený stav. Jako parametrpříkazu url bude adresa na kterou se má odkazovat. Tuto adresu zjistímez metody Char.Hyperlink.Address. Druhým parametrem je description,který určuje, jak se odkaz má jmenovat. Description vytvoříme podle řadysouvislých znaků, kterým vrací metoda Char.Hyperlink.count nenulovouhodnotu. Jakmile bude hodnota této metody nulová, příkaz se ukončí. Po-psaná demonstrace je pro přehlednost znázorněna na následujícím vývojovémdiagramu 2.13.

2.1.10 Rovnice

Zpracování rovnice probíha v několika fázích:

• Rozpoznání prvního znaku rovnice

65

Page 66: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

• Lineralizace

• Převod do normálního textu

• Převod do LATEXu

• Rozpoznání posledního znaku rovnice

• Převod do matematického textu

• Vytvoření rovnice

• Vypsání na výstup

2.1.10.1 Rozpoznání prvního znaku rovnice

Zda je znak součástí rovnice poznáme podle metody char.Omath.count.Pokud tato metoda vrací hodnotu větší než nula, jedná se o rovnici. Vrací-limetoda hodnotu nula a zároveň registr příznaku rovnic uchovává nulu, víme,že se jedná o první znak dané rovnice. Jedná-li se o první znak nastavímeregistr rovnic na jedničku.

2.1.10.2 Lineralizace

Jelikož samotná rovnice je uchovávána v objektu, jež se tváří jako jeden celek,musíme jí nejdřív dostat do podoby, s kterou již umíme pracovat. Touto funkcídisponuje metoda char.OMaths.Linearize, jež nám rovnici převede do lineárnípodoby. Např. Po lineralizaci by rovnice 5+1

3+2 vypadala takto: (5+1)/(3+2)

2.1.10.3 Převod do normálního textu

Po lineralizace můžeme již rovnici procházet znak po znaku. Při zjištění UNI-CODE hodnot znaku však zjišťujeme, že se jedná o UNICODE znaky, jimižLATEX nedisponuje. Musíme tedy znaky nejdříve převést do normální sadyznaků, které již LATEX zná. Touto funkcí disponuje metodachar.OMaths.Item(1).ConvertToNormalText, jež převede text z matematickésady znaků, do normální sady znaků.

2.1.10.4 Převod do LATEXu

Znaky konvertujeme obdobně, jako by se jednalo o normální znaky (viz. ka-pitola Zpracování znaků 2.1.6). Během konverze můžeme narazit na různédruhy konstrukcí. Tabulka 2.1 znázorňuje výčet těchto konstrukcí včetně je-jich příkladů. U každé konstrukce musíme zachovat její logiku. Během konverzemůžeme z hlediska logiky narazit na tyto dva typy kostrukcí:

• Konstrukce, jejichž logika je u LATEXu stejná. Např. 5-(1+n) je ve Wordu(po lineralizaci) i v LATEXu stejná.

66

Page 67: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.1. Návrh převodu

Tabulka 2.1: Mapovací tabulka konstrukcí rovnic

Název konstrukce příklad po lineralizaci v LATEX formátuZlomek 2+2

2+2 (2+2)/(2+2) \frac{2+2}{2+2}Index a2+2 a_(2+2) a_{2+2}Odmocnina

√a + b

√(a+b) \sqrt{a+b}

Integrál ∫

−x

+xx ∫ _(+x)^(-x)x \int_{+x}^{-x}x

a atributů písma

Velký operátorn

∑i=0n ∑_(i=0)^nn \sum_{i=0}^nn

Závorka (a+b) (a+b) (a+b)Funkce sin−1x sin^(-1)x sin^{-1}xLimita a logaritmy lim

x→∞lim_(x →∞) \lim_{x\to\infty}

Operátor a doplň. symbol =̂ ^= \^=

Matice 1 00 1 ∎(1&0@0&1) \begin{array}{cc}1&0\\

1&0 \end{array}

• Konstrukce, jejichž logika je rozdílná. Např. (5+1)/(2+3) (po linerali-zaci) se v LATEXu znázorní takto: \frac{5+1}{2+3}. Tato logika je všakrozdílná pouze v typu závorek a v tom, že identifikátor konstrukce (vtomto přípádě / (pro Word) a \frac (pro LATEX)) se místo ve středu na-chází na začátku. Konstrukce, jejichž logika je rozdílná se dále dělí dodvou typů:

– identifikátor konstrukce se nachází na začátku konstrukce. Např.5_(5+1) (po lineralizaci). Po rozpoznání takovéto konstrukce seznak po znaku projde celá funkce směrem doprava od identifi-kátoru. První závorka se nachází ihned vedle identifikátoru kon-strukce. Tuto závorku změníme na složenou závorku (aby odpoví-dala konstrukci LATEXu). Poté projdeme směrem doprava zbytekřetězce, dokud nenajdeme pravou závorku ve stejné úrovni vnořeníjako levá závorka. Tuto závorku také změníme na složenou. Identi-fikátor v tomto typu konstrukce může zůstat na svém místě.

– identifikátor konstrukce se nachází uvnitř konstrukce. Např. (5+1)/(1+3).U tohoto typu konstrukce se postupuje obdobně, jako u předchozíhotypu. Akorát s tím rozdílem, že hledání závorek probíhá nejdřívevlevo od identifikátoru konstrukce a poté napravo od identifikátorukonstrukce. Po nalezení levé i pravé strany (a jejich nahrazení zasložené závorky) se identifikátor přesune na začátek konstrukce.

67

Page 68: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

2.1.10.5 Rozpoznání posledního znaku rovnice

Jestliže metoda char.Omath.count bude vracet hodnotu rovné nule a zá-roveň se příznak rovnic bude rovnat jedničce, víme, že předchozí znak bylposlední a tudíž můžeme rovnici uzavřít.

2.1.10.6 Převod do matematického textu

Jelikož chceme nechat vstupní dokument zachován ve stejném stavu jako předkonverzí, musíme inverzní funkcí změnit sadu znaků z normálního textu, namatematický. Tuto funkci zajišťuje metodachar.OMaths.Item(1).ConvertToMathText

2.1.10.7 Vytvoření rovnice

Aby byl zachován původní stav před konverzí, je potřeba ještě na rovnicipoužít inverzní funkci k funkci char.OMaths.Linearize. Touto inverzní funkcíje funkce OMaths.BuildUp. Tato funkce převede rovnici z lineární podoby dopodoby rovnic. Po použití této funkce již rovnice vypadá naprosto stejně, jakopřed konverzí. Např. Po použití této funkce by rovnice (5+1)/(3+2) vypadalatakto: 5+1

3+2

2.1.10.8 Vypsání na výstup

Po rozpoznání posledního znaku a upravení rovnice do původního stavu, při-dáme na začátek a na konec rovnice symbol dollaru $. LATEXu tak dávámevědět, že se jedná o rovnici. Takto vytvořenou rovnici již vkládáme do vý-stupu.

2.2 Návrh chování aplikace

Pro popis chování aplikace jsme použili Unified Modeling Language, neboliUML diagramy, jež slouží k vizualizaci, specifikaci, navrhování a dokumentaciprogramových systémů. Diagramy jsou vytvořeny v programu Enterprise Ar-chitect. Zde je přehled nejpoužívanějších diagramů které pro popis použijeme.

• Use case diagram - diagram případu užití. Zobrazuje chování systémuz hlediska uživatele. Jeden z nejzákladnějším UML diagramů. V popisutéto aplikace nezbytný.

• State machine diagram - diagram stavového stroje. Vyjadřuje stavy ur-čitého objektu a přechody mezi těmito stavy. V popisu této aplikacenezbytný.

68

Page 69: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.2. Návrh chování aplikace

2.2.1 Diagram případů užití

Diagram případů užití, neboli Use case diagram zobrazuje chování systému zhlediska uživatele. Diagram znázorňuje :

• co systém dělá (ne však, jak to dělá),

• kdy a jak činnost začíná a končí,

• kdy je systém v kontaktu s uživatelem,

• které data jsou měněny,

• jaké kontroly vstupu jsou prováděny,

• základní, chybové a alternativní průběhy.

U všech částí platí, že by měly být používány pouze pojmy dané rozsahem sys-tému. Konkrétní Use Case diagram pro tuto aplikaci je navržen na diagramu2.14.

Případy užítí

Spuštění aplikace

• Vstupní podmínky: Uživatel chce spustit aplikaci

• Tok událostí:

1. Není-li k dispozici, musí uživatel zadat vstupní soubor (případ užití- Vložení vstupního souboru).

2. Uživatel může změnit defaultní nastavení aplikace (případ užití -Nastavení aplikace).

3. Je-li zadán soubor, uživatel může spustit převodník.

• Následné podmínky: Uživatel může spustit převodník (případ užití -Spuštění převodníku).

Vložení vstupního souboru - není-li k dispozici

• Vstupní podmínky: Uživatel chce vložit soubor.

• Tok událostí:

1. Uživatel klikne na tlačítko vložit soubor.2. Uživatel vybere umístění souboru.3. Aplikace načte soubor.

• Následné podmínky: Uživatel může spustit převodník (případ užití -Spuštění převodníku).

69

Page 70: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Obrázek 2.14: Use case diagram

70

Page 71: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.2. Návrh chování aplikace

Nastavení aplikace

• Vstupní podmínky: Uživatel chce změnit defaultní nastavení aplikace

• Tok událostí:

1. Uživatel klikne na tlačítko nastavení.

2. Uživateli se zobrazí nabídka služeb

3. Uživatel může kliknout na nastavení hlaviček (případ užití - Spuš-tění nastavení hlaviček).

4. Uživatel může kliknout na umístění výstupního souboru (případužití -Umístění výstupního souboru).

5. Uživatel se může vrátit zpět.

• Následné podmínky: Aplikace uloží provedené změny.

• Alternativní tok: Uživatel se může vrátit zpátky beze změn.

Nastavení hlaviček - úrovní nadpisů

• Vstupní podmínky: Uživatel chce změnit defaultní nastavení hlaviček.Hlavičkami jsou myšleny názvy stylů v MS word. Uživatel si může knázvům hlaviček přiřadit úroveň nadpisu. Aplikace pak díky tomu roz-pozná, kterému nadpisu má dát jakou úroveň.

• Tok událostí:

1. Uživatel klikne na tlačítko nastavení.

2. Aplikace nabídne uživateli výpis všech hlaviček.

3. Uživatel změní, co potřebuje.

4. Uživatel klikne na uložit.

5. Aplikace registruje změnu a uloží ji.

• Následné podmínky: Systém uloží provedené změny.

• Alternativní tok: Uživatel se může vrátit zpátky beze změn.

• Chybový tok: Nechá-li uživatel název některé z hlaviček prázdné, změnase neuloží a vyskočí varovné MS Windows okno.

71

Page 72: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Umístění výstupního souboru

• Vstupní podmínky: Uživatel chce změnit defaultní nastavení umístěnívýstupního souboru.

• Tok událostí:

1. Uživatel klikne na tlačítko nastavení umístění souboru.2. Aplikace nabídne uživateli MS Windows okno, kde si zvolí umístění

souboru .3. Uživatel klikne na uložit.4. Aplikace registruje změnu a uloží ji.

• Následné podmínky: Systém uloží provedené změny.

• Alternativní tok: Uživatel se může vrátit zpátky beze změn.

• Chybový tok: Nechá-li uživatel umístění výstupního souboru prázdné,změna se neuloží a vyskočí varovné MS Windows okno.

Spuštění převodníku

• Vstupní podmínky: Uživatel chce překonvertovat externí reprezentacivstupního textového dokumentu do LaTeX formátu.

• Tok událostí:

1. Uživatel klikne na tlačítko: Spustit převod.2. Aplikace uskuteční převod.3. Aplikace uloží výsledný soubor v LaTeX formátu (případ užití -

Vytvoření převedeného souboru).4. Aplikace zpracuje průběh konverze a uloží ho do logu.5. Aplikace zobrazí MS Windows okénko oznamujicí uživateli, že byl

převod dokončen.6. Uživatel potvrdí okénko.

• Následné podmínky:

– Uživatel může nahlédnout do logu (případ užití - Otevření logu).– Uživatel může použít vytvořený výstupní soubor.

• Chybový tok: Přenos se nezdaří. Aplikace zobrazí MS Windows okénkooznamuj9cí uživateli, že se převod nepovedl. Důvod chyby zapíše aplikacedo logu.

72

Page 73: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.2. Návrh chování aplikace

Vytvoření převedeného souboru

• Vstupní podmínky: Aplikace uloží vytvořený soubor v LaTeX formátu.

• Tok událostí:

1. Aplikace úspěšně dokončí převod.2. Aplikace zjistí umístění výstupního souboru.3. Aplikace na dané místo uloží soubor v LaTeX formátu.

• Následné podmínky: Uživatel může použít vytvořený výstupní soubor.

• Chybový tok: Uložení se nezdaří. Aplikace zobrazí MS Windows okénkooznamujicí uživateli, že se uložení nepovedlo. Důvod chyby zapíše apli-kace do logu.

Výsledné informace o průběhu

• Vstupní podmínky: Aplikace skončila převod, ať už úspěšně, nebo neú-spěšně.

• Tok událostí:

1. Aplikace veškerý průběh převod zaznamená do logu. Na tuto sku-tečnost uživatele upozorní.

2. Aplikace na dané místo uloží soubor v LaTeX formátu.

• Následné podmínky: Uživatel může použít vytvořený výstupní soubor.

• Chybový tok: Uložení se nezdaří. Aplikace zobrazí MS Windows okénkooznamujicí uživateli, že se uložení nepovedlo. Důvod chyby zapíše apli-kace do logu.

Otevření logu

• Vstupní podmínky: Aplikace skončila převod, ať už úspěšně, nebo neú-spěšně a uživatel otevřel log.

• Tok událostí: Výstupní log je uložen jako soubor, práci se souboremzajišťuje operační systém (v tomto případě MS Windows) a není tedysoučástí aplikace.

Otevření převodní tabulky

• Vstupní podmínky: Uživatel si chce prohlídnout konvertní znaky v pře-vodní tabulce.

• Tok událostí: Převodní tabulka je koncipována jako soubor, práci sesouborem zajišťuje operační systém (v tomto případě MS Windows) anení tedy součástí programu.

73

Page 74: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Editace převodní tabulky

• Vstupní podmínky: Uživatel chce změnit konvertní znaky v převodnítabulce.

• Tok událostí: Převodní tabulka je koncipována jako soubor, práci sesouborem zajišťuje operační systém (v tomto případě MS Windows) anení tedy součástí programu.

• Následné podmínky: Aplikace si z převodní tabulky obstarává konverzníznaky. Změna tohoto souboru má vliv na konverzi.

• Chybový tok: Je-li soubor používán, nelze změnit jeho obsah.

2.2.2 Diagram stavového stroje

Diagram stavového stroje, neboli State machine diagram, znázorňuje stavyurčitého objektu a přechody mezi nimi. Stavový stroj se dá znázornit jakograf stavů a přechodů mezi těmito stavy. Popisuje reakci instance na obdrženíudálosti. Popsání jednotlivých prvků diagramů stavového stroje:

• Stav, neboli state, je situace, kdy modelovaný objekt naplňuje určitoupodmínku, provádí nějakou operaci, nebo čeká na událost.

• Přechod, neboli transition, je spojení mezi dvěma stavy. Za splnění ur-čitých podmínek přejde objekt z jednoho stavu do druhého.

• Smyčka, která přesunuje přechod do téhož stavu. Něco významného sestane, ale stav se nezmění.

• Počáteční a finální stav jsou zvláštní pseudostavy pro počátek a konecautomatu.

Konkrétní State machine diagram pro tuto aplikaci je navržen na diagramu2.15.

Popisy stavů

Zobrazení vstupního okna

• Popis stavu: aplikace začíná zobrazením vstupního okna s nabídkouspuštění, či nastavení.

• Vstup do stavu: do tohoto stavu se přejde z počátečního stavu, nebo zestavu nastavení (návrat).

• Výstup ze stavu: z tohoto stavu se dá přejít do stavu nastavení, nebo dostavu spuštění převodníku, záleží na tom, co si uživatel vybere.

74

Page 75: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.2. Návrh chování aplikace

Obrázek 2.15: State machine diagram

75

Page 76: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Nastavení aplikace

• Popis stavu: v tomto stavu se provádí veškeré nastavení aplikace.

• Vstup do stavu: do tohoto stavu se přejde ze stavu "Vstupní okno".

• Výstup ze stavu: z tohoto stavu se dá pouze vrátit do stavu Zobrazenívstupního okna.

Spuštění převodníku

• Popis stavu: v tomto stavu se pouští nejdůležitější část aplikace. Jednáse o převodník převádějící datové struktury MS WORDu na LaTeXovépříkazy. Zde je vyzobrazen jako jeden stav. Skládá se však z více stavůa je znázorněn jako samostatný State machine diagram.

• Vstup do stavu: do tohoto stavu se přejde ze "Vstupního okna" kliknutímna tlačítko "Spustit převod".

• Výstup ze stavu: po skončení převodu následuje stav "Vytvoření sou-boru".

Vytvoření souboru

• Popis stavu: v tomto stavu již hotový převod uloží do souboru.

• Vstup do stavu: do tohoto stavu se vstoupí po dokončení převodu.

• Výstup ze stavu: po vytvoření souboru (nebo po neúspěšném vytvořenísouboru) následuje stav "Oznámení o ukončení"+ zápis do logu.

Oznámení o ukončení + zápis do logu

• Popis stavu: v tomto stavu se uživateli ve MS Windows okně oznámívýsledek převodu. Oznamí se mu také místo, kde je výsledný souboruložen a možnost přečíst si log. Do souboru log aplikace uloží veškeréinformace o převodu.

• Vstup do stavu: po vytvoření souboru (nebo po neúspěšném vytvořenísouboru).

• Výstup ze stavu: "Konec aplikace".

2.2.3 Diagram stavového stroje - spuštění převodníku

V tomto diagramu je znázorněn stav Spuštění převodníku ve vlastním dia-gramu stavového stroje 2.16.

76

Page 77: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.2. Návrh chování aplikace

Obrázek 2.16: Diagram stavového stroje - Spuštění převodníku

77

Page 78: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Popisy stavů

Všechny chyby vzniklé v těchto stavech ukončí předčasně převodník, upozornío tom uživatele a příčinu zapíše do logu.

Vytvoření tabulky

• Popis stavu: v externím souboru je uložená převodní hashovací tabulkase dvěma sloupci. V levém sloupci se nachází symboly v UNICODE, vpravém slopuci se nachází znaky tak, jak daný znak zobrazuje LaTeX,čili v UTF-8. V tomto stavu se načte tento externí soubor a převede se dodatové struktury hashovací pole. Toto hashovací pole používá aplikacejako převodní tabulku znaků.

• Vstup do stavu: do tohoto stavu se přejde z počátečního stavu.

• Výstup ze stavu: po úspěšném načtení tabulky se přejde do stavu "Na-čtení konfiguračního souboru".

Načtení konfiguračního souboru

• Popis stavu: v externím souboru je uložené uživatelské nastavení apli-kace. Z tohoto souboru si aplikace zjistí uživatelské nastavení. V případě,že soubor neexistuje, nebo je prázdný, použijí se defaultní hodnoty.

• Vstup do stavu: do tohoto stavu se přejde po úspěšném načtení tabulky.

• Výstup ze stavu: po úspěšném nastavení uživatelského nastavení přejdeaplikace do stavu "Získání obrázků".

Získání obrázků

• Popis stavu: v tomto stavu aplikace pracuje z obrázky, jež byli ve vstup-ním souboru použity. Možností, jak získat ze vstupního souboru obrázky,je několik.

• Vstup do stavu: do tohoto stavu se aplikace dostane po úspěšném pro-vedení uživatelského nastavení .

• Výstup ze stavu: po skončení převodu následuje stav Vytvoření souboru.

Vytvoření obsahu

• Popis stavu: Nejdůležitější stav celého převodníku. Pomocí pravidel apřevodní tabulky se fragmenty vstupního souboru převádějí na souborvýstupní. Tento samotný stav je znázorněn konečným automatem . To-muto stavu je věnována celá kapitola s názvem "Zpracování obsahu".

78

Page 79: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.3. Návrh uživatelského rozhraní

• Vstup do stavu: tento stav následuje po detekci obrázku a práci s nimi.

• Výstup ze stavu: po zpracování obsahu následuje stav "Vytvoření hla-vičky".

Vytvoření hlavičky

• Popis stavu: Vytvořením hlavičky je myšleno definice dokumentu. Vy-tváření definice následuje až po vytvoření obsahu a to z toho důvodu,že během převodu může vzniknout potřeba vytvoření nových definicí apřidání nových balíčků. Např. při změně barvy se nejdříve musí barva nazačátku dokumentu nadefinovat. Ačkoliv se hlavička vytvoří později nežobsah dokumentu, bude vložena na začátek výstupního souboru. Díkytomuto způsobu se ušetří jeden průchod textem.

• Vstup do stavu: tento stav následuje po převedení celého dokumentu.

• Výstup ze stavu: Konec aplikace.

2.3 Návrh uživatelského rozhraníUživatelské rozhraní je souhrn způsobů, jakými lidé (uživatelé) ovlivňují cho-vání strojů, zařízení, počítačových programů či komplexních systémů a je jed-ním z důležitých prvů aplikací a systémů. Jelikož aplikace, či systém, může býtsebevíc dokonalá a sebevíc užitečná, pokud není uživatelsky příjemná, nikdojí nebude používat. Návrhem uživatelského rozhraní je tedy snaha, uživatelico nejvíce zpříjemnit práci s aplikací.

2.3.1 Nielsenova heuristická analýza

K návrhu použijeme Nielsenovu heuristickou analýzu [6], nebo tzv. Nielsenovodesatero, jehož splnění by mělo být každé uživatelsky příjemné prostředí. Niel-senovo desatero se skládá z těchto desíti pravidel:

1. Viditelnost stavu systému.

2. Shoda mezi systémem a realitou.

3. Minimální zodpovědnost (a stres).

4. Shoda s použitou platformou a obecnými standardy.

5. Prevence chyb.

6. Kouknu a vidím.

7. Flexibilita a efektivita.

79

Page 80: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

8. Minimalita (klapky na oči).

9. Smysluplné chybové hlášky.

10. Help a dokumentace.

Popis pravidel a jejich použití v aplikaci

Viditelnost stavu systému. Systém, v tomto případě aplikace, nesmí zů-stat zamrzlá a nereagovat na uživatelské vstupy. Uživatel musí být neustáleinformován o tom, co aplikace provádí. Aby bylo toto pravidlo splněno, je vnávrhu vzhledu spodní informační řádek.

Shoda mezi systémem a realitou. Toto pravidlo říká, že by se mělyzachovat konvence reálného světa. Tzn., že ikony se musí chovat jako to, cozobrazují a na co odkazují.

Minimální zodpovědnost (a stres). Uživatel nemůže nic pokazit. Vždyje možnost vrátit se zpět do předchozího stavu. V aplikaci je toto použitov tom smyslu, že se vstupní soubor nesmaže, uživatel tudíž nic neriskuje. Jevšak bohužel místo, kde se toto pravidlo porušuje, a to je převodní tabulka,kam má uživatel přístup a kde si může cokoliv smazat či upravit. Bohužel vtomto případě to ošetřit nelze.

Shoda s použitou platformou a obecnými standardy. Toto pravidlovyžaduje, aby program pod Windows vypadal a choval se jako pod tímtooperačním systémem. Pokud to jde, měla by aplikace použít standartní sys-témové komponenty, systémové barvy a fonty. To je v této aplikace splněnojiž od počátku, jelikož se aplikace vytváří v prostředí VBA, které má všechnykomponenty odvozené od MS Windows.

Prevence chyb. Uživatel by neměl mít možnost zadat špatnou hodnotu.Toto pravidlo je použito např. při výběru lokace výstupního souboru. Uživatelmůže zadat pouze soubor, nic jiného.

Kouknu a vidím. Aplikace by neměla zatěžovat uživatelovu paměť. Akce,které uživatel může momentálně provést, by měly být viditelné a snadno dosa-žitelné, stejně tak i informace. Nepotřebné kontrolky naopak být vidět nemusí.Aby bylo toto pravidlo splněno, je aplikace rozdělena do složek "Spuštění","Nastavení převodu", "Správa znaků", "Správa příkazů". Uživatel vždy vidípouze tu část prvků, jsou v dané části aktuální.

80

Page 81: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.3. Návrh uživatelského rozhraní

Flexibilita a efektivita. Podle tohoto pravidla by měla aplikace mít dvěverze, pro běžného a zkušeného uživatele. Toto by se dalo řešit pomocí pokro-čilého módu. Zde to je však zbytečné, jelikož se předpokládá, že aplikaci budepoužívat zkušený uživatel.

Minimalita (klapky na oči). Aplikace by měla zobrazovat pouze infor-mace, které aktuálně k něčemu opravdu jsou. Čím méně jich totiž uživatelmá, tím rychleji koná. Grafika by neměla zastiňovat ovládání a účel. Z tohotodůvodu je vzhled navržen velmi stroze a v daném stavu aplikace se zobrazujípouze nezbytné informace.

Smysluplné chybové hlášky. Chybové hlášení by mělo být v bežném ja-zyce - žádné kódy, nebo zkratky. Chybové hlášení by mělo popsat co se stalošpatně, jak se to stalo a jak tomu příště předejít, případná možná řešení dopo-ručit. Doporučení by mělo poučit (vzdělat) uživatele. Toto pravidlo splňuje logv textovém souboru a vyskakovací okna, která na tuto skutečnost poukazují.

Help a dokumentace. Systém by měl být použitelný bez jakékoliv nápo-vědy, nicméně nápověda musí být. Měla by podporovat funkční vyhledávání.Spíše než popisem by se měla zabývat příklady. Toto je v aplikace řešenomanuálem a tlačítkem "Nápověda", které zobrazí nápovědu k danému stavu.

2.3.2 Návrh vzhledu.

• Návrh vzhledu spuštění 2.17

• Návrh vzhledu nastavení převodu 2.18

• Návrh vzhledu správy znaků 2.19

• Návrh vzhledu správy příkazů 2.20

81

Page 82: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2. Návrh konverze

Obrázek 2.17: Návrh vzhledu - spuštění

Obrázek 2.18: Návrh vzhledu - nastavení převodu

82

Page 83: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

2.3. Návrh uživatelského rozhraní

Obrázek 2.19: Návrh vzhledu - správa znaků

Obrázek 2.20: Návrh vzhledu - správa příkazů

83

Page 84: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 85: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

KAPITOLA 3Realizace

V této kapitole popíšeme realizaci úkolů, jež se řídí návrhem a analýzou po-psanou v předchozích kapitolách. Členění kapitoly zůstane stejné, jako je tomuu zadání úkolu. Díky tomu budeme moci v závěru porovnat, zda jsme všechnosplnili.Postup realizace bude probíhat přesně, jak jsme si stanovili v návrhu.Při realizaci však vzniklo plno problémů, s kterými se při návrhnu nepočítalo.

3.1 Realizace převodu

Realizace proběhla podle návrhu. Objevily se zde však drobné problémy, ježmůžou narušit sémantiku LATEXu.

3.1.1 Prolínání více příkazů

Atributy textu

Zde nastal problém v případě, že uživatel použil na text dva různé typy a totak, že jeden typ začal v již započatém druhém typu. Potom první typ skončila druhý typ měl pokračovat dál. Takto navržený algoritmus však udělal to, žeukončil typ druhý. Např. text testování, kde se prolínají dva typy, by převod-ník podle návrhu vypsal text testování, což je rozdíl. Pro tuto chybu existujeřešení takové, že algoritmus pokaždé, když bude vytvářet nějaký atribut písma,všechny již otevřené atributy ukončí. Při dalším znaku se všechny atributy,jež mají být otevřené, opět otevřou. Testovací text by měl ve výstupním sou-boru tuto podobu: t\underline{es\textbf{to}}\textbf{vá}ní. V této podobnějiž LATEXvykreslí text tak, jak se očekává. Toto řešení funguje mezi prolínánímpříkazů pro změnu veškerých atributů (čili pro změnu barvy písma, zvýraz-nění písma, velikosti písma, tučného písma, podtrženého písma a písma typuItalic).

85

Page 86: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3. Realizace

Formátování textu

Zde nastal problém při vnořování příkazů LATEXu, jestliže byl otevřený nějakýpříkaz upravující atribut (čili změnu barvy písma, zvýraznění písma, veli-kosti písma, tučného písma, podtrženého písma a písma typu Italic) a vzniklpožadavek na vytvoření příkazu pro formátování textu. Kdyby jsme příkazpro upravující atribut nechali otevřený, nebyla by dodržena syntaxe LATEXu aLATEX by odmítl tuto formulaci vysázet. Proto, kdykoliv se otevírá jakýkolivpříkaz pro formátování textu (ať už se jedná o zarovnání, nebo výčet), musíse příkaz pro upravující atribut zavřít. Jestliže změna atributu po otevřeníformátovacího textu bude nadále pokračovat, opět se příkaz k otevření změnyatributu otevře. Stejně musíme postupovat i pokud budeme formátovací pří-kaz uzavírat. Čili, jakmile se zavře formátovací příkaz, musí se zavřít i příkazpro změnu atributu. Pokud po uzavření formátovacího příkazu bude změnaatributu nadále pokračovat, opět se příkaz k otevření změny atributu otevře.

Nadpisy

Je-li použit příkaz Nadpis, musí se ukončit veškeré příkazy, jež určují změnuatributů, příkazy, jež určují formátování textu, tabulky a odkazy. Jakmile jepříkaz nadpis použit, nesmí se po celou dobu, co je otevřený, otevřít příkazpro formátování textu, příkaz pro další nadpis, příkaz pro vytvoření tabulky,nebo příkaz pro vytvoření odkazu. Zakázané příkazy, jež se budou chtít nechatotevřít, budou ignorovány. Jediné příkazy, které se mohou během otevřenéhonadpisu použít, jsou příkazy pro změnu atributu. Po zakončení nadpisu sejiž opět mohou používat všechny příkazy. Byly-li nějaké příkazy pro změnuatributu otevřeny během otevřeného nadpisu, budou po ukončení nadpisu takéukončeny.

Tabulka

Je-li použit příkaz Tabulka, musí se ukončit veškeré příkazy, jež určují změnuatributů, příkazy, jež určují formátování textu (s výjimkou příkazu pro novýřádek), nadpisy a odkazy. Jakmile je příkaz tabulka použit, nesmí se po ce-lou dobu, co je otevřený, otevřít příkaz pro formátování textu (kromě příkazunového řádku), příkaz pro nadpis, příkaz pro vytvoření další tabulky, nebo pří-kaz pro vytvoření odkazu. Zakázané příkazy, jež se budou chtít nechat otevřít,budou ignorovány. Jediné příkazy, které se mohou během otevřeného nadpisupoužít, jsou příkazy pro změnu atributu a příkaz pro vytvoření nového řádku,jež signalizuje nový řádek tabulky. Po zakončení nadpisu se již mohou opětpoužívat všechny příkazy. Byly-li nějaké příkazy pro změnu atributu otevřenyběhem otevřeného nadpisu, budou po ukončení nadpisu také ukončeny.

86

Page 87: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3.1. Realizace převodu

Odkazy

Při otevírání příkazu odkazu, jsou všechny ostatní příkazy uzavřeny. Po dobuotevření příkazu odkaz jsou veškeré jiné požadavky na příkaz ignorovány.Jakmile je příkaz odkaz ukončen, všechny ostatní příkazy jsou povoleny.

Grafický objekt

Při otevírání příkazu grafického objektu, jsou všechny ostatní příkazy uza-vřeny. Po dobu otevření příkazu odkaz jsou veškeré jiné požadavky na příkazignorovány. Jakmile je příkaz odkaz ukončen, všechny ostatní příkazy jsoupovoleny.

3.1.2 Parametrická tabulka

Jelikož pravidel, kdy má být jaký příkaz uzavřen a kdy zakázán, je mnoho,vytvořili jsme parametrickou tabulku 3.2 a 3.1, v které jsou veškeré tyto zá-kazy a příkazy k uzavření popsány tak, aby s nimi mohla aplikace jednotnýmzpůsobem pracovat. Tabulka je navržena tak, aby v ní mohl programátor ja-kýkoliv příkaz, nebo zákaz přidat, nebo ubrat bez toho, aniž by musel dělatrozsáhlé změny ve zdrojovém kódu. Zároveň tabulka obsahuje LATEXové pří-kazy pro otevření a zavření příkazu, s kterými program pracuje. Je-li třebaněkterý příkaz otevření nebo příkaz zavření potřeba změnit, může se to udělatv této tabulce bez rozsáhlé změny ve zdrojovém kódě programu. Parametrickátabulka je uložena v souboru cTable.txt. Každý řádek určuje jeden příkaz. For-mát dat je následující:Zkratka příkazu|Otevření příkazu|Zavření příkazu|Uzavírané příkazy|Zakázanépříkazy.

• Zkratka příkazu - je zkratka pro příkaz otevření tučného textu. Zkratkyslouží jako identifikátor. Např.: bude-li pak mít některý příkaz ve sloupcis názvem "zakázané příkazy"písmeno X, bude vědět, že je příkaz, jehožidentifikátor je X, zakázán.

• Otevření příkazu - příkaz kterým se v LATEXu otevře daný příkaz.

• Zavření příkazu - příkaz kterým se v LATEXu zavře daný příkaz.

• Uzavírané příkazy - Příkazy, jež se mají při otevření tohoto příkazuuzavřít.

• Zakázané příkazy - Příkazy, jež po dobu otevření tohoto příkazu nesmějíbýt otevřeny.

• | - je oddělovač. Slouží pro program, aby mohl rozpoznat jednotlivé části.Díky tomuto symbolu si může části rozparsovat do pole a pracovat s nimi.

87

Page 88: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3. Realizace

Příklad: Příkaz pro tučný text je definován takto:B|\textbf{ |}|U,I,C,Bc|0.

• B - zkratka pro příkaz tučný text je B. Vznikla od anglického slova bold.

• U - zkratka pro podtržený text (underline). Jelikož je U ve sloupci uza-vírané příkazy, znamená to, že po spuštění příkazu B (tučný text) musíbýt uzavřen.

• I - zkratka pro text typu Italic. Jelikož je I ve sloupci uzavírané příkazy,znamená to, že po spuštění příkazu B (tučný text), musí být uzavřen.

• C - zkratka pro barvu písma (color). Jelikož je C ve sloupci uzavíranépříkazy, znamená to, že po spuštění příkazu B (tučný text), musí býtuzavřen.

• Bc - zkratka pro barvu pozadí písma (background color). Jelikož je Bc vesloupci uzavírané příkazy, znamená to, že po spuštění příkazu B (tučnýtext), musí být uzavřen.

• 0 ve sloupci pro zakázané příkazy symbolizuje, že žádné příkazy nejsouv průběhu otevřeného příkazu B zakázány.

Parametr v otevřeném příkazu

Může nastat situace, kdy do parametrické tabulky chceme připsat nový příkaz,jenž má parametr, jehož hodnota je známa až v běhu programu. Upravili jsmetedy program tak, že název proměnné, která nám za běhu programu hodnotudodá, můžeme dát mezi dva znaky zavináče. Příklad.:Otevření příkazu pro změnu atributu barvy je \textcolor{čísloNadefinovanéBarvy}{.Číslo nadefinované barvy se však dozvíme až v době puštění programu. Při-dáme tedy do tohoto příkazu proměnou ohraničenou dvěma zavináči, v kterénám program v době překladu pošle potřebnou hodnotu. Výsledný příkaz tedybude \textcolor{@color@}{. Zavináče slouží pouze jako oddělovače od příkazu.Díky tomu, program bude vědět, že se jedná o proměnou, jejichž hodnotu tammá dosadit. U přidání příkazu tímto způsobem, je už potřeba drobný zásah dozdrojového kódu. Všechny příkazy se tak daly vytvořit formou parametrickétabulky 3.2 a 3.1. Kromě příkazů grafický objekt, tabulka a odkaz, jež muselybýt řešeny individuálně.

3.1.3 Tabulka barev

Pří vytváření zpracování příkazu pro tvorbu barevného pozadí nastal problém.Zjistili jsme, že metoda Char.HighlightColorIndex nevrací barvu pozadí textu,ale pouze index od 0 do 16, jenž udavá řádek tabulky barev, kterou má kdispozici pouze MS Word. My jsme si však RGB hodnoty těchto barev pro

88

Page 89: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3.1. Realizace převodu

Tabulka 3.1: Parametrická tabulka 2Název Zkratka Otevření Zavření Uzavírané Zakázanépříkazu příkazu příkazu příkazu příkazy příkazyNadpis H1 \section{ } H2,H3,H4,H5 Al,Ar,Ac,L1,úroveň 1 Al,Ac,Ar,I, L2,L3,L4

B,U,C,BcNadpis H2 \subsection{ } H1,H3,H4,H5 Al,Ar,Ac,L1,úroveň 2 Al,Ac,Ar,I, L2,L3,L4

B,U,C,BcNadpis H3 \subsubsection{ } H1,H2,H4,H5 Al,Ar,Ac,L1,úroveň 3 Al,Ac,Ar,I, L2,L3,L4

B,U,C,BcNadpis H4 \paragraph{ } H1,H2,H3,H5 Al,Ar,Ac,L1,úroveň 4 Al,Ac,Ar,I, L2,L3,L4

B,U,C,BcNadpis H5 \subparagraph{ } H1,H2,H3,H4 Al,Ar,Ac,L1,úroveň 5 Al,Ac,Ar,I, L2,L3,L4

B,U,C,BcVýčet L1 \begin{@type@}\item \end{@type@} H1,H2,H3,H4, Al,Ar,Ac,H1,úroveň 1 H5,Al,Ac,Ar, H2,H3,H4,H5

I,B,U,L2,L3,L4,C,Bc

Výčet L2 \begin{@type@}\item \end{@type@} H1,H2,H3,H4, Al,Ar,Ac,H1,úroveň 2 H5,Al,Ac,Ar, H2,H3,H4,H5

I,B,U,L3, L4,C,BcVýčet L3 \begin{@type@}\item \end{@type@} H1,H2,H3,H4, Al,Ar,Ac,H1,úroveň 3 H5,Al,Ac,Ar, H2,H3,H4,H5

I,B,U,L4,C,BcVýčet L4 \begin{@type@}\item \end{@type@} H1,H2,H3,H4, Al,Ar,Ac,H1,úroveň 4 H5,Al,Ac,Ar, H2,H3,H4,H5

I,B,U,C,Bc

89

Page 90: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3. Realizace

Tabulka 3.2: Parametrická tabulka 1Název Zkratka Otevření Zavření Uzavírané Zakázanépříkazu příkazu příkazu příkazu příkazy příkazytučný B \textbf{ } I,B,C,BctextItalic I \textit{ } U,B,C,Bctextpodtržený U \underline{ } I,B,C,Bctextbarva C \textcolor{@color@}{ } I,B,U,C,Bctextbarva Bc \boxcolor{@color@}{ } I,B,U,CpozadíZarovnání Al \begin{flushleft} end{flushleft} Ac,Ar,I,B,textu U,C,BcvlevoZarovnání Ar \begin{flushright} end{flushright} Ac,Al,I„Btextu U,C,BcvpravoZarovnání Ac \begin{center} end{center} Ar,Al,I,B,textu U,C,Bcna střed

daný index zjistili a udělali si vlastní tabulku, jež program při spuštění načtea jež používá pro převod indexu na konkrétní barvu v RGB formě. Tabulkaje uložena v souboru hTable.txt. Uspořádání tabulky v textovém souboru jetakové, že co řádek souboru, to řádek tabulky. Sloupce jsou rozlišeny znakem|.

3.1.4 Převod barvy

Další problém nastal, při používaní barev. MS Word totiž vrací hodnoty barevve 4 bytech ve formátu 00BBGGRR. LATEX však potřebuje mít barvy veformátu R,G,B, kde každá barevná složka je vyjádřena v rozmezí od 0.0 - 1.0.Problém jsme vyřešili následně.

1. Červenou složku jsme vypreparovali tak, že jsme 4 bajty logicky vy-násobili maskou HFF. Po logickém vynásobení nám zbyla pouze čer-vená složka, kterou jsme vydělili číslem 255, aby jsme měli podíl červenésložky vyjádřené v rozmezí 0.0-1.0.

2. Zelenou složku jsme vypreparovali tak, že jsme 4 bajty logicky vynásobilimaskou HFF00. Po logickém vynásobení jsme výsledek vydělili číslem

90

Page 91: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3.2. Realizace vzhledu aplikace

256. Po této operaci nám zbyla pouze zelená složka, kterou jsme vyděliličíslem číslem 255, aby jsme měli podíl zelené složky vyjádřené v rozmezí0.0 - 1.0.

3. Modrou složku jsme vypreparovali tak, že jsme 4 bajty logicky vynásobilimaskou HFF0000. Po logickém vynásobení jsme výsledek vydělili číslem65536. Po této operaci nám zbyla pouze modrá složka, kterou jsme vy-dělili číslem číslem 255, aby jsme měli podíl modré složky vyjádřené vrozmezí 0.0 - 1.0.

3.1.5 Export grafických objektů

V návrhu byla vybrána metoda: "Uložení stránky jako HTML". Tato metodaje ze všech tří nejefektivnější. Spočívá v těchto krocích.

1. Foreach průchod pro všechny grafické objekty.

2. Pro každý item ve foreach průchodu se uloží jeho pořadí a název (probudoucí identifikaci).

3. Uložení dokumentu jako html souboru pomocí metody SaveAs File-Name.

4. Nalezení obrázku ve vytvořeném adresáři.

5. Použití obrázku ve výstupním souboru + identifikace pomocí datovéstruktury z bodu 2.

6. Smazání přebytečných souborů vytvořených uložením jako html.

7. Uložení dokumentu do původní formy.

3.2 Realizace vzhledu aplikaceRealizace vzhledu proběhla přesně podle návrhu.

• Realizace vzhledu spuštění 3.1

• Realizace vzhledu nastavení převodu 3.2

• Realizace vzhledu správy znaků 3.3

• Realizace vzhledu správy příkazů 3.4

91

Page 92: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3. Realizace

Obrázek 3.1: Realizace vzhledu - spuštění

Obrázek 3.2: Realizace vzhledu - nastavení převodu

92

Page 93: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

3.2. Realizace vzhledu aplikace

Obrázek 3.3: Realizace vzhledu - správa znaků

Obrázek 3.4: Realizace vzhledu - správa příkazů

93

Page 94: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 95: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

KAPITOLA 4Testování

Testování bylo provedeno na několika testovacích scénářích. Na každý úkol zezadání je jeden scénář. U každého testu je zadání a tři obrázky. První obrázekznázorňuje zobrazení dokumentu před konverzí ve v MS Word. Druhý obrá-zek znázorňuje zdrojový kód výstupního souboru. Třetí obrázek znázorňujezobrazení dokumentu po konverzi v LATEX formátu.

4.1 Testování atributů a jejich vzájemnýchprolínání

1. Zobrazení dokumentu před konverzí ve v MS Word - obr. 4.1.

2. Zdrojový kód výstupního souboru - obr. 4.2.

3. Zobrazení dokumentu po konverzi v LATEX formátu - obr. 4.3.

Obrázek 4.1: Zobrazení dokumentu před konverzí ve v MS Word

95

Page 96: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4. Testování

Obrázek 4.2: Zdrojový kód výstupního souboru

Obrázek 4.3: Zobrazení dokumentu po konverzi v LATEX formátu

96

Page 97: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4.2. Testování formátování a jejich vzájemných prolínání

Obrázek 4.4: Zobrazení dokumentu před konverzí ve v MS Word

4.2 Testování formátování a jejich vzájemnýchprolínání

1. Zobrazení dokumentu před konverzí ve v MS Word - obr. 4.4.

2. Zdrojový kód výstupního souboru - obr. 4.5.

3. Zobrazení dokumentu po konverzi v LATEX formátu - obr. 4.6.

4.3 Testování tabulek a jejich odkazů1. Zobrazení dokumentu před konverzí ve v MS Word - obr. 4.7.

2. Zdrojový kód výstupního souboru - obr. 4.8.

3. Zobrazení dokumentu po konverzi v LATEX formátu - obr. 4.9.

4.4 Testování obrázků a jejich odkazů1. Zobrazení dokumentu před konverzí ve v MS Word - obr. 4.10.

2. Zdrojový kód výstupního souboru - obr. 4.11.

3. Zobrazení dokumentu po konverzi v LATEX formátu - obr. 4.12.

97

Page 98: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4. Testování

Obrázek 4.5: Zdrojový kód výstupního souboru

Obrázek 4.6: Zobrazení dokumentu po konverzi v LATEX formátu

98

Page 99: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4.4. Testování obrázků a jejich odkazů

Obrázek 4.7: Zobrazení dokumentu před konverzí ve v MS Word

Obrázek 4.8: Zdrojový kód výstupního souboru

Obrázek 4.9: Zobrazení dokumentu po konverzi v LATEX formátu

99

Page 100: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4. Testování

Obrázek 4.10: Zobrazení dokumentu před konverzí ve v MS Word

Obrázek 4.11: Zdrojový kód výstupního souboru

100

Page 101: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4.5. Testování nadpisů

Obrázek 4.12: Zobrazení dokumentu po konverzi v LATEX formátu

4.5 Testování nadpisů1. Zobrazení dokumentu před konverzí ve v MS Word - obr. 4.13.

2. Zdrojový kód výstupního souboru - obr. 4.14.

3. Zobrazení dokumentu po konverzi v LATEX formátu - obr. 4.15.

4.6 Testování rovnic1. Zobrazení dokumentu před konverzí ve v MS Word - obr. 4.16.

2. Zdrojový kód výstupního souboru - obr. 4.17.

3. Zobrazení dokumentu po konverzi v LATEX formátu - obr. 4.18.

101

Page 102: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4. Testování

Obrázek 4.13: Zobrazení dokumentu před konverzí ve v MS Word

Obrázek 4.14: Zdrojový kód výstupního souboru

102

Page 103: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4.6. Testování rovnic

Obrázek 4.15: Zobrazení dokumentu po konverzi v LATEX formátu

103

Page 104: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4. Testování

Obrázek 4.16: Zobrazení dokumentu před konverzí ve v MS Word

104

Page 105: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4.6. Testování rovnic

Obrázek 4.17: Zdrojový kód výstupního souboru

105

Page 106: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

4. Testování

Obrázek 4.18: Zobrazení dokumentu po konverzi v LATEX formátu

106

Page 107: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Závěr

V rámci této práce jsme analyzovali a zdokumentovali použité datové struk-tury objektového modelu MS Word a korespondující syntaxi formátu LATEX.Vyřešili jsme konverzi vnitřní reprezentaci vstupního textového dokumentu navýstupní formát v LATEXu. Konvertor převadí následující vlastnosti.

• Znaková sada - pomocí externích převodních tabulek jsme realizovalipřevodník z Unicode kódování do sekvence znaků LATEXu.

• Styl a nadpis textu - naše konverze zahrnuje i rozpoznání nadpisů a stylův textu a jejich úspěšný převod do LATEX formátu.

• Formátování textu - v této práci jsme realizovali konverzi zarovnání avýčtové prostředí textu.

• Atributy textu - realizovali jsme konverzi 6-ti atributů textu a i jejichvzájemné vnořování.

• Tabulky - tato práce obsahuje i převod jednoduchých tabulek a jejichodkazů na ně.

• Vložené objekty - vložené objekty jsme vyřešili konverzí na obrázky.

• Odkazy - součástí realizace je i konverze veškerých odkazů.

– Poznámka pod čarou– Titulek (caption)– Křížový odkaz– Odkaz na web

• Rovnice

– Zlomky– Indexy– Odmocniny– Integrály

107

Page 108: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Závěr

– Velký operátory– Závorky– Funkce– Limita a logaritmy– Operátory– Matice

Vzhledem k tomu, že LATEX nepodporuje stejnou granularitu jako MicrosoftOffice Word, vyřešili jsme tento rozpor pomocí parametrické tabulky. Nepod-porované vnoření formátovaných konstrukcí je detekováno, označováno a za-pisováno do logu.

Tabulka 4.1 ukazuje splnění cílů a jejich pokrytí jednotlivými kapitolami.Při realizaci se ukázalo, že co se může zdát v analýze a návrhu jako zřejmé ajednoduché, může nakonec vyústit v řadu problémů. Tyto veškeré problémy,jež jsou detailněji popsané v kapitole Realizace, většinu těchto problémů senám podařilo vyřešit. Jednalo se například o vnoření více příkazů pro změnuatributů do sebe, nebo vzájemné rušení příkazů, jež syntaxe LATEXu nepod-porovala. Existuje mnoho konstrukcí které se dají oproti současnému stavurozšířit. Například, rovnice se v této verzi převádí jako obrázek, ačkoli by sedala řešit i vhodnějšími způsoby. Dále je tu skutečnost, že současný převodníkneumí pracovat se sloučenými buňkami tabulek.

Převodník je vhodným nástrojem pro automatizaci převodu, umožňuje vý-razné urychlení převodu textů vytvořených a udržovaných v prostředí Micro-soft Office Wordu pro publikace vyžadující prostředí LATEX. Práci jsme věno-vali pro akademické účely všem studentům Fakulty Informačních Technologiípod jejíž záštitou tato práce mohla vzniknout.

108

Page 109: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Tabulka 4.1: Mapovací tabulka

Cíle práce Úvod Analýza Návrh Realizace TestováníMS Word

√ √

TeX√ √

Konverze√ √ √

Znaková sada√ √ √

Styl textu√ √ √

Formát textu√ √ √

Atributy textu√ √ √

Hierarchie nadpisů√ √ √

Tabulky√ √ √

Vložené objekty√ √ √

Odkazy√ √ √

Rovnice√ √ √

Uživatelské prostředí√ √ √

Testování√

109

Page 110: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 111: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

Literatura

[1] Beth Melton, K. M., Mary Millhollon: Mistrovství v Microsoft Office Word2007. Computer Press, 2008.

[2] Cadstudio: Visual Basic pro Aplikace - návod. Květen 2012. Dostupné zWWW: <http://www.cadforum.cz>

[3] Helmut Kopka, P. W. D.: Latex, Kompletní průvodce. Computer Press,2004.

[4] Král, M.: Excel VBA, Výukový kurz. Computer Press, 2010.

[5] Microsoft: Nápověda a postupy k aplikaciWord 2003. Květen 2012. Dostupné z WWW:<http://office.microsoft.com/cs-cz/word-help/CL010072934.aspx?CTT=97>

[6] Nielsen, J.: Nielsen’s Heuristic Evaluation. Květen 2012. Dostupné zWWW: <http://www.useit.com/papers/heuristic/>

[7] WikiBooks: LATEX, návod. Květen 2012. Dostupné z WWW:<http://en.wikibooks.org/wiki/LaTeX>

111

Page 112: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl
Page 113: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

PŘÍLOHA ASeznam použitých zkratek

Ac Align center

Al Align left

Ar Align right

B Bold

Bc Background color

C Color

H1 Header 1

H2 Header 2

H3 Header 3

H4 Header 4

H5 Header 5

HTML HyperText Markup Language

I Italic

L1 List 1

L2 List 2

L3 List 3

L4 List 4

113

Page 114: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

A. Seznam použitých zkratek

MS Word Microsoft Office Word

U Underline

UML Unified Modeling Language

URL Uniform Resource Locator

UTF-8 UCS Transformation Format

VBA Visual Basic for Applications

XML eXtensible Markup Language

114

Page 115: SemvložtezadáníVašípráce.kaspaji3/texty/DP_Andel_Jiri...Poděkování NejvětšípoděkovánípatřímémuvedoucímupráceIng.JiřímuKašparovi,jež mě výborně vedl a poskytl

PŘÍLOHA BObsah přiloženého CD

readme.txt...................................stručný popis obsahu CDsrc

impl...................................zdrojové kódy implementacethesis ...................... zdrojová forma práce ve formátu LATEX

text ....................................................... text prácethesis.pdf............................. text práce ve formátu PDFthesis.ps................................ text práce ve formátu PS

115