Отказался от идеи реализации типографа, как в 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, время: 16:01. |