Program dostanete jeden argument a to je cesta k souboru šablony. Pokud se soubor nepodaří otevřít, program vypíše Can not open file\n (\n je znak konce řádku) a skončí. Pokud není šablona validní, program vypíše Invalid template\n a skončí. Pokud se povede šablonu načíst program čte a vyhodnocuje příkazy ze standardního vstupu.
Handlebars formát
Handlebars je textový šablonovací formát. Kontrolní výrazy začínají znaky {{ a končí }}. Kontrolní sekvence může obsahovat jeden kontrolní výraz, nebo jejich dvojici. Ve druhém případě slouží první výraz jako otvírací a druhý jako zavírací. Mezi otevírací a zavírací výraz je možné vložit další obsah, čímž získáváme stromovou strukturu podobou třeba HTML.
Validní šablona musí:
- obsahovat pouze kontrolní výrazy níže uvedené
- být korektně "uzávorkovaná", otvírací a zavírací kontrolní výrazy se nesmí křížit
Kód: Vybrat vše
<p>{{firstname}}</p>
<p>{{ firstname}}</p>
<p>{{ firstname }}</p>
<p>{{ firstname }}</p>
Všechny výrazy reprezentují proměnnou s názvem firstname. Podobné pravidlo platí i pro výrazy obsahující klíčové slovo, například if.
Příklady:
Kód: Vybrat vše
{{#if firstname}}
{{#if firstname}}
{{#if firstname }}
Dále jsou popsány podporované kontrolní výrazy.
Proměnná
Příklad níže ukazuje použití kontrolního výrazy proměnné s názvem firstname.
Kód: Vybrat vše
<p>{{firstname}}</p>
Kód: Vybrat vše
<p>Ailish</p>
Výraz má s with má jeden argument oddělený mezerou. Hodnota argumentu následovaná znakem tečky je použita jako prefix pro všechny proměnné v podstromu výrazu.
Příklad použití with:
Kód: Vybrat vše
{{#with person}}<p>{{firstname}}</p>{{/with}}
Klíčové slovo 'if'
Klíčové slovo if značí oblast podmíněného výstupu. Výraz má jeden argument a to je jméno proměnné.
Příklad níže dá na výstup inner content pouze tehdy, pokud existuje neprázdná proměnná firstname.
Kód: Vybrat vše
{{#if firstname}}inner content{{/if}}
Kód: Vybrat vše
{{#with person}}<p>{{#if firstname}}inner content{{/if}}</p>{{/with}}
Klíčové slovo each označuje kolekci hodnot. Výraz má jeden jeden argument a to je jméno proměnné.
Kód: Vybrat vše
<ul>
{{#each people}}
<li>{{firstname}}</li>
{{/each}}
</ul>
Příkazy
Příkazy jsou zadávány na standardní vstup. Jednotlivé příkazy jsou odděleny znakem konce řádku (\n). Prázdné řádky by měl program ignorovat. Znak konce řádku není součástí příkazu. Pokud je příkaz nevalidní, nebo neznámý program musí vypsat Invalid command\n a pokračovat načtením dalšího příkazu. Program skončí ve chvíli, kdy není již co číst - tedy narazí na konec standardního vstupu.
Níže jsou popsány podporované příkazy.
Příkaz nebere žádný argument. Vykonáním příkazy je vytisknutí aktuálního stavu šablony na standardní výstup. Bílé znaky mimo kontrolní výrazu musí být zachovány. Pokud kontrolní výraz má argumenty, jsou ty odděleny jednou mezerou. Vstupy ze sekce Handlebars formát by tak byly vypsány následovně:
Kód: Vybrat vše
{{firstname}}
{{#if firstname}}
Tento příkaz bere dva argumenty:
- jméno proměnné
- hodnotu proměnné Pokud jsou oba argumenty přítomné, jsou oddělené bílým znakem (mezeru). To znamená, že jméno proměnné nemůže obsahovat bílý znak (mezeru). Zápis příkazy tedy odpovídá následující šabloně:
Kód: Vybrat vše
set {name-without-space} {rest of line is a value}
- - proměnné name s hodnotou Ailish
Kód: Vybrat vše
set name Ailish
- - proměnná person.message s hodnotou Secret message ...
Kód: Vybrat vše
set person.message Secret message ...
- - proměnná empty s hodnotou `` (prázdný řetězec)
Kód: Vybrat vše
set empty
- - proměnná empty s hodnotou `` (prázdný řetězec)(všimněte si mezery za empty)
Kód: Vybrat vše
set empty
- - v tomto případě jsou dvě mezery po set, jméno proměnné je tedy `` (prázdný řetězec) hodnota je name Ailish
Kód: Vybrat vše
set name Ailish
Každá podmínka (if) obsahující danou proměnnou musí být vyhodnocena. Pokud je hodnota prázdná, je kontrolní sekvence if včetně obsahu z šablony odevzdána. Pokud je hodnota neprázdná, je kontrolní sekvence if nahrazena svým obsahem.
Příklady
Takto sekce obsahuje příklady šablon, příkazů a výstupů
Jednoduché nahrazení
Template:
Kód: Vybrat vše
Message:
{{message}}
Kód: Vybrat vše
> set message You can do this
> print
Message:
You can do this
Template:
Kód: Vybrat vše
{{value}} + {{value}} = {{result}}
Kód: Vybrat vše
> set value 1
> set result 2
> print
1 + 1 = 2
Template:
Kód: Vybrat vše
{{value}} {{#with content}} {{value}} {{/with}}
Kód: Vybrat vše
> set value one
> print
one {{#with content}} {{value}} {{/with}}
> set content.value two
> print
one {{#with content}} two {{/with}}
Kód: Vybrat vše
|{{#if should_render}} RENDER {{/if}}|
Kód: Vybrat vše
> set should_render one
> print
| RENDER |
Kód: Vybrat vše
|{{#if should_render}} RENDER {{/if}}|
Kód: Vybrat vše
> set should_render
> print
||
Kód: Vybrat vše
Messages: {{#each items}} {{value}} {{unchanged}} {{/each}}
Kód: Vybrat vše
> set items.*.value Single value ...
> print
Messages: {{#each items}} Single value ... {{unchanged}} {{/each}}