Шаблоны трансформации CSS для EasyNeatly

1. Что такое шаблон? про Аккуратные таблицы стилей «Easy Neatly»

Шаблон или шаблоны это обычный файл, формата ini.
В нем описываются микро шаблоны и настройки трансформации.
В одном ini файле может храниться несколько шаблонов.
Каждый шаблон трансформации выделяется в отдельную секцию с именем [Transform<#ID>], где <#ID> уникальный номер. Количество шаблонов (секций) в одном файле не ограничено.

2. Где хранятся шаблоны? про Аккуратные таблицы стилей «Easy Neatly»

Файлы Шаблонов т.е. файлы, формата ini хранятся в подкаталоге Patterns, В каталоге установки программы. Здесь хранится базовый файл шаблонов default.ini. Преобразования -–easy и --neatly загружаются из файла default.ini и используют секции 2 и 1 соответственно.

Вы также можете создавать и складывать свои ini файлы шаблонов в этот каталог, и вызывать EaseNeatly так, чтобы использовать их. Количество ini файлов неограниченно, и они могут иметь любые имена.

Если вы создадите свой файл с шаблонами трансформаций, например MyTransform.ini, с секцией [Transform1] то вы сможете его использовать командой:

#easyneatly.exe --file=style.css –-pattern=MyTransform –-indexpattern=1
3. Что такое МикроШаблоны? про Аккуратные таблицы стилей «Easy Neatly»

Микро шаблоны - это строки, которые будут вставляться в определенные места CSS кода. Вы можете использовать специальные & последовательности символов для замены в этих строках. МикроШаблоны используются в параметрах шаблонов - см ниже.

МикроШаблон Предназначение
&NONE; Пустое место или ничего
&SPACE; Один пробел
&TAB; [09] HORISONTAL TABULATION (TAB) Символ табуляции
&CR; [0D] – CARRIAGE RETURN (CR)
&LF; [0A] – LINE FEED (LF) (конец строки Unix)
&CRLF; [0D+0A] (конец строки Windows)
4. Как редактировать шаблон? про Аккуратные таблицы стилей «Easy Neatly»
[Transform1]

// - Этот параметр ни на что не влияет - //
// - это просто название Шаблона - //
Transform_Name = Neatly



//////////////////////////////////////
// Настройки обработки комментариев //
//////////////////////////////////////


// - Этот параметр указывает - //
// - нужно ли вставлять спец-комментарии - //
// - разделяющие CSS файл на семантические секции - //
// - принимает значения yes | no - //
make_sections_comments = yes


// - Следующие параметры - //
// - это сами комментарии - //
// - разделяющие CSS файл на семантические секции - //
// - строки с применением микрошаблонов - //
Section_Rules = /* -===- &CRLF;RULES&CRLF; -===- */&CRLF;
Section_Main = /* -===- &CRLF;MAIN&CRLF; -===- */&CRLF;
Section_Hacks = /* -===- &CRLF;HACKS&CRLF; -===- */&CRLF;
Section_Links = /* -===- &CRLF;LINKS&CRLF; -===- */&CRLF;
Section_Layout = /* -===- &CRLF;LAYOUT&CRLF; -===- */&CRLF;
Section_Grids = /* -===- &CRLF;GRIDS&CRLF; -===- */&CRLF;
Section_Common = /* -===- &CRLF;COMMON&CRLF; -===- */&CRLF;
Section_Colors = /* -===- &CRLF;COLORS&CRLF; -===- */&CRLF;


// - Следующие параметры - //
// - описывают как оформлять прочие комментарии - //
// - Открытие комментария - //
sections_comment_open = /*&CRLF;
// - Набор символов вставляемых перед текстом комментария - //
sections_comment_before_text = &CRLF;
// - Набор символов вставляемых после текста комментария - //
sections_comment_after_text = &CRLF;
// - Закрытие комментария - //
sections_comment_close = */&CRLF;


// - Сохранить ли комментарии относящиеся к Правилам (@rules) - //
// - принимает значения yes | no - //
save_rule_comments = yes


// - Следующие параметры - //
// - описывают как оформлять комментарии относящиеся к Правилам - //
// - Аналогично прочим комментариям - //
rule_comment_open = /*&CRLF;
rule_comment_before_text = &CRLF;
rule_comment_after_text = &CRLF;
rule_comment_close = */&CRLF;


// - Сохранить ли комментарии относящиеся к Селекторам (Selectors) - //
// - принимает значения yes | no - //
save_selector_comments = yes


// - Следующие параметры - //
// - описывают как оформлять комментарии относящиеся к Селекторам - //
// - Аналогично прочим комментариям - //
selector_comment_open = /*&CRLF;
selector_comment_before_text = &CRLF;
selector_comment_after_text = &CRLF;
selector_comment_close = */&CRLF;


// - Сохранить ли комментарии относящиеся к Свойствам Правил (@rules) - //
// - принимает значения yes | no - //
save_rule_property_comments = yes


// - Следующие параметры - //
// - описывают как оформлять комментарии относящиеся к Свойствам Правил - //
// - Аналогично прочим комментариям - //
rule_property_comment_open = /*
rule_property_comment_before_text = &SPACE;
rule_property_comment_after_text = &SPACE;
rule_property_comment_close = */


// - Сохранить ли комментарии относящиеся к Свойствам Селекторов (Selectors) - //
// - принимает значения yes | no - //
save_selector_property_comments = yes


// - Следующие параметры - //
// - описывают как оформлять комментарии относящиеся к Свойствам Селекторов - //
// - Аналогично прочим комментариям - //
selector_property_comment_open = /*
selector_property_comment_before_text = &SPACE;
selector_property_comment_after_text = &SPACE;
selector_property_comment_close = */


/////////////////////////////////////////////////////
// Настройки обработки правил классов и их свойств //
/////////////////////////////////////////////////////


// - Символы после имени правила - //
rule_after_name = &SPACE;


// - Символы после открывающей скобки правила - //
// - @rulename {<HERE> - //
rule_after_open = &CRLF;


// - Символы после закрывающей скобки правила - // 
// - @rulename {...}<HERE> - //
rule_after_close = &CRLF;&CRLF;


// - Символы перед именем свойства правила - //
// - @rulename {...   <HERE>property:value  ...} - //
rule_property_name_before = &TAB;


// - Символы после имени свойства правила - //
// - @rulename {...   property<HERE>:value  ...} - //
rule_property_name_after = &NONE;


// - Удалить ли Символы после открывающей скобки - //
// - и перед первым свойством правила вот так - //
// - @rulename {<&NONE;>property:value  ...} - //
rule_property_value_first_stick = no


// - Закрывать ли последнее свойство правила - //
// - перед закрывающей скобкой точкой с запятой ; - //
// - так - no //
// - @rulename {... property:value<&NONE;>} - //
// - или так - yes //
// - @rulename {... property:value<;>} - //
rule_property_value_last_close = yes


// - Удалить лишние пробелы в JS инъекциях CSS - //
rule_property_value_JS_remove_spaces = yes


// - Символы перед значением свойства правила - //
// - @rulename {...   property:<HERE>value  ...} - //
rule_property_value_before = &SPACE;


// - Символы после значения свойства правила - //
// - @rulename {...   property:value<HERE>  ...} - //
rule_property_value_after = &NONE;


// - Символы после закрытия значения свойства правила - //
// - @rulename {...   property:value;<HERE> ... other-property:other-value ...} - //
rule_property_close = &CRLF;


// - Символы табуляции для отступа перед селекторами - //
// - если в коде только одно правило Media_Screen    - //
selector_in_media_rule_alone_Before = &NONE;


// - Символы табуляции для отступа перед селекторами - //
// - если в коде много правил
// - screen - //
// - print - //
// - e.t.c. - //
selector_in_media_rule_notalone_Before = &TAB;


// - Символы разделяющие имена селекторов имеющих общее тело - //
// - BODY<HERE>TD<HERE>H1 {...} - //
selector_names_divider = ,&SPACE;&CRLF;


// - Символы после имени селекторов - //
// - BODY, TD, H1<HERE>{...} - //
selector_after_name = &SPACE;


// - Символы после открывающей скобки селекторов - //
// - BODY, TD, H1 {<HERE>...} - //
selector_after_open = &CRLF;


// - Символы после закрывающей скобки селекторов - //
// - BODY, TD, H1 {...}<HERE> - //
selector_after_close = &CRLF;&CRLF;


// - Символы перед именем свойства селектора - //
// - BODY, TD, H1 {...  <HERE>property:value ...} - //
selector_property_name_before = &TAB;


// - Символы после именем свойства селектора - //
// - BODY, TD, H1 {...  property<HERE>:value ...} - //
selector_property_name_after = &NONE;


// - Удалить ли Символы после открывающей скобки - //
// - и перед первым свойством селектора вот так - //
// - BODY, TD, H1 {<&NONE;>property:value  ...} - //
selector_property_value_first_stick = no


// - Закрывать ли последнее свойство селектора - //
// - перед закрывающей скобкой точкой с запятой ; - //
// - так - no //
// - BODY, TD, H1 {... property:value<&NONE;>} - //
// - или так - yes //
// - BODY, TD, H1 {... property:value<;>} - //
selector_property_value_last_close = yes


// - Удалить лишние пробелы в JS инъекциях CSS - //
selector_property_value_JS_remove_spaces = yes


// - Символы перед значением свойства селектора - //
// - @rulename {...   property:<HERE>value  ...} - //
selector_property_value_before = &SPACE;


// - Символы после значения свойства селектора - //
// - @rulename {...   property:value<HERE>  ...} - //
selector_property_value_after = &NONE;


// - Символы после закрытия значения свойства селектора - //
// - @rulename {...   property:value;<HERE> ... other-
selector_property_close = &CRLF;


///////////////////////////
// Настройки высоты букв //
///////////////////////////

// - Правилам изменения регистра подчиняются такие элементы как,    - //
// - ID, классы, теги и цвета. Неуправляемыми на данный момент      - //
// - являются комментарии, и имена правил                           - //
// – они остаются в собственном регистре без изменений,             - //
// - имена свойств и значения свойств, кроме цветов,                - //
// - переводятся в нижний регистр и тоже не управляются из шаблона. - //


// - SELF | LOWER | UPPER                      - //
// - SELF : Оставить высоту букв без изменений - //
// - LOWER : перевести в нижний регистр        - //
// - UPPER : перевести в верхний регистр       - //


// - Высота Букв Имени селектора для идентификатора - //
// - #test { ... } - //
Letter_Case_ID = SELF


// - Высота Букв Имени селектора для класса - //
// - .test { ... } - //
Letter_Case_Class = SELF


// - Высота Букв Имени селектора для тэга - //
// - B, I, U { ... } - //
Letter_Case_Tag = UPPER


// - Высота Букв Цветов - //
// - color: #ABCDEF; - //
Letter_Case_Colors = UPPER


// - Допустимый Процент Совпадения Цвета - //
// - от исходного при квантовании - //
// - Если процент совпадения ниже этого параметра - //
// - цвет не преобразовывается - //
Color_Loss_Precision_Transform_Quality = 100
5. Как определяется качество квантования? про Аккуратные таблицы стилей «Easy Neatly»

Теперь поговорим от последнем параметре шаблона

// - Допустимый Процент Совпадения Цвета - //
Color_Loss_Precision_Transform_Quality = 100

Здесь подразумевается некоторый параметр отклонения текущего цвета от квантованного при котором квантованный цвет весьма близок к оригиналу и квантование будет произведено, т.е. цвет формата #RRGGBB будет преобразован в цвет формата #RGB. Если разность текущего и квантованного цвета окажется больше заданного порога, цвет останется не квантованным, т.е. длинной 7 символов формата #RRGGBB.

Немного слов о том, как работает данный механизм. Возьмем для примера два идеальных – квантованных цвета по одной оси, например красной #AA и #BB. Если разбить отрезок между этими цветами, то получится 18 точек, включая эти цвета.

#AA, #AB, #AC, #AD, #AE, #AF, #B0, #B1, #B2,
#B3, #B4, #B5, #B6, #B7, #B8, #B9, #BA, #BB

От цвета #BB вверх по шкале идет цвет #CC. И между #BB и #СС также 18 точек включая их самих. При интерполяции – квантовании цвета неидеальный цвет трансформируется в тот, идеальный от которого, он отстоит не белее чем на 8 точек по цветовой оси. Т.е. например цвет #AF, будет трансформирован в цвет #AA. А #B3 в цвет #BB. Назовем эти 8 точек максимальным радиусом захвата идеального цвета.

А теперь применительно параметра шаблона задающего качество квантования. Так вот этот параметр задает управляемый радиус захвата цвета в процентах от максимального, например 75%. Если цвет выйдет за пределы этого радиуса захвата, он не будет квантоваться, поскольку мы считаем, что такой квантованный цвет слишком не похож на оригинал и мы оставляем его, как есть, т.е. самим собой.

В файле шаблонов символ % для этого параметра указывать не нужно.