wiki:SyntaxTree
Last modified 5 years ago Last modified on 24.09.2013 22:29:59

Struktura drzewa wyprowadzenia

Table of Contents

  1. typy węzłów
  2. TODO

Drzewo wyprowadzenia produkowane przez parser (#26) dla treści o składni dashmarkup.

typy węzłów

  • document -- korzeń całego drzewa (odpowiednik <body>...</body>)
    • heading_paragraph -- nagłówek (<h1>...</h1>)
      • pierwszym dzieckiem jest HEADER_S, ostatnim HEADER_E, a wszystko co pomiędzy -- to formatowany tekst
      • długość HEADER_S wskazuje poziom nagłówka (np. <h3>)
    • code_paragraph -- preformatowany paragraf (<pre>...</pre>)
      • dokładnie jedno dziecko: treść
      • treść nie zawiera kończącego entera (chyba że treść kończyła się pustą linią)
    • text_paragraph -- zwykły paragraf (<p>...</p>)
      • jedno lub więcej dzieci, każde to text_paragraph_line
      • dzieci należy połączyć w paragraf wstawiając między nie znacznik <br/>
    • text_paragraph_line -- część paragrafu
      • jedno lub więcej dzieci, każde to formatowany tekst
      • dzieci należy połączyć w jedno za pomocą pustego stringa
    • list_paragraph -- paragraf składający się z listy (numerowanej liczbami, literami lub wypunktowanej)
      • jedno dziecko typu numbered_list, alpha_list, bullet_list albo undecorated_list
    • numbered_list -- lista wypunktowana (<ol>...</ol>)
      • jedno lub więcej dzieci, każde typu list_item
    • alpha_list -- lista numerowana literami alfabetu (<ol>...</ol> + CSS)
      • jedno lub więcej dzieci, każde typu list_item
    • bullet_list -- lista wypunktowana (unordered list, <ul>...</ul>)
      • jedno lub więcej dzieci, każde typu list_item
    • undecorated_list -- lista bez dekoracji
      • jedno lub więcej dzieci, każde typu list_item
    • list_item -- element listy (<li>...</li>)
      • jedno lub więcej dzieci, każde to list_item_line, przy czym ostatnie może być typu listy (numbered_list, alpha_list, bullet_list, undecorated_list)
      • węzły łączone za pomocą <br/> (wygląda na to, że dodatkowy tag <br/> nie ma wpływu na wyświetlanie listy podrzędnej)
    • list_item_line -- pojedyncza linia (do <br/>) w elemencie listy
      • jedno lub więcej dzieci, każde to tekst formatowany
    • table_paragraph -- tabela (<table>...</table>)
      • jedno lub więcej dzieci, każde typu table_row
    • table_row -- wiersz tabeli (<tr>...</tr>)
      • jedno lub więcej dzieci, każde typu table_cell albo header_cell
    • table_cell -- komórka tabeli (<td>...</td>)
      • jedno lub więcej dzieci, każde to formatowany tekst
    • header_cell -- komórka wyróżniona (<th>...</th>)
      • jedno lub więcej dzieci, każde to formatowany tekst
  • tekst formatowany
    • jedno lub więcej dzieci, które same też są tekstem formatowanym
    • bold_text -- <b>...</b>
    • italics_text -- <i>...</i>
    • strike_text -- <strike>...</strike>
    • tt_text -- <tt>...</tt>
    • error -- <span class="error">...</span>
    • link -- <a href="...">...</a>
      • jedno lub dwoje dzieci
        • link_target -- obowiązkowe, URL docelowy
          • jedno lub więcej dzieci, poszczególne składniki URL-a (do zwykłej konkatenacji)
        • link_description -- opcjonalne, opis linka (jeśli brak, opisem powinien być link_target)
          • jedno lub więcej dzieci, każde to tekst formatowany
          • alternatywnie: jedno dziecko będące węzłem image
    • image -- <img src="..." />
      • jedno dziecko (w przyszłości może więcej, np. atrybut alt)
        • image_target -- obowiązkowe, URL obrazka
          • jedno lub więcej dzieci, poszczególne składniki URL-a (do zwykłej konkatenacji)
    • MACRO_VALUE -- odwołanie do wywołanego już makra w bieżącym bloku
      • na etapie konwersji drzewa wyprowadzenia na HTML nie powinno w ogóle występować
  • macro_call, macro_call_silent -- wywołanie makra
    • na etapie konwersji drzewa wyprowadzenia na HTML nie powinno w ogóle występować
      • macro_call_silent nie pozostawia po wywołaniu nic, macro_call pozostawia zwyczajną część drzewa wyprowadzenia
    • pierwsze dziecko to zawsze nazwa makra
    • drugie dziecko to zawsze nazwa makra do wykorzystania w przywołaniu wartości ($macro_name) -- może być inna niż nazwa makra
    • zero lub więcej dalszych dzieci
      • pythonowy skalar: liczba (int, float) albo string
      • węzeł (dict) MACRO_VALUE -- odwołanie do wywołanego już makra w bieżącym bloku

TODO

  • block_definition
    • nazwa + block_arguments (lista) + block_body
    • zawsze pod document
  • block_body -- może zawierać to samo co document
  • block_call -- struktura jak macro_call