Sbtrn. Devil
> А чтобы внутри можно было любую непрерывную последовательность байт
Да, это может быть полезно, но вот ограничитель подбирать вручную... но по-другому вроде никак. :(
> Не зачем-то, а в качестве хинтов (потенциальным) автораскрасчикам синтаксиса и
> автоформаттерам
Ну, не знаю, мне кажется что раскрашивать надо не низкоуровневый язык разметки, а раскрашивать под конкретную задачу, где уже определено что какой тег означает, какие у него свойства и т.п. А низкий язык чего раскрашивать, там собственно и красить нечего. Разве что скобочки другим цветом, чтоб виднее было где начало, где конец. А на счёт низкоуровневости SINX... не сказал бы. Я вижу почти полную аналогию со STOB'ом, только несколько замаскированную. В Синксе, терминальная последовательность - это аналог строки без детей в Стобе, а спецсимвол - аналог строки с детьми (имя спецсимвола - строка, а данные - дети). Плюс возможность записи сырых строк через проценты. Ну есть ещё вот эти точки, двоеточия и равна, которые, на мой взгляд, не более чем сахар, я бы выкинул их.
cranky
> это ок. но покимон прав, такой парсер можно уместить в несколько си-функций, и
> без всяких зависимостей.
Хочется надеятся, что кто-то, когда-то напишет :).
> з.ы. когда-то я тоже писал свой парсер конфигов:
Молодец! Это случайно не .INI формат?
Went
> А наследование есть?
Разумеется нет! Что от чего наследовать?
igagis
> Разумеется нет!
Почему это, разумеется? Очень часто один элемент конфига расширяет другой. Не представляю как без этого.
> Что от чего наследовать?
Ну, ясное дело, один узел от другого. Например, описываешь ты конфиг некого объекта. У него много свойств, но хочешь уточнить только одно. Вот тут и наследуешь.
Я у себя вовсю использую язык разметки собственного изготовления "SKIN", синтаксис чем-то похож:
window { size "(1024, 768)" user_sizing flexible caption "MD Application" fullscreen false } api_window : .window { caption "API Application" }
Вот так. Очень удобно :)
Went
> Почему это, разумеется? Очень часто один элемент конфига расширяет другой. Не
> представляю как без этого.
Это у тебя классо-ориентированный конфиг, а тут итемо-ориентированный.
Sbtrn. Devil
> Это у тебя классо-ориентированный конфиг, а тут итемо-ориентированный.
Да, наверное.
А еще у меня есть директивы включения:
#uses "base.sdt"
,
макросы:
#define x y sprite { name #x // Эквивалентно name y }
,
анонимные перечисления:
sprite { <child> {name "1"} <child> {name "2"} }
,
встраиваемые функции:
sprite { position =center() }
,
ну, и всякие другие вкусности. Вот такой я молодец :)
Went
У тебя узко заточенный язык конфигов, а не язык разметки. Наследование, включения и т.п. это уже задача не языка разметки, а языка который на нем основан, например на STOB можно сделать язык конфигов, чтоб он понимал и инклуды и наследование и т.п.
Кстати, твои примеры являются валидными STOB документами, да тут почти любой текст подойдет, главное чтоб все фигурные скобки и кавычки были закрыты.
Но удобнее разбирать если на STOB было бы написано что-то такое:
include {blablabla.stob} window { size {"(1024, 768)"} user_sizing {flexible} caption {"MD Application"} fullscreen {false} } api_window { inherits {window} caption {"API Application"} }
igagis
> size {"(1024, 768)"}
Тогда бы уж идтить до конца - size { 1024 768 }. Или даже size { w {1024} h {768} }.
Sbtrn. Devil
> Тогда бы уж идтить до конца - size { 1024 768 }. Или даже size { w {1024} h
> {768} }.
Можно и до конца. Но вот, например, у меня есть класс Vector2 которому если в конструктор подсунуть строку "23123, 31231", то он её распарсит и сразу инициализирует свой Х и Y соответственно, т.е. удобнее так указывать в этом случае. Тут возможны вариранты, надо смотреть по ситуации.
igagis
> У тебя узко заточенный язык конфигов, а не язык разметки
TruЪ
> api_window { inherits {window} caption {"API Application"} }
Отлично, но window - это имя первой чилд-ноды inherits или это ее значение?
Went
> Отлично, но window - это имя первой чилд-ноды inherits или это ее значение?
Это первая чайлд нода, в STOB нет значений. Но ведь язык конфигов будет знать, что первый чайлд строки "inherits" означает имя того, что наследуем.
В нулевом посте написано, что так предполагается эмулировать проперти.
читал только первый пост.
в целом, если поправить несколько моментов, то будет вполне годным. моменты:
- в кавычки обязательно брать только строки начинающиеся и/или заканчивающиеся пробельными символами, в остальных случаях - опционально
- мозг рака в виде фигурных скобок убрать. вложенность задавать отступами а-ля питон
- многострочные комментарии не нужны
Гопник Хаскель
> - многострочные комментарии не нужны
Почему? Мешают?
> - мозг рака в виде фигурных скобок убрать. вложенность задавать отступами а-ля
> питон
Наверное всё таки рак мозга :)?
Я рассматривал такой вариант, но решил от него отказаться. От части из-за привычности фигурных скобок для систов и плюсистов. Но и по другим причинам тоже.
Например, при описании конфигов нужно описывать пары ключ-значение:
window{ x {10} y {20} style {overlapped} caption {"window title"} text { "Hello world, the weather is fine, sun is shining, birds are singing!" } }
При питон-стайл это будет выглядеть так:
window x 10 y 20 style overlapped caption window title text Hello world, the weather is fine, sun is shining, birds are singing!
Что читается, на мой взгляд, гораздо хуже. Да и отформатировать длинную строку в несколько линий нельзя, т.к. она разобъется на несколько строк.
А ещё, при таком способе текст с незначительной разметкой будет выглядеть ужасно, например сейчас это можно сделать так:
text{ "text with some markup: " "bold string "{bold} "italic string "{italic} "bold italic string "{bold italic} "some text with " "hyper link "{ url{"http://stobml.org"} } "in the middle" }
что должно дать примерно такой результат:
text with some markup: bold string italic string bold italic string some text with hyper link in the middle
в стиле питон это будет выглядеть так:
text text with some markup: bold string bold italic string italic bold italic string bold italic some text with hyper link url "http://stobml.org" //тут кавычки чтоб избежать комментария in the middle
Короче, с отступами может оно и кажется более красивым, в том плане, что форматирование сразу и задаёт иерархию, но на этом преимущества заканчиаются, на мой взгляд.
> - в кавычки обязательно брать только строки начинающиеся и/или заканчивающиеся
> пробельными символами, в остальных случаях - опционально
Начинающиеся с пробела - это понятно, чтоб форматирование не нарушить, а значит и иерархию. А заканчивающиеся на пробел зачем?
Тогда можно вообще без кавычек обойтись, просто эскейпить первый пробел с помощью слэша.
А вообще, отступы надо делать табами, а не пробелами ;).
Набросал парсеры на Java и на С#:
http://stob-cs.googlecode.com
http://stob-java.googlecode.com
Админам: тему можно было бы переместить в
Проекты / Утилиты
Тема в архиве.