summaryrefslogtreecommitdiff
path: root/macros/optex/pkg/mte.opm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/optex/pkg/mte.opm')
-rw-r--r--macros/optex/pkg/mte.opm685
1 files changed, 685 insertions, 0 deletions
diff --git a/macros/optex/pkg/mte.opm b/macros/optex/pkg/mte.opm
new file mode 100644
index 0000000000..e0687001d6
--- /dev/null
+++ b/macros/optex/pkg/mte.opm
@@ -0,0 +1,685 @@
+% This is macro package used by OpTeX, see http://petr.olsak.net/optex
+% mte.opm, Petr Olšák <petr@olsak.net>, 2021
+% See end of the file for more information
+
+\_codedecl \enablemte {MicroTypographic Extension <2021-05-23>}
+\_namespace{mte}
+
+ \_doc -------------------
+ First, we define default protrusion values. They are
+ saved in the macros
+ \^`\.AlphabetPR`, \^`\.alphabetPR`, \^`\.digitsPR`, \^`\.punctPR`,
+ \^`\.quotPR`, \^`\.othersPR`
+ for regular and bold fonts. The analogous macros
+ \^`\.AlphabetPI`, \^`\.alphabetPI`, \^`\.digitsPI`, \^`\.punctPI`,
+ \^`\.quotPI`, \^`\.othersPI` store data
+ for italic and bold italic fonts.
+ We are using long names of these macros (without the dot shortcut in the
+ code) because user can copy these macros to his/her macro file and do modifications.
+ \nl
+ User (or a font family file) can define other values, for example by
+ `\def\_mte_quotPR{...}`. If such definition is done before
+ loading this package, it has precedence. This is the reason why we are
+ using \`\.trydef` which defines given macro only if it is not defined
+ already.
+ \_cod -------------------
+
+\_def\.trydef #1{\_ifx#1\_undefined \_afterfi{\_def#1}\_else \_ea\_ignoreit \_fi}
+
+ \_doc
+ We want to save size of the following macros with data tables, so we don't write
+ `[<code of char>] =` but only \`\_mte`~`<char> =`. We use \OpTeX/ name space for
+ \^`\_mte` (no package name space) because user may copy these macros to
+ other macro files and modify them. We hope that the name \^`\_mte` will
+ be never used in another meaning in \OpTeX/.
+ \_cod
+
+\_def\_mte #1{[\_immediateassignment\_tmpnum=`#1 \_the\_tmpnum]}
+
+ \_doc --------------------
+ The protrusion data follow.
+ The values are coefficients of total width of declared character.
+ First value gives left protrusion, second value is right protrusion.
+ \`\.AlphabetPR`
+ \_cod --------------------
+
+\.trydef \_mte_AlphabetPR {% Alphabets, Protrusion, Regular fonts
+ \_mte A = {.05,.05},
+ \_mte Æ = {.05, 0},
+ \_mte F = {0 ,.05},
+ \_mte J = {.05, 0},
+ \_mte K = {0 ,.05},
+ \_mte L = {0 ,.05},
+ \_mte T = {.05,.05},
+ \_mte V = {.05,.05},
+ \_mte W = {.05,.05},
+ \_mte X = {.05,.05},
+ \_mte Y = {.05,.05},
+}
+ \_doc
+ \`\.alphabetPR`
+ \_cod
+
+\.trydef \_mte_alphabetPR {% alphabets, Protrusion, Regular fonts
+ \_mte k = {0 ,.05},
+ \_mte r = {0 ,.05},
+ \_mte t = {0 ,.07},
+ \_mte v = {.05,.05},
+ \_mte w = {.05,.05},
+ \_mte x = {.05,.05},
+ \_mte y = {.05,.07},
+}
+ \_doc
+ \`\.digitsPR`
+ \_cod
+
+\.trydef \_mte_digitsPR {% digits, Protrusion, Regular fonts
+ \_mte 0 = {0 ,.05},
+ \_mte 1 = {.1 ,.2 },
+ \_mte 2 = {.05,.05},
+ \_mte 3 = {.05,.05},
+ \_mte 4 = {.07,.07},
+ \_mte 5 = {0 ,.05},
+ \_mte 6 = {0 ,.05},
+ \_mte 7 = {.05,.1 },
+ \_mte 8 = {0 ,.05},
+ \_mte 9 = {0 ,.05},
+ [0xF731] = {.1, .1}, % /one.oldstyle
+ [0xF732] = {.05, .05}, % /two.oldstyle
+ [0xF733] = {.03, .08}, % /three.oldstyle
+ [0xF734] = {.05, .05}, % /four.oldstyle
+ [0xF737] = {.05, .08}, % /seven.oldstyle
+}
+ \_doc
+ \`\.punctPR`
+ \_cod
+
+\.trydef \_mte_punctPR {% punctuations, Protrusion, Regular fonts
+ \_mte . = {0 , .7},
+ \_mte , = {0 , .5},
+ \_mte : = {0 , .5},
+ \_mte ; = {0 , .5},
+ \_mte ! = {0 , .1},
+ \_mte ? = {0 , .2},
+ \_mte @ = {.05,.05},
+ \_mte ~ = {.2, .25},
+ \_mte \% = {.05,.05}, % /percent
+ \_mte * = {.3, .3},
+ \_mte + = {.25,.25},
+ \_mte - = {.4, .5}, % /hyphen
+ \_mte – = {.4, .3}, % /endash
+ \_mte — = {.3, .2}, % /emdash
+ \_mte _ = {.2, .2}, % /underscore
+ \_mte / = {.2, .3},
+ \_mte \\ = {.2, .3}, % /backslash
+ \_mte ¡ = {.1, 0}, \_mte ¿ = {.1, 0},
+}
+ \_doc
+ \`\.quotPR`
+ \_cod
+
+\.trydef \_mte_quotPR {% quotation marks, Protrusion, Regular fonts
+ \_mte ' = {.3,.4}, % /quotesingle
+ \_mte ‘ = {.5,.7}, \_mte ’ = {.5,.6},
+ \_mte “ = {.5,.3}, \_mte ” = {.2,.6},
+ \_mte ‚ = {.4,.4}, \_mte „ = {.4,.4},
+ \_mte ‹ = {.4,.4}, \_mte › = {.3,.5},
+ \_mte « = {.3,.2}, \_mte » = {.1,.4},
+}
+ \_doc
+ \`\.othersPR`
+ \_cod
+
+\.trydef \_mte_othersPR {% other characters, Protrusion, Regular fonts
+ \_mte ( = {.3, 0}, \_mte ) = {0 ,.3},
+ \_mte < = {.2, .1}, \_mte > = {.1, .2},
+ \_mte \{ = {.4, .2}, \_mte \} = {.2, .4}, % /braceleft, /braceright
+ [0x2329] = {.4, 0}, [0x232A] = {0 ,.4}, % /angleleft, /angleright
+ \_mte † = {.1,.1},
+ \_mte ‡ = {.08, .08},
+ \_mte • = {.2, .2},
+ \_mte · = {.4, .45}, % /periodcentered
+ \_mte ℃ = {.08, .05},
+ \_mte ₡ = {0 , .05},
+ \_mte ° = {.4, .4},
+ [0x2122] = {.1, .2}, % /trademark
+ \_mte © = {.1, .1},
+ \_mte ® = {.1, .1},
+ \_mte ª = {.1, .2},
+ \_mte º = {.1, .2},
+ \_mte ¹ = {.2, .25},
+ \_mte ² = {.05, .1},
+ \_mte ³ = {.05, .1},
+ \_mte ¬ = {.2, 0},
+ \_mte − = {.3, .3},
+ \_mte ± = {.15, .2},
+ \_mte × = {.15, .25},
+ \_mte ÷ = {.15, .25},
+ \_mte € = {.1, 0},
+ \_mte Γ = {0 ,.180}, % /Gamma
+ \_mte Δ = {.1, .1}, % /Delta
+ \_mte Θ = {.05, .05}, % /Theta
+ \_mte Λ = {.1,.1}, % /Lambda
+ \_mte Σ = {.05, .05}, % /Sigma
+ \_mte Υ = {.1,.1}, % /Upsilon
+ \_mte Φ = {.05, .05}, % /Phi
+ \_mte Ψ = {.05, .05}, % /Psi
+}
+
+ \_doc
+ The protrusion data for italic and bold italic fonts follow.
+ \`\.AlphabetPI`
+ \_cod
+
+\.trydef \_mte_AlphabetPI {% Alphabets, Protrusion, Italic fonts
+ \_mte A = {.125,.1},
+ \_mte Æ = {.125,-.055},
+ \_mte B = {.09,-.04},
+ \_mte C = {.145,-.075},
+ \_mte D = {.075,-.028},
+ \_mte E = {.08,-.055},
+ \_mte F = {.085,-.08},
+ \_mte G = {.153,-.015},
+ \_mte H = {.073,-.06},
+ \_mte I = {.14,-.12},
+ [0x0132] = {.14,-.08}, % IJ
+ \_mte J = {.135,-.08},
+ \_mte K = {.07,-.03},
+ \_mte L = {.087,.04},
+ \_mte M = {.067,-.045},
+ \_mte N = {.075,-.055},
+ \_mte O = {.15,-.03},
+ \_mte Π= {.15,-.055},
+ \_mte P = {.082,-.05},
+ \_mte Q = {.15,-.03},
+ \_mte R = {.075, .015},
+ \_mte S = {.09,-.065},
+ \_mte $ = {.1,-.02}, % $
+ \_mte T = {.22,-.085},
+ \_mte U = {.23,-.055},
+ \_mte V = {.26,-.06},
+ \_mte W = {.185,-.055},
+ \_mte X = {.07,-.03},
+ \_mte Y = {.25,-.06},
+ \_mte Z = {.09,-.06},
+}
+ \_doc
+ \`\.alphabetPI`
+ \_cod
+
+\.trydef \_mte_alphabetPI {% alphabets, Protrusion, Italic fonts
+ \_mte a = {.15,-.01},
+ \_mte b = {.17, 0},
+ \_mte c = {.173,-.01},
+ \_mte d = {.15,-.055},
+ \_mte e = {.18, 0},
+ \_mte f = {0 ,-.25},
+ \_mte g = {.15,-.01},
+ \_mte h = {.1, 0},
+ \_mte i = {.21, 0},
+ [0x17C9] = {.21,-.04}, % ij
+ \_mte j = {0 ,-.04},
+ \_mte k = {.11,-.05},
+ \_mte l = {.24,-.11},
+ \_mte m = {.08, 0},
+ \_mte n = {.115, 0},
+ \_mte o = {.155, 0},
+ \_mte q = {.17,-.04},
+ \_mte r = {.155,-.04},
+ \_mte s = {.13, 0},
+ \_mte t = {.23,-.01},
+ \_mte u = {.12, 0},
+ \_mte v = {.14,-.025},
+ \_mte w = {.098,-.02},
+ \_mte x = {.065,-.04},
+ \_mte y = {.13,-.02},
+ \_mte z = {.110,-.08},
+}
+ \_doc
+ \`\.digitsPI`
+ \_cod
+
+\.trydef \_mte_digitsPI {% digits, Protrusion, Italic fonts
+ \_mte 0 = {.17,-.085},
+ \_mte 1 = {.23,.11},
+ \_mte 2 = {.13,-.07},
+ \_mte 3 = {.14,-.07},
+ \_mte 4 = {.13,.08},
+ \_mte 5 = {.16, 0},
+ \_mte 6 = {.175,-.03},
+ \_mte 7 = {.25,-.15},
+ \_mte 8 = {.13,-.04},
+ \_mte 9 = {.155,-.08},
+ [0xF730] = {.05,.05}, % /zero.oldstyle
+ [0xF731] = {.1, .1}, % /one.oldstyle
+ [0xF732] = {.1,.08}, % /two.oldstyle
+ [0xF733] = {.08,.05}, % /three.oldstyle
+ [0xF734] = {.08,.08}, % /four.oldstyle
+ [0xF735] = {.05, 0}, % /five.oldstyle
+ [0xF736] = {.05, 0}, % /six.oldstyle
+ [0xF737] = {.08,.08}, % /seven.oldstyle
+ [0xF738] = {.05, 0}, % /eight.oldstyle
+ [0xF739] = {0 ,.05}, % /nine.oldstyle
+}
+ \_doc
+ \`\.punctPI`
+ \_cod
+
+\.trydef \_mte_punctPI {% punctuations, Protrusion, Italic fonts
+ \_mte . = {0 ,.5},
+ \_mte , = {0 ,.45},
+ \_mte : = {0 ,.3},
+ \_mte ; = {0 ,.3},
+ \_mte & = {.13,.03},
+ \_mte \% = {.18,.05},
+ \_mte * = {.38,.02},
+ \_mte + = {.18,.2},
+ \_mte @ = {.18,.01},
+ \_mte ~ = {.2,.15},
+ \_mte ( = {.3, 0}, \_mte ) = {0 ,.07},
+ \_mte / = {.1,.1},
+ \_mte - = {.5,.3}, % /hyphen
+ \_mte – = {.5,.3}, % /endash
+ \_mte — = {.4,.17}, % /emdash
+ \_mte _ = {.1,.2}, % /underscore
+ \_mte ¡ = {.2, 0}, \_mte ¿ = {.2, 0},
+}
+ \_doc
+ \`\.quotPI`
+ \_cod
+
+\.trydef \_mte_quotPI {% quotation marks, Protrusion, Italic fonts
+ \_mte ' = {.3,.4}, % /quotesingle
+ \_mte " = {.5,.3},
+ \_mte ‘ = {.8,.2}, \_mte ’ = {.8,-.02},
+ \_mte “ = {.54,.1}, \_mte ” = {.5,.1},
+ \_mte ‚ = {.3,.7}, \_mte „ = {.2,.6},
+ \_mte ‹ = {.5,.3}, \_mte › = {.4,.4},
+ \_mte « = {.4,.1}, \_mte » = {.2,.3},
+}
+ \_doc
+ \`\.othersPI`
+ \_cod
+
+\.trydef \_mte_othersPI {% other characters, Protrusion, Italic fonts
+ \_mte < = {.3,.1}, \_mte > = {200,100},
+ \_mte \\ = {.3,.3},
+ \_mte \{ = {.4,.1}, \_mte \} = {200,200},
+ \_mte † = {.2,.08},
+ \_mte ‡ = {.12,.08},
+ \_mte • = {.22,.1},
+ \_mte · = {.55,.3}, % /periodcentered
+ \_mte ℃ = {.17, 0},
+ \_mte ₡ = {.1,.05},
+ \_mte ¶ = {.2, 0},
+ \_mte ° = {.5,.3},
+ [0x2122] = {.2,.07}, % /trademark
+ \_mte © = {.05,.07},
+ \_mte ® = {.05,.07},
+ \_mte ª = {.14,.1},
+ \_mte º = {.14,.1},
+ \_mte ¹ = {.40,.15},
+ \_mte ² = {.25,.08},
+ \_mte ³ = {.25,.08},
+ \_mte ¬ = {.25,.08},
+ \_mte − = {.3,.2},
+ \_mte ± = {.15,.17},
+ \_mte × = {.2,.2},
+ \_mte ÷ = {.2,.2},
+ \_mte € = {.15, 0},
+ \_mte Γ = {.1,.12}, % /Gamma
+ \_mte Δ = {.12,.1}, % /Delta
+ \_mte Θ = {.12,.05}, % /Theta
+ \_mte Λ = {.13,.1}, % /Lambda
+ \_mte Ξ = {.1, 0}, % /Xi
+ \_mte Π = {.1, 0}, % /Pi
+ \_mte Σ = {.1,.05}, % /Sigma
+ \_mte Υ = {.18,.1}, % /Upsilon
+ \_mte Φ = {.13,.07}, % /Phi
+ \_mte Ψ = {.13,.05}, % /Psi
+ \_mte Ω = {.05, 0}, % /Omega
+}
+
+ \_doc --------------------
+ The expansion data follow in macros \^`\.AlphabetX`, \^`\.alphabetX`, \^`\.digitsX`
+ and \^`\.othersX`.
+ They are common for all fonts. \`\.AlphabetX`
+ \_cod --------------------
+
+\.trydef \_mte_AlphabetX {% Alphabets, eXpansion
+ \_mte A = .5,
+ \_mte Æ = .5,
+ \_mte B = .7,
+ \_mte C = .7,
+ \_mte D = .5,
+ \_mte E = .7,
+ \_mte F = .7,
+ \_mte G = .5,
+ \_mte H = .7,
+ \_mte K = .7,
+ \_mte M = .7,
+ \_mte N = .7,
+ \_mte O = .5,
+ \_mte Π= .5,
+ \_mte P = .7,
+ \_mte Q = .5,
+ \_mte R = .7,
+ \_mte S = .7,
+ \_mte U = .7,
+ \_mte W = .7,
+ \_mte Z = .7,
+}
+ \_doc
+ \`\.alphabetX`
+ \_cod
+
+\.trydef \_mte_alphabetX {% alphabets, eXpansion
+ \_mte a = .7,
+ \_mte æ = .7,
+ \_mte b = .7,
+ \_mte c = .7,
+ \_mte d = .7,
+ \_mte e = .7,
+ \_mte g = .7,
+ \_mte h = .7,
+ \_mte k = .7,
+ \_mte m = .7,
+ \_mte n = .7,
+ \_mte o = .7,
+ \_mte œ = .7,
+ \_mte p = .7,
+ \_mte q = .7,
+ \_mte s = .7,
+ \_mte u = .7,
+ \_mte w = .7,
+ \_mte z = .7,
+}
+ \_doc
+ \`\.digitsX`
+ \_cod
+
+\.trydef \_mte_digitsX {% digits, eXpansion
+ \_mte 2 = .7,
+ \_mte 3 = .7,
+ \_mte 6 = .7,
+ \_mte 8 = .7,
+ \_mte 9 = .7,
+}
+ \_doc
+ \`\.othersX`
+ \_cod
+
+\.trydef \_mte_othersX {% others, eXpansion
+}
+
+ \_doc --------------------
+ The \`\_mte_P` (for protrusion, all fonts) and \`\_mte_X`
+ (for expansion, all fonts) are empty by default but user can
+ declare specific values here. These macros are used last in the
+ \`\.allPR`, \`\.allPI`, \`\.allX` macros
+ (used in the lua code bellow), so it has general precedence.
+ \_cod --------------------
+
+\.trydef \_mte_P {} % user specific, Protrusion
+\.trydef \_mte_X {} % user specific, eXpansion
+
+\_def \.allPR {\.AlphabetPR \.alphabetPR \.digitsPR \.punctPR \.quotPR \.othersPR \.P}
+\_def \.allPI {\.AlphabetPI \.alphabetPI \.digitsPI \.punctPI \.quotPI \.othersPI \.P}
+\_def \.allX {\.AlphabetX \.alphabetX \.digitsX \.othersX \.X}
+
+ \_doc --------------------
+ We add a new macro \`\.features` to the \OpTeX/'s
+ \olink[fontfeatures]\_fontfeatures. It is empty by
+ default but it will be changed by `\enablemte` to read protrusion and
+ expansion data using Lua code.
+ \_cod --------------------
+
+\_addto\_fontfeatures{\.features}
+\_def\.features{}
+
+ \_doc --------------------
+ \`\enablemte` initializes protrusion data by the \^`\.initprotrusion` macro
+ and expansion data by the \^`\.initexpansion` macro. Then it sets
+ \elink[pdfprotrudechars]{\protrudechars} and \elink[pdfadjustspacing]{\adjustspacing}
+ primitives and sets the \^`\.features` macro to use
+ the protrusion tables `pr` (for regular or bold fonts) or `pi` (for italic
+ or bold italic fonts). The table `ex` is used for expansion data.
+ These tables are declared in the Lua code below.
+ \nl
+ \`\disablemte` disables font \^`\.features` and sets appropriate primitive
+ registers to zero.
+ \_cod --------------------
+
+\_def\.enablemte {%
+ \_initunifonts
+ \.initprotrusion % luacode, pr and pi tables initialized
+ \.initexpansion % luacode, ex table initialized
+ \_protrudechars=2
+ \_adjustspacing=2
+ \_def\.features{protrusion=p\.var;expansion=ex}% pr/pi and ex tables used
+ \_reloading \_currvar
+}
+\_def\.disablemte {%
+ \_protrudechars=0
+ \_adjustspacing=0
+ \_def\.features{}%
+ \_reloading \_currvar
+}
+\_nspublic \enablemte \disablemte ;
+
+ \_doc --------------------
+ The \`\.var` macro expands ro `r` when regular or bold font is loaded
+ and it expands to `i` if italic or bold italic font is loaded.
+ The `pr` or `pi` data table is selected using this macro.
+ \_cod --------------------
+
+\_def\.it{it}\_def\.bi{bi}
+\_def\.var{\_ifx\_whatresize\.it i\_else \_ifx\_whatresize\.bi i\_else r\_fi\_fi}
+
+ \_doc -------------------
+ The `pr` and `pi` data tables are created using lua code in
+ the \`\.initprotrusion` macro. The data from \^`\.allPR` or \^`\.allPI`
+ are used here.
+ The analogical concept is used in the \`\.initexpansion` macro.
+ \_cod -------------------
+
+\_def\.initprotrusion {%
+ \_directlua {%
+ fonts.protrusions.setups['pr']={
+ factor=\.fpfactor,
+ \.leftright,
+ \.allPR
+ }
+ fonts.protrusions.setups['pi']={
+ factor=\.fpfactor,
+ \.leftright,
+ \.allPI
+}}}
+\_def\.initexpansion {%
+ \_directlua {%
+ fonts.expansions.setups['ex']={
+ \.stretchshrinkstep,
+ factor=\.fxfactor,
+ \.allX
+}}}
+
+ \_doc --------------------
+ The \`\.leftright`, \`\.stretchshrinkstep`, \`\.fpfactor`, and \`\.fxfactor`
+ macros are used in the Lua code above and they have following default values
+ (you can re-define them, if you want):
+ \_cod --------------------
+
+\_def \.fpfactor{1}
+\_def \.leftright {left=1, right=1}
+\_def \.fxfactor{1}
+\_def \.stretchshrinkstep {stretch=3, shrink=2, step=.5}
+
+ \_doc --------------------
+ \`\setfpfactor` and \`\setfxfactor` simply define \^`\.fpfactor` and \^`\.fxfactor`.
+ \_cod --------------------
+
+\_def\.setfpfactor #1 {\_def\.fpfactor{#1}}
+\_def\.setfxfactor #1 {\_def\.fxfactor{#1}}
+\_nspublic \setfpfactor \setfxfactor ;
+
+ \_doc --------------------
+ There are similar letters: A, Á, Á, Â, Ã, Ä, Å, they need the same setting.
+ But only the basic letter (A in this example) has protrusion and/or expansion
+ setting using Lua code. The equivalent settings are done by the macro
+ \`\.setequivs``<font-switch>`.
+ This macro is used in \olink[_newfontloaded]{\_newfontloaded} `<font-switch>`
+ which is called by \OpTeX/ if the font is loaded first.
+ The \^`\.setequivs` macro uses data from \^`\.equalcodes` (see bellow)
+ and sets equal
+ \elink[lpcode]{\lpcode}, \elink[rpcode]{\rpcode}, and \elink[efcode]{\efcode}
+ for variant characters.
+ It is called only if \^`\.features` is non-empty, i.e.\ if the font
+ includes mte data.
+ \_cod --------------------
+
+\_def\_newfontloaded#1{\_ifx\.features\_empty \_else \.setequivs#1\_fi}
+
+\_def\.setequivs #1{\_let\.f=#1\_ea\.setequivsA\.equalcodes,,={},}
+\_def\.setequivsA#1#2=#3#4,{\_ifx^#3^\_else
+ \_afterfi{\_tmpnum=`#1 \.setequivsB#3#4\_end\.setequivsA}\_fi}
+\_def\.setequivsB#1{\_ifx\_end#1\_else
+ \_lpcode\.f`#1=\_lpcode\.f\_tmpnum
+ \_rpcode\.f`#1=\_rpcode\.f\_tmpnum
+ \_efcode\.f`#1=\_efcode\.f\_tmpnum
+ \_ea\.setequivsB\_fi
+}
+
+ \_doc --------------------
+ \`\.equalcodes` includes comma separated equivalences. The same
+ \elink[lpcode]{\lpcode}, \elink[rpcode]{\rpcode}, and \elink[efcode]{\efcode}
+ for all characters
+ given at right side is set as these codes of the character given
+ at the left side of equal sign.
+ You can do `\addto\_mte_equalcodes{<your additional settings>}`
+ if you want.
+ \_cod --------------------
+
+\_def\.equalcodes {%
+ A = ÀÁÂÃÄÅĀĂĄǺȀẠẢẤẦẨẪẬẮẰẲẶΑ,
+ B = ฿Β,
+ C = ÇĆĈĊČ,
+ D = ÐĎĐḌḎ,
+ E = ÈÉÊËĒĔĖĘĚȄẸẺẼỀẾỄỂỆΕ,
+ G = ĜĞĠĢǦǴ,
+ H = ĤĦḤḦḪΗ,
+ I = ÌÍÎÏĨĪĬĮİȈỈỊΙ,
+ J = Ĵ,
+ K = ĶΚ,
+ L = ĹĽĻŁḶ,
+ M = Μ,
+ N = ÑŃŅŇṄṆΝ,
+ O = ÒÓÔÕÖØŌŎŐỌƠǪǾȌỎỐỒỔỖỘỚỜỠỞỢΟ,
+ P = Ρ,
+ R = ŔŖŘȐṚṘṜ,
+ S = ŚŜŞŠȘṢ,
+ T = ŢŤȚṬṮΤ,
+ U = ÙÚÛÜŨŪŬŮŰŲƯȔỤỦỨỪỬỮỰ,
+ W = ŴẀẂẄ,
+ X = Χ,
+ Y = ÝŶŸỴỶỸ,
+ Z = ŹŻŽẒΖ,
+ a = àáâãäåāăąǻȁạảấầẩẫậắằẳẵ,
+ æ = ǽ,
+ c = çćĉċč,
+ d = đḍḏ, % ď has different right side
+ e = èéêëēĕėęěȅẹẻẽếềểễệ,
+ g = ĝğġģǧǵ,
+ h = ĥħḥḧḫ,
+ i = ìíîïĩīĭįıȉỉị,
+ j = ĵ,
+ k = ķ,
+ l = ĺļłḷḹ, % ľ has different right side
+ n = ñńņňṅṇ,
+ o = òóôõöøōŏőọơǫǿȍỏốồổỗộớờỡởợ,
+ r = ŕŗřȑṛṙṝ,
+ s = śŝşšșṣ,
+ t = ţțṭṯẗť,
+ u = ùúûüũūŭůűųưȕụủứừửữự,
+ w = ŵẁẃẅ,
+ y = ýŷÿỳỵỷỹ,
+ z = źżžẓ,
+}
+\_endnamespace
+\_endcode
+
+\tit MicroTypographic Extensions for \OpTeX/
+
+\centerline{\it Petr Olšák, 2021}
+\bigskip
+
+You can do `\load[mte]` followed by \^`\enablemte`. The microtypographic
+extensions (protrusions, expansions) of all fonts are available after
+\^`\enablemte`. The \LaTeX/ package Microtype does similar effect.
+
+The \^`\enablemte` macro reloads the current font with microtypographic
+extensions (mte) enabled and all new fonts loaded by the Font Selection System have
+mte enabled too, because they are added to the
+\olink[_fontfeatures]{\_fontfeatures} macro used by \OpTeX/.
+
+The \^`\enablemte` macro does only local settings. If it is used in a group then
+only fonts used in this group have mte.
+
+The \^`\enablemte` macro sets (among other things)
+\elink[pdfprotrudechars]{\protrudechars}`=2` (protrusion is enabled) and
+\elink[pdfadjustspacing]{\adjustspacing}`=2` (font expansion is enabled).
+You can disable these features by setting these primitive registers to zero
+value (it is default if \^`\enablemte` is not used).
+Note, that the values of these registers are checked when
+paragraph is finalized although the fonts were loaded with mte enabled.
+It means that you have to use `\par` before end of group
+if you use \^`\enablemte` inside a group.
+For example:
+
+\begtt
+{\enablemte
+ Roman font with mte enabled, \it italic font with mte enabled.
+ \par % mte features are used
+}
+\endtt
+%
+Or, simply use \^`\enablemte` at beginning of your document.
+
+On the other hand, you can use \^`\disablemte` macro which reloads current
+font with mte disabled and all newly loaded fonts have
+mte disabled too. The macro has local validity. For example,
+`{\disablemte text}` prints `text` by a font with
+mte disabled. It works locally in the middle of the paragraph (unlike setting
+`\protrudechars` and `\adjustspacing` to zero).
+
+You can define your own protrusion or expansion values: copy macros
+`\_mte_AlphabetPR`, `\_mte_quotPR`, etc.\ from this package and define them
+as you wish using `\def`. Such definition has precedence.
+Similar definitions can be in some font family files too, so: do your
+definition after all `\fontfam` if you want to keep the precedence.
+All such definitions must be performed before the `\mteinit` command.
+
+You can use `\def\_mte_P` for data of protrusion for all fonts
+which has general precedence. For example, if you want to protrude hyphen
+char with factor one at the right side and by factor 0.5 at the left side, use
+\begtt
+\def\_mte_P {% user specification, Protrusion, Regular fonts
+ \_mte - = {.5, 1}, % /hyphen
+}
+\endtt
+Analogical macro can be used for expansion data `\_mte_X`.
+
+You can use \^`\setfpfactor` `<factor><space>` to set the factor by which
+all protrusion data are scaled. The <factor> is decimal number and its default
+value is~1. This macro can be used before \^`\enablemte`.
+You can use \^`\setfxfactor` `<factor><space>` with analogical meaning,
+expansion data are scaled by given~<factor>.
+
+If you feel that default microtypographic data are wrong in a particular case,
+please let me know. I can correct it in this package. If you feel
+that a specific font family needs different microtypographic data, please
+let me know. I can add extra definitions to appropriate font family
+file.
+
+\_endinput
+
+Use "optex mte-doc.tex" (twice) to generate documentation from this file.