# Zápočet 29.1.2016 - &quot;HTML&quot;

<{ForumPost(poster="Quarwen", timestamp=2016-01-29 12:09:33)}>
Úkolem bylo napsat jednoduchý převaděč z HTML do markdownu.  
  
Zadání i Jendovo řešení - strašná prasárna - je v příloze.  
  
Bylo povoleno všechno kromě komunikace (messaging, chat). Při odevzdávání si nechal dopsat do vstupu pár tagů a na kód se skoro nedíval.  
  
Oficiální „správné“ řešení bylo udělat stavový automat.  

    Zadání zápočtového testu z C++
    
    Úkolem je zobrazit HTML v textové podobě.
    Základní zadání
    
    Vytvořte program, který dostane z příkazové řádky jména dvou souborů. První soubor představuje vstup v omezeném a zjednodušeném HTML, druhý soubor je textový výstup zobrazení HTML.
    
    Vstupní HTML soubor musí odpovídat XHTML, tj. všechny otvírací HTML tagy mají i odpovídající párový ukončovací tag.
    
    Tagy nemají žádné atributy, nelze použít zkrácený uzavřený tag, vždy musí být dvojice otevírací a ukončovací tag, např. <hr></hr> je povoleno, nemůže být <hr/>.
    
    Vstupní HTML obsahuje pouze tagy z těla HTML, tj. vůbec neřešíme <head> a na vstupu nebude, řešíme jen vnitřek <body>, na vstupu tag <body> také není.
    
    Tagy se až na jednu výjímku nesmí vnořovat, tj. uvnitř tagu <P> nemůže být tag <UL>.
    
    Tagy mohou být zapsány libovolnou kombinací malých a velkých písmen. Uvnitř tagu nejsou povoleny žádné mezery.
    
    Mezi tagy nejsou povoleny žádné znaky s výjímkou mezerových znaků (whitespaces).
    
    Podporovány jsou následující tagy:
    
        H1 — všechna písmena budou zobrazena velkými písmeny, je podporována pouze anglická abeceda, tvoří samostatnou řádku (viz <P>)
        H2 — počáteční písmena slov budou zobrazena velkými písmeny, je podporována pouze anglická abeceda, tvoří samostatnou řádku (viz <P>)
        P — zobrazí se jako samostatná jedna řádka, tj. více řadek uvnitř tagu se spojí do jedné řádky, oddělení je prázdnou řádkou
        UL — blok odrážek, může se vnořovat, do <LI> tagu, všechny odpovídající odrážky začínají o 4 mezery dále, uvnitř tagu mohou být pouze <LI> tagy, žádný text
        LI — odrážka uvnitř <UL> tagu, začíná na znak *, následuje mezera, pak text odrážky, více řádek se sleje v jednu řádku, uvnitř tagu je povolen buď text nebo <UL> tag, žádná kombinace
        HR — zobrazí vodorovnou čáru pomocí 40 znaků -, uvnitř tagu nejsou povoleny žádné znaky vyjma mezer (whitespaces)
    
    Při slučování více řádek do jedné řádky vznikne mezi posledním slovem na řádce a prvním slovem na následující řádce právě jedna mezera.
    
    Jakákoliv chyba (např. při párování nebo rozeznávaní tagů) je hlášena.
    Ukázka
    HTML vstup
    <H1>Nadpis stranky</H1>
    <H2>Vnorene odrazky</H2>
    <p>Prvni radka odstavce,
    druha radka odstavce</p>
    <hr></hr>
    <Ul>
    <li>prvni normalni odrazka</li>
    <li>druha normalni odrazka</li>
    <li><ul>
    <li>prvni zanorena odrazka</li>
    <li>druha zanorena odrazka</li>
    </ul></li>
    <li>treti normalni odrazka</li>
    </uL>
    Textový výstup
    NADPIS STRANKY
    Vnorene Odrazky
    Prvni radka odstavce, druha radka odstavce
    ----------------------------------------
        * prvni normalni odrazka    * druha normalni odrazka        * prvni zanorena odrazka        * druha zanorena odrazka    * treti normalni odrazka



*Attachments:*

- *[zap.cpp](/Forum%20archiv/Attachments/6965_9ec26755e382318334b214a6ad63462c)*

<{/ForumPost}>

