Changelog
v1.1.0 (aktuálna)
Podmienky: jeden jazyk, tri režimy
{wait EXPR begin} … {end wait}teraz blokuje. Príbeh sa zastaví, kým sa výraz nestane pravdivým; telo je to, čo čitateľ vidí počas čakania, a príbeh pokračuje za{end wait}.escape=sa po uplynutí trvania vzdá aescape_to=pošle čitateľa na kotvu. Holé{wait begin}ostáva nezmenené — je to pauza, nie brána.{waypoint}je podobou{wait}.{waypoint name, AREA, require=EXPR}je{wait context.location matches AREA and EXPR}plus metaúdaje mapy, takžehint=je jej text počas čakania a telo je obsah po príchode. Po prvý raz má behové prostredie na strane čitateľa.- Podstromy
context.sú zdroje s vlastnou kadenciou. Čas je odvodený a zobudí sa presne raz na najbližšej hranici, ktorú podmienka vie zbadať; poloha je prúd s doručovaním; počasie je jedno zdieľané dopytovanie s obmedzenou frekvenciou. Zdroj sa spustí, keď naň začne čakať prvá podmienka, a zastaví sa, keď odíde posledná — obrazovka súhlasu sa preto počíta z príbehu, nie sa preberá z jeho manifestu. - Podmienka môže byť
unknown, keď je zdroj, ktorý číta, zamietnutý alebo nedostupný. Čakanie čaká ďalej;{if}ho berie ako nepravdu, a práve pretolink/context-no-fallbackpýta od autora{else}. - Termíny sú absolútne a zmeškané okno sa ráta. Príbeh zavretý na lavičke a otvorený o tri hodiny neskôr sa obnoví so správnou odpoveďou a množina čakajúcich podmienok cestuje v stave čítania (schéma v3; staršie uloženia sa obnovia bez čakajúcich podmienok). Obnovenie navýše prehrá okamihy, ktoré príbeh prespal, takže
{wait context.time.hour = 22}sa spustí čitateľovi, ktorý bol preč od deviatej do pol dvanástej, namiesto čakania ďalší deň. - Čítanie nezávisí od žiadneho servera. O čakaní rozhoduje zariadenie, podľa vlastných hodín a stavu, ktorý už drží; o tom, na čo ktorý čitateľ čaká, sa nikde inde nič neukladá ani nevyhodnocuje. Cena je povedená nahlas, nie zamlčaná: čitateľ nedostane upozornenie, kým je príbeh zatvorený, a
escape=je poistkou pre toho, kto sa už nevráti.
Prichádzajú {zone} a {route}
{zone ID, AREA begin}je formakedykoľvekbloku wait a odteraz beží.{on enter}/{on exit}sú bežné prechody — nesú stráž ako každá iná hrana — a blok vykreslí obsah hrany, ktorú čitateľ naposledy prekročil, na mieste samotného bloku. Príkazy hrany sa vykonajú pri jej spustení astory.<zóna>.insidesa dá čítať kdekoľvek.{route ID[, sequential] begin}pomenúva zastávky deklarované inde a ukáže svoj riadokcomplete:tam, kde stojí blok, keď sú hotové všetky etapy. Postup (story.<trasa>.done/.total/.complete) sa odvodzuje z týchto zastávok, nevedie sa osobitne, takže uloženie s ním nikdy nemôže nesúhlasiť. Etapa bez zastávky jelink/unknown-route-waypoint.
Nové funkcie
duration("PT30M")— trvanie ISO 8601 v milisekundáchbetween(time, from, to)— rozsah denného času vrátane rozsahu cez polnocelapsed(timestamp)— milisekundy od okamihu, podľa hodín hostiteľawithin(point, area)/within(point, "nazov_zastavky")— obsiahnutie, s opätovným použitím vlastnej oblasti pomenovanej zastávky
Nové diagnostiky
link/wait-no-escape— pravidlo úniku, rozšírené zo zastávok na každú čakajúcu podmienkulink/unknown-context-source— podmienka čítajúca podstromcontext., aký neposkytuje žiadna platformalink/context-no-fallback— brána v režime teraz nad zdrojom reálneho sveta bez{else}
Opravy
- Uložený výsledok podmienky prežil cestu výsledkov zo senzora, takže poloha, ktorá dorazila po prvom vyhodnotení brány, nechala tú bránu po zvyšok čítania čítať
false. context.locationsa nikdy nezapisovala ako bod, iba ako jej zložky — takžecontext.location matches circle(…), porovnanie, ktoré robí každá zastávka, testovalo nedefinovanú ľavú stranu.- Stráž
whenstavového automatu bola neviditeľná pre každý statický prechod: premenná, ktorú stráž zjavne čítala, sa hlásila ako nepoužitá.
v1.0.0
Prvé vydanie jazyka Rea a @reast/engine.
Jazyk
- Kompletná špecifikácia Rea: základy, logika a dáta, naratív a interakcia, utility a referencia — plus index funkcií, ktorý na jednom mieste uvádza zrelosť každej funkcie.
- Prozaické jadro je stabilné a zmrazené: odseky, kurzíva a tučné, podčiarknutie, prečiarknutie a neproporcionálne písmo, bloky kódu, nadpisy a ich kotvy, zarovnanie a odsadenie, citácie, vodorovné čiary, odkazy, vlastné kotvy, vložené médiá, poznámky pod čiarou a postupné nápovedy. Zmeniť čokoľvek z toho môže len nová verzia MAJOR.
- Príkazy, premenné, výrazy, riadenie toku, funkcie, voľby, storylety, karty, peňaženka mincí, rozšírenia
.rexta lokalizačné vstavané funkcie vychádzajú ako experimental — vydané a použiteľné, so syntaxou otvorenou úpravám v rámci 1.x. - Funkcie, ktoré sú zdokumentované, ale zatiaľ nedostupné, nesú značku
developmentalebodraft. Sú špecifikované preto, aby sa okolo nich dal príbeh navrhnúť, nie preto, aby sa proti nim dal vydať.
Jadro
- Parser: lexer, blokový parser, inline parser, dodatočné spracovanie, analyzátor
- Runtime: interpreter, vyhodnocovač výrazov, správca stavu, navigátor toku, seedovaný generátor náhodných čísel
- Zavádzač: rozbalenie ZIP, dešifrovanie AES, parsovanie manifestu, mapovanie médií, import z GitHub repozitára
- Prehrávač: vlastný prvok
<reast-engine>so Shadow DOM - Validátor: overenie štruktúry príbehu s varovaniami
- Vstavané funkcie: kategórie pre reťazce, matematiku, polia, typy, dátum a lokál, plus štandardná knižnica
std/* - Bezpečnosť: zoznam povolených URI schém, ochrana pred prechodom cez cesty, čistenie názvov premenných
- Prístupnosť: živé oblasti ARIA, správa zamerania, sémantické vykresľovanie HTML
- Predvoľby čitateľa: písmo, veľkosť, výška riadku, téma (svetlá, sépiová, tmavá, AMOLED)
- Uloženie a obnovenie pozície čítania s vyraďovaním najdlhšie nepoužitých
Politika verzií
Jazyk sa riadi verziovaním MAJOR.MINOR. Zvýšenie MAJOR môže znehodnotiť existujúce príbehy; zvýšenie MINOR len pridáva. Príbeh deklaruje verziu, na ktorú mieri, poľom rea vo svojom manifeste, a parser musí odmietnuť vyššiu verziu MAJOR, než akú podporuje, kým nižšiu verziu MINOR prijme elegantne. Pozri Verziovanie špecifikácie.
Skôr publikované príbehy zostávajú čitateľné aj v novších verziách jadra. Prepínač verzií dokumentácie v pätičke uvádza každé zverejnené vydanie; každé staršie je zmrazenou snímkou stránky v podobe, v akej bola pri danej verzii.