27.08.2014, 12:43
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Отказался от идеи реализации типографа, как в mdash.ru.
Вместо этого продумываю более универсальную систему макросов. Это будет простой препроцессор, пример использования:
Правила по умолчанию (можно задать свои)
{
'"': [['«', '»'], ['„', '“']],
'\'': [['“', '”'], ['‘', '’']],
'(c)': '©',
'(tm)': '™',
'[v]': '☑',
'[x]': '☒',
'[_]': '☐',
'<-': '←',
'<-|': '↤',
'->': '→',
'|->': '↦',
'<->': '↔',
'...': '…',
'-': '−',
'--': '—'
};
- template foo()
"Snakeskin -- 'лучший' шаблонный движок!" (c)
Отрендерится как
«Snakeskin — „лучший“ шаблонный движок!» ©
Система макросов удобна тем, что можно вводить свои правила, например для замены смайликов на картинки, но без использования специальных механизмов Snakeskin, таких как вызываемые блоки или прототипы.
{
':)': '<img src="..."/>'
};
Следует заметить, что такие макросы будут работать только в простом тексте, т.е. внутри строк директир или литералов локализации всё будет как есть, т.к. такое поведение тем может привести в потенциальным ошибкам.
{'[x]'.replace('[x]', 'error')} // данный код не выполнится, т.к. [x] -> ☒
Также будет введена директивы plain, внутри которой текст будет вставляться "как есть" + такое же поведение будет у директив script, style и link
Последний раз редактировалось kobezzza, 27.08.2014 в 13:01.
|
|
27.08.2014, 13:05
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
а неразрывные пробелы? это же самое основное, что влияет на читабильность, чтобы предлоги, союзы и т.д. не оставались в конце строк, а тире не уезжало в начало строки
да и выдумывать язык разметки символов не лучшая идея, например, что потом каждый результат поиска тоже через препроцессор прогонять, чтобы не видеть там всякие -- и (с)?
помоему лучше сразу нормальные символы использовать, тем более не так много запомнить то надо:
alt+0187
alt+0171
alt+0150
alt+0151
alt+0133
alt+0160
остальное все не часто используется и можно из таблицы символов скопировать
|
|
27.08.2014, 13:10
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
kobezzza, это будет будущая фича SS? нифига)
|
|
27.08.2014, 13:16
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
а неразрывные пробелы? это же самое основное, что влияет на читабильность, чтобы предлоги, союзы и т.д. не оставались в конце строк, а тире не уезжало в начало строки
|
Наверн добавлю.
Цитата:
|
да и выдумывать язык разметки символов не лучшая идея, например, что потом каждый результат поиска тоже через препроцессор прогонять, чтобы не видеть там всякие -- и (с)?
|
Ну это опциональная фича, т.е. чтобы включить её работу необходимо будет запустить компиляцию с флагом autoCorrect=true.
Тут плюс в том, что некоторые символы типографии, например, кавычки привязаны к локали, т.е. в Русском языки одни, в Немецком другие и т.д. и если писать символы напрямую, то это сделает проблемным полную локализацию шаблона, а так всё удобно и просто.
Потом опять таки замена тех же смайликов: можно вставлять картинки, или теги с символьными классами и т.д.
В общем фича будет, но по умолчанию отключу.
Последний раз редактировалось kobezzza, 27.08.2014 в 13:18.
|
|
27.08.2014, 13:17
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
kobezzza, это будет будущая фича SS? нифига)
|
Ну, собственно я уже почти всё написал. Сейчас додумываю, пишу тесты и т.д. Фича войдёт в скорый релиз SS 4.1 .
|
|
27.08.2014, 13:26
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от kobezzza
|
Потом опять таки замена тех же смайликов: можно вставлять картинки, или теги с символьными классами и т.д.
|
Тут все нормально, теги <img> вместо текстовых смайлов хранить в базе нет смысла.
|
|
27.08.2014, 17:17
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Решил также добавить директиву macro, которая позволит декларировать макросы прямо в области декларации шаблона. Директиву можно будет писать только в глобальной области.
- macro :) = <img src="..." />
- macro (: = <img src="..." />
- template foo()
Hello :)
|
|
28.08.2014, 10:44
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от kobezzza
|
Решил также добавить директиву 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
и т.д.
Локальные настройки будут расширять глобальные.
Последний раз редактировалось kobezzza, 28.08.2014 в 10:48.
|
|
28.08.2014, 12:05
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Значение замены для макроса можно также задавать функцией, например,
- template foo()
Today: %D
Snakeskin.compile(<шаблон>, {
macros: {
'%D': function () { return new Date(); }
}
});
Кейзов для такой фичи не так много, но добавить её было так просто, что я подумал "а почему бы и нет?".
Последний раз редактировалось kobezzza, 28.08.2014 в 12:14.
|
|
29.08.2014, 11:19
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
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 добавлен второй параметр, который означает, что символ многоточия должен выводится в виде мнемоника;
*) Множество исправлений ошибок.
****
Поддержку задания флагов компилятора в шаблоне отложил до следующей версии, чтобы лучше всё продумать.
Последний раз редактировалось kobezzza, 29.08.2014 в 11:23.
|
|
|
|