OTFF - OpenType Feature Framework

У каждого разработчика со временем создаётся база с рабочим материалом, для облегчения рутинной работы. OTFF (OpenType Feature Framework) - набор моих рабочих скриптов для написании программного кода в OpenType шрифтах.

Цель данной подборки вполне ясна - облегчить ваш труд. Специально для любителей готовых решений хотелось бы предупредить, что это образцы скриптов требующие определённых знаний и навыков для полноценной работы с ними.

Если вы считаете, что в данной подборке частей кода или части символов не хватает - то вы абсолютно правы - данные примеры требуют доработки под конкретные задачи.

* В результате тех или иных обстоятельств, мои рабочие материалы просачиваются в сеть. Повинуясь данным обстоятельствам, решил оформить их должным образом и опубликовать на своём сайте.)

 

Cкрипт для функции 'aalt' - Access All Alternates.
Данная функция может содержать все глифы вашего шрифта и быть применена в ручном режиме к выделенному символу.

feature aalt{ # Access All Alternates
  feature locl;
  feature numr;
  feature dnom;
  feature ordn;
  feature sups;
  feature subs;
  feature smcp;
  feature onum;
  feature lnum;
  feature pnum;
  feature tnum;
  feature ss01;
  feature salt;
  feature hist;
  feature ornm;
  feature zero;
} aalt;

 

Cкрипт для функции 'liga' - Standard Ligatures.
функция предназначена для поддержки стандартных лигатур в автоматическом режиме.

feature liga { # Standard Ligatures
# Latin
  sub f l by fl;
  sub f i by fi;
} liga;

 

Cкрипт для функции 'dlig' - Discretionary Ligatures.
функция предназначена для поддержки расширенных лигатур.
Требует включения пользователем.

feature dlig { # Discretionary Ligatures
# Latin
sub c t by c_t;
sub s t by s_t;
} dlig;

 

Cкрипт для функции 'onum' - Oldstyle Numerals (Figures).
функция предназначена для замены стандартных цифр на старостильные.

feature onum { # Old Style Numerals
# Latin
sub by ;
script cyrl; # Cyrillic
sub by ;
} onum;

 

Cкрипт для функции 'pnum' - Proportional Numerals (Figures).
Функция подмены цифр, на цифры старого стиля с различной шириной кегельной площадки.
Требует включения пользователем.

feature pnum { # Proportional Figures
# Latin
sub by ;
} pnum;

 

Cкрипт для функции 'lnum' - Lining Numerals (Figures).
Функция подмены цифр, на цифры с высотой равной прописным знакам.
Рекомендуется к использованию совместно с прописными знаками.
Требует включения пользователем.

feature lnum { # Lining Figures
# Latin
sub by ;
} lnum;

 

Cкрипт для функции 'tnum' - Tabular Numerals (Figures).
функция предназначена для замены стандартных цифр на табличные.
Требует включения пользователем.

feature tnum { # Tabular Figures
# Latin
sub by ;
} tnum;

 

Cкрипт для функции 'zero' - Slashed Zero.
Функция преобразует ноль в знак ноля перечёркнутый косой чертой.
Требует включения пользователем.

feature zero { # Slashed Zero
# Latin
sub by ;
} zero;

 

Cкрипт для функции 'ordn' - Ordinals.
Функция предназначена для замены стандартных буквенных символов после цифровых знаков в качестве порядковых числительных.
Требует включения пользователем.

feature ordn { # Ordinals
# Latin
sub by ;
} ordn;

 

Cкрипт для функции 'frac' - Fractions.
Функция преобразует цифры и знак косой черты в символы дробей.
Требует включения пользователем.

feature frac { # Fractions
# Latin
sub by ;
} frac;

 

Cкрипт для функции 'subs' - Subscript.
Функция преобразует цифры в подстрочные символы.
Требует включения пользователем.

feature subs { # Subscript
# Latin

} subs;

 

Cкрипт для функции 'sups' - Superscript.
Функция преобразует цифры в надстрочные символы.
Требует включения пользователем.

feature sups { # Superscript
# Latin
sub by ;
} sups;

 

Cкрипт для функции 'ornm' - Ornaments.
Функция преобразует различные цифровые и буквенные знаки в знаки орнамента.
Требует включения пользователем.

feature ornm { # Ornaments
# Latin
sub by ;
} ornm;

 

Cкрипт для функции 'smcp' - Small Capitals.
Функция преобразует строчные знаки в капитель.
Требует включения пользователем.

feature smcp { # Small Capitals
# Latin
sub by ;
} smcp;

 

Cкрипт для функции 'salt' - Stylistic Alternates.
Функция заменяет все или некоторые знаки шрифта их альтернативными аналогами.
Требует включения пользователем.

feature salt { # Stylistic Alternates
# Latin
sub by ;
script cyrl; # Cyrillic
sub by ;
} salt;

 

Cкрипт для функции 'ss01' - 'ss20'- Stylistic Set.
Функции предназначаются для замены наборов знаков одной стилистики на другой.
Доступны для использования несколько наборов: 'ss01' - 'ss20'.
Требует включения пользователем.

feature ss01 { # Sylistic Set 1
# Latin
sub by ;
script cyrl; # Cyrillic
sub by ;
} ss01;

 

Cкрипт для функции 'calt' - Contextual Alternates.
Функция заменяет автоматически все или некоторые знаки шрифта на их альтернативы.
Одна из самых сложных функций, используемая чаще всего для имитации рукописного текста.

feature calt { # Contextual Alternates
# Latin
sub by ;
sub from [] ;
} calt;

 

Cкрипт для функции 'kern' - Kerning.
Поддержка кернинга, в том числе и в сложных, многостраничных шрифтах.
Не требует включения пользователем.

feature kern { # Kerning
# Latin
lookup kern3 {
} kern3;
script cyrl; # Cyrillic
lookup kern3;
} kern;

 

Cкрипт для функции 'locl' - Localized Forms.
Функция преобразует знаки шрифта в их локализованные формы.
Не требует включения пользователем.

feature locl { # Localized Forms
# Latin
language TRK exclude_dflt; # Turkish
sub i by i.dot;
} locl;

 

Cкрипт для функции 'hist' - Historical Forms.
Функция преобразует знаки шрифта в их исторические формы.
Требует включения пользователем.

feature hist { # Historical Forms
# Latin
sub s by longs;
} hist;

 


Блоки кода для быстрого написания функций (OpenType фич)

sub zero by zero.xxxx;
sub one by one.xxxx;
sub two by two.xxxx;
sub three by three.xxxx;
sub four by four.xxxx;
sub five by five.xxxx;
sub six by six.xxxx;
sub seven by seven.xxxx;
sub eight by eight.xxxx;
sub nine by nine.xxxx;

sub A by A.xxxx;
sub B by B.xxxx;
sub C by C.xxxx;
sub D by D.xxxx;
sub E by E.xxxx;
sub F by F.xxxx;
sub G by G.xxxx;
sub H by H.xxxx;
sub I by I.xxxx;
sub J by J.xxxx;
sub K by K.xxxx;
sub L by L.xxxx;
sub M by M.xxxx;
sub N by N.xxxx;
sub O by O.xxxx;
sub P by P.xxxx;
sub Q by Q.xxxx;
sub R by R.xxxx;
sub S by S.xxxx;
sub T by T.xxxx;
sub U by U.xxxx;
sub V by V.xxxx;
sub W by W.xxxx;
sub X by X.xxxx;
sub Y by Y.xxxx;
sub Z by Z.xxxx;

sub a by a.xxxx;
sub b by b.xxxx;
sub c by c.xxxx;
sub d by d.xxxx;
sub e by e.xxxx;
sub f by f.xxxx;
sub g by g.xxxx;
sub h by h.xxxx;
sub i by i.xxxx;
sub j by j.xxxx;
sub k by k.xxxx;
sub l by l.xxxx;
sub m by m.xxxx;
sub n by n.xxxx;
sub o by o.xxxx;
sub p by p.xxxx;
sub q by q.xxxx;
sub r by r.xxxx;
sub s by s.xxxx;
sub t by t.xxxx;
sub u by u.xxxx;
sub v by v.xxxx;
sub w by w.xxxx;
sub x by x.xxxx;
sub y by y.xxxx;
sub z by z.xxxx;

 

Кириллические знаки в формате uniXXXX:

sub uni0410 by uni0410.xxxx;
sub uni0411 by uni0411.xxxx;
sub uni0412 by uni0412.xxxx;
sub uni0413 by uni0413.xxxx;
sub uni0414 by uni0414.xxxx;
sub uni0415 by uni0415.xxxx;
sub uni0401 by uni0401.xxxx;
sub uni0416 by uni0416.xxxx;
sub uni0417 by uni0417.xxxx;
sub uni0418 by uni0418.xxxx;
sub uni0419 by uni0419.xxxx;
sub uni041A by uni041A.xxxx;
sub uni041B by uni041B.xxxx;
sub uni041C by uni041C.xxxx;
sub uni041D by uni041D.xxxx;
sub uni041E by uni041E.xxxx;
sub uni041F by uni041F.xxxx;
sub uni0420 by uni0420.xxxx;
sub uni0421 by uni0421.xxxx;
sub uni0422 by uni0422.xxxx;
sub uni0423 by uni0423.xxxx;
sub uni0424 by uni0424.xxxx;
sub uni0425 by uni0425.xxxx;
sub uni0426 by uni0426.xxxx;
sub uni0427 by uni0427.xxxx;
sub uni0428 by uni0428.xxxx;
sub uni0429 by uni0429.xxxx;
sub uni042A by uni042A.xxxx;
sub uni042B by uni042B.xxxx;
sub uni042C by uni042C.xxxx;
sub uni042D by uni042D.xxxx;
sub uni042E by uni042E.xxxx;
sub uni042F by uni042F.xxxx;
sub uni0401 by uni0401.xxxx;

sub uni0430 by uni0430.xxxx;
sub uni0431 by uni0431.xxxx;
sub uni0432 by uni0432.xxxx;
sub uni0433 by uni0433.xxxx;
sub uni0434 by uni0434.xxxx;
sub uni0435 by uni0435.xxxx;
sub uni0451 by uni0451.xxxx;
sub uni0436 by uni0436.xxxx;
sub uni0437 by uni0437.xxxx;
sub uni0438 by uni0438.xxxx;
sub uni0439 by uni0439.xxxx;
sub uni043A by uni043A.xxxx;
sub uni043B by uni043B.xxxx;
sub uni043C by uni043C.xxxx;
sub uni043D by uni043D.xxxx;
sub uni043E by uni043E.xxxx;
sub uni043F by uni043F.xxxx;
sub uni0440 by uni0440.xxxx;
sub uni0441 by uni0441.xxxx;
sub uni0442 by uni0442.xxxx;
sub uni0443 by uni0443.xxxx;
sub uni0444 by uni0444.xxxx;
sub uni0445 by uni0445.xxxx;
sub uni0446 by uni0446.xxxx;
sub uni0447 by uni0447.xxxx;
sub uni0448 by uni0448.xxxx;
sub uni0449 by uni0449.xxxx;
sub uni044A by uni044A.xxxx;
sub uni044B by uni044B.xxxx;
sub uni044C by uni044C.xxxx;
sub uni044D by uni044D.xxxx;
sub uni044E by uni044E.xxxx;
sub uni044F by uni044F.xxxx;

 

Кириллические знаки в формате afiiXXXXX:

sub afii10017 by afii10017.xxxx;
sub afii10018 by afii10018.xxxx;
sub afii10019 by afii10019.xxxx;
sub afii10020 by afii10020.xxxx;
sub afii10021 by afii10021.xxxx;
sub afii10022 by afii10022.xxxx;
sub afii10023 by afii10023.xxxx;
sub afii10024 by afii10024.xxxx;
sub afii10025 by afii10025.xxxx;
sub afii10026 by afii10026.xxxx;
sub afii10027 by afii10027.xxxx;
sub afii10028 by afii10028.xxxx;
sub afii10029 by afii10029.xxxx;
sub afii10030 by afii10030.xxxx;
sub afii10031 by afii10031.xxxx;
sub afii10032 by afii10032.xxxx;
sub afii10033 by afii10033.xxxx;
sub afii10034 by afii10034.xxxx;
sub afii10035 by afii10035.xxxx;
sub afii10036 by afii10036.xxxx;
sub afii10037 by afii10037.xxxx;
sub afii10038 by afii10038.xxxx;
sub afii10039 by afii10039.xxxx;
sub afii10040 by afii10040.xxxx;
sub afii10041 by afii10041.xxxx;
sub afii10042 by afii10042.xxxx;
sub afii10043 by afii10043.xxxx;
sub afii10044 by afii10044.xxxx;
sub afii10045 by afii10045.xxxx;
sub afii10046 by afii10046.xxxx;
sub afii10047 by afii10047.xxxx;
sub afii10048 by afii10048.xxxx;
sub afii10049 by afii10049.xxxx;

sub afii10065 by afii10065.xxxx;
sub afii10066 by afii10066.xxxx;
sub afii10067 by afii10067.xxxx;
sub afii10068 by afii10068.xxxx;
sub afii10069 by afii10069.xxxx;
sub afii10070 by afii10070.xxxx;
sub afii10071 by afii10071.xxxx;
sub afii10072 by afii10072.xxxx;
sub afii10073 by afii10073.xxxx;
sub afii10074 by afii10074.xxxx;
sub afii10075 by afii10075.xxxx;
sub afii10076 by afii10076.xxxx;
sub afii10077 by afii10077.xxxx;
sub afii10078 by afii10078.xxxx;
sub afii10079 by afii10079.xxxx;
sub afii10080 by afii10080.xxxx;
sub afii10081 by afii10081.xxxx;
sub afii10082 by afii10082.xxxx;
sub afii10083 by afii10083.xxxx;
sub afii10084 by afii10084.xxxx;
sub afii10085 by afii10085.xxxx;
sub afii10086 by afii10086.xxxx;
sub afii10087 by afii10087.xxxx;
sub afii10088 by afii10088.xxxx;
sub afii10089 by afii10089.xxxx;
sub afii10090 by afii10090.xxxx;
sub afii10091 by afii10091.xxxx;
sub afii10092 by afii10092.xxxx;
sub afii10093 by afii10093.xxxx;
sub afii10094 by afii10094.xxxx;
sub afii10095 by afii10095.xxxx;
sub afii10096 by afii10096.xxxx;
sub afii10097 by afii10097.xxxx;


 

Как с этим кодом работать?

Приведу пример использования кода в редакторе Notepad++
1. Открываем редактор Notepad++.
2. Копируем нужный участок кода.
3. Выделяем суффикс ".xxxx" и вызываем диалоговое окно замены сочетанием клавиш Ctrl+H
4. В поле "Заменить на" пишем например .calt.
5. Жмём на кнопку "заменить всё"
6. Копируем полученный результат и вставляем в нашу функцию, в панели FontLab-а.

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