Tabtree: различия между версиями

943 байта добавлено ,  12 марта 2021
нет описания правки
Нет описания правки
Строка 2: Строка 2:


== Принципы ==
== Принципы ==
* Основной элемент формата - это объект с параметрами.
* Основной элемент формата - это объект с параметрами. В терминологии Tabtree объекты называются ''айтем (item)''
* Один объект - одна строка.
* Один айтем - одна строка (см. также про Multiline Tabtree ниже).
* Части объекта записываются через символ пробела
* Части айтема записываются через символ пробела
  object_id parameter1:value1 parameter2:value2
  item_id parameter1:value1 parameter2:value2
* Объект уникально определяется первым словом (идентификатор). Идентификатор элемента может содержать любые символы, за исключением пробельных.
* Айтем уникально определяется первым словом (идентификатор). Идентификатор элемента может содержать любые символы, за исключением пробельных.
* Параметры объекта указываются парами ключ:значение. Каждая пара является отдельным словом и отделяется от соседних пар и идентификатора одиночным пробелом.
* Параметры айтема указываются парами ключ:значение. Каждая пара является отдельным словом и отделяется от соседних пар и идентификатора одиночным пробелом.
* Объекты состоят в мерархических отношениях с друг другом. Иерархия задается знаками табуляции в начале строки перед идентификатором и парами ключ-значение. Уровень иерархии равен числу табуляций (ниже табуляция показывается знаком `→`)
* Айтемы состоят в мерархических отношениях с друг другом. Иерархия задается знаками табуляции в начале строки перед идентификатором и парами ключ-значение. Уровень иерархии равен числу табуляций (ниже табуляция показывается знаком `→`)
  Россия type:страна capital:Москва
  Россия type:страна capital:Москва
  →Ростов-на-Дону type:city
  →Ростов-на-Дону type:city
Строка 17: Строка 17:
  →Oslo type:city
  →Oslo type:city
  →→Grønland type:neighbourhood
  →→Grønland type:neighbourhood
* Если идентификатор состоит из нескольких слов, то знак пробела между ними заменяется на знак подчеркикания `_`. Если имя ключа сотсоит из нескольких слов, то обычно пробел между ними заменяется на дефис `-`
* Если идентификатор состоит из нескольких слов, то знак пробела между ними заменяется на знак подчеркикания `_`. Если имя ключа состоит из нескольких слов, то обычно пробел между ними заменяется на дефис `-`
* Если значение ключа - просто текст, то он дается как есть, с символами пробела и обрамляется двойными кавычками "".
* Если значение ключа - просто текст, то он дается как есть, с символами пробела и обрамляется двойными кавычками "".
* Если значение ключа - код, то он дается со всеми пробелами, но обрамляется обратными одинарными кавычками ``
* Если значение ключа - код, то он дается со всеми пробелами, но обрамляется обратными одинарными кавычками ``
* Все, что идет за знаком точка с запятой ; - считается комментарием (как в Racket)
* Все, что идет за знаком точка с запятой ; - считается комментарием (как в Racket)


== MTabtree ==
== Наследование параметров ==
Если в объекте имя параметра предваряет символ +, то этот параметр со своим значением наследуется всеми объектами, лежащими по иерархии ниже данного объекта. Значение параметра в одном из нижележащих объектов может переписаться, если такое же имя параметра с новым значением будет добавлено непосредственно в строку этого объекта.
ш
 
== Multiline Tabtree ==
Когда у объектов много параметров (больше примерно 10), записывать их в одну строку становится неудобно. Для этого случая существует модификация формата TabTree - Multiline Tabtree. В ней объекты разделяются знаками . и <.> (просто точка - если голый идентификатор объкта, без параметров)
Когда у объектов много параметров (больше примерно 10), записывать их в одну строку становится неудобно. Для этого случая существует модификация формата TabTree - Multiline Tabtree. В ней объекты разделяются знаками . и <.> (просто точка - если голый идентификатор объкта, без параметров)
  Россия.
  Россия.
Строка 32: Строка 36:
     status:сгорела
     status:сгорела
   <.>
   <.>
== Файловое расширение ==
* Для Tabtree - <code>.tree</code>
* Для Multiline Tabtree - <code>.mtree</code>


== Пример ==
== Пример ==