Skip to content

Index funkcií

Každá funkcia jazyka Rea, zoskupená podľa toho, na čo slúži, a označená tým, ako ďaleko sa v skutočnosti dostala. Táto stránka odpovedá na jedinú otázku, ktorú si treba položiť skôr, než napíšete riadok: môžem sa na to dnes spoľahnúť?

Tá istá značka sa objavuje pod vlastným nadpisom funkcie v špecifikácii, takže stav sa nikdy nečíta z dvoch miest.

Čo jednotlivé stavy znamenajú

StavMôžem to použiť?Čo to znamená
stableÁno — stavajte na tomVydané a zmrazené. Zmeniť to môže len nová verzia MAJOR jazyka. Patrí sem všetko, čo používa bežný odsek prózy.
experimentalÁno — s poznámkou vo vašom changeloguVydané a použiteľné a na tejto úrovni je dnes väčšina jazyka. Syntax sa v rámci 1.x ešte môže upraviť, takže aktualizácia si od vás môže vyžiadať zásah.
developmentZatiaľ nieNavrhnuté, odsúhlasené a práve sa stavia. Syntax nižšie je taká, aká bude, ale jadro ju zatiaľ neprijíma.
draftNieŠpecifikované a prediskutované, aby bol tvar myšlienky zaznamenaný. Implementácia sa nezačala a návrh sa ešte môže úplne zmeniť.
cancelledNikdyZvážené a zámerne vylúčené. Zdokumentované preto, aby rozhodnutie zostalo viditeľné a nebolo objavené a preberané znovu.

Značka verzie sprevádza stav len tam, kde je čo verziovať: funkcie stable a experimental nesú verziu špecifikácie, v ktorej sa stali dostupnými. Funkcia development alebo draft verziu zatiaľ nemá a cancelled ju mať nikdy nebude.

Všetko označené ako stable alebo experimental v súčasnom jadre funguje. Čokoľvek pod tým nie — ak to príbeh použije, runtime uplatní elegantnú degradáciu a čitateľ to jednoducho nikdy neuvidí.

156 funkcií v 16 oblastiach jazyka. Zoznam zúžite výberom stavu nižšie.

Text a próza11/11

Značkovanie, ktoré bežný odsek už používa. Toto je zmrazené jadro jazyka.

  • Once upon a time…

    Definujúca vlastnosť jazyka — odsek prózy je kompletný, vykresliteľný príbeh úplne bez syntaxe.

  • blank line · trailing \

    Odseky oddelené prázdnym riadkom, tvrdé zalomenie jedným novým riadkom a spojenie koncovou spätnou lomkou sú súčasťou zmrazeného jadra prózy.

  • _italic_ · *bold* · _*both*_

    Jediné dva inline znaky formátovania v jazyku; vnorenie aj kombinovanie sú špecifikované a v 1.x sa nezmenia.

  • {underline begin}…{end underline}

    Párové príkazy namiesto inline značiek, aby zriedka používaná dekorácia nikdy nesúperila s interpunkciou prózy.

  • {format color="#00f" begin}…{end format}

    Práve sa stavia: všeobecný formátovací blok pre farbu, veľkosť a hrúbku. Syntax je dohodnutá, ale parser ju zatiaľ neprijíma, takže {format} sa dnes vykreslí ako čistý text.

  • backtick fence

    Ohraničenie spätnými apostrofmi s pravidlom stupňovaného oddeľovača pri vnáraní, spolu s inline kódom, sú zmrazené.

  • Nadpisy stable1.0
    # · ## · ### …

    Platné od prvého vydania a odvtedy nezmenené; neobmedzená hĺbka, pričom platforma vykreslí toľko úrovní, koľko jej téma rozlišuje.

  • ## The Forest → #the_forest

    Päťkrokové pravidlo tvorby kotvy je zmrazené, pretože jeho zmena by ticho rozbila každý existujúci odkaz na nadpis.

  • = centre · > right · < left

    Zarovnanie prefixom a jeho pravidlo opakovania pre odsadenie sú súčasťou zmrazeného jadra prózy.

  • Citácie stable1.0
    | quote · || nested

    Citovanie prefixom zvislej čiary s neobmedzeným vnáraním, zmrazené od prvého vydania.

  • - · -- · --- · ---- · -----

    Päť sémantických váh, od najťažšej; rovnaké pravidlo „viac znakov znamená ľahšie", aké používajú nadpisy.

Odkazy, kotvy a médiá9/9

Všetko písané v hranatých zátvorkách: navigácia, vložené médiá a poznámky zavesené na úsek textu.

  • Odkazy stable1.0
    [display text > target]

    Jednotný tvar so zátvorkou a šípkou je ustálenou odpoveďou na každý druh navigácie a v 1.x sa nezmení.

  • Vlastné kotvy stable1.0
    [#anchor_name]

    Označí ľubovoľné miesto v próze ako cieľ odkazu, popri kotvách, ktoré nadpisy definujú implicitne.

  • Odkazy medzi príbehmi experimental1.0
    [text > reast://author/story]

    Rozlíšenie závisí od hostiteľskej platformy, takže schéma je zverejnená, ale ešte nie zmrazená.

  • [!alt < src] · [>caption < src] · [?caption < src]

    Tri prefixy médií a šípka zdroja < sú zmrazené; čo hostiteľ so súborom urobí, je jeho vec.

  • Atribúty médií experimental1.0
    [!alt < src, width=800, loop]

    Pravidlo parametrov oddelených čiarkou je ustálené; množina rozpoznávaných atribútov ešte rastie.

  • [the term > ^A note about it.]

    Inline poznámky, ktoré cestujú spolu s textom — niet samostatného bloku definícií, ktorý treba udržiavať v súlade.

  • [the tower > *nudge**firmer hint]

    Deväť úrovní nápovedy za prepínačom, ktorý ovláda čitateľ; syntax úrovne pomocou série hviezdičiek je zmrazená.

  • Brány častí experimental1.0
    [[ story/0005-forest.rea ]]

    Automatický, koncový prechod medzi časťami viacdielneho príbehu; vydané, pričom prípona :scene v rámci časti sa ešte ustaľuje.

  • Odkazy medzi časťami experimental1.0
    [enter the castle > story/0006-castle.rea]

    Bežný odkaz, ktorého cieľom je súbor inej časti, takže čitateľ sa môže posunúť ďalej klepnutím.

Príkazy a premenné10/10

Príkazy v zložených zátvorkách, stav príbehu a dátové typy, ktoré premenná môže uchovať.

  • Príkazy experimental1.0
    {name attr=value} · {name begin}…{end name}

    Pravidlo „vždy buď samouzatvárajúci, alebo párový" a párovanie begin / {end …} sú vydané; jednotlivé príkazy majú vlastný stav.

  • Skrátená tlač experimental1.0
    You have {player.gold} gold.

    Samotný výraz v zložených zátvorkách vytlačí svoju hodnotu; vydané a široko používané, ale okolitá gramatika výrazov sa ešte môže pohnúť.

  • Atribúty príkazov experimental1.0
    {voice speed=3, emotion="whisper" begin}

    Jedna gramatika parametrov oddelených čiarkou, spoločná pre príkazy, funkcie, médiá aj polia.

  • Premenné experimental1.0
    {set story.player.gold = 100}

    Dostupné od prvého vydania a v reálnom používaní, ale stále v testovacej fáze — priradenie aj povinné pravidlo domény sa môžu pred zmrazením upraviť.

  • Domény experimental1.0
    part. · story. · shared. · context.

    Presne štyri povinné domény — part, story, shared, context — každá s vlastnou životnosťou; rozsah nadpisu už neexistuje.

  • Doména context experimental1.0
    context.reader.* context.time.* context.device.* context.group.*

    Menný priestor platformy len na čítanie existuje pod context.*; koľko schopností sprístupní, závisí od hostiteľa a stále rastie.

  • Dátové typy experimental1.0
    string · integer · float · boolean · array · regex · undefined

    Množina typov je vydaná vrátane pravidla o vždy dvojito uvádzaných reťazcoch, ktoré udržiava holé slová jednoznačné.

  • Polia experimental1.0
    ["sword", "map"] · [hp=100, dex=8]

    Jediný kolekčný typ, s pozičnými aj pomenovanými položkami v jedinom literáli; indexovanie od nuly je ustálené.

  • datetime("2026-06-15T10:30") · duration("P1DT2H")

    Konštruktory podľa ISO 8601 vrátane zástupných znakov * pre vzory dennej doby.

  • @(lat, lng) · circle(p, m) · area(p1, p2, p3) · path(...) · buffer(shape, m) · distance(a, b) · bearing(a, b) · a + b · a - b

    Bod je literál, pretože príbeh zasadený do reálneho miesta ich píše veľmi veľa; všetko, čo má rozlohu, je bežné volanie nad bodmi, takže sa tvary skladajú bez vlastnej syntaxe. Oba argumenty @(lat, lng) sú výrazy, matches sa pýta, či bod leží v oblasti, a + a - sú zjednotenie a rozdiel. Najprv je zemepisná šírka, polomery sú v metroch.

Výrazy a operátory4/4

Výpočet hodnôt: aritmetika, porovnávanie, hľadanie vzorov a práca s typmi.

  • Operátory a priorita experimental1.0
    + - * / % = != < > and or ! matches in

    Celá tabuľka priorít je vydaná; jednoduché = pre rovnosť je ustálené rozhodnutie, nie dočasná náhrada.

  • Ternárna podmienka experimental1.0
    {gold > 0 ? "hopeful" : "dejected"}

    Inline podmienené hodnoty s najnižšou prioritou, takže vnáranie vyžaduje explicitné zátvorky.

  • Testy vzoru a členstva experimental1.0
    matches /regex/ · "x" in array

    Operátory ako kľúčové slová namiesto symbolov, každý s negáciou pomocou prefixu !.

  • Pretypovanie a konverzia experimental1.0
    number(x) · string(x) · boolean(x) · integer(x)

    Implicitné pretypovanie vnútri výrazov plus štyri explicitné konverzné funkcie; pravidlo „reťazec + čokoľvek = reťazec" je ustálené.

Riadenie toku11/11

Podmienky, cykly a stavové automaty.

  • If / else if / else experimental1.0
    {if cond begin} … {else} … {end if}

    Najpoužívanejší príkaz jazyka; vydaný a v praxi stabilný, formálne stále experimentálny spolu so zvyškom vrstvy príkazov.

  • Switch / case experimental1.0
    {switch expr begin} {case "x"} … {end switch}

    Viaccestné vetvenie so záložnou vetvou {default}.

  • Cyklus for experimental1.0
    {for item in list, index begin} … {end for}

    Prechádza polia s voliteľnou premennou indexu počítanou od nuly.

  • Cyklus while experimental1.0
    {while cond, n begin} … {end while}

    Opakovanie riadené podmienkou s voliteľným počítadlom iterácií; runtime ho ohraničuje proti nekonečným cyklom.

  • {break} · {continue}

    Špecifikované spolu s cyklami, ale neimplementované — cyklus dnes beží po svoj prirodzený koniec. Autori namiesto toho odchádzajú skôr pomocou podmienky.

  • Stavové automaty development
    {state_machine door, initial="locked" begin}

    Parser prijíma stavy, prechody aj strážne podmienky a runtime sleduje aktuálny stav; perzistencia a zdieľanie medzi čitateľmi sa ešte stavajú, takže autorom to zatiaľ nie je ponúknuté.

  • Obsluhy udalostí experimental1.3
    {on acquire card="king" begin}

    Jedna plochá forma pre každú udalosť v jazyku. Predmet je jediný atribút — card=, deck=, set=, zone=, state= — a vykoná sa každá zodpovedajúca obsluha, od najmenej konkrétnej.

  • {define manifest …} · {define file "assets/x.webp" begin}

    Všetko, čo drží .reast, vyjadrené v jednom textovom súbore: vlastné metadáta aj vlastné prílohy, adresované tými istými cestami relatívnymi k archívu.

  • Manifest v holom .rea experimental1.3
    {define manifest title="…", language="sk"}

    Číta sa len ako prvý príkaz súboru, takže nástroj zistí jedným riadkom, či .rea nesie metadáta. V .reast je zakázaný, tam je manifest.json jediný.

  • Vložené súbory experimental1.3
    {define file "assets/x.webp" mime="image/webp" begin}

    Identifikátorom je cesta, takže [!alt < assets/x.webp] funguje v oboch tvaroch bez zmeny a prevod medzi nimi je čisté vloženie a vypísanie.

  • Čakanie na podmienku experimental1.1
    {wait escape=…, escape_to=… when EXPR begin} … {end wait}

    Príbeh sa zastaví, kým výraz nezmení hodnotu na pravdivú. Telo je to, čo čitateľ vidí počas čakania; escape= sa po uplynutí trvania vzdá a escape_to= ho pošle inam. Povinné vždy, keď výraz číta context.*.

Funkcie a rozšíriteľnosť5/5

Znovupoužiteľná logika vnútri príbehu, prenosné moduly cestujúce v balíku a kód dodaný hostiteľom.

  • Funkcie experimental1.0
    {function greet(name) begin} … {end function}

    Definícia, volania, predvolené parametre aj {return} fungujú; štyri klasifikácie kontextu volania sú vydané, ale môžu pribudnúť pravidlá kontroly.

  • {use "extensions/inventory" as inv}

    Moduly obsahujúce len deklarácie, ktoré cestujú vnútri balíka a sú skompilované a overené ešte pred spustením akejkoľvek prózy.

  • {use "std/dice" as dice}

    Rozlišuje sa priamo v jadre, nie v archíve ani u hostiteľa, takže funguje offline v ľubovoľnom vložení; std/dice je prvý modul.

  • Rozšírenia hostiteľa experimental1.0
    {ns.command args} · {ns.fn()}

    JavaScript, ktorý vkladajúca aplikácia registruje pre každú inštanciu prehrávača; stojí mimo samotného jazyka Rea a príbeh musí deklarovať menné priestory, ktoré potrebuje.

  • Udalosti experimental1.0
    {on story_start begin} … {end on}

    Blok {on …} a udalosti životného cyklu sú vydané; udalosti riadené senzormi závisia od funkcií, ktoré sú stále vo vývoji alebo v návrhu.

Voľby a vetvenie15/15

Ako sa čitateľ pohybuje príbehom a ako si príbeh pamätá, kde už bol.

  • Voľby experimental1.0
    * [One-time] · + [Sticky]

    Jednorazové a trvalé voľby, aj pravidlo textu pred návestím, v ňom a za ním, sú vydané a v každodennom používaní.

  • Podmienené voľby experimental1.0
    * {gold >= 50} [Bribe the guard]

    Podmienka pred návestím rozhoduje o tom, či sa možnosť vôbec ponúkne.

  • Skryté voľby experimental1.0
    * hidden [&card_id] …

    Možnosť bez tlačidla, ktorá sa spustí len voľným textovým vstupom alebo aktiváciou v reálnom svete; vydané spolu s menu objavovania.

  • Odbočky experimental1.0
    -> the_clearing

    Jednoduchý skok na pomenovanú kotvu.

  • Vnorené voľby a zbery experimental1.0
    * * [Deeper] · - gather

    Vnáranie v štýle weave, kde sa vetvy opäť zbiehajú v bode zberu zodpovedajúcej hĺbky.

  • Záložné voľby experimental1.0
    * ->

    Možnosť bez textu, ktorá sa vyberie automaticky, keď už nič iné nie je použiteľné.

  • Tunely experimental1.0
    ->-> examine_lock

    Odbočka do sekcie, ktorá sa automaticky vráti volajúcemu — mechanizmus, ktorý znovu využívajú spúšťané storylety.

  • {once begin} … {then} … {end once}

    Hlavný obsah pri prvom stretnutí, voliteľná náhrada pri každom ďalšom.

  • Meniaci sa text experimental1.0
    {a|b|c} · {&cycle} · {!once} · {~shuffle}

    Varianty sekvencie, cyklu, jedného zobrazenia a náhodného poradia riadené počtom návštev; premiešanie čerpá zo seedovaného generátora príbehu, takže opakované prehratie je reprodukovateľné.

  • {label door begin}locked{end label} · {replace door = "open"}

    Návestia sa dnes parsujú a sledujú, ale {replace} ich zatiaľ neprepisuje na mieste — práve sa stavia cesta aktualizácie na mieste cez renderer.

  • {cycle color begin}red|blue|green{end cycle}

    Hodnoty cyklu a sprístupnená premenná fungujú; ovládanie klepnutím na posun v čítačke sa ešte stavia.

  • {parallel begin} {thread a begin} … {end parallel}

    Nezávislé vlákna, ktoré sa zbiehajú v bode stretnutia. Prediskutované pre kooperatívne čítanie, ale nepostavené — nič v parseri zatiaľ nepozná {parallel} ani {thread}.

  • Viacdielne príbehy experimental1.0
    manifest.parts + gates + cross-part links

    Časti sa načítavajú na požiadanie, premenné sa hromadia pozdĺž prejdenej cesty a uložená cesta pri obnovení znovu vybuduje históriu čítania.

  • {undo enabled=false}

    Runtime si drží zásobník krokov späť na úrovni volieb, ale príkaz {undo}, ktorým autor môže krok späť pre hádankovú sekciu vypnúť, je len špecifikovaný — kooperatívne pravidlá okolo neho nie sú vyriešené.

  • {checkpoint name="before_boss"} · {restore name=…}

    Automatické ukladanie postupu funguje už dnes. Kontrolné body deklarované autorom, {restore} a {save enabled=false} sú špecifikované, ale nepostavené, a kooperatívne pravidlo „všetci čitatelia musia súhlasiť" si najprv vyžaduje návrhové kolo.

Karty, balíčky a objavovanie9/9

Karty a balíčky: nelineárny naratív riadený kvalitami, ktorý príbeh rozdáva namiesto toho, aby naň smeroval.

  • Karty experimental1.0
    {define card king deck="roles" when … begin} … {end card}

    Karta je líce plus telo. Priorita, váha, ochladenie, štítky a klauzula when riadia výber; deck= ju zaraďuje do balíčka a karta bez balíčka je to, čomu sa kedysi hovorilo storylet.

  • Líce karty experimental1.4
    {face vertical="60%" begin} **1 gold** {end face}

    To, čo je na karte vytlačené — na rozdiel od tela, ktoré sa prehrá. Blok, nie atribút, takže unesie tučné písmo, kurzívu, odkazy aj nápovedy; vertical= ho umiestni ako percento výšky karty a horizontal= ako percento jej šírky, čím sa z pásu textu stane štítok na konkrétnom mieste obrázka. Tri mince, ktoré vyzerajú rovnako a majú hodnotu 1, 2 a 5, sa líšia iba tu.

  • Vrstvy karty experimental1.6
    {layer image="assets/shield.webp", vertical="20%", horizontal="80%", width="18%"}

    Obrázok navrstvený na kresbu karty. Viac vrstiev aj text líca tvoria jednu kartu: otáčajú sa, zväčšujú a animujú spolu. Pozície sú percentá karty, takže prekrytie padne na to isté miesto na náhľade aj na celej obrazovke; ako je vrstva krycia, patrí obrázku, a klauzula when je to, čo prekrytie zapne — štít sa objaví, keď ho čitateľ má.

  • Detail karty experimental1.4
    {detail begin} … {end detail}

    To, čo čitateľ nájde na rube karty: autorova próza o nej, taká dlhá, ako treba. Nie jednoriadkový description, ktorý ukazuje zoznam — tu si čitateľ prečíta o Rytierovi bez toho, aby opustil príbeh. Bežný obsah, a nikdy nie súčasť tela, takže otočenie karty ju nikdy nezahrá.

  • Balíčky experimental1.3
    {define deck roles play="consumed", face="down"}

    Pomenovaná zásoba kariet s predvolbami, ktoré dedia jej karty aj miesta ťahania: rozsah, politika návratu, koľko sa rozdáva a či čitateľ vidí líca.

  • Ťahanie a zahranie experimental1.3
    {draw deck="basic"} · {play deck="basic", deal=3 begin}

    {draw} vezme kartu do Vaku, {play} jednu hneď aktivuje a {return card=…} ju vráti späť. Oba majú blokovú formu s výzvou a náhradou {empty}.

  • Spúšťané storylety experimental1.0
    trigger=scan · match="^REAST-.*"

    Storylet, ktorý rozdáva svet namiesto balíčka; prehrá sa ako vedľajšia cesta a vráti sa presne tam, kde čitateľ prestal. Ktoré druhy spúšťačov skutočne fungujú, závisí od čitateľskej aplikácie a od funkcií, ktoré sú ešte vo vývoji.

  • {triggers off} … {triggers on}

    Jedna ohrada pre každé prerušenie: kým je zatvorená, spúšťač z reálneho sveta nezobudí nič a karta zahraná z tašky je odmietnutá. Putuje s uložením.

  • Menu objavovania experimental1.0
    {menu select=2 begin} … {end menu}

    Skupina volieb, ktorá čaká na viacero objavov namiesto jedného výberu; politika select=all aj pravidlo priority „menu má prednosť pred storyletom" sú vydané.

Karty, inventár a dialóg10/10

Postavy, predmety, akcie, vlastné sady kariet, peňaženka mincí a pripisovanie repliky hovorcovi.

  • Karty postáv experimental1.0
    [@elena] · {define character elena name="Elena Voss"}

    Klepnuteľné odkazy na postavy podložené definičným blokom s portrétom, titulom a popisom.

  • [$golden_key] · {give …} · {take …}

    Predmety, čitateľovo vrecko a obsluhy {on acquire item=…} / {on lose item=…}.

  • Karty akcií experimental1.0
    [&open_the_gate]

    Body vetvenia s vizuálnym dôrazom, ktorých description: zároveň slúži ako sémantický cieľ pre voľný textový vstup.

  • scan= · mark= · listen=

    Polia karty sa parsujú a porovnávajú, ale strana snímania závisí od čitateľskej aplikácie: skenovanie a reč sa stavajú a mark: podpisy potrebujú kresliaci nástroj editora, ktorý zatiaľ nie je vydaný.

  • Vlastné sady kariet experimental1.0
    {define cardset ability name="Ability Cards"}

    Kategórie kariet deklarované autorom so spoločnými pravidlami získania, straty a použitia a s háčikmi na úrovni sady, ktoré karta môže prekryť.

  • Zahranie karty experimental1.0
    {play ginko}

    Vykoná každú obsluhu {on use}, ktorá karte zodpovedá — obsluhu sady pred vlastnou — a vyšle udalosť card-played, ktorú môžu hostitelia sledovať.

  • {define card_type location, prefix="📍"}

    Nové prefixy v hranatých zátvorkách nad rámec @, $ a &. Špecifikované ako budúci bod rozšírenia; vlastné *sady* kariet dnes pokrývajú väčšinu potreby, takže implementácia sa nezačala.

  • weight=3 · home=@(48.14, 17.10) · story.card.lantern.weight

    Atribút karty bez úvodzoviek, ktorý je úplným literálom jazyka Rea, nesie skutočné číslo, pravdivostnú hodnotu, bod alebo pole a číta sa späť ako story.card.<id>.<prop>. Úvodzovky nechajú hodnotu zobrazovaným textom, takže sa obe čítania nikdy neprekrývajú. Kópia je iba na čítanie a drží len typované vlastnosti.

  • Mince a peňaženka experimental1.0
    {earn gold 2} · {spend bronze 3}

    Trojúrovňová peňaženka s pevnými internými názvami, aby uloženia zostali prenosné, a s označeniami a pomermi, ktoré autor môže premenovať.

  • Pripísanie repliky experimental1.0
    @elena: "Follow me."

    Spája riadok reči s kartou postavy, čo je zároveň to, čo umožňuje automatické priradenie hlasu.

Vstup a interakcia7/7

Získanie odpovede od čitateľa: napísané odpovede, tlačidlá, časovače a hlasový výstup.

  • {input name=guess, type="number", min=1, max=100}

    Vykonávanie sa pozastaví, kým čitateľ neodošle odpoveď; číselný vstup sa oreže na svoje hranice.

  • {input type="action", placeholder="What do you do?"}

    Čitateľ napíše, čo chce urobiť, a spustí sa najlepšie zodpovedajúca možnosť; porovnávanie prebieha výhradne na zariadení, takže veta ho nikdy neopustí.

  • {voice speaker="elena", emotion="whisper" begin}

    Príkaz sa parsuje a dorazí k hostiteľovi ako požiadavka, ale samotnú syntézu reči dodáva čitateľská aplikácia, ktorá sa ešte stavia — dnes sa nič nevysloví.

  • {audio src=…, loop} · {stop ambient_music}

    Pomenovaný, ovládateľný zvuk na pozadí. Vložený zvuk cez [?caption < src] funguje už dnes; príkazová forma, ktorá spúšťa a zastavuje pomenovanú stopu, je len špecifikovaná.

  • {button label="Continue", target=next_chapter}

    Navigačný prvok oddelený od voľby. Špecifikované, ale nepostavené — voľby a odkazy pokrývajú to isté, takže to zostalo na konci zoznamu.

  • Časovače development
    {timer duration=30, on_expire="-> times_up" begin}

    Runtime časovače spúšťa, zastavuje a nechá vypršať; odpočet viditeľný pre čitateľa a sprístupňujúce prvky, ktoré musia časovanú voľbu sprevádzať, sa ešte stavajú.

  • {verbs begin} · {target chest begin}

    Ťahanie slova akcie na zvýraznené podstatné meno. Obľúbený nápad z Texture, špecifikovaný celý, ale nezačatý; pred stavbou potrebuje alternatívu k ťahaniu pre používateľov klávesnice a čítačiek obrazovky.

Kooperatívne čítanie9/9

Viacero čitateľov v jednom príbehu: roly, zdieľaný stav, skupinové rozhodnutia a degradácia na sólo čítanie.

  • Roly čitateľov development
    {define role captain max=1}

    Roly a obsah viazaný na rolu sa parsujú a vyhodnocujú; priraďovanie a prerozdeľovanie potrebujú službu skupinových relácií, ktorá sa stavia.

  • Zdieľaný stav development
    {set shared.torch_lit = true}

    Rozsah shared. je rozpoznávaný a synchronizačná vrstva v jadre existuje, ale šírenie medzi čitateľmi potrebuje realtime kanál platformy, ktorý zatiaľ nebeží.

  • {vote timeout=60 begin} … {end vote}

    Parsuje sa a cesta degradácie na sólo čítanie už funguje; sčítavanie medzi reálnymi čitateľmi čaká na ten istý realtime kanál.

  • {whisper to="captain" begin} · {broadcast begin}

    Správy cielené na rolu a správy pre celú skupinu; obe sa parsujú a obe degradujú na bežný text pri sólo čítaní, doručovanie čaká na službu skupinových relácií.

  • {wait readers=all begin} … {end wait}

    Blokuje, kým nedorazia ostatní čitatelia, alebo prejde okamžite pri sólo čítaní; viacčitateľská polovica nebeží.

  • {synchronize out} · {synchronize auto="on", interval=5}

    Ručné ovládanie odoslania a načítania zdieľaného stavu pre ťahové príbehy. Špecifikované, ale zmysel dostane až vtedy, keď bude existovať automatická synchronizácia, takže nič nie je postavené.

  • {exclusive action="open_chest" begin} · {race timeout=10 begin}

    Primitíva typu „vyhráva prvý čitateľ" s definovaným správaním pri odpojení. Podrobne špecifikované; implementácia čaká na vrstvu zdieľaného stavu, od ktorej závisia.

  • {presence show="cursor" begin} · {react options=[…] begin}

    Vidieť, kde sa nachádzajú ostatní čitatelia, a reagovať emotikonmi. Špecifikované ako neskorší doplnok kooperatívneho čítania; nič nie je postavené.

  • automatic

    Každá kooperatívna konštrukcia má definované správanie pre jediného čitateľa, takže kooperatívny príbeh je vždy hrateľný osamote — táto časť funguje už dnes aj tam, kde viacčitateľská polovica nie.

Interakcia s reálnym svetom20/20

Senzory a fyzický kontext: poloha, kódy, štítky, pohyb, svetlo a počasie.

  • Zdroje kontextu experimental1.1
    context.time · context.location · context.weather · context.ext.<ns>

    Každý podstrom context. je zdroj s vlastnou kadenciou: čas je odvodený a presne povie, kedy sa nabudúce zmení, poloha je prúd s doručovaním a počasie je zdieľané dopytovanie s obmedzenou frekvenciou. Zdroj sa spustí, keď naň začne čakať prvá podmienka, a zastaví sa, keď odíde posledná.

  • {require gps} · {require nfc optional} · world.has("nfc")

    Deklarovanie toho, čo príbeh potrebuje, a overenie za behu, čo skutočne dostal, aby každá senzorová cesta mala napísanú náhradu.

  • Poloha experimental
    context.location matches circle(@(lat, lng), metres)

    Testovanie polohy čitateľa proti oblasti v bežnom výraze. Meranie polohy od hostiteľa sa prevedie na bod, takže ho matches berie priamo proti kruhu, mnohouholníku alebo obalenej trase.

  • Zastávky experimental1.1
    {waypoint old_bridge, circle(@(48.14, 17.10), 50) begin}

    Pomenované miesta v štýle geocachingu podmienené príchodom. Zastávka je {wait} plus miesto na mape: hint= je jej text počas čakania, telo je obsah po príchode a o oboch rozhoduje ten istý plánovač.

  • {map id bounds="…" begin} … {pin id at=… begin} … {end map}

    Obrázok dodaný autorom ukotvený na reálne GPS hranice dvoma bodovými literálmi, pričom polohu každého špendlíka určuje bodový výraz at:. Parsuje sa na štruktúrované uzly; zostávajúcim dielom je renderer projekcie v čítačke.

  • Viacetapové trasy experimental1.1
    {route treasure_hunt, waypoints="a, b", sequential begin}

    Chodník cez zastávky deklarované inde. Postup sa odvodzuje z týchto zastávok, nevedie sa osobitne, a riadok complete: sa vykreslí tam, kde stojí blok, keď sú hotové všetky etapy.

  • Geografické zóny experimental1.1
    {zone dark_forest, area(…)} · {on enter zone="dark_forest" begin}

    Forma kedykoľvek bloku wait: ten istý výraz oblasti, rozhodovaný na každej hrane. Blok vykreslí obsah hrany, ktorú čitateľ naposledy prekročil, a príkazy hrany sa vykonajú pri jej spustení.

  • Kontext času a dátumu experimental1.0
    world.hour · world.weekday · world.season

    Jediný vstup z reálneho sveta, ktorý nepotrebuje povolenie ani senzor, takže je najbezpečnejšie na ňom stavať príbeh.

  • Počasie draft
    world.weather · world.temperature

    Špecifikované až po úroveň povolenia (približná poloha podľa IP — nikdy nie GPS), ale nie je zapojený žiadny poskytovateľ počasia, takže hodnoty sa nikdy nenaplnia.

  • {scan type="qr", pattern="^REAST-.*" begin}

    Blokujúca forma, ktorá zastaví príbeh, kým nedorazí kód. Špecifikovaná; namiesto nej sa stavajú neblokujúce cesty — pole karty scan: alebo trigger: scan — pretože blokujúce skenovanie uviazne čitateľa, ktorý kód nenájde.

  • NFC štítky development
    {nfc target="reast:chapter5" begin} · {nfc read, name=tag begin}

    Príkaz dorazí k hostiteľovi ako požiadavka na schopnosť; polovica v čitateľskej aplikácii a QR náhrada pre zariadenia bez NFC sa stavajú.

  • {capture type="photo", name=reader_photo begin}

    Špecifikované s úrovňou povolenia na jedno použitie a požiadavkou na náhľad. Nezačaté — kontrola súkromia musí prísť pred kódom.

  • {on shake, intensity=2 begin} · world.tilt.x

    Udalosti zatrasenia, náklonu a kompasu. Špecifikované so záložnými riešeniami pre podporu prehliadačov; implementácia zatiaľ žiadna.

  • world.light

    Čítanie jasu miestnosti v luxoch pre scény podmienené tmou. Špecifikované, ale podpora v prehliadačoch je taká slabá, že celou funkciou môže nakoniec zostať náhrada podľa dennej doby.

  • {vibrate 200} · {vibrate pattern=[100, 50, 100]}

    Príkaz sa parsuje a vysiela požiadavku hostiteľovi; čitateľská aplikácia ju musí splniť a jej vizuálna náhrada pulzom pre zariadenia bez motorčeka sa ešte stavia.

  • {on proximity "near" begin}

    Priblíženie zariadenia k predmetu. Špecifikované; nezačaté.

  • Hlasový vstup development
    {listen language="en", name=spoken_word begin}

    Príkaz dorazí k hostiteľovi ako požiadavka o prepis. Rozpoznávanie beží na zariadení čitateľa a nikdy sa neukladá ani neprenáša — práve tá čitateľská aplikácia sa stavia.

  • dice("2d6+3") · d20adv · 4d6kh3

    Kompaktný zápis zo stolových hier je špecifikovaný, ale vstavaná funkcia dice() nie je implementovaná. Použite namiesto nej {use "std/dice"}, ktorá je vydaná a pokrýva bežné hody.

  • {challenge night_vigil begin} require: … timeout: 30m

    Viacero senzorových podmienok spojených do jedného podmieneného momentu. Špecifikované ako vrchol interakcie s reálnym svetom; nemôže sa začať skôr než senzory, ktoré spája.

  • none · low · medium · high

    Štvorúrovňový model, pravidlo „predvolene pominuteľné" a záruka, že „autori nikdy nevidia surové súradnice", sú záväzné pre každú senzorovú funkciu vyššie, nech je jej vlastný stav akýkoľvek.

Lokalizácia a formátovanie6/6

Gramaticky správny text a čísla a dátumy podľa lokálu, riadené štandardom CLDR.

  • {plural(n, one="{} coin", other="{} coins")}

    Kategórie CLDR rozlíšené cez Intl.PluralRules pre lokál hostiteľa, takže v jadre nie je zapečená žiadna tabuľka pre jednotlivé jazyky.

  • Výber textu experimental1.0
    {select(pronoun, he="his", she="her", other="their")}

    Variácia textu podľa kľúča pre rod, rolu alebo ľubovoľnú inú kategorickú hodnotu.

  • Formátovanie čísel experimental1.0
    {formatNumber(value, "sk", style="currency")}

    Deleguje na Intl.NumberFormat a pri akejkoľvek chybe sa vráti k jednoduchému reťazcovému tvaru.

  • Radové číslovky experimental1.0
    {ordinal(3)} · {ordinal(n, one="{}.")}

    Anglické prípony len pre lokály en*; každý iný lokál dostane naformátované číslo, pretože Intl neobsahuje dáta na vypísanie radových čísloviek a vymýšľať prípony by bolo nesprávne.

  • Funkcie dátumu a času experimental1.0
    {formatDate(value, "long")} · {dateDiff(a, b, "d")}

    Hodiny, lokál a časové pásmo dodáva hostiteľ, formátovanie ide cez Intl.DateTimeFormat; celým rozhraním je enum style, bez reťazcov s tokenmi pre autora.

  • Fantasy kalendáre development
    {calendar(world.date, month="Frost,Bloom,…")}

    Mapovanie reálnych zložiek dátumu na vymyslené názvy mesiacov a dní v týždni. Signatúra je ustálená a okolité lokálové vstavané funkcie už fungujú; samotná calendar() sa ešte píše.

Písanie a diagnostika9/9

Komentáre, únikové sekvencie, správanie pri chybách a nástroje, ktoré autor používa pri písaní.

  • Komentáre stable1.0
    {comment …} · {comment begin} … {end comment}

    Jedna syntax, jednoriadková aj párová. Blok otvára len presné {comment begin}, takže begin vnútri komentára je len slovo — a práve na to potreboval zrušený tvar {// …} špeciálny režim lexera.

  • \{not a command\} · {raw begin} … {end raw}

    Únik spätnou lomkou a surový blok sú zmrazené — bez nich by príbeh nikdy nemohol citovať vlastnú syntax.

  • automatic

    Čitateľ nikdy neuvidí chybu: neznámy príkaz sa celý preskočí, chýbajúce médiá majú náhradu, neuzavretý blok sa uzavrie sám. Autor sa o každej z nich dozvie na samostatnom kanáli kódovaných záznamov. Toto je záruka jazyka, nie detail runtime, takže je zmrazená.

  • Značky TODO stable1.0
    {todo …} · {todo begin} … {end todo}

    Komentár, ktorý sa sám ohlási: pred čitateľom skrytý ako {comment} a na autorskom kanáli vyvolá style/todo, takže ho reast validate aj editor vypíšu.

  • [!map < media/map.png, fallback="media/low.png"]

    Druhý zdroj vyskúšaný predtým, než sa použije zástupný obsah platformy. Špecifikované; atribút sa dnes parsuje a ignoruje.

  • Popisky draft
    {caption "A hand-drawn map"}

    Popisné titulky pripojené k predchádzajúcemu bloku. Špecifikované a potrebné na splnenie prístupnosti, ale nepostavené — dnes to nesie alternatívny text.

  • {lock type="soft", key=… begin}

    Mäkké, tvrdé a podmienené zámky s úplne špecifikovaným modelom AES-GCM a PBKDF2. Nič nie je implementované; najmä tvrdý zámok potrebuje serverovú stranu, ktorá zatiaľ neexistuje.

  • Prístup k externým API experimental1.0
    manifest `allowed_urls`, referenced by alias

    URL adresy žijú v manifeste a nikdy v texte .rea, takže každé externé volanie je deklarované a auditovateľné; volacie rozhranie cez alias sa ešte ustaľuje.

  • random() · shuffle() · std/dice

    Každé ťahanie pochádza z generátora, ktorý vlastní runtime a nesie ho súbor uloženia, takže obnovenie uloženia pokračuje identickou postupnosťou. Testovacia funkcia seed(n) nie je implementovaná — seed namiesto toho pripnite cez voľbu jadra u hostiteľa.

Balenie a distribúcia15/15

Typy súborov, štruktúra archívu, manifest a cesta balíka k čitateľovi.

  • UTF-8 plain text, no metadata

    Súbor príbehu je čistý text a neobsahuje vôbec žiadne metadáta — práve toto oddelenie udržuje .rea čitateľné v ľubovoľnom editore a je zmrazené.

  • declaration-only Rea

    Len funkcie, konštanty najvyššej úrovne, {use} a komentáre — akýkoľvek uzol prózy kdekoľvek v súbore je chybou načítania.

  • Balík `.reast` experimental1.0
    ZIP: manifest.json + story/ + assets/

    Obe štruktúry — zabalená (s manifestom) aj plochá (jediný vstupný súbor, bez metadát) — sa dnes načítajú.

  • `manifest.json` experimental1.0
    one canonical shape, no short forms

    Nesie každý údaj metadát, ktorý súbor .rea zámerne neobsahuje; neznáme polia sa zachovávajú a ignorujú, takže schéma môže rásť bez rozbitia čitačiek.

  • preset variables for one session

    Konfigurácia pre jednu reláciu (počet hráčov, obtiažnosť, variant scenára) vložená do priestoru premenných príbehu. Formát súboru je ustálený; strana platformy, ktorá ho číta, sa stavia.

  • https://github.com/owner/repo

    Rozbalený balík vo verejnom repozitári sa načíta ako súbor .reast, čím sa z tagov a vetiev Gitu stáva prirodzený mechanizmus verziovania.

  • manifest `integrity` · Ed25519 signature

    Overovanie SHA-256 pre každý súbor je implementované; reťazec autorského podpisu Ed25519 a distribúcia jeho kľúčov sa ešte stavajú.

  • manifest `loading`, `preload`, `locked`

    Sťahovanie dlhého príbehu po častiach. Špecifikované; dnes každá časť balíka prichádza spolu s archívom.

  • per-file hashes from manifest `integrity`

    Opätovné stiahnutie len tých súborov, ktoré sa zmenili. Odtlačky, ktoré by na to použili, už existujú na detekciu neoprávnenej zmeny; samotná cesta aktualizácie nie je postavená.

  • manifest `build` + META-REA/names.json

    Bezstratová transformácia zdroja pre distribúciu. Špecifikovaná vrátane mapy názvov, ktorá ju udrží laditeľnou; zatiaľ ju neimplementuje žiadny zostavovací nástroj.

  • manifest `reader.tabBar`

    Voliteľný spodný panel s najviac piatimi sekciami usporiadanými podľa vzdialenosti palca. Tvar v manifeste je ustálený; používateľské rozhranie čitačky sa stavia.

  • Úrovne zhody stable1.0
    Core · Standard · Platform

    Tri deklarované úrovne, aby implementátor mohol čestne vydať čiastočné jadro; zmrazené, pretože celý zmysel je v tom, že označenie znamená všade to isté.

  • manifest `rea: "1.0"`

    Verziovanie MAJOR.MINOR s pravidlami doprednej kompatibility, ktoré parser musí dodržať. Zmrazené s vydaním 1.0.

  • domain.name, any Unicode except space and dot

    Zmrazené preto, aby neanglicky píšuci autor mohol pomenovať stav vo vlastnej abecede a mať istotu, že to bude fungovať aj naďalej.

  • Prístupnosť experimental1.0
    WCAG 2.2 Level AA

    Povinnosti na strane autora (alternatívny text, zmysluplný text volieb) platia už teraz; viaceré kritériá na strane platformy závisia od funkcií, ktoré sú ešte vo vývoji.

Zámerne nie je v Rea6/6

Konštrukcie, ktoré boli zvážené a vylúčené. Uvedené preto, aby rozhodnutie zostalo viditeľné a nebolo objavované znova.

  • — none —

    Vylúčené počas návrhu 1.0: interaktívne príbehy nepoužívajú formátovanie zoznamov a * a - už sú značkami voľby a zberu. Voľby túto úlohu plnia prirodzene.

  • — none —

    Vylúčené pre 1.0: dátová tabuľka nie je rozprávačská konštrukcia a jej pridanie by do prozaického jazyka vtiahlo zarovnávanie stĺpcov a spájanie buniek.

  • Priepust HTML cancelled
    — none —

    Trvalo vylúčené. Vkladanie surového značkovania by z každého príbehu urobilo plochu pre XSS a umožnilo by, aby značkovanie jedného autora rozbilo vykresľovanie u iného hostiteľa.

  • — none —

    Trvalo vylúčené. Vizuálna prezentácia patrí téme platformy, aby príbeh nikdy nemohol prebiť predvoľby čitateľa — kontrast, veľkosť písma, tmavý režim.

  • — none —

    Trvalo vylúčené. Príbeh je nedôveryhodný obsah; vloženie JavaScriptu alebo iného jazyka by zničilo sandbox. Reálnu potrebu pokrývajú izolované rozšírenia .rext a rozšírenia dodané hostiteľom.

  • try / catch cancelled
    — none —

    Vylúčené spolu s modelom chýb: každé zotavenie je implicitné, pretože čitateľovi sa nikdy nesmie ukázať zlyhanie a autor by ho nikdy nemal musieť písať.

Ako index čítať

  • Kliknutím na stav v legende zoznam zúžite; opätovným kliknutím alebo voľbou „zobraziť všetko" filter zrušíte.
  • Názov skupiny odkazuje na tú časť špecifikácie, ktorá ju popisuje v plnom rozsahu.
  • Názov funkcie odkazuje na jej vlastnú sekciu, kde sa objavuje tá istá značka s tým istým znením. Výnimkou sú položky cancelled: nemajú žiadnu syntax na zdokumentovanie, takže žijú spolu v časti Čo Rea zámerne neobsahuje.

Ak je funkcia, ktorú potrebujete, draft alebo development, sekcia špecifikácie ju napriek tomu popisuje úplne — práve to umožňuje navrhnúť príbeh okolo jej budúceho príchodu. Len proti nej nevydávajte.