Referenca Spintax sintakse

Kompletna referenca za spintax markup šablona.

Nabrajanja { }

Nasumično bira jednu opciju sa liste.

{option1|option2|option3}

Primeri

{blue|grey|clear}
{|free|paid} plan                 ← empty option = sometimes nothing
{Acme {Pro|Lite}}                ← nested enumerations
{order {|#42-A} confirmed}       ← nesting with empty option

Pravila

  • Graničnici: { i }
  • Separator opcija: |
  • Podržava ugnežđivanje proizvoljne dubine
  • Prazne opcije su dozvoljene (daju prazan string)
  • Razrešavanje ide od najdubljeg izraza ka spolja

Permutacije [ ]

Bira N elemenata, meša ih i spaja separatorima.

Jednostavne permutacije

Svi elementi su uključeni, razdvojeni razmacima:

[1|2|3|4]

Primeri rezultata: 1 4 3 2, 2 3 4 1, 3 2 4 1

Sa separatorom

Zajednički separator se navodi u < > na početku:

[<, > 1|2|3|4]

Primeri rezultata: 2, 1, 4, 3, 4, 3, 2, 1

Važno: Nema razmaka između [ i <separator>.

Separatori po elementu

Svaka opcija može imati sopstveni separator zadat kroz <sep> pre prethodnog |. Separator putuje sa svojim elementom tokom mešanja.

[<, > 1|2|3 < and >|4]

Primeri rezultata: 1, 3, 2 and 4, 3, 1, 2 and 4

Auto-razmaci: Separatori-reči poput <i> ili <ili> automatski se dopunjuju razmacima, pa <i> daje  i . Interpunkcijski separatori (<,>) se ne dopunjuju.

Permutacije sa kombinacijama

Podesiv min./maks. broj elemenata i separatori:

[<minsize=1;maxsize=3;sep=", ";lastsep=" and "> apple|plum|orange|apricot]

Primeri rezultata: apple, plum and orange, apple and apricot, orange

Parametri konfiguracije

ParametarPodrazumevanoOpis
minsizebroj svihMinimalan broj elemenata za izbor
maxsizebroj svihMaksimalan broj elemenata za izbor
sep" " (razmak)Separator između elemenata (osim poslednjeg)
lastsepkao sepSeparator pre poslednjeg elementa

Pravila permutacija

  • Graničnici: [ i ]
  • Konfiguracioni blok <...> mora ići odmah posle [
  • Parametri konfiguracije se razdvajaju tačkom i zarezom
  • String vrednosti u konfiguraciji idu pod navodnike: sep=", "
  • Nabrajanja i permutacije mogu biti ugnežđeni u opcije
  • HTML elementi mogu biti opcije

Promenljive %var%

Definiše promenljivu za višekratnu upotrebu koja se zamenjuje svuda gde se pojavi.

#set %VARIABLE_NAME% = value or spintax structure
#def %VARIABLE_NAME% = value or spintax structure

Primeri

#set %name% = John
#set %greeting% = {Hello|Hi|Hey}
#set %items% = [<minsize=2;maxsize=3;sep=", ";lastsep=" and "> apples|oranges|bananas]
Some text with %name% and %greeting%, also %items%.

/# %greeting% above may differ between the two references — #set re-rolls.
   #def picks once and keeps it: #/
#def %tone% = {friendly|warm|upbeat}
A %tone% intro, and a %tone% outro — always the same word.

Pravila promenljivih

  • #set i #def moraju počinjati na početku reda
  • Imena promenljivih idu između %: %name%
  • Imena promenljivih čine slova, cifre i donja crta
  • Vrednosti mogu sadržati bilo koju spintax sintaksu (nabrajanja, permutacije, druge promenljive)
  • #set promenljive se razvijaju pri referenci, a ne pri definiciji (lenjo izračunavanje)
  • #set je makro: njegova vrednost se iznova zamenjuje — i spintax u njoj se iznova baca — pri svakoj referenci. #def razrešava vrednost jednom po renderu i drži taj rezultat svuda
  • Redovi #set i #def uklanjaju se iz rezultata

Opsezi promenljivih u WordPress pluginu

Plugin podržava tri opsega promenljivih. Kada isto ime postoji u više opsega, pobeđuje najjači:

  1. Runtime promenljive (najjače) — prosleđuju se kroz shortcode: [spintax slug="greeting" name="Alice"]
  2. Lokalne promenljive — definišu se kroz #set ili #def unutar šablona
  3. Globalne promenljive (najslabije) — definišu se na stranici podešavanja

Uslovi {?VAR?then|else}

Uslovi su prepoznatljiva ekstenzija spintax.net-a nad GTW familijom. Dok je {a|b} ravnomeran nasumičan izbor koji ignoriše promenljive, {?VAR?then|else} bira prema tome da li %VAR% ima vrednost.

Koristite ga za izbore vođene vrednošću: prikažite red o besplatnom paketu samo kad besplatan paket postoji, renderujte blok pro funkcija samo kad je korisnik na plaćenom planu, sakrijte CTA koji se ne primenjuje.

Pre-pass se izvršava pre razvijanja %var% i pre nasumičnog birača grana, pa se falsy grana odbacuje u celini — ništa u njoj se ne izračunava.

Oblici

{?VAR?then}                ← truthy ⇒ then; falsy ⇒ empty
{?VAR?then|else}           ← truthy ⇒ then; falsy ⇒ else
{?!VAR?then|else}          ← inverted
{?HasFreeTier? — free tier available since %founded%|, trusted since %founded%}

Truthy i falsy

Pravilo je namerno jednostavnije nego u JavaScriptu — truthy = bar jedan znak koji nije razmak:

Vrednost %VAR%Truthy?
nije deklarisanafalsy
prazan stringfalsy
samo razmacifalsy
"0", "false"truthy (neprazni stringovi)
bilo koji drugi tekst ili HTMLtruthy

Pravila uslova

  • Imena promenljivih prate isti regex kao %var% (bez razlikovanja velikih i malih slova)
  • Prefiks ! obrće proveru: {?!VAR?nema podataka}
  • Prvi | na dubini 0 razdvaja then od else; kasniji | na vrhu ostaju literali u else
  • Ugnežđeni uslovi se izračunavaju outer-first — falsy grane se kratko spajaju
  • Složena logika (&&, ||, poređenja) nije podržana — izračunajte guard promenljivu u asembleru
  • Neispravni oblici ({??yes}, {?VAR}) nikad ne bacaju grešku — playground ih obeležava kao upozorenja
  • Detaljno: pogledajte vodič za uslovni spintax sa razrađenim primerima i anti-šablonima

Plurali {plural %n%: varijanta|varijante|varijanti}

Bira gramatički ispravan oblik reči za broj. Brojač ide pre dvotačke, oblici posle nje, razdvojeni sa |.

Oblik bira lokal renderovanja, a ne šablon — pa broj oblika koje morate navesti zavisi od tog lokala. Srpskom trebaju tri, engleskom dva.

{plural %n%: form1|form2}          ← 2-form locale (en, de, es…)
{plural %n%: form1|form2|form3}    ← 3-form locale (ru, uk, sr…)
#def %LangCount% = 5
supports %LangCount% {plural %LangCount%: language|languages}
← supports 5 languages

Oblici po lokalu

Lokal se poklapa po jezičkom subtagu, pa se sr-RS i sr ponašaju identično:

LokalOblikaBira se po
ru, uk, be, sr, hr, bs31 · 2–4 · 5 i više
svaki drugi lokal, uklj. en2tačno 1 · sve ostalo

Navedete li pogrešan broj oblika, motor prijavljuje plural.arity i ostavlja blok vidljivim u zagradama pune širine — pogrešan plural nikada ne odlazi u produkciju ćutke.

Pravila plurala

  • Otvaranje je literalno, uključujući razmak: {plural . {plural: x} i {pluralN: x} nisu plural blokovi
  • Dvotačka je obavezna — razdvaja brojač od oblika
  • Brojač je referenca %Var% ili celobrojni literal; promenljive u brojaču se zamenjuju pre izbora oblika
  • Negativni brojevi koriste apsolutnu vrednost; 0 uzima oblik „sve ostalo“ (u srpskom — „varijanti“)
  • Promenljiva-brojač mora biti #def, a ne #set#set je makro, pa je vrednost poput {1|4|9} u trenutku izbora oblika i dalje nerazrešen spintax i ceo blok se renderuje prazan. Playground to obeležava kao plural.count-macro
  • Nenumerički ili nedefinisan brojač briše blok umesto da pogađa
  • Detaljno: pogledajte vodič za plurale — pravila tri oblika i razrađeni primeri

Uključivanja #include

Ugrađuje drugi šablon na poziciju direktive.

#include "hero-text"

Pravila uključivanja

  • Referenca na šablon ide pod dvostruke navodnike
  • Razrešava se po slugu ili numeričkom ID-u šablona
  • Uključeni šabloni mogu sadržati sopstvene promenljive i spintax
  • Rekurzivna uključivanja su podržana
  • Cirkularne reference se otkrivaju i blokiraju
  • Podšabloni nasleđuju globalne i runtime promenljive, ali ne i roditeljske lokalne #set / #def

Komentari /#...#/

Tekst između markera komentara uklanja se iz rezultata pre svake druge obrade.

/#
  This is a comment section.
  It can span multiple lines.
  It won't appear in output.
#/

Pravila komentara

  • Početni graničnik: /#
  • Završni graničnik: #/
  • Može se protezati kroz više redova
  • Ugnežđivanje nije podržano
  • Uklanjaju se pre svake druge obrade

Ugnežđivanje

Svi elementi sintakse mogu se ugnežđivati jedni u druge do proizvoljne dubine:

{option1|[<, > sub1|sub2|sub3]|option3}

[<minsize=2;maxsize=3;sep=", ";lastsep=" and "> {red|blue} apples|{big|small} oranges|bananas]

#set %var% = {a|[b|c]}

Postobrada

Motor automatski koriguje tekst posle generisanja:

  1. Zaštita URL-ova, imejl adresa, domena, decimalnih brojeva i skraćenica od promene velikih slova
  2. Sažimanje dupliranih razmaka i tabulatora
  3. Uklanjanje razmaka pre interpunkcije (, . ! ?)
  4. Dodavanje razmaka posle interpunkcije gde nedostaje
  5. Veliko slovo na početku rezultata (uz preskakanje HTML tagova)
  6. Veliko slovo posle znakova kraja rečenice
  7. Veliko slovo posle blokovskih HTML tagova
  8. Veliko slovo posle preloma reda
  9. Vraćanje zaštićenih čuvara mesta

Pregled sintakse

MogućnostSintaksaPonašanje
Nabrajanje{a|b|c}Izaberi jednu nasumičnu opciju
Permutacija[a|b|c]Izaberi N, promešaj, spoji
Separator[<sep> a|b|c]Permutacija sa zajedničkim separatorom
Separator po elementu[<,> a|b <x>|c]Permutacija sa prilagođenim separatorima
Kombinacije[<config> a|b|c]Permutacija sa min./maks. brojem
Promenljiva#set %var% = valVišekratna zamena
Promenljiva (jednom po renderu)#def %var% = valRazrešava se jednom po renderu
Uslov{?VAR?then|else}then ako je truthy; inače else
Plural{plural %n%: varijanta|varijante|varijanti}Slaže oblik reči sa brojem, po lokalu
Uključivanje#include "slug"Ugradi drugi šablon
Komentar/#...#/Uklanja se iz rezultata

Sintaksa je kompatibilna sa standardom Generating The Web (GTW).