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ú
| Stav | Môžem to použiť? | Čo to znamená |
|---|---|---|
stable | Áno — stavajte na tom | Vydané 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 changelogu | Vydané 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. |
development | Zatiaľ nie | Navrhnuté, odsúhlasené a práve sa stavia. Syntax nižšie je taká, aká bude, ale jadro ju zatiaľ neprijíma. |
draft | Nie | Špecifikované a prediskutované, aby bol tvar myšlienky zaznamenaný. Implementácia sa nezačala a návrh sa ešte môže úplne zmeniť. |
cancelled | Nikdy | Zváž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.
- Čistý text je príbeh stable1.0
Once upon a time…Definujúca vlastnosť jazyka — odsek prózy je kompletný, vykresliteľný príbeh úplne bez syntaxe.
- Odseky a zalomenia riadkov stable1.0
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.
- Kurzíva, tučné a tučná kurzíva stable1.0
_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.
- Ľubovoľné formátovanie textu development
{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. - Bloky kódu a čistého textu stable1.0
backtick fenceOhranič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.
- Automatické kotvy nadpisov stable1.0
## The Forest → #the_forestPäťkrokové pravidlo tvorby kotvy je zmrazené, pretože jeho zmena by ticho rozbila každý existujúci odkaz na nadpis.
- Zarovnanie a odsadenie stable1.0
= centre · > right · < leftZarovnanie prefixom a jeho pravidlo opakovania pre odsadenie sú súčasťou zmrazeného jadra prózy.
- Citácie stable1.0
| quote · || nestedCitovanie prefixom zvislej čiary s neobmedzeným vnáraním, zmrazené od prvého vydania.
- Vodorovné čiary stable1.0
- · -- · --- · ---- · -----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á.
- Vloženie obrázka, videa a zvuku stable1.0
[!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.
- Poznámky pod čiarou stable1.0
[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.
- Postupné nápovedy stable1.0
[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
:scenev 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 · undefinedMnož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é.
- Hodnoty dátumu, času a trvania experimental1.0
datetime("2026-06-15T10:30") · duration("P1DT2H")Konštruktory podľa ISO 8601 vrátane zástupných znakov
*pre vzory dennej doby. - Literály súradníc a algebra oblastí experimental
@(lat, lng) · circle(p, m) · area(p1, p2, p3) · path(...) · buffer(shape, m) · distance(a, b) · bearing(a, b) · a + b · a - bBod 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,matchessa 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 inCelá 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 arrayOperá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 a continue draft
{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. - Príbehy v jednom súbore experimental1.3
{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
.reanesie metadáta. V.reastje 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á aescape_to=ho pošle inam. Povinné vždy, keď výraz čítacontext.*.
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. - Rozšírenia Rea (`.rext`) experimental1.0
{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.
- Štandardná knižnica (`std/*`) experimental1.0
{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/diceje 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_clearingJednoduchý skok na pomenovanú kotvu.
- Vnorené voľby a zbery experimental1.0
* * [Deeper] · - gatherVná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_lockOdbočka do sekcie, ktorá sa automaticky vráti volajúcemu — mechanizmus, ktorý znovu využívajú spúšťané storylety.
- Obsah pri prvej návšteve experimental1.0
{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é.
- Nahrádzanie textu (živé návestia) development
{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. - Cyklický text (klepnutím ďalej) development
{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.
- Paralelné dejové línie draft
{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
whenriadia 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 ahorizontal=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
whenje 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.
- Ohrada prerušení stable1.3
{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=allaj 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.
- Karty predmetov a inventár experimental1.0
[$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. - Aktivácia karty v reálnom svete development
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ť. - Vlastné typy kariet draft
{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. - Typované vlastnosti kariet experimental1.5
weight=3 · home=@(48.14, 17.10) · story.card.lantern.weightAtribú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.
- Textový a číselný vstup experimental1.0
{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.
- Voľný textový vstup akcie experimental1.0
{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í.
- Prevod textu na reč development
{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á.- Tlačidlá draft
{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ží. - Skupinové hlasovanie development
{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.
- Šepot a vysielanie development
{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í.
- Čakanie na čitateľov development
{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é.
- Výhradné bloky a preteky draft
{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é.
- Degradácia na sólo čítanie experimental1.0
automaticKaž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á. - Požiadavky na schopnosti experimental1.0
{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
matchesberie 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č. - Obrázky máp a špendlíky development
{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ľvekbloku 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.seasonJediný 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:alebotrigger: 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.
- Pohyb a orientácia draft
{on shake, intensity=2 begin} · world.tilt.xUdalosti zatrasenia, náklonu a kompasu. Špecifikované so záložnými riešeniami pre podporu prehliadačov; implementácia zatiaľ žiadna.
- Okolité svetlo draft
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.
- Vibrácie a haptika development
{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.
- Blízkosť draft
{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.
- Zápis hodu kockou draft
dice("2d6+3") · d20adv · 4d6kh3Kompaktný 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. - Výzvy v reálnom svete draft
{challenge night_vigil begin} require: … timeout: 30mViacero 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.
- Úrovne povolení pre senzory experimental1.0
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.
- Skloňovanie podľa počtu experimental1.0
{plural(n, one="{} coin", other="{} coins")}Kategórie CLDR rozlíšené cez
Intl.PluralRulespre 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.NumberFormata 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žeIntlneobsahuje 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 enumstyle, 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žebeginvnútri komentára je len slovo — a práve na to potreboval zrušený tvar{// …}špeciálny režim lexera. - Únikové sekvencie a surové bloky stable1.0
\{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.
- Elegantná degradácia stable1.0
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 horeast validateaj editor vypíšu. - Náhradné hodnoty médií draft
[!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.
- Ochrana obsahu (zámok) draft
{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 aliasURL 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. - Seedovaná, opakovateľná náhodnosť experimental1.0
random() · shuffle() · std/diceKaž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.
- Súbor príbehu `.rea` stable1.0
UTF-8 plain text, no metadataSú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é. - Modul rozšírenia `.rext` experimental1.0
declaration-only ReaLen 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 formsNesie každý údaj metadát, ktorý súbor
.reazámerne neobsahuje; neznáme polia sa zachovávajú a ignorujú, takže schéma môže rásť bez rozbitia čitačiek. - Nastavenia relácie (`reast.json`) development
preset variables for one sessionKonfigurá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.
- Import z GitHub repozitára experimental1.0
https://github.com/owner/repoRozbalený 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. - Integrita a podpisovanie development
manifest `integrity` · Ed25519 signatureOverovanie 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ú.
- Postupné načítavanie draft
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.
- Rozdielové aktualizácie draft
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á.
- Minifikácia draft
manifest `build` + META-REA/names.jsonBezstratová transformácia zdroja pre distribúciu. Špecifikovaná vrátane mapy názvov, ktorá ju udrží laditeľnou; zatiaľ ju neimplementuje žiadny zostavovací nástroj.
- Panel kariet čitačky development
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 · PlatformTri 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é.
- Verziovanie špecifikácie a kompatibilita stable1.0
manifest `rea: "1.0"`Verziovanie MAJOR.MINOR s pravidlami doprednej kompatibility, ktoré parser musí dodržať. Zmrazené s vydaním 1.0.
- Identifikátory a pomenovanie stable1.0
domain.name, any Unicode except space and dotZmrazené 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 AAPovinnosti 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.
- Odrážkové a číslované zoznamy cancelled
— 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. - Značkovanie tabuliek cancelled
— 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.
- Štýlovanie cez CSS cancelled
— 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.
- Vložené programovacie jazyky cancelled
— 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
.rexta 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.