Зацените мой формат ZML (Zurin's Markup Language) как альтернативу XML.
Обозначения:
{a} - последовательность a, aa, aaa и т.д. (включая пустую)
[a] - необязательное наличие a
a|b|...|z - или a, или b, ..., или z
"text" - текст "text", вводимый без изменений (без кавычек)
Синтаксис:
LETTER ::= любая буква
CHAR ::= любой выводимый символ, начиная с пробела
SEP ::= пробел, табуляция или перевод строки
ENDTEXTLINE ::= {" "|"\t"} ">" {" "|"\t"}
TEXTLINE ::= любая последовательность CHAR, кроме ENDTEXTLINE
ENDCOMMENTLINE ::= {" "|"\t"} {CHAR} ">#" {" "|"\t"}
COMMENTLINE ::= любая последовательность CHAR, кроме ENDCOMMENTLINE
DIGIT ::= 0|1|2|3|4|5|6|7|8|9
HEXDIGIT ::= DIGIT|A|B|C|D|E|F|a|b|c|d|e|f
LETTERORDIGIT ::= LETTER|DIGIT
IDENTIFIER ::= LETTER {LETTERORDIGIT}
VDECNUM ::= ["-"] DIGIT {DIGIT}
VHEXNUM ::= "0x" HEXDIGIT {HEXDIGIT}
VFLOATNUM ::= ["-"] DIGIT {DIGIT} "." DIGIT {DIGIT}
VCHAR ::= "\'" ["\\"] CHAR "\'"
VSTRING ::= "\"" CHAR {CHAR} "\""
VBOOL ::= "+" | "-"
VENUM ::= IDENTIFIER
VTEXT ::= "<" "\n" [TEXTLINE {"\n" TEXTLINE}] "\n" ENDTEXTLINE
NODE ::= "{" {SEP} LINE {SEP {SEP} LINE} {SEP} "}"
VALUE ::= VDECNUM|VHEXNUM|VFLOATNUM|VCHAR|VSTRING|VBOOL|VENUM|VTEXT|NODE
ONELINECOMMENT ::= "# " {CHAR} "\n"
MUTLILINECOMMENT ::= "#<" [COMMENTLINE {"\n" COMMENTLINE}] ENDCOMMENTLINE
COMMENT ::= ONELINECOMMENT|MULTILINECOMMENT
LINE ::= [IDENTIFIER SEP {SEP} VALUE] [{SEP} COMMENT]
Файл ::= LINE {{SEP} LINE}
Несколько примеров.
Описание конфигурации:
sound + # звук включен
music - # музыка выключена
# графические настройки
screen {
# ширина и высота экрана
width 640
height 480
bpp 32 # бит/пиксель
doublebuffer + # включена двойная буферизация
}
Описание формы:
# форма Form1
form {
# имя
name "Form1"
# заголовок
title "Main Form"
# шрифт
font {
size 12 # 12 пунктов
italic - # нет курсива
bold - # не полужирный
}
color red # цвет
# размеры
width 400
height 300
# обработчики событий
events {
onclick "Form1_click"
onclosing "Form1_closing"
onpaint "Form1_paint"
}
}
Описание дерева:
root {
# корень "Root"
# имеет ветви "Wise A", "Wise B" и "Wise C"
name "Root"
wise {
# ветвь "Wise A"
# имеет подветви "Wise A-1" и "Wise A-2"
name "Wise A"
wise {name "Wise A-1"}
wise {name "Wise A-2"}
}
wise {
# ветвь "Wise B"
# имеет подветви "Wise B-1" и "Wise B-2"
name "Wise B"
wise {
# ветвь "Wise B-1"
# имеет подветви "Wise B-1-X" и "Wise B-1-Y"
name "Wise B-1"
wise {name "Wise B-1-X"}
wise {name "Wise B-1-Y"}
}
wise {name "Wise B-2"}
}
wise {name "Wise C"}
}
Текстовые данные:
chapter {
#< А это пример
многострочного
#< (кстати, он может быть вложенным) >#
комментария. >#
name "Глава 1"
p <
Первый абзац
текста.
>
p <
Второй абзац
текста.
>
}
Ваши предложения/критика?
Думаю, добавить еще массивы:
array [element1 element2 elementN]
PROFIT же от формата ZML очевиден:
1) компактность, меньше лишних символов => файлы занимают меньший размер
2) наглядность и читабельность для человека
3) неограниченная расширяемость
4) простота разбора