Formát NEON
NEON je v lidsky čitelný strukturovaný datový formát. V Nette se používá pro konfigurační soubory. Také se používá pro strukturovaná data, jako jsou nastavení, jazykové překlady atd. Vyzkoušejte si jej.
NEON je zkratka pro Nette Object Notation. Je méně složitý a nemotorný než XML nebo JSON, ale poskytuje podobné funkce. Je velmi podobný YAML. Hlavní přednost je tom, že NEON má takzvané entity, díky kterým je konfigurace DI služeb taky sexy. A umožňuje odsazovat tabulátory.
NEON je postaven od základů tak, aby byl snadno použitelný.
Integrace
- NetBeans (má vestavěnou podporu)
- PhpStorm (plugin)
- Visual Studio Code (Nette Latte + Neon) nebo Nette for VS Code)
- Sublime Text 3 (plugin)
- Sublime Text 2 (plugin)
- VIM (plugin)
- Emacs (plugin)
- Prism.js (integrovaný jazyk)
Syntaxe
Soubor psaný v NEON obvykle představuje pole nebo mapování.
Mapování
Mapování je sada párů klíč-hodnota, v PHP by se řeklo asociativní pole. Každá dvojice je zapsána jako
key: value
, mezera za :
je nutná. Hodnotou může být cokoliv: řetězec, číslo, boolean, null,
sekvence nebo jiné mapování.
V PHP by se stejná struktura zapsala jako:
Tento zápis se označuje jako blokový, protože všechny položky jsou na samostatném řádku a mají stejné odsazení (v tomto případě žádné). NEON podporuje také inline reprezentaci mapování, která je uzavřená do závorek, odsazení nehraje žádnou roli a oddělovačem jednotlivých prvků je buď čárka, nebo nový řádek:
To stejné zapsané na více řádků (na odsazení nezáleží):
Místo :
lze alternativně používat =
a to jak v blokovém, tak v inline zápisu:
Sekvence
Sekvence jsou v PHP indexované pole. Zapisují se jako řádky začínající spojovníkem -
následovaným
mezerou. Hodnotou opět může být cokoliv: řetězec, číslo, boolean, null, sekvence nebo jiné mapování.
V PHP by se stejná struktura zapsala jako:
Tento zápis se označuje jako blokový, protože všechny položky jsou na samostatném řádku a mají stejné odsazení (v tomto případě žádné). NEON podporuje také inline reprezentaci sekvence, která je uzavřená do závorek, odsazení nehraje žádnou roli a oddělovačem jednotlivých prvků je buď čárka, nebo nový řádek:
To stejné zapsané na více řádků (na odsazení nezáleží):
V inline reprezentaci nelze používat odsazující odrážky.
Kombinace
Hodnotami mapování a sekvencí mohou být jiné mapování a sekvence. Hlavní roli hraje úroveň odsazení.
V následujícím příkladu má pomlčka použitá k označení položek sekvence větší odsazení než klíč
pets
, takže se položky stávají hodnotou prvního řádku:
V PHP by se stejná struktura zapsala jako:
Lze kombinovat blokový a inline zápis:
Uvnitř inline zápisu již nelze používat zápis blokový, tohle nefunguje:
V předchozím případě jsme zapsali mapovaní, jehož prvky byly sekvence, teď to zkusíme obráceně a vytvoříme sekvenci obsahující mapování:
Není nutné, aby odrážky byly na samostatných řádcích, lze je umístit i tímto způsobem:
Je na vás, jestli klíče zarovnáte do sloupce pomocí mezer nebo použijete tabulátor.
Protože v PHP se používá pro mapování i sekvence stejná struktura, tedy pole, lze obojí sloučit. Odsazení je tentokrát stejné:
V PHP by se stejná struktura zapsala jako:
Řetězce
Řetězce v NEON lze uzavřít do jednoduchých i dvojitých uvozovek. Ale jak vidíte, mohou být také bez uvozovek.
Pokud řetězec obsahuje znaky # " ' , : = - [ ] { } ( )
, které lze zaměnit s NEON syntaxí, je potřeba jej
uzavřít do uvozovek. Doporučujeme použít jednoduché uvozovky, protože v nich se nepoužívá escapování. Pokud
potřebujete v takovém řetězci zapsat uvozovku, zdvojte ji:
Dvojité uvozovky umožňují používat escape sekvence pro zápis speciálních znaků pomocí zpětných lomítek
\
. Podporovány jsou všechny escape sekvence jako u formátu JSON a navíc \_
, což je nedělitelná
mezera, tedy \u00A0
.
Existují další případy, kdy je potřeba uzavřít řetězce do uvozovek:
- začínají či končí mezerami
- vypadají jako čísla, booleany, nebo null
- NEON by je chápal jako datum
Víceřádkové řetězce
Víceřádkový řetězec začíná a končí trojitou uvozovkou na samostatných řádcích. Odsazení prvního řádku se ignoruje a to u všech řádků:
V PHP bychom totéž napsali jako:
Escapovací sekvence fungují jen u řetězců uvozených do dvojitých uvozovek místo apostrofů:
Čísla
NEON rozumí číslům zapsaným v tzv. vědecké notaci a také číslům v binární, osmičkové a hexadecimální soustavě:
Nulls
Null lze v NEON vyjádřit pomocí null
nebo neuvedením hodnoty. Povoleny jsou také varianty s velkým prvním
nebo velkými všemi písmeny.
Booleans
Logické hodnoty jsou v NEON vyjádřeny pomocí true
/ false
nebo yes
/
no
. Povoleny jsou také varianty s velkým prvním nebo velkými všemi písmeny.
Datum
NEON používá k vyjádření dat následující formáty a automaticky je převede na objekty
DateTimeImmutable
:
Entity
Entita je struktura, která připomíná volání funkce:
V PHP se naparsuje jako objekt Nette\Neon\Entity:
Entity se mohou i zřetězit:
Což se v PHP se naparsuje tímto způsobem:
Uvnitř závorek platí pravidla pro inline zápis používaný u mapování a sekvencí, tedy může být klidně i víceřádkový a pak není nutné uvádět čárky:
Komentáře
Komentáře začínají znakem #
a všechny následující znaky napravo jsou ignorovány:
Neon versus JSON
JSON je podmnožinou NEONu. Každý JSON se dá proto parsovat jako NEON:
Co kdybychom vynechali uvozovky?
A složené závorky a čárky?
Nejsou seznamy s odrážkami lépe čitelné?
Přidáme komentáře?
Hurá, teď znáte syntaxi NEONu!