После двухдневных страданий с поиском методов организации "локализации" 
переменных в
описаниях интерфейса (не спрашивайте что это ;) ), возни с html, а также
неповторимыми впечатления от системы документирования Concordia у меня
произошёл определённый сдвиг в сознании, на многие вещи я стал смотреть
иначе и в результате я решил изменить подход (именно подход, а не совсем
всё) к созданию описаний интерфейса.

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

То есть никто ничего не отменяет, просто подход расширяем (мне заодно легче
будет соорудить "локализацию").

Посмотрел на это ... ба, да мы в ногу со всем мировым сообществом
двигаемся в одну сторону, да и стремительно сближаемся с XUL'ом.

Сейчас поднимут голову сторонники XML и скажут "мы же говорили что надо
было писать на XUL и не изобретать велосипед". Ан нет. Мы конечно идём
теми же тропами, но в стороне, своим путём, стараясь обходить обнаруженные
соседом грабли.

Во-первых, у нас всё-таки получается единый синтаксис для "живых
документов", а не два: один для статического маркапа "статики", и другой
для "для динамики", да и ещё спец-поддержку для пре-просессинга. Более
этот единый язык кажется менее засорён лишними синтаксическими
конструкциями, что облегчает его понимание. Не всё конечно идеально, но мы
бьёмся.

Во-вторых, если боитесь круглых скобок, то попутно, я тут будет предложен
способ как их количество уменьшить привычным для всех способом.

В-третьих, не буду углубляться в флеймогенерение, а перейду к делу.


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

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

Внутри документа помимо инструкций для построения конструкций, могут быть
особые (пока все они не могут размещаться внутри других образований,
например их нельзя использовать внутри какого-нибудь vbox, но мы  бьёмся)

Эти инструкции обрабатываются перед исполнением документа, это важно ибо
так будет решаться та самая пресловутая "локализация" ... если я не
передумаю конечно.


Вот они:
(document:link to какой-то-урл text "какой-то текст" type какой-то-тип)
 - задаёт связь данного документа с другим, связь может быть нескольких
   типов:
    -- insert - содержимое другого документа просто вставляется "как есть"
    (раньше для этого же применялась include-as-is, так что как видите
    ничего нового)
    -- popup - возникает некоторая кнопка с 'каким-то текстом', щелчок на
    которой вызывает всплывающие окно с другим документом
    -- rollup - аналогично возникает некоторая кнопка с 'каким-то текстом',
    если на неё щёлкать, вслед за кнопкой будет появляться и исчезать
    текст всталяемого документа (будет это выше или правее зависит от того
    с hbox или vbox мы сейчас находимся, то есть сейчас пока это означает
    что "ниже")
    -- subdocument - то же что и insert, но он получает свои собственные
    локальные переменные.
(document:envelop кострукция) - спасение для тех кто боится круглых
скобок. Фактически она просто оборачивает весь текст в конструкцию,
Оборачивает либо до ближайшей конструкции (document:end-envelop
то-же-имя), либо до конца файла.

Например
--
(document:envelop with-translation _ "alterator-common")
aaa
bbb
--

Равносильно:
--
(with-translation _ "alterator-common"
 aaa
 bbb)
--

Или ограничивая явно:
--
(document:envelop with-translation _ "alterator-common")
aa
bb
(document:end-envelop with-translation)
cc
--

Равносильно:

--
(with-translation _ "alterator-common"
  aa
  bb)
cc
--

Ну вот собственно и всё, ещё в духе общей красоты имеются небольшие
переименования:

(end-dialog value) ---> (document:end value)
(dialog-run '(/url)) --> (dialog:popup /url)

Ну вот и все изменения. Пока проверено что это осуществимо в бранче
http-look. Если устаканится, то можно будет даже собрать некую версию для
Дедала.


--
Стас.

_______________________________________________
Devel-conf mailing list
[email protected]
https://lists.altlinux.ru/mailman/listinfo/devel-conf

Ответить