Войти
ПрограммированиеФорумОбщее

STOB язык разметки (2 стр)

Страницы: 1 2
#15
1:24, 27 июля 2012

Sbtrn. Devil
> А чтобы внутри можно было любую непрерывную последовательность байт
Да, это может быть полезно, но вот ограничитель подбирать вручную... но по-другому вроде никак. :(

> Не зачем-то, а в качестве хинтов (потенциальным) автораскрасчикам синтаксиса и
> автоформаттерам
Ну, не знаю, мне кажется что раскрашивать надо не низкоуровневый язык разметки, а раскрашивать под конкретную задачу, где уже определено что какой тег означает, какие у него свойства и т.п. А низкий язык чего раскрашивать, там собственно и красить нечего. Разве что скобочки другим цветом, чтоб виднее было где начало, где конец. А на счёт низкоуровневости SINX... не сказал бы. Я вижу почти полную аналогию со STOB'ом, только несколько замаскированную. В Синксе, терминальная последовательность - это аналог строки без детей в Стобе, а спецсимвол - аналог строки с детьми (имя спецсимвола - строка, а данные - дети). Плюс возможность записи сырых строк через проценты. Ну есть ещё вот эти точки, двоеточия и равна, которые, на мой взгляд, не более чем сахар, я бы выкинул их.

cranky
> это ок. но покимон прав, такой парсер можно уместить в несколько си-функций, и
> без всяких зависимостей.
Хочется надеятся, что кто-то, когда-то напишет :).

> з.ы. когда-то я тоже писал свой парсер конфигов:
Молодец! Это случайно не .INI формат?

Went
> А наследование есть?
Разумеется нет! Что от чего наследовать?

#16
9:48, 27 июля 2012

igagis
> Разумеется нет!
Почему это, разумеется? Очень часто один элемент конфига расширяет другой. Не представляю как без этого.

> Что от чего наследовать?
Ну, ясное дело, один узел от другого. Например, описываешь ты конфиг некого объекта. У него много свойств, но хочешь уточнить только одно. Вот тут и наследуешь.
Я у себя вовсю использую язык разметки собственного изготовления "SKIN", синтаксис чем-то похож:

window
{
  size        "(1024, 768)"
  user_sizing flexible
  caption     "MD Application"
  fullscreen  false
}

api_window : .window
{
  caption     "API Application"
}

Вот так. Очень удобно :)

#17
11:16, 27 июля 2012

Went
> Почему это, разумеется? Очень часто один элемент конфига расширяет другой. Не
> представляю как без этого.
Это у тебя классо-ориентированный конфиг, а тут итемо-ориентированный.

#18
12:19, 27 июля 2012

Sbtrn. Devil
> Это у тебя классо-ориентированный конфиг, а тут итемо-ориентированный.
Да, наверное.

А еще у меня есть директивы включения:

#uses "base.sdt"

,
макросы:

#define x y
sprite
{
  name #x // Эквивалентно name y
}

,
анонимные перечисления:

sprite
{
  <child> {name "1"}
  <child> {name "2"}
}

,
встраиваемые функции:

sprite
{
  position =center()
}

,
ну, и всякие другие вкусности. Вот такой я молодец :)

#19
12:42, 27 июля 2012

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"}
}
#20
14:37, 27 июля 2012

igagis
> size {"(1024, 768)"}
Тогда бы уж идтить до конца - size { 1024 768 }. Или даже size { w {1024} h {768} }.

#21
15:13, 27 июля 2012

Sbtrn. Devil
> Тогда бы уж идтить до конца - size { 1024 768 }. Или даже size { w {1024} h
> {768} }.
Можно и до конца. Но вот, например, у меня есть класс Vector2 которому если в конструктор подсунуть строку "23123, 31231", то он её распарсит и сразу инициализирует свой Х и Y соответственно, т.е. удобнее так указывать в этом случае. Тут возможны вариранты, надо смотреть по ситуации.

#22
15:40, 27 июля 2012

igagis
> У тебя узко заточенный язык конфигов, а не язык разметки
TruЪ

> api_window { inherits {window} caption {"API Application"} }
Отлично, но window - это имя первой чилд-ноды inherits или это ее значение?

#23
15:53, 27 июля 2012

Went
> Отлично, но window - это имя первой чилд-ноды inherits или это ее значение?
Это первая чайлд нода, в STOB нет значений. Но ведь язык конфигов будет знать, что первый чайлд строки "inherits" означает имя того, что наследуем.
В нулевом посте написано, что так предполагается эмулировать проперти.

#24
2:27, 28 июля 2012

читал только первый пост.
в целом, если поправить несколько моментов, то будет вполне годным. моменты:

- в кавычки обязательно брать только строки начинающиеся и/или заканчивающиеся пробельными символами, в остальных случаях - опционально
- мозг рака в виде фигурных скобок убрать. вложенность задавать отступами а-ля питон
- многострочные комментарии не нужны

#25
14:31, 28 июля 2012

Гопник Хаскель

> - многострочные комментарии не нужны
Почему? Мешают?

> - мозг рака в виде фигурных скобок убрать. вложенность задавать отступами а-ля
> питон
Наверное всё таки рак мозга :)?
Я рассматривал такой вариант, но решил от него отказаться. От части из-за привычности фигурных скобок для систов и плюсистов. Но и по другим причинам тоже.
Например, при описании конфигов нужно описывать пары ключ-значение:

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

Короче, с отступами может оно и кажется более красивым, в том плане, что форматирование сразу и задаёт иерархию, но на этом преимущества заканчиаются, на мой взгляд.

> - в кавычки обязательно брать только строки начинающиеся и/или заканчивающиеся
> пробельными символами, в остальных случаях - опционально
Начинающиеся с пробела - это понятно, чтоб форматирование не нарушить, а значит и иерархию. А заканчивающиеся на пробел зачем?
Тогда можно вообще без кавычек обойтись, просто эскейпить первый пробел с помощью слэша.
А вообще, отступы надо делать табами, а не пробелами ;).

Прошло более 2 лет
#26
16:40, 30 янв 2015

Набросал парсеры на Java и на С#:

http://stob-cs.googlecode.com
http://stob-java.googlecode.com

#27
15:13, 5 фев 2015

Админам: тему можно было бы переместить в
Проекты / Утилиты

Страницы: 1 2
ПрограммированиеФорумОбщее

Тема в архиве.