После двухдневных страданий с поиском методов организации "локализации"
переменных в
описаниях интерфейса (не спрашивайте что это ;) ), возни с 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