Я придумал его на основе простого html-подобного языка, который себе для программ делал для хранения данных (INI неудобный, XML тяжёлый, другое не нравилось) и на основе вида
, может, реализую себе. Прошу комментариев очень. Если он будет интересен, может сделаю модуль для Delphi так, чтобы можно было выложить на люди. И вообще интересно, что можно сказать.
Описываю: данные в формате ut внутренне представляются подобно LISP-выражениям (в Mathematica тоже такая модель), т.е. файл содержит одно выражение структуры
Код:
Заголовок(Выраж1 ... ВыражN)
Как "реализуются" данные: на уровне документа можно перемежать куски текста с "тэгами" (уж это уже совсем не похоже на тэги) следующих видов (справа то, что они представляют):
Код:
/hr. (hr)
/hr[] (hr)
/hr[width=78%] (hr (width 0.78))
// "/"
Парсер "знает", что p - парный тэг (для b указано). В закрывающем может быть опущено название:
/p[align=none id=p1] (p (align "none") (id "p1")
/b:Тэкст/.123 (!t (b (!t "Тэкст")) "123")
/p. )
Любой текст, не являющийся аттрибутами тэгов (т.е. свободный) помещается в структуру с именем
!t. Вообще, с
! планируются начинаться все "системные" конструкции, которые должны будут поддерживаться любым (для начала самым первым) парсером:
Код:
/![ комментарий ]
/!paired[p pairedtag ul] Перечисление парных тегов, если они не указаны в программе (например, документозависимых)
/ и
. сами не входят в "описание" структуры (когда используются параметры в скобках
[], точка не используется), поэтому вложенные данные надо описывать так:
Код:
/display[
caption="!!!"
colors[text=#000 header=#02d]
swapPanels
]
а не так:
Код:
/display[
caption="!!!"
/colors[text=#000 header=#02d]
/swapPanels.
]
Вообще же,
a=b просто синоним
a[b], когда
b — простое выражение. Оно может быть строкой (причём если в ней нет символов
[,
],
=,
" и пробела, она может писаться без кавычек). Ещё оно может быть числом, дробным или целым в таких форматах:
Код:
23 десятичное
x23 шестнадцатеричное
#01fAcc = x01fAcc, для цвета
#0fe = x00ffee, тоже (взято из CSS)
28% 0,28
и стандартный дробный формат
Мне кажется, ничего так получилось (останется "только" написать код поддержки
). Чуть лучше, чем ini. А так как формат должен будет поддерживать Unicode (для начала хотя бы в форме UTF-8, потом можно и UCS-2), отпадает необходимость во всех этих
², хотя их тоже можно реализовать:
/sup2.. Специально для XML у меня есть конструкция
/. без указания имени закрываемого тэга. (А если большой текст не планируется, и она не нужна. Например, в файле настроек.)
Вот кусок какого-нибудь воображаемого файла:
Код:
/!doctype[ut version=1.0 utf-8]
/!aliases[c=catalogue]
/c[date="20.01.2010" path="c:\scr034\"]
/curDate. /hr[width=90% c=#0A4] 345 /i:678/. 910
/c.
и его внутреннее представление:
Код:
(!t
(!doctype "ut" (version 1,0) "utf-8")
(!aliases (c "catalogue"))
(c (date "20.01.2010") (path "c:\scr034\") (!t
(curDate) (hr (width 0,9) (c x00AA44)
"345" (i (!t "678")) "910"
))
)