Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #201 (permalink)  
Старый 27.08.2014, 12:43
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 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
code monkey

Последний раз редактировалось kobezzza, 27.08.2014 в 13:01.
Ответить с цитированием
  #202 (permalink)  
Старый 27.08.2014, 13:05
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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

да и выдумывать язык разметки символов не лучшая идея, например, что потом каждый результат поиска тоже через препроцессор прогонять, чтобы не видеть там всякие -- и (с)?
помоему лучше сразу нормальные символы использовать, тем более не так много запомнить то надо:
alt+0187
alt+0171
alt+0150
alt+0151
alt+0133
alt+0160
остальное все не часто используется и можно из таблицы символов скопировать
Ответить с цитированием
  #203 (permalink)  
Старый 27.08.2014, 13:10
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

kobezzza, это будет будущая фича SS? нифига)
Ответить с цитированием
  #204 (permalink)  
Старый 27.08.2014, 13:16
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
а неразрывные пробелы? это же самое основное, что влияет на читабильность, чтобы предлоги, союзы и т.д. не оставались в конце строк, а тире не уезжало в начало строки
Наверн добавлю.

Цитата:
да и выдумывать язык разметки символов не лучшая идея, например, что потом каждый результат поиска тоже через препроцессор прогонять, чтобы не видеть там всякие -- и (с)?
Ну это опциональная фича, т.е. чтобы включить её работу необходимо будет запустить компиляцию с флагом autoCorrect=true.

Тут плюс в том, что некоторые символы типографии, например, кавычки привязаны к локали, т.е. в Русском языки одни, в Немецком другие и т.д. и если писать символы напрямую, то это сделает проблемным полную локализацию шаблона, а так всё удобно и просто.

Потом опять таки замена тех же смайликов: можно вставлять картинки, или теги с символьными классами и т.д.

В общем фича будет, но по умолчанию отключу.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 27.08.2014 в 13:18.
Ответить с цитированием
  #205 (permalink)  
Старый 27.08.2014, 13:17
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
kobezzza, это будет будущая фича SS? нифига)
Ну, собственно я уже почти всё написал. Сейчас додумываю, пишу тесты и т.д. Фича войдёт в скорый релиз SS 4.1 .
__________________
kobezzza
code monkey
Ответить с цитированием
  #206 (permalink)  
Старый 27.08.2014, 13:26
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от kobezzza
Потом опять таки замена тех же смайликов: можно вставлять картинки, или теги с символьными классами и т.д.
Тут все нормально, теги <img> вместо текстовых смайлов хранить в базе нет смысла.
Ответить с цитированием
  #207 (permalink)  
Старый 27.08.2014, 17:17
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Решил также добавить директиву macro, которая позволит декларировать макросы прямо в области декларации шаблона. Директиву можно будет писать только в глобальной области.

- macro :) = <img src="..." />
- macro (: = <img src="..." />

- template foo()
    Hello :)
__________________
kobezzza
code monkey
Ответить с цитированием
  #208 (permalink)  
Старый 28.08.2014, 10:44
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 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
code monkey

Последний раз редактировалось kobezzza, 28.08.2014 в 10:48.
Ответить с цитированием
  #209 (permalink)  
Старый 28.08.2014, 12:05
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Значение замены для макроса можно также задавать функцией, например,

- template foo()
    Today: %D


Snakeskin.compile(<шаблон>, {
	macros: {
		'%D': function () { return new Date(); }
	}
});


Кейзов для такой фичи не так много, но добавить её было так просто, что я подумал "а почему бы и нет?".
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 28.08.2014 в 12:14.
Ответить с цитированием
  #210 (permalink)  
Старый 29.08.2014, 11:19
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 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': '&nbsp;'
			}
		};


Как видите, что макросы можно разбивать на группы - это нужно чтобы можно было делать "паки" макросов и удобно отключать не угодные, например,

// Отключим пакет @shorts
Snakeskin.compile(<шаблон>, {autoReplace: true, macros: {'@shorts': null}})


*) Добавлен фильтр default, который позволяет задать значение по умолчанию для выражения с undefined;
*) Фильтру truncate добавлен второй параметр, который означает, что символ многоточия должен выводится в виде мнемоника;
*) Множество исправлений ошибок.

****

Поддержку задания флагов компилятора в шаблоне отложил до следующей версии, чтобы лучше всё продумать.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 29.08.2014 в 11:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
express-snakeskin - view через snakeskin для express melky Ваши сайты и скрипты 5 10.06.2014 11:35