Отказался от идеи реализации типографа, как в mdash.ru.
Вместо этого продумываю более универсальную систему макросов. Это будет простой препроцессор, пример использования: Правила по умолчанию (можно задать свои) { '"': [['«', '»'], ['„', '“']], '\'': [['“', '”'], ['‘', '’']], '(c)': '©', '(tm)': '™', '[v]': '☑', '[x]': '☒', '[_]': '☐', '<-': '←', '<-|': '↤', '->': '→', '|->': '↦', '<->': '↔', '...': '…', '-': '−', '--': '—' }; - template foo() "Snakeskin -- 'лучший' шаблонный движок!" (c) Отрендерится как «Snakeskin — „лучший“ шаблонный движок!» © Система макросов удобна тем, что можно вводить свои правила, например для замены смайликов на картинки, но без использования специальных механизмов Snakeskin, таких как вызываемые блоки или прототипы. { ':)': '<img src="..."/>' }; Следует заметить, что такие макросы будут работать только в простом тексте, т.е. внутри строк директир или литералов локализации всё будет как есть, т.к. такое поведение тем может привести в потенциальным ошибкам. {'[x]'.replace('[x]', 'error')} // данный код не выполнится, т.к. [x] -> ☒ Также будет введена директивы plain, внутри которой текст будет вставляться "как есть" + такое же поведение будет у директив script, style и link |
а неразрывные пробелы? это же самое основное, что влияет на читабильность, чтобы предлоги, союзы и т.д. не оставались в конце строк, а тире не уезжало в начало строки
да и выдумывать язык разметки символов не лучшая идея, например, что потом каждый результат поиска тоже через препроцессор прогонять, чтобы не видеть там всякие -- и (с)? помоему лучше сразу нормальные символы использовать, тем более не так много запомнить то надо: alt+0187 alt+0171 alt+0150 alt+0151 alt+0133 alt+0160 остальное все не часто используется и можно из таблицы символов скопировать |
kobezzza, это будет будущая фича SS? нифига)
|
Цитата:
Цитата:
Тут плюс в том, что некоторые символы типографии, например, кавычки привязаны к локали, т.е. в Русском языки одни, в Немецком другие и т.д. и если писать символы напрямую, то это сделает проблемным полную локализацию шаблона, а так всё удобно и просто. Потом опять таки замена тех же смайликов: можно вставлять картинки, или теги с символьными классами и т.д. В общем фича будет, но по умолчанию отключу. |
Цитата:
|
Цитата:
|
Решил также добавить директиву macro, которая позволит декларировать макросы прямо в области декларации шаблона. Директиву можно будет писать только в глобальной области.
- macro :) = <img src="..." /> - macro (: = <img src="..." /> - template foo() Hello :) |
Цитата:
Будет введёт ряд директив для установки флагов транслятора, т.е. методу compile мы можем передать, например, флаг inlineIterators и тогда все forEach и forIn итераторы будут скомпилированы в виде циклов или же stringBuffer и т.д. А теперь будет можно задать эти флаги прямо в шаблоне: /// Отключить опцию !- escapeOutput !- xml /// Включить опцию !+ inlineIterators /// Или просто подключение файла настроек != params 'myParams.json' /// Подключение файлов для опций != language 'myLang.json' != macros 'myMacros.json' - template helloWorld() Hello World Крутость такого подхода в том, что данные директивы будут распространятся только на отдельные странички, т.е. если страничка A включает страничку Б, то у них будут свои настройки, а при задачи параметров в метод compile настройки ставятся глобально. В главной странице можно будет также задать глобальные настройки, для этого будет синтаксис: @- escapeOutput @- xml @+ inlineIterators и т.д. Локальные настройки будут расширять глобальные. |
Значение замены для макроса можно также задавать функцией, например,
- template foo() Today: %D Snakeskin.compile(<шаблон>, { macros: { '%D': function () { return new Date(); } } }); Кейзов для такой фичи не так много, но добавить её было так просто, что я подумал "а почему бы и нет?". |
Snakeskin 4.1.0 вышел!
Нововведения: *) Поддержка макросов: 2 новых параметра компилятора: autoReplace (true включает макросы) и macros (таблица для задания своих макросов); Базовые макросы: let def = { '@quotes': { '"': [['«', '»'], ['‘', '’']], '\'': [['“', '”'], ['„', '“']] }, '@shorts': { '(c)': '©', '(tm)': '™', '[v]': '☑', '[x]': '☒', '[_]': '☐', '<-': '←', '<-|': '↤', '->': '→', '|->': '↦', '<->': '↔', '...': { inline: true, value: '…' }, '-': { inline: true, value: '−' }, '--': { inline: true, value: '—' } }, '@adv': { '%lorem%': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor dolores error facilis iusto magnam nisi praesentium voluptas. Delectus laudantium minus quia sapiente sunt temporibus voluptates! Explicabo iusto molestias quis voluptatibus.' }, '@symbols': { '\\n': '\\n', '\\r': '\\r', '\\s': ' ' } }; Как видите, что макросы можно разбивать на группы - это нужно чтобы можно было делать "паки" макросов и удобно отключать не угодные, например, // Отключим пакет @shorts Snakeskin.compile(<шаблон>, {autoReplace: true, macros: {'@shorts': null}}) *) Добавлен фильтр default, который позволяет задать значение по умолчанию для выражения с undefined; *) Фильтру truncate добавлен второй параметр, который означает, что символ многоточия должен выводится в виде мнемоника; *) Множество исправлений ошибок. **** Поддержку задания флагов компилятора в шаблоне отложил до следующей версии, чтобы лучше всё продумать. |
Часовой пояс GMT +3, время: 04:02. |