summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/base
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/optex/base')
-rw-r--r--macros/luatex/optex/base/alloc.opm165
-rw-r--r--macros/luatex/optex/base/basic-macros.opm97
-rw-r--r--macros/luatex/optex/base/bib-iso690.opm940
-rw-r--r--macros/luatex/optex/base/bib-simple.opm181
-rw-r--r--macros/luatex/optex/base/cite-bib.opm258
-rw-r--r--macros/luatex/optex/base/colors.opm393
-rw-r--r--macros/luatex/optex/base/doc.opm266
-rw-r--r--macros/luatex/optex/base/f-adventor.opm22
-rw-r--r--macros/luatex/optex/base/f-antt.opm32
-rw-r--r--macros/luatex/optex/base/f-baskerville.opm22
-rw-r--r--macros/luatex/optex/base/f-bonum.opm24
-rw-r--r--macros/luatex/optex/base/f-cursor.opm22
-rw-r--r--macros/luatex/optex/base/f-gfsbodoni.opm21
-rw-r--r--macros/luatex/optex/base/f-heros.opm203
-rw-r--r--macros/luatex/optex/base/f-libertine-s.opm50
-rw-r--r--macros/luatex/optex/base/f-libertine.opm60
-rw-r--r--macros/luatex/optex/base/f-lido.opm48
-rw-r--r--macros/luatex/optex/base/f-lmfonts.opm181
-rw-r--r--macros/luatex/optex/base/f-pagella.opm24
-rw-r--r--macros/luatex/optex/base/f-schola.opm24
-rw-r--r--macros/luatex/optex/base/f-technika.opm31
-rw-r--r--macros/luatex/optex/base/f-termes.opm24
-rw-r--r--macros/luatex/optex/base/f-xcharter.opm24
-rw-r--r--macros/luatex/optex/base/fams-ini.opm130
-rw-r--r--macros/luatex/optex/base/fnotes.opm175
-rw-r--r--macros/luatex/optex/base/fonts-catalog.opm135
-rw-r--r--macros/luatex/optex/base/fonts-opmac.opm175
-rw-r--r--macros/luatex/optex/base/fonts-preload.opm35
-rw-r--r--macros/luatex/optex/base/fonts-resize.opm349
-rw-r--r--macros/luatex/optex/base/fonts-select.opm670
-rw-r--r--macros/luatex/optex/base/graphics.opm425
-rw-r--r--macros/luatex/optex/base/hi-syntax.opm223
-rw-r--r--macros/luatex/optex/base/hisyntax-c.opm66
-rw-r--r--macros/luatex/optex/base/hisyntax-html.opm31
-rw-r--r--macros/luatex/optex/base/hisyntax-python.opm82
-rw-r--r--macros/luatex/optex/base/hisyntax-tex.opm38
-rw-r--r--macros/luatex/optex/base/hyperlinks.opm156
-rw-r--r--macros/luatex/optex/base/hyphen-lan.opm203
-rw-r--r--macros/luatex/optex/base/if-macros.opm258
-rw-r--r--macros/luatex/optex/base/languages.opm121
-rw-r--r--macros/luatex/optex/base/lists.opm110
-rw-r--r--macros/luatex/optex/base/logos.opm62
-rw-r--r--macros/luatex/optex/base/luatex-ini.opm136
-rw-r--r--macros/luatex/optex/base/makeindex.opm460
-rw-r--r--macros/luatex/optex/base/maketoc.opm126
-rw-r--r--macros/luatex/optex/base/margins.opm78
-rw-r--r--macros/luatex/optex/base/math-macros.opm946
-rw-r--r--macros/luatex/optex/base/math-preload.opm221
-rw-r--r--macros/luatex/optex/base/math-unicode.opm236
-rw-r--r--macros/luatex/optex/base/mathclass.opm1591
-rw-r--r--macros/luatex/optex/base/more-macros.opm241
-rw-r--r--macros/luatex/optex/base/multicolumns.opm114
-rw-r--r--macros/luatex/optex/base/optex.ini99
-rw-r--r--macros/luatex/optex/base/others.opm92
-rw-r--r--macros/luatex/optex/base/outlines.opm97
-rw-r--r--macros/luatex/optex/base/output.opm245
-rw-r--r--macros/luatex/optex/base/parameters.opm542
-rw-r--r--macros/luatex/optex/base/pdfuni-string.opm78
-rw-r--r--macros/luatex/optex/base/plain-macros.opm339
-rw-r--r--macros/luatex/optex/base/prefixed.opm275
-rw-r--r--macros/luatex/optex/base/ref-file.opm137
-rw-r--r--macros/luatex/optex/base/references.opm86
-rw-r--r--macros/luatex/optex/base/sections.opm411
-rw-r--r--macros/luatex/optex/base/slides.opm219
-rw-r--r--macros/luatex/optex/base/styles.opm115
-rw-r--r--macros/luatex/optex/base/table.opm211
-rw-r--r--macros/luatex/optex/base/uni-lcuc.opm15944
-rw-r--r--macros/luatex/optex/base/unimath-codes.opm361
-rw-r--r--macros/luatex/optex/base/unimath-table.opm2467
-rw-r--r--macros/luatex/optex/base/usebib.opm351
-rw-r--r--macros/luatex/optex/base/verbatim.opm267
71 files changed, 33041 insertions, 0 deletions
diff --git a/macros/luatex/optex/base/alloc.opm b/macros/luatex/optex/base/alloc.opm
new file mode 100644
index 0000000000..7e03ae77b7
--- /dev/null
+++ b/macros/luatex/optex/base/alloc.opm
@@ -0,0 +1,165 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \newdimen {Allocators for registers <2020-01-23>} % loaded in format
+
+ \_doc -----------------------------
+ The limits are set first.
+ \_cod -----------------------------
+
+\_chardef\_maicount = 65535 % Max Allocation Index for counts registers in LuaTeX
+\_let\_maidimen = \_maicount
+\_let\_maiskip = \_maicount
+\_let\_maimuskip = \_maicount
+\_let\_maibox = \_maicount
+\_let\_maitoks = \_maicount
+\_chardef\_mairead = 15
+\_chardef\_maiwrite = 15
+\_chardef\_maifam = 255
+
+ \_doc -----------------------------
+ Each allocation macro needs its own counter.
+ \_cod -----------------------------
+
+\_countdef\_countalloc=10 \_countalloc=255
+\_countdef\_dimenalloc=11 \_dimenalloc=255
+\_countdef\_skipalloc=12 \_skipalloc=255
+\_countdef\_muskipalloc=13 \_muskipalloc=255
+\_countdef\_boxalloc=14 \_boxalloc=255
+\_countdef\_toksalloc=15 \_toksalloc=255
+\_countdef\_readalloc=16 \_readalloc=-1
+\_countdef\_writealloc=17 \_writealloc=-1
+\_countdef\_mathalloc=18 \_mathalloc=3
+
+ \_doc -----------------------------
+ The common allocation macro
+ \`\_allocator` `\<sequence> {<type>} \<primitive declarator>`
+ is defined. This idea was used in classical plain \TeX/ by
+ Donald Knuth too but the macro from plain \TeX/ seems to be
+ more complicated:).
+ \_cod -----------------------------
+
+\_def\_allocator #1#2#3{%
+ \_global\_advance\_cs{_#2alloc}by1
+ \_ifnum\_cs{_#2alloc}>\_cs{_mai#2}%
+ \_errmessage{No room for a new \_ea\_string\_csname #2\_endcsname}%
+ \_else
+ \_global#3#1=\_cs{_#2alloc}%
+ \_wlog{\_string#1=\_ea\_string\_csname #2\_endcsname\_the\_cs{_#2alloc}}%
+ \_fi
+}
+
+ \_doc -----------------------------
+ The allocation macros
+ \`\newcount`, \`\newdimen`, \`\newskip`, \`\newmuskip`, \`\newbox`,
+ \`\newtoks`, \`\newread`, \`\newwrite` and \`\newmath`
+ are defined here.
+ \_cod -----------------------------
+
+\_def\_newcount #1{\_allocator #1{count}\_countdef}
+\_def\_newdimen #1{\_allocator #1{dimen}\_dimendef}
+\_def\_newskip #1{\_allocator #1{skip}\_skipdef}
+\_def\_newmuskip #1{\_allocator #1{muskip}\_muskipdef}
+\_def\_newbox #1{\_allocator #1{box}\_chardef}
+\_def\_newtoks #1{\_allocator #1{toks}\_toksdef}
+\_def\_newread #1{\_allocator #1{read}\_chardef}
+\_def\_newwrite #1{\_allocator #1{write}\_chardef}
+\_def\_newmath #1{\_allocator #1{fam}\_chardef}
+
+\_public \newcount \newdimen \newskip \newmuskip \newbox \newtoks \newread \newwrite \newmath ;
+
+ \_doc -----------------------------
+ The \`\newinsert` macro is defined differently than others.
+ \_cod -----------------------------
+
+\_newcount\_insertalloc \_insertalloc=255
+\_chardef\_insertmin = 201
+
+\_def\_newinsert #1{%
+ \_advance\_insertalloc by-1
+ \_ifnum\_insertalloc <\_insertmin
+ \_errmessage {No room for a new \_string\insert}%
+ \_else
+ \_global\_chardef#1=\_insertalloc
+ \_wlog {\_string#1=\_string\_insert\_the\_insertalloc}%
+ \_fi
+}
+\_public \newinsert ;
+
+ \_doc -----------------------------
+ Other allocation macros \`\newattribute` and \`\newcatodetable`
+ have their counter allocated by the `\newcount` macro.
+ \_cod -----------------------------
+
+\_newcount \_attributealloc \_attributealloc=0
+\_chardef\_maiattribute=\_maicount
+\_def\_newattribute #1{\_allocator #1{attribute}\_attributedef}
+
+\_newcount \_catcodetablealloc \_catcodetablealloc=10
+\_chardef\_maicatcodetable=32767
+\_def\_newcatcodetable #1{\_allocator #1{catcodetable}\_chardef}
+
+\_public \newattribute \newcatcodetable ;
+
+ \_doc -----------------------------
+ We declare public and private versions of `\tmpnum` and `\tmpdim`
+ registers separately. They are independent registers.
+ \_cod -----------------------------
+
+\_newcount \tmpnum \_newcount \_tmpnum
+\_newdimen \tmpdim \_newdimen \_tmpdim
+
+ \_doc -----------------------------
+ A few registers are initialized like in plain\TeX/. Note that `\z@` and `\z@skip` from
+ plain\TeX/ is `\zo` and `\zoskip` because we absolutely
+ don't support the `@` category dance.
+ Note that `\p@` is not defined because we can write 1pt which is more
+ legible.
+ \_cod -----------------------------
+
+\_newdimen\_maxdimen \_maxdimen=16383.99999pt % the largest legal <dimen>
+\_newskip\_hideskip \_hideskip=-1000pt plus 1fill % negative but can grow
+\_newskip\_centering \_centering=0pt plus 1000pt minus 1000pt
+\_newskip\_zoskip \_zoskip=0pt plus0pt minus0pt
+\_newbox\_voidbox % permanently void box register
+
+\_public \maxdimen \hideskip \centering \zoskip \voidbox ;
+
+\_endcode %---------------------------------------------------
+
+Like plain\TeX, the allocators `\newcount`, `\newwrite`, etc. are defined.
+The registers are allocated from 256 to the `\_mai<type>` which is 65535 in
+\LuaTeX/.
+
+Unlike in Plain\TeX/, the mentioned allocators are not `\outer`.
+
+User can use `\dimen0` to `\dimen200` and similarly for `\skip`,
+`\muskip`, `\box` and `\toks` directly. User can use
+`\count20` to `\count200` directly too. This is the same
+philosophy like in old plain\TeX/, but the range of directly used registers
+is wider.
+
+Inserts are allocated form 254 to 201 using `\newinsert`.
+
+You can define your own allocation concept (for example for allocation of
+arrays) from top of registers array. The example shows a definition of
+the array-like declarator of counters.
+
+\nobreak
+\begtt
+\newcount \_maicount % redefine maximal allocation index as variable
+\_maicount = \maicount % first value is top of the array
+
+\def\newcountarray #1[#2]{% \newcountarray \foo[100]
+ \advance\_maicount by -#2\relax
+ \ifnum \_countalloc > \_maicount
+ \errmessage{No room for a new array of \string\count}%
+ \else
+ \chardef#1=\_maicount
+ \fi
+}
+\def\usecount #1[#2]{% \usecount \foo[2]
+ \count\numexpr#1+#2\relax
+}
+\endtt
+
+
diff --git a/macros/luatex/optex/base/basic-macros.opm b/macros/luatex/optex/base/basic-macros.opm
new file mode 100644
index 0000000000..512678c312
--- /dev/null
+++ b/macros/luatex/optex/base/basic-macros.opm
@@ -0,0 +1,97 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \sdef {Basic macros for OpTeX <2020-02-14>} % loaded in format
+
+ \_doc ------------------------------
+ \`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog`
+ are classical macros from plain \TeX/.
+ \_cod ------------------------------
+
+\_let\_bgroup={ \_let\_egroup=}
+\_def \_empty {}
+\_def \_space { }
+\_def \_null {\_hbox{}}
+\_def \_wlog {\_immediate\_write-1 } % write on log file (only)
+
+\_public \bgroup \egroup \empty \space \null \wlog ;
+
+ \_doc ------------------------------
+ \`\bslash` is \"normal backslash" with category code 12.
+ \`\nbb` and \`\pcent` are double backslash and normal~`%`,
+ they should be used in lua codes, for example.
+ \_cod ------------------------------
+
+\_edef \_bslash {\_csstring\\}
+\_edef \_nbb {\_bslash\_bslash}
+\_edef \_pcent{\_csstring\%}
+
+\_public \bslash \nbb \pcent ;
+
+ \_doc ------------------------------
+ \`\sdef` `{<text>}` is equivalent to `\def\<text>`, where `\<text>` is a control
+ sequence. You can use arbitrary parameter mask after `\sdef{<text>}`, don't
+ put the (unwanted) space immediately after closing brace \code{\}}.
+ \nl
+ \`\sxdef` `{<text>}` is equivalent to `\xdef\<text>`.
+ \nl
+ \`\slet` `{<textA>}{<textB>}` is equivalent to `\let \<textA> = \<textB>`.
+ \_cod ------------------------------
+
+\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname}
+\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname}
+\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname}
+
+\_public \sdef \sxdef \slet ;
+
+ \_doc ------------------------------
+ \`\adef` `{<char>}{<body>}` puts the <char> as active character and defines it
+ as `{<body>}`. You can declare a macro with parameters too. For example
+ `\adef @#1{...$1...}`.
+ \_cod ------------------------------
+
+\_def \_adef #1{\_catcode`#1=13 \_begingroup \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}}
+\_public \adef ;
+
+ \_doc ------------------------------
+ \`\cs` `{<text>}` is only a shortcut to `\csname <text>\endcsname`, but you need
+ one more `\_ea` if you need to get the real control sequence `\<text>`.
+ \nl
+ \`\trycs` `{<csname>}{<text>}` expands to `\<csname>`
+ if it is defined else to the `<text>`.
+ \_cod ------------------------------
+
+\_def \_cs #1{\_csname#1\_endcsname}
+\_def \_trycs#1#2{\_ifcsname #1\_endcsname \_csname #1\_endcsname \_else #2\_fi}
+\_public \cs \trycs ;
+
+ \_doc ------------------------------
+ \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined.
+ \_cod ------------------------------
+
+\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}}
+\_public \addto ;
+
+ \_doc ------------------------------
+ \`\opwarning` `{<text>}` prints warning on the terminal and to the log file.
+ \_cod ------------------------------
+
+\_def \_opwarning #1{\_wterm{WARNING: #1.}}
+\_public \opwarning ;
+
+ \_doc ------------------------------
+ \`\loggingall` and \`\tracingall` are defined similarly as in
+ plain \TeX/, but they print
+ more logging information to the log file and to the terminal.
+ \_cod ------------------------------
+
+\_def\_loggingall{\_tracingcommands=3 \_tracingstats=2 \_tracingpages=1
+ \_tracingoutput=1 \_tracinglostchars=1 \_tracingmacros=2
+ \_tracingparagraphs=1 \_tracingrestores=1 \_tracingscantokens=1
+ \_tracingifs=1 \_tracinggroups=1 \_tracingassigns=1 }
+\_def\_tracingall{\_tracingonline=1 \_loggingall}
+
+\_public \loggingall \tracingall ;
+
+\_endcode % -------------------------------------
+
+
diff --git a/macros/luatex/optex/base/bib-iso690.opm b/macros/luatex/optex/base/bib-iso690.opm
new file mode 100644
index 0000000000..b569de0d30
--- /dev/null
+++ b/macros/luatex/optex/base/bib-iso690.opm
@@ -0,0 +1,940 @@
+% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+% bibliography style (iso690), version <2020-03-10>, loaded on demand by \usebib
+
+\_ifx\_optexbibstyle\_undefined \_errmessage
+ {This file can be read by: \_string\usebib/? (iso690) bibfiles command only}
+ \_endinput \_fi
+
+ \_doc -----------------------------
+ \`\_maybetod` (alias `\.` in the style file group) does not put second dot.
+ \_cod -----------------------------
+
+\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi}
+\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum
+\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum
+\_let\.=\_maybedot % prevents from double periods
+
+ \_doc -----------------------------
+ Option field.
+ \_cod -----------------------------
+
+\_CreateField {option}
+\_def\_isbiboption#1#2{\_edef\_tmp{\_noexpand\_isbiboptionA{#1}}\_tmp}
+\_def\_isbiboptionA#1{\_def\_tmp##1 #1 ##2\_relax{%
+ \_if^##2^\_csname iffalse\_ea\_endcsname \_else\_csname iftrue\_ea\_endcsname \_fi}%
+ \_ea\_tmp\_biboptionsi #1 \_relax}
+\_def\_bibopt[#1]#2#3{\_isbiboption{#1}\_iftrue\_def\_tmp{#2}\_else\_def\_tmp{#3}\_fi\_tmp}
+\_def\_biboptionvalue#1#2{\_def\_tmp##1 #1:##2 ##3\_relax{\_def#2{##2}}%
+ \_ea\_tmp\_biboptionsi #1: \_relax}
+
+\_def\_readbiboptions{%
+ \_RetrieveFieldIn{option}\_biboptionsi
+ \_toks1=\_ea{\_biboptionsi}%
+ \_edef\_biboptionsi{\_space \_the\_toks1 \_space \_the\_biboptions \_space}%
+}
+\_newtoks\_biboptions
+\_public \biboptions ;
+
+ \_doc -----------------------------
+ Formating of Author/Editor lists.
+ \_cod -----------------------------
+
+\_def\_firstauthorformat{%
+ \_upper{\_Lastname}\_bprintc\_Firstname{, *}\_bprintc\_Von{ *}\_bprintc\_Junior{, *}%
+}
+\_def\_otherauthorformat{%
+ \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_upper{\_Lastname}\_bprintc\_Junior{, *}%
+}
+\_def\_commonname{%
+ \_ifnum\_NameCount=1
+ \_firstauthorformat
+ \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi
+ \_else
+ \_ifnum0\_namecount=\_NameCount
+ \_ifx\_maybeetal\_empty \_bibconjunctionand\_else , \_fi
+ \_else , \_fi
+ \_otherauthorformat
+ \_fi
+}
+\_def\_authorname{%
+ \_ifnum\_NameCount>0\_namecount\_relax\_else \_commonname \_fi
+ \_ifnum\_NameCount=0\_namecount\_relax \_maybeetal \_fi
+}
+\_let\_editorname=\_authorname
+
+\_def\_prepareauedoptions#1{%
+ \_def\_mabyetal{}\_csname lb@abbreviatefalse\_endcsname
+ \_biboptionvalue{#1max}\_authormax
+ \_biboptionvalue{#1min}\_authormin
+ \_biboptionvalue{#1pre}\_authorpre
+ \_biboptionvalue{#1print}\_authorprint
+ \_isbiboption{#1etal}\_iftrue \_def\_maybeetal{\_Mtext{bib.etal}}\_fi
+ \_biboptionvalue{#1trim}\_autrim
+ \_let\_namecountraw=\_namecount
+ \_ifx\_authormax\_empty \_else
+ \_ifnum 0\_authormax<0\_namecount
+ \_edef\_namecount{\_ifx\_authormin\_empty\_authormax\_else\_authormin\_fi}%
+ \_def\_maybeetal{\_Mtext{bib.etal}}%
+ \_fi\_fi
+ \_ifx\_autrim\_empty \_def\_autrim{10000}\_fi
+ \_ifnum\_autrim=0 \_def\_autrim{10000}\_fi
+ \_ifnum 0\_namecount<\_autrim\_relax \_else \_AbbreviateFirstname \_fi
+}
+\_def\_maybeetal{}
+
+\_ifx\upper\_undefined
+ \_ifx\caps \_undefined \_def\upper{\_uppercase\_ea}\_else
+ \_def\upper#1{{\caps\_rm #1}}\_fi
+\_fi
+\_let\_upper=\upper
+
+ \_doc -----------------------------
+ Preparing bib-mark (used when `\nonumcitations` is set).
+ \_cod -----------------------------
+
+\_def\_setbibmark{%
+ \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi
+ \_RetrieveFieldIn{bibmark}\_tmp
+ \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi
+ \_bibmark=\_ea{\_tmp}%
+}
+% Multilinguals: English Czech Slovak
+
+\_mtdef{bib.and} {, and } { a } {}
+\_mtdef{bib.etal} { et al.} { a~kol.} {}
+\_mtdef{bib.edition} { ed.} { vyd.} {}
+\_mtdef{bib.bachthesis} {Bachelor's Thesis} {Bakalářská práce} {Bakalárska práca}
+\_mtdef{bib.masthesis} {Master's Thesis} {Diplomová práce} {Diplomová práca}
+\_mtdef{bib.phdthesis} {Ph.D. Thesis} {Disertační práce} {Dizertačná práca}
+\_mtdef{bib.available} {Available from } {Dostupné na } {}
+\_mtdef{bib.availablealso} {Available also from } {Dostupné též na } {Dotupné tiež na }
+\_mtdef{bib.citedate} {cit.~} {vid.~} {}
+\_mtdef{bib.volume} {Vol.~} {ročník~} {}
+\_mtdef{bib.number} {No.~} {č.~} {}
+\_mtdef{bib.prepages} {pp.~} {s.~} {}
+\_mtdef{bib.postpages} {~p.} {~s.} {}
+\_mtdef{bib.editor} {,~ed.} {,~editor} {}
+\_mtdef{bib.editors} {,~eds.} {,~editoři} {,~editori}
+
+\_def\_bibconjunctionand{\_Mtext{bib.and}}
+\_def\_preurl{\_Mtext{bib.available}}
+\_let\_predoi=\_preurl
+\_def\_postedition{\_mtext{bib.edition}}
+\_def\_Inclause{In:~}
+\_def\_prevolume{\_mtext{bib.volume}}
+\_def\_prenumber{\_mtext{bib.number}}
+\_def\_prepages{\_mtext{bib.prepages}}
+\_def\_posteditor{\_ifnum0\_namecountraw>1 \_Mtext{bib.editors}\_else\_Mtext{bib.editor}\_fi}
+
+\_chardef\_documentlanguage=\_language
+\_def\_Mtext#1{\_csname _mt:#1:\_csname _lan:\_the\_documentlanguage\_endcsname\_endcsname}
+
+\_CreateField {lang}
+\_def\_setlang#1{\_ifx#1\_empty \_else
+ \_ea \_ifx \_csname _#1Patt\_endcsname \_relax
+ \_opwarning{The language "#1" used in .bib file is unknown}
+ \_else \_language=\_csname _#1Patt\_endcsname
+ \_fi\_fi
+}
+
+ \_doc -----------------------------
+ Non-standard fieldnames.
+ \_cod -----------------------------
+
+\_CreateField {ednote}
+\_CreateField {citedate}
+\_CreateField {numbering}
+\_CreateField {isbn}
+\_CreateField {issn}
+\_CreateField {doi}
+\_CreateField {url}
+\_CreateField {bibmark}
+
+ \_doc -----------------------------
+ Sorting.
+ \_cod -----------------------------
+
+\_SortingOrder{name,year}{lfvj}
+\_SpecialSort {key}
+
+ \_doc -----------------------------
+ Supporting macros.
+ \_cod -----------------------------
+
+\_def\_bibwarninga{\_bibwarning}
+\_def\_bibwarningb{\_bibwarning}
+
+\_def\_docitedate #1/#2/#3/#4\_relax{[\_Mtext{bib.citedate}%
+ \_if^#2^#1\_else
+ \_if^#3^#1/#2\_else \_docitedateA{#1}{#2}{#3}%
+ \_fi\_fi ]%
+}
+\_def\_docitedateA#1#2#3{%
+ \_ifnum\_documentlanguage=\_csPatt \_docitedateCS{#1}{#2}{#3}%
+ \_else \_ifnum\_documentlanguage=\_skPatt \_docitedateSK{#1}{#2}{#3}%
+ \_else \_docitedateEN{#1}{#2}{#3}%
+ \_fi\_fi
+}
+\_def\_docitedateEN#1#2#3{#1-#2-#3}
+\_def\_docitedateCS#1#2#3{\_hbox{\_tmpnum=#3 \_the\_tmpnum. \_tmpnum=#2 \_the\_tmpnum. #1}}
+\_let\_docitedateSK=\_docitedateCS
+
+\_def\_doyear#1{
+ \_biboptionvalue{yearprint}\_yearprint
+ \_ifx\_yearprint\_empty#1\_else\_def\YEAR{#1}\_yearprint\_fi
+}
+\_def\_preparenumbering{%
+ \_def\VOL{\_RetrieveField{volume}}%
+ \_def\NO{\_RetrieveField{number}}%
+ \_def\PP{\_RetrieveField{pages}}%
+}
+\_def\_prepareednote{%
+ \_def\EDN{\_RetrieveField{edition}}%
+ \_def\ADDR{\_RetrieveField{address}}%
+ \_def\PUBL{\_RetrieveField{publisher}}%
+ \_def\YEAR{\_RetrieveField{year}}%
+ \_def\AU{\_bprintb[!author]{\_doauthor0{####1}}{}}%
+ \_def\ED{\_bprintb[!editor]{\_doeditor0{####1}}{}}%
+ \_preparenumbering
+}
+\_def\_doedition#1{%
+ \_biboptionvalue{editionprint}\_editionprint
+ \_ifx\_editionprint\_empty#1\_postedition\_else\_def\ED{#1}\_editionprint\_fi
+}
+\_def\_doauthor#1#2{\_prepareauedoptions{au}\_let\_iseditorlist=\_undefined
+ \_if1#1\_def\AU{#2}\_else\_let\_authorprint=\_empty\_fi
+ \_ifx\_authorprint\_empty #2\_else \_authorprint\_fi
+}
+\_def\_doeditor#1#2{\_prepareauedoptions{ed}\_let\_firstauthorformat=\_otherauthorformat
+ \_if1#1\_def\ED{#2}\_else\_let\_authorprint=\_empty\_fi
+ \_ifx\_authorprint\_empty #2\_posteditor\_else \_authorprint\_fi
+}
+
+ \_doc -----------------------------
+ Entry types.
+ \_cod -----------------------------
+
+\_sdef{_print:BEGIN}{%
+ \_readbiboptions
+ \_biboptionvalue{titlepost}\_titlepost
+ \_isbiboption{unpublished}\_iftrue \_let\_bibwarninga=\_relax \_let\_bibwarningb=\_relax \_fi
+ \_isbiboption{nowarn}\_iftrue \_let\_bibwarning=\_relax \_fi
+ \_isbiboption{urlalso}\_iftrue \_def\_preurl{\_Mtext{bib.availablealso}}\_fi
+ \_RetrieveFieldIn{lang}\_langentry \_setlang\_langentry
+}
+\_sdef{_print:END}{%
+ \_bprinta [note] {*.}{}%
+ \_setbibmark
+}
+\_def\_bookgeneric#1{%
+ \_bprinta [howpublished] {[*].\ }{}%
+ \_bprintb [edition] {\_doedition{##1}\.\ }{}%
+ \_bprinta [ednote] {*.\ }{}%
+ \_bprinta [address] {*\_bprintv[publisher]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarninga}%
+ \_bprinta [publisher] {*\_bprintv[year]{,}{.}\ }{\_bibwarninga}%
+ \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{\_bprintv[numbering]{.}{}}{.}\ }%
+ {\_bibwarning}%
+ \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ }{}%
+ \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}%
+ #1%
+ \_bprinta [series] {*.\ }{}%
+ \_bprinta [isbn] {ISBN~*.\ }{\_bibwarningb}%
+ \_bprinta [issn] {ISSN~*.\ }{}%
+ \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:book}{%
+ \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }%
+ {\_bibwarning}%
+ \_bookgeneric{}%
+}
+\_sdef{_print:article}{%
+ \_biboptionvalue{journalpost}\_journalpost
+ \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}%
+ \_bprinta [title] {*.\ \_bprintc\_titlepost{*.\ }}{\_bibwarning}%
+ \_bprintb [journal] {{\_em##1}\_bprintc\_journalpost{\.\ *}\_bprintv[howpublished]{}{\.}\ }%
+ {\_bibwarninga}%
+ \_bprinta [howpublished] {[*].\ }{}%
+ \_bprinta [address] {*\_bprintb[publisher]{:}{,}\ }{}%
+ \_bprinta [publisher] {*, }{}%
+ \_bprinta [month] {*, }{}%
+ \_bprintb [year] {\_doyear{##1}\_bprintv[volume,number,pages]{,}{\.}\ }{}%
+ \_bprinta [numbering] {\_preparenumbering*\_bprintv[citedate]{}{\.}\ }
+ {\_bprinta [volume] {\_prevolume*\_bprintv[number,pages]{,}{\.}\ }{}%
+ \_bprinta [number] {\_prenumber*\_bprintv[pages]{,}{\.}\ }{}%
+ \_bprintb [pages] {\_prepages\_hbox{##1}\_bprintv[citedate]{}{\.}\ }%
+ {\_bibwarninga}}%
+ \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}%
+ \_bprinta [issn] {ISSN~*.\ }{}%
+ \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:inbook}{%
+ \_let\_bibwarningb=\_relax
+ \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}%
+ \_bprinta [title] {*.\ }{\_bibwarning}%
+ \_Inclause
+ \_bprintb [!editor] {\_doeditor1{##1}\.\ }{}%
+ \_bprintb [booktitle] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }%
+ {\_bibwarning}%
+ \_bookgeneric{\_bprintb [pages] {\_prepages\_hbox{##1}. }{}}%
+}
+\_slet{_print:inproceedings}{_print:inbook}
+\_slet{_print:conference}{_print:inbook}
+
+\_sdef{_print:thesis}{%
+ \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }%
+ {\_bibwarning}%
+ \_bprinta [howpublished] {[*].\ }{}%
+ \_bprinta [address] {*\_bprintv[school]{:}{\_bprintv[year]{,}{.}}\ }{\_bibwarning}%
+ \_bprinta [school] {*\_bprintv[year]{,}{.}\ }{\_bibwarning}%
+ \_bprinta [month] {*, }{}%
+ \_bprintb [year] {\_doyear{##1}\_bprintv[citedate]{}{.}\ }{\_bibwarninga}%
+ \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}%
+ \_bprinta [type] {*\_bprintv[ednote]{,}{.}\ }%
+ {\_ifx\_thesistype\_undefined\_bibwarning
+ \_else\_thesistype\_bprintv[ednote]{,}{.}\ \_fi}%
+ \_bprinta [ednote] {*.\ }{}%
+ \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:phdthesis}{\_def\_thesistype{\_Mtext{bib.phdthesis}}\_cs{_print:thesis}}
+\_sdef{_print:mastershesis}{\_def\_thesistype{\_Mtext{bib.masthesis}}\_cs{_print:thesis}}
+\_sdef{_print:bachelorsthesis}{\_def\_thesistype{\_Mtext{bib.bachthesis}}\_cs{_print:thesis}}
+
+\_sdef{_print:generic}{%
+ \_bprintb [!author] {\_doauthor1{##1}\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\_bprintc\_titlepost{\.\ *}\_bprintv[howpublished]{}{\.}\ }%
+ {\_bibwarning}%
+ \_bprinta [howpublished] {[*].\ }{}%
+ \_bprinta [ednote] {\_prepareednote*\_bprintv[citedate]{}{.}\ }{\_bibwarning}%
+ \_bprinta [year] {}{\_bibwarning}%
+ \_bprinta [citedate] {\_docitedate*///\_relax.\ }{}%
+ \_bprintb [doi] {\_predoi DOI \_ulink[http://dx.doi.org/##1]{##1}.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_slet{_print:booklet}{_print:generic}
+\_slet{_print:incolleciton}{_print:generic}
+\_slet{_print:manual}{_print:generic}
+\_slet{_print:proceedings}{_print:generic}
+\_slet{_print:techreport}{_print:generic}
+\_slet{_print:unpublished}{_print:generic}
+
+\_sdef{_print:misc}{\_let\_bibwarning=\_relax \_cs{_print:generic}}
+
+\_endcode
+
+
+This is the iso690 bibliographic style used by \OpTeX/.
+
+See `op-example.bib` for an example of the `.bib` input. You can try it by:
+
+\begtt
+\fontfam[LMfonts]
+\nocite[*]
+\usebib/s (iso690) op-example
+\end
+\endtt
+
+\seccc Common rules in \code{.bib} files
+
+There are entries of type `@FOO{...}` in the `.bib` file. Each entry consists of
+fields in the form `name = "value"`, or `name = {value}`. No matter which form is
+used. If the value is pure numeric then you can say simply `name = value`.
+Warning: the comma after each field value is mandatory! If it is missing then the
+next field is ignored or bad interpreted.
+
+The entry names and field names are case insensitive. If there exist a data
+field no mentioned here then it is simply ignored. You can use it to store
+more information (abstract, for example).
+
+There are \"standard fields" used in ancient bib\TeX/ (author, title, editor, edition,
+etc., see \url{http://en.wikipedia.org/wiki/BibTeX}). The `iso690` style introduces
+several \"non-standard" fields: ednote, numbering, isbn, issn, doi, url,
+citedate, key, bibmark. They are documented here.
+
+Moreover, there are two optional special fields:
+
+\begitems
+* lang = language of the entry. The hyphenation plus autogenerated phrases and
+ abbreviations will be typeset by this language.
+* option = options by which you can control special printing of vairous fields.
+\enditems
+
+There can be only one option field per each entry with (may be) more options
+separated by spaces. You can declare the global option(s) in your document
+applied for each entry by `\biboptions={...}`.
+
+
+\seccc The author field
+
+All names in the author list have to be separated by \"\code{ and }".
+Each author can be written by various formats (the `von` part is typically missing):
+
+\begtt
+Firstname(s) von Lastname
+or
+von Lastname, Firstname(s)
+or
+von Lastname, After, Firstname(s)
+\endtt
+Only the Lastname part is mandatory. Examples:
+\begtt
+Petr Olšák
+or
+Olšák, Petr
+
+Leonardo Piero da Vinci
+or
+da Vinci, Leonardo Piero
+or
+da Vinci, painter, Leonardo Piero
+\endtt
+The separator \"\code{ and }" between authors
+will be converted to comma during
+printing, but between semifinal and final author the word \"and" (or something
+different depending on current language) is printed.
+
+The first author is printed in reverse order: \"LASTNAME, Firstname(s) von,
+After" and the others author are printed in normal order: \"Firstname(s)
+von LASTNAME, After". This feature follows the ISO 690 norm. The Lastname
+is capitalized using uppercase letters. But if the `\caps` font modifier is defined,
+then it is used and printed `{\caps\_rm Lastname}`.
+
+You can specify the option `aumax:<number>`. The `<number>` denotes the
+maximum authors to be printed. The rest of authors are ignored and the
+`et~al.` is appended to the list of printed authors. This text is
+printed only if the `aumax` value is less than the real number of authors.
+If you have the same number of authors in the .bib file as you need to print
+but you want to append `et~al.` then you can use `auetal` option.
+
+There is an `aumin:<number>` option which denotes the definitive number of
+printed authors if the author list is not fully printed due to `aumax`.
+If `aumin` is unused then `aumax` authors is printed in such case.
+
+All authors are printed if `aumax:<number>` option isn't given.
+There is no internal limit. But you can set the global options in
+your document by setting the `\biboptions` tokens list. For example:
+
+\begtt
+\biboptions={aumax:7 aumin:1}
+% if there is 8 or more authors then only first author is printed.
+\entdd
+
+Examples:
+\begtt
+author = "John Green and Bob Brown and Alice Black",
+\endtt
+output: GREEN, John, Bob BROWN, and Alice BLACK.
+
+\begtt
+author = "John Green and Bob Brown and Alice Black",
+option = "aumax:1",
+\endtt
+output: GREEN, John~et~al.
+
+\begtt
+author = "John Green and Bob Brown and Alice Black",
+option = "aumax:2",
+\endtt
+output: GREEN, John, Bob BROWN~et~al.
+
+\begtt
+author = "John Green and Bob Brown and Alice Black",
+option = "aumax:3",
+\endtt
+output: GREEN, John, Bob BROWN, and Alice BLACK.
+
+\begtt
+author = "John Green and Bob Brown and Alice Black",
+option = "auetal",
+\endtt
+output: GREEN, John, Bob BROWN, Alice BLACK~et~al.
+
+If you need to add a text before or after authors list, you can use
+the `auprint:{<value>}` option. The <value> will be printed instead of the
+authors list. The <value> can include `\AU` macro which expands to the authors
+list. Example:
+
+\begtt
+author = "Robert Calbraith",
+option = "auprint:{\AU\space [pseudonym of J. K. Rowling]}",
+\endtt
+output: CALBRAITH Robert [pseudonym of J. K. Rowling].
+
+You can use the `autrim:<number>` option. All Firstnames of all authors
+are trimmed (i. e. reduced to initials) iff the number of authors in the
+author field is greater than or equal to `<number>`. There is an exception:
+`autrim:0` means that no Firstnames are trimmed. This is default behavior.
+Another example: `autrim:1` means that all Firstnames are trimmed.
+
+\begtt
+author = "John Green and Bob Brown and Alice Black",
+option = "auetal autrim:1",
+\endtt
+output: GREEN, J., B. BROWN, A. BLACK~et~al.
+
+If you need to write a team name or institution instead authors, replace all
+spaces by `\ ` in this name. Such text is interpreted as Lastname. You
+can add the secondary name (interpreted as Firstname) after comma. Example:
+
+\begtt
+ author = "Czech\ Technical\ University\ in\ Prague,
+ Faculty\ of\ Electrical\ Engeneering",
+\endtt
+output: CZECH TECHNICAL UNIVERSITY IN PRAGUE, Faculty of Electrical Engeneering.
+
+
+\seccc The editor field
+
+The editor field is used for list of the authors of the collection. The
+analogous rules as in author field are used here. It means that the
+authors are separated by \"\code{ and }", the Firstnames, Lastnames etc. are
+interpreted and you can use the options `edmax:<number>`, `edmin:<number>`,
+`edetal`, `edtrim:<number>` and `edprint:{<value>}` (with `\ED` macro).
+Example:
+\begtt
+editor = "Jan Tomek and Petr Karas",
+option = "edprint:{\ED, editors.} edtrim:1",
+\endtt
+Output: J. TOMEK and P. KARAS, editors.
+
+If `edprint` option is not set then `{\ED, eds.}` or `{\ED, ed.}` is used
+depending on the entry language and on the singular or plural of
+the editor(s).
+
+
+\seccc The ednote field
+
+The ednote field is used as the secondary authors and more editional info. The
+value is read as raw data without any interpretation of Lastname, Firstname
+etc.
+\begtt
+ednote = "Illustrations by Robert \upper{Agarwal}, edited by Tom \upper{Nowak}",
+\endtt
+output: Illustrations by Robert AGARWAL, edited by Tom NOWAK.
+
+The `\upper` command have to be used for Lastnames in ednote field.
+
+
+\seccc The title field
+
+This is the title of the work. It will be printed (in common entry types) by
+italics. The ISO 690 norm declares, that the title plus optional subtitle
+are in italics and they are separated by colon. Next, the optional secondary
+title have to be printed in upright font. This can be added by
+`titlepost:{<value>}`. Example:
+
+\begtt
+title = "The Simple Title of The Work",
+or
+title = "Main Title: Subtitle",
+or
+title = "Main Title: Subtitle",
+option = "titlepost:{Secondary title}",
+\endtt
+The output of the last example:
+{\it Main Title: Subtitle}. Secondary title.
+
+
+\seccc The edition field
+
+This field is used only for second or more edition of cited work. Write
+only the number without the word "edition". The shortcut "ed." (or something
+else depending on current language) is added automatically. Examples:
+
+\begtt
+edition = "Second",
+edition = "2nd",
+edition = "2$^{\rm nd}$",
+edition = "2.",
+\endtt
+Output of the last example: 2. ed.
+
+\begtt
+edition = "2."
+lang = "cs",
+\endtt
+Output: 2. vyd.
+
+Note, that the example `edition = "Second"` may cause problems. If you are
+using language "cs" then the output is bad: Second vyd.
+But you can use `editionprint:{<value>}` option. The the <value> is printed
+instead of edition field and shortcut. The edition field must be set. Example:
+
+\begtt
+edition = "whatever",
+option = "editionprint:{Second full revised edition}",
+\endtt
+Output: Second full revised edition.
+
+You can use `\EDN` macro in `editionprint` value. This macro is expanded
+to the edition value. Example:
+
+\begtt
+edition = "Second",
+option = "editionprint:{\EDN\space full revised edition}",
+or
+edition = "Second full revised edition",
+option = "editionprint:{\EDN}",
+\endtt
+
+
+\seccc The address, publisher, year fields
+
+This is an anachronism from ancient Bib\TeX/ (unfortunately no exclusive) that
+the address field includes only the city of the publisher residence. No more
+data are here. The publisher field includes the name of the publisher.
+
+\begtt
+address = "Berlin",
+publisher = "Springer Verlag",
+year = 2012,
+\endtt
+Output: Berlin: Springer Verlag, 2012.
+
+Note, that the year needn't to be inserted into quotes because it is pure
+numeric.
+
+The letter a, b etc. are appended to the year automatically, if two or more
+subsequent entries in the bibliography list are not distinct by the first
+author and year fields. If you needn't this feature, you can use the
+`noautoletters` option.
+
+You can use "yearprint:{<value>}" option. If it is set then the <value>
+is used for printing year instead the real field value. The reason: year is
+sort sensitive, may be you need to print something else than only sorting key.
+Example:
+
+\begtt
+year = 2000,
+option = "yearpint:{© 2000}",
+\endtt
+Output: © 2000, sorted by: 2000.
+
+\begtt
+year = "2012a",
+option = "yearprint:{2012}",
+\endtt
+Output: 2012, sorted by: 2012a.
+
+The address, publisher and year are typically mandatory fields. If they are
+missing then the warning occurs. But you can set `unpublished`
+option. Then this warning is suppressed. There is no difference in the
+printed output.
+
+
+\seccc The url field
+
+Use it without `\url` macro, but with `http://` prefix. Example:
+
+\begtt
+url = "http://petr.olsak.net/opmac.html",
+\endtt
+
+The ISO 690 norm recommends to add the text \"Available from" (or
+something else if different current language is used) before URL.
+It means, that the output of previous example is:
+
+Available from \url{http://petr.olsak.net/opmac.html}.
+
+If the `cs` language is the current one than the output is:
+
+Dostupné z: \url{http://petr.olsak.net/opmac.html}.
+
+If the `urlalso` option is used, then the added text has the form
+\"Available also from" or \"Dostupné také z:" (if `cs` language is
+current).
+
+
+\seccc The citedate field
+
+This is the citation date. The field must be in the form year/month/day. It
+means, that the two slashes must be written here. The output depends on the
+current language. Example:
+
+\begtt
+citedate = "2004/05/21",
+\endtt
+Output when `en` is current: [cit. 2004-05-21].\nl
+Output when `cs` is current: [vid. 21.~5.~2004].
+
+
+\seccc The howpublished field
+
+This declares the available medium for cited document if it is not in printed
+form. Alternatives: online, CD, DVD, etc. Example:
+
+\begtt
+howpublished = "online",
+\endtt
+Output: [online].
+
+
+\seccc The volume, number, pages and numbering fields
+
+The volume is the \"big mark" of the journal issue and the number is the
+\"small mark" of the journal issue and pages includes the page range of
+the cited article in the journal. The volume is prefixed by Vol.~,
+the number by No.~ and the pages by pp.~. But these prefixes depends on the
+language of the entry.
+
+Example:
+
+\begtt
+volume = 31,
+number = 3,
+pages = "37--42",
+\endtt
+Output: Vol.~31, No.~3, pp.~37--42.
+
+\begtt
+volume = 31,
+number = 3,
+pages = "37--42",
+lang = "cs",
+\endtt
+Output: ročník~31, č.~3, s.~37--42.
+
+If you disagree with the default prefixes, you can use the numbering field.
+When it is set then it is used instead of volume, number, pages fields
+and instead of any mentioned prefixes. The numbering can include macros
+`\VOL`, `\NO`, `\PP`, which are expanded to the respective values of fields. Example:
+
+\begtt
+volume = 31,
+number = 3,
+pages = "37--42"
+numbering = "Issue~\VOL/\NO, pages~\PP",
+\endtt
+Output: Issue~31/3, pages~37--42
+
+Note: The volume, numbers and pages fields are printed without numbering
+filed only in the `@ARTICLE` entry. It means, that if you need to visible them
+in the `@INBOOK`, `@INPROCEEDINGS` etc. entries, then you must to use numbering field.
+
+
+\seccc Common notes about entries
+
+The order of the fields in the entry is irrelevant. We use the printed order
+in this manual. The exclamation mark (!) denotes the mandatory field. If
+such field is missing then the warning occurs during processing.
+
+If the `unpublished` option is set then the fields address, publisher, year,
+isbn and pages are not mandatory. If the `nowarn` option is set then no
+warnings about missing mandatory fields occurs.
+
+If the field is used but not mentioned in the entry documentation below then
+it is silently ignored.
+
+\secccc The `@BOOK` entry
+
+This is used for book-like entries.
+
+Fields: author(!), title(!), howpublished, edition, ednote, address(!),
+publisher(!), year(!), citedate, series, isbn(!), doi, url, note.
+
+The ednote field here means the secondary authors (illustrator, cover design
+etc.).
+
+\secccc The `@ARTICLE` entry
+
+This is used for articles published in a journal.
+
+Fields: author(!), title(!), journal(!), howpublished, address, publisher,
+month, year, [numbering or volume, number, pages(!)], citedate, issn,
+doi, url, note.
+
+If the numbering is used then it is used instead volume, number, pages.
+
+
+\secccc The `@INBOOK` entry
+
+This is used for the part of a book.
+
+Fields: author(!), title(!), booktitle(!), howpublished, edition, ednote,
+address(!), publisher(!), year(!), numbering, citedate, series, isbn or
+issn, doi, url, note.
+
+The author field is used for author(s) of the part, the editor field
+includes author(s) or editor(s) of whole document. The pages field specifies
+the page range of the part. The series field can include more information
+about the part (chapter numbers etc.).
+
+The `@INPROCEEDINGS` and `@CONFERENCE` entries are equivalent to `@INBOOK` entry.
+
+\secccc The `@THESIS` entry
+
+This is used for student's thesis.
+
+Fields: author(!), title(!), howpublished, address(!), school(!),
+month, year(!), citedate, type(!), ednote, doi, url, note.
+
+The type field must include the text \"Master's Thesis" or something
+similar (depending on the language of the outer document).
+
+There are nearly equivalent entries: `@BACHELORSTHESIS`, `@MASTERSTHESIS` and
+`@PHDTHESIS`. These entries set the type field to an appropriate value
+automatically. The type field is optional in such case. If it is used then
+it has a precedence before default setting.
+
+\secccc The @MISC entry
+
+It is intended for various usage.
+
+Fields: author, title, howpublished, ednote, citedate, doi, url, note.
+
+You can use `\AU`, `\ED`, `\EDN`, `\VOL`, `\NO`, `\PP`, `\ADDR`, `\PUBL`,
+`\YEAR` macros in ednote field. These macros print authors list, editors list,
+edition, volume, number, pages, address, publisher and year field values
+respectively.
+
+The reason of this entry is to give to you the possibility to set the format of
+entry by your own decision. The most of data are concentrated in ednote
+field.
+
+\secccc The `@BOOKLET`, `@INCOLLECION`, `@MANUAL`, `@PROCEEDINGS`, `@TECHREPORT`, `@UNPUBLISHED` entries
+
+These entries are equivalent to `@MICS` entry because we need to save the
+simplicity. They are implemented only for (almost) backward compatibility
+with the ancient Bib\TeX/. But the ednote is mandatory field here, so you
+cannot use these entries from the old databases without warnings and without
+some additional work with the `.bib` file.
+
+\seccc The cite-marks (bibmark) used when \code{\\nonumcitations} is set
+
+When `\nonumcitations` is set then `\cite` prints text orientes
+bib-marks instead numbers. This style file autogenerates these marks in the
+form \"Lastname of the first author, comma, space, the year" if bibmark field
+isn't declared. If you need to set an exception from this common format,
+then you can use bibmark field.
+
+The OPmac trick \url{http://petr.olsak.net/opmac-tricks-e.html\#bibmark}
+describes how to redefine the algorithm for bibmark auto-generating when you
+need the short form of the type [Au13].
+
+
+\seccc Sorting
+
+If `\usebib/c` is used then entries are sorted by citation order in the text.
+If `\usebib/s` is used then entries are sorted by \"Lastname, Firstname(s)" of
+the first author and if more entries have this value equal, then the year is
+used (from older to newer). This feature follows the recommendation of the
+ISO 690 norm.
+
+If you have the same authors and the same year, you can control the sorting
+by setting years as 2013, 2013a, 2013b, etc. You can print something
+different to the list using `yearprint{<value>}` option, see the section about
+address, publisher and year above. The real value of year field (ie. not
+yearprint value) is also used in the text oriented bib-marks when
+`\nonumcitations` is set.
+
+If you have some problems with name sorting, you can use the hidden field
+`key`, which is used for sorting instead of the \"Lastname Firstname(s)"
+of authors. If the `key` field is unset then the \"Lastname Firstname(s)"
+is used for sorting normally. Example:
+
+\begtt
+author = "Světla Čmejrková",
+key = "Czzmejrkova Svetla",
+\endtt
+
+This entry is now sorted between C and D.
+
+The norm recommends to place the autocitations to the top of the list of
+references. You can do this by setting `key = "@"`, to each entry with your
+name because the `@` character is sorted before `A`.
+
+
+\seccc Languages
+
+There is the language of the outer document and the languages of each entry.
+The ISO 690 norm recommends that the technical notes (the prefix before URL,
+the media type, the \"and" conjunction between semifinal and final author)
+may be printed in the language of the outer document. The data of the entry
+have to be printed in the entry language (edition ed./vyd., Vol./ročník,
+No./č. etc.). Finally there are the phrases independent on the language
+(for example In:). Unfortunately, the bib\TeX/ supposes that the entry data
+are not fully included in value parts of the fields (see edition, volume
+etc. fields) so the automaton have to add some text during processing.
+But what language have to be chosen?
+
+The current value of the `\language` register at the start of the `.bib`
+processing is decided as the language of the outer document. This language
+is used for technical notes regardless of the entry language. Each entry can
+have the lang field with the two-letter mark of the entry language. This
+language is used for ed./vyd., vol./ročník etc. and it is used for
+hyphenation too. If the entry language is not set then the outer document
+language is used.
+
+If the outer document language is known before creating of the `.bib` file, you
+can store some language-dependent phrases into it. On the other hand, if the
+main document language is unknown, you can use the `\Mtext` macro to
+create the text multilingual. Example:
+
+\begtt
+howpublished = "\Mtext{blue-ray}"
+\endtt
+
+Now, you can set the variants of blue-ray into your macros:
+
+\begtt
+\mtdef {blue-ray} {Blue-ray disc} {Blue-ray disk} {}
+\endtt
+
+
+\seccc Tips for using more languages
+
+This style prefers English, Czech and Slovak languages. However, you can add
+more languages. Use the shortcuts of language names (`de` and `pl` in the
+example below). You can define all phrases for your language:
+\begtt
+\def\mtdefx#1#2#3{\sdef{_mt:#1:de}{#2}\sdef{_mt:#1:pl}{#3}}
+
+ % German % Polish
+\mtdefx {bib.and} { und } { a }
+\mtdefx {bib.phdthesis} {Ph.D. Dissertation} {Praca doktorska}
+...
+\endtt
+See more about language phrases in the \ref[langphrases] section.
+
+
+\seccc Summary of non-standard fields
+
+This style uses the following fields unkown by bib\TeX/:
+
+\begtt
+option ... options separated by spaces
+lang ... the language two-letter code of one entry
+ednote ... editional info (secondary authors etc.) or
+ global data in @MISC-like entries
+citedate ... the date of the citation in year/month/day format
+numbering ... format for volume, number, pages
+isbn ... ISBN
+issn ... ISSN
+doi ... DOI
+url ... URL
+\endtt
+
+
+\seccc Summary of options
+
+\begtt
+aumax:<number> ... maximum number of printed authors
+aumin:<number> ... number of printed authors if aumax exceedes
+autrim:<number> ... full Firstnames iff number of authors are less than this
+auprint:{<value>} ... text instead authors list (\AU macro may be used)
+edmax, edmin, edtrim ... similar as above for editors list
+edprint:{<value>} ... text instead editors list (\ED macro may be used)
+titlepost:{<value>} ... text after title
+yearprint:{<value>} ... text instead real year (\YEAR macro may be used)
+editionprint:{<value>} . text instead real edition (\EDN macro may be used)
+urlalso ... the ``available also from'' is used instead ``available from''
+unpublished ... the publisher etc. fields are not mandatory
+nowarn ... no mandatory fields
+\endtt
+
+Another options in the option field are silently ignored.
diff --git a/macros/luatex/optex/base/bib-simple.opm b/macros/luatex/optex/base/bib-simple.opm
new file mode 100644
index 0000000000..347d90bb14
--- /dev/null
+++ b/macros/luatex/optex/base/bib-simple.opm
@@ -0,0 +1,181 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+% bibliography style (simple), version <2020-03-10>, loaded on demand by \usebib
+
+\_ifx\_optexbibstyle\_undefined \_errmessage
+ {This file can be read by: \_string\usebib/? (simple) bibfiles command only}
+ \_endinput \_fi
+
+% misc:
+
+\_def\_maybedot{\_ifnum\_spacefactor=\_sfcode`\.\_relax\_else.\_fi}
+\_tmpnum=\_sfcode`\. \_advance\_tmpnum by-2 \_sfcode`\.=\_tmpnum
+\_sfcode`\?=\_tmpnum \_sfcode`\!=\_tmpnum
+\_let\.=\_maybedot % prevents from double periods
+
+% Formating of Author/Editor lists:
+
+\_def\_authorname{%
+ \_ifnum\_NameCount>1
+ \_ifnum0\_namecount=\_NameCount \_mtext{bib.and}\_else , \_fi
+ \_else
+ \_ifx\_dobibmark\_undefined \_edef\_dobibmark{\_Lastname}\_fi
+ \_fi
+ \_bprintc\_Firstname{* }\_bprintc\_Von{* }\_Lastname\_bprintc\_Junior{, *}%
+}
+\_let\_editorname=\_authorname
+
+% Preparing bib-mark (used when \nonumcitations is set):
+
+\_def\_setbibmark{%
+ \_ifx\_dobibmark\_undefined \_def\_dobibmark{}\_fi
+ \_RetrieveFieldIn{bibmark}\_tmp
+ \_ifx\_tmp\_empty \_RetrieveFieldIn{year}\_tmp \_edef\_tmp{\_dobibmark, \_tmp}\_fi
+ \_bibmark=\_ea{\_tmp}%
+}
+
+% Multilinguals: English Czech Slovak
+
+\_mtdef{bib.and} {, and } { a } {}
+\_mtdef{bib.edition} {edition} {vydání} {vydanie}
+\_mtdef{bib.masterthesis} {Master's Thesis} {Diplomová práce} {Diplomová práca}
+\_mtdef{bib.phdthesis} {Ph.D. Thesis} {Disertační práce} {Dizertačná práca}
+
+
+\_def\_preurl{\_hfil\_break}
+
+% Non-standard fieldnames:
+
+\_CreateField {isbn}
+\_CreateField {doi}
+\_CreateField {url}
+\_CreateField {bibmark}
+
+% Sorting:
+
+\_SortingOrder{name,year}{lfvj}
+\_SpecialSort {key}
+
+% Entry types:
+
+\_sdef{_print:END}{%
+ \_bprinta [note] {*.}{}%
+ \_setbibmark
+}
+\_sdef{_print:book}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}%
+ \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}%
+ \_bprinta [address] {*: }{\_bibwarning}%
+ \_bprinta [publisher] {*, }{\_bibwarning}%
+ \_bprinta [year] {*.\ }{\_bibwarning}%
+ \_bprinta [isbn] {ISBN~*.\ }{\_bibwarning}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:article}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprinta [title] {*.\ }{\_bibwarning}%
+ \_bprintb [journal] {{\_em##1}.\ }{\_bibwarning}%
+ \_bprinta [year] {*, }{}%
+ \_bprinta [volume] {* }{}%
+ \_bprinta [number] {(*), }{}%
+ \_bprinta [pages] {*.\ }{}%
+ \_bprintb [doi] {DOI~\_ulink[http://dx.doi.org/##1]{##1}.\ }{}%
+}
+\_sdef{_print:inbook}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1.}\ }{\_bibwarning}%
+ In:~%
+ \_bprinta [!editor] {*,~eds.\ }{}%
+ \_bprintb [booktitle] {{\_em##1}.\ }{\_bibwarning}%
+ \_bprinta [address] {*: }{\_bibwarning}%
+ \_bprinta [publisher] {*, }{\_bibwarning}%
+ \_bprinta [year] {*.\ }{\_bibwarning}%
+ \_bprinta [chapter] {*.\ }{%
+ \_bprinta [pages] {*.\ }{}}%
+ \_bprinta [isbn] {ISBN~*.\ }{\_bibwarning}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_slet{_print:inproceedings}{_print:inbook}
+
+\_sdef{_print:incolection}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}.\ }{\_bibwarning}%
+ \_bprinta [crossreff] {In~\_cite[*]. }{%
+ \_bprinta [booktitle] {*. }{\_bibwarning}%
+ \_bprinta [!editor] {*,~eds.\ }{\_bibwarning}%
+ \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{\_bibwarning}%
+ \_bprinta [address] {*: }{\_bibwarning}%
+ \_bprinta [publisher] {*, }{\_bibwarning}%
+ \_bprinta [year] {*.\ }{\_bibwarning}%
+ \_bprinta [pages] {*.\ }{}%
+ \_bprintb [url] {\_preurl\_url{####1}. }{}}%
+}
+\_sdef{_print:conference}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_bprinta [edition] {*~\_mtext{bib.edition}.\ }{}%
+ \_bprinta [address] {*: }{\_bibwarning}%
+ \_bprinta [publisher] {*, }{\_bibwarning}%
+ \_bprinta [year] {*.\ }{\_bibwarning}%
+ \_bprinta [isbn] {ISBN~*.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:phdthesis}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_mtext{bib.phdthesis}, %
+ \_bprinta [school] {*.\ }{}%
+ \_bprinta [address] {*, }{}%
+ \_bprinta [year] {*.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:mastersthesis}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_mtext{bib.masterthesis}, %
+ \_bprinta [school] {*.\ }{}%
+ \_bprinta [address] {*, }{}%
+ \_bprinta [year] {*.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:proceedings}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_bprinta [publisher] {*.\ }{%
+ \_bprinta [organization] {*.\ }{\_bibwarning}}%
+}
+\_sdef{_print:techreport}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_mtext{bib.techreport}.
+ \_bprinta [institution] {*.\ }{}%
+}
+\_sdef{_print:booklet}{%
+ \_bprinta [!author] {*\.\ }{\_bibwarning}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_bprinta [howpublished] {*.\ }{\_bibwarning}%
+}
+\_sdef{_print:manual}{%
+ \_bprinta [!author] {*\.\ }{}%
+ \_bprintb [title] {{\_em##1}\.\ }{\_bibwarning}%
+ \_bprinta [year] {*.\ }{}%
+ \_bprinta [institution] {*.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+\_sdef{_print:misc}{%
+ \_bprinta [!author] {*\.\ }{}%
+ \_bprintb [title] {{\_em##1}\.\ }{}%
+ \_bprinta [howpublished] {*.\ }{}%
+ \_bprinta [institution] {*.\ }{}%
+ \_bprinta [series] {*.\ }{}%
+ \_bprinta [year] {*.\ }{}%
+ \_bprintb [url] {\_preurl\_url{##1}. }{}%
+}
+
+%%% end of the style file
+
+\_endcode
+
+You can copy this file to bib-yourname.opm and modify it by your
+needs...
diff --git a/macros/luatex/optex/base/cite-bib.opm b/macros/luatex/optex/base/cite-bib.opm
new file mode 100644
index 0000000000..44f8dee055
--- /dev/null
+++ b/macros/luatex/optex/base/cite-bib.opm
@@ -0,0 +1,258 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \cite {Cite, Biblioraphy <2020-03-09>} % loaded in format
+
+ \_doc -----------------------------
+ Registers used by `\cite`, `\bib` macros are declared here.
+ The \`\bibnum` counts the bibliography items from one.
+ The \`\bibmark` is used when `\nonumcitations` is set.
+ \_cod -----------------------------
+
+\_newcount\_bibnum % the bibitem counter
+\_newtoks\_bibmark % the bibmark used if \nonumcitations
+\_newcount\_lastcitenum \_lastcitenum=0 % for \shortcitations
+\_public \bibnum \bibmark ;
+
+ \_doc -----------------------------
+ \`\cite` `[<label>,<label>,...,<label>]` manages <labes> using `\_citeA`
+ and prints `[<bib-marks>]` using `\_printsavedcites`.
+ \nl
+ \`\nocite` `[<label>,<label>,...,<label>]` only manages <labels> but prints nothing.
+ \nl
+ \`\rcite` `[<label>,<label>,...,<label>]` behaves like `\cite` but prints
+ <bib-marks> without brackets.
+ \nl
+ \`\ecite` `[<label>]{<text>}` behaves like `\rcite [<label>]` but prints
+ <text> instead <bib-mark>. The <text> is hyperlinked like <bib-marks>
+ when `\cite` or `\rcite` is used.
+ The emptpty internal macro \`\_savedcites` will include the `<bib-marks>` list to
+ be printed. This list is set by `\_citeA` inside group and it is used by
+ `\_printsavedcites` in the same group. Each `\cite`/`\rcite`/`\ecite` macro
+ starts from empty list of <bib-marks> because new group is opened.
+ \_cod -----------------------------
+
+\_def\_cite[#1]{{\_citeA#1,,,[\_printsavedcites]}}
+\_def\_nocite[#1]{{\_citeA#1,,,}}
+\_def\_rcite[#1]{{\_citeA#1,,,\_printsavedcites}}
+\_def\_ecite[#1]{\_bgroup\_citeA#1,,,\_ea\_eciteB\_savedcites;}
+\_def\_eciteB#1,#2;#3{\_if?#1\_relax #3\_else \_ilink[cite:#1]{#3}\_fi\_egroup}
+\_def\_savedcites{}
+
+\_public \cite \nocite \rcite \ecite ;
+
+ \_doc -----------------------------
+ `<bib-marks>` may be numbers or a special text related to cited bib-entry.
+ It depends on \`\nonumcitations` and on used bib-style. The mapping from
+ <label> to <bib-mark> is done when `\bib` or `\usebib` is processed.
+ These macros store the information to
+ \`\_Xbib``{<label>}{<number>}{<nonumber>}` where <number> and <nonumber> are
+ two variants of <bib-mark> (numbered or text-like). This information is
+ read from `.ref` file and it is saved to macros
+ `\_bib:<label>` and `\_bibm:<number>`. First one includes number and second
+ one includes <nonumber>. The `\_lastbibnum` macro includes last number of
+ bib-entry used in the document. A designer can use it to set appropriate
+ indentation when printing the list of all bib-entries.
+ \_cod -----------------------------
+
+\_def\_Xbib#1#2#3{\_sdef{_bib:#1}{\_bibnn{#2}&}%
+ \_if^#3^\_else\_sdef{_bim:#2}{#3}\_fi\_def\_lastbibnum{#2}}
+
+ \_doc -----------------------------
+ \`\_citeA` `<label>,` processes one label from list of labels given in the
+ parameter of `\cite`, `\nocite`, `\rcite` or `\ecite` macros. It adds the
+ <label> to global list `\_citelist` which will be used by `\usebib` (it
+ must to know what <labels> are used in the document in order to pick-up
+ only relevant bib-entries from the database. Because we want to save
+ space and not to save the same <label> to `\_citelist` twice, we
+ distinguish four cases:
+ \begitems
+ * `<label>` was not declared by \^`\_Xbib` and it is first such <label> in the
+ document: Then `\_bib:<label>` is undefined and we save label using
+ `\_addcitlist`, write warning on the terminal and define
+ `\_bib:<label>` as empty.
+ * `<label>` was not declared by \^`\_Xbib` but it was used previously in the
+ document: Then `\_bib:<label>` is empty and we do nothing (only data to
+ `\_savedcites` are saved).
+ * `<label>` was declared by \^`\_Xbib` and it is first such <label> in the
+ document: Then `\_bin:<label>` includes `\_bibnn{<number>}&` and we
+ test this case by `\if &\_bibnn{<number>}&`. This is true when `\_bibnn{<number>}`
+ expands to empty. The <label> is saved by `\_addcitelist` and
+ `\_bib:<label>` is re-defined directly as <number>.
+ * `<label>` was declared by \^`\_Xbib` and it was used previously in the
+ document. Then we do nothing (only data to `\_savedcites` are saved.
+ \enditems
+ The `\_citeA` macro runs repeatedly over whole list of <labels>.
+ \_cod -----------------------------
+
+\_def\_citeA #1#2,{\_if#1,\_else
+ \_if *#1\_addcitelist{*}\_ea\_skiptorelax \_fi
+ \_ifcsname _bib:#1#2\_endcsname \_else
+ \_addcitelist{#1#2}%
+ \_opwarning{The cite [#1#2] unknown. Try to TeX me again}\_openref
+ \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0
+ \_ea\_gdef \_csname _bib:#1#2\_endcsname {}%
+ \_ea\_skiptorelax \_fi
+ \_ea\_ifx \_csname _bib:#1#2\_endcsname \_empty
+ \_addto\_savedcites{?,}\_def\_sortcitesA{}\_lastcitenum=0
+ \_ea\_skiptorelax \_fi
+ \_def\_bibnn##1{}%
+ \_if &\_csname _bib:#1#2\_endcsname
+ \_def\_bibnn##1##2{##1}%
+ \_addcitelist{#1#2}%
+ \_sxdef{_bib:#1#2}{\_csname _bib:#1#2\_endcsname}%
+ \_fi
+ \_edef\_savedcites{\_savedcites \_csname _bib:#1#2\_endcsname,}%
+ \_relax
+ \_ea\_citeA\_fi
+}
+\_def\_addcitelist#1{\_global\_addto\_citelist{\_citeI[#1]}}
+\_def\_citelist{}
+
+ \_doc -----------------------------
+ The `<bib-marks>` (in numeric or text form) are saved in \^`\_savedcites`
+ macro separated by commas.
+ The \`\_printsavedcites` prints them by normal order or sorted if
+ \`\sortcitations` is specified or condensed if \`\shordcitations` is
+ specified.\nl
+ The `\sortcitations` appends the dummy number 300000 and we suppose that normal
+ numbers of bib-entries are less than this constant.
+ This constant is removed after sorting algorithm.
+ The \`\shortcitations` sets simply `\_lastcitenum=1`.
+ The macros for <bib-marks> printing follows (sorry, without detail
+ documentation). They are documented in `opmac-d.pdf` (but only in Czech).
+ \_cod -----------------------------
+
+\_def\_printsavedcites{\_sortcitesA
+ \_chardef\_tmpb=0 \_ea\_citeB\_savedcites,%
+ \_ifnum\_tmpb>0 \_printdashcite{\_the\_tmpb}\_fi
+}
+\_def\_sortcitesA{}
+\_def\_sortcitations{%
+ \_def\_sortcitesA{\_edef\_savedcites{300000,\_ea}\_ea\_sortcitesB\_savedcites,%
+ \_def\_tmpa####1300000,{\_def\_savedcites{####1}}\_ea\_tmpa\_savedcites}%
+}
+\_def\_sortcitesB #1,{\_if $#1$%
+ \_else
+ \_mathchardef\_tmpa=#1
+ \_edef\_savedcites{\_ea}\_ea\_sortcitesC \_savedcites\_end
+ \_ea\_sortcitesB
+ \_fi
+}
+\_def\_sortcitesC#1,{\_ifnum\_tmpa<#1\_edef\_tmpa{\_the\_tmpa,#1}\_ea\_sortcitesD
+ \_else\_edef\_savedcites{\_savedcites#1,}\_ea\_sortcitesC\_fi}
+\_def\_sortcitesD#1\_end{\_edef\_savedcites{\_savedcites\_tmpa,#1}}
+
+\_def\_citeB#1,{\_if$#1$\_else
+ \_if?#1\_relax??%
+ \_else
+ \_ifnum\_lastcitenum=0 % only comma separated list
+ \_printcite{#1}%
+ \_else
+ \_ifx\_citesep\_empty % first cite item
+ \_lastcitenum=#1\_relax
+ \_printcite{#1}%
+ \_else % next cite item
+ \_advance\_lastcitenum by1
+ \_ifnum\_lastcitenum=#1\_relax % cosecutive cite item
+ \_mathchardef\_tmpb=\_lastcitenum
+ \_else % there is a gap between cite items
+ \_lastcitenum=#1\_relax
+ \_ifnum\_tmpb=0 % previous items were printed
+ \_printcite{#1}%
+ \_else
+ \_printdashcite{\_the\_tmpb}\_printcite{#1}\_chardef\_tmpb=0
+ \_fi\_fi\_fi\_fi\_fi
+ \_ea\_citeB\_fi
+}
+\_def\_shortcitations{\_lastcitenum=1 }
+
+\_def\_printcite#1{\_citesep\_ilink[cite:#1]{\_citelinkA{#1}}\_def\_citesep{,\_hskip.2em\_relax}}
+\_def\_printdashcite#1{\_ifmmode-\_else\_hbox{--}\_fi\_ilink[cite:#1]{\_citelinkA{#1}}}
+\_def\_citesep{}
+
+\_def\_nonumcitations{\_lastcitenum=0\_def\_sortcitesA{}\_def\_etalchar##1{$^{##1}$}%
+ \_def\_citelinkA##1{\_isdefined{_bim:##1}\_iftrue \_csname _bim:##1\_endcsname
+ \_else ##1\_opwarning{\_noexpand\_nonumcitations + empty bibmark. Maybe bad BibTeX style}\_fi}
+}
+\_def\_citelinkA{}
+
+\_public \nonumcitations \sortcitations \shortcitations ;
+
+ \_doc -----------------------------
+ The \`\bib` `[<label>] {<optional bib-mark>}` prints one bib-entry
+ without reading any database. The bib-enty follows after this command.
+ This command counts the used `\bib`s from one by `\bibnum` counter and
+ saves \^`\_Xbib``{<label>}{\_the\_bibnum}{\_the\_bibmark}` into `.ref` file
+ immediately using `\_wbib`. This is the core of creation of mapping from
+ `<labels>` to `<bib-marks>`.
+ \_cod -----------------------------
+
+\_def\_bib[#1]{\_def\_tmp{\_isnextchar={\_bibA[#1]}{\_bibmark={}\_bibB[#1]}}%
+ \_ea\_tmp\_romannumeral-`\.} % ignore optional space
+\_def\_bibA[#1]=#2{\_bibmark={#2}\_bibB[#1]}
+\_def\_bibB[#1]{\_par \_bibskip
+ \_advance\_bibnum by1
+ \_noindent \_def\_tmpb{#1}\_wbib{#1}{\_the\_bibnum}{\_the\_bibmark}%
+ \_printlabel{#1}%
+ \_printbib \_ignorespaces
+}
+\_def\_wbib#1#2#3{\_dest[cite:\_the\_bibnum]%
+ \_ifx\_wref\_wrefrelax\_else \_immediate\_wref\_Xbib{{#1}{#2}{#3}}\_fi}
+
+\_public \bib ;
+
+ \_doc -----------------------------
+ The \`\_printbib` prints the bib-entry itself. You can re-define it if you
+ want different design. The `\_pritbib` starts in horizontal mode after
+ `\noindent` and after the eventual hyperlink destination is inserted.
+ By default, the `\_printbib` sets the indentation
+ by `\hangindent` and prints numeric <bib-marks> by
+ `\llap{[\the\bibnum]}` If `\nonumcitations` then the `\_citelinkA` is not
+ empty and <bib-marks> (`\the\bibnum` nor `\the\bibmark`) are not printed.
+ The text of bib-entry follows. User can create this text manually
+ using `\bib` command or it is generated automatically from a `.bib` database
+ by `\usebib` command.
+
+ The vertical space between bib-entries is controlled by \`\_bibskip` macro.
+ \_cod -----------------------------
+
+\_def \_printbib {\_hangindent=\_iindent
+ \_ifx\_citelinkA\_empty \_hskip\_iindent \_llap{[\_the\_bibnum] }\_fi
+}
+\_def \_bibskip {\_ifnum\_bibnum>0 \_smallskip \_fi}
+
+ \_doc -----------------------------
+ The \`\usebib` command is implemted in `usebib.opm` file which is loaded
+ when the `\usebib` command is firstly used.
+ The `usebib.opm` file loads the `librarian.tex` for scaning the `.bib`
+ files. See the section~\ref[usebib], where the file `usebib.opm` is
+ documented.
+ \_cod -----------------------------
+
+\_def\_usebib{\_par \_opinput {usebib.opm} \_usebib}
+\_def\usebib{\_usebib}
+
+ \_doc -----------------------------
+ The macros above works if all `\cite` (or similar) commands are used
+ before the `\usebib` command is used because `\usebib` prints only such
+ bib-entries their <labels> are saved in the `\_citelist`. But if some
+ `\cite` is used after `\usebib`, then `\usebib` sets `\_addcitelist` to
+ \`\_writeXcite`, so such `\cite` saves the information to the
+ `.ref`file in the format \`\_Xcite``{<label>}`. Such information are copied
+ to `\_citelistB` during reading `.ref` file and `\usebib` concats two
+ lists of <labels> from `\_citelist` and `\_citelistB` and
+ uses this concatenated list.
+ \_cod -----------------------------
+
+\_def\_Xcite#1{\_addto\_citelistB{\_citeI[#1]}}
+\_def\_writeXcite#1{\_openref\_immediate\_wref\_Xcite{{#1}}}
+\_def\_citelistB{}
+
+\_endcode % -------------------------------------
+
+See end of the `usebib.opm` file for documentation about creating style
+files `bib-<style>.opm`.
+
+See end of the `bib-iso690.opm` file for large documentation about `.bib` files
+structure and about usage of `iso690` bib-style.
+
diff --git a/macros/luatex/optex/base/colors.opm b/macros/luatex/optex/base/colors.opm
new file mode 100644
index 0000000000..2745e0fc51
--- /dev/null
+++ b/macros/luatex/optex/base/colors.opm
@@ -0,0 +1,393 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \colordef {Colors <2020-03-18>} % loaded in format
+
+ \_doc -----------------------------
+ We declare internal boolean value \`\_iflocalcolor` ad do
+ \`\localcolor` as default.
+ \_cod -----------------------------
+
+\_newifi \_iflocalcolor \_localcolortrue
+\_protected\_def \_localcolor {\_localcolortrue}
+\_protected\_def \_nolocalcolor {\_localcolorfalse}
+\_public \localcolor \nolocalcolor ;
+
+ \_doc -----------------------------
+ The basic colors in CMYK
+ \`\Blue` \`\Red` \`\Brown` \`\Green` \`\Yellow` \`\Cyan` \`\Magenta`
+ \`\Grey` \`\LightGrey` \`\White` and \`\Black`
+ are declared here.
+ \_cod -----------------------------
+
+\_def\Blue {\_setcmykcolor{1 1 0 0}}
+\_def\Red {\_setcmykcolor{0 1 1 0}}
+\_def\Brown {\_setcmykcolor{0 0.67 0.67 0.5}}
+\_def\Green {\_setcmykcolor{1 0 1 0}}
+\_def\Yellow {\_setcmykcolor{0 0 1 0}}
+\_def\Cyan {\_setcmykcolor{1 0 0 0}}
+\_def\Magenta {\_setcmykcolor{0 1 0 0}}
+\_def\Grey {\_setcmykcolor{0 0 0 0.5}}
+\_def\LightGrey {\_setcmykcolor{0 0 0 0.2}}
+\_def\White {\_setgreycolor{1}}
+\_def\Black {\_setgreycolor{0}}
+
+ \_doc -----------------------------
+ By default, the \`\setcmykcolor` \`\setrgbcolor` and \`\setgreycolor`
+ macros with `{<componetns>}` parameter
+ expand to `\_setcolor{<pdf-primitive>}` using \`\_formatcmyk`
+ or \`\_formatrgb` or \`\_formatgrey` expandable macros.
+ For example `\setrgbcolor{1 0 0}` expands to `\_setcolor{1 0 0 rg 1 0 0 RG}`.\nl
+ We set both types of colors (for lines (`K` or `RG` or `G`) and for fills
+ (`r` or `rg` or `g`) together in the <pdf-primitive> command.
+ This is the reason why the \`\_fillstroke` uses both its parameters.
+ If only fills are needed you can do `\def\_fillstroke#1#2{#1}`.
+ If only strokes are needed you can do `\def\_fillstroke#1#2{#2}`.
+ \_cod -----------------------------
+
+\_def\_setcmykcolor#1{\_setcolor{\_formatcmyk{#1}}}
+\_def\_setrgbcolor#1{\_setcolor{\_formatrgb{#1}}}
+\_def\_setgreycolor#1{\_setcolor{\_formatgrey{#1}}}
+\_def\_formatcmyk#1{\_fillstroke{#1 k}{#1 K}}
+\_def\_formatrgb#1{\_fillstroke{#1 rg}{#1 RG}}
+\_def\_formatgrey#1{\_fillstroke{#1 g}{#1 G}}
+\_def\_fillstroke#1#2{#1 #2}
+\_public \setcmykcolor \setrgbcolor \setgreycolor ;
+
+ \_doc -----------------------------
+ The \`\onlyrgb` declaration redefines \^`\_formatcmyk` in order it expands
+ to its conversion to RGB <pdf-primitive>. This conversion is done by
+ the \^`\_cmyktorgb` macro. Moreover, `\onlyrgb` re-defines three basic RGB
+ colors for RGB color space and re-declares \^`\colordef` as \^`\rgbcolordef`.
+ The \hbox{\`\onlycmyk`} macro does a similar work, it re-defines \^`\_formatrgb`
+ macro. The Grey color space is unchanged and works in both main
+ settings (RGB or CMYK) without collisions.
+ \_cod -----------------------------
+
+\_def\_onlyrgb{\_def\Red{\_setrgbcolor{1 0 0}}%
+ \_def\Green{\_setrgbcolor{0 1 0}}\_def\Blue{\_setrgbcolor{0 0 1}}%
+ \_let\_colordef=\_rgbcolordef
+ \_def\_formatrgb##1{\_fillstroke{##1 rg}{##1 RG}}%
+ \_def\_formatcmyk##1{\_fillstroke{\_cmyktorgb ##1 ; rg}{\_cmyktorgb ##1 ; RG}}}
+\_def\_onlycmyk{\_def\_formatcmyk##1{\_fillstroke{##1 k}{##1 K}}%
+ \_def\_formatrgb##1{\_fillstroke{\_rgbtocmyk ##1 ; k}{\_rgbtocmyk ##1 ; K}}}
+\_public \onlyrgb \onlycmyk ;
+
+ \_doc -----------------------------
+ The \`\_setcolor` macro redefines empty `\_ensureblack` macro (used in
+ output routine for headres and footers) to `\_ensureblackA` which sets
+ Black at the start of its parameter and retunrs to the current color at the
+ end of its parameter. The current color
+ is saved into `\_currentcolor` macro and colorstack is pushed.
+ Finally, the `\_colorstackpop` is initialized by `\aftergroup` if
+ `\localcolor` is declared.
+
+ You can save current color to your macro by `\let\yourmacro=\_currentcolor`
+ and you can return to this color by the command `\_setcmykcolor\yourmacro`.
+ \_cod -----------------------------
+
+\_protected\_def \_setcolor #1{\_global\_let\_ensureblack=\_ensureblackA
+ \_iflocalcolor \_edef\_currentcolor{#1}\_colorstackpush\_currentcolor
+ \_aftergroup\_colorstackpop
+ \_else \_xdef\_currentcolor{#1}\_colorstackset\_currentcolor \_fi
+}
+\_def\_pdfblackcolor{0 g 0 G}
+\_edef\_currentcolor{\_pdfblackcolor}
+\_def\_ensureblackA#1{\_global\_let\_openfnotestack=\_openfnotestackA
+ \_colorstackpush\_pdfblackcolor #1\_colorstackpop}
+
+ \_doc -----------------------------
+ The colorstack is initialized here and the basic macros
+ \`\_colorstackpush`, \`\_colorstackpop` and \`\_colorstackset`
+ are defined here.
+ \_cod -----------------------------
+
+\_mathchardef\_colorstackcnt=0 % Implicit stack usage
+\_def\_colorstackpush#1{\_pdfcolorstack\_colorstackcnt push{#1}}
+\_def\_colorstackpop{\_pdfcolorstack\_colorstackcnt pop}
+\_def\_colorstackset#1{\_pdfcolorstack\_colorstackcnt set{#1}}
+
+ \_doc -----------------------------
+ We need to open a special color stack for footnotes, because footnotes
+ can follow on next pages and their colors are independent on colors
+ used in the main page-body. The \`\_openfnotestack` is defined as
+ \`\_openfnotestackA` when the \^`\_setcolor` is used first.
+ The \`\_fnotestack` is initializedin in `\everyjob` because the
+ initialization is not saved to the format.
+ \_cod -----------------------------
+
+%\_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G} % must be in \everyjob
+\_def \_openfnotestackA {\_pdfcolorstack\_fnotestack current}
+
+ \_doc -----------------------------
+ We use lua codes for RGB to CMYK or CMYK to RGB conversions and for
+ addition color components in the \^`\colordef` macro.
+ The \`\_rgbtocmyk` `<R> <G> <B> ;` expands to `<C> <M> <Y> <K>` and
+ the \`\_cmyktorgb` `<C> <M> <Y> <K> ;` expands to `<R> <G> <B>`.
+ The \`\_colorcrop`, \`\_colordefFin` and \`\_douseK` are auxiliary macros
+ used in the \^`\colordef`. The `\_colorcrop` rescales color components in order
+ to they are in $[0,1]$ interval. The `\colordefFin` expands to the values
+ accumulated in Lua code `color_C`, `color_M`, `color_Y` and `color_K`.
+ The `\_douseK` applies \^`\useK` to CMYK components.
+ \_cod -----------------------------
+
+\_def\_rgbtocmyk #1 #2 #3 ;{%
+ \_ea \_stripzeros \_detokenize \_ea{\_directlua{
+ local kr = math.max(#1,#2,#3)
+ if (kr==0) then
+ tex.print('0. 0. 0. 1 ;')
+ else
+ tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;',
+ (kr-#1)/kr, (kr-#2)/kr, (kr-#3)/kr, 1-kr))
+ end
+}}}
+\_def\_cmyktorgb #1 #2 #3 #4 ;{%
+ \_ea \_stripzeros \_detokenize \_ea{\_directlua{
+ local kr = 1-#4
+ tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f ;',
+ (1-#1)*kr, (1-#2)*kr, (1-#3)*kr))
+}}}
+\_def\_colorcrop{\_directlua{
+ local m=math.max(color_C, color_M, color_Y, color_K)
+ if (m>1) then
+ color_C=color_C/m color_M=color_M/m color_Y=color_Y/m color_K=color_K/m
+ end
+}}
+\_def\_colordefFin{\_colorcrop \_ea \_stripzeros \_detokenize \_ea{\_directlua{
+ tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;',
+ color_C, color_M, color_Y, color_K))
+}}}
+\_def\_douseK{\_colorcrop \_directlua{
+ kr=math.min(color_C, color_M, color_Y)
+ if (kr>=1) then
+ color_C=0 color_M=0 color_Y=0 color_K=1
+ else
+ color_C=(color_C-kr)/(1-kr) color_M=(color_M-kr)/(1-kr)
+ color_Y=(color_Y-kr)/(1-kr) color_K=math.min(color_K+kr,1)
+ end
+}}
+
+ \_doc -----------------------------
+ We have a problem with the `%.3f` directive in Lua code. It prints trailed
+ zeros: (0.300 instead desired 0.3) but we want to save PDF file space. The macro
+ \`\_stripzeros` removes these trailing zeros at expand processor
+ level. So `\_stripzeros 0.300 0.400 0.560 ;` expands to `.3 .4 .56`.
+ \_cod -----------------------------
+
+\_def\_stripzeros #1.#2 #3{\_ifx0#1\_else#1\_fi.\_stripzeroA #2 0 :%
+ \_ifx;#3\_else \_space \_ea\_stripzeros\_ea#3\_fi}
+\_def\_stripzeroA #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else \_stripzeroB#1 0 :\_fi}
+\_def\_stripzeroB #10 #2:{\_ifx^#2^\_stripzeroC#1:\_else #1\_fi}
+\_def\_stripzeroC #1 #2:{#1}
+
+ \_doc -----------------------------
+ The \`\rgbcolordef` and \`\cmykcolordef` use common macro
+ \`\_commoncolordef` with different first four parameters.
+ The `\_commoncolordef <selector><K><R><G><what-define>{<data>}` does the
+ real work. It initializes the Lua variables for summation.
+ It expands <data> in the group where color selectors have
+ special meaning, then it adjusts the resulting string by \^`\replstring`
+ and runs it. Example shows how the <data> are processed:
+ \begtt
+ input <data>: ".3\Blue + .6^\KhakiC \useK -\Black"
+ expanded to: ".3 !=K 1 1 0 0 +.6^!=R .804 .776 .45 \_useK -!=G 0"
+ adjusted to: "\_addcolor .3!=K 1 1 0 0 \_addcolor .6!^R .804 .776 .45
+ \_useK \_addcolor -1!=G 0"
+ and this is processed.
+ \endtt
+ \`\_addcolor` `<coef.>!<mod><type>` expands to `\_addcolor:<mod><type> <coef>`
+ for example it expands to `\_addcolor:=K <coef>` followed by one or three or four
+ numbers (depending on <type>). <mod> is `=` (use as is) or `^` (use
+ complementary color). <type> is `K` for CMYK, `R` for RGB and `G` for
+ GREY color space. Uppercase <type> informs that `\cmykcolordef` is
+ processed and lowercase <type> informs that `\rgbcolordef` is processed.
+ All variants of commands `\_addcolor:<mod><type>` are defined. All of
+ them expand to `\_addcolorA <v1> <v2> <v3> <v4>` which adds the values of Lua
+ variables. The `\rgbcolordef` uses `\_addcolorA <R> <G> <B> 0` and
+ `\cmkykcolordef` uses `\_addcolorA <C> <M> <Y> <K>`. So the Lua variable
+ names are a little confusing when `\rgbcolordef` is processed.
+
+ Next, `\_commoncolordef` saves resulting values from Lua to `\_tmpb`
+ using `\_colordefFin`. If `\rgbcolordef` is processed, then we must to
+ remove the last <K> component which is in the format `.0` in such case.
+ The `\_stripK` macro does it.
+ Finally, the `<what-define>` is defined as `<selector>{<expanded _tmpb>}`,
+ for example `\_setcmykclor{1 0 .5 .3}`.
+ \_cod -----------------------------
+
+\_def\_rgbcolordef {\_commoncolordef \_setrgbcolor krg}
+\_def\_cmykcolordef {\_commoncolordef \_setcmykcolor KRG}
+\_def\_commoncolordef#1#2#3#4#5#6{%
+ \_begingroup
+ \_directlua{color_C=0 color_M=0 color_Y=0 color_K=0}%
+ \_def\_setcmykcolor##1{!=#2 ##1 }%
+ \_def\_setrgbcolor ##1{!=#3 ##1 }%
+ \_def\_setgreycolor##1{!=#4 ##1 }%
+ \_let\_useK=\_relax
+ \_edef\_tmpb{+#6}%
+ \_replstring\_tmpb{+ }{+}\_replstring\_tmpb{- }{-}%
+ \_replstring\_tmpb{+}{\_addcolor}\_replstring\_tmpb{-}{\_addcolor-}%
+ \_replstring\_tmpb{^!=}{!^}\_replstring\_tmpb{-!}{-1!}%
+ \_ifx K#2\_let\_useK=\_douseK \_fi
+ \_tmpb
+ \_edef\_tmpb{\_colordefFin}%
+ \_ifx k#2\_edef\_tmpb{\_ea\_stripK \_tmpb;}\_fi
+ \_ea\_endgroup
+ \_ea\_def\_ea#5\_ea{\_ea#1\_ea{\_tmpb}}%
+}
+\_def\_addcolor#1!#2#3{\_cs{addcolor:#2#3}#1}
+\_def\_addcolorA #1 #2 #3 #4 #5 {%
+ \_def\_tmpa{#1}\_ifx\_tmpa\_empty \_else \_edef\_tmpa{\_tmpa*}\_fi
+ \_directlua{color_C=math.max(color_C+\_tmpa#2,0)
+ color_M=math.max(color_M+\_tmpa#3,0)
+ color_Y=math.max(color_Y+\_tmpa#4,0)
+ color_K=math.max(color_K+\_tmpa#5,0)
+}}
+\_sdef{addcolor:=K}#1 #2 #3 #4 #5 {\_addcolorA #1 #2 #3 #4 #5 }
+\_sdef{addcolor:^K}#1 #2 #3 #4 #5 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) #5 }
+\_sdef{addcolor:^G}#1 #2 {\_addcolorA #1 0 0 0 #2 }
+\_sdef{addcolor:=G}#1 #2 {\_addcolorA #1 0 0 0 (1-#2) }
+\_sdef{addcolor:=R}#1 #2 #3 #4 {%
+ \_edef\_tmpa{\_noexpand\_addcolorA #1 \_rgbtocmyk #2 #3 #4 ; }\_tmpa
+}
+\_sdef{addcolor:^R}#1 #2 #3 #4 {\_cs{addcolor:=R}#1 (1-#2) (1-#3) (1-#4) }
+
+\_sdef{addcolor:=k}#1 #2 #3 #4 #5 {%
+ \_edef\_tmpa{\_noexpand\_addcolorA #1 \_cmyktorgb #2 #3 #4 #5 ; 0 }\_tmpa
+}
+\_sdef{addcolor:^k}#1 #2 #3 #4 #5 {\_cs{addcolor:=k}#1 (1-#2) (1-#3) (1-#4) #5 }
+\_sdef{addcolor:^g}#1 #2 {\_addcolorA #1 (1-#2) (1-#2) (1-#2) 0 }
+\_sdef{addcolor:=g}#1 #2 {\_addcolorA #1 #2 #2 #2 0 }
+\_sdef{addcolor:=r}#1 #2 #3 #4 {\_addcolorA #1 #2 #3 #4 0 }
+\_sdef{addcolor:^r}#1 #2 #3 #4 {\_addcolorA #1 (1-#2) (1-#3) (1-#4) 0 }
+\_def\_stripK#1 .0;{#1}
+\_let\_colordef=\_cmykcolordef % default \_colordef is \_cmykcolordef
+
+ \_doc -----------------------------
+ Public versions of \`\colordef` and \`\useK` macros are declared using
+ `\_def`, because the internal versions `\_colordef` and `\_useK` are
+ changed during processing.
+ \_cod -----------------------------
+
+\_def \useK{\_useK}
+\_def \colordef {\_colordef}
+\_public \cmykcolordef \rgbcolordef ;
+
+ \_doc -----------------------------
+ The \LaTeX/ file `x11nam.def` is read by \`\morecolors`. The numbers
+ 0,1,2,3,4 are transformed to letters O, <none>, B, C, D in the name of the
+ color. Colors defined already are not re-defined. The empty \`\_showcolor`
+ macro should be re-defined for color catalog printing. For example:
+ \begtt
+ \def\vr{\vrule height10pt depth2pt width20pt}
+ \def\_showcolor{\hbox{\tt\_bslash\_tmpb: \csname\_tmpb\endcsname \vr}\space\space}
+ \begmulti 4 \typosize[11/14]
+ \morecolors
+ \endmulti
+ \endtt
+ \_cod -----------------------------
+
+\_def\_morecolors{%
+ \_long\_def\_tmp##1\preparecolorset##2##3##4##5{\_tmpa ##5;,,,;}
+ \_def\_tmpa##1,##2,##3,##4;{\_ifx,##1,\_else
+ \_def\_tmpb{##1}\_replstring\_tmpb{1}{}\_replstring\_tmpb{2}{B}%
+ \_replstring\_tmpb{3}{C}\_replstring\_tmpb{4}{D}\_replstring\_tmpb{0}{O}%
+ \_ifcsname \_tmpb\_endcsname \_else
+ \_sdef{\_tmpb}{\_setrgbcolor{##2 ##3 ##4}}\_showcolor\_fi
+ \_ea\_tmpa\_fi
+ }
+ \_ea\_tmp\_input x11nam.def
+}
+\_let\_showcolor=\_relax % re-define it if you want to print a color catalog
+\_public \morecolors ;
+
+\_endcode % -------------------------------------
+
+The colors have different behavior than fonts. A marks (whatsits) with color
+information are stored into PDF output and \TeX/ doesn't interpret them.
+The PDF viewer (or PDF interpreter in a printer) reads these marks
+and switches colors according to them. This
+is totally independent on \TeX/ group mechanism. You can declare
+`\nolocalcolor` at the beginning of the document, if you want this behavior.
+In this case, if you set a color then you must to return back to black color
+using `\Black` manually.
+
+By default, \OpTeX/ sets `\localcolor`. It means that the typesetting
+returns back to a previous color at the end of current group, so you cannot
+write `\Black` explicitly. This is implemented using `\aftergroup` feature.
+There is a limitation of this feature: when a color selector is used in a
+group of a box, which is saved by `\setbox`, then the activity or
+reconstruction of previous color are processed at `\setbox` time, no in the
+box itself. You must correct it by double group:
+\begtt
+\setbox0=\hbox{\Red text} % bad: \Black is done after \setbox
+\setbox0=\hbox{{\Red text}} % good: \Black is done after group inside the box
+\endtt
+
+The implementation of colors is based on colorstack, so the current color
+can follow across more pages. It is not so obvious because PDF viewer (or PDF
+interpreter) manipulates with colors locally at each PDF page and it
+initializes each PDF page with black on white color.
+
+Macros \^`\setcmykcolor``{<C> <M> <Y> <K>}` or \^`\setrgbcolor``{<R> <G> <B>}`
+or\nl \^`\setgreycolor``{<Grey>}` should be used in color selectors or user can
+specify these macros explicitly.
+
+The color mixing processed by the \^`\colordef` is done in the substractive color
+model CMYK. If the result has a component greater than 1 then all
+components are multiplied by a coefficient in order to maximal component is
+equal to 1.
+
+You can move a shared amount of CMY components (i.e. their minimum) to the
+$K$ component. This saves the color tonners and the result is more true.
+This should be done by \^`\useK` command at the end of a linear combination
+used in `\colordef`. For example
+\begtt
+\colordef \myColor {.3\Green + .4\Blue \useK}
+\endtt
+The `\useK` command exactly does:
+$$
+ \displaylines{
+ k' =\min(C,M,Y), \cr \ C=(C-k')/(1-k'), \ M=(M-k')/(1-k'), \ Y=(Y-k')/(1-k'), \cr
+ K = \min(1,K+k').
+}
+$$
+
+You can use minus instead plus in the linear combination in `\colordef`. The
+given color is substracted in such case and the negative components are
+rounded to zero immediately. For example
+\begtt
+\colordef \Color {\Brown-\Black}
+\endtt
+can be used for removing black component from the color. You can use
+the `-\Black` trick after `\useK` command in order to remove grey components
+occured during color mixing.
+
+Finally, you can use `^` immediately preceeded before macro name of the
+color. Then the complementary color is used here.
+\begtt
+\colordef\mycolor{\Grey+.6^\Blue} % the same as \colordef\mycolor{\Grey+.6\Yellow}
+\endtt
+
+The \^`\rgbcolordef` can be used to mix colors in additive color model RGB.
+If \^`\onlyrgb` is declared, then \^`\colordef` works as \^`\rgbcolordef`.
+
+If a CMYK to RGB or RGB to CMYK conversion is needed then
+the following simple formulae are used
+(ICC profiles are not supported):
+$$
+\displaylines{
+ \hbox{CMYK to RGB:}\cr
+ R = (1-C)(1-K), \ G = (1-M)(1-K), \ B = (1-Y)(1-K). \cr
+ \hbox{RGB to CMYK:}\cr
+ K'=\max(R,G,B), \ C=(K'-R)/K', \ M=(K'-G)/K', \ Y=(K'-B)/K', \ K=1-K'.
+}
+$$
+The RGB to CMYK conversion is invoked when a color is declared using `\setrgbcolor`
+and it is used in \^`\colordef` or if it is printed when \^`\onlycmyk` is declared.
+The CMYK to RGB conversion is invoked when a color is declared using \^`\setcmykcolor`
+and it is used in \^`\rgbcolordef` or if it is printed when \^`\onlyrgb` is declared.
+
+\_endinput
+
+2020-04-22 \replstring\tmpb{+ }{+}, {- }{-} added in \colordef, bug fixed
+2020-03-18 introduced
diff --git a/macros/luatex/optex/base/doc.opm b/macros/luatex/optex/base/doc.opm
new file mode 100644
index 0000000000..62cbd219c4
--- /dev/null
+++ b/macros/luatex/optex/base/doc.opm
@@ -0,0 +1,266 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \printdoc {Macros for documentation printing <2020-04-28>}
+
+ \_doc -----------------------------
+ General decalarations.
+ \_cod -----------------------------
+
+\_fontfam[lmfonts]
+\_hyperlinks \Green \Green
+\_enlang
+\_enquotes
+
+ \_doc -----------------------------
+ Maybe, somebody needs `\seccc` or `\secccc`?
+ \_cod -----------------------------
+
+\_eoldef\seccc#1{\_medskip \_noindent{\_bf#1}\_par\_nobreak\_firstnoindent}
+\_def\secccc{\_medskip\_noindent $\_bullet$ }
+
+ \_doc -----------------------------
+ `\enddocument` can be redefined.
+ \_cod -----------------------------
+
+\_let\enddocument=\_bye
+
+ \_doc -----------------------------
+ Full page of listing causes underfill `\vbox` in output routine.
+ We need to add a small tolerance.
+ \_cod -----------------------------
+
+\_pgbottomskip=0pt plus10pt minus2pt
+
+ \_doc -----------------------------
+ The listing mode is implemented here.
+ \_cod -----------------------------
+
+\_newcount \_maxlines \_maxlines=100000
+\_public \maxlines ;
+
+\_eoldef\_cod#1{\_par \_wipeepar
+ \_vskip\_parskip \_medskip \_ttskip
+ \_begingroup
+ \_typosize[8/10]
+ \_let\_printverbline=\_printcodeline
+ \_ttline=\_inputlineno
+ \_setverb
+ \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
+ \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt
+ \_relax \_ttfont
+ \_endlinechar=`^^J
+ \_def\_tmpb{\_start}%
+ \_readverbline
+}
+\_def\_readverbline #1^^J{%
+ \_def\_tmpa{\_empty#1}%
+ \_let\_next=\_readverbline
+ \_ea\_isinlist\_ea\_tmpa\_ea{\_Doc}\_iftrue \_let\_next=\_processinput \_fi
+ \_ea\_isinlist\_ea\_tmpa\_ea{\_Endcode}\_iftrue \_endinput \_let\_next=\_processinput \_fi
+ \_ifx\_next\_readverbline \_addto\_tmpb{#1^^J}\_fi
+ \_next
+}
+{\_catcode`\ =13 \_gdef\_aspace{ }}\_def\_asp{\_ea\_noexpand\_aspace}
+\_edef\_Doc{\_asp\_asp\_bslash _doc}
+\_edef\_Endcode{\_noexpand\_empty\_bslash _endcode}
+
+ \_doc -----------------------------
+ The scanner of the control sequences in the listing mode.
+ \_cod -----------------------------
+
+\_def\_makecs{\_def\_tmp{}\_futurelet\_next\_makecsA}
+\_def\_makecsA{\_ifcat a\_noexpand\_next \_ea\_makecsB \_else \_ea\_makecsF \_fi}
+\_def\_makecsB#1{\_addto\_tmp{#1}\_futurelet\_next\_makecsA}
+\_def\_makecsF{\_ifx\_tmp\_empty \_csstring\\%
+ \_else \_ifcsname ,\_tmp\_endcsname \_link[cs:\_tmp]{\Blue}{\_csstring\\\_tmp}%
+ \_else \_let\_next=\_tmp \_remfirstunderscore\_next
+ \_ifx\_next\_empty \_let\_next=\_tmp \_fi
+ \_ifcsname ,\_next\_endcsname \_link[cs:\_next]{\Blue}{\_csstring\\\_tmp}%
+ \_else \_csstring\\\_tmp \_fi\_fi\_fi
+}
+\_def\_processinput{%
+ \_let\_start=\_relax
+ \_ea\_replstring\_ea\_tmpb\_ea{\_aspace^^J}{^^J}
+ \_addto\_tmpb{\_end}%
+ \_isinlist\_tmpb{\_start^^J}\_iftrue \_advance\_ttline by1\_fi
+ \_replstring\_tmpb{\_start^^J}{\_start}%
+ \_replstring\_tmpb{\_start}{}%
+ \_replstring\_tmpb{^^J\_end}{\_end}%
+ \_replstring\_tmpb{^^J\_end}{}%
+ \_replstring\_tmpb{\_end}{}%
+ \_ea\_prepareverbdata\_ea\_tmpb\_ea{\_tmpb^^J}%
+ \_replthis{\_csstring\\}{\_noexpand\_makecs}%
+ \_ea\_printverb \_tmpb\_end
+ \_par
+ \_endgroup \_ttskip
+ \_isnextchar\_par{}{\_noindent}%
+}
+
+ \_doc -----------------------------
+ The lines in the listing mode have Yellow background.
+ \_cod -----------------------------
+
+\_def\Yellow{\_setcmykcolor{0.0 0.0 0.3 0.03}}
+
+\_def\_printcodeline#1{\_advance \_maxlines by-1
+ \_ifnum \_maxlines<0 \_ea \_endverbprinting \_fi
+ \_penalty \_ttpenalty \_kern-4pt
+ \_noindent\_rlap{\Yellow \_vrule height8pt depth5pt width\_hsize}%
+ \_printfilename
+ \_indent \_printverblinenum #1\par}
+
+\_def\_printfilename{\_hbox to0pt{%
+ \_hskip\_hsize\vbox to0pt{\_vss\_llap{\Brown\docfile}\_kern7.5pt}\_hss}%
+ \_let\_printfilename=\_relax
+}
+\_everytt={\_let\_printverblinenum=\_relax}
+
+\_long\_def\_endverbprinting#1\_end{\_fi \_global\_maxlines=100000
+ \_noindent\_typosize[8/]\_dots etc. (see {\_tt\Brown\docfile})}
+
+ \_doc -----------------------------
+ `\docfile` is currently documented file.\nl
+ \`\printdoc` and \`\printdoctail` macros are defined here.
+ \_cod -----------------------------
+
+\_def\docfile{}
+\_def\_printdoc #1 {\_par \_def\docfile{#1}%
+ \_everytt={\_ttshift=-15pt \_let\_printverblinenum=\_relax}%
+ \_ea\_cod \input #1
+ \_everytt={\_let\_printverblinenum=\_relax}%
+ \_def\docfile{}%
+}
+\_def\_printdoctail #1 {\_bgroup
+ \_everytt={}\_ttline=-1 \_ea\_printdoctailA \_input #1 \_egroup}
+{\_long\_gdef\_printdoctailA#1\_endcode{}}
+
+\_public \printdoc \printdoctail ;
+
+ \_doc -----------------------------
+ You can do `\verbinuput \vitt{<filename>} (<from>-<to>) <filename>`
+ if you need analogical design like in listing mode.
+ \_cod -----------------------------
+
+\_def\_vitt#1{\_def\docfile{#1}\_ttline=-1
+ \_everytt={\_typosize[8/10]\_let\_printverbline=\_printcodeline \_medskip}}
+
+\_public \vitt ;
+
+ \_doc -----------------------------
+ The Index entries are without the trailing backslash. We must to add it
+ when printing Index.
+ \_cod -----------------------------
+
+\_addto \_ignoredcharsen {_} % \foo, \_foo is the same in the fist pass of sorting
+\_def\_printii #1#2&{%
+ \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi
+ \_gdef\_currii{#1#2}\_the\_everyii\_noindent
+ \_hskip-\_iindent \_ignorespaces\_printiiA\bslash#1#2//}
+
+\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0
+ {\_rm\_printpages #1,:,\_par}}
+
+\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip
+ \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar\_medskip}
+
+ \_doc -----------------------------
+ The \code{<something>} will be print as <something>.
+ \_cod -----------------------------
+
+\_let\lt=<
+\_catcode`\<=13
+
+\_def<#1>{$\langle\hbox{\it#1\/}\rangle$}
+\_everyintt{\_catcode`\<=13 }
+
+ \_doc -----------------------------
+ If this macro is loaded by \^`\load` then we need to initialize
+ catcodes using the `\_afteroad` macro.
+ \_cod -----------------------------
+
+\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 }
+
+ \_doc -----------------------------
+ Main documentation point and hyperlinks to/from it.
+ \_cod -----------------------------
+
+\_activettchar`
+
+\_def\`#1`{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}%
+ \_ifcsname cs:\_tmp\_endcsname\_else \_dest[cs:\_tmp]\_fi
+ \_sxdef{cs:\_tmp}{}%
+ \_hbox{\_ifcsname cs:^\_tmp\_endcsname
+ \_link[cs:^\_tmp]{\Red}{\_tt\_csstring\\\_tmp}\_else
+ {\_tt\Red\_csstring\\\_tmp}\_fi}%
+}
+
+\_def\^`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}%
+ \_hbox{\_ifcsname cs:^\_tmp\_endcsname \_else \_dest[cs:^\_tmp]\_sxdef{cs:^\_tmp}{}\_fi
+ \_link[cs:\_tmp]{\Blue}{\_tt\_string#1}}%
+ \_futurelet\_next\_cslinkA
+}
+\_def\_cslinkA{\_ifx\_next`\_ea\_ignoreit \_else \_ea\_ea\_ea`\_ea\_string\_fi}
+
+\_def\~`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}%
+ \_hbox{\_link[cs:^\_tmp]{\Blue}{\_tt\_string#1}}%
+ \_futurelet\_next\_cslinkA
+}
+
+\_endcode %-------------------------------------------
+
+\noindent
+The \^`\printdoc` `<filename><space>` and \^`\printdoctail` `<filename><space>`
+commands are defined after the file `doc.opm` is load by \^`\load`~`[doc]`.
+
+The `\printcoc` starts reading of given `<filename>` from the second line.
+The file is read in {\em the listing mode}.
+The `\prindoctail` starts reading given `<filename>` from the
+first occurrence of the `\_encode`. The file is read
+in normal mode (like `\input <filename>`).
+
+The {\em listing mode} prints the lines as listing of a code. This mode is
+finished when first {\visiblesp` \_doc`} occurs or first `\_endcode`
+occurs. At least two spaces must precede before such `\_doc`. On the other
+hand, the `\_encode` must be at the left edge of the line without spaces.
+If this rule is not met then the listing mode continues.
+
+If the first line or the last line of the listing mode is empty then such
+lines are not printed. The maximal number of printed lines in the listing
+mode is \^`\maxlines`. Is is set to almost infinity (100000). You can set it
+to a more sensible value. Such setting is valid only for the first following
+listing mode.
+
+When the listing mode is finished by `\_doc` then next lines are read in the
+normal way, but the material between `\begtt` ... `\endtt` pair
+is shifted by three letters left. The reason is that the three spaces of
+indentation is recommended in the `\_doc` ... `\_cod` pair and this shifting
+is a compensation of this indentation.
+
+The `\_cod` macro ignores the rest of current line and starts the listing
+mode again.
+
+When the listing mode is finished by the `\_endcode` then the `\endinput` is
+applied, the reading of the file opened by `\printdoc` is finished.
+
+You cannot reach the end of the file (without `\_endcode`) in the listing
+mode.
+
+The listing mode creates all control sequences which are listed in the
+index as active link to the main documentation point of such control sequence
+and prints them in blue. Other text is printed in black.
+
+The main documentation point is denoted by \code{\\`\\}`<sequence>`\code{`}
+in red, for example \code{\\`\\foo`}.
+The user documentation point is the first occurrence of
+\code{\\^`\\}`<sequence>`\code{`}, for example \code{\\^`\\foo`}.
+There can be more such markups, all of them are hyperlinks to the main
+documentation point.
+And main documentation point is hyperlink to the user documentation point,
+if such point exists. Finally, the
+\code{\\~`\\}`<sequence>`\code{`} (for example \code{\\~`\\foo`}) are
+hyperlinks to the user documentation point.
+
+\endinput
+
+2020-04-28 \levevmode in \^ macros added (bug fixed)
+2020-04-22 released \ No newline at end of file
diff --git a/macros/luatex/optex/base/f-adventor.opm b/macros/luatex/optex/base/f-adventor.opm
new file mode 100644
index 0000000000..8dac5cf324
--- /dev/null
+++ b/macros/luatex/optex/base/f-adventor.opm
@@ -0,0 +1,22 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Adventor] \Adventor {TeX Gyre Adventor based on Avantgarde Book}
+ {\caps} {\rm \bf \it \bi} {}
+ {[texgyreadventor-regular]}
+ {\_def\_fontnamegen {[texgyreadventor-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-antt.opm b/macros/luatex/optex/base/f-antt.opm
new file mode 100644
index 0000000000..4ec379ab39
--- /dev/null
+++ b/macros/luatex/optex/base/f-antt.opm
@@ -0,0 +1,32 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Antykwa Torunska] \Antt {Traditional Polish font family}
+ {\cond \medium \light \caps} {\rm \bf \it \bi} {Pagella}
+ {[AntykwaTorunska-Regular]}
+ {\_def\_fontnamegen {[AntykwaTorunska\_sfamxV\_sfamyV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps^^J
+ \cond ...... condensed^^J
+ \medium .... medium weight^^J
+ \light ..... light weight^^J
+ \cond ...... condensed^^J
+}}
+
+\_moddef \resetmod {\_fsetV sfamx={},sfamy={},caps={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \cond {\_fsetV sfamx=Cond \_fvars Regular . Italic .
+ \_onlyif sfamy={}: {\_fvars Regular Bold Italic BoldItalic }}
+\_moddef \medium {\_fsetV sfamy=Med \_fvars Regular . Italic . }
+\_moddef \light {\_fsetV sfamy=Light \_fvars Regular . Italic . }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath{[texgyrepagella-math]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-baskerville.opm b/macros/luatex/optex/base/f-baskerville.opm
new file mode 100644
index 0000000000..a228c14a54
--- /dev/null
+++ b/macros/luatex/optex/base/f-baskerville.opm
@@ -0,0 +1,22 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Baskerville] \Baskerville {Free vaiants of classical Baskerville}
+ {\caps} {\rm \bf \it \bi} {}
+ {[BaskervilleF-Regular]}
+ {\_def \_fontnamegen {[BaskervilleF-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-bonum.opm b/macros/luatex/optex/base/f-bonum.opm
new file mode 100644
index 0000000000..900136e26f
--- /dev/null
+++ b/macros/luatex/optex/base/f-bonum.opm
@@ -0,0 +1,24 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Bonum] \Bonum {TeX Gyre Bonum fonts based on Bookman}
+ {\caps} {\rm \bf \it \bi} {Bonum}
+ {[texgyrebonum-regular]}
+ {\_def\_fontnamegen {[texgyrebonum-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[texgyrebonum-math]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-cursor.opm b/macros/luatex/optex/base/f-cursor.opm
new file mode 100644
index 0000000000..c7af7d6912
--- /dev/null
+++ b/macros/luatex/optex/base/f-cursor.opm
@@ -0,0 +1,22 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Cursor] \Cursor {TeX Gyre Cursor fonts based on Courier}
+ {\caps} {\rm \bf \it \bi} {}
+ {[texgyrecursor-regular]}
+ {\_def \_fontnamegen {[texgyrecursor-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-gfsbodoni.opm b/macros/luatex/optex/base/f-gfsbodoni.opm
new file mode 100644
index 0000000000..369f2474b2
--- /dev/null
+++ b/macros/luatex/optex/base/f-gfsbodoni.opm
@@ -0,0 +1,21 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [GFS Bodoni] \GFSBodoni {Based on Bodoni with greek letters}
+ {} {\rm \bf \it \bi} {}
+ {[GFSBodoni]}
+ {\_def\_fontnamegen {[GFSBodoni\_currV]:\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... doesn't work even though otfinfo -f lists smcp^^J
+}}
+
+\_moddef \resetmod {\_fvars {} Bold It BoldIt }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-heros.opm b/macros/luatex/optex/base/f-heros.opm
new file mode 100644
index 0000000000..d369ec8936
--- /dev/null
+++ b/macros/luatex/optex/base/f-heros.opm
@@ -0,0 +1,203 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Heros] \Heros {TeX Gyre Heros fonts based on Helvetica}
+ {\caps \cond} {\rm \bf \it \bi} {FiraMath}
+ {[texgyreheros-regular]}
+ {\_def\_fontnamegen{[texgyreheros\_condV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps^^J
+ \cond ...... condensed variants^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={},cond={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+\_moddef \nocaps {\_fsetV caps={} }
+\_moddef \cond {\_fsetV cond=cn }
+\_moddef \nocond {\_fsetV cond={} }
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[FiraMath-Regular]}
+
+\_endcode
+
+The font family file declares the font family for selecting fonts from such
+family at arbitrary size and with various shapes. Unicode fonts (OTF)
+are preferred. The following example declares the Heros family:
+
+\printdoc f-heros.opm
+
+If you want to write such font file, you need to keep following rules.
+
+\begitems
+* Use the \^`\_famdecl` command first. It has the following syntax:
+\begtt \catcode`\<=13
+\_famdecl [<Name of family>] \<Familyselector> {<comments>}
+ {<modifiers>} {<variant selectors>} {<comments about math fonts>}
+ {<font-for-testing>}
+ {\_def\_fontnamegen{<font name or font file name generated>}}
+\endtt
+ This writes information about font family at the
+ terminal and prevents loading such file twice. Moreover, it probes
+ existence of `<font-for-testing>` in your system. If it doesn't exist, the
+ file loading is skipped with a warning on the terminal.
+ The \^`\_ifexistfam` macro returns false in such case.
+ The `\_fontnamegen` macro must be defined in the last parameter of the
+ `\_famdecl`. More about it is documented below.
+* You can use `\_wlog{\_detokenize{...` to write aditional information into
+ log file.
+* You can declare optical sizes using `\_regoptsizes` if there are more font files
+ with different optical sizes (like in Latin Modern). See `f-lmfonts.ofm`
+ file for more information about this special feature.
+* Declare font modifiers using `\_moddef` if they are present. The \`\resetmod`
+ must be declared in each font family.
+* Check if all your declared modifiers does not produce any space in
+ horizontal mode. For example check: `X\caps Y`, the letters `XY` must
+ be printed without any space.
+* Optionally, declare new variants by the \^`\famvardef` macro.
+* Run `\_initfontfamily` in order to start the family.
+* If math font should be loaded, use `\_loadmath{<math font>}`.
+\enditems
+
+{\noindent \bf The \`\_fontnamegen` macro}
+(declared in the last parameter of the `\_famdecl`)
+must expand (at expand processor level only) to a file name of loaded font (or to its font
+name) and to optional font features appended. The Font Selection
+System uses this macro at primitive level in the following sense:
+
+\begtt
+\font \<selector> {\_fontnamegen} \_sizespec
+\endtt
+%
+Note that the extended `\font` syntax
+`\font\<selector> {<font name>:<font features>} <size spec.>` or
+`\font\<selector> {[<font file name>]:<font features>} <size spec.>`
+is expected here.
+
+\bigskip
+{\noindent\bf Example.}
+Assume an abstract font family with fonts `xx-Regular.otf`,
+`xx-Bold.otf`, `xx-Italic.otf` and `xx-BoldItalic.otf`. Then you can declare
+the `\resetmod` (for initializing the family) by:
+\begtt
+\_moddef\resetmod{\_fvars Regular Bold Italic BoldItalic }
+\endtt
+and define the `\_fontnamegen` in the last parameter of the `\_famdecl` by:
+\begtt
+\_famdecl ...
+ {\def\_fontnamegen{[xx-\_currV]}}
+\endtt
+The following auxiliary macros are used here:
+\begitems
+* \^`\moddef` declares the family dependent modifier. The `\resetmod` saves
+ initial values for the family.
+* \^`\_fvars` saves four names to the memory, they are used by the \^`\_currV` macro.
+* \^`\_currV` expands to one of the four names dependent on `\rm` or `\bf` or
+ `\it` or `\bi` variant is required.
+\enditems
+Assume that the user needs `\it` variant in this family. Then the
+`\_fontnamegen` macro expands to `[xx-\_currV]` and it expands to
+`[xx-Italic]`. The Font Selection System uses `\font {[xx-Italic]}`.
+This command loads the `xx-Italic.otf` font file.
+
+See more advanced examples in `f-<family>.opm` files. The `f-heros.opm` is listed
+here. When Heros family is selected and `\bf` is asked then
+\begtt
+\font {[texgyreheros-bold]:+tlig;} at10pt
+\endtt
+%
+is processed.
+
+You can use any expandable macros or expandable primitives in the `\_fontnamegen`
+macro. The simple macros in our example with names `\_<word>V` are preferred. They
+expand typically to their content. The macro `\_fsetV <word>=<content>`
+(terminated by a space) is equivalent to `\def\_<word>V{<content>}` and you
+can use it in font modifiers. You can use the `\_fsetV` macro in more
+general form:
+
+\begtt \catcode`\<=13
+ \_fsetV <word-a>=<value-a>,<word-b>=<value-b> ...etc. terminated by a space
+\endtt
+%
+with obvious result `\def \_<word-a>V {<value-a>}\def \_<word-b>V {<value-b>}` etc.
+
+Example: if both font modifiers `\caps` and `\cond` were applied from the Heros
+family, then `\def\_capsV{+smcp;+onum}` and `\def\_condV{cn}` were processed
+by these font modifiers. If user needs the `\bf` variant at 11\,pt now then
+the
+
+\begtt
+ \font {[texgyreheroscn-bold]:+smcp;+onum;+tlig;} at11pt
+\endtt
+%
+is processed. We assume that a font file `texgyreheroscn-bold.otf` is present
+in your TeX system.
+
+Recommendation: the \^`\_fontfeatures` macro at the end of the `\_fontnamegen`
+macro in order to the \^`\setff`, \^`\setfontcolor`, \^`\setletterspace`
+macros can work.
+
+\bigskip
+{\noindent\bf The \^`\moddef` macro}
+does more things than simple `\_def`:
+
+\begitems
+* The modifier macros are defined as `\_protected`.
+* The modifier macros are defined as family-dependent.
+\enditems
+\noindent
+The \^`\famvardef` macro has the same features.
+
+\bigskip
+{\noindent\bf The `\<Familyselector>`}
+is defined by the \^`\_famdecl` macro as:
+\begtt \catcode`<=13
+\protected\def\<Familyselector> {%
+ \_def\_currfamily {<Familyselector>}%
+ \_def\_fontnamegen {<font name or font file name generated>}%
+ \resetmod
+\endtt
+
+{\noindent\bf The font context} consists from
+ \begitems
+ * Family context, i.\,e.\ \^`\_currfamily` and \^`\_fontnamegen` values
+ saved by the `\<Familyselector>`,
+ * \^`\_sizespec` value saved by the \^`\setfontsize` macro,
+ * whatever what influences the expansion of the `\_fontnamegen` macro,
+ they are typically macros `\_<key>V` saved by the font modifiers.
+ \enditems
+
+{\noindent\bf The \^`\_initfontfamily` must be run} after modifers decaration.
+It sets `\_let\_resetmod=\resetmod` and runs the `\<Familyselector>`.
+Finally, it runs `\_rm`, so first font from new family is loaded and it
+is ready to use it.
+
+\bigskip
+{\noindent\bf Name conventions.}
+Create font modifiers, new variants and the `\<Familyselector>` only as public, i.e.
+without `_` prefix. We assume that if user re-defines them then he/she needs
+not them, so we have no problems.
+
+The name of `\<Familyselector>` should begin with uppercase letter.
+
+If you need to declare your private modifier (because it is used in another
+modifiers or macros, for example), use the name `\_wordM`. You can be
+sure that such name does not influence the private name space used by \OpTeX/.
+
+\bigskip
+{\noindent\bf Additional notes.}
+See the font family file `f-libertine-s.opm` which is another example where no
+font files but font names are used.
+
+See the font family file `f-lmfonts.opm` where you can find the
+the example of the optical sizes declaration including a documentation about
+it.
+
+If you need to create font family file with non-Unicode font, you can do it.
+The `\_fontnamegen` must expand to the name of TFM file in such case. But we
+don't prefer such font family files, because they are usable only with
+languages with alphabet subset to ISO-8859-1 (Unicodes are equal to letter
+codes of such alphabets), but middle or east Europe use languages where
+such condition is not true.
diff --git a/macros/luatex/optex/base/f-libertine-s.opm b/macros/luatex/optex/base/f-libertine-s.opm
new file mode 100644
index 0000000000..f08126984e
--- /dev/null
+++ b/macros/luatex/optex/base/f-libertine-s.opm
@@ -0,0 +1,50 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts}
+ {\sans \mono \caps} {\rm \bf \it \bi \initials \displ \keybr} {}
+ {Linux Libertine O}
+ {\_def\_fontnamegen {Linux \_mainfamV\_V\_subfamV O/\_currV:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers^^J
+ \sans ...... smaller serifs^^J
+ \caps ...... caps & small caps^^J
+Special variants:^^J
+ \initials .. special initials (only uppercase letters)^^J
+ \displ ..... display variant, suitable at big sizes^^J
+ \mono ...... non-proportional^^J
+ \keybr ..... keyboard, emulates keyboard buttons^^J
+}}
+
+\_moddef \resetmod {\_fsetV mainfam=Libertine,subfam={},caps={} \_fvars {} B I BI }
+\_moddef \sans {\_fsetV mainfam=Biolinum,subfam={} }
+\_moddef \mono {\_fsetV mainfam=Libertine,subfam={Mono } \_fvars {} . . . }
+\_moddef \caps {\_fsetV caps=+smcp; }
+\_moddef \nocaps {\_fsetV caps={} }
+
+\_famvardef \initials {\_fsetV mainfam=Libertine,subfam={Initials } \_fvars {} . . . \rm}
+\_famvardef \displ {\_fsetV mainfam=Libertine,subfam={Display } \_fvars {} . . . \rm}
+\_famvardef \keybr {\_fsetV mainfam=Biolinum,subfam={Keyboard } \_fvars {} . . . \rm}
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+This is another example where the font names (no font files) are declared.
+Linux Libertine font is typically installed on Linux systems.
+The \_V macro generates a space. We provide following fonts:
+
+normal: "Linux Libertine O:\_fontfeatures"
+ "Linux Libertine O/B:\_fontfeatures"
+ "Linux Libertine O/I:\_fontfeatures"
+ "Linux Libertine O/BI:\_fontfeatures"
+mono : "Linux Libertine Mono O:\_fontfeatures"
+sans: "Linux Biolinum O:\_fontfeatures"
+ "Linux Biolinum O/B:\_fontfeatures"
+ "Linux Biolinum O/I:\_fontfeatures"
+ "Linux Biolinum O/BI:\_fontfeatures"
+special: "Linux Libertine Initials O:\_fontfeatures"
+ "Linux Libertine Display O:\_fontfeatures"
+ "Linux Biolinum Keyboard O:\_fontfeatures"
+
+Another file f-libertine.opm declares Linux Libertine family from font files. \ No newline at end of file
diff --git a/macros/luatex/optex/base/f-libertine.opm b/macros/luatex/optex/base/f-libertine.opm
new file mode 100644
index 0000000000..2aa52dad32
--- /dev/null
+++ b/macros/luatex/optex/base/f-libertine.opm
@@ -0,0 +1,60 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Linux Libertine] \Libertine {Free Linux Libertine fonts}
+ {\sans \mono \caps \semi} {\rm \bf \it \bi \initials \displ \keybr} {Libertinus}
+ {[LinLibertine_R]}
+ {\_def\_fontnamegen {[Lin\_subfamV _\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \sans ...... smaller serifs^^J
+ \mono ...... non-proportional^^J
+ \semi ...... semi-bold variants (\rm, \it)^^J
+ \caps ...... caps & small caps^^J
+Special variants:^^J
+ \initials .. special initials (only uppercase letters)^^J
+ \displ ..... display variant, suitable at big sizes^^J
+ \keybr ..... keyboard, emulates keyboard buttons^^J
+}}
+
+\_moddef \resetmod {\_fsetV subfam=Libertine,caps={} \_fvars R RB RI RBI }
+\_moddef \sans {\_fsetV subfam=Biolinum \_fvars R RB RI RBO }
+\_moddef \mono {\_fsetV subfam=Libertine \_fvars M MB MO MBO }
+\_moddef \semi {\_fsetV subfam=Libertine \_fvars RZ . RZI . }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+\_moddef \nocaps {\_fsetV caps={} }
+
+\_famvardef \initials {\_fsetV subfam=Libertine \_fvars I . . . \rm}
+\_famvardef \displ {\_fsetV subfam=Libertine \_fvars DR . . . \rm}
+\_famvardef \keybr {\_fsetV subfam=Biolinum \_fvars K . . . \rm}
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[LibertinusMath-Regular]}
+
+\_endcode
+
+This file declares Linux Libertine font family from font files. The
+following fonts are provided:
+
+normal: "[LinLibertine_R]:\_fontfeatures"
+ "[LinLibertine_RB]:\_fontfeatures"
+ "[LinLibertine_RI]:\_fontfeatures"
+ "[LinLibertine_RBI ]:\_fontfeatures"
+ "[LinLibertine_RZI]:\_fontfeatures"
+ "[LinLibertine_RZ]:\_fontfeatures"
+mono: "[LinLibertine_M]:\_fontfeatures"
+ "[LinLibertine_MB]:\_fontfeatures"
+ "[LinLibertine_MO]:\_fontfeatures"
+ "[LinLibertine_MBO]:\_fontfeatures"
+sans: "[LinBiolinum_RB]:\_fontfeatures"
+ "[LinBiolinum_RBO]:\_fontfeatures"
+ "[LinBiolinum_R]:\_fontfeatures"
+ "[LinBiolinum_RI]:\_fontfeatures"
+special: "[LinLibertine_I]:\_fontfeatures"
+ "[LinLibertine_DR]:\_fontfeatures"
+ "[LinBiolinum_K]:\_fontfeatures"
+
+See an alternative `f-libertine-s.opm` where the same font family is
+declared using font names used in operating system.
+
diff --git a/macros/luatex/optex/base/f-lido.opm b/macros/luatex/optex/base/f-lido.opm
new file mode 100644
index 0000000000..b91bf1df4f
--- /dev/null
+++ b/macros/luatex/optex/base/f-lido.opm
@@ -0,0 +1,48 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Lido] \Lido {by StormType Foundry designed for "lidove noviny"}
+ {\caps \cond} {\rm \bf \mr \mi \it \bi} {Termes}
+ {[LidoSTF]}
+ {\_def\_fontnamegen {[LidoSTF\_condV\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Variants:^^J
+ \rm \bf \it \bi ... classical variants^^J
+ \mr \mi .... medium regular and medium italics (between normal and bold)^^J
+Modifiers:^^J
+ \cond ...... condensed (italic is not avalable for \cond variants)^^J
+ \medium .... sets \mr \bf \mi \bi family
+}}
+
+\_moddef \resetmod {\_fsetV caps={},cond={},ital=Italic \_fvars {} Bold {\_italV} {Bold\_italV} }
+\_moddef \medium {\_fvars Medium Bold {Medium\_italV} {Bold\_italV} }
+\_moddef \cond {\_fsetV cond=Condensed,ital={} }
+
+\_famvardef \mr {\_fvars Medium . . . \_rm}
+\_famvardef \mi {\_fvars . . {Medium\_italV} . \_it}
+
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[texgyretermes-math]}
+
+\_endcode
+
+This font family Lido by Storm Type Foundry was designed for Lidove noviny
+newspaper. It is similar to Times but it is not Times.
+
+The Lido font family supports 6 standard selectors
+
+\rm Regular \it Italics
+\mr Medium-Regular \mi Medium-Italics
+\bf Bold-Regular \bi Bold-Italics
+
+and three Condensed variants:
+
+\cond \rm Condensed
+ \mr Condensed-Medium
+ \bf Condensed-Bold
+
+The italic variants are missing when \cond is selected. This means that
+\cond\it does the same as \cond\rm etc.
+
diff --git a/macros/luatex/optex/base/f-lmfonts.opm b/macros/luatex/optex/base/f-lmfonts.opm
new file mode 100644
index 0000000000..9f9a650a83
--- /dev/null
+++ b/macros/luatex/optex/base/f-lmfonts.opm
@@ -0,0 +1,181 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Latin Modern] \LMfonts {TeX Gyre fonts based on Coputer Modern}
+ {\roman \sans \quotset \ttset \ttprop \ttlight \ttcond \upital
+ \dunhill submods:\caps \slant \nbold \bolder} {\rm \bf \it \bi \tt} {LM}
+ {[lmroman10-regular]}
+ {\_def\_fontnamegen {[\_optname{lm\_subfamV.\_currV}]:\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers (selects subfamily):^^J
+ \modreset .. implicit values (serif, bold extended, nocaps)^^J
+ \sans ...... sans serif subfamily^^J
+ \quotset ... quotation subfamily^^J
+ \ttset ..... typewriter subfamily^^J
+ \ttprop .... proportional typewriter-like subfamily^^J
+ \ttlight ... light typewriter subfamily^^J
+ \ttcond .... condensed typewriter subfamily^^J
+ \upital .... upright italic (only \rm)^^J
+ \dunhill ... dunhill roman subfamily (only \rm, \it)^^J%
+Sub-modifiers (selects special variants of given subfamily):^^J
+ \caps ...... caps & small caps (available only at limited shapes)^^J
+ \slant ..... slanted (default in some subfamilies)^^J
+ \nbold ..... normal bold (extended bold is default)^^J
+ \bolder .... extended bold^^J
+}}
+
+\_def\_LMregfont #1 #2 #3{%
+ \_edef\_tmp {\_noexpand\_regoptsizes #1 #2 \_ea\_detokenize\_ea{#3}}%
+ \_lowercase\_ea{\_tmp}% OTF file names are lowercase
+}
+\_def \_regoptFS {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*}
+\_def \_regoptFT {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*}
+\_def \_regoptST {7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*}
+\_def \_regoptES {8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*}
+\_def \_regoptET {8 <8.5 9 <9.5 10 <11.1 12 <*}
+\_def \_regoptT {10 <*}
+\_def \_regoptE {8 <*}
+
+\_LMregfont lmrm.r LMRoman?-Regular \_regoptFS % 5-17
+\_LMregfont lmrm.bx LMRoman?-Bold \_regoptFT % 5-12
+\_LMregfont lmrm.i LMRoman?-Italic \_regoptST % 7-12
+\_LMregfont lmrm.bxi LMRoman?-BoldItalic \_regoptT % 10
+\_LMregfont lmrm.isl LMRomanSlant?-Regular \_regoptES % 8-17
+\_LMregfont lmrm.bxisl LMRomanSlant?-Bold \_regoptT % 10
+\_LMregfont lmrm.b LMRomanDemi?-Regular \_regoptT % 10
+\_LMregfont lmrm.bi LMRomanDemi?-Oblique \_regoptT % 10
+
+\_LMregfont lmss.r LMSans?-Regular \_regoptES % 8-17
+\_LMregfont lmss.bx LMSans?-Bold \_regoptT % 10
+\_LMregfont lmss.i LMSans?-Oblique \_regoptES % 8-17
+\_LMregfont lmss.bxi LMSans?-BoldOblique \_regoptT % 10
+\_LMregfont lmss.b LMSansDemiCond?-Regular \_regoptT % 10
+\_LMregfont lmss.bi LMSansDemiCond?-Oblique \_regoptT % 10
+
+\_LMregfont lmsq.r LMSansQuot?-Regular \_regoptE % 8
+\_LMregfont lmsq.b LMSansQuot?-Bold \_regoptE % 8
+\_LMregfont lmsq.i LMSansQuot?-Oblique \_regoptE % 8
+\_LMregfont lmsq.bi LMSansQuot?-BoldOblique \_regoptE % 8
+
+\_LMregfont lmtt.r LMMono?-Regular \_regoptET % 8-12
+\_LMregfont lmtt.b LMMonoLt?-Bold \_regoptT % 10
+\_LMregfont lmtt.i LMMono?-Italic \_regoptT % 10
+\_LMregfont lmtt.bi LMMonoLt?-BoldOblique \_regoptT % 10
+\_LMregfont lmtt.isl LMMonoSlant?-Regular \_regoptT % 10
+\_optfontalias {lmtt.bisl} {lmtt.bi}
+
+\_LMregfont lmtp.r LMMonoPropLt?-Regular \_regoptT % 10
+\_LMregfont lmtp.bx LMMonoPropLt?-Bold \_regoptT % 10
+\_LMregfont lmtp.i LMMonoPropLt?-Oblique \_regoptT % 10
+\_LMregfont lmtp.bxi LMMonoPropLt?-BoldOblique \_regoptT % 10
+\_LMregfont lmtp.b LMMonoProp?-Regular \_regoptT % 10
+\_LMregfont lmtp.bi LMMonoProp?-Oblique \_regoptT % 10
+
+\_LMregfont lmtl.r LMMonoLt?-Regular \_regoptT % 10
+\_LMregfont lmtl.i LMMonoLt?-Oblique \_regoptT % 10
+
+\_LMregfont lmtc.r LMMonoLtCond?-Regular \_regoptT % 10
+\_LMregfont lmtc.i LMMonoLtCond?-Oblique \_regoptT % 10
+
+\_LMregfont lmrm.rc LMRomanCaps?-Regular \_regoptT % 10
+\_LMregfont lmrm.ic LMRomanCaps?-Oblique \_regoptT % 10
+\_LMregfont lmtt.rc LMMonoCaps?-Regular \_regoptT % 10
+\_LMregfont lmtt.ic LMMonoCaps?-Oblique \_regoptT % 10
+
+\_LMregfont lmmu.r LMRomanUnsl?-Regular \_regoptT % 10
+\_LMregfont lmdu.r LMRomanDunh?-Regular \_regoptT % 10
+\_LMregfont lmdu.sl LMRomanDunh?-Oblique \_regoptT % 10
+
+% main modifiers (they select a subfamily)
+\_moddef \resetmod {\_fsetV subfam=rm \_fvars r bx i bxi }
+\_moddef \sans {\_fsetV subfam=ss \_fvars r bx i bxi }
+\_moddef \quotset {\_fsetV subfam=sq \_fvars r b i bi }
+\_moddef \ttset {\_fsetV subfam=tt \_fvars r b i bi }
+\_moddef \ttprop {\_fsetV subfam=tp \_fvars r b i bi }
+\_moddef \ttlight {\_fsetV subfam=tl \_fvars r . i . }
+\_moddef \ttcond {\_fsetV subfam=tc \_fvars r . i . }
+\_moddef \upital {\_fsetV subfam=mu \_fvars r . . . }
+\_moddef \dunhill {\_fsetV subfam=du \_fvars r . sl . }
+
+% submodifiers (they select special vaiants in a subfamily)
+\_moddef \nbold {\_onlyif subfam=rm,ss,tp: {\_fvars r b i bi }}
+\_moddef \bolder {\_onlyif subfam=rm,ss,tp: {\_fvars r bx i bxi }}
+\_moddef \slant {\_onlyif subfam=rm: {\_fvars r bx isl bxisl }%
+ \_onlyif subfam=tt: {\_fvars r b isl bisl }}
+\_moddef \caps {\_onlyif subfam=rm,tt: {\_fvars rc . ic . }}
+
+\_def \_tryloadtt {\_fontdef\_tentt{\_LMfonts \_addto\_fontfeatures{-tlig;}\_ttset \_rm}}
+\_private \LMfonts \ttset ; % \tt variant selector re-defined
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[latinmodern-math]}
+
+\_endcode
+
+\secc How to write the font family file with optical sizes
+
+You can use \^`\_optname` macro when `\_fontnamegen` in expanded. This macro is fully
+expandable and its input is `<internal-template>` and its output is a
+part of the font file name `<size-dependent-template>` with respect to given
+optical size.
+
+You can declare a collection of `<size-dependent-template>`s for one
+given `<internal-template>` by the \^`\_regoptsizes` macro.
+The syntax is shown for one real case:
+
+\begtt
+\_regoptsizes lmr.r lmroman?-regular
+ 5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*
+\endtt
+
+In general:
+
+\begtt \catcode`\<=13
+\_regoptsizes <internal-template> <general-ouput-template> <resizing-data>
+\endtt
+
+Suppose our example above. Then `\_optname{lmr.r}` expands to
+lmroman?-regular where the question mark is substituted by a number
+depending on current `\_optsize`. If the `\_optsize` lies between two boundary
+values (they are prefixed by \code{<} character) then the number written between
+them is used. For example if $11.1 \lt `\_optsize` \le 15$ then 12 is
+substituted instead question mark. The <resizing-data> virtually begins
+with zero \code{<0}, but it is not explicitly written. The right part of
+<resizing-data> must be terminated by \code{<*} which means "less than infinity".
+
+If `\_optname` gets an argument which is not registered <internal-template>
+then it expands to `\_failedoptname` which typically ends to error message
+about missing font. You can redefine `\_failedoptname` macro to some
+existing font if you find it useful.
+
+We are using a special macro `\_LMregfont` in `f-lmfonts.opm`.
+It sets the file names to
+lowercase and enables to use a shortcasts isntead real <resizing-data>.
+There are shortcats `\_regoptFS`, `\_regoptT`, etc. here. The collection of
+`<internal-templates>` are declared, each of them covers a collection of real
+file names.
+
+The \^`\_optfontalias` `{<new-template>} {<internal-template>}` declares
+`<new-template>` with the same meaning as previously declared
+`<internal-template>`.
+
+The `\_optname` macro can be used even if no otical sizes are provided by
+a font family. Suppose that font file names are much more chaotic (because
+artists are very creative people), so you need to declare more systematic
+`<internal-templates>` and do an alias from each `<internal-template>` to
+`<real-font-name>`. For example, you can do it as follows:
+
+\begtt
+\def\fontalias #1 #2 {\_regoptsizes #1 ?#2 {} <*}
+% alias name real font name
+\fontalias crea-a-regular {Creative Font}
+\fontalias crea-a-bold {Creative FontBold}
+\fontalias crea-a-italic {Creative olique}
+\fontalias crea-a-bolditalic {Creative Bold plus italic}
+\fontalias crea-b-regular {Creative Regular subfam}
+\fontalias crea-b-bold {Creative subfam bold}
+\fontalias crea-b-italic {Creative-subfam Oblique}
+\fontalias crea-b-bolditalic {Creative Bold subfam Oblique}
+\endtt
+
diff --git a/macros/luatex/optex/base/f-pagella.opm b/macros/luatex/optex/base/f-pagella.opm
new file mode 100644
index 0000000000..f40b102b1c
--- /dev/null
+++ b/macros/luatex/optex/base/f-pagella.opm
@@ -0,0 +1,24 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Pagella] \Pagella {TeX Gyre Pagella fonts based on Palatino}
+ {\caps} {\rm \bf \it \bi} {Pagella}
+ {[texgyrepagella-regular]}
+ {\_def\_fontnamegen {[texgyrepagella-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[texgyrepagella-math]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-schola.opm b/macros/luatex/optex/base/f-schola.opm
new file mode 100644
index 0000000000..c891317265
--- /dev/null
+++ b/macros/luatex/optex/base/f-schola.opm
@@ -0,0 +1,24 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Schola] \Schola {TeX Gyre Schola fonts based on New Century}
+ {\caps} {\rm \bf \it \bi} {Schola}
+ {[texgyreschola-regular]}
+ {\_def\_fontnamegen {[texgyreschola-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[texgyreschola-math]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-technika.opm b/macros/luatex/optex/base/f-technika.opm
new file mode 100644
index 0000000000..0d1af54100
--- /dev/null
+++ b/macros/luatex/optex/base/f-technika.opm
@@ -0,0 +1,31 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Technika] \Technika {Fonts from visual style of CTU in Prague}
+ {\caps \light} {\rm \bf \it \bi \stencil} {}
+ {[Technika-Regular]}
+ {\_def\_fontnamegen {[Technika\_stencilV-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \light ..... ligher variants: \rm\bf=light \bf\bi=normal^^J
+ \book ...... semi-ligher variants: \rm\bf=book \bf\bi=bold^^J
+ \caps ...... caps & small caps^^J
+Special variant:^^J
+ \stencil ... dashed leters (only uppercase)^^J
+}}
+
+\_moddef \resetmod {\_fsetV stencil={},caps={} \_fvars Regular Bold Italic BoldItalic }
+\_moddef \light {\_fsetV stencil={} \_fvars Light Regular LightItalic Italic }
+\_moddef \book {\_fsetV stencil={} \_fvars Book Bold BookItalic BoldItalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_famvardef \stencil {\_fsetV stencil=Stencil \_fvars Bold . Bold . \rm}
+
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-termes.opm b/macros/luatex/optex/base/f-termes.opm
new file mode 100644
index 0000000000..b765245640
--- /dev/null
+++ b/macros/luatex/optex/base/f-termes.opm
@@ -0,0 +1,24 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Termes] \Termes {TeX Gyre Termes fonts based on Times}
+ {\caps} {\rm \bf \it \bi} {Termes}
+ {[texgyretermes-regular]}
+ {\_def\_fontnamegen {[texgyretermes-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifier:^^J
+ \caps ...... caps & small caps^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars regular bold italic bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[texgyretermes-math]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/f-xcharter.opm b/macros/luatex/optex/base/f-xcharter.opm
new file mode 100644
index 0000000000..7f6ff7a356
--- /dev/null
+++ b/macros/luatex/optex/base/f-xcharter.opm
@@ -0,0 +1,24 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [XCharter] \XCharter {An extension of Bitstream Charter}
+ {\caps \slant} {\rm \bf \it \bi} {}
+ {[XCharter-Roman]}
+ {\_def\_fontnamegen {[XCharter-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps^^J
+ \slant ..... slanted variants used in \it, \bi^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars Roman Bold Italic BoldItalic }
+\_moddef \slant {\_fvars Roman Bold Slanted BoldSlanted }
+\_moddef \caps {\_fsetV caps=+smcp;+onum; }
+
+\_initfontfamily % new font family must be initialized
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/luatex/optex/base/fams-ini.opm b/macros/luatex/optex/base/fams-ini.opm
new file mode 100644
index 0000000000..5ecbfc361f
--- /dev/null
+++ b/macros/luatex/optex/base/fams-ini.opm
@@ -0,0 +1,130 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+% Version <2020-02-28>. Loaded in format and secondly on demand by \fontfam[catalog]
+
+\_famtext {Special name for printing a catalogue:}
+
+\_faminfo [Catalogue] {Catalogue of all registered font families} {fonts-catalog} {}
+\_famalias [Catalog]
+
+\_famtext {Computer Modern like family:}
+
+\_faminfo [Latin Modern] {TeX Gyre fonts based on Coputer Modern} {f-lmfonts}
+ { -,\nbold,\sans,\sans\nbold,\slant,\ttset,\ttset\slant,\ttset\caps,%
+ \ttprop,\ttprop\bolder,\quotset: {\rm\bf\it\bi}
+ \caps: {\rm\it}
+ \ttlight,\ttcond,\dunhill: {\rm\it} \upital: {\rm} }
+\_famalias [LMfonts] \_famalias [Latin Modern Fonts]
+
+\_famtext {TeX Gyre fonts based o Adobe 35:}
+
+\_faminfo [Termes] {TeX Gyre Termes fonts based on Times} {f-termes}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [Times]
+
+\_faminfo [Heros] {TeX Gyre Heros fonts based on Helvetica} {f-heros}
+ { -,\caps,\cond,\caps\cond: {\rm\bf\it\bi} }
+\_famalias [Helvetica]
+
+\_faminfo [Adventor] {TeX Gyre Adventor based on Avantgarde Book} {f-adventor}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [Avantgarde Book]
+
+\_faminfo [Bonum] {TeX Gyre Bonum fonts based on Bookman} {f-bonum}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [Bookman]
+
+\_faminfo [Pagella] {TeX Gyre Pagella fonts based on Palatino} {f-pagella}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [Palation]
+
+\_faminfo [Schola] {TeX Gyre Schola fonts based on New Century} {f-schola}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [New Century]
+
+\_faminfo [Cursor] {TeX Gyre Cursor fonts based on Courier} {f-cursor}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [Courier]
+
+\_famtext {Other fonts:}
+
+\_faminfo [Linux Libertine] {Free fonts typicaly installed in systems} {f-libertine}
+ { -: {\rm\bf\it\bi} \semi: {\rm\it}
+ \caps,\sans,\mono,\caps\sans: {\rm\bf\it\bi} -: {\initials\displ\keybr} }
+\_famalias [Libertine] \_famalias [LinLibertine]
+
+\_faminfo [Antykwa Torunska] {Traditional Polish font family} {f-antt}
+ { -,\cond,\caps, \caps\cond: {\rm\bf\it\bi}
+ \medium,\cond\medium, \light, \cond\light:{\rm\it} }
+\_famalias [Antt]
+
+\_faminfo [Baskerville] {Free vaiants of classical Baskerville} {f-baskerville}
+ { -,\caps: {\rm\bf\it\bi} }
+\_famalias [BaskevilleF]
+
+\_faminfo [Technika] {Fonts from visual style of CTU in Prague} {f-technika}
+ { -,\light,\book, \caps, \caps\book: {\rm\bf\it\bi} -:{\stencil} }
+\_famalias [CTU Technika]
+
+\_faminfo [XCharter] {An extension of Bitstream Charter} {f-xcharter}
+ { -,\slant,\caps,\caps\slant: {\rm\bf\it\bi} }
+
+\_faminfo [GFSBodoni] {Based on Bodoni with greek letters} {f-gfsbodoni}
+ { -: {\rm\bf\it\bi} }
+
+\_endcode
+
+Once you have prepared a font family file with the name `f-<famname>.opm` and \TeX/ is
+able to see it in your filesystem then you can type \^`\fontfam``[<famname>]` and
+the file is read, so the information about font family is loaded. The name
+`<famname>` must be lowercase and without spaces in the file name
+`f-<famname>.opm`. On the other hand the `\fontfam` command gives more tolerance:
+you can write uppercase letters and spaces here. The spaces are ignored and
+letters are converted to lowercase.
+For example `\fontfam [LM Fonts]` is equivalent to \fontfam [LMfonts] and both
+commands load the file `f-lmfonts.opm`.
+
+You can use your font file in sense of previous paragraph without
+registering it. But problem is that such families are not listed when
+`\fontfam[?]` is used and it is not included in font catalogue when
+`\fontfam[catalog]` is printed. The list of families taken in the catalogue and
+listed on the terminal is declared in two files: `fams-ini.opm` and
+`fams-local.opm`. The second file is optional. User can create it and write to
+it the information about user-defined families using the same syntax as in
+existed file `fams-ini.opm`.
+
+The information from the user's `fams-local.opm` file has precedence.
+For example `fams-ini.opm` declares aliases Times$\to$Termes etc. If you
+have original Times purchased from Adobe then you can register your
+declaration about Times family in `fams-local.opm`. When an user write
+`\fontfam[Times]` then orginal Times (no Termes) is used in such case.
+
+The `fams-ini.opm` and `fams-local.opm` files use the macros
+`\_famifo`, `\_famalias` and `\_famtext`. See the example from
+`fams-ini.tex`:
+
+{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}
+ \def\docfile{fams-ini.opm}
+\verbinput (3-27) fams-ini.opm
+... etc.
+}
+\medskip
+
+The \^`\_faminfo` commad has the syntax:
+\begtt \catcode`\<=13
+\_faminfo [<Family Name>] {<comments>} {<file-name>}
+ { <mod-plus-vars> }
+\endtt
+%
+The `<mod-plus-vars>` data is used only when printing catalogue. It consists with
+one or more pairs `<mods>: {<vars>} <mods>: {<vars>}` etc.
+For each pair: each modifiers (separated by comma) are applied to each <vars>
+and prepared sample is printed. The `-` character means no modifiers
+should be applied.
+
+The \^`\_famalias` declares an alias to the last
+declared family.
+
+The \^`\_famtext` writes a line to the terminal and to the log file when all
+families are listed.
+
diff --git a/macros/luatex/optex/base/fnotes.opm b/macros/luatex/optex/base/fnotes.opm
new file mode 100644
index 0000000000..3a1f28cfc2
--- /dev/null
+++ b/macros/luatex/optex/base/fnotes.opm
@@ -0,0 +1,175 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \fnote {Footnotes, marginal notes OpTeX <2020-03-20>} % loaded in format
+
+ \_doc -----------------------------
+ \`\_gfnotenum` is conter which counts footnotes globally in the document.
+ whole document, chapters, pages.\nl
+ \`\_lfnotenum` is counter which counts footnotes at each chapter from one.
+ It is used for local page footnote counters too.\nl
+ \`\_ifpgfnote` says that footnote numbers are counted on each page from
+ one. We need to run `\openref` in such case.\nl
+ \`\fnotenum` is a macro which expands to footnote number counted in declared part.\nl
+ \`\fnotenumchapters` declares footnotes numbered in each chapter from one
+ (default), \`\fnotenumglobal` declares footnotes numbered in whole
+ document from one and \`\fnotenumpages` declares footnotes numbered
+ at each page from one.
+ \_cod -----------------------------
+
+\_newcount\_gfnotenum \_gfnotenum=0
+\_newcount\_lfnotenum
+
+\_newifi \_ifpgfnote
+\_def \_fnotenumglobal {\_def\_fnotenum{\_the\_gfnotenum}\_pgfnotefalse}
+\_def \_fnotenumchapters {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse}
+\_def \_fnotenumpages {\_def\_fnotenum{\_trycs{_fn:\_the\_gfnotenum}{?}}\_pgfnotetrue}
+\_fnotenumchapters % default are footnotes counted from one in each chapter
+\_def \fnotenum{\_fnotenum}
+\_public \fnotenumglobal \fnotenumchapters \fnotenumpages ;
+\_let \runningfnotes = \fnotenumglobal % for backward compatibility
+
+ \_doc -----------------------------
+ The \`\_printfnotemark` prints the footnote mark. You can re-define this
+ macro if you want another design of footnotes. For example
+ \begtt
+ \fnotenumpages
+ \def \_printfnotemark {\ifcase 0\fnotenum\or
+ *\or**\or***\or$^\mathbox{†}$\or$^\mathbox{‡}$\or$^\mathbox{††}$\fi}
+ \endtt
+ This code gives footnotes* and ** and*** and$^\mathbox{†}$ etc.\
+ and it supposes that there are no more than 6 footnotes at one page.
+
+ If you want to distinguish between footnote marks in the text and in the front of
+ footnote itself, then you can define `\_printfnotemarkA` and `\_printfnotemarkB`.
+
+ The \`\fnotelinks``<colorA><colorB>` implements the hyperlinked footnotes
+ (from text to footnote and backward).
+ \_cod -----------------------------
+
+\_def \_printfnotemark {$^{\_fnotenum}$} % default footnote mark
+\_def \_printfnotemarkA {\_printfnotemark} % footnote marks used in text
+\_def \_printfnotemarkB {\_printfnotemark} % footnote marks used in front of footnotes
+
+\_def \_fnotelinks#1#2{% <inText color> <inFootnote color>
+ \_def\_printfnotemarkA{\_link[fnt:\_the\_gfnotenum]{\_localcolor#1}{\_printfnotemark}%
+ \_dest[fnf:\_the\_gfnotenum]}%
+ \_def\_printfnotemarkB{\_link[fnf:\_the\_gfnotenum]{\_localcolor#2}{\_printfnotemark}%
+ \_dest[fnt:\_the\_gfnotenum]}%
+}
+\public \fnotelinks ;
+
+ \_doc ----------------------------
+ Each footnote saves the \`\_Xfnote` (without parameter) to the `.ref`
+ file (if `\openref`). We can create the mapping from `<gfnotenum>` to`<pgfnotenum>`
+ in the macro `\_fn:<fnotenum>`. Each \^`\_Xpage` macro sets the
+ `\_lfnotenum` to zero.
+ \_cod ----------------------------
+
+\_def \_Xfnote {\_incr\_lfnotenum \_incr\_gfnotenum
+ \_sxdef{_fn:\_the\_gfnotenum}{\_the\_lfnotenum}}
+
+ \_doc ----------------------------
+ The \`\fnote` `{<text>}` macro is simple, \`\fnotemark` and \^`\fnotetext`
+ does the real work.
+ \_cod ----------------------------
+
+\_def\_fnote{\_fnotemark1\_fnotetext}
+\_def\_fnotemark#1{{\_advance\_gfnotenum by#1\_advance\_lfnotenum by#1\_relax \_printfnotemarkA}}
+
+ \_doc ----------------------------
+ The \`\fnotetext` calls \^`\_opfootnote` which is equivalent to plain \TeX/
+ \^`\vfootnote`. It creates new data to Insert \^`\footins`. The only
+ difference is that we are able to propagate a macro parameter into Insert group
+ before the text is printed (see section \ref[output]).
+ This propagated macro is \`\_fnset` which sets smaller fonts.
+
+ Note that \^`\vfootnote` and \^`\_opfootnote` does't read the text as a
+ parameter but during normal horizontal mode. This is reason why catcode
+ changes (for example in-line verbatim) can be used here.
+ \_cod ----------------------------
+
+\_def\_fnotetext{\_incr\_gfnotenum \_incr\_lfnotenum % global increment
+ \_ifpgfnote \_openref \_fi
+ \_wref \_Xfnote{}%
+ \_ifpgfnote \_ifcsname _fn:\_the\_gfnotenum \_endcsname \_else
+ \_opwarning{unknown \_noexpand\fnote mark. TeX me again}
+ \_fi\_fi
+ \_opfootnote\_fnset\_printfnotemarkB
+}
+\_def\_fnset{\_everypar={}\_scalemain \_typoscale[800/800]}
+
+\_public \fnote \fnotemark \fnotetext ;
+
+ \_doc -----------------------------
+ By default \`\mnote``{<text>}` are in right margin at odd pages and they are in left
+ margin at even pages. The `\mnote` macro saves its position to `.ref`
+ file as \`\_Xmnote` without parameter. We define `\_mn:<mnotenum>` as
+ `\right` or `\left` when the `.ref` file is read.
+ The `\ifnum 0`$\le$`0#2` trick returns true if `<pageno>` has numeric type and false
+ if it is non-numeric type (Roman numeral, for example). We prefer to use
+ `<pageno>`, but only if it has numeric type. We use `<gpageno>` in other cases.
+ \_cod -----------------------------
+
+\_newcount\_mnotenum \_mnotenum=0 % global counter of mnotes
+\_def \_Xmnote {\_incr\_mnotenum \_ea \_XmnoteA \_currpage}
+\_def \_XmnoteA #1#2{% #1=<gpageno> #2=<pageno>
+ \_sxdef{_mn:\_the\_mnotenum}{\_ifodd\_numtype{#2}{#1} \_right \_else \_left \_fi}}
+\_def \_numtype #1#2{\_ifnum 0<0#1 #1\_else #2\_fi}
+
+ \_doc -----------------------------
+ User can declare \`\fixmnotes``\left` or \^`\fixmnotes``\right`. It defines
+ \`\_mnotesfixed` as `\_left` or `\_right` which declares the placement
+ of all marginal notes and such declaration has a precedence.
+ \_cod -----------------------------
+
+\_def \_fixmnotes #1{\_edef\_mnotesfixed{\_cs{_\_csstring #1}}}
+\_public \fixmnotes ;
+
+ \_doc -----------------------------
+ The outer box of marginal note has zero width and zero depth and it is appended
+ after current line using `\vadjust` primitive or it is inverted to vertical mode
+ as a box with `\vskip-\baselineskip` followed.
+ \_cod -----------------------------
+
+\_long\_def\_mnote#1{\_ifvmode {\_mnoteA{#1}}\_nobreak\_vskip-\_baselineskip \_else
+ \_lower\_dp\_strutbox\_hbox{}\_vadjust{\_kern-\_dp\_strutbox \_mnoteA{#1}\_kern\_dp\_strutbox}%
+ \_fi
+}
+\_public \mnote ;
+
+ \_doc -----------------------------
+ The \`\_mnoteA` macro does the real work. The \`\_lrmnote``{<left>}{<right>}`
+ uses only first or only second parameter depending on the left or right
+ marginal note.
+ \_cod -----------------------------
+
+\_long\_def\_mnoteA #1{\_incr\_mnotenum
+ \_ifx\_mnotesfixed\_undefined
+ \_ifcsname _mn:\_the\_mnotenum \_endcsname
+ \_edef\_mnotesfixed{\_cs{_mn:\_the\_mnotenum}}%
+ \_else
+ \_opwarning{unknown \_noexpand\mnote side. TeX me again}\_openref
+ \_def\_mnotesfixed{\_right}%
+ \_fi\_fi
+ \_hbox to0pt{\_wref\_Xmnote{}\_everypar={}%
+ \_lrmnote{\_kern-\_mnotesize \_kern-\_mnoteindent}{\_kern\_hsize \_kern\_mnoteindent}%
+ \_vbox to0pt{\_vss \_setbox0=\_vtop{\_hsize=\_mnotesize
+ \_lrmnote{\_leftskip=0pt plus 1fill \_rightskip=0pt}
+ {\_rightskip=0pt plus 1fil \_leftskip=0pt}%
+ {\_the\_everymnote\_noindent#1\_endgraf}}%
+ \_dp0=0pt \_box0 \_kern\_mnoteskip \_global\_mnoteskip=0pt}\_hss}%
+}
+\_def \_lrmnote#1#2{\_ea\_ifx\_mnotesfixed\_left #1\_else #2\_fi}
+
+ \_doc -----------------------------
+ We don't want to process `\fnote`, `\fnotemark`, `\mnote` in TOC, headlines
+ nor outlines.
+ \_cod -----------------------------
+
+\_regmacro {\_def\fnote#1{}} {\_def\fnote#1{}} {\_def\fnote#1{}}
+\_regmacro {\_def\fnotemark#1{}} {\_def\fnotemark#1{}} {\_def\fnotemark#1{}}
+\_regmacro {\_def\mnote#1{}} {\_def\mnote#1{}} {\_def\mnote#1{}}
+
+\_endcode % -------------------------------------
+
+
diff --git a/macros/luatex/optex/base/fonts-catalog.opm b/macros/luatex/optex/base/fonts-catalog.opm
new file mode 100644
index 0000000000..de45dd3dcf
--- /dev/null
+++ b/macros/luatex/optex/base/fonts-catalog.opm
@@ -0,0 +1,135 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \_undefined {Font catalogue <2020-02-26>} % loaded on demand by \fontfam[catalog]
+
+\_initunifonts
+\_begingroup
+
+\_istoksempty\_catalogmathsample \_iftrue \_noloadmath \_fi
+\_let\_ttfixed=\_tentt
+\_fontlet\_smalltt=\_tentt at7pt
+\_suppressfontnotfounderror=1
+
+\_lowercase\_ea{\_ea\_def\_ea\_cataloglist\_ea{\_the\_catalogonly}}
+\_lowercase\_ea{\_ea\_def\_ea\_catalognolist\_ea{\_the\_catalogexclude}}
+
+\_ifx\_cataloglist\_empty \_else
+ \_addto\_cataloglist{ }
+ \_edef\_cataloglist{\_ea\_removespaces\_cataloglist{} }
+\_fi
+\_ifx\_catalognolist\_empty \_else
+ \_addto\_catalognolist{ }
+ \_edef\_catalognolist{\_ea\_removespaces\_catalognolist{} }
+\_fi
+
+\_def\_faminfo [#1]#2#3#4{%
+ \_bgroup
+ \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}%
+ \_edef\_act{\_noexpand\_isinlist{,\_cataloglist,}{,\_famname,}}\_act
+ \_iftrue \def\_cataloglist{}\_fi
+ \_edef\_act{\_noexpand\_isinlist{,\_catalognolist,}{,\_famname,}}\_act
+ \_iftrue \def\_cataloglist{.}\_fi
+ \_ifx\_cataloglist\_empty
+ \_ifx^#4^\_else
+ \_bigskip {\_ttfixed\_string\fontfam [#1] -- (#2)\_par}
+ \_input #3.opm
+ \_ifexistfam \_nobreak\_medskip \_dosamples #4:{}
+ \_ifx\_mathfaminfo\_empty
+ \_else \_istoksempty\_catalogmathsample
+ \_iftrue {\_ttfixed \$Default math font\$: \_mathfaminfo \_par}
+ \_else Default math font (\_mathfaminfo): \_the\_catalogmathsample \_par
+ \_fi\_fi
+ \_else {\_qquad\_ttfixed ... family skipped, fonts not found in your system.}
+ \_fi\_fi\_fi
+ \_egroup
+}
+\_def\_dosamples #1:#2{\_ifx^#2^\_else
+ \_def\_printvars{#2}%
+ \_ea\_dosamplesA\_romannumeral-`\.#1,,%
+ \_ea\_dosamples\_fi
+}
+\_def\_dosamplesA#1,{%
+ \_ifx^#1^\_else
+ \_ifx-#1\_def\_usemodifiers{}\_else \_def\_usemodifiers{#1}\_fi
+ \_ea \_dosamplesB \_printvars \_relax
+ \_ea \_dosamplesA \_fi
+}
+\_def\_dosamplesB#1{%
+ \_ifx\_relax#1 \_else
+ {\_ttfixed \_detokenize\_ea{\_usemodifiers}\_detokenize{#1}\_unskip:}
+ {\_usemodifiers #1\_ea\_ifx\_the\_font \_nullfont
+ \_ttfixed ... This font isn't available in your system.%
+ \_else \_the\_catalogsample \_fi }\_par
+ \_ea \_dosamplesB \_fi
+}
+
+\_def\_wlog#1{\_nobreak\_smallskip
+ \_hbox to\_hsize{\_hskip25pt
+ \_edef\_tmp{#1}\_replstring\_tmp{^^J}{\_par}%
+ \_smalltt \_noindent \_ea \string \_mainfamcommand
+ \_vtop{\leftskip=1em \_baselineskip=9pt \_tmp \_par}\_hss
+ }
+}
+
+\_def\0#1{\_ifnum#1<10 0\_fi\_the#1}
+\_footline={\_hfil\_ttfixed\_the\_pageno\_hfil}
+\_headline={\_ttfixed Font Catalogue generated by \_OpTeX/ \_hfill \_the\_year-\0\_month-\0\_day}
+\_parindent=0pt
+\_ttfixed
+
+\_input fams-ini.opm
+
+\_isfile {fams-local.opm}\_iftrue \_input fams-local.opm \_fi
+
+\_endgroup
+
+\parindent=0pt
+
+\nonum\sec Customization of the catalogue
+
+
+You can redeclare the printed sample of each font by:
+
+\begtt
+\catalogsample={Hello world!}
+\endtt
+
+before \code{\\fontfam[catalog]} command is used. You can specify
+\code{\\catalogmathsample} if you want to show default math fonts too, for example
+
+\begtt
+\catalogmathsample={Gamma function is defined as
+ $$
+ \Gamma(z) = \int_0^\infty x^{z-1} e^{-x}{\rm d}x, \quad \Re(z)>0.
+ $$}
+\endtt
+%
+The \code{\\catalogmathsample} is empty by default, so math fonts are not loaded,
+only the family of default math font is listed.
+
+\bigskip
+You can restrict the families to be printed in catalogue by:
+
+\begtt
+\catalogonly={Termes, Latin Modern, Heros}
+\endtt
+
+If the \code{\\catalogonly} is empty (this is default value) then all families are
+printed but families listed in the \code{\\catalogexclude} are excluded. For example
+
+\begtt
+\catalogexclude={Latin Modern, XCharter}
+\endtt
+
+The \code{\\cataogexclude} is empty by default.
+
+\bigskip The font families printed in the catalogue must be declared by the
+\code{\\_faminfo} command in the file \code{fams-ini.opm} (declarations used
+as default for \OpTeX/) or in the file \code{fams-local.opm}. The second file
+does not exist by default but user can create it. The syntax rules are
+described in the \code{fams-ini.opm} file.
+
+
+\_endcode % -------------------------------------
+
+ \ No newline at end of file
diff --git a/macros/luatex/optex/base/fonts-opmac.opm b/macros/luatex/optex/base/fonts-opmac.opm
new file mode 100644
index 0000000000..7b83138335
--- /dev/null
+++ b/macros/luatex/optex/base/fonts-opmac.opm
@@ -0,0 +1,175 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \typosize {Font managing macros from OPmac <2020-04-28>} % loaded in format
+
+ \_doc -----------------------------
+ \`\typosize` `[<font-size>/<baselineskip>]` sets given parameters.
+ It sets text font size by the \^`\setfontsize` macro and math font sizes
+ by setting internal macros \^`\_sizemtext`, \^`\_sizemscript` and
+ \^`\_sizemsscript`. It uses common concept font thes sizes: 100\,\%,
+ 70\,\% and 50\,\%.
+ The \^`\_setmainvalues` sets the parameters as main values when
+ the `\_typosize` is called first.
+ \_cod -----------------------------
+
+\_protected\_def \_typosize [#1/#2]{%
+ \_textfontsize{#1}\_mathfontsize{#1}\_setbaselineskip{#2}%
+ \_setmainvalues \_ignorespaces
+}
+\_protected\_def \_textfontsize #1{\_if$#1$\_else \_setfontsize{at#1\_ptunit}\_fi}
+
+\_def \_mathfontsize #1{\_if$#1$\_else
+ \_tmpdim=#1\_ptunit
+ \_edef\_sizemtext{\_ea\_ignorept \_the\_tmpdim \_ptmunit}%
+ \_tmpdim=0.7\_tmpdim
+ \_edef\_sizemscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}%
+ \_tmpdim=#1\_ptunit \_tmpdim=0.5\_tmpdim
+ \_edef\_sizemsscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}%
+ \_fi
+}
+\_public \typosize ;
+
+ \_doc -----------------------------
+ \`\typoscale` `[<font-factor>/<baseline-factor>]` scales
+ font size and baselineskip by given factors in respect to current values.
+ It calculates the \^`\typosize` parameters and runs the \^`\typosize`.
+ \_cod -----------------------------
+
+\_protected\_def \_typoscale [#1/#2]{%
+ \_ifx$#1$\_def\_tmp{[/}\_else
+ \_settmpdim{#1}\_optsize
+ \_edef\_tmp{[\_ea\_ignorept\_the\_tmpdim/}\_fi
+ \_ifx$#2$\_edef\_tmp{\_tmp]}\_else
+ \_settmpdim{#2}\_baselineskip
+ \_edef\_tmp{\_tmp \_ea\_ignorept\_the\_tmpdim]}\_fi
+ \_ea\_typosize\_tmp
+}
+\_def\_settmpdim#1#2{%
+ \_tmpdim=#1pt \_divide\_tmpdim by1000
+ \_tmpdim=\_ea\_ignorept \_the#2\_tmpdim
+}
+\_public \typoscale ;
+
+ \_doc -----------------------------
+ \`\_setbaselineskip` `{<baselineskip>}` sets new `\baselineskip` and
+ more values of registers which are dependent on the `<baselineskip>`
+ including the \^`\strutbox`.
+ \_cod -----------------------------
+
+\_def \_setbaselineskip #1{\_if$#1$\_else
+ \_tmpdim=#1\_ptunit
+ \_baselineskip=\_tmpdim \_relax
+ \_bigskipamount=\_tmpdim plus.33333\_tmpdim minus.33333\_tmpdim
+ \_medskipamount=.5\_tmpdim plus.16666\_tmpdim minus.16666\_tmpdim
+ \_smallskipamount=.25\_tmpdim plus.08333\_tmpdim minus.08333\_tmpdim
+ \_normalbaselineskip=\_tmpdim
+ \_jot=.25\_tmpdim
+ \_maxdepth=.33333\_tmpdim
+ \_setbox\_strutbox=\_hbox{\_vrule height.709\_tmpdim depth.291\_tmpdim width0pt}%
+ \_fi
+}
+
+ \_doc -----------------------------
+ \`\_setmainvalues` sets the current font size and `\baselineskip`
+ values to the \`\mainfosize` and \hbox{\`\mainbaselineskip`} registers.
+ It redefines itself in order to set the main values only first.
+ \nl
+ \`\scalemain` returns to these values if they were set. Else they are set
+ to 10/12\,pt.
+ \_cod -----------------------------
+
+\_newskip \_mainbaselineskip \_mainbaselineskip=0pt \_relax
+\_newdimen \_mainfosize \_mainfosize=0pt
+
+\_def\_setmainvalues {%
+ \_mainbaselineskip=\_baselineskip
+ \_mainfosize=\_optsize
+ \_topskip=\_mainfosize \_splittopskip=\_topskip
+ \_ifmmode \_else \_bf \_it \_bi \_rm \_fi % load all basic variants of the family
+ \_normalmath % load fonts if \typosize is running first
+ \_let \_setmainvalues =\_setmainvaluesL
+}
+\_def\_setmainvaluesL {\_ifmmode \_normalmath \_else
+ \_rm \_everymath={\_normalmath}\_everydisplay={\_normalmath}\_fi}
+\_def\_scalemain {%
+ \_ifdim \_mainfosize=0pt
+ \_mainfosize=10pt \_mainbaselineskip=12pt
+ \_let \_setmainvalues=\_setmainvaluesL
+ \_fi
+ \_optsize=\_mainfosize \_baselineskip=\_mainbaselineskip
+}
+\_public \scalemain \mainfosize \mainbaselineskip ;
+
+ \_doc -----------------------------
+ \`\thefontsize` `[<size>]` and \`\thefontscale` `[<factor>]`
+ do modification of the size of the current font. They are implemented by the
+ \^`\newcurrfontsize` macro.
+ \_cod -----------------------------
+
+\_protected\_def\_thefontsize[#1]{\_if$#1$\_else
+ \_tmpdim=#1\_ptunit
+ \_newcurrfontsize{at\_tmpdim}%
+ \_fi
+ \_ignorespaces
+}
+\_protected\_def\_thefontscale[#1]{\_ifx$#1$\_else
+ \_tmpdim=#1pt \_divide\_tmpdim by1000
+ \_tmpdim=\_ea\_ea\_ea\_ignorept \_pdffontsize\_font \_tmpdim
+ \_newcurrfontsize{at\_tmpdim}%
+ \_fi
+ \_ignorespaces
+}
+\_public \thefontsize \thefontscale ;
+
+ \_doc -----------------------------
+ \`\em` keeps the weight of the current vaiant and switches
+ roman $\leftrightarrow$ italic. It adds the italic correction by
+ the \`\_additcorr` and \`\_afteritcorr` macros. The second does not
+ add italic correction if the next character is dot or comma.
+ \_cod -----------------------------
+
+\_protected\_def\_em {%
+ \_ea\_ifx \_the\_font \_tenit \_additcorr \_rm \_else
+ \_ea\_ifx \_the\_font \_tenbf \_bi\_aftergroup\_afteritcorr\_else
+ \_ea\_ifx \_the\_font \_tenbi \_additcorr \_bf \_else
+ \_it \_aftergroup\_afteritcorr\_fi\_fi\_fi
+}
+\_def\_additcorr{\_ifdim\_lastskip>0pt
+ \_skip0=\_lastskip \_unskip\_italcorr \_hskip\_skip0 \_else\_italcorr \_fi}
+\_def\_afteritcorr{\_futurelet\_next\_afteritcorrA}
+\_def\_afteritcorrA{\_ifx\_next.\_else\_ifx\_next,\_else \_italcorr \_fi\_fi}
+\_let\_italcorr=\/
+
+ \_doc -----------------------------
+ The \`\boldify` macro does `\let\it\bi` and `\let\normalmath=\boldmath`.
+ \_cod -----------------------------
+
+\_protected\_def \_boldify {%
+ \_let \_setmainvalues=\_setmainvaluesL
+ \_let\it =\_bi \_let\rm =\_bf \_let\_normalmath=\_boldmath \_bf
+}
+\_public \em \boldify ;
+
+ \_doc -----------------------------
+ We need to use a font selector for default pagination. Because we don't
+ know what default font size will be selected by the user, we use this
+ \`\_rmfixed` macro. It sets the `\rm` font from default font size
+ (declared by first \^`\typosize` command and redefines itself be only
+ the font switch for next pages.
+ \_cod -----------------------------
+
+\_def \_rmfixed {% used in default \footline
+ {\_ifdim\_mainfosize=0pt \_mainfosize=10pt \_fi
+ \_fontdef\_rmfixed{\_setfontsize{at\mainfosize}\_resetmod\_rm}%
+ \_global\_let\_rmfixed=\_rmfixed} % next use will be font switch only
+ \_rmfixed
+}
+\_let \rmfixed = \_tenrm % user can redefine it
+
+
+\_endcode % -------------------------------------
+
+History:
+2020-04-28 \boldify: removed \let\_rm=\_bf
+2020-04-14 \_setmainvaluesL: \_ifmmode test added
+2020-03-27 \_setmainvalues: \_splittopskip=\_topskip added
diff --git a/macros/luatex/optex/base/fonts-preload.opm b/macros/luatex/optex/base/fonts-preload.opm
new file mode 100644
index 0000000000..2ab3790f8f
--- /dev/null
+++ b/macros/luatex/optex/base/fonts-preload.opm
@@ -0,0 +1,35 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \tenrm {Latin Modern fonts (EC) preloaded <2020-01-23>} % loaded in format
+
+% Only few text fonts are preloaded:
+
+\_font\_tenrm=ec-lmr10 % roman text
+\_font\_tenbf=ec-lmbx10 % boldface extended
+\_font\_tenit=ec-lmri10 % text italic
+\_font\_tenbi=ec-lmbxi10 % bold italic
+\_font\_tentt=ec-lmtt10 % typewriter
+\_tenrm
+
+\_public \tenrm \tenbf \tenit \tenbi \tentt ;
+
+\_endcode %---------------------------------------------------
+
+Format in lua\TeX/ can download only non-Unicode fonts. Latin Modern EC is
+loaded here. These fonts are totally unusable in LuaTeX when languages with out
+of ASCII or ISO-8859-1 alphabets are used (for example Czech). We load only
+few 8bit fonts here especially for simple testing the format.
+But, if the user needs to do a more serious work, he/she can
+use `\fontfam` macro in order to load a selected font family of Unicode fonts.
+
+We have a dilemma: when the Unicode fonts cannot be preloaded in format then basic
+font set can be loaded by `\everyjob`. But why to load a set of fonts ta the
+beginning of every job when there is highly likely that the user will
+load something completely different. Our decision is: there is a basic 8bit
+font set and user will load the font at beginning of the document.
+
+The fonts selectors \`\tenrm`, \`\tenbf`, \`\tenit`, \`\tenbi`, \`\tentt`
+are declared as `\public` here but only for backward compatibility. We don't
+use them in the Font Selection System. But the protected versions of these
+control sequences are used in the Font Selection System.
+
diff --git a/macros/luatex/optex/base/fonts-resize.opm b/macros/luatex/optex/base/fonts-resize.opm
new file mode 100644
index 0000000000..5a9f0df40e
--- /dev/null
+++ b/macros/luatex/optex/base/fonts-resize.opm
@@ -0,0 +1,349 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \setfontsize {Font resizing macros <2020-04-17>} % preloaded in format
+
+ \_doc -----------------------------
+ The \`\setfontsize` `{<sizespec>}` saves the `<sizespec>` to the \`\_sizespec` macro.
+ The \`\_optsize` value is calculated from the `<sizespec>`.
+ If the `<sizepec>` is in the `mag<number>` format then the contents of
+ the `\_sizespec` macro is re-calculated to the `at<dimen>` format using
+ previous `\_optsize` value.
+ \par \goodbreak
+ \_cod -----------------------------
+
+\_newdimen \_optsize \_optsize=10pt
+\_newdimen \_defaultoptsize \_defaultoptsize=10pt
+\_newdimen\_lastmagsize
+
+\_def\_setfontsize #1{%
+ \_edef\_sizespec{#1}%
+ \_ea \_setoptsize \_sizespec\_relax
+ \_reloading
+}
+\_def\_setoptsize {\_isnextchar a{\_setoptsizeA}
+ {\_isnextchar m{\_setoptsizeC}{\_setoptsizeB}}}
+\_def\_setoptsizeA at#1\_relax{\_optsize=#1\_relax\_lastmagsize=\_optsize} % at<dimen>
+\_def\_setoptsizeB scaled#1\_relax{\_optsize=\_defaultoptsize\_relax} % scaled<scalenum>
+\_def\_setoptsizeC mag#1\_relax{%
+ \_ifdim\_lastmagsize>0pt \_optsize=\_lastmagsize \_else \_optsize=\_pdffontsize\_font \_fi
+ \_optsize=#1\_optsize
+ \_lastmagsize=\_optsize
+ \_edef\_sizespec{at\_the\_optsize}%
+}
+\_public \setfontsize \defaultoptsize ;
+
+ \_doc -----------------------------
+ \`\_resizefont` `{<variant-name>}\<font switch>`,
+ for example `\resizefont{bf}\_tenbf` resizes the font given by the
+ variant. The variant `XX` have its font switch `\_tenXX`.
+ The \`\_doresizefont``\fontswitch` is used. It works in
+ TFM mode (\`\_doresizetfmfont`) or OTF mode (\^`\_doresizeunifont`).
+ In both modes, it does
+ \begtt \catcode`\<=13
+ \_font \_tenXX = <fontname> \_sizespec
+ \endtt
+ The `<fontname>` is generated by the `\fontname` \TeX/ primitive where
+ \`\_rfontskipat` removes the `at<dimen>` part of the `\_fontname` output.
+ The `<fontname>` is generated differently in OTF mode, see
+ \^`\_doresizeunifont` macro.\nl
+ The \`\_whatresize` is defined as `<variant-name>`.
+ \_cod -----------------------------
+
+\_def\_resizefont#1#2{%
+ \_edef\_whatresize{#1}%
+ \_ifx \_fontselector \_undefined \_doresizefont#2%
+ \_else \_ea \_doresizefont \_fontselector \_fi
+ \_lastmagsize=0pt
+ \_slet{_tryload#1}{_relax}%
+}
+\_def\_doresizetfmfont#1{\_logfont{#1}%
+ \_ea\_font\_ea#1\_ea\_rfontskipat
+ \_fontname \_cs{_ten\_whatresize} \_relax\_space \_sizespec \_relax
+}
+\_let\_doresizefont=\_doresizetfmfont
+\_def\_logfont#1{} % default is no logging of used fonts
+
+\_def\_rfontskipat#1{\_ifx#1"\_ea\_rfskipatX \_else\_ea\_rfskipatN\_ea#1\_fi}
+\_def\_rfskipatX #1" #2\_relax{"\_whichtfm{#1}"}
+\_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}}
+
+ \_doc -----------------------------
+ \`\fontdef` `<font switch>{<modifiers><variant selector>}`
+ opens group, runs `<modifiers><variant selector>` (i.e.\ it runs `#2` parameter).
+ The font switch `#1` saved in the \`\_fontselector` macro is re-declared
+ because the variant selector runs the \^`\_resizefont`. Now, we need to
+ keep the current meaning of the font switch `#1` but we must leave the
+ opened group. This is done by the \`\_keepmeaning` macro.
+ \nl
+ \`\fontlet` `<font switch A> <font switch B> <size spec>` does
+ \begtt \catcode`\<=13
+ \font <font switch A> = <fontname> <sizespec>
+ \endtt
+ The `<fontname>` is extracted using the primitive command `\_fontname <font switch B>`.
+ \_cod -----------------------------
+
+\_def \_fontdef #1#2{\_begingroup
+ \_ifx\_fontselector\_undefined \_def\_fontselector{#1}\_fi
+ \_reloading #2%
+ \_ea \_keepmeaning \_fontselector \_endgroup
+}
+\_def\_fontlet#1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else
+ \_ea\_font\_ea#1\_ea\_rfontskipat\_fontname#2 \_relax\_space \_fi
+}
+\_def \_keepmeaning #1#2{\_global\_let\_keepmeaningdata=#1%
+ #2\_let#1=\_keepmeaningdata \_global\_let\_keepmeaningdata=\_undefined
+}
+\_public \fontdef \fontlet ;
+
+ \_doc -----------------------------
+ \`\newcurrfontsize` `<size spec>` sets current font size to the `<size spec>`
+ It is implemented by \^`\fontlet`.
+ The font switch of the current font is extracted by `\_the\_font`.
+ We must re-create the control sequence `\_the\_font` because
+ its original meaning is set to \"inaccessible" by \TeX/ when `\font`
+ primitive is started.
+ \nl
+ \`\resizethefont` is implemented by `\newcurrfontsize` using data from
+ the \^`\_sizespec` macro.
+ \_cod -----------------------------
+
+\_def \_newcurrfontsize #1{% \newcurrfontsize{at25pt}
+ \_edef\_tmp{\_ea\_csstring \_the\_font}%
+ \_ea \_fontlet \_csname \_tmp\_ea\_endcsname \_the\_font \_space #1\_relax
+ \_csname \_tmp\_endcsname
+}
+\_protected\_def \_resizethefont{\_newcurrfontsize\_sizespec}
+
+ \_public \newcurrfontsize \resizethefont ;
+
+ \_doc -----------------------------
+ The variant selector is defined by `\protected\def\XX{\_tryloadXX \_tenXX}`
+ The `\_tryloadXX` can be in `\_relax` state if no font modifiers were
+ declared. But normally it does \^`\_resizefont``{XX}\tenXX`. This meaning
+ is activated by the \`\_reloading` macro.
+ \_cod -----------------------------
+
+\_def\_reloading{\_loadf{rm}\_tenrm \_loadf{bf}\_tenbf
+ \_loadf{it}\_tenit \_loadf{bi}\_tenbi
+}
+\_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}}
+\_def\_tryloadtt{\_resizefont{tt}\_tentt}
+
+\_let\_tryloadrm=\_relax
+\_let\_tryloadbf=\_relax
+\_let\_tryloadit=\_relax
+\_let\_tryloadbi=\_relax
+
+ \_doc ----------------------------
+ The font selection system allows to use \`\currvar`
+ instead explicitly specified variant selector. The current variant
+ is extracted from `\the\font` output which could be `\_tenXX` control
+ sequence. Then `\currvar` expands to `\_rm` or `\_it` etc.
+ \_cod ----------------------------
+
+\_protected \_def \_currvar{\_cs{_currvar:\_ea \_csstring \_the\_font}}
+\_sdef{_currvar:_tenrm}{\_rm}
+\_sdef{_currvar:_tenbf}{\_bf}
+\_sdef{_currvar:_tenit}{\_it}
+\_sdef{_currvar:_tenbi}{\_bi}
+\_sdef{_currvar:_tentt}{\_tt}
+\_public \currvar ;
+
+ \_doc -----------------------------
+ The \`\_regtfm` `<font id> <optical size data>`
+ saves the <optical size data> concerned to `<font id>`.
+ The `<optical size data>` is in the form as show below in the code where
+ `\regtfm` is used.
+ \nl
+ The \`\_wichtfm` `<fontname>` expands to the `<fontname>` or to the corrected
+ `<fontname>` read from the `<optical size data>`. It is used in the
+ \^`\_rfontskipat` macro and it is used in \^`\fontlet` macro.
+ It means that each `<fontname>` generated by the `\fontname` primitive in the
+ `\fontlet` macro is processed by the `\_whichtfm`. The real `<fontname>` or
+ corrected `<fontname>` (depending on the optical data does not exist or exist)
+ is the output of the expansion before `\font` primitive takes this output
+ as its parameter.
+
+ The implementation detail: The `\_<font id>:reg` is defined as the
+ `<optical size data>` and all control sequences `\_<fontname>:reg`
+ from this data line has the same meaning because of the
+ \`\_reversetfm` macro. The `\_whichtfm` expands this data line and apply
+ \`\_dowhichtfm`. This macro select the right result from the data line
+ by testing with the current `\_optsize` value.
+ \_cod -----------------------------
+
+\_def\_regtfm #1 0 #2 *{\_ea\_def \_csname _#1:reg\_endcsname{#2 16380 \_relax}%
+ \_def\_tmpa{#1}\_reversetfm #2 * %
+}
+\_def\_reversetfm #1 #2 {% we need this data for \_setmathfamily
+ \_ea\_let\_csname _#1:reg\_ea\_endcsname
+ \_csname _\_tmpa:reg\_endcsname
+ \_if*#2\_else \_ea\_reversetfm \_fi
+}
+\_def\_whichtfm #1{%
+ \_ifcsname _#1:reg\_endcsname
+ \_ea\_ea\_ea \_dowhichtfm
+ \_csname _#1:reg\_ea\_endcsname
+ \_else
+ #1%
+ \_fi
+}
+\_def\_dowhichtfm #1 #2 {%
+ \_ifdim\_optsize<#2pt #1\_ea\_ignoretfm\_else \_ea\_dowhichtfm
+\_fi
+}
+\_def\_ignoretfm #1\_relax{}
+
+ \_doc -----------------------------
+ Optical sizes data for preloaded 8bit Latin Modern fonts:
+ \_cod -----------------------------
+
+\_regtfm lmr 0 ec-lmr5 5.5 ec-lmr6 6.5 ec-lmr7 7.5 ec-lmr8 8.5 ec-lmr9 9.5
+ ec-lmr10 11.1 ec-lmr12 15 ec-lmr17 *
+\_regtfm lmbx 0 ec-lmbx5 5.5 ec-lmbx6 6.5 ec-lmbx7 7.5 ec-lmbx8 8.5 ec-lmbx9 9.5
+ ec-lmbx10 11.1 ec-lmbx12 *
+\_regtfm lmri 0 ec-lmri7 7.5 ec-lmri8 8.5 ec-lmri9 9.5 ec-lmri10 11.1 ec-lmri12 *
+\_regtfm lmtt 0 ec-lmtt10 11.1 ec-lmtt12 *
+
+\_setfontsize {at10pt} % default font size
+
+\_endcode %---------------------------------------------------
+
+
+\sec[setfontsize] Scaling fonts in text mode (low-level macros)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The \^`\setfontsize` `{<size spec>}`
+saves the information about `<size spec>`. This information is taken into
+account when a variant selector (for example `\rm`, `\bf`, `\it`, `\bi`)
+or `\resizethefont` is used. The `<size spec>` can be:
+\begitems
+* `at<dimen>`, for example `\setfontsize{at12pt}`. It gives the desired font size directly.
+* `scaled<scale factor>`, for example `\setfontsize{scaled1200}`. The font is
+ scaled in respect to its native size (which is typically 10\,pt). It
+ behaves like `\font\... scaled<number>`.
+* `mag<decimal number>`, for example `\setfontsize{mag1.2}`. The font is
+ scaled in respect to the current size of the fonts given by the previous
+ \^`\setfontsize` command.
+\enditems
+The initialization value in \OpTeX/ is given by `\setfontsize{at10pt}`.
+
+The \^`\resizethefont` resizes the current font to the size given by previous
+\^`\setfontsize`. For example
+
+\begtt
+ Here is 10 pt text,
+\setfontsize{at12pt} 10 pt text here unchanged...
+\resizethefont and 12 pt text is here.
+\endtt
+%
+The \^`\setfontsize` command acts like {\em font modifier}. It means that it
+saves information about fonts but does not change the font actually until
+variant selector or \^`\resizethefont` is used.
+
+The following example demonstrates the `mag` format of \^`\setfontsize`
+parameter. It is only a curious example probably not used in practical
+typography.
+
+\begtt
+\def\smaller{\setfontsize{mag.9}\resizethefont}
+Text \smaller text \smaller text \smaller text.
+\endtt
+
+If you load a font directly by `\font` primitive and you want to
+create a size-dependent selector for such font then you can use
+\^`\resizethefont`:
+
+\begtt
+\font\tencomfortaa=Comfortaa-Regular-T1 at10pt
+\def\comfortaa{\tencomfortaa\resizethefont}
+
+\comfortaa Here is 10 pt text
+\setfontsize{at12pt}
+\comfortaa Here is 12 pt text
+\endtt
+%
+The example above uses the 8\,bit `tfm` font. You can use Unicode font too, of
+course. The \^`\fontfam` macro initializes the extended `\font` primitive
+features for \LuaTeX/. If you didn't use this command, you must to initialize
+these features by `\initunifonts` command, for example:
+
+\begtt
+\initunifonts
+\font\tencyklop=[cyklop-regular] at10pt % the font cyklop-regular.otf is loaded
+\def\cyklop{\tencyklop\resizethefont}
+
+\cyklop Here is 10 pt text
+\setfontsize{at12pt}
+\cyklop Here is 12 pt text
+\endtt
+
+\secc[fontdef] The \code{\\fontdef} declarator
+
+You can declare `\<newfont>` by the \^`\fontdef` command.
+
+\begtt \catcode`\<=13
+ \fontdef \<newfont> {<font modifiers> \<variant-selector>}
+ example:
+ \fontdef \bigfont {\setfontsize{at15pt}\bf}
+\endtt
+%
+This command runs `<font modifiers> \<variant-selector>` in a group and sets the
+resulting current font as `\<newfont>`.
+
+The resulting `\<newfont>` declared by \^`\fontdef` is \"fixed font switch"
+independent of \^`\setfontsize` and other font modifiers. More exactly, it is
+fixed font switch when it is used but it can depend on the current font
+modifiers and font family and given font modifiers when it is declared.
+
+The parameter of the \^`\fontdef` macro must be exactly finished by the
+variant selector. More information about font modifiers
+and variant selectors are in the section~\ref[fontsystem].
+
+\secc[fontlet] The \code{\\fontlet} declarator
+
+We have another command for scaling: \^`\fontlet` which is able to resize
+arbitrary font given by its font switch.
+This font switch was declared it by the
+`\font` primitive or the `\fontdef` macro.
+
+\begtt \catcode`\<=13
+ \fontlet \<newfont> = \<fontswitch> <sizespec>
+ example:
+ \fontlet \bigfont = \_tenbf at15pt
+\endtt
+
+The resulted `\bigfont` is the same as in previous example where `\fontdef`
+was used. The advantage of `\fontdef` macro will be more clear when you load
+font families by `\fontfam` and you are using more font modifiers declared
+in such families.
+
+Summary: you can declare font switches:
+\begitems
+* by the `\font` primitive if you know the font file,
+* by the \^`\fontlet` command if you know the font switch and the size, or
+* by the \^`\fontdef` command if you know the variant and modifiers.
+\enditems
+
+\secc Optical sizes
+
+There are font families with more font files where almost the same font is
+implemented in various design sizes: `cmr5`, `cmr6`, `cmr7`, `cmr8`, `cmr9`,
+`cmr10`, `cmr12`, `cmr17` for example. This feature is called \"optical
+sizes". \OpTeX/ chooses a font with an optical size closest to desired size
+specified by the \^`\setfontsize`, when `at<dimen>` or `mag<coefficient>` is used.
+When `scaled<scale factor>` is used then optical size is chosen using the value
+of the `\defaultoptsize` register and such font is scaled by the specified
+`<scale factor>`. There is `\defaultoptsize=10pt` by default.
+
+Font collections with optical sizes must be registered by the
+\^`\_regtfm` for `tfm` files or \^`\_regoptsizes` for Unicode fonts.
+\OpTeX/ registers 8bit Latin Moder fonts in the format (`fonts-resize.opm` file)
+and OTF Latin Modern fonts in the `f-lmfonts.opm` file.
+
+\secc Implementation notes
+
+\_endinput
+
+2020-04-17 \resizethefont introduced
+2020-03-17 released
diff --git a/macros/luatex/optex/base/fonts-select.opm b/macros/luatex/optex/base/fonts-select.opm
new file mode 100644
index 0000000000..83ded2f35b
--- /dev/null
+++ b/macros/luatex/optex/base/fonts-select.opm
@@ -0,0 +1,670 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \fontfam {Fonts selection system <2020-03-18>} % preloaded in format
+
+ \_doc -----------------------------
+ The \`\initunifonts` initializes extended `\font` primitive
+ (to be able to load Unicode fonts). Unfortunately, this part of
+ \OpTeX/ depends on \LaTeX/ lua codes `ltluatex.lua` and
+ `luaotfload-main.lua`. And this code need to be declared a
+ control sequence `\e@alloc@attribute@count` by `\countdef` primitive.
+ Moreover, the `\initunifont` switches with
+ the \^`\_doresizefont` macro to OTF mode which is represented by the
+ macro \`\_doresizeunifont`. This mode includes
+ a fallback to TFM mode if \^`\_fontnamegen` is not defined.
+ Finally, the `\initunifnt` sets itself to relax because we need not to do
+ this work twice.
+ \_cod -----------------------------
+
+\_def\_initunifonts {%
+ \_ea\_newcount \_csname e@alloc@attribute@count\_endcsname
+ \_global \_csname e@alloc@attribute@count\_endcsname=-1
+ \_directlua{%
+ require("ltluatex")
+ require('luaotfload-main') local _void = luaotfload.main ()
+ }%
+ \_gdef\_rfskipatX ##1" ##2\_relax{"##1"}%
+ \_global\_let \_doresizefont=\_doresizeunifont
+ \_gdef\_tryloadtt {\_fontdef\_tentt{\_def\_fontnamegen{[lmmono10-regular]}\_rm}}%
+ \_global\_let \_initunifonts=\_relax % we need not to do this work twice
+ \_global\_let \initunifonts=\_relax
+}
+\_gdef\_doresizeunifont #1{\_logfont{#1}%
+ \_ifx\_fontnamegen\_undefined \_doresizetfmfont#1\_else
+ \_font#1={\_fontnamegen} \_sizespec \_relax \_setwsp#1\_relax
+ \_fi
+}
+\_public \initunifonts ;
+
+ \_doc -----------------------------
+ The \`\_famdecl` `[<Family Name>] \<Famselector> {<comment>} {<modifiers>} {<variants>} {<math>}`\nl
+ `{<font for testing>} {\def`\^`\_fontnamegen``{<data>}}` runs \^`\initunifonts`, then
+ checks if `\<Famselector>` is defined. If it is true, then closes the file by
+ `\endinput`. Else it defines `\<Famselector>` and saves it to the \`\_mainfamcommand`
+ macro because the \`\_initfontfamily` needs it. The \`\_currfamily` is set
+ to the `<Famselector>` because the following \^`\moddef` commands need to
+ be in the right font family context. The `\_currfamily` is set to the
+ `<Famselector>` by the `\<Famselector>` too, because `\<Famselector>`
+ must set the right faily context. The font family context is given by the current
+ `\_currfamily` value and by the actual meaning of the \^`\_fontnamegen` macro.
+ \_cod -----------------------------
+
+\_def\_famdecl [#1]#2#3#4#5#6#7#8{%
+ \_initunifonts \_uniaccents
+ \_ifx #2\_undefined
+ \_isfont{#7}\_iffalse
+ \_opwarning{Family [#1] skipped, font "#7" not found}\_ea\_ea\_ea\_endinput \_else
+ \_edef\_currfamily {\_csstring #2}%
+ \_def\_mainfamcommand{#2}\_def\_mathfaminfo{#6}%
+ \_protected\_edef#2{\_def\_noexpand\_currfamily{\_csstring #2}\_unexpanded{#8\_resetmod}}%
+ \_wterm {FONT: [#1] -- \_string#2 \_detokenize{(#3)^^J mods:{#4} vars:{#5} math:{#6}}}%
+ \_fi
+ \_else \_ea #2\_ea\_endinput \_fi
+}
+\_def\_initfontfamily{%
+ \_mainfamcommand \_reloading \_rm
+}
+
+ \_doc -----------------------------
+ \`\_regoptsizes` `<internal-template> <left-output>?<right-output> <resizing-data>`
+ prepares data for using by the \`\_optname` `<internal-template>` macro.
+ The data are saved to the `\_oz:<internal-template>` macro.
+ When the `\_optname` is expanded then the data are scanned by the macro
+ \`\_optnameA` `<left-output>?<right-output> <mid-output> `\code{<}`<size>`
+ in the loop.\nl
+ \`\_optfontalias` `{<template A>}{<template B>}` is defined as
+ `\let\_oz:<templateA>=\_oz:<templateB>`.
+ \_cod -----------------------------
+
+\_def\_regoptsizes #1 #2?#3 #4*{\_sdef{_oz:#1}{#2?#3 #4* }}
+\_def\_optname #1{\_ifcsname _oz:#1\_endcsname
+ \_ea\_ea\_ea \_optnameA \_csname _oz:#1\_ea\_endcsname
+ \_else \_failedoptname{#1}\_fi
+}
+\_def\_failedoptname #1{optname-fails:(#1)}
+\_def\_optnameA #1?#2 #3 <#4 {\_ifx*#4#1#3#2\_else
+ \_ifdim\_optsize<#4pt #1#3#2\_optnameC
+ \_else \_afterfifi \_optnameA #1?#2 \_fi\_fi
+}
+\_def\_optnameC #1* {\_fi\_fi}
+\_def\_afterfifi #1\_fi\_fi{\_fi\_fi #1}
+\_def\_optfontalias #1#2{\_slet{_oz:#1}{_oz:#2}}
+
+ \_doc -----------------------------
+ \`\_fvars` `<rm-template> <bf-template> <it-template> <bi-template>`
+ saves data for usage by the `\_currV` macro. If a template is only dot
+ then previous template is used (it can be used if the font family doesn't
+ dispose with all standard variants).
+ \nl
+ \`\_currV` expands to a template declared by `\_fvars` depending on the
+ `<variant name>`. Usable only of standard four variants. Next variants
+ can be declared by the \^`\famvardef` macro.
+ \nl
+ \`\_fset` `<key>=<value>,...,<key>=<value>` expands to
+ `\def\_<key>V{<value>}` in the loop.
+ \nl
+ \`\_onlyif` `<key>=<value-a>,<value-b>...,<value-z>: {<what>}`
+ runs <what> only if the `\_<key>V` is defined as `<value-a>` or
+ `<value-b>` or ... or `<value-z>`.
+ \_cod -----------------------------
+
+\_def\_fvars #1 #2 #3 #4 {%
+ \_sdef{_fvar:rm}{#1}%
+ \_sdef{_fvar:bf}{#2}%
+ \_ifx.#2\_slet{_fvar:bf}{_fvar:rm}\_fi
+ \_sdef{_fvar:it}{#3}%
+ \_ifx.#3\_slet{_fvar:it}{_fvar:rm}\_fi
+ \_sdef{_fvar:bi}{#4}%
+ \_ifx.#4\_slet{_fvar:bi}{_fvar:it}\_fi
+}
+\_def\_currV{\_cs{_fvar:\_whatresize}}
+\_def\_V{ }
+\_def \_fsetV #1 {\_fsetVa #1,=,}
+\_def \_fsetVa #1=#2,{\_isempty{#1}\_iffalse
+ \_ifx,#1\_else\_sdef{_#1V}{#2}\_ea\_ea\_ea\_fsetVa\_fi\_fi
+}
+\_def \_onlyif #1=#2:#3{%
+ \_edef\_act{\_noexpand\_isinlist{,#2,}{,\_cs{_#1V},}}\_act
+ \_iftrue #3\_fi
+}
+
+ \_doc -----------------------------
+ The \`\moddef` `\<modifier> {<data>}` simply speaking does
+ `\def\<modifier>{<data>}`, but we need to respect
+ the family context. In fact, `\protected\def\_f:<current family>:<modifier>{<data>}` is
+ performed and the `\<modifier>` is defined as
+ \`\_famdepend``\<modifier>{_f:\_currfamily:<modifier>}`. It expands to
+ `\_f:\_currfamily:<modifier>` value if it is defined or it prints
+ warning. When the `\_currfamily` value is
+ changed then we can declare the same `\<modifier>` with different meaning.
+
+ When user declare a prefixed variant of the `\<modifier>` then unprefixed
+ modifier name is used in internal macros, this is reason why we are using
+ the \`\_remifirstunderscore``\_tmp` (where `\_tmp` expands to
+ `_<something>` or to `<something>`. The `\_remifirstunderscore`
+ redefines `\_tmp` in the way that it
+ expands only to `<something>` without the first `_`.
+ \_cod -----------------------------
+
+\_def \_moddef #1#2{\_edef\_tmp{\_csstring#1}\_remfirstunderscore\_tmp
+ \_sdef{_f:\_currfamily:\_tmp}{#2\_reloading}%
+ \_protected \_edef #1{\noexpand\_famdepend\noexpand#1{_f:\noexpand\_currfamily:\_tmp}}%
+ \_ea \_ifx \_csname\_tmp\_endcsname #1\_else
+ \_ea \_public \_csname\_tmp\_endcsname ;\_fi
+}
+\_def\_remfirstunderscore#1{\_ea\_remfirstunderscoreA#1\_relax#1}
+\_def\_remfirstunderscoreA#1#2\_relax#3{\_if _#1\_def#3{#2}\_fi}
+
+\_protected \_def\_resetmod {\_cs{_f:\_currfamily:resetmod}} % private variant of \resetmod
+\_def\_currfamily{} % default current family is empty
+
+\_def\_famdepend#1#2{\_ifcsname#2\_endcsname \_csname#2\_ea\_endcsname \_else
+ \_opwarning{\_string#1 is undeclared in current family "\_currfamily", ignored}\_fi
+}
+\_public \moddef ;
+
+ \_doc -----------------------------
+ The \`\famvardef` `\<XX> {<data>}`
+ uses analogical trick like \^`\moddef` with
+ the \^`\_famdepend` macro. The auxiliary
+ \`\_famvardefA` `\<XX> \_ten<XX> \_tryload<XX> {<data>}` is used.
+ It does:
+ \begitems
+ * `\protected\def \<XX> {\_famdepend \<XX> {_f:\_currfamily:<XX>}}`,
+ * `\def \_f:<current family>:<XX> {\_tryload<XX>\_ten<XX>}` keeps family dependent definition,
+ * `\def \_tryload<XX> {`\^`\fontdef`` \_ten<XX> {<data>}}` loads actually the font `\_ten<XX>`,
+ * `\def \_currvar:_ten<XX> {\<XX>}` in ordef to the \^`\currvar` macro
+ work correctly.
+ \enditems
+ \_cod -----------------------------
+
+\_def\_famvardef#1{\_edef\_tmp{\_csstring#1}\_remfirstunderscore\_tmp
+ \_ea\_famvardefA \_ea#1\_csname _ten\_tmp\_ea\_endcsname
+ \_csname _tryload:\_tmp\_endcsname
+}
+\_def\_famvardefA #1#2#3#4{% #1=\_XX #2=\_tenXX #3=\_tryloadXX #4=data
+ \_isinlist{.\_rm\_bf\_it\_bi\currvar\_currvar}#1\_iftrue
+ \_opwarning{\_string\famvardef:
+ You cannot re-declare private standard variant selector \_string#1}%
+ \_else
+ \_protected\_edef #1{\_noexpand\_famdepend\_noexpand#1{_f:\_noexpand\_currfamily:\_tmp}}%
+ \_sdef{_f:\_currfamily:\_tmp}{#3#2}%
+ \_def#3{\_fontdef#2{#4}}%
+ \_ifx#1\tt \_addto#1{\_fam\_ttfam}\_fi
+ \_sdef{_currvar:\_csstring#2}{#1}%
+ \_fi
+}
+\_public \famvardef ;
+
+ \_doc -----------------------------
+ The \`\fontfam` `[<Font Family>]` does:
+ \begitems
+ * Convert its parameter to lower case and without spaces, e.g.\ `<fontfamily>`.
+ * If the file `f-<fontfamily>.opm` exists read it and finish.
+ * Try to load user defined `fams-local.opm`.
+ * If the `<fontfamily>` is declared in `fams-local.opm` or `fams-ini.opm`
+ read relevant file and finish.
+ * Print the list of declared families.
+ \enditems
+ The `fams-local.opm` is read by the \`\_tryloadfamslocal` macro. It sets
+ itself to `\_relax` because we need not to load this file twice.
+ The \`\_listfamnames` macro prints registered font families to the
+ terminal and to the log file.
+ \_cod -----------------------------
+
+\_def\_fontfam[#1]{%
+ \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}%
+ \_isfile {f-\_famname.opm}\_iftrue \_opinput {f-\_famname.opm}%
+ \_else
+ \_tryloadfamslocal
+ \_edef\_famfile{\_trycs{_famf:\_famname}{}}%
+ \_ifx\_famfile\_empty \_listfamnames
+ \_else \_opinput {\_famfile.opm}%
+ \_fi\_fi
+}
+\_def\_tryloadfamslocal{%
+ \_isfile {fams-local.opm}\_iftrue
+ \_opinput {fams-local.opm}
+ \_fi
+ \_let \_tryloadfamslocal=\_relax % need not to load fams-local.opm twice
+}
+\_def\_listfamnames {%
+ \_wterm{===== List of font families ======}
+ \_begingroup
+ \_let\_famtext=\_wterm
+ \_def\_faminfo [##1]##2##3##4{%
+ \_wterm{ \_space\_noexpand\fontfam [##1] -- ##2}%
+ \_let\_famalias=\_famaliasA}%
+ \_opinput {fams-ini.opm}
+ \_isfile {fams-local.opm}\_iftrue \_opinput {fams-local.opm}\_fi
+ \_message{^^J}%
+ \_endgroup
+}
+\_def\_famaliasA{\_message{ \_space\_space\_space\_space -- alias:}
+ \_def\_famalias[##1]{\_message{[##1]}}\_famalias
+}
+\_public \fontfam ;
+
+ \_doc -----------------------------
+ When the `fams-ini.opm` or `fams-loca.opm` files are read then we need
+ to save ony a mapping from family names or alias names to the font family file
+ names. All other information is ignored in this case. But if these files
+ are read by the `\_listfamnames` macro or when printing a catalog then
+ more infrormation is used and printed.\nl
+ \`\_famtext` does nothing or prints the text on the terminal.
+ \nl
+ \`\_faminfo` `[<Family Name>] {<comments>} {<file-name>} {<mod-plus-vars>}`
+ does\nl `\_def \_famf:<familyname> {<file-name>}` or prints information on
+ the terminal.
+ \nl
+ \`\_famalias` `[<Family Alias>]` does `\def \_famf:<familyalias> {<file-name>}`
+ where `<file-name>` is stored from the previous `\_faminfo` command. Or
+ prints information on the terminal.
+ \_cod -----------------------------
+
+\_def\_famtext #1{}
+\_def\_faminfo [#1]#2#3#4{%
+ \_lowercase{\_edef\_tmp{\_ea\_removespaces #1 {} }}%
+ \_sdef{_famf:\_tmp}{#3}%
+ \_def\_famfile{#3}%
+}
+\_def\_famalias [#1]{%
+ \_lowercase{\_edef\_famname{\_ea\_removespaces #1 {} }}%
+ \_sdef{_famf:\_famname\_ea}\_ea{\_famfile}%
+}
+\_input fams-ini.opm
+\_let\_famfile=\_undefined
+
+ \_doc -----------------------------
+ When the \^`\fontfam``[catalog]` is used then the file
+ `fonts-tatalog.opm` is read. The macro \^`\_faminfo` is redefined here
+ in order to print catalog samples of all declared modifiers/variant
+ pairs. The user can declare different samples and different behavior of
+ the catalog, see the end of catalog listing for more information.
+ The default parameters
+ \`\catalogsample`, \`\catalogmathsample`, \`\catalogonly` and
+ \`\catalogexclude` of the catalog are declared here.
+ \_cod -----------------------------
+
+\_newtoks \_catalogsample
+\_newtoks \_catalogmathsample
+\_newtoks \_catalogonly
+\_newtoks \_catalogexclude
+\_catalogsample={ABCDabcd Qsty fi fl áéíóúüů řžč ÁÉÍÓÚ ŘŽČ 0123456789}
+
+\_public \catalogonly \catalogexclude \catalogsample \catalogmathsample ;
+
+ \_doc -----------------------------
+ The font features are managed in the \`\_fontfeatures` macro.
+ They have their implicit values saved in the \`\_defaultfontfeatures`
+ and the \`\setff` `{<features>}`
+ can add next font features. If there is the same font feature as the newly
+ added one then the old value is removed from the `\_fontfeatures` list.
+ \_cod -----------------------------
+
+\_def \_defaultfontfeatures {+tlig;}
+\_def \_setff #1{%
+ \_ifx^#1^\_let \_fontfeatures=\_defaultfontfeatures
+ \_else \_edef\_fontfeatures{\_fontfeatures #1;}\_fi
+ \_reloading
+}
+\_setff {} % default font features: +tlig;
+\_def\_removefeature #1{%
+ \_isinlist\_fontfeatures{#1}\_iftrue
+ \_def\_tmp ##1#1##2;##3\_relax{\_def\_fontfeatures{##1##3}}%
+ \_ea \_tmp \_fontfeatures \_relax
+ \_fi
+}
+\_public \setff ;
+
+ \_doc -----------------------------
+ The \`\setfontcolor` and \`\setletterspace` are macros based on the
+ special font features provided by \LuaTeX/ (and by \XeTeX/ too but it is not
+ our business). The \`\setwordspace` recalulates the `\fontdimen2,3,4`
+ of the font using the \`\setwsp` macro which is used by the
+ \^`\_doresizeunifont` macro. It activates a dummy font feature `+Ws` too in
+ order the font is reloded by the `\font` primitive (with independent
+ `\fontdimen` registers).
+ \_cod -----------------------------
+
+\_def\_savedfontcolor{}
+\_def\_savedletterspace{}
+\_def\_savedwsp{}
+
+\_def \_setfontcolor #1{\_removefeature{color=}%
+ \_edef\_tmp{\_calculatefontcolor{#1}}%
+ \_ifx\_tmp\_empty \_else \_edef\_fontfeatures{\_fontfeatures color=\_tmp;}\_fi
+ \_reloading
+}
+\_def \_setletterspace #1{\_removefeature{letterspace=}%
+ \_if^#1^\_else \_edef\_fontfeatures{\_fontfeatures letterspace=#1;}\_fi
+ \_reloading
+}
+\_def \_setwordspace #1{%
+ \_if^#1^\_def\_setwsp##1{}\_removefeature{+Ws}%
+ \_else \_def\_setwsp{\_setwspA{#1}}\_setff{+Ws}\_fi
+ \_reloading
+}
+\_def\_setwsp #1{}
+\_def\_setwspA #1#2{\_fontdimen2#2=#1\_fontdimen2#2%
+ \_fontdimen3#2=#1\_fontdimen3#2\_fontdimen4#2=#1\_fontdimen4#2}
+
+\_def\_calculatefontcolor#1{\_trycs{_fc:#1}{#1}} % you can define more smart macro ...
+\_sdef{_fc:red}{FF0000FF} \_sdef{_fc:green}{00FF00FF} \_sdef{_fc:blue}{0000FFFF}
+\_sdef{_fc:yellow}{FFFF00FF} \_sdef{_fc:cyan}{00FFFFFF} \_sdef{_fc:magenta}{FF00FFFF}
+\_sdef{_fc:white}{FFFFFFFF} \_sdef{_fc:grey}{00000080} \_sdef{_fc:lgrey}{00000025}
+\_sdef{_fc:black}{} % ... you can declare more colors...
+
+\_public \setfontcolor \setletterspace \setwordspace ;
+
+\_endcode %---------------------------------------------------
+
+
+\sec[fontsystem] The Font Selection System
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The basic principles of the Font Selection System used in \OpTeX/
+was documented in the section~\ref[fontfam].
+
+\secc Terminology
+
+We distinguish between
+\begitems
+* {\em font switchers}, they are declared by the `\font` primitive or by
+ \^`\fontlet` or \^`\fontdef` macros,
+* {\em variant selectors}, there are four basic variant selectors
+ `\rm`, `\bf`, `\it`, `\bi`, there is a special selector `\currvar`
+ and more variant selectors can be declared by the \^`\famvardef` macro.
+* {\em font modifiers} (for example `\cond`, `\caps`, \^`\setfontsize``{<size spec>}`),
+ they are in two types: bulid in (like \^`\setfontsize`) or
+ declared modifiers (by by the \^`\moddef` macro).
+* {\em family selectors} (for example `\Termes`, `\LMfonts`),
+ they are declared typically in the {\em font family files}.
+\enditems
+
+These selectors / switchers sets its values locally. When the \TeX/ group is
+leaved then selected font and the {\em font context} are returned back to the values
+used when the group was opened. They have the following features:
+
+\begitems
+* The {\em font switchers} select fonts independent on the font context.
+* The {\em variant selectors} select the font depending on the font context and on
+ the specified variant.
+* The {\em font modifiers} create a change in the font context but they
+ don't select the font itself.
+* The {\em family selectors} set a family in the font context and resets all
+ font modifiers. They dont't select the font itself.
+\enditems
+
+The variant selectors and declared font modifiers are
+defined in the family context. They can behave differently in different
+families.
+
+The fonts registered in \OpTeX/ have their macros in the {\em font family files},
+each family is declared in one font family file with the name `f-famname.opm`.
+All families are collected in `fams-ini.opm` and user can give more
+declarations in the file `fams-local.opm`.
+
+\secc Font families, selecting fonts
+
+The \^`\fontfam` `[<Font Family>]` opens the relevant font family file where
+the `<Font Family>` is declared. The family selector is defined here by rules
+described in the section~\ref[fontfamfiles]. Font modifiers and variant
+selectors may be declared here. Their definitions depends on given family.
+The family is set as active in the font context and `\rm` variant selector is run.
+
+The available declared font modifiers and declared variant selectors are
+listed in the log file when font family is load. Or you can print
+`\fontfam[catalog]` to show available font modifiers and variant selectors.
+
+The font modifiers can be independent, like `\cond` and `\light`. They can
+be arbitrary combined (in arbitrary order) and if the font family disposes
+with all such sub-variants then the desired font is selected (after variant
+selector is used). On the other hand there are font modifiers which negates
+the previous font modifier, for example `\cond`, `\extend`. You can reset
+all modifiers to their initial value by the \^`\resetmod` command.
+
+You can open more font families by more \^`\fontfam` commands. Then the
+general method to selecting the individual font is:
+
+\begtt \catcode`\<=13
+<family selector> <font modifiers> <variant selector>
+\endtt
+For example:
+\begtt
+\fontfam [Heros] % Heros family is active here, default \rm variant.
+\fontfam [Termes] % Termes family is active here, default \rm variant.
+{\Heros \caps \cond \it The caps+condensed italics in Heros family is here.}
+The Termes roman is here.
+\endtt
+
+There is one special command \^`\currvar` which acts as variant selector.
+It keeps the current variant and the font of such variant is
+reloaded with respect to the current font context by previously given family
+selector and font modifiers.
+
+You can use the \^`\setfontsize` `{<sizespec>}` command in the same sense as
+other font modifiers. It saves only information about font size to the font
+context. See section~\ref[setfontsize]. Example:
+
+\begtt
+\rm default size \setfontsize{at14pt}\rm here is 14pt size \it italic is
+in 14pt size too \bf bold too.
+\endtt
+
+Much more comfortable way to resize fonts is using OPmac-like command
+`\typosize`, `\typoscale`.
+These commands prepare the right sizes for math
+fonts too and re-calculates many internal parameters like `\baselineskip`.
+See section~\ref[opmac-fonts] for more information.
+
+
+\secc Math Fonts
+%---------------
+
+Most font families are connected with a preferred Unicode-math font. This
+Unicode-math is activated when the font family is loaded. If you don't prefer
+this and you are satisfied with 8bit math CM+AMS fonts preloaded in the
+\OpTeX/ format then you can use command \^`\noloadmath` before you load a first
+font family.
+
+If you want to use your specially selected Unicode-math font then use
+\^`\loadmath` `{[<font_file>]}` or \^`\loadmath` `{<font_name>}` before first
+`\fontfam` is used.
+
+
+\secc Declaring font commands
+%----------------------------
+
+The font switches can be declared by `\font` primitive or by \^`\fontdef` or
+\^`\fontlet` macros. See the sections~\ref[fontdef] and~\ref[fontlet]
+for more details. The general format for \^`\fontdef` is
+\begtt \catcode`\<=13
+\fontdef\<font switch> {\<family selector> <font modifiers> \<variant selector>}
+\endtt
+
+Such font switches should be used in `\output` routine (headers, footers) for
+example. We need fixed sizes here. But they are less usable in common
+text. For example the document includes notices in smaller font.
+When the notice is started then we want
+to do all variants smaller: `\rm`, `\it`, `\bf`, etc.
+It means that the smaller font for notices should be initialized by
+`\setfontsize{at9pt}\rm` for example. If you want a \"notices font selector"
+then you can do `\def\noticefont{\setfontsize{at9pt}\rm}`. This font
+selector does not change the `\baselineskip`. If you want to do this then
+put different `\baselineskip` setting to your definition. But you must not
+forget that the end of group before `\par` is a typical mistake of \TeX/
+users: the last paragraph is in smaller font but in normal baselineskip,
+because `\baselineskip` setting is taken into account when `\par`
+command is processed.
+
+Somewhat more complicated task is the \"title font selector", because titles are
+not only bigger but they are typically in bold variant. When the user puts
+`{\it...}` into the title then he/she expects bold italic here, no normal
+italic. You can remember the great song by John Lennon \"Let It Be" and
+define:
+
+\begtt
+\def\titlefont{\setfontsize{at14pt}\bf \let\it\bi}
+...
+{\titlefont here we have bold 14pt font and {\it here} was bold 14pt italics}
+\endtt
+
+You can declare a new variant slector by the \^`\famvardef` macro. This
+macro has similar syntax as \^`\fontdef`:
+\begtt \catcode`\<=13
+\famvardef\<new variant selector> {<font modifiers> \<variant selector>}
+\endtt
+%
+The `\<new variant selector>` should be used in the same sense as `\rm`,
+`\bf` etc. It can be used as the final command in the
+`\fontdef` or `\famvardef` declarators
+too. When the `\<new variant selector>` is used in normal text then it does
+following steps: pushes current font context to a stack, modifies font
+context by declared `<font modifiers>`, runs following `\<variant selector>`.
+It selects a font. Then pops the stack. The font context have its original
+values but new font is selected.
+
+The \^`\famvardef` creates the `\<new variant selector>` family dependent.
+When the selector is used in another family than it is defined then warning is
+printed on the terminal \"<var selector> is undeclared in current family"
+and nothing happens. But you can declare the same variant selector by
+\^`\famvardef` macro in the context of new family. Then the same command
+will be do different work depending on the current font family.
+
+Suppose that the selected font family provides the font modifier `\medium` for
+mediate weight of fonts but supports only basic variant selectors `\rm`, `\bf`, `\it`,
+and `\bi`. Then you can declare:
+\begtt
+\famvardef \mr {\medium\rm}
+\famvardef \mi {\medium\it}
+\endtt
+Now, you can use six independent variant selectors `\rm`, `\bf`, `\it`,
+`\bi`, `\mr` and `\mi` in the selected font family.
+
+A `\<family selector>` can be written before `<font modifiers>` in the
+`\famvardef` parameter. Then the `\<new variant selector>` is declared in
+the current family but it can use fonts from another family represented by
+the `\<family selector>`.
+
+When you are mixing fonts from more families then you probably run
+into problem with incompatible ex-heights. This problem can be solved using
+\^`\setfontsize` and \^`\famvardef` macros:
+\begtt
+\fontfam[Heros] \fontfam[Termes]
+
+\def\exhcorr{\setfontsize{mag.88}}
+\famvardef\rmsans{\Heros\exhcorr\rm}
+\famvardef\itsans{\Heros\exhcorr\it}
+
+Compare ex-height of Termes \rmsans with Heros \rm and Termes.
+\endtt
+
+There exists analogical declarator `\moddef` for declaration family dependent
+font modifiers. It is described in detail the section~\ref[fontfamfiles].
+
+
+\secc Modifying font features
+%----------------------------
+
+Each OTF font provides \"font features". You can list these font features
+by `otfinfo -f font.otf`. For example LinLibertine fonts provide `frac` font
+feature. If it is active then fractions like 1/2 are printed in a special
+form.
+
+The font features are part of the font context data.
+The macro \^`\setff` `{<feature>}` acts like family independent font modifier and
+prepares a new <feature>. You must use a variant selector in order to
+reinitialize the font with the new font feature. For example
+\^`\setff``{+frac}\rm` or \^`\setff``{+frac}`\^`\currvar`. You can declare a new variant
+selector too:
+
+\begtt
+ \fontfam[LinLibertine]
+ \famvardef \fraclig {\setff{+frac}\currvar}
+ Compare 1/2 or 1/10 \fraclig to 1/2 or 1/10.
+\endtt
+
+If the used font does not supports given font feature then font is realoaded
+without warning nor error, silently. The font feature is not activated.
+
+The `onum` font feature (old style digits) is connected to `\caps` macro for
+Caps+SmallCaps variant in \OpTeX/ font family files. So you need not to
+create a new modifier, just use `{\caps`\^`\currvar`` 012345}`.
+
+
+\secc Special font modifiers
+%---------------------------
+
+Despite the font modifiers declared in the font family file (and dependent on
+the font family), we have following font modifiers (independent of font
+family):
+
+\begtt \catcode`\<=13
+\setfontsize{<sizespec>} % sets the font size
+\setff{<font feature>} % adds the font feature
+\setfontcolor{<color>} % sets font color
+\setletterspace{<number>} % sets letter spacing
+\setwordspace{<scaling>} % modifies word spacing
+\endtt
+
+The \^`\setfontsize` command is described in the section \ref[setfontsize].
+The \^`\setff` command was described in previous subsection.
+
+\^`\setfontcolor` `{<color>}` specifies the color and the opacity of the text.
+The <color> parameter should be in hexadecimal format of four bytes
+`<red><green><blue><opacity>`, for example `FF0080FF` means full red, zero
+green, half blue and full opacity. You can use names `red`, `green`, `blue`,
+`yellow`, `cyan`, `magenta`, `white`, `grey`, `lgrey` (without backslash)
+instead of the hexadecimal specification.
+The empty parameter `<color>` means default black color.
+
+That colors of fonts are implemented using \LuaTeX/ internal font feature. This
+is different approach than using colors in section \ref[colors].
+
+\^`\setletterspace` `{<number>}` specifies letter spacing of the font. The
+`<number>` is decimal number without unit. The unit is supposed as 1/100 of
+the font size. I.e. `2.5` means 0.25 pt when the font is at 10 pt size. The
+empty parameter `<number>` means no letter spacing which is default.
+
+\^`\setwordspace` `{<scaling>}` scales the default inter word space (defined in the
+font) and its stretching and shrinking parameters by given `<scaling>`
+factor. For example `\setwordspace{2.5}` multiplies inter word space by 2.5.
+
+If you need another font transformations, you can use `\setff`
+with following font features provided by Lua\TeX/:
+
+\begtt
+\setff{embolden=1.5}\rm % font is bolder because outline has nonzero width
+\setff{slant=0.2}\rm % font is slanted by a linear transformation
+\setff{extend=1.2}\rm % font is extended by a linear transformation.
+\setff{colr=yes}\rm % if the font includes colored characters, use colors
+\endtt
+
+Use font transformations mentioned above and \^`\setletterspace`,
+\^`\setwordspace` with care. The best setting of these values is default
+setting in every font, of course. If you really needs to set a different
+letter spacing then it is strongly recommended to add `\setff{-liga}` in
+order to disable ligatures. And setting a positive letter spacing probably
+needs to scale inter word spacing too.
+
+All mentioned font modifiers (with the exception of `\setfontsize`) work only
+with Unicode fonts loaded by \^`\fontfam`.
+
+\secc[fontfamfiles] How to create the font family file
+%------------------------------------------------------
+
+\printdoctail f-heros.opm
+
+\printdoctail f-lmfonts.opm
+
+\secc How to register the font family in the Font Selection System
+%---------------------------------------------------------------
+
+\printdoctail fams-ini.opm
+
+\endinput
+
+2020-04-18 \_tryloadfamslocal introduced
+ \_fontdecl -> \_famdecl with different concept
+2020-03-18 released
diff --git a/macros/luatex/optex/base/graphics.opm b/macros/luatex/optex/base/graphics.opm
new file mode 100644
index 0000000000..f2fa1b9257
--- /dev/null
+++ b/macros/luatex/optex/base/graphics.opm
@@ -0,0 +1,425 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \inspic {Graphics <2020-04-12>} % preloaded in format
+
+ \_doc -----------------------------
+ \`\inspic` accepts old syntax `\inspic <filename><space>`
+ or new syntax `\inspic{<filename>}`. So, we need to define
+ two auxiliary macros \`\_inspicA` and \`\_inspicB`.
+
+ You can include more `\pdfximage` parameters (like `page<number>`)
+ in the \`\_picparams` macro.
+
+ All `\inspic` macros are surrounded in `\hbox` in order user can
+ write `\moveright\inspic ...` or something similar.
+ \_cod -----------------------------
+
+\_def\_inspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inspicB\_inspicA}
+\_def\_inspicA #1 {\_inspicB {#1}}
+\_def\_inspicB #1{%
+ \_pdfximage \_ifdim\_picwidth=0pt \_else width\_picwidth\_fi
+ \_ifdim\_picheight=0pt \_else height\_picheight\_fi
+ \_picparams {\_the\_picdir#1}%
+ \_pdfrefximage\_pdflastximage\_egroup}
+
+\_def\_picparams{}
+
+\_public \inspic ;
+
+ \_doc -----------------------------
+ Inkscape is able to save a picture to `*.pdf` file and labels for the picture
+ to `*.pdf_tex` file. The second file is in \LaTeX/ format (unfortunately)
+ and it is intended to read immediately it after `*.pdf` in included
+ in order to place labels of this ficture in the same font as document is printed.
+ We need to read this \LaTeX/ file by plain \TeX/ macros when \`\inkinspic` is used.
+ These macros are stored in the \`\_inkdefs` toknes list and it is used
+ locally in the group. The solution is borrowed from OPmac trick 0032.
+ \_cod -----------------------------
+
+\_def\_inkinspic{\_hbox\_bgroup\_isnextchar\_bgroup\_inkinspicB\_inkinspicA}
+\_def\_inkinspicA #1 {\_inkinspicB {#1}}
+\_def\_inkinspicB #1{%
+ \_ifdim\_picwidth=0pt \_setbox0=\_hbox{\_inspic{#1}}\_picwidth=\_wd0 \_fi
+ \_the\_inkdefs
+ \_opinput {\_the\_picdir #1_tex}% file with labels
+ \_egroup}
+
+\_newtoks\_inkdefs \_inkdefs={%
+ \_def\makeatletter#1\makeatother{}%
+ \_def\includegraphics[#1]#2{\_inkscanpage#1,page=,\_end \_inspic{#2}\_hss}%
+ \_def\_inkscanpage#1page=#2,#3\_end{\_ifx,#2,\_else\_def\_picparams{page#2}\_fi}%
+ \_def\put(#1,#2)#3{\_nointerlineskip\_vbox to0pt{\_vss\_hbox to0pt{\_kern#1\_picwidth
+ \_pdfsave\_hbox to0pt{#3}\_pdfrestore\_hss}\_kern#2\_picwidth}}%
+ \_def\begin#1{\_csname _begin#1\_endcsname}%
+ \_def\_beginpicture(#1,#2){\_vbox\_bgroup
+ \_hbox to\_picwidth{}\_kern#2\_picwidth \_def\end##1{\_egroup}}%
+ \_def\_begintabular[#1]#2#3\end#4{%
+ \_vtop{\_def\\{\_cr}\_tabiteml{}\_tabitemr{}\_table{#2}{#3}}}%
+ \_def\color[#1]#2{\_scancolor #2,}%
+ \_def\_scancolor#1,#2,#3,{\_pdfliteral{#1 #2 #3 rg}}%
+ \_def\makebox(#1)[#2]#3{\_hbox to0pt{\_csname _mbx:#2\_endcsname{#3}}}%
+ \_sdef{_mbx:lb}#1{#1\_hss}\_sdef{_mbx:rb}#1{\_hss#1}\_sdef{_mbx:b}#1{\_hss#1\_hss}%
+ \_sdef{_mbx:lt}#1{#1\_hss}\_sdef{_mbx:rt}#1{\_hss#1}\_sdef{_mbx:t}#1{\_hss#1\_hss}%
+ \_def\rotatebox#1#2{\_pdfrotate{#1}#2}%
+ \_def\lineheight#1{}%
+ \_def\setlength#1#2{}%
+}
+\_public \inkinspic ;
+
+ \_doc ----------------------------
+ \`\pdfscale``{<x-scale>}{<y-scale>}` and \`\pdfrotate``{<degrees>}`
+ macros are implemented by `\pdfsetmatrix`
+ primitive. We need to know values of sin, cos function in
+ the `\pdfrotate`. We use Lua code for this.
+ \_cod ----------------------------
+
+\_def\_pdfscale#1#2{\_pdfsetmatrix{#1 0 0 #2}}
+
+\_def\_gonfunc#1#2{%
+ \_directlua{tex.print(string.format('\_pcent.4f',math.#1(3.14159265*(#2)/180)))}%
+}
+\_def\_sin{\_gonfunc{sin}}
+\_def\_cos{\_gonfunc{cos}}
+
+\_def\_pdfrotate#1{\_pdfsetmatrix{\_cos{#1} \_sin{#1} \_sin{(#1)-180} \_cos{#1}}}
+
+\_public \pdfscale \pdfrotate ;
+
+ \_doc -----------------------------
+ The \`\transformbox``{<transformation>}{<text>}`
+ is copied from OPmac trick 0046.\nl
+ The \`\rotbox``{<degrees>}{<text>}` is a combination of
+ `\rotsimple` from OPmac trick 0101 and the `\transformbox`.
+ Note, that `\rotbox{-90}` puts the rotated text to the height of the outer
+ box (depth is zero) because code from `\rotsimple` is processed.
+ But `\rotbox{-90.0}` puts the rotated text to
+ the depth of the outer box (height is zero) because `\transformbox` is
+ processed.
+ \_cod -----------------------------
+
+\_def\_multiplyMxV #1 #2 #3 #4 {% matrix * (vvalX, vvalY)
+ \_tmpdim = #1\_vvalX \_advance\_tmpdim by #3\_vvalY
+ \_vvalY = #4\_vvalY \_advance\_vvalY by #2\_vvalX
+ \_vvalX = \_tmpdim
+}
+\_def\_multiplyMxM #1 #2 #3 #4 {% currmatrix := currmatrix * matrix
+ \_vvalX=#1pt \_vvalY=#2pt \_ea\_multiplyMxV \_currmatrix
+ \_edef\_tmpb{\_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY}%
+ \_vvalX=#3pt \_vvalY=#4pt \_ea\_multiplyMxV \_currmatrix
+ \_edef\_currmatrix{\_tmpb\_space
+ \_ea\_ignorept\_the\_vvalX\_space \_ea\_ignorept\_the\_vvalY\_space}%
+}
+\_def\_transformbox#1#2{\_hbox{\_setbox0=\_hbox{{#2}}%
+ \_dimendef\_vvalX 11 \_dimendef\_vvalY 12 % we use these variables
+ \_dimendef\_newHt 13 \_dimendef\_newDp 14 % only in this group
+ \_dimendef\_newLt 15 \_dimendef\_newRt 16
+ \_preptransform{#1}%
+ \_kern-\_newLt \_vrule height\_newHt depth\_newDp width0pt
+ \_setbox0=\_hbox{\_box0}\_ht0=0pt \_dp0=0pt
+ \_pdfsave#1\_rlap{\_box0}\_pdfrestore \_kern\_newRt}%
+}
+\_def\_preptransform #1{\_def\_currmatrix{1 0 0 1 }%
+ \_def\_pdfsetmatrix##1{\_edef\_tmpb{##1 }\_ea\_multiplyMxM \_tmpb\_unskip}%
+ \_let\pdfsetmatrix=\_pdfsetmatrix #1%
+ \_setnewHtDp 0pt \_ht0 \_setnewHtDp 0pt -\_dp0
+ \_setnewHtDp \_wd0 \_ht0 \_setnewHtDp \_wd0 -\_dp0
+ \_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix}%
+ \_let\pdfsetmatrix=\_pdfsetmatrix
+}
+\_def\_setnewHtDp #1 #2 {%
+ \_vvalX=#1\_relax \_vvalY=#2\_relax \_ea\_multiplyMxV \_currmatrix
+ \_ifdim\_vvalX<\_newLt \_newLt=\_vvalX \_fi \_ifdim\_vvalX>\_newRt \_newRt=\_vvalX \_fi
+ \_ifdim\_vvalY>\_newHt \_newHt=\_vvalY \_fi \_ifdim-\_vvalY>\_newDp \_newDp=-\_vvalY \_fi
+}
+
+\_def\_rotbox#1#2{%
+ \_isequal{90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_ht0 \_tmpdim=\_dp0}{\_vfill}{#2}%
+ \_else \_isequal{-90}{#1}\_iftrue \_rotboxA{#1}{\_kern\_dp0 \_tmpdim=\_ht0}{}{#2}%
+ \_else \_transformbox{\_pdfrotate{#1}}{#2}%
+ \_fi \_fi
+}
+\_def\_rotboxA #1#2#3#4{\_hbox{\_setbox0=\_hbox{{#4}}#2%
+ \_vbox to\_wd0{#3\_wd0=0pt \_dp0=0pt \_ht0=0pt
+ \_pdfsave\_pdfrotate{#1}\_box0\_pdfrestore\vfil}%
+ \_kern\_tmpdim
+}}
+\_public \transformbox \rotbox ;
+
+ \_doc ---------------------------
+ \`\_scantwodimens` scans two objects with the syntactic rule `<dimen>`
+ and returns `{<number>}{<number>}` in `sp` unit.
+ \nl
+ \`\puttext` `<right> <up>{<text>}` puts the `<text>` to desired place:
+ From current point moves <down> and <right>, puts the <text> and returns
+ back. The current point is unchanged after this macro ends.
+ \nl
+ \`\putpic` `<right> <up> <width> <height> {<image-file>}`
+ does `\puttext` with the image scaled to desired <width> and <height>.
+ If <with> or <height> is zero, natural dimension is used.
+ The \`\nospec` is a shortcut to such natural dimension.
+ \nl
+ \`\backgroundpic``{<image-file>}` puts the image to
+ the background of each page. It it used in the slides style, for example.
+ \_cod ---------------------------
+
+\_def\_scantwodimens{%
+ \_directlua{tex.print(string.format('{\_pcent d}{\_pcent d}',
+ token.scan_dimen(),token.scan_dimen()))}%
+}
+
+\_def\_puttext{\_ea\_ea\_ea\_puttextA\_scantwodimens}
+\_def\_puttextA#1#2#3{\_setbox0=\_hbox{{#3}}\_dimen1=#1sp \_dimen2=#2sp \_puttextB}
+\_def\_puttextB{%
+ \_ifvmode
+ \_ifdim\_prevdepth>0pt \_vskip-\_prevdepth \_relax \_fi
+ \_nointerlineskip
+ \_fi
+ \_wd0=0pt \_ht0=0pt \_dp0=0pt
+ \_vbox to0pt{\_kern-\_dimen2 \_hbox to0pt{\_kern\_dimen1 \_box0\_hss}\_vss}}
+
+\_def\_putpic{\_ea\_ea\_ea\_putpicA\_scantwodimens}
+\_def\_putpicA#1#2{\_dimen1=#1sp \_dimen2=#2sp \_ea\_ea\_ea\_putpicB\_scantwodimens}
+\_def\_putpicB#1#2#3{\_setbox0=\_hbox{\_picwidth=#1sp \_picheight=#2sp \_inspic{#3}}\_puttextB}
+
+\_newbox\_bgbox
+\_def\_backgroundpic#1{%
+ \_setbox\_bgbox=\_hbox{\_picwidth=\_pdfpagewidth \_picheight=\_pdfpageheight \_inspic{#1}}%
+ \_pgbackground={\_copy\_bgbox}
+}
+\_def\nospec{0pt}
+\_public \puttext \putpic \backgroundpic ;
+
+ \_doc -----------------------------
+ \`\_circle``{<x>}{<y>}` creates an ellipse with `<x>` axis and `<y>` axix.
+ The origin is in the center.
+ \nl
+ \`\_oval``{<x>}{<y>}{<roudness>}` creates an oval with `<x>`, `<y>` size and with
+ given `<roundness>`. The real size is bigger by 2`<roundness>`. The
+ origin is at the left bottom corner.
+ \nl
+ \`\_mv``{<x>}{<y>}{<curve>}` moves current point to `<x>`, `<y>`, crates the
+ `<curve>` and retuns back the current point.
+ All these macros are fully expandable and they can be used in the
+ `\pdfliteral` argument.
+ \_cod -----------------------------
+
+\def\_circle#1#2{\_expr{.5*(#1)} 0 m
+ \_expr{.5*(#1)} \_expr{.276*(#2)} \_expr{.276*(#1)} \_expr{.5*(#2)} 0 \_expr{.5*(#2)} c
+ \_expr{-.276*(#1)} \_expr{.5*(#2)} \_expr{-.5*(#1)} \_expr{.276*(#2)} \_expr{-.5*(#1)} 0 c
+ \_expr{-.5*(#1)} \_expr{-.276*(#2)} \_expr{-.276*(#1)} \_expr{-.5*(#2)} 0 \_expr{-.5*(#2)} c
+ \_expr{.276*(#1)} \_expr{-.5*(#2)} \_expr{.5*(#1)} \_expr{-.276*(#2)} \_expr{.5*(#1)} 0 c h}
+
+\def\_oval#1#2#3{0 \_expr{-(#3)} m \_expr{#1} \_expr{-(#3)} l
+ \_expr{(#1)+.552*(#3)} \_expr{-(#3)} \_expr{(#1)+(#3)} \_expr{-.552*(#3)}
+ \_expr{(#1)+(#3)} 0 c
+ \_expr{(#1)+(#3)} \_expr{#2} l
+ \_expr{(#1)+(#3)} \_expr{(#2)+.552*(#3)} \_expr{(#1)+.552*(#3)} \_expr{(#2)+(#3)}
+ \_expr{#1} \_expr{(#2)+(#3)} c
+ 0 \_expr{(#2)+(#3)} l
+ \_expr{-.552*(#3)} \_expr{(#2)+(#3)} \_expr{-(#3)} \_expr{(#2)+.552*(#3)}
+ \_expr{-(#3)} \_expr{#2} c
+ \_expr{-(#3)} 0 l
+ \_expr{-(#3)} \_expr{-.552*(#3)} \_expr{-.552*(#3)} \_expr{-(#3)} 0 \_expr{-(#3)} c h}
+
+\def\_mv#1#2#3{1 0 0 1 \_expr{#1} \_expr{#2} cm #3 1 0 0 1 \_expr{-(#1)} \_expr{-(#2)} cm}
+
+ \_doc -----------------------------
+ The \`\inoval``{<text>}` is an example of \^`\_oval` usage.\nl
+ The \`\incircle``{<text>}` is an example of \^`\_circle` usage.\nl
+ The \`\ratio`, \`\lwidth`, \`\fcolor`, \`\lcolor`, \`\shadow` and \`\overlapmargins`
+ are parameters, they can be set by user in optional brackets `[...]`.
+ For example `\fcolor=\Red` does `\_let\_fcolorvalue=\Red` and it means
+ filling color.\nl
+ The \`\_setflcolor` uses the \^`\_fillstroke` macro to separate filling
+ color and drawing color.
+ \_cod -----------------------------
+
+\_newdimen \_lwidth
+\_def\_fcolor{\_let\_fcolorvalue}
+\_def\_lcolor{\_let\_lcolorvalue}
+\_def\_shadow{\_let\_shadowvalue}
+\_def\_overlapmargins{\_let\_overlapmarginsvalue}
+\_def\_ratio{\_isnextchar ={\_ratioA}{\_ratioA=}}
+\_def\_ratioA =#1 {\_def\_ratiovalue{#1}}
+\_def\_touppervalue#1{\_ifx#1n\_let#1=N\_fi}
+
+\_def\_setflcolors#1{% use only in a group
+ \_def\_setcolor##1{##1}%
+ \_def\_fillstroke##1##2{##1}%
+ \_edef#1{\_fcolorvalue}%
+ \_def\_fillstroke##1##2{##2}%
+ \_edef#1{#1\_space\_lcolorvalue\_space}%
+}
+\_optdef\_inoval[]{\_vbox\_bgroup
+ \_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp
+ \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt
+ \_the\_ovalparams \_relax \_the\_opt \_relax
+ \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue
+ \_ifx\_overlapmarginsvalue N%
+ \_advance\_hsize by-2\_hhkern \_advance\_hsize by-2\_roundness \_fi
+ \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_inovalA \_kern\_hhkern \_let\_next=%
+}
+\_def\_inovalA{\_isnextchar\_colorstackpop\_inovalB\_inovalC}
+\_def\_inovalB#1{#1\_isnextchar\_colorstackpop\_inovalB\_inovalC}
+\_def\_inovalC{\_egroup % of \setbox0=\hbox\bgroup
+ \_ifdim\_vvkern=0pt \_else \_ht0=\_dimexpr\_ht0+\_vvkern \_relax
+ \_dp0=\_dimexpr\_dp0+\_vvkern \_relax \_fi
+ \_ifdim\_hhkern=0pt \_else \_wd0=\_dimexpr\_wd0+\_hhkern \_relax \_fi
+ \_ifx\_overlapmarginsvalue N\_dimen0=\_roundness \_dimen1=\_roundness
+ \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi
+ \_setflcolors\_tmp
+ \_hbox{\_kern\_dimen0
+ \_vbox to0pt{\_kern\_dp0
+ \_ifx\_shadowvalue N\_else
+ \_edef\_tmpb{{\_bp{\_wd0+\_lwidth}}{\_bp{\_ht0+\_dp0+\_lwidth}}{\_bp{\_roundness}}}%
+ \_doshadow\_oval
+ \_fi
+ \_pdfliteral{q \_bp{\_lwidth} w \_tmp
+ \_oval{\_bp{\_wd0}}{\_bp{\_ht0+\_dp0}}{\_bp{\_roundness}} B Q}\_vss}%
+ \_ht0=\_dimexpr\_ht0+\_dimen1 \_relax \_dp0=\_dimexpr\_dp0+\_dimen1 \_relax
+ \_box0
+ \_kern\_dimen0}%
+ \_egroup % of \vbox\bgroup
+}
+\_optdef\_incircle[]{\_vbox\_bgroup
+ \_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp
+ \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt
+ \_ea\_the \_ea\_circleparams \_space \_relax
+ \_ea\_the \_ea\_opt \_space \_relax
+ \_touppervalue\_overlapmarginsvalue \_touppervalue\_shadowvalue
+ \_setbox0=\_hbox\_bgroup\_bgroup \_aftergroup\_incircleA \_kern\_hhkern \_let\_next=%
+}
+\_def\_incircleA {\_isnextchar\_colorstackpop\_incircleB\_incircleC}
+\_def\_incircleB #1{#1\_isnextchar\_colorstackpop\_incircleB\_incircleC}
+\_def\_incircleC {\_egroup % of \setbox0=\hbox\bgroup
+ \_wd0=\_dimexpr \_wd0+\_hhkern \_relax
+ \_ht0=\_dimexpr \_ht0+\_vvkern \_relax \_dp0=\_dimexpr \_dp0+\_vvkern \_relax
+ \_ifdim \_ratiovalue\_dimexpr \_ht0+\_dp0 > \_wd0
+ \_dimen3=\_dimexpr \_ht0+\_dp0 \_relax \_dimen2=\_ratiovalue\_dimen3
+ \_else \_dimen2=\_wd0 \_dimen3=\_expr{1/\_ratiovalue}\_dimen2 \_fi
+ \_setflcolors\_tmp
+ \_ifx\_overlapmarginsvalue N\_dimen0=0pt \_dimen1=0pt
+ \_else \_dimen0=-\_hhkern \_dimen1=-\_vvkern \_fi
+ \_hbox{\_kern\_dimen0
+ \_ifx\_shadowvalue N\_else
+ \_edef\_tmpb{{\_bp{\_dimen2+\_lwidth}}{\_bp{\_dimen3+\_lwidth}}{}}%
+ \_doshadow\_circlet
+ \_fi
+ \_pdfliteral{q \_bp{\_lwidth} w \_tmp \_mv{\_bp{.5\_wd0}}{\_bp{(\_ht0-\_dp0)/2}}
+ {\_circle{\_bp{\_dimen2}}{\_bp{\_dimen3}} B} Q}%
+ \_ifdim\_dimen1=0pt \_else
+ \_ht0=\_dimexpr \_ht0+\_dimen1 \_relax \_dp0=\_dimexpr \_dp0+\_dimen1 \_relax \_fi
+ \_box0
+ \_kern\_dimen0}
+ \_egroup % of \vbox\bgroup
+}
+\_def\_circlet#1#2#3{\_circle{#1}{#2}}
+
+\_public \inoval \incircle \ratio \lwidth \fcolor \lcolor \shadow \overlapmargins ;
+
+ \_doc -----------------------------
+ A shadow effect is implemented here. The shadow is equal to the
+ silhouette of the given path in gray-transparent color shifted by
+ \`\_shadowmoveto` vector and with blurred boundary.
+ A waistline with the width 2*\`\_shadowb` around the boundary is blurred.
+ The \`\shadowlevels` levels of transparent shapes is used for creating
+ this effect. The `\shadowlevels+1/2` level is equal to the shifted given path.
+ \_cod -----------------------------
+
+\_def\_shadowlevels{9} % number of layers for blurr effect
+\_def\_shadowdarknessA{0.025} % transparency of first shadowlevels/2 layers
+\_def\_shadowdarknessB{0.07} % transparency of second half of layers
+\_def\_shadowmoveto{1.8 -2.5} % vector defines shifting layer (in bp)
+\_def\_shadowb{1} % 2*shadowb = blurring area thickness
+
+ \_doc -----------------------------
+ The `\_pdfpageresources` primitive is used to define transparency.
+ It does not work when used in a box. So, we use it at the begining of
+ the output routine. The modification of the output routine is done
+ using \`\_insertshadowresources` only once when the shadow effect is used first.
+ \_cod -----------------------------
+
+\_def\_insertshadowresources{%
+ \_global\_addto\_begoutput{\_setshadowresources}%
+ \_xdef\_setshadowresources{%
+ \_pdfpageresources{/ExtGState
+ <<
+ /op1 <</Type /ExtGState /ca \_shadowdarknessA>>
+ /op2 <</Type /ExtGState /ca \_shadowdarknessB>>
+ \_morepgresources
+ >>
+ }%
+ }%
+ \_global\_let\_insertshadowresources=\_relax
+}
+\_def\_morepgresources{}
+
+ \_doc -----------------------------
+ The \`\_doshadow``{<curve>}` does the shadow effect.
+ \_cod -----------------------------
+
+\_def\_doshadow#1{\_vbox{%
+ \_insertshadowresources
+ \_tmpnum=\_numexpr (\_shadowlevels-1)/2 \_relax
+ \_edef\_tmpfin{\_the\_tmpnum}%
+ \_ifnum\_tmpfin=0 \_def\_shadowb{0}\_def\_shadowstep{0}%
+ \_else \_edef\_shadowstep{\_expr{\_shadowb/\_tmpfin}}\_fi
+ \_def\_tmpa##1##2##3{\_def\_tmpb
+ {#1{##1+2*\_the\_tmpnum*\_shadowstep}{##2+2*\_the\_tmpnum*\_shadowstep}{##3}}}%
+ \_ea \_tmpa \_tmpb
+ \_def\_shadowlayer{%
+ \_ifnum\_tmpnum=0 /op2 gs \_fi
+ \_tmpb\_space f
+ \_immediateassignment\_advance\_tmpnum by-1
+ \_ifnum-\_tmpfin<\_tmpnum
+ \_ifx#1\_oval 1 0 0 1 \_shadowstep\_space \_shadowstep\_space cm \_fi
+ \_ea \_shadowlayer \_fi
+ }%
+ \_pdfliteral{q /op1 gs 0 g 1 0 0 1 \_shadowmoveto\_space cm
+ \_ifx#1\_circlet 1 0 0 1 \_expr{\_bp{.5\_wd0}} \_expr{\_bp{(\_ht0-\_dp0)/2}} cm
+ \_else 1 0 0 1 -\_shadowb\_space -\_shadowb\_space cm \_fi
+ \_shadowlayer Q}
+}}
+
+ \_doc -----------------------------
+ A generic macro \`\_clipinpath``<x> <y> <curve> <text>` declares
+ a clipping path by the `<curve>` shifted by the `<x>`, `<y>`. The `<text>` is typeset
+ when such clipping path is active. Dimensions are given by bp without the unit here.
+ The macros \`\clipinoval` `<x> <y> <width> <height> {<text>}` and
+ \`\clipincircle` `<x> <y> <width> <height> {<text>}` are defined here.
+ These macros read normal \TeX/ dimensions in their parameters.
+ \_cod -----------------------------
+
+\_def\_clipinpath#1#2#3#4{% #1=x-pos[bp], #2=y-pos[bp], #3=curve, #4=text
+ \_hbox{\_setbox0=\_hbox{{#4}}%
+ \_tmpdim=\_wd0 \_wd0=0pt
+ \_pdfliteral{q \_mv{#1}{#2}{#3 W n}}%
+ \_box0\_pdfliteral{Q}\_kern\_tmpdim
+ }%
+}
+
+\_def\_clipinoval {\_ea\_ea\_ea\_clipinovalA\_scantwodimens}
+\_def\_clipinovalA #1#2{%
+ \_def\_tmp{{#1/65781.76}{#2/65781.76}}%
+ \_ea\_ea\_ea\_clipinovalB\_scantwodimens
+}
+\_def\_clipinovalB{\_ea\_clipinovalC\_tmp}
+\_def\_clipinovalC#1#2#3#4{%
+ \_ea\_clipinpath{#1-(#3/131563.52)+(\_bp{\_roundness})}{#2-(#4/131563.52)+(\_bp{\_roundness})}%
+ {\_oval{#3/65781.76-(\_bp{2\_roundness})}{#4/65781.76-(\_bp{2\_roundness})}{\_bp{\_roundness}}}%
+}
+\_def\_clipincircle {\_ea\_ea\_ea\_clipincircleA\_scantwodimens}
+\_def\_clipincircleA #1#2{%
+ \_def\_tmp{{#1/65781.76}{#2/65781.76}}%
+ \_ea\_ea\_ea\_clipincircleB\_scantwodimens
+}
+\_def\_clipincircleB#1#2{%
+ \_ea\_clipinpath\_tmp{\_circle{#1/65781.76}{#2/65781.76}}%
+}
+\_public \clipinoval \clipincircle ;
+
+
+\_endcode % -------------------------------------
+
+2020-04-12: \_public \clipinoval \clipincircle ; added, bug fixed
+
diff --git a/macros/luatex/optex/base/hi-syntax.opm b/macros/luatex/optex/base/hi-syntax.opm
new file mode 100644
index 0000000000..e0ac530c3d
--- /dev/null
+++ b/macros/luatex/optex/base/hi-syntax.opm
@@ -0,0 +1,223 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \hisyntax {Syntax highlithing of verbatim listings <2020-04-04>} % preloaded in format
+
+ \_doc -----------------------------
+ The following macros `\replfromto` and `\replthis` manipulate with the
+ verbatim text which has been read already and stored in the `\_tmpb` macro.
+
+ The \`\replfromto` `{<from>}{<to>}{<what>}` finds first `<from>` then the
+ first `<to>` following by `<from>` pattern and the
+ `<text>` between them is packed to `#1`.
+ Then `<from><text><to>` is replaced by `<what>`. The `<what>` parameter
+ can use `#1` which is replaced by the `<text>`.
+
+ The `\replfromto` continues by finding next `<from>`, then, next `<to>`
+ repeatedly over the whole verbatim text. If the verbatim text is ended by
+ opened `<from>` but not closing by `<to>` then `<to>` is appended to the
+ verbatim text automatically and the last part of verbatim text is replaced too.
+
+ First two parameters are expanded before usage of `\replfromto`. You can
+ use `\csstring\%` or something else here.
+ \_cod -----------------------------
+
+\_def\_replfromto #1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replfromtoE\_tmpa}
+\_def\_replfromtoE#1#2#3{% #1=from #2=to #3=what to replace
+ \_def\_replfrom##1#1##2{\_addto\_tmpb{##1}%
+ \_ifx\_end##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}%
+ \_def\_replto##1#2##2{%
+ \_ifx\_end##2\_afterfi{\_replfin##1}\_else
+ \_addto\_tmpb{#3}%
+ \_afterfi{\_replfrom##2}\_fi}%
+ \_def\_replfin##1#1\_end{\_addto\_tmpb{#3}\_replstop}%
+ \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_end#2\_end\_end\_relax
+}
+\_def\_replstop#1\_end\_relax{}
+\_def\_finrepl{}
+
+ \_doc -----------------------------
+ The \`\replthis` `{<pattern>}{<what>}` replaces each `<pattern>` by `<what>`.
+ Both parameters of `\replthis` are expanded first.
+ \_cod -----------------------------
+
+\_def\_replthis#1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replstring\_ea\_tmpb \_tmpa}
+
+\_public \replfromto \replthis ;
+
+ \_doc -----------------------------
+ The patterns `<from>`, `<to>` and `<pattern>` are not found when they are
+ hidden in braces `{...}`. Example:
+ \begtt
+ \replfromto{/*}{*/}{\x C{/*#1/*}}
+ \endtt
+ replaces all C comments by `\x C{...}`. The patterns inside `{...}` are
+ not used by next usage of `\replfromto` or `\replthis` macros.
+
+ The \`\_xscan` macro does replacing `\x` by `\z` in the post-processing
+ phase. The `\x <letter>{<text>}` expands to `\_xscan {<letter>}<text>^^J^`.
+ If `#3` is `\_end` then it signals that something wrong happens, the
+ `<from>` was not terminated by legal `<to>` when `\replfromto` did work.
+ We must to fix it by the \`\_xscanR` macro.
+ \_cod -----------------------------
+
+\_def\_xscan#1#2^^J#3{\_ifx\_end#3 \_ea\_xscanR\_fi
+ \z{#1}{#2}%
+ \_ifx^#3\_else ^^J\_afterfi{\_xscan{#1}#3}\_fi}
+\_def\_xscanR#1\_fi#2^{^^J}
+
+ \_doc -----------------------------
+ The \`\hicolor` `<letter> <color>` defines `\_z<letter>{<text>}`
+ as `{<color><text>}`. It should be used in the context of
+ `\x <letter>{<text>}` macros.
+ \_cod -----------------------------
+
+\_def\_hicolor #1#2{\_sdef{_z:#1}##1{{#2##1}}}
+
+ \_doc -----------------------------
+ The \`\hisyntax``{<name>}` re-defines default \^`\_prepareverbdata``<macro><verbtext>`
+ in order to it does more things:
+ It saves `<verbtext>` to `\_tmpb`, appends `\n` around spaces and
+ `^^J` characters in pre-processing phase, it opens `hisyntax-<name>.opm`
+ file if `\_hisyntax<name>` is not defined. Then `\_the\_isyntax<name>`
+ is processed. Finally, the post-processing phase is realized by setting
+ appropriate values to `\x` and `\y` macros and doing
+ `\_edef\_tmpb{\_tmpb}`.
+ \_cod -----------------------------
+
+\_def\_hisyntax#1{\_def\_prepareverbdata##1##2{%
+ \_let\n=\_relax \_def\t{\n\_noexpand\t\n}\_let\_start=\_relax
+ \_adef{ }{\n\ \n}\_edef\_tmpb{\_start^^J##2\_end}%
+ \_replthis{^^J}{\n^^J\n}\_replthis{\n\_end}{\_end}%
+ \_let\x=\_relax \_let\y=\_relax \_let\z=\_relax \_let\t=\_relax
+ \_endlinechar=`\^^M
+ \_lowercase{\_def\_tmpa{#1}}%
+ \_ifcsname _hialias:\_tmpa\_endcsname \_edef\_tmpa{\_cs{_hialias:\_tmpa}}\_fi
+ \_ifx\_tmpa\_empty \_else
+ \_unless \_ifcsname _hisyntax\_tmpa\_endcsname
+ \_isfile{hisyntax-\_tmpa.opm}\_iftrue \_opinput {hisyntax-\_tmpa.opm} \_fi\_fi
+ \_ifcsname _hisyntax\_tmpa\_endcsname
+ \_ifcsname hicolors\_tmpa\_endcsname
+ \_cs{_hicolors\_tmpa}=\_cs{hicolors\_tmpa}%
+ \_else
+ \_if^\_the\_hicolors^\_else
+ \_ifcsname _hicolors\_tmpa\_endcsname
+ \_global\_cs{_hicolors\_tmpa}=\_hicolors \_global\_hicolors={}%
+ \_fi\_fi\_fi
+ \_ea\_the \_csname _hisyntax\_tmpa\_endcsname % \_the\_hisyntax<name>
+ \_else\_opwarning{Syntax highlighting "\_tmpa" undeclared (no file hisyntax-\_tmpa.opm)}
+ \_fi\_fi
+ \_replthis{\_start\n^^J}{}\_replthis{^^J\_end}{^^J}%
+ \_def\n{}%
+ \_def\x####1####2{\_xscan{####1}####2^^J^}%
+ \_def\y####1{\_ea \_noexpand \_csname ####1\_endcsname}%
+ \_edef\_tmpb{\_tmpb}%
+ \_def\z####1{\_cs{_z:####1}}%
+ \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}%
+ \_localcolor
+}}
+\_public \hisyntax \hicolor ;
+
+ \_doc -----------------------------
+ Aliases for languages can be declared like this.
+ When `\hisyntax{xml}` is used then this is the same as `\hisyntax{html}`.
+ \_cod -----------------------------
+
+\_sdef{_hialias:xml}{html}
+\_sdef{_hialias:json}{c}
+
+\_endcode % -------------------------------------------
+
+The user can write
+
+\begtt \adef/{\_csstring\\}
+\begtt \hisytnax{C}
+...
+/endtt
+\endtt
+and the code is colorized by C syntax.
+The user can write `\everytt={\hisyntax{C}}` and all verbatim listings are
+colorized.
+
+The \^`\hisyntax``{<name>}` reads the file `hisyntax-<name>.opm` where the
+colorization is declared. The parameter `<name>` is case insensitive and the
+file name must include it in lowercase letters. For example the file
+`hisyntax-c.opm` looks like:
+
+\printdoc hisyntax-c.opm
+
+\OpTeX/ provides `hisyntax-{c,python,tex,html}.opm` files.
+You can take inspiration from these files and declare more languages.
+
+User can re-declare colors by `\hicolors={...}` This value has precedence
+before `\_hicolors<name>` values declared in the `hicolors-<name>.opm` file.
+What exactly to do: copy `\_hicolors<name>={...}`
+from `hicolors-<name>.opm` to your document,
+rename it as `\hicolors={...}` and do you own colors modifications.
+
+Another way to set non-default colors is to declare
+`\newtoks\hicolors<name>` (without the `_` prefix) and set the colors palette here.
+It has precedence before `\_hicolors<name>` (with the `_` prefix) declared in
+the `hicolors-<name>.opm` file.
+This is useful when there are more hi-syntax languages used in one document.
+
+\medskip
+\noindent{\bf Notes for hi-syntax macro writers}
+
+The file `hisyntax-<name>.opm` is read only once in the \TeX/ group.
+If there are definitions then they must be declared as global.
+
+The `hisyntax-<name>.opm` file must (globally) declare `\_hisyntax<name>` tokens string
+where the action over verbatim text is declared typically by `\replfromto` or
+`\replthis` macros.
+
+The verbatim text is preparared by {\em pre-processing phase}, then the
+`\_hisyntax<name>` is applied and then {\em post-processing phase} does final
+corrections. Finally, the verbatim text is printed line by line.
+
+The pre-processing phase does:
+
+\begitems
+* Each space is replaced by {\visiblesp`\n\ \n`}, so `\n<word>\n` should be a pattern to
+ finding whole words (no subwords). The `\n` control sequence is removed in
+ the post-processing phase.
+* Each end of line is repersented by `\n^^J\n`.
+* The `\_start` control sequence is added before the verbatim text and `\_end` control
+ sequence is appended to the end of the verbatim text. These control
+ sequences are removed in post-processing phase.
+\enditems
+
+There are special macros working only in a group when processing the verbatim
+text.
+
+
+\begitems
+* `\n` means noting but it should be used as a boundary of words as mentioned above.
+* `\t` means a tabelator. It is prepared as `\n\t\n` because it can be at
+ the boundary of a word.
+* `\x <letter>{<text>}` can be used as replacing text. Suppose the example
+ \begtt
+ \replfromto{/*}{*/}{\x C{/*#1*/}}
+ \endtt
+ This replaces all C comments `/*...*/` by `\x C{/*...*/}`. But the
+ C comments may span more lines, i.e. the `^^J` should be inside it.
+
+ The macro `\x <letter>{<text>}` is replaced by one or more
+ `\z <letter>{<text>}` in post-processing phase where each parameter `<text>` of
+ `\z` keeps inside one line. Inside-line parameters are represented
+ by `\x C{<text>}` and they are replaced to `\z C{<text>}` without any change.
+ But:
+ \begtt \catcode`\<=13
+ \x C{<text1>^^J<text3>^^J<text3>}
+ is replaced by
+ \z C{<text1>}^^J\z C{<text2>}^^J\z C{<text3>}
+ \endtt
+ The `\z <letter>{<text>}` is expanded to `\_z:<letter>{<text>}` and if
+ `\hicolor <letter> <color>` is declared then
+ `\_z:<letter>{<text>}` expands to `{<color><text>}`. So, required color is
+ activated at all lines (separatelly) where C comment spans.
+* `\y {<text>}` is replaced by `\<text>` in the post processing phase. It should
+ be used for macros without a parameter. You cannot use unprotected macros
+ as replacement text before the post-processing phase, because the post-processing
+ phase is based on expansion whole verbatim text.
+\enditems
+
diff --git a/macros/luatex/optex/base/hisyntax-c.opm b/macros/luatex/optex/base/hisyntax-c.opm
new file mode 100644
index 0000000000..e7583657a4
--- /dev/null
+++ b/macros/luatex/optex/base/hisyntax-c.opm
@@ -0,0 +1,66 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \_hisyntaxc {Syntax highlighting for C sources <2020-04-03>}
+
+\_newtoks \_hisyntaxc \_newtoks \_hicolorsc
+
+\_global\_hicolorsc={% colors for C language
+ \_hicolor K \Red % Keywords
+ \_hicolor S \Magenta % Strings
+ \_hicolor C \Green % Comments
+ \_hicolor N \Cyan % Numbers
+ \_hicolor P \Blue % Preprocessor
+ \_hicolor O \Blue % Non-letters
+}
+\_global\_hisyntaxc={%
+ \_the\_hicolorsc
+ \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax
+ \_replfromto {/*}{*/} {\x C{/*#1*/}}% /*...*/
+ \_replfromto {//}{^^J} {\z C{//#1}^^J}% //...
+ \_replfromto {\_string#}{^^J} {\z P{\##1}^^J}% #include ...
+ \_replthis {\_string\"} {{\_string\"}}% \" protected inside strings
+ \_replfromto {"}{"} {\x S{"#1"}}% "..."
+ %
+ \_edef\_tmpa {()\_string{\_string}+-*/=[]<>,:;\_pcent\_string&\_string^|!?}% non-letters
+ \_ea \_foreach \_tmpa
+ \_do {\_replthis{#1}{\n\o#1\n}}
+ \_foreach % keywords
+ {auto}{break}{case}{char}{continue}{default}{do}{double}%
+ {else}{entry}{enum}{extern}{float}{for}{goto}{if}{int}{long}{register}%
+ {return}{short}{sizeof}{static}{struct}{switch}{typedef}{union}%
+ {unsigned}{void}{while}
+ \_do {\_replthis{\n#1\n}{\z K{#1}}}
+ \_replthis{.}{\n.\n} % numbers
+ \_foreach 0123456789
+ \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}}
+ \_replthis{\e.\c}{.}
+ \_replthis{\e.\n}{.\e}
+ \_replthis{\n.\c}{\c.}
+ \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-}
+ \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-}
+ \_def\o#1{\z O{#1}}
+ \_def\c#1\e{\z N{#1}}
+}
+
+\_endcode %------------------------------------------------
+
+
+Each `hisyntax-<name>.opm` file must declare the token list
+`\_hisyntax<name>` using `\newtoks` and must ceclare the syntax declaration
+in it. The second cotken list `\_hicolors<name>` is optional but recommended.
+User can re-declare his/her own colors by `\hicolors` which has precedence
+before `\_hicolors<name>`.
+
+The public variants can be deacred if you want to give these token lists to
+the user name space. But it is not explicitly needed.
+
+All settings must be global here, because the file is typically read inside
+a group and we need not to read it repeatedly in before each code chunk
+again and again.
+
+Note that `\foreach` is used to each non-letters (expanded via \string
+because we needn't to treate with active or special TeX characters). The
+keyword are applied in the `\foreach` loop too.
+
+See `hi-sytax.opm` for more information about `\hicolor`, `\replfromto` and
+`\replthis` macros.
diff --git a/macros/luatex/optex/base/hisyntax-html.opm b/macros/luatex/optex/base/hisyntax-html.opm
new file mode 100644
index 0000000000..f34aafe66f
--- /dev/null
+++ b/macros/luatex/optex/base/hisyntax-html.opm
@@ -0,0 +1,31 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl\_hisyntaxhtml {Syntax highlighting for html or xml sources <2020-04-03>}
+
+\_newtoks\_hisyntaxhtml \_newtoks\_hicolorshtml
+
+\_global\_hicolorshtml={% colors in html codes
+ \_hicolor A \Cyan % <, > and parameters
+ \_hicolor T \Red % tag names
+ \_hicolor C \Green % comments
+ \_hicolor E \Blue % HTML entities
+ \_hicolor S \Magenta % strings in parameters
+}
+\_global\_hisyntaxhtml={
+ \_the\_hicolorshtml
+ \_replfromto{<!--}{-->}{\x C{<!--#1-->}}
+ \_replthis{<}{\y{_hitaghtml}}
+ \_replthis{\_string&}{\y{_hientityhtml}}
+}
+\_gdef\_hitaghtml#1>{\_hitaghtmlA#1\ >}
+\_gdef\_hitaghtmlA#1\ #2>{\z A{<}\z T{#1}\_def\_tmpb{#2^}%
+ \_if^\_tmpb
+ \_else \_space
+ \_replthis{\ ^}{}\_replfromto{"}{"}{\_histringhtml{"##1"}}\z A{\_tmpb}\_fi
+ \z A{>}%
+}
+\_gdef\_histringhtml#1{\_visiblesp \z S{#1}}
+\_gdef\_hientityhtml#1;{\z E{\&#1;}}
+
+\_endcode %------------------------------------------------
+
diff --git a/macros/luatex/optex/base/hisyntax-python.opm b/macros/luatex/optex/base/hisyntax-python.opm
new file mode 100644
index 0000000000..e703f96fdc
--- /dev/null
+++ b/macros/luatex/optex/base/hisyntax-python.opm
@@ -0,0 +1,82 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \_hisyntaxpython {Syntax highlighting for Python sources <2020-04-04>}
+
+\_newtoks \_hisyntaxpython \_newtoks \_hicolorspython
+
+\_global\_hicolorspython={% colors for Python language
+ \_hicolor M \Orange % Multi line strings
+ \_hicolor S {\_visiblesp \Grey} % Single line strings
+ \_hicolor C \Green % Comments
+ \_hicolor K \LightBlue % Keywords
+ \_hicolor O \Blue % Operators
+ \_hicolor N \Red % Numbers
+ \_hicolor D \Magenta % def names
+ \_hicolor L \Black % class names
+ \_hicolor R \Magenta % Decorators
+}
+\_global\_hisyntaxpython={%
+ \_the\_hicolorspython
+ \_let\s=\_relax \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax
+ \_replthis{\_string\"}{{\_string\"}} % protect \", \'
+ \_replthis{\_string\'}{{\_string\'}}
+ %
+ \_replfromto{\_string#}{^^J}{\z C{\##1}^^J} % comments
+ %
+ \_replthis{'''}{\_noexpand\_hipystr0{'''}M} % search string marks
+ \_replthis{"""}{\_noexpand\_hipystr1{"""}M}
+ \_replthis{"}{\_noexpand\_hipystr2{"}S}
+ \_replthis{'}{\_noexpand\_hipystr3{'}S}
+ \_edef\_tmpb{\_tmpb} % realize string marks
+ %
+ \_foreach {br}{Br}{bR}{BR}{rb}{rB}{Rb}{RB}uUrRbB % string prefixes
+ \_do {\_replthis{#1\s}{\_noexpand\_hipystrpre#1}}
+ \_def\s{}
+ \_edef\_tmpb{\_tmpb}
+ %
+ \_edef \_tmpa {+-*./=<>()[]:,;!|\_pcent % operators
+ \_string{\_string}@\_string&\_string~\_string^}
+ \_ea\_foreach \_tmpa
+ \_do {\_replthis{#1}{\n\o#1\n}}
+ %
+ \_foreach % keywords
+ {and}{as}{assert}{async}{await}{break}{continue}{del}{elif}{else}{except}%
+ {exec}{False}{finally}{for}{from}{global}{if}{import}{in}{is}{lambda}{None}%
+ {nonlocal}{not}{or}{pass}{print}{raise}{return}{True}{try}{while}{with}{yield}%
+ \_do {\_replthis{\n#1\n}{\z K{#1}}}
+ \_replfromto{\n def\n}{\n\o(\n}{\z K{def}\x D{#1}\n\o(\n}
+ \_replfromto{\n class\n}{\n\o(\n}{\z K{class}\x L{#1}\n\o(\n}
+ %
+ \_foreach 0123456789 % numbers
+ \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}}
+ %
+ \_replthis{\e\o.\c}{.}
+ \_replthis{\e\o.\n}{.\e}
+ \_replthis{\n\o.\c}{\c.}
+ \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-}
+ \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-}
+ \_replthis{\e j}{j\e}
+ %
+ \_replfromto{\n\o@\n}{^^J}{\z R{#1}^^J} % decorators
+ %
+ \_def\o#1{\z O{#1}}
+ \_def\c#1\e{\z N{#1}}
+}
+
+\_gdef\_hipystr#1#2#3#4\_hipystr#5#6#7{%
+ \_ifx#1#5\s\x#3{#2#4#2}%
+ \_else \_afterfi{\_hipystr#1{#2}#3#4#6}\_fi
+}
+\_gdef\_hipystrpre#1\x#2{\x#2{#1}\x#2}
+
+\_ifx\LightBlue\_undefined \_gdef\LightBlue {\_setcmykcolor{1 0.43 0 0}}\_fi
+\_ifx\Orange\_undefined \_gdef\Orange {\_setcmykcolor{0 0.64 1 0}}\_fi
+
+\_endcode %------------------------------------------------
+
+This code was greatly inspired by the OPMac hisyntax macros for Python:
+
+ https://gitlab.fit.cvut.cz/krajnpet/PySyntax
+
+created by Petr Krajnik.
+
diff --git a/macros/luatex/optex/base/hisyntax-tex.opm b/macros/luatex/optex/base/hisyntax-tex.opm
new file mode 100644
index 0000000000..2aaaa323fd
--- /dev/null
+++ b/macros/luatex/optex/base/hisyntax-tex.opm
@@ -0,0 +1,38 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl\_hisyntaxtex {Syntax highlighting for TeX sources <2020-04-03>}
+
+\_newtoks\_hisyntaxtex \_newtoks\_hicolorstex
+
+\_global\_hicolorstex={% colors in TeX codes
+ \_hicolor S \Blue % control sequences
+ \_hicolor B \Magenta % {, }, $
+ \_hicolor C \Green % comments
+}
+\_global\_hisyntaxtex={
+ \_the\_hicolorstex
+ \_replthis{\_string\%}{\y{_createcs}{\_csstring\%}}
+ \_replfromto{\_csstring\%}{^^J}{\x C{\_csstring\%#1}^^J}
+ \_replthis{\_string\\}{\y{_createcs}{\_csstring\\}}
+ \_replthis{\_string\{}{\y{_createcs}{\_csstring\{}}
+ \_replthis{\_string\}}{\y{_createcs}{\_csstring\}}}
+ \_replthis{\_string\$}{\y{_createcs}{\_csstring\$}}
+ \_replthis{\_csstring\\}{\y{_createcs}}
+ \_replthis{\_csstring\{}{\x B{\_csstring\{}}
+ \_replthis{\_csstring\}}{\x B{\_csstring\}}}
+ \_replthis{\_csstring\$}{\x B{\_csstring\$}}
+}
+\_gdef\_createcs#1{\_def\_csletters{#1}%
+ \_ifcat a\_noexpand#1\_afterfi{\_futurelet\_next\_createcsA}%
+ \_else \_ea\_createcsF \_fi
+}
+\_gdef\_createcsA{\_ifcat a\_noexpand\_next \_ea\_createcsB \_else \_ea\_createcsF \_fi}
+\_gdef\_createcsB#1{\_addto\_csletters{#1}\_futurelet\_next\_createcsA}
+\_gdef\_createcsF{\z S{\_csstring\\\_csletters}}
+\_gdef\_createbb{\_ea\_createcs\_csstring\\}
+
+\_endcode %------------------------------------------------
+
+The `\_createcs` reads next tokens as the tokenizer does it until the name
+of a control sequence is read. It is saved to the `\_csletters` macro and
+the macro \_createcsF prints it.
diff --git a/macros/luatex/optex/base/hyperlinks.opm b/macros/luatex/optex/base/hyperlinks.opm
new file mode 100644
index 0000000000..ab0909b553
--- /dev/null
+++ b/macros/luatex/optex/base/hyperlinks.opm
@@ -0,0 +1,156 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \ulink {Hyperlinks <2020-04-22>} % preloaded in format
+
+ \_doc ----------------------------
+ \`\dest``[<type>:<spec>]` creates a destination of internal links. The
+ destination is declared in the format `<type>:<spec>`. If the \^`\hyperlinks`
+ command in not used, then `\dest` does nothing else it is set to `\_destactive`.
+ The \`\_destactive` is implemented by `\_pdfdest` primitive. It creates a box
+ in which the destination is shifted by \`\_destheight`. The reason is that
+ the destination is exactly at top border of the PDF viewer but we want to see
+ the line where destination is. The destination box is positioned by
+ different way dependent on current vertical or horizontal mode.
+ \_cod ----------------------------
+
+\_def\_destheight{1.4em}
+\_def\_destactive[#1:#2]{\_if$#2$\_else\_ifvmode
+ \_tmpdim=\_prevdepth \_prevdepth=-1000pt
+ \_destbox[#1:#2]\_prevdepth=\_tmpdim
+ \_else \_destbox[#1:#2]%
+ \_fi\_fi
+}
+\_def\_destbox[#1]{\_vbox to0pt{\_kern-\_destheight \_pdfdest name{#1} xyz\_vss}}
+\_def\_dest[#1]{}
+\_public \dest ;
+
+ \_doc ----------------------------
+ \`\link``[<type>:<spec>]{<color>}{<text>}` creates an internal link to \^`\dest`
+ with the same `<type>:<spec>`. You can have more links with the same
+ `<type>:<spec>` but only one `\dest` in the document. If \^`\hyperlinks`
+ command is not used, then `\link` only prints `<text>` else it is set to
+ `\_linkactive`.
+ The \`\_linkactive` is implemented by `\_pdfstartlink...\_pdfendlink`
+ primitives.
+ \nl
+ \`\ilink``[<type>:<spec>]{<text>}` is equivalent to `\_link` but
+ the `<color>` is used from \^`\hyperlinks` declaration.
+ \_cod ----------------------------
+
+\_protected\_def\_linkactive[#1:#2]#3#4{\_leavevmode\_pdfstartlink height.9em depth.3em
+ \_pdfborder{#1} goto name{#1:#2}\_relax {#3#4}\_pdfendlink
+}
+\_protected\_def\_link[#1]#2#3{\_leavevmode{#3}}
+\_protected\_def\_ilink[#1]#2{\_leavevmode{#2}}
+\_public \ilink \link ;
+
+ \_doc ----------------------------
+ \`\ulink``[<url>]{<text>}` creates external link. It prints only te `<text>` by default but
+ the \^`\hyperlinks` declaration defines it as \`\_urlactive``[url:<url>]{<text>}`.
+ The external link is created by the `\_pdfstartlink...\pdfendlink` primitives.
+ The `<url>` is detokenized with `\escapechar=-1` before it is used, so
+ `\%`, `\#` etc. can be used in the `<url>`.
+ \_cod ----------------------------
+
+\_protected\_def\_urlactive[#1:#2]#3#4{\_leavevmode{\_escapechar=-1
+ \_pdfstartlink height.9em depth.3em \_pdfborder{#1}%
+ user{/Subtype/Link/A <</Type/Action/S/URI/URI(\_detokenize{#2})>>}\_relax
+ {#3#4}\_pdfendlink}%
+}
+\_def\_ulink[#1]#2{\_leavevmode{#2}}
+\_def\_urlcolor{}
+\_public \ulink ;
+
+ \_doc ----------------------------
+ The `\_pdfstartlink` primitive uses `\_pdfborder{<type>}` in its parameter
+ (see \^`\_linkactive` or \^`\_urlactive` macros). The \`\_pdfborder``{<type>}`
+ expands to `attr{/C[? ? ?] /Border[0 0 .6]}` if the
+ `\<type>border` (i.e.\ \`\refborder`, \`\citeborder`, \`\tocborder`, \`\pgborder`,
+ \`\urlborder`, \`\fntborder` or \`\fnfborder`)
+ is defined. User can define it in
+ order to create colored frames around active links. For example
+ `\def\tocborder{1 0 0}` causes red frames in TOC (not printed, only visible
+ in PDF viewers).
+ \_cod ----------------------------
+
+\_def\_pdfborder#1{\_ifcsname #1border\_endcsname
+ attr{/C[\_csname #1border\_endcsname] /Border[0 0 .6]}%
+ \_else attr{/Border[0 0 0]}\_fi
+}
+
+ \_doc ----------------------------
+ \`\hyperlinks``{<ilink_color>}{<ulink_color>}` activates `\dest`, `\link`,
+ `\ilink`, `\ulink` in order they create links. These macros are redefined
+ here to their \"active" version.
+ \_cod ----------------------------
+
+\_def\_hyperlinks#1#2{%
+ \_let\_dest=\_destactive \_let\_link=\_linkactive
+ \_def\_ilink[##1]##2{\_link[##1]{\_localcolor#1}{##2}}%
+ \_def\_ulink[##1]##2{\_urlactive[url:##1]{\_localcolor#2}{##2}}%
+ \_public \dest \ilink \ulink ;%
+}
+\_public \hyperlinks ;
+
+ \_doc ----------------------------
+ \`\url``{<url>}` does approximately the same as \^`\ulink``[<url>]{<url>}`, but
+ more work is done before the `\ulink` is processed. The link-version of <url>
+ is saved to `\_tmpa` and the printed version in `\_tmpb`. The printed
+ version is modified in order to set a breakpoints to special places of the
+ `<url>`. For example `//` is replaced by `\_urlskip/\_urlskip/\_urlbskip`
+ where `\urlskip` adds a small nobreakable glue between these two slashes and
+ before them and `\_urlbskip` adds a breakable glue after them.
+ \nl
+ The text version of the `<url>` is printed in \`\_urlfont`.
+ \_cod ----------------------------
+
+\_def\_url#1{{%
+ \_def\_tmpa{#1}\_replstring\_tmpa {\|}{}%
+ {\_escapechar=-1 \_ea}\_ea\_edef\_ea\_tmpa\_ea{\_detokenize\_ea{\_tmpa}}%
+ \_def\_tmpb{#1}\_replstring\_tmpb {\|}{\_urlbskip}%
+ \_replstring\_tmpb {//} {{\_urlskip\_urlslashslash\_urlbskip}}%
+ \_replstring\_tmpb {/} {{\_urlskip/\_urlbskip}}%
+ \_replstring\_tmpb {.} {{\_urlskip.\_urlbskip}}%
+ \_replstring\_tmpb {?} {{\_urlskip?\_urlbskip}}%
+ \_replstring\_tmpb {=} {{\_urlskip=\_urlbskip}}%
+ \_ea\_replstring\_ea\_tmpb \_ea{\_string &} {{\_urlbskip\_char`\& \_urlskip}}%
+ \_ea\_replstring\_ea\_tmpb \_ea{\_bslash|} {{\_penalty0}}%
+ \_ea\_ulink \_ea[\_tmpa] {\_urlfont\_tmpb\_null}%
+}}
+\_def\_urlfont{\_tt}
+\_def\_urlskip{\_null\_nobreak\_hskip0pt plus0.05em\_relax}
+\_def\_urlbskip{\_penalty100 \_hskip0pt plus0.05em\_relax}
+\_def\_urlslashslash{/\_urlskip/}
+
+\_public \url ;
+
+\_endcode % ----------------------------------------
+
+
+There are four types of the internal links and one type of external link:
+
+\begitems
+* `ref:<label>` -- the destination is created when `\label[<label>]` is used,
+ see also the section \ref[references].
+* `toc:<tocrefnum>` -- the destination is created at chap/sec/secc titles,
+ see also the section \ref[maketoc].
+* `pg:<gpageno>` -- the destination is created at beginning of each page,
+ see also the section \ref[output].
+* `cite:<bibnum>` -- the destination is created in bibliography reference,
+ see also the section \ref[bib].
+* `url:<url>` -- used by `\url` or `\ulink`,
+ see also the end of this section.
+\enditems
+
+The `<tocrefnum>`, `<gpageno>` and `<bibnum>` are numbers starting from one and
+globally incremented by one in whole document. The registers \^`\tocrefnum`,
+\^`\gpageno` and \^`\bibnum` are used for these numbers.
+
+When a chap/sec/secc title is prefixed by `\label[<label>]`, then both types
+of internal links are created at the same destination place:
+`toc:<tocrefnum>` and `ref:<label>`.
+
+\_endinput
+
+2020-04-22 \| in \url: bug fixed
+2020-03-15 introduced \ No newline at end of file
diff --git a/macros/luatex/optex/base/hyphen-lan.opm b/macros/luatex/optex/base/hyphen-lan.opm
new file mode 100644
index 0000000000..76feb2296d
--- /dev/null
+++ b/macros/luatex/optex/base/hyphen-lan.opm
@@ -0,0 +1,203 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \langlist {Initialization of hypenation patterns <2020-03-10>} % preloaded in format
+
+ \_doc -----------------------------
+ The <iso-code> means a shortcut of language name (mostly by ISO 639-1).
+ The following control sequences are used for language switching:
+ \begitems
+ * `\_lan:<number>` expands to `<iso-code>` of the language.
+ The number is internal number of languages used as a value of
+ `\language` register.
+ * `\_ulan:<long-lang>` expands to `<iso-code>` too. This is transformation
+ from long name of language (lowercase letters) to <iso-code>.
+ * `\_<iso-code>Patt` (for example `\_csPatt`) is the language `<number>` declared by `\chardef`.
+ * `\<iso-code>lang`
+ (for example \`\enlang`, \`\cslang`, \`\sklang`, \`\delang`, \`\pllang`)
+ is language selector. It exists in two states
+ \begitems
+ * Initialization state: when `\<iso-code>lang` is used first then it
+ must load the patterns into memory using Lua code. If it is done then
+ the `\<iso-code>lang` re-defines itself to processing state.
+ * Processing state: it only sets `\language=\_<iso-code>Patt`, i.e it
+ selects the hyphenation patterns. It does a little more
+ language-dependent work, as mentioned below.
+ \enditems
+ * `\_langspecific:<isocode>` is processed by `\<iso-code>lang` and it
+ should include language-specific macros declared by user or macro designer.
+ \enditems
+ The USenglish patters are preloaded first:
+ \_cod -----------------------------
+
+\_chardef\_enPatt=0
+\_def\_pattlist{\_enPatt=0}
+\_def\_langlist{en(USenglish)}
+\_sdef{_lan:0}{en}
+\_sdef{_ulan:usenglish}{en}
+\_def\_enlang{\_uselang{en}\_enPatt23} % \lefthyph=2 \righthyph=3
+\_def\enlang{\_enlang}
+\_sdef{_langspecific:en}{\_nonfrenchspacing}
+
+\_lefthyphenmin=2 \_righthyphenmin=3 % disallow x- or -xx breaks
+\_input hyphen % en(USenglish) patterns from TeX82
+
+ \_doc -----------------------------
+ \`\preplang` `<iso-code> <long-lang> <number-cs> <number> <pre-hyph><post-hyph>`
+ prepares the\nl `\<iso-code>lang` to its initialization state. Roughly
+ speaking, it does:
+ \begtt \catcode`\<=13
+ \chardef\_<iso-code>Patt = <number>
+ \def\_lan:<number> {<iso-code>}
+ \def\_ulan:<long-lang> {<iso-code>}
+ \def\_<iso-code>lang {%
+ \_loadpattrs <long-lang> <number> % loads patterns using Lua code
+ \gdef\_<iso-code>lang {\_uselang{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>}
+ \_<iso-code>lang % runs itself in processing state
+ }
+ \def\<iso-code>lang {\_<iso-code>lang} % public version \<iso-code>lang
+ \endtt
+ You can see that `\<iso-code>lang` runs \`\_loadpattrs` `<long-lang> <iso-code>`
+ in initialization state and \^`\_uselang` in processing state.
+ \_cod -----------------------------
+
+\_def\_preplang #1 #2 #3#4 #5 {%
+ \_chardef#3=#4
+ \_sdef{_lan:#4}{#1}\_lowercase{\_sdef{_ulan:#2}}{#1}%
+ \_def\_next{\_ea\_noexpand\_csname _#1lang\_endcsname}
+ \_ea\_edef \_csname _#1lang\_endcsname {%
+ \_lowercase{\_noexpand\_loadpattrs #2} #4 % loads patterns
+ \_gdef\_next{\_noexpand\_uselang{#1}#3#5}% re-defines itself
+ \_next % runs itself in processing state
+ }
+ \_addto\_langlist{ #1(#2)}%
+ \_sdef{#1lang}{\_csname _#1lang\_endcsname}% unprefixed \<isocode>lang
+}
+\_def\_loadpattrs#1 #2 {%
+ \_directlua{
+ require("luatex-hyphen")
+ luatexhyphen.loadlanguage("#1",#2)
+ }%
+}
+
+ \_doc -----------------------------
+ \`\_uselang``{<iso-code>}\_<iso-code>Patt <pre-hyph><post-hyph>`\nl
+ sets `\language`, `\lefthyphenmin`, `\righthyphenmin` and runs
+ `\frenchspacing`. This default language-dependent settings
+ should be re-declared by `\_langspecific:<iso-code>` which is run
+ finally (it is `\relax` by default, only `\_langspecific:en` runs
+ \^`\nonfrenchspacing`).
+ \_cod -----------------------------
+
+\_def\_uselang#1#2#3#4{\_language=#2\_lefthyphenmin=#3\_righthyphenmin=#4\_relax
+ \_frenchspacing % \nonfrenchspacing can be set in \cs{_langspecific:lan}
+ \_cs{_langspecific:#1}%
+}
+ \_doc -----------------------------
+ The \`\uselanguage` `{<long-lang>}` is defined here
+ (for compatibility with e-plain users).
+ \_cod -----------------------------
+
+\_def\_uselanguage#1{\_lowercase{\_cs{_\_cs{_ulan:#1}lang}}}
+\_public \uselanguage ;
+
+ \_doc -----------------------------
+ The numbers for languages are declared as fixed constants (no
+ auto-generated). This concept is inspired from CSplain.
+ There are typical numbers of languages in CSplain: 5=Czech in IL2,
+ 15=Czech in T1 and 115=Czech in Unicode. We keep these constants
+ but we load only Unicode patterns (greater than 100), of course.
+ \_cod -----------------------------
+
+\_preplang enus USenglishmax \_enusPatt 100 23
+\_preplang engb UKenglish \_engbPatt 101 23
+\_preplang it Italian \_itPatt 102 22
+\_preplang ia Interlingua \_iaPatt 103 22
+\_preplang id Indonesian \_idPatt 104 22
+
+\_preplang cs Czech \_csPatt 115 23
+\_preplang sk Slovak \_skPatt 116 23
+\_preplang de nGerman \_dePatt 121 22
+\_preplang fr French \_frPatt 122 22
+\_preplang pl Polish \_plPatt 123 22
+\_preplang cy Welsh \_cyPatt 124 23
+\_preplang da Danish \_daPatt 125 22
+\_preplang es Spanish \_esPatt 126 22
+\_preplang sl Slovenian \_slPatt 128 22
+\_preplang fi Finnish \_fiPatt 129 22
+\_preplang hy Hungarian \_huPatt 130 22
+\_preplang tr Turkish \_trPatt 131 22
+\_preplang et Estoniak \_etPatt 132 23
+\_preplang eu Basque \_euPatt 133 22
+\_preplang ga Irish \_gaPatt 134 23
+\_preplang nb Bokmal \_nbPatt 135 22
+\_preplang nn Nynorsk \_nnPatt 136 22
+\_preplang nl Dutch \_nlPatt 137 22
+\_preplang pt Portuguese \_ptPatt 138 23
+\_preplang ro Romanian \_roPatt 139 22
+\_preplang hr Croatian \_hrPatt 140 22
+\_preplang zh Pinyin \_zhPatt 141 11
+\_preplang is Icelandic \_isPatt 142 22
+\_preplang hsb Uppersorbian \_hsbPatt 143 22
+\_preplang af Afrikaans \_afPatt 144 12
+\_preplang gl Galician \_glPatt 145 22
+\_preplang kmr Kurmanji \_kmrPatt 146 22
+\_preplang tk Turkmen \_tkPatt 147 22
+\_preplang la Latin \_laPatt 148 22
+\_preplang lac classicLatin \_lacPatt 149 22
+\_preplang lal liturgicalLatin \_lalPatt 150 22
+\_preplang elm monoGreek \_elmPatt 201 11
+\_preplang elp Greek \_elpPatt 202 11
+\_preplang grc ancientGreek \_grcPatt 203 11
+\_preplang ca Catalan \_caPatt 204 22
+\_preplang cop Coptic \_copPatt 205 11
+\_preplang mn Mongolian \_mnPatt 206 22
+\_preplang sa Sanskrit \_saPatt 207 13
+\_preplang ru Russian \_ruPatt 208 22
+\_preplang uk Ukrainian \_ukPatt 209 22
+\_preplang hy Armenian \_hyPatt 210 12
+\_preplang as Assamese \_asPatt 211 11
+\_preplang hi Hindi \_hiPatt 212 11
+\_preplang kn Kannada \_knPatt 213 11
+\_preplang lv Latvian \_lvPatt 215 22
+\_preplang lt Lithuanian \_ltPatt 216 22
+\_preplang ml Malayalam \_mlPatt 217 11
+\_preplang mr Marathi \_mrPatt 218 11
+\_preplang or Oriya \_orPatt 219 11
+\_preplang pa Panjabi \_paPatt 220 11
+\_preplang ta Tamil \_taPatt 221 11
+\_preplang te Telugu \_tePatt 222 11
+
+ \_doc -----------------------------
+ The \`\langlist` includes names of all languages which are ready to load
+ and use their hyphenation patterns. This list is printed to terminal and
+ to log at ini\TeX/ state here. It can be used when processing document too.
+ \_cod -----------------------------
+
+\_message{Language hyph.patterns ready to load: \_langlist.
+ Use \_string\<shortname>lang to initialize language,
+ \_string\cslang\_space for example}
+
+\_public \langlist ;
+
+\_endcode % ---------------------------------------------
+
+
+Maybe, you need to do more language specific actions than only to swich
+hyphenation patterns. For example you need to load a specific font with a
+specific script used in selected language, you can define a macros for
+quotation marks depending on the language etc.
+
+The example shows how to declare such language specific things.
+
+\begtt
+\def\langset #1 #2{\sdef{_langspecific:#1}{#2}}
+
+\langset fr {... declare French quotation marks}
+\langset de {... declare German quotation marks}
+\langset gr {... switch to Greek fonts family}
+... etc.
+\endtt
+
+Note that you need not to set language specific phrases (like `\today`)
+by this code. Another concept is used for such tasks. See the
+section~\ref[langphrases] for more details.
diff --git a/macros/luatex/optex/base/if-macros.opm b/macros/luatex/optex/base/if-macros.opm
new file mode 100644
index 0000000000..c33c8a91d3
--- /dev/null
+++ b/macros/luatex/optex/base/if-macros.opm
@@ -0,0 +1,258 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \newif {Special if-macros, is-macros and loops <2020-05-02>} % preloaded in format
+
+ \_doc ----------------------------
+ \secc Classical \code{\\newif}
+ The \`\newif` macro implements boolean value.
+ It works as in plain \TeX. It means that
+ after `\newif\ifxxx` you can use `\xxxtrue` or
+ `\xxxfalse` to set the boolean value and use `\ifxxx true\else false\fi`
+ to test this value. The default value is false.
+
+ The macro \`\_newifi` enables to declare `\_ifxxx` and to use `\_xxxtrue` and
+ `\_xxxfalse`. This means that it is usable for internal name space
+ (`_`prefixed macros).
+ \_cod ----------------------------
+
+\_def\_newif #1{\_ea\_newifA \_string #1\_relax#1}
+\_ea\_def \_ea\_newifA \_string\if #1\_relax#2{%
+ \_sdef{#1true}{\_let#2=\_iftrue}%
+ \_sdef{#1false}{\_let#2=\_iffalse}%
+ \_let#2=\_iffalse
+}
+\_def\_newifi #1{\_ea\_newifiA \string#1\_relax#1}
+\_ea\_def \_ea\_newifiA \_string\_if #1\_relax#2{%
+ \_sdef{_#1true}{\_let#2=\_iftrue}%
+ \_sdef{_#1false}{\_let#2=\_iffalse}%
+ \_let#2=\_iffalse
+}
+\_public \newif ;
+
+ \_doc ----------------------------
+ \secc Loops
+ The \`\loop` `<codeA> \ifsomething <codeB>` \`\repeat` loops `<codeA><codeB>`
+ until `\ifsomething` is false. Then `<codeB>` is not executed and loop is
+ finished. This works like in plain \TeX, but implementation is somewhat
+ better (you can use `\else` clause after the `\ifsomething`).
+
+ There are public version `\loop...\repeat` and private version
+ \`\_loop` ...\`\_repeat`. You cannot mix both versions in one loop.
+
+ The `\loop` macro keeps its original plain TeX meaning. It is not
+ expandable and nested `\loop`s are possible only in a \TeX/ group.
+ \_cod ----------------------------
+
+\_long\_def \_loop #1\_repeat{\_def\_body{#1}\_iterate}
+\_def \loop #1\repeat{\_def\_body{#1}\_iterate}
+\_let \_repeat=\_fi % this makes \loop...\if...\repeat skippable
+\_let \repeat=\_fi
+\_def \_iterate {\_body \_ea \_iterate \_fi}
+
+ \_doc -----------------------------
+ \`\foreach` `<list>` \`\do` `{<what>}`
+ repeats `<what>` for each element of the
+ `<list>`. The `<what>` can include `#1` which is substituted by each
+ element of the `<list>`. The macro is expandable.
+
+ \`\fornum` `<from>..<to>` \`\do` `{<what>}` or
+ \`\fornumstep` `<num>: <from>..<to>` \`\do` `{<what>}`
+ repeats `<what>` for each number from `<from>` to `<to>` (with step `<num>`
+ or with step one). The `<what>` can include `#1` which is substituted by
+ current number. The sequence `<from>..<to>` can be decreasing too.
+ The macro is expandable.
+
+ Recommendation: it is better to
+ use private variants of \`\_foreach` and \`\_fornum`.
+ When the user writes `\input tikz` then `\foreach` macro is redefined! The
+ private variants use \`\_do` separator instead `\do` separator.
+ \_cod -----------------------------
+
+\_newcount\_frnum % the numeric variable used in \fornum
+\_def\_do{\_doundefined} % we need to ask \_ifx#1\_do ...
+
+\_long\_def\_foreach #1\_do#2{\_putforstack
+ \_immediateassignment\_def\_fbody##1{#2}%
+ \_foreachA #1\_do}
+\_long\_def\_foreachA #1{\_ifx\_do#1\_getforstack\_else\_fbody{#1}\_ea\_foreachA\_fi}
+
+\_def\_fornum#1..#2\_do{\_fornumstep 1:#1..#2\_do}
+\_long\_def\_fornumstep#1:#2..#3\_do#4{\_putforstack
+ \_immediateassigned{%
+ \_def\_fbody##1{#4}%
+ \_def\_fornumsgn{}%
+ \_def\_fornumrel{<}%
+ \_frnum=\_numexpr#2\_relax
+ \_ifnum\_numexpr#3<\_frnum \_def\_fornumrel{>}\_fi %decreasing sequence
+ \_ifnum\_numexpr#1\_fornumrel0 \_def\_fornumsgn{-}\_fi % correction
+ }%
+ \_fornumB{#3}{#1}%
+}
+\_def\_fornumB #1#2{\_ifnum\_numexpr#1\_fornumrel\_frnum \_getforstack \_else
+ \_ea\_fbody\_ea{\_the\_frnum}%
+ \_immediateassignment\_advance\_frnum by\_numexpr\_fornumsgn#2\_relax
+ \_afterfi{\_fornumB{#1}{#2}}\_fi
+}
+\_def\_afterfi#1#2\_fi{\_fi#1}
+
+\_def\foreach #1\do{\_foreach #1\_do}
+\_def\fornum#1..#2\do{\_fornumstep 1:#1..#2\_do}
+\_def\fornumstep#1:#2..#3\do{\_fornumstep #1:#2..#3\_do}
+
+ \_doc ----------------------------
+ The `\foreach` and `\fornum` macros can be nested and arbitrary combined.
+ When they are nested then use `##1` for the variable of nested level,
+ `####1` for the variable of second nested level etc. Example:
+ \begtt
+ \foreach ABC \do {\fornum 1..5 \do {letter:#1, number: ##1. }}
+ \endtt
+ Implementation note:
+ we cannot use \TeX/-groups for nesting levels because we want to do the
+ macros expandable. We must implement a special for-stack which saves the
+ data needed by `\foreach` and `\fornum`. The \`\_putforstack` is used
+ when `\for*` is initialized and \`\_getforstack` is used when the
+ `\for*` macro ends. The \`\_forlevel` variable keeps the current nesting
+ level. If it is zero, then we need not save nor restore any data.
+ \_cod ----------------------------
+
+\_newcount\_forlevel
+\_def\_putforstack{\_immediateassigned{%
+ \_ifnum\_forlevel>0
+ \_sdef{_frnum:\_the\_forlevel\_ea}\_ea{\_the\_frnum}%
+ \_slet{_fbody:\_the\_forlevel}{_fbody}%
+ \_fi
+ \_advance\_forlevel by1
+}}
+\_def\_getforstack{\_immediateassigned{%
+ \_advance\_forlevel by-1
+ \_ifnum\_forlevel>0
+ \_slet{_fbody}{_fbody:\_the\_forlevel}%
+ \_frnum=\_cs{_frnum:\_the\_forlevel}\_space
+ \_fi
+}}
+
+ \_doc ----------------------------
+ \secc Is-macros
+ There are a collection of macros
+ `\isempty`, `\istoksempty`, `\isequal`, `\ismacro`, `\isdefined`, `\isinlist` and `\isfile`
+ with common syntax:
+ \begtt \catcode`\<=13
+ \issomething <params> \iftrue <codeA> \else <codeB> \fi
+ or
+ \issomething <params> \iffalse <codeB> \else <codeA> \fi
+ \endtt
+ The `\else` part is optional. The `<codeA>` is processed if
+ `\issomething<params>` generates true condition. The `<codeB>`
+ is processed if `\issomething<params>` generates false condition.
+
+ The `\iftrue` or `\iffalse` is an integral part of this syntax
+ because we need to keep skippable nested `\if` conditions.
+
+ Implementation note:
+ we read this `\iftrue` or `\iffalse` into unseparated parameter and repeat
+ it because we need to remove an optional space before this command.
+
+ \medskip\noindent
+ \`\isempty` `{<text>}\iftrue`
+ is true if the `<text>` is empty. This macro is expandable.\nl
+ \`\istoksempty` `<tokens variable>\iftrue`
+ is true if the `<tokens variable>` is empty. It is expandable.
+ \_cod ----------------------------
+
+\_def \_isempty #1#2{\_if\_relax\_detokenize{#1}\_relax \_else \_ea\_unless \_fi#2}
+\_def \_istoksempty #1#2{\_ea\_isempty\_ea{\_the#1}#2}
+\_public \isempty \istoksempty ;
+
+ \_doc ----------------------------
+ \`\isequal` `{<textA>}{<textB>}\iftrue`
+ is true if the <textA> and <textB> are
+ equal, only from strings point of view, category codes are ignored.
+ The macro is expandable.
+ \_cod ----------------------------
+
+\_def\_isequal#1#2#3{\_directlua{%
+ if "\_luaescapestring{\_detokenize{#1}}"=="\_luaescapestring{\_detokenize{#2}}"
+ then else tex.print("\_nbb unless") end}#3}
+\_public \isequal ;
+
+ \_doc ----------------------------
+ \`\ismacro` `\macro{text}\iftrue` is true if macro is defined as {<text>}.
+ Category codes are ignored in this testing. The macro is expandable.
+ \_cod ----------------------------
+
+\_def\_ismacro#1{\_ea\_isequal\_ea{#1}}
+\_public \ismacro ;
+
+ \_doc ----------------------------
+ \`\isdefined` `{<csname>}\iftrue` is true if `\<csname>` is defined.
+ The macro is expandable.
+ \_cod ----------------------------
+
+\_def\_isdefined #1#2{\_ifcsname #1\_endcsname \_else \_ea\_unless \_fi #2}
+\_public \isdefined ;
+
+ \_doc ----------------------------
+ \`\isinlist` `\list{<text>}\iftrue` is true if the
+ `<text>` is included the macro body of the `\list`.
+ The category code are relevant here. The macro is not expandable.
+ \_cod ----------------------------
+
+\_long\_def\_isinlist#1#2{\_begingroup
+ \_long\_def\_tmp##1#2##2\_end/_%
+ {\_endgroup\_if\_relax\_detokenize{##2}\_relax \_ea\_unless\_fi}%
+ \_ea\_tmp#1\_endlistsep#2\_end/_%
+}
+\_public \isinlist ;
+
+ \_doc -----------------------------
+ \`\isfile` `{<filename>}\iftrue` is true if the file <filename> exists and are
+ readable by \TeX.
+ \_cod -----------------------------
+
+\_newread \_testin
+\_def\_isfile #1{%
+ \_openin\_testin ={#1}\_relax
+ \_ifeof\_testin \_ea\_unless
+ \_else \_closein\_testin
+ \_fi
+}
+\_public \isfile ;
+
+ \_doc -----------------------------
+ \`\isfont` `{<fontname or [fontfile]>}\iftrue`
+ is true if given font exists. The result of this testing
+ is saved to the \`\_ifexistfam`.
+ \_cod -----------------------------
+
+\_newifi \_ifexistfam
+\_def\_isfont#1#2{%
+ \_begingroup
+ \_suppressfontnotfounderror=1
+ \_font\_testfont={#1}\_relax
+ \_ifx\_testfont\_nullfont \_def\_tmp{\_existfamfalse \_unless}
+ \_else \_def\_tmp{\_existfamtrue}\_fi
+ \_ea \_endgroup \_tmp #2%
+}
+\_public \isfont ;
+
+ \_doc ----------------------------
+ The last macro \`\isnextchar` `<char>{<codeA>}{<codeB>}`
+ has different syntax than all others is-macros.
+ It executes `<codeA>` if next character is equal to <char>.
+ Else the `<codeB>` is executed. The macro is not expandable.
+ \_cod ----------------------------
+
+\_long\_def\_isnextchar#1#2#3{\_begingroup\_toks0={\_endgroup#2}\_toks1={\_endgroup#3}%
+ \_let\_tmp=#1\_futurelet\_next\_isnextcharA
+}
+\_def\_isnextcharA{\_the\_toks\_ifx\_tmp\_next0\_else1\_fi\_space}
+
+\_public \isnextchar ;
+
+
+\_endcode
+
+2020-05-02 \newif bug fix
+2020-04-15 \fornumstep 3: 1..12 instead \fornum 1..12\step 3
+2020-04-15 \fornum, \foreach can be nested without groups
+2020-04-01 implemented
diff --git a/macros/luatex/optex/base/languages.opm b/macros/luatex/optex/base/languages.opm
new file mode 100644
index 0000000000..aedcd249f4
--- /dev/null
+++ b/macros/luatex/optex/base/languages.opm
@@ -0,0 +1,121 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \_mtext {Languages <2020-04-29>} % preloaded in format
+
+ \_doc -----------------------------
+ Only four words are generated by \OpTeX/ macros: \"Chapter",
+ \"Table", \"Figure" and \"Subject". These phrases can be generated depending
+ on the current value of `\language` register, if you use \`\_mtext``{<phrase-id>}`,
+ specially `\_mtext{chap}`, `\_mtext{t}`, `\_mtext{f}` or `\_mtext{subj}`.
+ If your macros generate more words then
+ you can define such words by `\sdef{_mt:<phrase-id>:<lang>}` where
+ `<phrase-id>` is a label for declared word and `<lang>` is language shortcut
+ (iso code).
+ \_cod -----------------------------
+
+\_def\_mtext#1{\_trycs{_mt:#1:\_trycs{_lan:\_the\_language}{en}}
+ {\_csname _mt:#1:en\_endcsname}}
+
+\_sdef{_mt:chap:en}{Chapter} \_sdef{_mt:chap:cs}{Kapitola} \_sdef{_mt:chap:sk}{Kapitola}
+\_sdef{_mt:t:en}{Table} \_sdef{_mt:t:cs}{Tabulka} \_sdef{_mt:t:sk}{Tabuľka}
+\_sdef{_mt:f:en}{Figure} \_sdef{_mt:f:cs}{Obrázek} \_sdef{_mt:f:sk}{Obrázok}
+\_sdef{_mt:subj:en}{Subject} \_sdef{_mt:subj:cs}{Věc} \_sdef{_mt:subj:sk}{Vec}
+
+ \_doc -----------------------------
+ Using \`\_langw` `<lang> <chapter> <table> <figure> <subject>` you can
+ declare these words more effectively:
+ \maxlines=13
+ \_cod -----------------------------
+
+\_def \_langw #1 #2 #3 #4 #5 {%
+ \_sdef{_mt:chap:#1}{#2}\_sdef{_mt:t:#1}{#3}\_sdef{_mt:f:#1}{#4}%
+ \_sdef{_mt:subj:#1}{#5}%
+}
+
+\_langw en Chapter Table Figure Subject
+%--------------------------------------------------------------
+\_langw cs Kapitola Tabulka Obrázek Věc
+\_langw de Kapitel Tabelle Abbildung Subjekt
+\_langw es Capítulo Tabla Figura Sujeto
+\_langw fr Chaptire Tableau Figure Matière
+\_langw it Capitolo Tabella Fig. Soggetto
+\_langw pl Rozdział Tabela Ilustracja Temat
+\_langw gr Κεφάλαιο Πίνακας Σχήμα θέμα
+\_langw ru Глава Таблица Рисунок Предмет
+\_langw sk Kapitola Tabuľka Obrázok Vec
+
+ \_doc -----------------------------
+ You can add more words as you wish. For example \`\today` macro:
+ \_cod -----------------------------
+
+\_def \_monthw #1 #2 #3 #4 #5 #6 #7 {%
+ \_sdef{_mt:m1:#1}{#2}\_sdef{_mt:m2:#1}{#3}\_sdef{_mt:m3:#1}{#4}%
+ \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#5}\_sdef{_mt:m6:#1}{#5}%
+ \_monthwB #1
+}
+\_def \_monthwB #1 #2 #3 #4 #5 #6 #7 {%
+ \_sdef{_mt:m7:#1}{#2}\_sdef{_mt:m8:#1}{#3}\_sdef{_mt:m9:#1}{#4}%
+ \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#5}\_sdef{_mt:m12:#1}{#5}%
+}
+
+\_monthw en January February March April May June
+ July August September October November December
+\_monthw cs ledna února března dubna května června
+ července srpna září října listopadu prosince
+\_monthw sk januára februára marca apríla mája júna
+ júla augusta septembra októbra novembra decembra
+
+\_sdef{_mt:today:en}{\_mtext{m\_the\_month} \_the\_day, \_the\_year}
+\_sdef{_mt:today:cs}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year}
+\_slet{_mt:today:sk}{_mt:today:cs}
+
+\_def\_today{\_mtext{today}}
+\_public \today ;
+
+ \_doc -----------------------------
+ Quotes should be tagged by `\"<text>"` and `\'<text>'` if `\<iso-code>quotes`
+ is declared at beginning of the document (for example `\enquotes`).
+ If not, then the control
+ sequences `\"` and `\'` are undefined. Remember, that they are used in
+ another meaning when `\oldaccents` command is used.
+ The macros `\"` and `\'` are not defined as `\protected` because we need
+ their expansion when `\outlines` are created.
+ User can declare quotes by \`\quoteschars``<clqq><crqq><clq><crq>`, where
+ `<clqq>...<crqq>` are normal quotes and `<clq>...<crq>` are alternative quotes.
+ or use \`\altquotes` to swap between meaning of these two types of quotes.
+ \nl
+ \`\enquotes`, \`\csquotes`, \`\dequotes`, \`\frquotes` etc. are defined here.
+ \_cod -----------------------------
+
+\_def \_enquotes {\_quoteschars “”‘’}
+\_def \_csquotes {\_quoteschars „“‚‘}
+\_def \_frquotes {\_quoteschars “”«»}
+\_let \_plquotes = \_frquotes
+\_let \_esquotes = \_frquotes
+\_let \_grquotes = \_frquotes
+\_let \_ruquotes = \_frquotes
+\_let \_itquotes = \_frquotes
+\_let \_skquotes = \_csquotes
+\_let \_dequotes = \_csquotes
+
+\_def \_quoteschars #1#2#3#4{\_def\_altquotes{\_quoteschars#3#4#1#2}\_public\altquotes;%
+ \_def \"##1"{#1##1#2}\_def \'##1'{#3##1#4}}
+
+ \_doc -----------------------------
+ Sometimes should be usable to leave the markup `"such"` or `'such'` i.e.~without
+ the first backslash. Then you can make the characters `"` and `'` active
+ by the \`\activequotes` macro and leave quotes without first backslash.
+ First, declare `\<iso-code>quotes`, then \^`\altquotes` (if needed) and finally
+ \^`\activequotes`.
+ \_cod -----------------------------
+
+\_def\_activequotes{\_ea\_activequotesA\"""\_ea\_activequotesA\'''}
+\_def\_activequotesA#1#2#3{\_bgroup\_lccode`\~=`#3\_lowercase{\_egroup\_adef#3##1~{#1##1#2}}}
+
+\_public \quoteschars \activequotes \enquotes \csquotes \skquotes \frquotes \plquotes
+ \esquotes \grquotes \ruquotes \itquotes \dequotes ;
+
+\_endcode % -------------------------------------
+
+2020-04-29 Obrazek -> Abbildung: bug fixed
+2020-03-15 introduced \ No newline at end of file
diff --git a/macros/luatex/optex/base/lists.opm b/macros/luatex/optex/base/lists.opm
new file mode 100644
index 0000000000..0b30ed43bb
--- /dev/null
+++ b/macros/luatex/optex/base/lists.opm
@@ -0,0 +1,110 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \begitems {Lists: begitems, enditems <2020-04-21>} % preloaded in format
+
+ \_doc -----------------------------
+ \`\_aboveliskip` is used above the list of items,\nl
+ \`\_belowliskip` is used below the list of items and\nl
+ \`\_interliskip` is used between items.\nl
+ \`\_listskipA` is used as `\listskipamount` at level 1 of items.\nl
+ \`\_listskipB` is used as `\listskipamount` at other levels.\nl
+ \`\_setlistskip` sets the skip dependent on the current level of items
+ \_cod -----------------------------
+
+\_def\_aboveliskip {\_removelastskip \_penalty-100 \_vskip\_listskipamount}
+\_def\_belowliskip {\_penalty-200 \_vskip\_listskipamount}
+\_def\_interliskip {}
+\_def\_listskipA {\_medskipamount}
+\_def\_listskipB {0pt plus.5\_smallskipamount}
+
+\_def\_setlistskip {%
+ \_ifnum \_ilevel = 1 \_listskipamount = \_listskipA \_relax
+ \_else \_listskipamount = \_listskipB \_relax
+ \_fi}
+
+ \_doc -----------------------------
+ The \`\itemnum` is locally reset to zero in each group declared by
+ `\begitems`. So nested lists are numbered independently. User can set
+ initial value of `\itemnum` to another value after `\beitems` if he/she want.
+ \nl
+ Each level of nested lists is indented by new `\iindent` from left.
+ Default item mark is `\_printitem`.
+ \nl
+ The \`\begitems` runs `\_aboveliskip` only if we are not near below a title,
+ where a vertical skip is placed already and where the `\penalty` 11333 is.
+ It activates `*` and defines it as \`\_startitem`.
+ \nl
+ The \`\enditems` runs `\_isnextchar\_par{}{\_noindent}` thus the next
+ paragraph is without indentation if there is no empty line between
+ the list and this paragraph (it is similar behavior as after display math).
+ \_cod -----------------------------
+
+\_newcount\_itemnum \_itemnum=0
+\_newtoks\_printitem
+
+\_def\_begitems{\_par
+ \_bgroup
+ \_advance \_ilevel by1
+ \_setlistskip
+ \_ifnum\_lastpenalty<10000 \_aboveliskip \_fi
+ \_itemnum=0 \_adef*{\_startitem}
+ \_advance\_leftskip by\_iindent
+ \_printitem=\_defaultitem
+ \_the\_everylist \_relax
+}
+\_def\_enditems{\_par\_belowliskip\_egroup \_isnextchar\_par{}{\_noindent}}
+
+\_def\_startitem{\_par \_ifnum\_itemnum>0 \_interliskip \_fi
+ \_advance\_itemnum by1
+ \_the\_everyitem \_noindent\_llap{\_the\_printitem}\_ignorespaces
+}
+\_public \begitems \enditems \itemnum ;
+
+ \_doc ----------------------------
+ \`\novspaces` sets \`\listskipamount` to 0pt.
+ \_cod ----------------------------
+
+\_def\_novspaces {\_removelastskip \_listskipamount=0pt \_relax}
+\_public \novspaces ;
+
+ \_doc -----------------------------
+ Various item marks are saved in `\_item:<letter>` macros.
+ You can re-define then or define more such macros.
+ The \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}`.
+ More exactly: \^`\begitems` does `\_printitem=`\^`\defaultitem` first,
+ then \`\style` `<letter>` does \`\_printitem``={\_item:<letter>}`
+ when it is used and finally, `\_startitem` alias `*` uses `\_printitem`.
+ \_cod -----------------------------
+
+\_def\_style#1{%
+ \_ifcsname _item:#1\_endcsname \_printitem=\ea{\_csname _item:#1\_endcsname}%
+ \_else \_printitem=\_defaultitem \_fi
+}
+\_sdef{_item:o}{\_raise.4ex\_hbox{$\_scriptscriptstyle\_bullet$} }
+\_sdef{_item:-}{- }
+\_sdef{_item:n}{\_the\_itemnum. }
+\_sdef{_item:N}{\_the\_itemnum) }
+\_sdef{_item:i}{(\_romannumeral\_itemnum) }
+\_sdef{_item:I}{\_uppercase\_ea{\_romannumeral\_itemnum}\_kern.5em}
+\_sdef{_item:a}{\_athe\_itemnum) }
+\_sdef{_item:A}{\_uppercase\_ea{\_athe\_itemnum}) }
+\_sdef{_item:x}{\_raise.3ex\_fullrectangle{.6ex}\_kern.4em}
+\_sdef{_item:X}{\_raise.2ex\_fullrectangle{1ex}\_kern.5em}
+
+ \_doc -----------------------------
+ \`\_athe``{<num>}` returns the `<num>`s lowercase letter from the alphabet.\nl
+ \`\_fullrectangle``{<dimen>}` prints full rectangle with given `<dimen>`.
+ \_cod -----------------------------
+
+\_def\_fullrectangle#1{\_hbox{\_vrule height#1 width#1}}
+
+\_def\_athe#1{\_ifcase#1?\_or a\_or b\_or c\_or d\_or e\_or f\_or g\_or h\_or
+ i\_or j\_or k\_or l\_or m\_or n\_or o\_or p\_or q\_or r\_or s\_or t\_or
+ u\_or v\_or w\_or x\_or y\_or z\_else ?\_fi
+}
+\_public \style ;
+
+\_endcode % -------------------------------------
+
+2020-04-21 \isnextchar\par added to \enditems
+2020-03-18 introduced
diff --git a/macros/luatex/optex/base/logos.opm b/macros/luatex/optex/base/logos.opm
new file mode 100644
index 0000000000..f7161e8eda
--- /dev/null
+++ b/macros/luatex/optex/base/logos.opm
@@ -0,0 +1,62 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \TeX {Logos TeX, LuaTeX, etc. <2020-02-28>} % preloaded in format
+
+ \_doc ----------------------------
+ Despite plain \TeX/ each macro for logos ends by \`\ignoreslash`.
+ This macro ignores next slash if it is present.
+ You can `use \TeX/ like this` for protecting the space following the logo.
+ This is visually more comfortable.
+ The macros \`\TeX`, \`\OpTeX`, \`\LuaTeX`, \`\XeTeX` are defined.
+ \_cod ----------------------------
+
+\_protected\_def \_TeX {T\_kern-.1667em\_lower.5ex\_hbox{E}\_kern-.125emX\_ignoreslash}
+\_protected\_def \_OpTeX {Op\_kern-.1em\_TeX}
+\_protected\_def \_LuaTeX {Lua\_TeX}
+\_protected\_def \_XeTeX {X\_kern-.125em\_phantom E%
+ \_pdfsave\_rlap{\_pdfscale{-1}{1}\_lower.5ex\_hbox{E}}\_pdfrestore \_kern-.1667em \_TeX}
+
+\_def\_ignoreslash {\_futurelet\_next \_ignoreslashA}
+\_def\_ignoreslashA {\_ifx\_next/\_ea\_ignoreit\_fi}
+
+\_public \TeX \OpTeX \LuaTeX \XeTeX \ignoreslash ;
+
+ \_doc -----------------------------
+ The \`\_slantcorr` macro expands to slant-correction of current font. It is
+ used to shifting A if the \`\LaTeX` logo is in italic.
+ \_cod -----------------------------
+
+\_protected\_def \_LaTeX{\_tmpdim=.42ex L\_kern-.36em \_kern \_slantcorr % slant correction
+ \_raise \_tmpdim \_hbox{\_thefontscale[710]A}%
+ \_kern-.15em \_kern-\_slantcorr \_TeX}
+\_def\_slantcorr{\_ea\_ignorept \_the\_fontdimen1\_font\_tmpdim}
+
+\_public \LaTeX ;
+
+ \_doc -----------------------------
+ \`\OPmac`, \`\CS` and \`\csplain` logos.
+ \_cod -----------------------------
+
+\_def\_OPmac{\_leavevmode
+ \_lower.2ex\_hbox{\_thefontscale[1400]O}\_kern-.86em P{\_em mac}\_ignoreslash}
+\_def\_CS{$\_cal C$\_kern-.1667em\_lower.5ex\_hbox{$\_cal S$}\_ignoreslash}
+\_def\_csplain{\_CS plain\_ignoreslash}
+
+\_public \OPmac \CS \csplain ;
+
+ \_doc ----------------------------
+ The expandable versions of logos used in Outlines needs the expandable
+ \`\ingnslash` (instead of the \^`\ignoreslash`).
+ \_cod \_fin ----------------------
+
+\_def\_ignslash#1{\_ifx/#1\_else #1\_fi}
+\_regmacro {}{}{% conversion for PDF outlines
+ \_def\TeX{TeX\_ignslash}\_def\OpTeX{OpTeX\_ignslash}%
+ \_def\LuaTeX{LuaTeX\_ignslash}\_def\XeTeX{XeTeX\_ignslash}%
+ \_def\LaTeX{LaTeX\_ignslash}\_def\OPmac{OPmac\_ignslash}%
+ \_def\CS{CS}\_def\csplain{csplain\_ignslash}%
+}
+\_public \ignslash ;
+
+\_endcode
+
diff --git a/macros/luatex/optex/base/luatex-ini.opm b/macros/luatex/optex/base/luatex-ini.opm
new file mode 100644
index 0000000000..04490a9b91
--- /dev/null
+++ b/macros/luatex/optex/base/luatex-ini.opm
@@ -0,0 +1,136 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \pdfprimitive {LuaTeX initialization code <2020-02-21>} % preloaded in format
+
+\_let\_pdfpagewidth \pagewidth
+\_let\_pdfpageheight \pageheight
+\_let\_pdfadjustspacing \adjustspacing
+\_let\_pdfprotrudechars \protrudechars
+\_let\_pdfnoligatures \ignoreligaturesinfont
+\_let\_pdffontexpand \expandglyphsinfont
+\_let\_pdfcopyfont \copyfont
+\_let\_pdfxform \saveboxresource
+\_let\_pdflastxform \lastsavedboxresourceindex
+\_let\_pdfrefxform \useboxresource
+\_let\_pdfximage \saveimageresource
+\_let\_pdflastximage \lastsavedimageresourceindex
+\_let\_pdflastximagepages \lastsavedimageresourcepages
+\_let\_pdfrefximage \useimageresource
+\_let\_pdfsavepos \savepos
+\_let\_pdflastxpos \lastxpos
+\_let\_pdflastypos \lastypos
+\_let\_pdfoutput \outputmode
+\_let\_pdfdraftmode \draftmode
+\_let\_pdfpxdimen \pxdimen
+\_let\_pdfinsertht \insertht
+\_let\_pdfnormaldeviate \normaldeviate
+\_let\_pdfuniformdeviate \uniformdeviate
+\_let\_pdfsetrandomseed \setrandomseed
+\_let\_pdfrandomseed \randomseed
+\_let\_pdfprimitive \primitive
+\_let\_ifpdfprimitive \ifprimitive
+\_let\_ifpdfabsnum \ifabsnum
+\_let\_ifpdfabsdim \ifabsdim
+
+\_public
+ \pdfpagewidth \pdfpageheight \pdfadjustspacing \pdfprotrudechars
+ \pdfnoligatures \pdffontexpand \pdfcopyfont \pdfxform \pdflastxform
+ \pdfrefxform \pdfximage \pdflastximage \pdflastximagepages \pdfrefximage
+ \pdfsavepos \pdflastxpos \pdflastypos \pdfoutput \pdfdraftmode \pdfpxdimen
+ \pdfinsertht \pdfnormaldeviate \pdfuniformdeviate \pdfsetrandomseed
+ \pdfrandomseed \pdfprimitive \ifpdfprimitive \ifpdfabsnum \ifpdfabsdim ;
+
+\_directlua {tex.enableprimitives('pdf',{'tracingfonts'})}
+
+\_protected\_def \_pdftexversion {\_numexpr 140\_relax}
+ \_def \_pdftexrevision {7}
+\_protected\_def \_pdflastlink {\_numexpr\_pdffeedback lastlink\_relax}
+\_protected\_def \_pdfretval {\_numexpr\_pdffeedback retval\_relax}
+\_protected\_def \_pdflastobj {\_numexpr\_pdffeedback lastobj\_relax}
+\_protected\_def \_pdflastannot {\_numexpr\_pdffeedback lastannot\_relax}
+ \_def \_pdfxformname {\_pdffeedback xformname}
+{\_outputmode=1
+ \_xdef\_pdfcreationdate {\_pdffeedback creationdate}
+}
+ \_def \_pdffontname {\_pdffeedback fontname}
+ \_def \_pdffontobjnum {\_pdffeedback fontobjnum}
+ \_def \_pdffontsize {\_pdffeedback fontsize}
+ \_def \_pdfpageref {\_pdffeedback pageref}
+ \_def \_pdfcolorstackinit {\_pdffeedback colorstackinit}
+\_protected\_def \_pdfliteral {\_pdfextension literal}
+\_protected\_def \_pdfcolorstack {\_pdfextension colorstack}
+\_protected\_def \_pdfsetmatrix {\_pdfextension setmatrix}
+\_protected\_def \_pdfsave {\_pdfextension save\_relax}
+\_protected\_def \_pdfrestore {\_pdfextension restore\_relax}
+\_protected\_def \_pdfobj {\_pdfextension obj }
+\_protected\_def \_pdfrefobj {\_pdfextension refobj }
+\_protected\_def \_pdfannot {\_pdfextension annot }
+\_protected\_def \_pdfstartlink {\_pdfextension startlink }
+\_protected\_def \_pdfendlink {\_pdfextension endlink\_relax}
+\_protected\_def \_pdfoutline {\_pdfextension outline }
+\_protected\_def \_pdfdest {\_pdfextension dest }
+\_protected\_def \_pdfthread {\_pdfextension thread }
+\_protected\_def \_pdfstartthread {\_pdfextension startthread }
+\_protected\_def \_pdfendthread {\_pdfextension endthread\_relax}
+\_protected\_def \_pdfinfo {\_pdfextension info }
+\_protected\_def \_pdfcatalog {\_pdfextension catalog }
+\_protected\_def \_pdfnames {\_pdfextension names }
+\_protected\_def \_pdfincludechars {\_pdfextension includechars }
+\_protected\_def \_pdffontattr {\_pdfextension fontattr }
+\_protected\_def \_pdfmapfile {\_pdfextension mapfile }
+\_protected\_def \_pdfmapline {\_pdfextension mapline }
+\_protected\_def \_pdftrailer {\_pdfextension trailer }
+\_protected\_def \_pdfglyphtounicode {\_pdfextension glyphtounicode }
+
+\_protected\_edef\_pdfcompresslevel {\_pdfvariable compresslevel}
+\_protected\_edef\_pdfobjcompresslevel {\_pdfvariable objcompresslevel}
+\_protected\_edef\_pdfdecimaldigits {\_pdfvariable decimaldigits}
+\_protected\_edef\_pdfgamma {\_pdfvariable gamma}
+\_protected\_edef\_pdfimageresolution {\_pdfvariable imageresolution}
+\_protected\_edef\_pdfimageapplygamma {\_pdfvariable imageapplygamma}
+\_protected\_edef\_pdfimagegamma {\_pdfvariable imagegamma}
+\_protected\_edef\_pdfimagehicolor {\_pdfvariable imagehicolor}
+\_protected\_edef\_pdfimageaddfilename {\_pdfvariable imageaddfilename}
+\_protected\_edef\_pdfpkresolution {\_pdfvariable pkresolution}
+\_protected\_edef\_pdfinclusioncopyfonts {\_pdfvariable inclusioncopyfonts}
+\_protected\_edef\_pdfinclusionerrorlevel {\_pdfvariable inclusionerrorlevel}
+\_protected\_edef\_pdfgentounicode {\_pdfvariable gentounicode}
+\_protected\_edef\_pdfpagebox {\_pdfvariable pagebox}
+\_protected\_edef\_pdfminorversion {\_pdfvariable minorversion}
+\_protected\_edef\_pdfuniqueresname {\_pdfvariable uniqueresname}
+\_protected\_edef\_pdfhorigin {\_pdfvariable horigin}
+\_protected\_edef\_pdfvorigin {\_pdfvariable vorigin}
+\_protected\_edef\_pdflinkmargin {\_pdfvariable linkmargin}
+\_protected\_edef\_pdfdestmargin {\_pdfvariable destmargin}
+\_protected\_edef\_pdfthreadmargin {\_pdfvariable threadmargin}
+\_protected\_edef\_pdfpagesattr {\_pdfvariable pagesattr}
+\_protected\_edef\_pdfpageattr {\_pdfvariable pageattr}
+\_protected\_edef\_pdfpageresources {\_pdfvariable pageresources}
+\_protected\_edef\_pdfxformattr {\_pdfvariable xformattr}
+\_protected\_edef\_pdfxformresources {\_pdfvariable xformresources}
+\_protected\_edef\_pdfpkmode {\_pdfvariable pkmode}
+
+\_public
+ \pdftexversion \pdftexrevision \pdflastlink \pdfretval \pdflastobj
+ \pdflastannot \pdfxformname \pdfcreationdate \pdffontname \pdffontobjnum
+ \pdffontsize \pdfpageref \pdfcolorstackinit \pdfliteral \pdfcolorstack
+ \pdfsetmatrix \pdfsave \pdfrestore \pdfobj \pdfrefobj \pdfannot
+ \pdfstartlink \pdfendlink \pdfoutline \pdfdest \pdfthread \pdfstartthread
+ \pdfendthread \pdfinfo \pdfcatalog \pdfnames \pdfincludechars \pdffontattr
+ \pdfmapfile \pdfmapline \pdftrailer \pdfglyphtounicode \pdfcompresslevel
+ \pdfobjcompresslevel \pdfdecimaldigits \pdfgamma \pdfimageresolution
+ \pdfimageapplygamma \pdfimagegamma \pdfimagehicolor \pdfimageaddfilename
+ \pdfpkresolution \pdfinclusioncopyfonts \pdfinclusionerrorlevel
+ \pdfgentounicode \pdfpagebox \pdfminorversion \pdfuniqueresname \pdfhorigin
+ \pdfvorigin \pdflinkmargin \pdfdestmargin \pdfthreadmargin \pdfpagesattr
+ \pdfpageattr \pdfpageresources \pdfxformattr \pdfxformresources \pdfpkmode ;
+
+\_pdfminorversion = 5
+\_pdfobjcompresslevel = 2
+\_pdfcompresslevel = 9
+\_pdfdecimaldigits = 3
+\_pdfpkresolution = 600
+
+\_endcode
+
+Common pdf\TeX/ primitives equivalents are declared here. Initial values are set.
diff --git a/macros/luatex/optex/base/makeindex.opm b/macros/luatex/optex/base/makeindex.opm
new file mode 100644
index 0000000000..5904b494b4
--- /dev/null
+++ b/macros/luatex/optex/base/makeindex.opm
@@ -0,0 +1,460 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \makeindex {Makeindex and sorting <2020-04-26>} % loaded in format
+
+ \_doc -----------------------------
+ \^`\makeindex` implements sorting algorithm at \TeX/ macro-language level.
+ You need not any external program.
+
+ There are two passes in sorting algorithm. Primary pass does not
+ distinguish between a group o letters (typically non-accented and
+ accented). If the result of comparing two string is equal in primary pass
+ then secondary pass is started. It distinguish between variously accented
+ letters. Czech rules, for example says: not accented before dieresis
+ before acute before circumflex before ring. At less priority: lowercase
+ letters must be before uppercase letters.
+
+ The \`\_sortingdata``<iso-code>` implements these rules for the language
+ <iso-code>. The groups between commas are not distinguished in the first
+ pass. The second pass distinguishes all characters mentioned in the
+ `\_sortingdata<iso-code>` (commas are ignored). The order of letters
+ in the `\_sortingdata<iso-code>` macro is significant for sorting algorithm.
+ The Czech rules (`cs`) are implemented here:
+ \_cod -----------------------------
+
+\_def \_sortingdatacs {%
+ /,{ },-,&,@,%
+ aAäÄáÁ,%
+ bB,%
+ cC,%
+ čČ,%
+ dDďĎ,%
+ eEéÉěĚ,%
+ fF,%
+ gG,%
+ hH,%
+ ^^T^^U^^V,% ch Ch CH
+ iIíÍ,%
+ jJ,%
+ kK,%
+ lLĺĹľĽ,%
+ mM,%
+ nNňŇ,%
+ oOöÖóÓôÔ,%
+ pP,%
+ qQ,%
+ rRŕŔ,%
+ řŘ,%
+ sS,%
+ šŠ,%
+ tTťŤ,%
+ uUüÜúÚůŮ,%
+ vV,%
+ wW,%
+ xX,%
+ yYýÝ,%
+ zZ,%
+ žŽ,%
+ 0,1,2,3,4,5,6,7,8,9,'%
+}
+
+ \_doc -----------------------------
+ Characters ignored by sorting algorithm are declared in \`\_ignoredchars``<iso-code>`.
+ The compound characters (two or more characters interpreted as one
+ character in sorting algorithm) is mapped to single invisible characters
+ in \`\_compoundchars``<iso-code>`. Czech rules declares ch or Ch or CH as
+ a single letter sorted between H and I. See \`\_sortingdatacs` above where
+ these declared characters are used.
+
+ The characters declared in `\_ignoredchars` are ignored in first pass
+ without additional condition. All characters are taken into account in
+ second pass: ASCII characters with code $\lq65$ are sorted first if they
+ are not mentioned in the `\_sortingdata<iso-code>` macro.
+ Others not mentioned characters have undefined behavior during sorting.
+ \_cod -----------------------------
+
+\_def \_ignoredcharscs {.,;?!:'"|()[]<>=+}
+\_def \_compoundcharscs {ch:^^T Ch:^^U CH:^^V} % DZ etc. are sorted normally
+
+ \_doc -----------------------------
+ Slovak sorting rules are the same as Czech. The macro `\_sortingdatacs`
+ includes Slovak letters too. Compound characters are the same.
+ English sorting rules can be defined by `\_sortingdatacs` too because
+ English alphabet is subset of Czech and Slovak alphabets. Only
+ difference: \`\_compoundcharsen` is empty in English rules.
+
+ You can declare these macros for more languages, if you wish to use
+ `\makeindex` with sorting rules in respect to your language.
+ Note: if you need to map compound characters to a character, don't use
+ `^^I` or `^^M` because these characters have very specific category code.
+ And use space to separate more mappings, like in \`\_compoundcharscs` above.
+ \_cod -----------------------------
+
+\_let \_sortingdatask = \_sortingdatacs
+\_let \_compoundcharssk = \_compoundcharscs
+\_let \_ignoredcharssk = \_ignoredcharscs
+\_let \_sortingdataen = \_sortingdatacs
+\_def \_compoundcharsen {}
+\_let \_ignoredcharsen = \_ignoredcharscs
+
+ \_doc -----------------------------
+ Preparing to primary pass is implemented by the \`\_setprimarysorting` macro.
+ It is called from `\makeindex` macro and all processing of sorting is in a group.
+ \_cod -----------------------------
+
+\_def\_setprimarysorting {%
+ \_ea\_let \_ea\_sortingdata \_csname _sortingdata\_sortinglang\_endcsname
+ \_ea\_let \_ea\_compoundchars \_csname _compoundchars\_sortinglang\_endcsname
+ \_ea\_let \_ea\_ignoredchars \_csname _ignoredchars\_sortinglang\_endcsname
+ \_ifx \_sortingdata\_relax \_addto\_nold{ sortingdata}%
+ \_let \_sortingdata = \_sortingdataen \_fi
+ \_ifx \_compoundchars\_relax \_addto\_nold{ compoundchars}%
+ \_let \_compoundchars = \_compoundcharsen \_fi
+ \_ifx \_ignoredchars\_relax \_addto\_nold{ ignoredchars}%
+ \_let \_ignoredchars = \_ignoredcharsen \_fi
+ \_ifx \_compoundchars\_empty \_else
+ \_edef \_compoundchars {\_detokenize\_ea{\_compoundchars} }\_fi % all must be catcode 12
+ \_def \_act ##1{\_ifx##1\_relax \_else
+ \_ifx##1,\_advance\_tmpnum by1
+ \_else \_lccode`##1=\_tmpnum \_fi
+ \_ea\_act \_fi}%
+ \_tmpnum=65 \_ea\_act \_sortingdata \_relax
+ \_def \_act ##1{\_ifx##1\_relax \_else
+ \_lccode`##1=`\^^I
+ \_ea\_act \_fi}%
+ \_ea\_act \_ignoredchars \_relax
+}
+
+ \_doc -----------------------------
+ Preparing to secondary pass is implemented by the \`\_setsecondarysorting` macro.
+ \_cod -----------------------------
+
+\_def\_setsecondarysorting {%
+ \_def \_act ##1{\_ifx##1\_relax \_else
+ \_ifx##1,\_else \_advance\_tmpnum by1 \_lccode`##1=\_tmpnum \_fi
+ \_ea\_act \_fi}%
+ \_tmpnum=65 \_ea\_act \_sortingdata \_relax
+}
+
+ \_doc -----------------------------
+ Strings to be sorted are prepared in `\,<string>` control sequences
+ (in order to save `\TeX` memory).
+ The \`\_preparesorting` `\,<string>` converts `<string>` to `\_tmpb`
+ with respect to the data initialized in \^`\_setprimarysorting` or
+ \^`\_setsecondarysorting`.\nl
+ The compoud characters are converted to single characters by the
+ \`\_docompound` macro.
+ \_cod -----------------------------
+
+\_def \_preparesorting #1{%
+ \_edef \_tmpb {\_ea\_ignorefirst\_csstring #1}% \,<string> -> <string>
+ \_ea \_docompound \_compoundchars \_relax:{} % replace compound characters
+ \_lowercase \_ea{\_ea\_def \_ea\_tmpb \_ea{\_tmpb}}% convert in respect to \_sortingdata
+ \_ea\_replstring \_ea\_tmpb \_ea{\_csstring\^^I}{}% remove ignored characters
+}
+\_def \_docompound #1:#2 {%
+ \_ifx\_relax#1\_else \_replstring\_tmpb {#1}{#2}\_ea\_docompound \_fi
+}
+\_def \_ignorefirst#1{}
+
+ \_doc -----------------------------
+ Macro \`\_isAleB` `\,<string1> \,<string2>` returns the result of comparison
+ of given two strings to \`\_ifAleB` control sequence. Usage:
+ `\isAleB \,<string1> \,<string2> \_ifAleB ... \_else ... \_fi`
+ The converted strings (in respect of the data prepared for first pass)
+ must be saved as values of `\,<string1>` and `\,<string2>` macros.
+ The reason is speed: we don't want to convert them repeatedly in each
+ comparison.
+ \nl
+ The macro
+ \`\_testAleB` `<converted string1>&\_relax<converted-string2>\_relax \,<string1>\,<string2>`\nl
+ does the real work. It reads first character from both converted strings, compares them
+ and if it is equal then calls itself recursively else gives result.
+ \_cod -----------------------------
+
+\_newifi \_ifAleB
+
+\_def\_isAleB #1#2{%
+ \_edef\_tmpb {#1&\_relax#2&\_relax}%
+ \_ea \_testAleB \_tmpb #1#2%
+}
+\_def\_testAleB #1#2\_relax #3#4\_relax #5#6{%
+ \_if #1#3\_if #1&\_testAleBsecondary #5#6% goto to the second pass::
+ \_else \_testAleB #2\_relax #4\_relax #5#6%
+ \_fi
+ \_else \_ifnum `#1<`#3 \_AleBtrue \_else \_AleBfalse \_fi
+ \_fi
+}
+\_def\_testAleBsecondary#1#2{%
+ \_bgroup
+ \_setsecondarysorting
+ \_preparesorting#1\_let\_tmpa=\_tmpb \_preparesorting#2%
+ \_edef\_tmpb{\_tmpa0\_relax\_tmpb1\_relax}%
+ \_ea\_testAleBsecondaryX \_tmpb
+ \_egroup
+}
+\_def\_testAleBsecondaryX #1#2\_relax #3#4\_relax {%
+ \_if #1#3\_testAleBsecondaryX #2\_relax #4\_relax
+ \_else \_ifnum `#1<`#3 \_global\_AleBtrue \_else \_global \_AleBfalse \_fi
+ \_fi
+}
+
+ \_doc -----------------------------
+ Merge sort is very effectively implemented by \TeX/ macros. The following
+ code is created by my son Miroslav.
+ The \`\_mergesort` macro expects that all items in `\_iilist` are separated
+ by comma when it starts. It ends with sorted items in `\_iilist` without commas.
+ So `\_dosorting` macro must prepare commas between items.
+ \_cod -----------------------------
+
+\_def\_mergesort #1#2,#3{% by Miroslav Olsak
+ \_ifx,#1% % prazdna-skupina,neco, (#2=neco #3=pokracovani)
+ \_addto\_iilist{#2,}% % dvojice skupin vyresena
+ \_sortreturn{\_fif\_mergesort#3}% % \mergesort pokracovani
+ \_fi
+ \_ifx,#3% % neco,prazna-skupina, (#1#2=neco #3=,)
+ \_addto\_iilist{#1#2,}% % dvojice skupin vyresena
+ \_sortreturn{\_fif\_mergesort}% % \mergesort dalsi
+ \_fi
+ \_ifx\_end#3% % neco,konec (#1#2=neco)
+ \_ifx\_empty\_iilist % neco=kompletni setrideny seznam
+ \_def\_iilist{#1#2}%
+ \_sortreturn{\_fif\_fif\_gobbletoend}% % koncim
+ \_else % neco=posledni skupina nebo \end
+ \_sortreturn{\_fif\_fif % spojim \indexbuffer+necoa cele znova
+ \_edef\_iilist{\_ea}\_ea\_mergesort\_iilist#1#2,#3}%
+ \_fi\_fi % zatriduji: p1+neco1,p2+neco2, (#1#2=p1+neco1 #3=p2)
+ \_isAleB #1#3\_ifAleB % p1<p2
+ \_addto\_iilist{#1}% % p1 do bufferu
+ \_sortreturn{\_fif\_mergesort#2,#3}% % \mergesort neco1,p2+neco2,
+ \_else % p1>p2
+ \_addto\_iilist{#3}% % p2 do bufferu
+ \_sortreturn{\_fif\_mergesort#1#2,}% % \mergesort p1+neco1,neco2,
+ \_fi
+ \_relax % zarazka, na ktere se zastavi \sortreturn
+}
+\_def\_sortreturn#1#2\_fi\_relax{#1} \_def\_fif{\_fi}
+\_def\_gobbletoend #1\_end{}
+
+ \_doc -----------------------------
+ The \`\_dosorting` `\list` macro redefines `\list` as sorted `\list`.
+ The `\list` have to include control sequences in the form `\<c><string>`.
+ These control sequences will be sorted in respect to <strings> without
+ change of meanings of these control sequences. Their meanings are
+ irrelevant when sorting. The first character <c> in `\<c><string>` should
+ be whatever. It does not influence the sorting. \OpTeX/ uses comma at
+ this place for sorting indexes: `\,<word1> \,<word2> \,<word3> ...`.
+
+ The actual language (chosen for hyphenation patterns) is used for
+ sorting data. If the `\_sortinglang` macro
+ is defined as `<iso-code>`(for example `\def\sortinglang{de}`)
+ then this has precedence and actual language is not used.
+ Moreover, if you specify \`\_asciisortingtrue` then ASCII
+ sorting will be processed and all language sorting data will be ignored.
+ \_cod -----------------------------
+
+\_newifi \_ifasciisorting \_asciisortingfalse
+\_def\_dosorting #1{%
+ \_begingroup
+ \_def\_nold{}%
+ \_ifx\_sotringlang\_undefined \_edef\_sortinglang{\_cs{_lan:\_the\_language}}\_fi
+ \_ifasciisorting
+ \_edef\_sortinglang{ASCII}%
+ \_def \_preparesorting##1{\_edef\_tmpb{\_ea\_ignorefirst\_csstring##1}}%
+ \_let \_setsecondarysorting=\_relax
+ \_else
+ \_setprimarysorting
+ \_fi
+ \_message{OpTeX: Sorting \_string#1 (\_sortinglang) ...^^J}%
+ \_ifx\_nold\_empty\_else \_opwarning{Missing\_nold\_space for language (\_sortinglang)}\_fi
+ \_def \_act##1{\_preparesorting ##1\_edef##1{\_tmpb}}%
+ \_ea\_xargs \_ea\_act #1;%
+ \_def \_act##1{\_addto #1{##1,}}%
+ \_edef #1{\_ea}\_ea\_xargs \_ea\_act #1;%
+ \_edef \_iilist{\_ea}\_ea\_mergesort #1\_end,\_end
+ \_ea\_endgroup
+ \_ea\_def\_ea#1\_ea{\_iilist}%
+}
+
+ \_doc -----------------------------
+ The \`\makeindex` prints the index. First, it sorts the `\_iilist`
+ second, it prints the sorted `\_iilist`, each item is printed
+ using \^`\_printindexitem`.
+ \_cod -----------------------------
+
+\_def\_makeindex{\_par
+ \_ifx\_iilist\_empty \_opwarning{index data-buffer is empty. TeX me again}
+ \_else
+ \_dosorting \_iilist % sorting \_iilist
+ \_bgroup
+ \_rightskip=0pt plus1fil \_exhyphenpenalty=10000 \_leftskip=\_iindent
+ \_ea\_xargs \_ea\_printindexitem \_iilist ;\_par
+ \_egroup
+ \_fi
+}
+\_public \makeindex ;
+
+ \_doc -----------------------------
+ The \`\_printindexitem` `\,<word>` prints one item to the index.
+ If `\_,<word>` is defined then this is used instead real <word>
+ (this exception is declared by `\iis` macro). Else <word> is printed by
+ \^`\_printii`. Finally, \^`\_printiipages` prints the value of `\,<word>`,
+ i.e. the list of pages.
+ \_cod -----------------------------
+
+\_def\_printindexitem #1{%
+ \_ifcsname _\_csstring #1\_endcsname
+ \_ea\_ea\_ea \_printii \_csname _\_csstring #1\_endcsname &%
+ \_else
+ \_ea\_ea\_ea\_printii \_ea\_ignorefirst \_csstring #1&%
+ \_fi
+ \_ea\_printiipages #1&
+}
+
+ \_doc -----------------------------
+ \`\_printii` `<word>&` does more intelligent work because we are working with
+ words in the form `<main-word>/<sub-word>/<sub-sub-word>`.
+ The \^`\everyii` tokens register is applied before `\noindent`. User can
+ declare something special here.
+
+ The \`\_newiiletter``{<letter>}` macro is empty by default. It is invoked if first
+ letter of index entries is changed. You can declare a design between
+ index entries here. You can try, for example:
+ \begtt
+ \def\_newiiletter#1#2{%
+ \bigskip \hbox{\setfontsize{at15pt}\bf\uppercase{#1}}\medskip}
+ \endtt
+ \_cod -----------------------------
+
+\_def\_printii #1#2&{%
+ \_ismacro\_lastii{#1}\_iffalse \_newiiletter{#1}{#2}\_def\_lastii{#1}\_fi
+ \_gdef\_currii{#1#2}\_the\_everyii\_noindent
+ \_hskip-\_iindent \_ignorespaces\_printiiA#1#2//}
+\_def\_printiiA #1/{\_if^#1^\_let\_previi=\_currii \_else
+ \_ea\_scanprevii\_previi/&\_edef\_tmpb{\_detokenize{#1}}%
+ \_ifx\_tmpa\_tmpb \_iiemdash \_else#1 \_gdef\_previi{}\_fi
+ \_expandafter\_printiiA\_fi
+}
+\_def\_iiemdash{\_kern.1em---\_space}
+\_def\_lastii{}
+\_def\_newiiletter#1#2{}
+
+\_def\_scanprevii#1/#2&{\_def\_previi{#2}\_edef\_tmpa{\_detokenize{#1}}}
+\_def\_previi{} % previous index item
+
+ \_doc -----------------------------
+ \`\_printiipages` `<pglist>&` gets `<pglist>` in the form
+ `<pg>:<type>,<pg>:<type>,...<pg>:<type>` and it converts them to
+ `<pg>, <pg>, <from>--<to>, <pg>` etc. The same pages must be printed only once
+ and continuous consequences of pages must be compressed to the form <from>-<to>.
+ Moreover, the consequence is continuous only if all pages have the same <type>.
+ Empty <type> is most common, pages with `b` <type> must be printed as bold
+ and with `i` `<type>` as italics.
+ Moreover, the `<pg>` mentioned here are <gpageno>, but we have to print
+ <pageno>. The following macros solves these tasks.
+ \_cod -----------------------------
+
+\_def\_printiipages#1&{\_let\_pgtype=\_undefined \_tmpnum=0 \_printpages #1,:,\_par}
+\_def\_printpages#1:#2,{% state automaton for compriming pages
+ \_ifx,#1,\_uselastpgnum
+ \_else \_def\_tmpa{#2}%
+ \_ifx\_pgtype\_tmpa \_else
+ \_let\_pgtype=\_tmpa
+ \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}%
+ \_tmpnum=#1 \_returnfi \_fi
+ \_ifnum\_tmpnum=#1 \_returnfi \_fi
+ \_advance\_tmpnum by1
+ \_ifnum\_tmpnum=#1 \_ifx\_lastpgnum\_undefined \_usepgdash\_fi
+ \_edef\_lastpgnum{\_the\_tmpnum:{\_pgtype}}%
+ \_returnfi \_fi
+ \_uselastpgnum \_usepgcomma \_pgprint#1:{#2}%
+ \_tmpnum=#1
+ \_relax
+ \_ea\_printpages \_fi
+}
+\_def\_returnfi #1\_relax{\_fi}
+\_def\_uselastpgnum{\_ifx\_lastpgnum\_undefined
+ \_else \_ea\_pgprint\_lastpgnum \_let\_lastpgnum=\_undefined \_fi
+}
+\_def\_usepgcomma{\_ifnum\_tmpnum>0, \_fi} % comma+space between page numbers
+\_def\_usepgdash{\_hbox{--}} % dash in the <from>--<to> form
+
+ \_doc -----------------------------
+ You can re-define \`\_pgprint` `<gpageno>:{<iitype>}`
+ if you need to implement more <iitypes>.
+ \_cod -----------------------------
+
+\_def\_pgprint #1:#2{%
+ \_ifx ,#2,\_pgprintA{#1}\_returnfi \_fi
+ \_ifx b#2{\_bf \_pgprintA{#1}}\_returnfi \_fi
+ \_ifx i#2{\_it \_pgprintA{#1}}\_returnfi \_fi
+ \_ifx u#2\_pgu{\_pgprintA{#1}}\_returnfi \_fi
+ \_pgprintA{#1}\_relax
+}
+\_def\_pgprintA #1{\_ilink[pg:#1]{\_cs{_pgi:#1}}} % \ilink[pg:<gpageno>]{<pageno>}
+\_def\_pgu#1{\_leavevmode\_vtop{\_hbox{#1}\kern.3ex\_hrule}}
+
+ \_doc -----------------------------
+ The \`\iindex``{<word>}` puts one <word> to the index. It writes
+ \^`\_Xindex``{<word>}{<iitype>}` to the `.ref` file.
+ All othes variants of indexing macros expands internally to `\iindex`.
+ \_cod -----------------------------
+
+\_def\_iindex#1{\_isempty{#1}\_iffalse\_openref{\def~{ }%
+ \edef\_act{\_noexpand\_wref\_noexpand\_Xindex{{#1}{\_iitypesaved}}}\_act}\_fi}
+\_public \iindex ;
+
+ \_doc -----------------------------
+ The \`\_Xindex``{<word>}{<iitype>}` stores `\,<word>` to the `\_iilist` if
+ there is first occurrence of the <word>. The list of pages where `<word>`
+ occurs, is the value of the macro `\,<word>`, so the `<gpageno>:<iitype>`
+ is appended to this list.
+ Moreower, we need a mapping from <gpageno> to `<pageno>`, because we print
+ `<pageno>` in the index, but hyperlinks are implemented by `<gpageno>`.
+ So, the macro `\_pgi:<gpageno>` is defined as `<pageno>`.
+ \_cod -----------------------------
+
+\_def \_iilist {}
+\_def \_Xindex #1#2{\_ea\_XindexA \_csname ,#1\_ea\_endcsname \_currpage {#2}}
+\_def \_XindexA #1#2#3#4{% #1=\,<word> #2=<gpageno> #3=<pageno> #4=<iitype>
+ \_ifx#1\_relax \_global\_addto \_iilist {#1}%
+ \_gdef #1{#2:#4}%
+ \_else \_global\_addto #1{,#2:#4}%
+ \_fi
+ \_sxdef{_pgi:#2}{#3}%
+}
+
+ \_doc -----------------------------
+ The implementation of macros \`\ii`, \`\iid`, \`\iis` follows.
+ Note that `\ii` works in horizontal mode on order to the `\write` whatsit
+ is not broken from the following word. If you need to keep vertical mode,
+ use \^`\iindex``{<word>}` directly.
+ \nl
+ The \`\iitype` `{<type>}` saves the `<type>` to the \`\_iitypesaved` macro. It is
+ used in the \^`\iindex` macro.
+ \_cod -----------------------------
+
+\_def\_ii #1 {\_leavevmode\_def\_tmp{#1}\_iiA #1,,\_def\_iitypesaved{}}
+
+\_def\_iiA #1,{\_if$#1$\_else\_def\_tmpa{#1}%
+ \_ifx\_tmpa\_iiatsign \_ea\_iiB\_tmp,,\_else\_iindex{#1}\_fi
+ \_ea\_iiA\_fi}
+\_def\_iiatsign{@}
+
+\_def\_iiB #1,{\_if$#1$\_else \_iiC#1/\_relax \_ea\_iiB\_fi}
+\_def\_iiC #1/#2\_relax{\_if$#2$\_else\_iindex{#2#1}\_fi}
+
+\_def\_iid #1 {\_leavevmode\_iindex{#1}#1\_futurelet\_tmp\_iiD\_def\_iitypesaved{}}
+\_def\_iiD{\_ifx\_tmp,\_else\_ifx\_tmp.\_else\_space\_fi\_fi}
+
+\_def\_iis #1 #2{{\_def~{ }\_global\_sdef{_,#1}{#2}}\_ignorespaces}
+
+\_def\_iitypesaved{}
+\_def\_iitype #1{\_def\_iitypesaved{#1}\_ignorespaces}
+
+\_public \ii \iid \iis \iitype ;
+
+\_endcode % -------------------------------------
+
+2020-04-21 \isempty \iffalse ... \fi added to \iindex
+2020-03-26 introduced
diff --git a/macros/luatex/optex/base/maketoc.opm b/macros/luatex/optex/base/maketoc.opm
new file mode 100644
index 0000000000..f94571629e
--- /dev/null
+++ b/macros/luatex/optex/base/maketoc.opm
@@ -0,0 +1,126 @@
+% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \maketoc {Macros for maketoc <2020-03-12>} % preloaded in format
+
+ \_doc ------------------------------------
+ \`\_Xtoc` `{<level>}{<type>}{<number>}{<title>}` (in `.ref` file) reads the
+ specified data and appends them to the \`\_toclist` as
+ \^`\_tocline``{<level>}{<type>}{<number>}{<title>}{<gpageno>}{<pageno>}`
+ where:
+ \begitems
+ * `<level>`: 0 reserved, 1: chapter, 2: section, 3: subsection
+ * `<type>`: the type of the level, i.e. chap, sec, secc
+ * `<number>`: the number of the chapter/section/subsection in the format 1.2.3
+ * `<title>`: the title text
+ * `<gpageno>`: the page number numbered from 1 independently of pagination
+ * `<pageno>`: the page number used in the pagination
+ \enditems
+ The last two parameters are restored from previous
+ \^`\_Xpage``{<pageno>}{<gpageno>}`, data were saved in the \^`\_currpage` macro.
+ \_cod ------------------------------------
+
+\_def\_toclist{}
+\_newifi \_ifischap \_ischapfalse
+
+\_def\_Xtoc#1#2#3#4{\_ifnum#1=0 \_ischaptrue\_fi
+ \_addto\_toclist{\_tocline{#1}{#2}{#3}{#4}}
+ \_ea\_addto\_ea\_toclist\_ea{\_currpage}%
+}
+
+ \_doc ------------------------------------
+ \`\_tocline``{<level>}{<type>}{<number>}{<title>}{<gpageno>}{<pageno>}` prints
+ the record to the table of contents. It opens group, reduces `\_leftskip`,
+ `\_rightskip`, runs the \^`\everytocline` (user can customise the design of TOC
+ here) and runs `\_tocl:<level> {<number>}{<title>}{<pageno>}` macro.
+ This macro starts with vertical mode,
+ inserts one record with given `<level>` and it should end by \^`\_tocpar`
+ which returns to hrizontal mode. The `\_tocpar`
+ appends `\_nobreak \_hskip-2\_iindent\_null \_par`. This causes
+ that the last line of the record is shifted outside the margin given by
+ `\_rightskip`. A typical record (with long `<title>`) looks like:
+ \begtt
+ | |
+ \llap{<number>} text text text text text
+ text text text text text
+ text text .................... <pageno>
+ \endtt
+ Margins given by `\leftskip` and `\rightskip` are denoted by `|` in the
+ examle above.
+ \nl
+ \`\tocrefnum` is global counter of all TOC records (used by hyperlinks).
+ \_cod ------------------------------------
+
+\_newcount \_tocrefnum
+\_def\_tocline#1#2#3#4#5#6{%
+ \_advance\_tocrefnum by1
+ \_bgroup
+ \_leftskip=\_iindent \_rightskip=2\_iindent
+ \_ifischap \_advance\_leftskip by \_iindent \_fi
+ \_def\_pgn{\_ilink[pg:#5]}%
+ \_the\_everytocline
+ \_ifcsname _tocl:#1\_endcsname
+ \_cs{_tocl:#1}{#3}{#4}{#6}\_par
+ \_fi
+ \_egroup
+}
+\_public \tocrefnum ;
+
+ \_doc -----------------------------------
+ You can re-define default macros for each level of tocline if you want.\nl
+ Parameters are `{<number>}{<title>}{<pageno>}`.
+ \_cod -----------------------------------
+
+\_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip \_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar}
+\_sdef{_tocl:2}#1#2#3{\_llaptoclink{#1}{#2}\_tocdotfill \_pgn{#3}\_tocpar}
+\_sdef{_tocl:3}#1#2#3{\_advance\_leftskip by\_iindent \_cs{_tocl:2}{#1}{#2}{#3}}
+
+ \_doc -----------------------------------
+ The auxiliary macros are:
+ \begitems
+ * \`\_llaptoclink``<text>` does `\_noindent\_llap{<linked text>}`.
+ * \`\_tocdotfill` creates dots in the TOC.
+ * \`\_nofirst``\macro` applies the `\macro` only if we don't print the first
+ record of the TOC.
+ * \`\_tocpar` finalizes one TOC recors whith rlapped `<pageno>`.
+ * \`\_pgn``{<pageno>}` creates <pageno> as link to real `<gpage>` saved in `#6`
+ of \^`\_tocline`. This is temporarily defined in the \^`\_tocline`.
+ \enditems
+ \_cod ----------------------------------
+
+\_def\_llaptoclink#1{\_noindent
+ \_llap{\_ilink[toc:\_the\_tocrefnum]{\_enspace#1\_kern.4em}\_kern.1em}}
+\_def\_tocdotfill{\_nobreak\_leaders\_hbox to.8em{\_hss.\_hss}\_hskip 1em plus1fill\_relax}
+\_def\_nofirst #1{\_ifnum \_lastpenalty=11333 \_else #1\_fi}
+\_def\_tocpar{\_nobreak \_hskip-2\_iindent\_null \_par}
+
+ \_doc -----------------------------------
+ \`\maketoc` prints warning if TOC data is empty, else it creates TOC by
+ running \^`\_toclist`
+ \_cod ----------------------------------
+
+\_def\_maketoc{\_par \_ifx\_toclist\_empty
+ \_opwarning{\_noexpand\maketoc -- data unavailable, TeX me again}\_openref
+ \_else \_begingroup
+ \_tocrefnum=0 \_penalty11333
+ \_the\_regtoc \_toclist
+ \_endgroup \_fi
+}
+
+ \_doc -----------------------------------
+ \`\regmacro` appends its parameters to \`\_regtoc`, \`\_regmark` and
+ \`\_regoul`. These token lists are used in \^`\maketoc`, \^`\_begoutput` and
+ \^`\pdfunidef`.
+ \_cod \_fin -----------------------------
+
+\_newtoks \_regtoc \_newtoks \_regmark \_newtoks \_regoul
+
+\_def\_regmacro #1#2#3{%
+ \_toksapp\_regtoc{#1}\_toksapp\_regmark{#2}\_toksapp\_regoul{#3}%
+}
+\_public \maketoc \regmacro ;
+
+\_endcode
+
+2020-04-23 \_tocpar introduced (incompatible change)
+2020-04-22 \_pg -> \_pgn (incompatible change)
+2020-03-12 introduced \ No newline at end of file
diff --git a/macros/luatex/optex/base/margins.opm b/macros/luatex/optex/base/margins.opm
new file mode 100644
index 0000000000..a02bf3e57a
--- /dev/null
+++ b/macros/luatex/optex/base/margins.opm
@@ -0,0 +1,78 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \margins {Macros for margins setting <2020-03-14>} % preloaded in format
+
+ \_doc ----------------------------
+ \`\margins``/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit>`
+ takes its parameters, does calculation and sets `\hoffset`, `\voffset`,
+ `\hsize` and `\vsize` registers. Note that \OpTeX/ sets the page origin at
+ the top left corner of the paper, no at the obscure position 1\,in, 1\,in.
+ It is much more comfortable for macro writers.
+ \_cod ----------------------------
+
+\_newdimen\_pgwidth \_newdimen\_pgheight \_pgwidth=0pt
+\_newdimen\_shiftoffset
+
+\_def\_margins/#1 #2 (#3,#4,#5,#6)#7 {\_def\_tmp{#7}%
+ \_ifx\_tmp\_empty
+ \_opwarning{\_string\_margins: missing unit, mm inserted}\_def\_tmp{mm}\_fi
+ \_setpagedimens #2 % setting \_pgwidth, \_pgheight
+ \_ifdim\_pgwidth=0pt \_else
+ \_hoffset=0pt \_voffset=0pt
+ \_if$#3$\_if$#4$\_hoffset =\_dimexpr (\_pgwidth -\_hsize)/2 \_relax
+ \_else \_hoffset =\_dimexpr \_pgwidth -\_hsize - #4\_tmp \_relax % only right margin
+ \_fi
+ \_else \_if$#4$\_hoffset = #3\_tmp \_relax % only left margin
+ \_else \_hsize =\_dimexpr \_pgwidth - #3\_tmp - #4\_tmp \_relax % left+right margin
+ \_hoffset = #3\_tmp \_relax
+ \_fi\_fi
+ \_if$#5$\_if$#6$\_voffset =\_dimexpr (\_pgheight -\_vsize)/2 \_relax
+ \_else \_voffset =\_dimexpr \_pgheight -\_vsize - #6\_tmp \_relax % only bottom margin
+ \_fi
+ \_else \_if$#6$\_voffset = #5\_tmp \_relax % only top margin
+ \_else \_vsize=\_dimexpr \_pgheight - #5\_tmp - #6\_tmp \_relax % top+bottom margin
+ \_voffset = #5\_tmp \_relax
+ \_fi\_fi
+ \_if 1#1\_shiftoffset=0pt \_def\_prepoffsets{}\_else \_if 2#1% double-page layout
+ \_shiftoffset = \_dimexpr \_pgwidth -\_hsize -2\_hoffset \_relax
+ \_def\_prepoffsets{\_ifodd\_pageno \_else \_advance\_hoffset \_shiftoffset \_fi}%
+ \_else \_opwarning{use \_string\_margins/1 or \_string\_margins/2}%
+ \_fi\_fi\_fi
+}
+\_def\_setpagedimens{\_isnextchar({\_setpagedimensB}{\_setpagedimensA}}
+\_def\_setpagedimensA#1 {\_ifcsname _pgs:#1\_endcsname
+ \_ea\_ea\_ea\_setpagedimensB \_csname _pgs:#1\_ea\_endcsname\_space
+ \_else \_opwarning{page specification "#1" is undefined}\_fi}
+\_def\_setpagedimensB (#1,#2)#3 {\_setpagedimensC\_pgwidth=#1:#3
+ \_setpagedimensC\_pgheight=#2:#3
+ \_pdfpagewidth=\_pgwidth \_pdfpageheight=\_pgheight
+}
+\_def\_setpagedimensC #1=#2:#3 {#1=#2\_ifx^#3^\_tmp\_else#3\_fi\_relax\_truedimen#1}
+
+\_public \margins ;
+
+ \_doc ----------------------------
+ The common page dimensions are defined here.
+ \_cod ----------------------------
+
+\_sdef{_pgs:a3}{(297,420)mm} \_sdef{_pgs:a4}{(210,297)mm} \_sdef{_pgs:a5}{(148,210)mm}
+\_sdef{_pgs:a3l}{(420,297)mm} \_sdef{_pgs:a4l}{(297,210)mm} \_sdef{_pgs:a5l}{(210,148)mm}
+\_sdef{_pgs:b5}{(176,250)mm} \_sdef{_pgs:letter}{(8.5,11)in}
+
+ \_doc ----------------------------
+ \`\magscale` `[<factor>]` does `\mag=<factor>` and recalculates page
+ dimensions to their true values.
+ \_cod ----------------------------
+
+\_def\_trueunit{}
+\_def\_magscale[#1]{\_mag=#1\_def\_trueunit{true}%
+ \_ifdim\_pgwidth=0pt \_else \_truedimen\_pgwidth \_truedimen\_pgheight \_fi
+ \_truedimen\_pdfpagewidth \_truedimen\_pdfpageheight
+}
+\_def\_truedimen#1{\_ifx\_trueunit\_empty \_else#1=\_ea\_ignorept\_the#1truept \_fi}
+
+\_public \magscale ;
+
+\_endcode % -----------------------------------------
+
+
diff --git a/macros/luatex/optex/base/math-macros.opm b/macros/luatex/optex/base/math-macros.opm
new file mode 100644
index 0000000000..a1e7b817ff
--- /dev/null
+++ b/macros/luatex/optex/base/math-macros.opm
@@ -0,0 +1,946 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \sin {Math macros plus mathchardefs <2020-04-27>} % preloaded in format
+
+ \_doc -----------------------------
+ The category code of the character `_` remains as letter (11) and the mathocode
+ of it is `"8000`.
+ It means that it is active character in math mode. It is defined as subscript prefix.
+
+ There is a problem: The `x_n` is tokenized as `x`, `_`, `n` and it works
+ without problem. But `\int``_a^b` is tokenized as `\int``_a`, `^`, `b`. The
+ control sequence `\int``_a` isn't defined. We must write `\int _a^b`.
+
+ The lua code presented here solves this problem. But you cannot set our own
+ control sequence in the form `\<word>_` or `\<word>_<one-letter>` (where
+ <word> is sequence of letters) because such control sequences are
+ unacessible: proprocessor rewrites it.
+
+ The \`\mathsbon` macro activates the rewritting rule `\<word>_<nonleter>` to
+ `\<word> _<nonletter>` and
+ `\<word>``_<letter><nonletter>` to `\<word> _<letter><nonletter>` at input
+ processor level. The \`\mathsboff` deactivates it.
+ You can ask by \`\_ifmathsb` if this feature is activated or deactivated.
+ By default, is is activated in the `\everyjob`.
+ \_cod -----------------------------
+
+\catcode`\_ = 8 \let\sb = _
+\catcode`\_ = 13 \let _ = \sb
+\catcode`\_ = 11
+\_private \sb ;
+
+\_newifi\_ifmathsb \_mathsbfalse
+\_def \_mathsbon {%
+ \_directlua{
+ callback.register("process_input_buffer",
+ function (str)
+ return string.gsub(str.." ", "(\_nbb[a-zA-Z]+)_([a-zA-Z]?[^_a-zA-Z])", "\_pcent 1 _\_pcent 2")
+ end) }%
+ \_global\_mathsbtrue
+}
+\_def \_mathsboff {%
+ \_directlua{ callback.register("process_input_buffer", nil) }%
+ \_global \_mathsbfalse
+}
+\_public \mathsboff \mathsbon ;
+
+ \_doc -----------------------------
+ All mathcodes are set to equal values as in plain\TeX/.
+ But all encoding-dependend declarations (like these) will be set
+ to different values when Unicode-math font is used.
+ \_cod -----------------------------
+
+\_mathcode`\^^@="2201 % \cdot
+\_mathcode`\^^A="3223 % \downarrow
+\_mathcode`\^^B="010B % \alpha
+\_mathcode`\^^C="010C % \beta
+\_mathcode`\^^D="225E % \land
+\_mathcode`\^^E="023A % \lnot
+\_mathcode`\^^F="3232 % \in
+\_mathcode`\^^G="0119 % \pi
+\_mathcode`\^^H="0115 % \lambda
+\_mathcode`\^^I="010D % \gamma
+\_mathcode`\^^J="010E % \delta
+\_mathcode`\^^K="3222 % \uparrow
+\_mathcode`\^^L="2206 % \pm
+\_mathcode`\^^M="2208 % \oplus
+\_mathcode`\^^N="0231 % \infty
+\_mathcode`\^^O="0140 % \partial
+\_mathcode`\^^P="321A % \subset
+\_mathcode`\^^Q="321B % \supset
+\_mathcode`\^^R="225C % \cap
+\_mathcode`\^^S="225B % \cup
+\_mathcode`\^^T="0238 % \forall
+\_mathcode`\^^U="0239 % \exists
+\_mathcode`\^^V="220A % \otimes
+\_mathcode`\^^W="3224 % \leftrightarrow
+\_mathcode`\^^X="3220 % \leftarrow
+\_mathcode`\^^Y="3221 % \rightarrow
+\_mathcode`\^^Z="8000 % \ne
+\_mathcode`\^^[="2205 % \diamond
+\_mathcode`\^^\="3214 % \le
+\_mathcode`\^^]="3215 % \ge
+\_mathcode`\^^^="3211 % \equiv
+\_mathcode`\^^_="225F % \lor
+\_mathcode`\ ="8000 % \space
+\_mathcode`\!="5021
+\_mathcode`\'="8000 % ^\prime
+\_mathcode`\(="4028
+\_mathcode`\)="5029
+\_mathcode`\*="2203 % \ast
+\_mathcode`\+="202B
+\_mathcode`\,="613B
+\_mathcode`\-="2200
+\_mathcode`\.="013A
+\_mathcode`\/="013D
+\_mathcode`\:="303A
+\_mathcode`\;="603B
+\_mathcode`\<="313C
+\_mathcode`\=="303D
+\_mathcode`\>="313E
+\_mathcode`\?="503F
+\_mathcode`\[="405B
+\_mathcode`\\="026E % \backslash
+\_mathcode`\]="505D
+\_mathcode`\_="8000 % math-active subscript
+\_mathcode`\{="4266
+\_mathcode`\|="026A
+\_mathcode`\}="5267
+\_mathcode`\^^?="1273 % \smallint
+
+\_delcode`\(="028300
+\_delcode`\)="029301
+\_delcode`\[="05B302
+\_delcode`\]="05D303
+\_delcode`\<="26830A
+\_delcode`\>="26930B
+\_delcode`\/="02F30E
+\_delcode`\|="26A30C
+\_delcode`\\="26E30F
+
+ \_doc -----------------------------
+ All control sequences declared by `\mathchardef` are supposed (by default)
+ only for public usage. It means that they are delcared without `_` prefix.
+ If such sequences are used in internal \OpTeX/ macro then their internal
+ prefixed form is declared using `\_private` macro.\nl
+ These encoding dependent declarations will be set to different values
+ when Unicode-math font is loaded.\nl
+ The declared sequences for math symbols are not hyperlinked in this documentation.
+ \maxlines=15
+ \_cod -----------------------------
+
+\_mathchardef\alpha="010B
+\_mathchardef\beta="010C
+\_mathchardef\gamma="010D
+\_mathchardef\delta="010E
+\_mathchardef\epsilon="010F
+\_mathchardef\zeta="0110
+\_mathchardef\eta="0111
+\_mathchardef\theta="0112
+\_mathchardef\iota="0113
+\_mathchardef\kappa="0114
+\_mathchardef\lambda="0115
+\_mathchardef\mu="0116
+\_mathchardef\nu="0117
+\_mathchardef\xi="0118
+\_mathchardef\pi="0119
+\_mathchardef\rho="011A
+\_mathchardef\sigma="011B
+\_mathchardef\tau="011C
+\_mathchardef\upsilon="011D
+\_mathchardef\phi="011E
+\_mathchardef\chi="011F
+\_mathchardef\psi="0120
+\_mathchardef\omega="0121
+\_mathchardef\varepsilon="0122
+\_mathchardef\vartheta="0123
+\_mathchardef\varpi="0124
+\_mathchardef\varrho="0125
+\_mathchardef\varsigma="0126
+\_mathchardef\varphi="0127
+\_mathchardef\Gamma="7000
+\_mathchardef\Delta="7001
+\_mathchardef\Theta="7002
+\_mathchardef\Lambda="7003
+\_mathchardef\Xi="7004
+\_mathchardef\Pi="7005
+\_mathchardef\Sigma="7006
+\_mathchardef\Upsilon="7007
+\_mathchardef\Phi="7008
+\_mathchardef\Psi="7009
+\_mathchardef\Omega="700A
+
+\_mathchardef\aleph="0240
+\_mathchardef\imath="017B
+\_mathchardef\jmath="017C
+\_mathchardef\ell="0160
+\_mathchardef\wp="017D
+\_mathchardef\Re="023C
+\_mathchardef\Im="023D
+\_mathchardef\partial="0140
+\_mathchardef\infty="0231
+\_mathchardef\prime="0230
+\_mathchardef\emptyset="023B
+\_mathchardef\nabla="0272
+\_protected\_def \surd{{\_mathchar"1270}}
+\_mathchardef\top="023E
+\_mathchardef\bot="023F
+\_mathchardef\triangle="0234
+\_mathchardef\forall="0238
+\_mathchardef\exists="0239
+\_mathchardef\neg="023A \_let\lnot=\neg
+\_mathchardef\flat="015B
+\_mathchardef\natural="015C
+\_mathchardef\sharp="015D
+\_mathchardef\clubsuit="027C
+\_mathchardef\diamondsuit="027D
+\_mathchardef\heartsuit="027E
+\_mathchardef\spadesuit="027F
+
+\_mathchardef\coprod="1360
+\_mathchardef\bigvee="1357
+\_mathchardef\bigwedge="1356
+\_mathchardef\biguplus="1355
+\_mathchardef\bigcap="1354
+\_mathchardef\bigcup="1353
+\_mathchardef\intop="1352
+\_protected\_def \int{\_intop\_nolimits} \_private \intop;
+\_mathchardef\prod="1351
+\_mathchardef\sum="1350
+\_mathchardef\bigotimes="134E
+\_mathchardef\bigoplus="134C
+\_mathchardef\bigodot="134A
+\_mathchardef\ointop="1348
+\_protected\_def\_oint {\_ointop\_nolimits} \_private \ointop;
+\_mathchardef\bigsqcup="1346
+\_mathchardef\smallint="1273
+
+\_mathchardef\triangleleft="212F \_private \triangleleft;
+\_mathchardef\triangleright="212E \_private \trianglerigt;
+\_mathchardef\bigtriangleup="2234
+\_mathchardef\bigtriangledown="2235
+\_mathchardef\wedge="225E \let\land=\wedge
+\_mathchardef\vee="225F \let\lor=\vee
+\_mathchardef\cap="225C
+\_mathchardef\cup="225B
+\_mathchardef\ddagger="227A
+\_mathchardef\dagger="2279
+\_mathchardef\sqcap="2275
+\_mathchardef\sqcup="2274
+\_mathchardef\uplus="225D
+\_mathchardef\amalg="2271
+\_mathchardef\diamond="2205
+\_mathchardef\bullet="220F \_private \bullet;
+\_mathchardef\wr="226F
+\_mathchardef\div="2204
+\_mathchardef\odot="220C
+\_mathchardef\oslash="220B
+\_mathchardef\otimes="220A
+\_mathchardef\ominus="2209
+\_mathchardef\oplus="2208
+\_mathchardef\mp="2207
+\_mathchardef\pm="2206
+\_mathchardef\circ="220E
+\_mathchardef\bigcirc="220D
+\_mathchardef\setminus="226E % for set difference A\setminus B
+\_mathchardef\cdot="2201
+\_mathchardef\ast="2203
+\_mathchardef\times="2202
+\_mathchardef\star="213F
+
+\_mathchardef\propto="322F
+\_mathchardef\sqsubseteq="3276
+\_mathchardef\sqsupseteq="3277
+\_mathchardef\parallel="326B
+\_mathchardef\mid="326A
+\_mathchardef\dashv="3261
+\_mathchardef\vdash="3260
+\_mathchardef\nearrow="3225
+\_mathchardef\searrow="3226
+\_mathchardef\nwarrow="322D
+\_mathchardef\swarrow="322E
+\_mathchardef\Leftrightarrow="322C
+\_mathchardef\Leftarrow="3228
+\_mathchardef\Rightarrow="3229
+\_protected\_def \neq{\_not=} \_let\ne=\neq
+\_mathchardef\leq="3214 \let\le=\leq
+\_mathchardef\geq="3215 \let\ge=\geq
+\_mathchardef\succ="321F
+\_mathchardef\prec="321E
+\_mathchardef\approx="3219
+\_mathchardef\succeq="3217
+\_mathchardef\preceq="3216
+\_mathchardef\supset="321B
+\_mathchardef\subset="321A
+\_mathchardef\supseteq="3213
+\_mathchardef\subseteq="3212
+\_mathchardef\in="3232
+\_mathchardef\ni="3233 \let\owns=\ni
+\_mathchardef\gg="321D
+\_mathchardef\ll="321C
+% \_mathchardef\not="3236 % defined below
+\_mathchardef\leftrightarrow="3224
+\_mathchardef\leftarrow="3220 \_let\gets=\leftarrow
+\_mathchardef\rightarrow="3221 \_let\to=\rightarrow
+\_mathchardef\mapstochar="3237
+\_protected\_def\mapsto{\_mapstochar\_rightarrow} \_private \mapstochar \rightarrow ;
+\_mathchardef\sim="3218
+\_mathchardef\simeq="3227
+\_mathchardef\perp="323F
+\_mathchardef\equiv="3211
+\_mathchardef\asymp="3210
+\_mathchardef\smile="315E
+\_mathchardef\frown="315F
+\_mathchardef\leftharpoonup="3128
+\_mathchardef\leftharpoondown="3129
+\_mathchardef\rightharpoonup="312A
+\_mathchardef\rightharpoondown="312B
+
+ \_doc -----------------------------
+ The math functions like log, sin, cos are declared in tha same way as in
+ plain\TeX/, but they are `\protected` in \OpTeX/.
+ \_cod -----------------------------
+
+\_protected\_def\log {\_mathop{\_rm log}\_nolimits}
+\_protected\_def\lg {\_mathop{\_rm lg}\_nolimits}
+\_protected\_def\ln {\_mathop{\_rm ln}\_nolimits}
+\_protected\_def\lim {\_mathop{\_rm lim}}
+\_protected\_def\limsup {\_mathop{\_rm lim\_thinsk sup}}
+\_protected\_def\liminf {\_mathop{\_rm lim\_thinsk inf}}
+\_protected\_def\sin {\_mathop{\_rm sin}\_nolimits}
+\_protected\_def\arcsin {\_mathop{\_rm arcsin}\_nolimits}
+\_protected\_def\sinh {\_mathop{\_rm sinh}\_nolimits}
+\_protected\_def\cos {\_mathop{\_rm cos}\_nolimits}
+\_protected\_def\arccos {\_mathop{\_rm arccos}\_nolimits}
+\_protected\_def\cosh {\_mathop{\_rm cosh}\_nolimits}
+\_protected\_def\tan {\_mathop{\_rm tan}\_nolimits}
+\_protected\_def\arctan {\_mathop{\_rm arctan}\_nolimits}
+\_protected\_def\tanh {\_mathop{\_rm tanh}\_nolimits}
+\_protected\_def\cot {\_mathop{\_rm cot}\_nolimits}
+\_protected\_def\coth {\_mathop{\_rm coth}\_nolimits}
+%\_protected\_def\sec {\_mathop{\_rm sec}\_nolimits} % \sec is section
+\_protected\_def\csc {\_mathop{\_rm csc}\_nolimits}
+\_protected\_def\max {\_mathop{\_rm max}}
+\_protected\_def\min {\_mathop{\_rm min}}
+\_protected\_def\sup {\_mathop{\_rm sup}}
+\_protected\_def\inf {\_mathop{\_rm inf}}
+\_protected\_def\arg {\_mathop{\_rm arg}\_nolimits}
+\_protected\_def\ker {\_mathop{\_rm ker}\_nolimits}
+\_protected\_def\dim {\_mathop{\_rm dim}\_nolimits}
+\_protected\_def\hom {\_mathop{\_rm hom}\_nolimits}
+\_protected\_def\det {\_mathop{\_rm det}}
+\_protected\_def\exp {\_mathop{\_rm exp}\_nolimits}
+\_protected\_def\Pr {\_mathop{\_rm Pr}}
+\_protected\_def\gcd {\_mathop{\_rm gcd}}
+\_protected\_def\deg {\_mathop{\_rm deg}\_nolimits}
+
+ \_doc -----------------------------
+ These macros are defined similarly as in plain\TeX. Only internal macro
+ names from plain\TeX/ with `@` character are re-written in more readable
+ form.\nl
+ \`\sp` is alternative for `^`. The \`\sb` alternative for `_` was defined
+ at the line 27 of the file `math-macros.opm`.
+ \_cod -----------------------------
+
+\_let\_sp=^ \public \sp ;
+% \sb=_ , defined at beginning of this file
+
+\_def\_thinsk {\_mskip\_thinmuskip}
+\_protected\_def\,{\_relax\_ifmmode \_thinsk \_else \_thinspace \_fi}
+\_protected\_def\>{\_mskip\_medmuskip} \let\_medsk = \>
+\_protected\_def\;{\_mskip\_thickmuskip} \let\_thicksk = \;
+\_protected\_def\!{\_mskip-\_thinmuskip} \let\_thinneg = \!
+%\_def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} % obsolete
+
+ \_doc -----------------------------
+ Active \`\prime` character is defined here.
+ \_cod -----------------------------
+
+{\_catcode`\'=\active \_gdef'{^\_bgroup\_primes}} % primes dance
+\_def\_primes{\_prime\_isnextchar'{\_primesA}%
+ {\_isnextchar^{\_primesB}{\_egroup}}}
+\_def\_primesA #1{\_primes}
+\_def\_primesB #1#2{#2\egroup}
+\_private \prime ;
+
+ \_doc -----------------------------
+ \`\big`, \`\Big`, \`\bigg`, \`\Bigg`, \`\bigl`, \`\bigm`, \`\bigr`, \`\Bigl`, \`\Bigm`,
+ \`\Bigr`, \`\biggl`, \`\biggm`, \`\biggr`, \`\Biggl`, \`\Biggm`, \`\Bigg`, \`\Biggr`
+ are based on the \`\_scalebig` macro because we need the dependency on
+ the various sizes of the fonts.
+ \_cod -----------------------------
+
+%{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math %obsolete
+
+\_def\_scalebig#1#2{{\_left#1\_vbox to#2\_fontdimen6\_textfont1{}%
+ \_kern-\_nulldelimiterspace\_right.}}
+\_protected\_def\_big#1{\_scalebig{#1}{.85}}
+\_protected\_def\_Big#1{\_scalebig{#1}{1.15}}
+\_protected\_def\_bigg#1{\_scalebig{#1}{1.45}}
+\_protected\_def\_Bigg#1{\_scalebig{#1}{1.75}}
+\_public \big \Big \bigg \Bigg ;
+
+\_protected\_def\_bigl{\_mathopen\_big}
+\_protected\_def\_bigm{\_mathrel\_big}
+\_protected\_def\_bigr{\_mathclose\_big}
+\_protected\_def\_Bigl{\_mathopen\_Big}
+\_protected\_def\_Bigm{\_mathrel\_Big}
+\_protected\_def\_Bigr{\_mathclose\_Big}
+\_protected\_def\_biggl{\_mathopen\_bigg}
+\_protected\_def\_biggm{\_mathrel\_bigg}
+\_protected\_def\_biggr{\_mathclose\_bigg}
+\_protected\_def\_Biggl{\_mathopen\_Bigg}
+\_protected\_def\_Biggm{\_mathrel\_Bigg}
+\_protected\_def\_Biggr{\_mathclose\_Bigg}
+\_public \bigl \bigm \bigr \Bigl \Bigm \Bigr \biggl \biggm \biggr \Biggl \Biggm \Biggr ;
+
+ \_doc -----------------------------
+ Math relations defined by the \`\jointrel` plain \TeX/ macro:
+ \_cod -----------------------------
+
+\_protected\_def\_joinrel{\_mathrel{\_mkern-2.5mu}} % -3mu in plainTeX
+\_protected\_def\relbar{\_mathrel{\_smash-}} % \_smash, because - has the same height as +
+\_protected\_def\Relbar{\_mathrel=}
+\_mathchardef\lhook="312C
+\_protected\_def\hookrightarrow{\_lhook\_joinrel\_rightarrow}
+\_mathchardef\rhook="312D
+\_protected\_def\hookleftarrow{\_leftarrow\_joinrel\_rhook}
+\_protected\_def\bowtie{\_mathrel\_triangleright\_joinrel\_mathrel\_triangleleft}
+\_protected\_def\models{\_mathrel|\_joinrel=}
+\_protected\_def\Longrightarrow{\_Relbar\_joinrel\_Rightarrow}
+\_protected\_def\longrightarrow{\_relbar\_joinrel\_rightarrow}
+\_protected\_def\longleftarrow{\_leftarrow\_joinrel\_relbar}
+\_protected\_def\Longleftarrow{\_Leftarrow\_joinrel\_Relbar}
+\_protected\_def\longmapsto{\_mapstochar\_longrightarrow}
+\_protected\_def\longleftrightarrow{\_leftarrow\_joinrel\_rightarrow}
+\_protected\_def\Longleftrightarrow{\_Leftarrow\_joinrel\_Rightarrow}
+\_protected\_def\iff{\_thicksk\_Longleftrightarrow\_thicksk}
+\_private \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft
+ \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar
+ \longrightarrow \Longleftrightarrow ;
+\_public \joinrel ;
+
+ \_doc -----------------------------
+ \`\ldots`, \`\cdots`, \`\vdots`, \`\ddots` from plain \TeX/
+ \_cod -----------------------------
+
+\_mathchardef\_ldotp="613A % ldot as a punctuation mark
+\_mathchardef\_cdotp="6201 % cdot as a punctuation mark
+\_mathchardef\_colon="603A % colon as a punctuation mark
+\_public \ldotp \cdotp \colon ;
+
+\_protected\_def\_ldots{\_mathinner{\_ldotp\_ldotp\_ldotp}}
+\_protected\_def\_cdots{\_mathinner{\_cdotp\_cdotp\_cdotp}}
+\_protected\_def\_vdots{\_vbox{\_baselineskip=.4em \_lineskiplimit=0pt
+ \_kern.6em \_hbox{.}\_hbox{.}\_hbox{.}}}
+\_protected\_def\_ddots{\_mathinner{%
+ \_mkern1mu\_raise.7em\_vbox{\_kern.7em\_hbox{.}}\_mkern2mu
+ \_raise.4em\_hbox{.}\_mkern2mu\_raise.1em\_hbox{.}\_mkern1mu}}
+
+\_public \ldots \cdots \vdots \ddots ;
+
+ \_doc -----------------------------
+ Math accents (encoding dependent declarations).
+ \_cod -----------------------------
+
+\_protected\_def\acute{\_mathaccent"7013 }
+\_protected\_def\grave{\_mathaccent"7012 }
+\_protected\_def\ddot{\_mathaccent"707F }
+\_protected\_def\tilde{\_mathaccent"707E }
+\_protected\_def\bar{\_mathaccent"7016 }
+\_protected\_def\breve{\_mathaccent"7015 }
+\_protected\_def\check{\_mathaccent"7014 }
+\_protected\_def\hat{\_mathaccent"705E }
+\_protected\_def\vec{\_mathaccent"017E }
+\_protected\_def\dot{\_mathaccent"705F }
+\_protected\_def\widetilde{\_mathaccent"0365 }
+\_protected\_def\widehat{\_mathaccent"0362 }
+
+ \_doc -----------------------------
+ \`\overrightarrow`, \`\overleftarrow`, \`\overbrace`, \`\underbrace`, \`\skew` macros.
+ \_cod -----------------------------
+
+\_def\_math{\_mathsurround0pt }
+\_protected\_def\_overrightarrow #1{\_vbox{\_math\_ialign{##\_crcr
+ \_rightarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip}
+ $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}}
+\_protected\_def\_overleftarrow #1{\_vbox{\_math\_ialign{##\_crcr
+ \_leftarrowfill\_crcr\_noalign{\_kern-.1em \_nointerlineskip}
+ $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}}
+\_protected\_def\_overbrace #1{\_mathop{%
+ \_vbox{\_math\_ialign{##\_crcr\_noalign{\_kern.3em}
+ \_downbracefill\_crcr\_noalign{\_kern.3em \_nointerlineskip}
+ $\_hfil\_displaystyle{#1}\_hfil$\_crcr}}}\_limits}
+\_protected\_def\_underbrace #1{\_mathop{\_vtop{\_math\_ialign{##\_crcr
+ $\_hfil\_displaystyle{#1}\_hfil$\_crcr\_noalign{\_kern.3em \_nointerlineskip}
+ \_upbracefill\_crcr\_noalign{\_kern.3em}}}}\_limits}
+\_protected\_def\_skew #1#2#3{{\_muskip0=#1mu\_divide\_muskip0=by2 \_mkern\_muskip0
+ #2{\_mkern-\_muskip0{#3}\_mkern\_muskip0}\_mkern-\_muskip0}{}}
+
+\_public \overrightarrow \overleftarrow \overbrace \underbrace \skew ;
+
+ \_doc -----------------------------
+ Macros based on `\delimiter`, `\*witdelims` and `\radical` primitives.
+ \_cod -----------------------------
+
+\_protected\_def\lmoustache{\_delimiter"437A340 } % top from (, bottom from )
+\_protected\_def\rmoustache{\_delimiter"537B341 } % top from ), bottom from (
+\_protected\_def\lgroup{\_delimiter"462833A } % extensible ( with sharper tips
+\_protected\_def\rgroup{\_delimiter"562933B } % extensible ) with sharper tips
+\_protected\_def\arrowvert{\_delimiter"26A33C } % arrow without arrowheads
+\_protected\_def\Arrowvert{\_delimiter"26B33D } % double arrow without arrowheads
+\_protected\_def\bracevert{\_delimiter"77C33E } % the vertical bar that extends braces
+\_protected\_def\Vert{\_delimiter"26B30D } \_let\|=\_Vert
+\_protected\_def\vert{\_delimiter"26A30C }
+\_protected\_def\uparrow{\_delimiter"3222378 }
+\_protected\_def\downarrow{\_delimiter"3223379 }
+\_protected\_def\updownarrow{\_delimiter"326C33F }
+\_protected\_def\Uparrow{\_delimiter"322A37E }
+\_protected\_def\Downarrow{\_delimiter"322B37F }
+\_protected\_def\Updownarrow{\_delimiter"326D377 }
+\_protected\_def\backslash{\_delimiter"26E30F } % for double coset G\_backslash H
+\_protected\_def\rangle{\_delimiter"526930B }
+\_protected\_def\langle{\_delimiter"426830A }
+\_protected\_def\rbrace{\_delimiter"5267309 } \_let\}=\rbrace \_let\_rbrace=\rbrace
+\_protected\_def\lbrace{\_delimiter"4266308 } \_let\{=\lbrace \_let\_lbrace=\lbrace
+\_protected\_def\rceil{\_delimiter"5265307 }
+\_protected\_def\lceil{\_delimiter"4264306 }
+\_protected\_def\rfloor{\_delimiter"5263305 }
+\_protected\_def\lfloor{\_delimiter"4262304 }
+
+\_protected\_def\choose{\_atopwithdelims()}
+\_protected\_def\brack{\_atopwithdelims[]}
+\_protected\_def\brace{\_atopwithdelims\_lbrace\_rbrace}
+
+\_protected\_def\_sqrt{\_radical"270370 } \_public \sqrt ;
+
+ \_doc -----------------------------
+ \`\mathpalette`, \`\vphantom`, \`\hphantom`, \`\phantom`, \`\mathstrut`, and
+ \`\smash` macros from plain \TeX.
+ \_cod -----------------------------
+
+\_def\_mathpalette#1#2{\_mathchoice{#1\_displaystyle{#2}}%
+ {#1\_textstyle{#2}}{#1\_scriptstyle{#2}}{#1\_scriptscriptstyle{#2}}}
+\_newbox\_rootbox
+\_protected\_def\root#1\of{\_setbox\_rootbox
+ \_hbox{$\_math\_scriptscriptstyle{#1}$}\_mathpalette\_rootA}
+\_def\_rootA#1#2{\_setbox0=\_hbox{$\_math#1\_sqrt{#2}$}\_dimen0=\_ht0
+ \_advance\_dimen0by-\_dp0
+ \_mkern5mu\_raise.6\_dimen0\_copy\_rootbox \_mkern-10mu\_box0 }
+\_newifi\_ifvp \_newifi\_ifhp
+\_protected\_def\_vphantom{\_vptrue\_hpfalse\_phant}
+\_protected\_def\_hphantom{\_vpfalse\_hptrue\_phant}
+\_protected\_def\_phantom{\_vptrue\_hptrue\_phant}
+\_def\_phant{\_ifmmode\_def\_next{\_mathpalette\_mathphant}%
+ \_else\_let\_next=\_makephant\_fi\_next}
+\_def\_makephant#1{\_setbox0\_hbox{#1}\_finphant}
+\_def\_mathphant#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finphant}
+\_def\_finphant{\_setbox2=\_null
+ \_ifvp \_ht2=\_ht0 \_dp2=\_dp0 \_fi
+ \_ifhp \_wd2=\_wd0 \_fi \_box2 }
+\_def\_mathstrut{\_vphantom(}
+\_protected\_def\_smash{\_relax % \_relax, in case this comes first in \halign
+ \_ifmmode\_def\_next{\_mathpalette\_mathsmash}\_else\_let\_next\_makesmash
+ \_fi\_next}
+\_def\_makesmash#1{\_setbox0=\_hbox{#1}\_finsmash}
+\_def\_mathsmash#1#2{\_setbox0=\_hbox{$\_math#1{#2}$}\_finsmash}
+\_def\_finsmash{\_ht0=0pt \_dp0=0pt \_box0 }
+\_public \mathpalette \vphantom \hphantom \phantom \mathstrut \smash ;
+
+ \_doc -----------------------------
+ \`\cong`, \`\notin`, \`\rightleftharpoons`, \`\buildrel`, \`\doteq`, \`\bmod`
+ and \`\pmod` macros from plain \TeX/.
+ \_cod -----------------------------
+
+\_protected\_def\_cong{\_mathrel{\_mathpalette\_overeq\_sim}} % congruence sign
+\_def\_overeq#1#2{\_lower.05em\_vbox{\_lineskiplimit\_maxdimen\_lineskip=-.05em
+ \_ialign{$\_math#1\_hfil##\_hfil$\_crcr#2\_crcr=\_crcr}}}
+\_protected\_def\_notin{\_mathrel{\_mathpalette\_cancel\_in}}
+\_def\_cancel#1#2{\_math\_ooalign{$\_hfil#1\_mkern1mu/\_hfil$\_crcr$#1#2$}}
+\_protected\_def\_rightleftharpoons{\_mathrel{\_mathpalette\_rlhp{}}}
+\_def\_rlhp#1{\_vcenter{\_math\_hbox{\_ooalign{\_raise.2em
+ \_hbox{$#1\_rightharpoonup$}\_crcr
+ $#1\_leftharpoondown$}}}}
+\_protected\_def\_buildrel#1\over#2{\_mathrel{\_mathop{\_kern0pt #2}\_limits^{#1}}}
+\_protected\_def\_doteq{\_buildrel\_textstyle.\over=}
+\_public \cong \notin \rightleftharpoons \buildrel \doteq ;
+
+\_protected\_def\_bmod{\_nonscript\_mskip-\_medmuskip\_mkern5mu
+ \_mathbin{\_rm mod}\_penalty900\_mkern5mu\_nonscript\_mskip-\_medmuskip}
+\_protected\_def\_pmod#1{\_allowbreak\_mkern18mu({\_rm mod}\_thinsk\_thinsk#1)}
+\_public \bmod \pmod ;
+
+ \_doc -----------------------------
+ \`\cases`, \`\matrix`, \`\pmatrix` and \`\bordermatrix` macros from plain \TeX/
+ \_cod -----------------------------
+
+\_protected\_def\_cases#1{\_left\{\_thinsk\_vcenter{\_normalbaselines\_math
+ \_ialign{$##\_hfil$&\_quad##\_hfil\_crcr#1\_crcr}}\_right.}
+\_protected\_def\_matrix#1{\_null\_thinsk\_vcenter{\_normalbaselines\_math
+ \_ialign{\_hfil$##$\_hfil&&\_quad\_hfil$##$\_hfil\_crcr
+ \_mathstrut\_crcr\_noalign{\_kern-\_baselineskip}
+ #1\_crcr\_mathstrut\_crcr\_noalign{\_kern-\_baselineskip}}}\_thinsk}
+\_protected\_def\_pmatrix#1{\_left(\_matrix{#1}\_right)}
+\_newdimen\_ptrenwd
+\_ptrenwd=0.875\_fontdimen6\_textfont1 % width of the big left (
+\_protected\_def\_bordermatrix#1{\_begingroup \_math
+ \_setbox0=\_vbox{\_def\_cr{\_crcr\_noalign{\_kern.2em\_global\_let\_cr\_endline}}%
+ \_ialign{$##$\_hfil\_kern.2em\_kern\_ptrenwd&\_thinspace\_hfil$##$\_hfil
+ &&\_quad\_hfil$##$\_hfil\_crcr
+ \_omit\_strut\_hfil\_crcr\_noalign{\_kern-\_baselineskip}%
+ #1\_crcr\_omit\_strut\_cr}}%
+ \_setbox2=\_vbox{\_unvcopy0 \_global\_setbox1=\_lastbox}%
+ \_setbox2=\_hbox{\_unhbox1 \_unskip\_global\_setbox1=\_lastbox}%
+ \_setbox2=\_hbox{$\_kern\_wd1 \_kern-\_ptrenwd\_left(\_kern-\_wd1
+ \_global\_setbox1=\_vbox{\_box1 \_kern.2em}%
+ \_vcenter{\_kern-\_ht1 \_unvbox0 \_kern-\_baselineskip}\_thinsk\_right)$}%
+ \_null\_thicksk\_vbox{\_kern\_ht1 \_box2}\_endgroup}
+\_public \cases \matrix \pmatrix \bordermatrix ;
+
+ \_doc -----------------------------
+ \`\openup`, \`\eqalign`, \`\displaylines` and \`\eqalignno` macros from
+ plain \TeX/.
+ \_cod -----------------------------
+
+\_def\_openup{\_afterassignment\_openupA\_dimen0=}
+\_def\_openupA{\_advance\_lineskip by\_dimen0
+ \_advance\_baselineskip by\_dimen0
+ \_advance\_lineskiplimit by\_dimen0 }
+\_def\_eqalign#1{\_null\_thinsk\_vcenter{\_openup\_jot\_math
+ \_ialign{\_strut\_hfil$\_displaystyle{##}$&$\_displaystyle{{}##}$\_hfil
+ \_crcr#1\_crcr}}\_thinsk}
+\_newifi\_ifdtop
+\_def\_display{\_global\_dtoptrue\_openup\_jot\_math
+ \_everycr{\_noalign{\_ifdtop \_global\_dtopfalse \_ifdim\_prevdepth>-1000pt
+ \_vskip-\_lineskiplimit \_vskip\_normallineskiplimit \_fi
+ \_else \_penalty\_interdisplaylinepenalty \_fi}}}
+\_def\_elign{\_tabskip=\_zoskip\_everycr{}} % restore inside \_display
+\_def\_displaylines#1{\_display \_tabskip=\_zoskip
+ \_halign{\_hbox to\_displaywidth{$\_elign\_hfil\_displaystyle##\_hfil$}\_crcr
+ #1\_crcr}}
+\_def\_eqalignno#1{\_display \_tabskip=\_centering
+ \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip
+ &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip\_centering
+ &\_llap{$\_elign##$}\_tabskip\_zoskip\_crcr
+ #1\_crcr}}
+\_def\_leqalignno#1{\_display \_tabskip=\_centering
+ \_halign to\_displaywidth{\_hfil$\_elign\_displaystyle{##}$\_tabskip=\_zoskip
+ &$\_elign\_displaystyle{{}##}$\_hfil\_tabskip=\_centering
+ &\_kern-\_displaywidth\_rlap{$\_elign##$}\_tabskip\_displaywidth\_crcr
+ #1\_crcr}}
+\_public \openup \eqalign \displaylines \eqalignno ;
+
+ \_doc -----------------------------
+ These macros are inspired from `ams-math.tex` file.
+ \maxlines=15
+ \_cod -----------------------------
+
+\_def\_amsafam{4} \_def\_amsbfam{5}
+
+\_mathchardef \boxdot "2\_amsafam 00
+\_mathchardef \boxplus "2\_amsafam 01
+\_mathchardef \boxtimes "2\_amsafam 02
+\_mathchardef \square "0\_amsafam 03
+\_mathchardef \blacksquare "0\_amsafam 04
+\_mathchardef \centerdot "2\_amsafam 05
+\_mathchardef \lozenge "0\_amsafam 06
+\_mathchardef \blacklozenge "0\_amsafam 07
+\_mathchardef \circlearrowright "3\_amsafam 08
+\_mathchardef \circlearrowleft "3\_amsafam 09
+\_mathchardef \rightleftharpoons "3\_amsafam 0A
+\_mathchardef \leftrightharpoons "3\_amsafam 0B
+\_mathchardef \boxminus "2\_amsafam 0C
+\_mathchardef \Vdash "3\_amsafam 0D
+\_mathchardef \Vvdash "3\_amsafam 0E
+\_mathchardef \vDash "3\_amsafam 0F
+\_mathchardef \twoheadrightarrow "3\_amsafam 10
+\_mathchardef \twoheadleftarrow "3\_amsafam 11
+\_mathchardef \leftleftarrows "3\_amsafam 12
+\_mathchardef \rightrightarrows "3\_amsafam 13
+\_mathchardef \upuparrows "3\_amsafam 14
+\_mathchardef \downdownarrows "3\_amsafam 15
+\_mathchardef \upharpoonright "3\_amsafam 16
+\_mathchardef \downharpoonright "3\_amsafam 17
+\_mathchardef \upharpoonleft "3\_amsafam 18
+\_mathchardef \downharpoonleft "3\_amsafam 19
+\_mathchardef \rightarrowtail "3\_amsafam 1A
+\_mathchardef \leftarrowtail "3\_amsafam 1B
+\_mathchardef \leftrightarrows "3\_amsafam 1C
+\_mathchardef \rightleftarrows "3\_amsafam 1D
+\_mathchardef \Lsh "3\_amsafam 1E
+\_mathchardef \Rsh "3\_amsafam 1F
+\_mathchardef \rightsquigarrow "3\_amsafam 20
+\_mathchardef \leftrightsquigarrow "3\_amsafam 21
+\_mathchardef \looparrowleft "3\_amsafam 22
+\_mathchardef \looparrowright "3\_amsafam 23
+\_mathchardef \circeq "3\_amsafam 24
+\_mathchardef \succsim "3\_amsafam 25
+\_mathchardef \gtrsim "3\_amsafam 26
+\_mathchardef \gtrapprox "3\_amsafam 27
+\_mathchardef \multimap "3\_amsafam 28
+\_mathchardef \therefore "3\_amsafam 29
+\_mathchardef \because "3\_amsafam 2A
+\_mathchardef \doteqdot "3\_amsafam 2B
+\_mathchardef \triangleq "3\_amsafam 2C
+\_mathchardef \precsim "3\_amsafam 2D
+\_mathchardef \lesssim "3\_amsafam 2E
+\_mathchardef \lessapprox "3\_amsafam 2F
+\_mathchardef \eqslantless "3\_amsafam 30
+\_mathchardef \eqslantgtr "3\_amsafam 31
+\_mathchardef \curlyeqprec "3\_amsafam 32
+\_mathchardef \curlyeqsucc "3\_amsafam 33
+\_mathchardef \preccurlyeq "3\_amsafam 34
+\_mathchardef \leqq "3\_amsafam 35
+\_mathchardef \leqslant "3\_amsafam 36
+\_mathchardef \lessgtr "3\_amsafam 37
+\_mathchardef \backprime "0\_amsafam 38
+\_mathchardef \risingdotseq "3\_amsafam 3A
+\_mathchardef \fallingdotseq "3\_amsafam 3B
+\_mathchardef \succcurlyeq "3\_amsafam 3C
+\_mathchardef \geqq "3\_amsafam 3D
+\_mathchardef \geqslant "3\_amsafam 3E
+\_mathchardef \gtrless "3\_amsafam 3F
+\_mathchardef \sqsubset "3\_amsafam 40
+\_mathchardef \sqsupset "3\_amsafam 41
+\_mathchardef \vartriangleright "3\_amsafam 42
+\_mathchardef \vartriangleleft "3\_amsafam 43
+\_mathchardef \trianglerighteq "3\_amsafam 44
+\_mathchardef \trianglelefteq "3\_amsafam 45
+\_mathchardef \bigstar "0\_amsafam 46
+\_mathchardef \between "3\_amsafam 47
+\_mathchardef \blacktriangledown "0\_amsafam 48
+\_mathchardef \blacktriangleright "3\_amsafam 49
+\_mathchardef \blacktriangleleft "3\_amsafam 4A
+\_mathchardef \vartriangle "3\_amsafam 4D
+\_mathchardef \blacktriangle "0\_amsafam 4E
+\_mathchardef \triangledown "0\_amsafam 4F
+\_mathchardef \eqcirc "3\_amsafam 50
+\_mathchardef \lesseqgtr "3\_amsafam 51
+\_mathchardef \gtreqless "3\_amsafam 52
+\_mathchardef \lesseqqgtr "3\_amsafam 53
+\_mathchardef \gtreqqless "3\_amsafam 54
+\_mathchardef \Rrightarrow "3\_amsafam 56
+\_mathchardef \Lleftarrow "3\_amsafam 57
+\_mathchardef \veebar "2\_amsafam 59
+\_mathchardef \barwedge "2\_amsafam 5A
+\_mathchardef \doublebarwedge "2\_amsafam 5B
+\_mathchardef \angle "0\_amsafam 5C
+\_mathchardef \measuredangle "0\_amsafam 5D
+\_mathchardef \sphericalangle "0\_amsafam 5E
+\_mathchardef \varpropto "3\_amsafam 5F
+\_mathchardef \smallsmile "3\_amsafam 60
+\_mathchardef \smallfrown "3\_amsafam 61
+\_mathchardef \Subset "3\_amsafam 62
+\_mathchardef \Supset "3\_amsafam 63
+\_mathchardef \Cup "2\_amsafam 64
+\_mathchardef \Cap "2\_amsafam 65
+\_mathchardef \curlywedge "2\_amsafam 66
+\_mathchardef \curlyvee "2\_amsafam 67
+\_mathchardef \leftthreetimes "2\_amsafam 68
+\_mathchardef \rightthreetimes "2\_amsafam 69
+\_mathchardef \subseteqq "3\_amsafam 6A
+\_mathchardef \supseteqq "3\_amsafam 6B
+\_mathchardef \bumpeq "3\_amsafam 6C
+\_mathchardef \Bumpeq "3\_amsafam 6D
+\_mathchardef \lll "3\_amsafam 6E
+\_mathchardef \ggg "3\_amsafam 6F
+\_protected\_def \ulcorner {\_delimiter"4\_amsafam 70\_amsafam 70 }
+\_protected\_def \urcorner {\_delimiter"5\_amsafam 71\_amsafam 71 }
+\_mathchardef \circledS "0\_amsafam 73
+\_mathchardef \pitchfork "3\_amsafam 74
+\_mathchardef \dotplus "2\_amsafam 75
+\_mathchardef \backsim "3\_amsafam 76
+\_mathchardef \backsimeq "3\_amsafam 77
+\_protected\_def \llcorner {\_delimiter"4\_amsafam 78\_amsafam 78 }
+\_protected\_def \lrcorner {\_delimiter"5\_amsafam 79\_amsafam 79 }
+\_mathchardef \complement "0\_amsafam 7B
+\_mathchardef \intercal "2\_amsafam 7C
+\_mathchardef \circledcirc "2\_amsafam 7D
+\_mathchardef \circledast "2\_amsafam 7E
+\_mathchardef \circleddash "2\_amsafam 7F
+\_mathchardef \rhd "2\_amsafam 42
+\_mathchardef \lhd "2\_amsafam 43
+\_mathchardef \unrhd "2\_amsafam 44
+\_mathchardef \unlhd "2\_amsafam 45
+
+ \_let\restriction\upharpoonright
+ \_let\Doteq\doteqdot
+ \_let\doublecup\Cup
+ \_let\doublecap\Cap
+ \_let\llless\lll
+ \_let\gggtr\ggg
+ \_let\Box=\square % LaTeX symbol
+ \_let\Box=\square % LaTeX symbol
+
+\_mathchardef \lvertneqq "3\_amsbfam 00
+\_mathchardef \gvertneqq "3\_amsbfam 01
+\_mathchardef \nleq "3\_amsbfam 02
+\_mathchardef \ngeq "3\_amsbfam 03
+\_mathchardef \nless "3\_amsbfam 04
+\_mathchardef \ngtr "3\_amsbfam 05
+\_mathchardef \nprec "3\_amsbfam 06
+\_mathchardef \nsucc "3\_amsbfam 07
+\_mathchardef \lneqq "3\_amsbfam 08
+\_mathchardef \gneqq "3\_amsbfam 09
+\_mathchardef \nleqslant "3\_amsbfam 0A
+\_mathchardef \ngeqslant "3\_amsbfam 0B
+\_mathchardef \lneq "3\_amsbfam 0C
+\_mathchardef \gneq "3\_amsbfam 0D
+\_mathchardef \npreceq "3\_amsbfam 0E
+\_mathchardef \nsucceq "3\_amsbfam 0F
+\_mathchardef \precnsim "3\_amsbfam 10
+\_mathchardef \succnsim "3\_amsbfam 11
+\_mathchardef \lnsim "3\_amsbfam 12
+\_mathchardef \gnsim "3\_amsbfam 13
+\_mathchardef \nleqq "3\_amsbfam 14
+\_mathchardef \ngeqq "3\_amsbfam 15
+\_mathchardef \precneqq "3\_amsbfam 16
+\_mathchardef \succneqq "3\_amsbfam 17
+\_mathchardef \precnapprox "3\_amsbfam 18
+\_mathchardef \succnapprox "3\_amsbfam 19
+\_mathchardef \lnapprox "3\_amsbfam 1A
+\_mathchardef \gnapprox "3\_amsbfam 1B
+\_mathchardef \nsim "3\_amsbfam 1C
+\_mathchardef \ncong "3\_amsbfam 1D
+\_mathchardef \diagup "0\_amsbfam 1E
+\_mathchardef \diagdown "0\_amsbfam 1F
+\_mathchardef \varsubsetneq "3\_amsbfam 20
+\_mathchardef \varsupsetneq "3\_amsbfam 21
+\_mathchardef \nsubseteqq "3\_amsbfam 22
+\_mathchardef \nsupseteqq "3\_amsbfam 23
+\_mathchardef \subsetneqq "3\_amsbfam 24
+\_mathchardef \supsetneqq "3\_amsbfam 25
+\_mathchardef \varsubsetneqq "3\_amsbfam 26
+\_mathchardef \varsupsetneqq "3\_amsbfam 27
+\_mathchardef \subsetneq "3\_amsbfam 28
+\_mathchardef \supsetneq "3\_amsbfam 29
+\_mathchardef \nsubseteq "3\_amsbfam 2A
+\_mathchardef \nsupseteq "3\_amsbfam 2B
+\_mathchardef \nparallel "3\_amsbfam 2C
+\_mathchardef \nmid "3\_amsbfam 2D
+\_mathchardef \nshortmid "3\_amsbfam 2E
+\_mathchardef \nshortparallel "3\_amsbfam 2F
+\_mathchardef \nvdash "3\_amsbfam 30
+\_mathchardef \nVdash "3\_amsbfam 31
+\_mathchardef \nvDash "3\_amsbfam 32
+\_mathchardef \nVDash "3\_amsbfam 33
+\_mathchardef \ntrianglerighteq "3\_amsbfam 34
+\_mathchardef \ntrianglelefteq "3\_amsbfam 35
+\_mathchardef \ntriangleleft "3\_amsbfam 36
+\_mathchardef \ntriangleright "3\_amsbfam 37
+\_mathchardef \nleftarrow "3\_amsbfam 38
+\_mathchardef \nrightarrow "3\_amsbfam 39
+\_mathchardef \nLeftarrow "3\_amsbfam 3A
+\_mathchardef \nRightarrow "3\_amsbfam 3B
+\_mathchardef \nLeftrightarrow "3\_amsbfam 3C
+\_mathchardef \nleftrightarrow "3\_amsbfam 3D
+\_mathchardef \divideontimes "2\_amsbfam 3E
+\_mathchardef \varnothing "0\_amsbfam 3F
+\_mathchardef \nexists "0\_amsbfam 40
+\_mathchardef \Finv "0\_amsbfam 60
+\_mathchardef \Game "0\_amsbfam 61
+\_mathchardef \mho "0\_amsbfam 66
+\_mathchardef \eth "0\_amsbfam 67
+\_mathchardef \eqsim "3\_amsbfam 68
+\_mathchardef \beth "0\_amsbfam 69
+\_mathchardef \gimel "0\_amsbfam 6A
+\_mathchardef \daleth "0\_amsbfam 6B
+\_mathchardef \lessdot "2\_amsbfam 6C
+\_mathchardef \gtrdot "2\_amsbfam 6D
+\_mathchardef \ltimes "2\_amsbfam 6E
+\_mathchardef \rtimes "2\_amsbfam 6F
+\_mathchardef \shortmid "3\_amsbfam 70
+\_mathchardef \shortparallel "3\_amsbfam 71
+\_mathchardef \smallsetminus "2\_amsbfam 72
+\_mathchardef \thicksim "3\_amsbfam 73
+\_mathchardef \thickapprox "3\_amsbfam 74
+\_mathchardef \approxeq "3\_amsbfam 75
+\_mathchardef \precapprox "3\_amsbfam 76
+\_mathchardef \succapprox "3\_amsbfam 77
+\_mathchardef \curvearrowleft "3\_amsbfam 78
+\_mathchardef \curvearrowright "3\_amsbfam 79
+\_mathchardef \digamma "0\_amsbfam 7A
+\_mathchardef \varkappa "0\_amsbfam 7B
+\_mathchardef \Bbbk "0\_amsbfam 7C
+\_mathchardef \hslash "0\_amsbfam 7D
+\_mathchardef \hbar "0\_amsbfam 7E
+\_mathchardef \backepsilon "3\_amsbfam 7F
+
+\_let\circledplus\oplus
+\_let\circledminus\ominus
+\_let\circledtimes\otimes
+\_let\circledslash\oslash
+\_let\circleddot\odot
+
+ \_doc -----------------------------
+ The \`\not` macro is re-defined to be mote inteligent than in plain
+ \TeX/. The macro follows this rule:
+ \begtt
+ \not< becomes \_nless
+ \not> becomes \_ngtr
+ if \_notXXX is defined, \not\XXX becomes \_notXXX;
+ if \_nXXX is defined, \not\XXX becomes \_nXXX;
+ otherwise, \not\XXX is done in the usual way.
+ \endtt
+ \_cod -----------------------------
+
+\_mathchardef \_notchar "3236
+
+\_protected\_def \_not#1{%
+ \_ifx #1<\_nless \_else
+ \_ifx #1>\_ngtr \_else
+ \_edef\_tmpn{\_csstring#1}%
+ \_ifcsname _not\_tmpn\_endcsname \_csname _not\_tmpn\_endcsname
+ \_else \_ifcsname _n\_tmpn\_endcsname \_csname _n\_tmpn\_endcsname
+ \_else \_mathrel{\_mathord{\_notchar}\_mathord{#1}}%
+ \_fi \_fi \_fi \_fi}
+\_private
+ \nleq \ngeq \nless \ngtr \nprec \nsucc \nleqslant \ngeqslant \npreceq
+ \nsucceq \nleqq \ngeqq \nsim \ncong \nsubseteqq \nsupseteqq \nsubseteq
+ \nsupseteq \nparallel \nmid \nshortmid \nshortparallel \nvdash \nVdash
+ \nvDash \nVDash \ntrianglerighteq \ntrianglelefteq \ntriangleleft
+ \ntriangleright \nleftarrow \nrightarrow \nLeftarrow \nRightarrow
+ \nLeftrightarrow \nleftrightarrow \nexists ;
+\_public \not ;
+
+ \_doc -----------------------------
+ \`\mathstyles``{<math list>}`
+ behaves like `{<math list>}`, but you can use following commands in the
+ `<math list>`:
+ \begitems
+ * \`\currstyle` which expands to `\displaystyle`, `\textstyle`,
+ `\scriptstyle` or `\scriptscriptstyle` depending on the current math style
+ when \^`\mathstyles` was opened.
+ * `\dobystyle{<D>}{<T>}{<S>}{<SS>}` is expandable macro. It expands to
+ `<D>`, `<T>`, `<S>` or `<SS>` depending on the current math style
+ when \^`\mathstyles` was opened.
+ * The value of the \`\stylenum` is 0, 1, 2 or 3
+ depending on the current math style when \^`\mathstyles` was opened.
+ \enditems
+ Example of usage of \^`\mathstyles`:
+ `\def\mathframe#1{\mathstyles{\frame{$\currstyle#1$}}}`.
+ \_cod -----------------------------
+
+\_newcount\_stylenum
+\_def\_mathstyles#1{{\_mathchoice{\_stylenum0 #1}{\_stylenum1 #1}%
+ {\_stylenum2 #1}{\_stylenum1 #1}}}
+\_def\_dobystyle#1#2#3#4{\_ifcase\_stylenum#1\_or#2\_or#3\_or#4\_fi}
+\_def\_currstyle{\dobystyle\_displaystyle\_textstyle\_scriptstyle\_scriptscriptstyle}
+\_public \mathstyles \dobystyle \currstyle \stylenum ;
+
+ \_doc -----------------------------
+ The \`\mathbox``{<text>}` macro is copied from OPmac trick 078.
+ It behaves like `\hbox{<text>}` but the `<text>` is scaled to smaller
+ size if it is used in scriptstye or scriptscript style.
+ \_cod -----------------------------
+
+\_def\_mathbox#1{{\_mathstyles{\_hbox{%
+ \_ifnum\_stylenum<2 \_everymath{\_currstyle}%
+ \_else \_typoscale[\_dobystyle{}{}{700}{500}/]\_fi #1}}}%
+}
+\_public \mathbox ;
+
+\_endcode %---------------------------------------------------
+
+2020-04-27 \mathstyles introduced
+2020-03-14 implemented
diff --git a/macros/luatex/optex/base/math-preload.opm b/macros/luatex/optex/base/math-preload.opm
new file mode 100644
index 0000000000..0b8ffeebab
--- /dev/null
+++ b/macros/luatex/optex/base/math-preload.opm
@@ -0,0 +1,221 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \normalmath {Math fonts CM + AMS preloaded <2020-05-06>} % preloaded in format
+
+ \_doc ------------------------------
+ We have two math macros \`\normalmath` for normal shape of all math
+ symbols and \`\boldmath` for bold shape of all math symbos. The second one
+ can be used in bold titles, for example.
+ These macros load all fonts from all given math font families.
+ \_cod ------------------------------
+
+\_def\_normalmath{%
+ \_loadmathfamily 0 cmr % CM Roman
+ \_loadmathfamily 1 cmmi % CM Math Italic
+ \_loadmathfamily 2 cmsy % CM Standard symbols
+ \_loadmathfamily 3 cmex % CM extra symbols
+ \_loadmathfamily 4 msam % AMS symbols A
+ \_loadmathfamily 5 msbm % AMS symbols B
+ \_loadmathfamily 6 rsfs % script
+ \_loadmathfamily 7 eufm % fractur
+ \_loadmathfamily 8 bfsans % sans serif bold
+ \_loadmathfamily 9 bisans % sans serif bold slanted (for vectors)
+% \_setmathfamily 10 \_tentt
+% \_setmathfamily 11 \_tenit
+ \_setmathdimens
+}
+\_def\_boldmath{%
+ \_loadmathfamily 0 cmbx % CM Roman Bold Extended
+ \_loadmathfamily 1 cmmib % CM Math Italic Bold
+ \_loadmathfamily 2 cmbsy % CM Standard symbols Bold
+ \_loadmathfamily 3 cmexb % CM extra symbols Bold
+ \_loadmathfamily 4 msam % AMS symbols A (bold not available?)
+ \_loadmathfamily 5 msbm % AMS symbols B (bold not available?)
+ \_loadmathfamily 6 rsfs % script (bold not available?)
+ \_loadmathfamily 7 eufb % fractur bold
+ \_loadmathfamily 8 bbfsans % sans serif extra bold
+ \_loadmathfamily 9 bbisans % sans serif extra bold slanted (for vectors)
+% \_setmathfamily 10 \_tentt
+% \_setmathfamily 11 \_tenbi
+ \_setmathdimens
+}
+\_count18=9 % families declared by \newfam are 12, 13, ...
+
+\_def \normalmath {\_normalmath} \_def\boldmath {\_boldmath}
+
+ \_doc -----------------------------
+ The classical math family selectors
+ \`\mit`, \^`\cal`, \^`\bbchar`, \^`\frak` and \^`\script`
+ are defined here.
+ The \^`\rm`, \^`\bf`, \^`\it`, \^`\bi` and \^`\tt` does two things:
+ they are variant selectors for text fonts and math family selectors for math fonts.
+ The idea was adapted from plain \TeX/.\nl
+ These macros are redefined when `unimat-codes.opm` is loaded,
+ see the section~\ref[unimath-codes].
+ \_cod -----------------------------
+
+\_chardef\_bffam = 8
+\_chardef\_bifam = 9
+%\_chardef\_ttfam = 10
+%\_chardef\_itfam = 11
+
+\_protected\_def \_rm {\_tryloadrm \_tenrm \_fam0 }
+\_protected\_def \_bf {\_tryloadbf \_tenbf \_fam\_bffam}
+\_protected\_def \_it {\_tryloadit \_tenit \_fam1 }
+\_protected\_def \_bi {\_tryloadbi \_tenbi \_fam\_bifam}
+\_protected\_def \_tt {\_tryloadtt \_tentt}
+
+\_protected\_def \_mit {\_fam1 }
+\_protected\_def \_cal {\_fam2 }
+\_protected\_def \_bbchar {\_fam5 } % double stroked letters
+\_protected\_def \_frak {\_fam7 } % fraktur
+\_protected\_def \_script {\_fam6 } % more extensive script than \cal
+
+\_public \rm \bf \it \bi \tt \mit \cal \bbchar \frak \script ;
+
+ \_doc -----------------------------
+ The optical sizes of Computer Modern fonts, AMS and other fonts
+ are declared here.
+ \_cod -----------------------------
+
+%% CM math fonts, optical sizes:
+
+\_regtfm cmmi 0 cmmi5 5.5 cmmi6 6.5 cmmi7 7.5 cmmi8 8.5 cmmi9 9.5
+ cmmi10 11.1 cmmi12 *
+\_regtfm cmmib 0 cmmib5 5.5 cmmib6 6.5 cmmib7 7.5 cmmib8 8.5 cmmib9 9.5 cmmib10 *
+\_regtfm cmtex 0 cstex8 8.5 cstex9 9.5 cstex10 *
+\_regtfm cmsy 0 cmsy5 5.5 cmsy6 6.5 cmsy7 7.5 cmsy8 8.5 cmsy9 9.5 cmsy10 *
+\_regtfm cmbsy 0 cmbsy5 5.5 cmbsy6 6.5 cmbsy7 7.5 cmbsy8 8.5 cmbsy9 9.5 cmbsy10 *
+\_regtfm cmex 0 cmex7 7.5 cmex8 8.5 cmex9 9.5 cmex10 *
+\_regtfm cmexb 0 cmexb10 *
+
+\_regtfm cmr 0 cmr5 5.5 cmr6 6.5 cmr7 7.5 cmr8 8.5 cmr9 9.5
+ cmr10 11.1 cmr12 15 cmr17 *
+\_regtfm cmbx 0 cmbx5 5.5 cmbx6 6.5 cmbx7 7.5 cmbx8 8.5 cmbx9 9.5
+ cmbx10 11.1 cmbx12 *
+\_regtfm cmti 0 cmti7 7.5 cmti8 8.5 cmti9 9.5 cmti10 11.1 cmti12 *
+\_regtfm cmtt 0 cmtt10 11.1 cmtt12 *
+
+%% AMS math fonts, optical sizes:
+
+\_regtfm msam 0 msam5 5.5 msam6 6.5 msam7 7.5 msam8 8.5 msam9 9.5 msam10 *
+\_regtfm msbm 0 msbm5 5.5 msbm6 6.5 msbm7 7.5 msbm8 8.5 msbm9 9.5 msbm10 *
+
+%% fraktur, rsfs, optical sizes:
+
+\_regtfm eufm 0 eufm5 5.5 eufm6 6.5 eufm7 7.5 eufm8 8.5 eufm9 9.5 eufm10 *
+\_regtfm eufb 0 eufb5 5.5 eufb6 6.5 eufb7 7.5 eufb8 8.5 eufb9 9.5 eufb10 *
+\_regtfm rsfs 0 rsfs5 6 rsfs7 8.5 rsfs10 *
+
+%% bf and bi sansserif math alternatives:
+
+\_regtfm bfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800
+ 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 *
+\_regtfm bisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800
+ 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 *
+\_regtfm bbfsans 0 ecsx0500 5.5 ecsx0600 6.5 ecsx0700 7.5 ecsx0800
+ 8.5 ecsx0900 9.5 ecsx1000 11.1 ecsx1200 *
+\_regtfm bbisans 0 ecso0500 5.5 ecso0600 6.5 ecso0700 7.5 ecso0800
+ 8.5 ecso0900 9.5 ecso1000 11.1 ecso1200 *
+
+ \_doc -----------------------------
+ \`\_loadmathfamily` `<number> <font>` loads one math family, i.\,e.\
+ the triple of fonts in the text size, script size and script-script size.
+ The `<font>` is `<font-id>` used in the `\_regtfm` parameter or
+ the real TFM name. The family is saved as `\fam<number>`.
+ \nl
+ \`\_setmathfamily` `<number> \<font-switch>` loads one math family
+ like `\_loadmathfamily` does it. But the second parameter is a
+ `\<font-switch>` declared previously by the `\font` primitive.
+ \nl
+ The font family is loaded at \`\_sizemtext`, \`\_sizemscript` and
+ \`\_sizemsscript` sizes. These sizes are set by the
+ \`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` macro.
+ These parameters are given in the \`\ptmunit` unit, it is set to
+ 1\`\ptunit` and it is set to 1\,pt by defaut.
+ \nl
+ \`\_corrmsizes` should be used in the \^`\normalmath` and \^`\boldmath`
+ macros if you need a size correction when a selected math family is
+ loaded. It is similar as ex-height correction but for math fonts.
+ \_cod -----------------------------
+
+\_def\_corrmsizes{\_ptmunit=1\_ptunit\_relax} % for corrections of sizes in diferent fomts
+
+\_def\_loadmathfamily #1 #2 {\_chardef\_tmp#1\_corrmsizes
+ \_edef\_optsizesave{\_the\_optsize}%
+ \_optsize=\_sizemtext \_font\_mF=\_whichtfm{#2} at\_optsize \_textfont#1=\_mF
+ \_optsize=\_sizemscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptfont#1=\_mF
+ \_optsize=\_sizemsscript \_font\_mF=\_whichtfm{#2} at\_optsize \_scriptscriptfont#1=\_mF
+ \_optsize=\_optsizesave \_relax
+}
+\_def\_setmathfamily #1 #2{\_let\_mF=#2\_chardef\_tmp#1\_corrmsizes
+ \_edef\_optsizesave{\_the\_optsize}%
+ \_optsize=\_sizemtext \_fontlet#2=#2 at\_optsize \_textfont#1=#2%
+ \_optsize=\_sizemscript \_fontlet#2=#2 at\_optsize \_scriptfont#1=#2%
+ \_optsize=\_sizemsscript \_fontlet#2=#2 at\_optsize \_scriptscriptfont#1=#2%
+ \_optsize=\_optsizesave \_let#2=\_mF
+}
+\_def\_setmathsizes[#1/#2/#3]{%
+ \_def\_sizemtext{#1\_ptmunit}\_def\_sizemscript{#2\_ptmunit}%
+ \_def\_sizemsscript{#3\_ptmunit}%
+}
+\_newdimen\_ptunit \_ptunit=1pt
+\_newdimen\_ptmunit \_ptmunit=1\_ptunit
+
+\_public \setmathsizes \ptunit \ptmunit ;
+
+ \_doc -----------------------------
+ The \`\_setmathdimens` macro is used in \^`\normalmath` or \^`\boldmath`
+ macros. It makes math dimensions dependent on the font size (plain \TeX/ sets
+ them only for 10\,pt typesetting). The `\skewchar` of some math families are
+ set here too.
+ \_cod -----------------------------
+
+\_def\_setmathdimens{% PlainTeX sets these dimens for 10pt size only:
+ \_delimitershortfall=0.5\_fontdimen6\_textfont3
+ \_nulldelimiterspace=0.12\_fontdimen6\_textfont3
+ \_scriptspace=0.05\_fontdimen6\_textfont3
+ \_skewchar\_textfont1=127 \_skewchar\_scriptfont1=127
+ \_skewchar\_scriptscriptfont1=127
+ \_skewchar\_textfont2=48 \_skewchar\_scriptfont2=48
+ \_skewchar\_scriptscriptfont2=48
+ \_skewchar\_textfont6=127 \_skewchar\_scriptfont6=127
+ \_skewchar\_scriptscriptfont6=127
+}
+
+ \_doc -----------------------------
+ Finaly, we preload a math fonts colleciton in [10/7/5] sizes
+ when the format is generated. This is done when
+ `\_suppressfontnotfounderror=1` because we need not errors when format is
+ generated. Maybe there are not all fonts in the \TeX/ distribution
+ installed.
+ \_cod -----------------------------
+
+\_suppressfontnotfounderror=1
+\_setmathsizes[10/7/5]\_normalmath
+\_suppressfontnotfounderror=0
+
+
+\_endcode %---------------------------------------------------
+
+The Computer Modern and AMS fonts are preloaded here in classical math-fam
+concept, where each math family includes three fonts with max 256 characters
+(typically 128 characters).
+
+On the other hand, when \^`\fontfam` macro is used in the document then text
+font family and appropriate math family is loaded with Unicoded fonts, i.e.
+Unicoded-math is used. It re-defines all settings given here.
+
+The general rule of usage the math fonts in different sizes in \OpTeX/ says: set three
+sizes by the macro
+\^`\setmathsizes` `[<text-size>/<script-size>/<scriptscript-size>]` and then
+load all math fonts in given sizes by \^`\normalmath` or \^`\boldmath` macros.
+For example
+\begtt
+\setmathsizes[12/8.4/6]\normalmath ... math typesetting at 12 pt is ready.
+\endtt
+
+\_endinput
+
+2020-05-06: \itfam, \ttfam removed, (Unicode math preferred)
+2020-04-14: \skewchar\fam6 added
diff --git a/macros/luatex/optex/base/math-unicode.opm b/macros/luatex/optex/base/math-unicode.opm
new file mode 100644
index 0000000000..f35b8652e0
--- /dev/null
+++ b/macros/luatex/optex/base/math-unicode.opm
@@ -0,0 +1,236 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \loadmath {Unicode Math fonts <2020-02-25>} % preloaded in format
+
+ \_doc -----------------------------
+ \`\loadmath` `{<Unicode-math font>}` loads given font. It does:
+ \begitems
+ * define \`\_unimathfont` as `<Unicode-math font>`,
+ * redefine `\normalmath` and `\boldmath` macros to their Unicode counterparts,
+ * load the `\_unimathfont` by `\normalmath`,
+ * print information about loaded font on the terminal,
+ * redefine all encoding dependent setting by `\input unimath-codes.opm`,
+ * protect new loading by setting \`\_ifmathloading` to false.
+ \enditems
+ \`\noloadmath` disallows Unicode-math loading by \`\_mathloadingfalse`.\nl
+ \`\doloadmath` allows Unicode-math loading by \`\_mathloadingtrue`.
+ \_cod -----------------------------
+
+\_newifi \_ifmathloading \_mathloadingtrue
+
+\_def\_noloadmath{\_mathloadingfalse}
+\_def\_doloadmath{\_mathloadingtrue}
+
+\_def\_loadmath#1{%
+ \_ifmathloading
+ \_initunifonts
+ \_isfont{#1}\_iffalse
+ \_opwarning{Math font "#1" not found, skipped...}%
+ \_else
+ \_def\_unimathfont{#1}%
+ \_let\_normalmath = \_normalunimath \_let\_boldmath = \_boldunimath
+ \_normalmath
+ \_wterm {MATH-FONT: "#1" -- unicode math prepared.}%
+ \_opinput {unimath-codes.opm}%
+ \_mathloadingfalse
+ \_fi\_fi}
+
+\_public \loadmath \noloadmath \doloadmath ;
+
+ \_doc -----------------------------
+ \`\loadboldmath` `{<bold-font>} \to {<normal-font>}`
+ defines \`\_unimathboldfont` as `<bold-font>` only if `\_unimathfont` is
+ defined as `<normal-font>`. It is used when `\boldmath` macro is run.
+ When no `\_unimathboldfont` is defined then the `\boldmath` macro
+ use \"fake bold" generated by `embolden` \LuaTeX/ font feature.
+ \_cod -----------------------------
+
+\_def\_loadboldmath#1#2\to #3{%
+ \_def\_tmp{#3}\_ifx\_unimathfont\_tmp % do work only if #3 is loaded as normal Math
+ \_isfont"#1"\_iffalse
+ \_opwarning{Bold-Math font "#1" not found, skipped...}
+ \_else
+ \_def\_unimathboldfont{#1}%
+ \_wterm {MATH-FONT: "#1" -- unicode math bold prepared.}%
+ \_fi\_fi}
+
+\_public \loadboldmath ;
+
+ \_doc -----------------------------
+ The Unicode version of the \^`\normalmath` and \^`\boldmath` macros
+ are defined here as \`\_normalunimath` and \`\_boldunimath` macros.
+ They are using \`\_setunimathdimens` in similar sense as
+ \^`\_setmathdimens`.
+ \_cod -----------------------------
+
+\_def\_normalunimath{%
+ \_loadumathfamily 1 {\_unimathfont}{} % Base font
+ \_loadmathfamily 4 rsfs % script
+ \_setunimathdimens
+}%
+\_def\_boldunimath{%
+ \_ifx\_unimathboldfont \_undefined
+ \_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Base faked bold
+ \_else
+ \_loadumathfamily 1 {\_unimathboldfont}{} % Base real bold font
+ \_fi
+ \_loadmathfamily 4 rsfs % script
+ \_setunimathdimens
+}%
+\_def\_setunimathdimens{% PlainTeX sets these dimens for 10pt size only:
+ \_delimitershortfall=0.5\_fontdimen6\_textfont3
+ \_nulldelimiterspace=0.12\_fontdimen6\_textfont3
+ \_scriptspace=0.05\_fontdimen6\_textfont3
+}
+
+ \_doc -----------------------------
+ \`\_loadumathfamily` `<number> {<font>}{<font features>}`
+ loads the given Unicode-math fonts in three sizes given by the
+ \^`\setmathsizes` macro and sets it as the math family `<number>`.
+ The `<font features>` are added to the default
+ \`\_mfontfeatures` and to the size dependent features `+ssty=0`
+ if script size is asked or `+ssty=1` if scriptscriptsize is asked.
+ If the fath family 1 is loaded then the family 2 and 3 is set by the same
+ font because \TeX/ needs to read dimension information about generating
+ math formulae from these three math families. All information needed by
+ \TeX/ is collected in single Unicode-math font.
+ \_cod -----------------------------
+
+\_def\_umathname#1#2{"#1:\_mfontfeatures#2"}
+\_def\_mfontfeatures{mode=base;script=math;}
+
+\_def\_loadumathfamily #1 #2#3 {%
+ \_edef\_optsizesave{\_the\_optsize}%
+ \_optsize=\_sizemtext \_font\_mF=\_umathname{#2}{#3} at\_optsize \_textfont#1=\_mF
+ \_ifnum#1=1 \_textfont2=\_mF \_textfont3=\_mF \_fi
+ \_optsize=\_sizemscript \_font\_mF=\_umathname{#2}{+ssty=0;#3} at\_optsize \_scriptfont#1=\_mF
+ \_ifnum#1=1 \_scriptfont2=\_mF \_scriptfont3=\_mF \_fi
+ \_optsize=\_sizemsscript \_font\_mF=\_umathname{#2}{+ssty=1;#3} at\_optsize\_scriptscriptfont#1=\_mF
+ \_ifnum#1=1 \_scriptscriptfont2=\_mF \_scriptscriptfont3=\_mF \_fi
+ \_optsize=\_optsizesave \_relax
+}
+
+ \_doc -----------------------------
+ Unicode math font includes all typical math alphabets together, user needs not to
+ load more \TeX/ math families. These math aphabets are encoded by
+ different parts of Unicode table. We need auxiliary macros for setting
+ mathcodes by selected math alphabet.
+ \nl
+ \`\_umathrange` `{<from->-<to>}\<first>` sets `\Umathcode`s
+ of the characters in the interval `<from>-<to>` to `\<first>`,
+ `\<first>+1`, `\<first>+2`
+ etc., but \`\_umathcharholes` are skipped
+ (`\_umathcharholes` are parts of the Unicode table not designed for math
+ alphabets but they causes that the math alphabets are
+ not continuously spread out in the table; I mean that the
+ designers were under the influence of drugs when they created
+ this part of the Unicode table).
+ The `<from>-<to>` clause includes normal letters like `A-Z`.
+ \nl
+ \`\_umahrangegreek` `\<first>` is the same as
+ `\_umathrange {<alpha>-<omega>}\<first>`.
+ \nl
+ \`\_umahrangeGREEK` `\<first>` is the same as
+ `\_umathrange {<Alpha>-<Omega>}\<first>`.
+ \nl
+ \`\_greekdef` `<control sequences> \_relax` defines each control sequence
+ as a normal character with codes `\_umathnumB`, `\_umathnumB+1`,
+ `\_umathnumB+2` etc. It is used for redefinig the contol sequences for
+ math Greek `\alpha`, `\beta`, `\gamma` etc.
+ \_cod -----------------------------
+
+\_newcount\_umathnumA \_newcount\_umathnumB
+
+\_def\_umathcorr#1#2{\_ea#1\_ea{\_the#2}}
+\_def\_umathprepare#1{\_def\_umathscanholes##1[#1]##2##3\_relax{##2}}
+\_def\_umathvalue#1{\_ea\_umathscanholes\_umathcharholes[#1]{#1}\_relax}
+
+\_def\_umathcharholes{% holes in math alphabets:
+ [119893]{"210E}[119965]{"212C}[119968]{"2130}[119969]{"2131}%
+ [119971]{"210B}[119972]{"2110}[119975]{"2112}[119976]{"2133}[119981]{"211B}%
+ [119994]{"212F}[119996]{"210A}[120004]{"2134}%
+ [120070]{"212D}[120075]{"210C}[120076]{"2111}[120085]{"211C}[120093]{"2128}%
+ [120122]{"2102}[120127]{"210D}[120133]{"2115}[120135]{"2119}
+ [120136]{"211A}[120137]{"211D}[120145]{"2124}%
+}
+\_def\_umathrange#1#2{\_umathnumB=#2\_relax \_umathrangeA#1}
+\_def\_umathrangeA#1-#2{\_umathnumA=`#1\_relax
+ \_loop
+ \_umathcorr\_umathprepare\_umathnumB
+ \_Umathcode \_umathnumA = 7 1 \_umathcorr\_umathvalue{\_umathnumB}
+ \_ifnum\_umathnumA<`#2\_relax
+ \_advance\_umathnumA by1 \_advance\_umathnumB by1
+ \_repeat
+}
+\_def\_umathrangeGREEK{\_begingroup
+ \_lccode`A="0391 \_lccode`Z="03A9
+ \_lowercase{\_endgroup \_umathrange{A-Z}}}
+\_def\_umathrangegreek{\_begingroup
+ \_lccode`A="03B1 \_lccode`Z="03D6
+ \_lowercase{\_endgroup \_umathrange{A-Z}}}
+\_def\_greekdef#1{\_ifx#1\_relax \_else
+ \_begingroup \_lccode`X=\_umathnumB \_lowercase{\_endgroup \_def#1{X}}%
+ \_advance\_umathnumB by 1
+ \_expandafter\_greekdef \_fi
+}
+
+\_endcode
+
+
+The \^`\loadmath` `{<Unicode-math font>}` macro loads math fonts and
+redefines all default math-codes using `\input unimath-codes.opm`.
+If Unicode-math font is loaded then \^`\_mathloadingfalse`
+is set, so new UnicodeMath font isn't loaded until \^`\doloadmath` is used.
+
+\^`\loadboldmath` `{<bold-font>} \to {<normal-font>}` loads bold variant only
+if `<normal-font>` was sucessully loaded by the `\loadmath`. For example:
+
+\begtt
+\loadmath {[xitsmath-regular]}
+\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]}
+\endtt
+
+You can combine more fonts, if you register them to another
+math families (5, 6, 7, etc.) in the `\normalmath` macro.
+
+The default value of `\normalmath` shows a combination of base Unicode Math
+font with 8bit Math font at family 4. See definition of `\script` macro where
+`\fam4` is used. Of course, we need to set `\rmvariables` too, because 8bit font
+accepts only codes less than 255.
+
+See \url{http://tex.stackexchange.com/questions/308749/} for more technical details.
+
+The \^`\loadmath` macro was succesfully tested on:
+
+\begtt
+\loadmath{[XITSMath-Regular]} ... XITS MATH
+\loadmath{[latinmodern-math]} ... Latin Modern Math
+\loadmath{[texgyretermes-math]} ... TeXGyre Termes Math
+\loadmath{[texgyrebonum-math]} ... TeXGyre Bonum Math
+\loadmath{[texgyrepagella-math]} ... TeXGyre Pagella Math
+\loadmath{[texgyreschola-math]} ... TeXGyre Schola Math
+\loadmath{[texgyredejavu-math]} ... TeXGyre DeJaVu Math
+\loadmath{[LibertinusMath-Regular]} ... Libertinus Math
+\loadmath{[FiraMath-Regular]} ... Fira Math
+\loadmath{[Asana-Math]} ... Asana Math
+\endtt
+
+\secc Unicode-math macros preloaded in the format
+
+\printdoc math-unicode.opm
+
+\secc[unimath-codes] Macros and codes set when \code{\\loadmatfont} is processed
+
+The file `unimath-codes.opm` is loaded when the \^`\loadmath` is used. The
+macros here redefines globally all encoding dependent settings declared in
+the section~\ref[math-macros].
+
+\printdoc unimath-codes.opm
+\printdoctail unimath-codes.opm
+
+
+
+\_endinput
+
+2020-04-15 \_setmathdimens -> \_setuniathdimens
+2020-02-25 implemented
diff --git a/macros/luatex/optex/base/mathclass.opm b/macros/luatex/optex/base/mathclass.opm
new file mode 100644
index 0000000000..458431abca
--- /dev/null
+++ b/macros/luatex/optex/base/mathclass.opm
@@ -0,0 +1,1591 @@
+# File: MathClass.txt
+# Revision: 15
+# Date: 2017-06-01, 12:35:00 GMT
+#
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr25/
+#
+# ------------------------------------------------
+# This file is a classification of characters based on their usage in
+# mathematical notation.
+#
+# While the contents of this file represent the best information
+# available to the authors and the Unicode Technical Committee as
+# of the date referenced above, it is likely that the information
+# in this file will change from time to time.
+#
+# This file is *NOT* formally part of the Unicode Character Database
+# at this time.
+#
+# The character encoding of this plain-text file is UTF-8.
+#
+# The data consists of 2 fields.
+#
+# 1: code point or range
+#
+# 2: class, one of:
+#
+# N - Normal - includes all digits and symbols requiring only one form
+# A - Alphabetic
+# B - Binary
+# C - Closing - usually paired with opening delimiter
+# D - Diacritic
+# F - Fence - unpaired delimiter (often used as opening or closing)
+# G - Glyph_Part - piece of large operator
+# L - Large - n-ary or large operator, often takes limits
+# O - Opening - usually paired with closing delimiter
+# P - Punctuation
+# R - Relation - includes arrows
+# S - Space
+# U - Unary - operators that are only unary
+# V - Vary - operators that can be unary or binary depending on context
+# X - Special - characters not covered by other classes
+#
+# Fields are delimited by ';'. Spaces adjacent to the delimiter or the '#' are
+# not significant. Future versions of this file may use different amounts of
+# whitespace.
+#
+# Some character positions in the Mathematical Alphanumeric Symbols block are
+# reserved and have been mapped to the Letterlike Symbols block in Unicode.
+# This is indicated in 24 special purpose comments.
+#
+# The character repertoire of this revision is the repertoire of Unicode
+# Version 9.0. For more information see Revision 15 or later of UTR #25.
+# ------------------------------------------------
+
+0020;S
+0021;N
+0023;N
+0024;N
+0025;N
+0026;N
+0028;O
+0029;C
+002A;N
+002B;V
+002C;P
+002D;N
+002E;P
+002F;B
+0030..0039;N
+003A;P
+003B;P
+003C;R
+003D;R
+003E;R
+003F;P
+0040;N
+0041..005A;A
+005B;O
+005C;B
+005D;C
+005E;N
+005F;N
+0060;D
+0061..007A;A
+007B;O
+007C;F
+007D;C
+007E;N
+00A0;S
+00A1;P
+00A2;N
+00A3;N
+00A4;N
+00A5;N
+00A6;N
+00A7;N
+00A8;D
+00AC;U
+00AF;D
+00B0;N
+00B1;V
+00B2;N
+00B3;N
+00B4;N
+00B5;N
+00B6;N
+00B7;B
+00B9;N
+00BC;N
+00BD;N
+00BE;N
+00BF;P
+00D7;B
+00F7;B
+0131;A
+0237;A
+02C6;D
+02C7;D
+02D8;D
+02D9;D
+02DA;D
+02DC;D
+0300;D
+0301;D
+0302;D
+0303;D
+0304;D
+0305;D
+0306;D
+0307;D
+0308;D
+030A;D
+030C;D
+0311;D
+0323;D
+032C;D
+032D;D
+032E;D
+032F;D
+0330;D
+0331;D
+0332;D
+0333;D
+0338;D
+033A;D
+033F;D
+0346;D
+0391;A
+0392;A
+0393;A
+0394;A
+0395;A
+0396;A
+0397;A
+0398;A
+0399;A
+039A;A
+039B;A
+039C;A
+039D;A
+039E;A
+039F;A
+03A0;A
+03A1;A
+03A3;A
+03A4;A
+03A6;A
+03A7;A
+03A8;A
+03A9;A
+03B1;A
+03B2;A
+03B3;A
+03B4;A
+03B5;A
+03B6;A
+03B7;A
+03B8;A
+03B9;A
+03BA;A
+03BB;A
+03BC;A
+03BD;A
+03BE;A
+03BF;A
+03C0;A
+03C1;A
+03C3;A
+03C4;A
+03C5;A
+03C6;A
+03C7;A
+03C8;A
+03C9;A
+03D0;A
+03D1;A
+03D2;A
+03D5;A
+03D6;A
+03D8;N
+03D9;N
+03DA;A
+03DB;A
+03DC;A
+03DD;A
+03E0;A
+03E1;A
+03F0;A
+03F1;A
+03F4;A
+03F5;A
+03F6;N
+0428;A
+0606;L
+0607;L
+0608;A
+2000;S
+2001;S
+2002;S
+2003;S
+2004;S
+2005;S
+2006;S
+2007;S
+2009;S
+200A;S
+200B;S
+2010;P
+2012;P
+2013;P
+2014;P
+2016;F
+2020;R
+2021;R
+2022;B
+2026;N
+2032;N
+2033;N
+2034;N
+2035;N
+2036;N
+2037;N
+203B;N
+203C;N
+2040;B
+2044;B
+204E;B
+204F;R
+2050;R
+2051;N
+2052;N
+2057;N
+205F;S
+2061;B
+2062;B
+2063;P
+2064;X
+207A..207E;N
+208A..208E;N
+20D0;D
+20D1;D
+20D2;D
+20D3;X
+20D4;D
+20D5;D
+20D6;D
+20D7;D
+20D8;D
+20D9;D
+20DA;D
+20DB;D
+20DC;D
+20DD;D
+20DE;D
+20DF;D
+20E1;D
+20E4;D
+20E5;D
+20E6;D
+20E7;D
+20E8;D
+20E9;D
+20EA;D
+20EB;D
+20EC;D
+20ED;D
+20EE;D
+20EF;D
+2102;A
+2107;N
+210A;A
+210B;A
+210C;A
+210D;A
+210E;N
+210F;N
+2110;A
+2111;A
+2112;A
+2113;A
+2115;A
+2118;A
+2119;A
+211A;A
+211B;A
+211C;A
+211D;A
+2124;A
+2126;N
+2127;N
+2128;A
+2129;N
+212B;A
+212C;A
+212D;A
+212F;A
+2130;A
+2131;A
+2132;N
+2133;A
+2134;A
+2135;A
+2136;A
+2137;A
+2138;A
+213C;A
+213D;A
+213E;N
+213F;A
+2140;L
+2141;N
+2142;N
+2143;N
+2144;N
+2145;N
+2146;N
+2147;N
+2148;N
+2149;N
+214B;N
+2190..21B3;R
+21B6;R
+21B7;R
+21BA..21FF;R
+2200;U
+2201;U
+2202;N
+2203;U
+2204;U
+2205;N
+2206;U
+2207;U
+2208;R
+2209;R
+220A;R
+220B;R
+220C;R
+220D;R
+220E;N
+220F;L
+2210;L
+2211;L
+2212;V
+2213;V
+2214;B
+2215;B
+2216;B
+2217;B
+2218;B
+2219;B
+221A;L
+221B;L
+221C;L
+221D;R
+221E;N
+221F;N
+2220;N
+2221;N
+2222;N
+2223;R
+2224;R
+2225;R
+2226;R
+2227;B
+2228;B
+2229;B
+222A;B
+222B;L
+222C;L
+222D;L
+222E;L
+222F;L
+2230;L
+2231;L
+2232;L
+2233;L
+2234;R
+2235;R
+2236;R
+2237;R
+2238;B
+2239;R
+223A;R
+223B;R
+223C;R
+223D;R
+223E;B
+223F;N
+2240;B
+2241;R
+2242;R
+2243;R
+2244;R
+2245;R
+2246;R
+2247;R
+2248;R
+2249;R
+224A;R
+224B;R
+224C;R
+224D;R
+224E;R
+224F;R
+2250;R
+2251;R
+2252;R
+2253;R
+2254;R
+2255;R
+2256;R
+2257;R
+2258;R
+2259;R
+225A;R
+225B;R
+225C;R
+225D;R
+225E;R
+225F;R
+2260;R
+2261;R
+2262;R
+2263;R
+2264;R
+2265;R
+2266;R
+2267;R
+2268;R
+2269;R
+226A;R
+226B;R
+226C;R
+226D;R
+226E;R
+226F;R
+2270;R
+2271;R
+2272;R
+2273;R
+2274;R
+2275;R
+2276;R
+2277;R
+2278;R
+2279;R
+227A;R
+227B;R
+227C;R
+227D;R
+227E;R
+227F;R
+2280;R
+2281;R
+2282;R
+2283;R
+2284;R
+2285;R
+2286;R
+2287;R
+2288;R
+2289;R
+228A;R
+228B;R
+228C;B
+228D;B
+228E;B
+228F;R
+2290;R
+2291;R
+2292;R
+2293;B
+2294;B
+2295;B
+2296;B
+2297;B
+2298;B
+2299;B
+229A;B
+229B;B
+229C;B
+229D;B
+229E;B
+229F;B
+22A0;B
+22A1;B
+22A2;R
+22A3;R
+22A4;N
+22A5;R
+22A6;R
+22A7;R
+22A8;R
+22A9;R
+22AA;R
+22AB;R
+22AC;R
+22AD;R
+22AE;R
+22AF;R
+22B0;R
+22B1;R
+22B2;R
+22B3;R
+22B4;R
+22B5;R
+22B6;R
+22B7;R
+22B8;R
+22B9;B
+22BA;B
+22BB;B
+22BC;B
+22BD;B
+22BE;N
+22BF;N
+22C0;L
+22C1;L
+22C2;L
+22C3;L
+22C4;B
+22C5;B
+22C6;B
+22C7;B
+22C8;R
+22C9;B
+22CA;B
+22CB;B
+22CC;B
+22CD;R
+22CE;B
+22CF;B
+22D0;R
+22D1;R
+22D2;B
+22D3;B
+22D4;R
+22D5;R
+22D6;R
+22D7;R
+22D8;R
+22D9;R
+22DA;R
+22DB;R
+22DC;R
+22DD;R
+22DE;R
+22DF;R
+22E0;R
+22E1;R
+22E2;R
+22E3;R
+22E4;R
+22E5;R
+22E6;R
+22E7;R
+22E8;R
+22E9;R
+22EA;R
+22EB;R
+22EC;R
+22ED;R
+22EE;R
+22EF;R
+22F0;R
+22F1;R
+22F2;R
+22F3;R
+22F4;R
+22F5;R
+22F6;R
+22F7;R
+22F8;R
+22F9;R
+22FA;R
+22FB;R
+22FC;R
+22FD;R
+22FE;R
+22FF;R
+2300;N
+2302;N
+2305;B
+2306;B
+2308;O
+2309;C
+230A;O
+230B;C
+2310;N
+2311;N
+2319;N
+231C;O
+231D;C
+231E;O
+231F;C
+2320..2321;G
+2322;R
+2323;R
+#2329;O
+#232A;C
+2336;N
+233D;B
+233F;R
+237C;R
+2394;N
+239B..23AF;G
+23B0;R
+23B1;R
+23B2..23B3;G
+23B4;N
+23B5;N
+23B6;N
+23B7;G
+23D0;G
+23DC;N
+23DD;N
+23DE;N
+23DF;N
+23E0;N
+23E1;N
+23E2;N
+23E3;N
+23E4;N
+23E5;N
+23E6;N
+23E7;N
+24C8;N
+25A0;N
+25A1;N
+25AA;N
+25AB;N
+25AD;N
+25AE;N
+25AF;N
+25B0;N
+25B1;N
+25B2;B
+25B3;B
+25B4;B
+25B5;B
+25B6;B
+25B7;B
+25B8;B
+25B9;B
+25BC;B
+25BD;B
+25BE;B
+25BF;B
+25C0;B
+25C1;B
+25C2;B
+25C3;B
+25C4;B
+25C5;B
+25C6;N
+25C7;N
+25C8;N
+25C9;N
+25CA;B
+25CB;B
+25CE;N
+25CF;N
+25D0..25D3;N
+25D6;N
+25D7;N
+25E2;N
+25E3;N
+25E4;N
+25E5;N
+25E6;B
+25E7..25EA;N
+25EB;B
+25EC;B
+25EF;N
+25F8;B
+25F9;B
+25FA;B
+25FB;B
+25FC;B
+25FD;B
+25FE;B
+25FF;B
+2605;B
+2606;B
+2609;N
+260C;N
+263D;N
+263E;N
+263F;N
+2640;N
+2641;N
+2642;N
+2643;N
+2644;N
+2646;N
+2647;N
+2648;N
+2649;N
+2660;N
+2661;N
+2662;N
+2663;N
+2664;N
+2665;N
+2666;N
+2667;N
+2669;N
+266D;N
+266E;N
+266F;N
+2680;N
+2681;N
+2682;N
+2683;N
+2684;N
+2685;N
+2686;N
+2687;N
+2688;N
+2689;N
+26AA;N
+26AB;N
+26AC;N
+26B2;N
+2713;N
+2717;N
+2720;N
+272A;N
+2736;N
+2772;O
+2773;C
+27C0;N
+27C1;N
+27C2;R
+27C3;R
+27C4;R
+27C5;R
+27C6;R
+27C7;R
+27C8;R
+27C9;R
+27CA;R
+27CB;R
+27CC;L
+27CD;R
+27CE;B
+27CF;B
+27D0;N
+27D1;B
+27D2;R
+27D3;R
+27D4;R
+27D5;L
+27D6;L
+27D7;L
+27D8;L
+27D9;L
+27DA;R
+27DB;R
+27DC;R
+27DD;R
+27DE;R
+27DF;R
+27E0;B
+27E1;B
+27E2;B
+27E3;B
+27E4;B
+27E5;B
+27E6;O
+27E7;C
+27E8;O
+27E9;C
+27EA;O
+27EB;C
+27EC;O
+27ED;C
+27EE;O
+27EF;C
+27F0;R
+27F1;R
+27F2;R
+27F3;R
+27F4;R
+27F5;R
+27F6;R
+27F7;R
+27F8;R
+27F9;R
+27FA;R
+27FB;R
+27FC;R
+27FD;R
+27FE;R
+27FF;R
+2900;R
+2901;R
+2902;R
+2903;R
+2904;R
+2905;R
+2906;R
+2907;R
+2908;R
+2909;R
+290A;R
+290B;R
+290C;R
+290D;R
+290E;R
+290F;R
+2910;R
+2911;R
+2912;R
+2913;R
+2914;R
+2915;R
+2916;R
+2917;R
+2918;R
+2919;R
+291A;R
+291B;R
+291C;R
+291D;R
+291E;R
+291F;R
+2920;R
+2921;R
+2922;R
+2923;R
+2924;R
+2925;R
+2926;R
+2927;R
+2928;R
+2929;R
+292A;R
+292B;R
+292C;R
+292D;R
+292E;R
+292F;R
+2930;R
+2931;R
+2932;R
+2933;R
+2934;R
+2935;R
+2936;R
+2937;R
+2938;R
+2939;R
+293A;R
+293B;R
+293C;R
+293D;R
+293E;R
+293F;R
+2940;R
+2941;R
+2942;R
+2943;R
+2944;R
+2945;R
+2946;R
+2947;R
+2948;R
+2949;R
+294A;R
+294B;R
+294C;R
+294D;R
+294E;R
+294F;R
+2950;R
+2951;R
+2952;R
+2953;R
+2954;R
+2955;R
+2956;R
+2957;R
+2958;R
+2959;R
+295A;R
+295B;R
+295C;R
+295D;R
+295E;R
+295F;R
+2960;R
+2961;R
+2962;R
+2963;R
+2964;R
+2965;R
+2966;R
+2967;R
+2968;R
+2969;R
+296A;R
+296B;R
+296C;R
+296D;R
+296E;R
+296F;R
+2970;R
+2971;R
+2972;R
+2973;R
+2974;R
+2975;R
+2976;R
+2977;R
+2978;R
+2979;R
+297A;R
+297B;R
+297C;R
+297D;R
+297E;R
+297F;R
+2980;F
+2981;N
+2982;F
+2983;O
+2984;C
+2985;O
+2986;C
+2987;O
+2988;C
+2989;O
+298A;C
+298B;O
+298C;C
+298D;O
+298E;C
+298F;O
+2990;C
+2991;O
+2992;C
+2993;O
+2994;C
+2995;O
+2996;C
+2997;O
+2998;C
+2999;F
+299A;F
+299B;N
+299C;N
+299D;N
+299E;N
+299F;N
+29A0;N
+29A1;N
+29A2;N
+29A3;N
+29A4;N
+29A5;N
+29A6;N
+29A7;N
+29A8;N
+29A9;N
+29AA;N
+29AB;N
+29AC;N
+29AD;N
+29AE;N
+29AF;N
+29B0;N
+29B1;N
+29B2;N
+29B3;N
+29B4;N
+29B5;N
+29B6;B
+29B7;B
+29B8;B
+29B9;B
+29BA;N
+29BB;N
+29BC;N
+29BD;N
+29BE;N
+29BF;N
+29C0;B
+29C1;B
+29C2;N
+29C3;N
+29C4;B
+29C5;B
+29C6;B
+29C7;B
+29C8;B
+29C9;N
+29CA;N
+29CB;N
+29CC;N
+29CD;N
+29CE;R
+29CF;R
+29D0;R
+29D1;R
+29D2;R
+29D3;R
+29D4;R
+29D5;R
+29D6;B
+29D7;B
+29D8;O
+29D9;C
+29DA;O
+29DB;C
+29DC;N
+29DD;N
+29DE;N
+29DF;R
+29E0;N
+29E1;R
+29E2;B
+29E3;R
+29E4;R
+29E5;R
+29E6;R
+29E7;N
+29E8;N
+29E9;N
+29EA;N
+29EB;B
+29EC;N
+29ED;N
+29EE;N
+29EF;N
+29F0;N
+29F1;N
+29F2;N
+29F3;N
+29F4;R
+29F5;B
+29F6;B
+29F7;B
+29F8;L
+29F9;L
+29FA;B
+29FB;B
+29FC;O
+29FD;C
+29FE;B
+29FF;B
+2A00;L
+2A01;L
+2A02;L
+2A03;L
+2A04;L
+2A05;L
+2A06;L
+2A07;L
+2A08;L
+2A09;L
+2A0A;L
+2A0B;L
+2A0C;L
+2A0D;L
+2A0E;L
+2A0F;L
+2A10;L
+2A11;L
+2A12;L
+2A13;L
+2A14;L
+2A15;L
+2A16;L
+2A17;L
+2A18;L
+2A19;L
+2A1A;L
+2A1B;L
+2A1C;L
+2A1D;L
+2A1E;L
+2A1F;L
+2A20;L
+2A21;L
+2A22;B
+2A23;B
+2A24;B
+2A25;B
+2A26;B
+2A27;B
+2A28;B
+2A29;B
+2A2A;B
+2A2B;B
+2A2C;B
+2A2D;B
+2A2E;B
+2A2F;B
+2A30;B
+2A31;B
+2A32;B
+2A33;B
+2A34;B
+2A35;B
+2A36;B
+2A37;B
+2A38;B
+2A39;B
+2A3A;B
+2A3B;B
+2A3C;B
+2A3D;B
+2A3E;B
+2A3F;B
+2A40;B
+2A41;B
+2A42;B
+2A43;B
+2A44;B
+2A45;B
+2A46;B
+2A47;B
+2A48;B
+2A49;B
+2A4A;B
+2A4B;B
+2A4C;B
+2A4D;B
+2A4E;B
+2A4F;B
+2A50;B
+2A51;B
+2A52;B
+2A53;B
+2A54;B
+2A55;B
+2A56;B
+2A57;B
+2A58;B
+2A59;R
+2A5A;B
+2A5B;B
+2A5C;B
+2A5D;B
+2A5E;B
+2A5F;B
+2A60;B
+2A61;B
+2A62;B
+2A63;B
+2A64;B
+2A65;B
+2A66;R
+2A67;R
+2A68;R
+2A69;R
+2A6A;R
+2A6B;R
+2A6C;R
+2A6D;R
+2A6E;R
+2A6F;R
+2A70;R
+2A71;B
+2A72;B
+2A73;R
+2A74;R
+2A75;R
+2A76;R
+2A77;R
+2A78;R
+2A79;R
+2A7A;R
+2A7B;R
+2A7C;R
+2A7D;R
+2A7E;R
+2A7F;R
+2A80;R
+2A81;R
+2A82;R
+2A83;R
+2A84;R
+2A85;R
+2A86;R
+2A87;R
+2A88;R
+2A89;R
+2A8A;R
+2A8B;R
+2A8C;R
+2A8D;R
+2A8E;R
+2A8F;R
+2A90;R
+2A91;R
+2A92;R
+2A93;R
+2A94;R
+2A95;R
+2A96;R
+2A97;R
+2A98;R
+2A99;R
+2A9A;R
+2A9B;R
+2A9C;R
+2A9D;R
+2A9E;R
+2A9F;R
+2AA0;R
+2AA1;R
+2AA2;R
+2AA3;R
+2AA4;R
+2AA5;R
+2AA6;R
+2AA7;R
+2AA8;R
+2AA9;R
+2AAA;R
+2AAB;R
+2AAC;R
+2AAD;R
+2AAE;R
+2AAF;R
+2AB0;R
+2AB1;R
+2AB2;R
+2AB3;R
+2AB4;R
+2AB5;R
+2AB6;R
+2AB7;R
+2AB8;R
+2AB9;R
+2ABA;R
+2ABB;R
+2ABC;R
+2ABD;R
+2ABE;R
+2ABF;R
+2AC0;R
+2AC1;R
+2AC2;R
+2AC3;R
+2AC4;R
+2AC5;R
+2AC6;R
+2AC7;R
+2AC8;R
+2AC9;R
+2ACA;R
+2ACB;R
+2ACC;R
+2ACD;R
+2ACE;R
+2ACF;R
+2AD0;R
+2AD1;R
+2AD2;R
+2AD3;R
+2AD4;R
+2AD5;R
+2AD6;R
+2AD7;R
+2AD8;R
+2AD9;R
+2ADA;R
+2ADB;R
+2ADC;R
+2ADD;R
+2ADE;R
+2ADF;R
+2AE0;R
+2AE1;N
+2AE2;R
+2AE3;R
+2AE4;R
+2AE5;R
+2AE6;R
+2AE7;R
+2AE8;R
+2AE9;R
+2AEA;R
+2AEB;R
+2AEC;R
+2AED;R
+2AEE;R
+2AEF;R
+2AF0;R
+2AF1;N
+2AF2;R
+2AF3;R
+2AF4;B
+2AF5;B
+2AF6;B
+2AF7;R
+2AF8;R
+2AF9;R
+2AFA;R
+2AFB;B
+2AFC;L
+2AFD;B
+2AFE;B
+2AFF;L
+2B00..2B11;R
+2B12;N
+2B13;N
+2B14;N
+2B15;N
+2B16;N
+2B17;N
+2B18;N
+2B19;N
+2B1B..2B1F;N
+2B20;N
+2B21;N
+2B22;N
+2B23;N
+2B24..2B2F;N
+2B30..2B44;R
+2B45;R
+2B46;R
+2B47..2B4C;R
+2B50..2B54;N
+2B95;R
+2BC2..2BC8;N
+2BCA;N
+2BCB;N
+3008;X
+3009;X
+#3014;O
+#3015;C
+#3018;O
+#3019;C
+301A;X
+301B;X
+306E;N
+FB29;X
+FE00;D
+#deprecFE35;
+#deprecFE36;
+#deprecFE37;
+#deprecFE38;
+FE61..FE66;X
+FE68;X
+FF0B;X
+FF1C..FF1E;X
+FF3C;X
+FF3E;X
+FF5C;X
+FF5E;X
+FFE2;X
+FFE9..FFEC;X
+1D400..1D454;A
+#1D455=210E;N
+1D456..1D49B;A
+1D49C;A
+#1D49D=212C;A
+1D49E;A
+1D49F;A
+#1D4A0=2130;A
+#1D4A1=2131;A
+1D4A2;A
+#1D4A3=210B;A
+#1D4A4=2110;A
+1D4A5;A
+1D4A6;A
+#1D4A7=2112;A
+#1D4A8=2133;A
+1D4A9;A
+1D4AA;A
+1D4AB;A
+1D4AC;A
+#1D4AD=211B;A
+1D4AE;A
+1D4AF;A
+1D4B0;A
+1D4B1;A
+1D4B2;A
+1D4B3;A
+1D4B4;A
+1D4B5;A
+1D4B6;A
+1D4B7;A
+1D4B8;A
+1D4B9;A
+#1D4BA=212F;A
+1D4BB;A
+#1D4BC=210A;A
+1D4BD;A
+1D4BE;A
+1D4BF;A
+1D4C0;A
+1D4C1;A
+1D4C2;A
+1D4C3;A
+#1D4C4=2134;A
+1D4C5;A
+1D4C6;A
+1D4C7;A
+1D4C8;A
+1D4C9;A
+1D4CA;A
+1D4CB;A
+1D4CC;A
+1D4CD;A
+1D4CE;A
+1D4CF;A
+1D4D0..1D503;A
+1D504;A
+1D505;A
+#1D506=212D;A
+1D507;A
+1D508;A
+1D509;A
+1D50A;A
+#1D50B=210C;A
+#1D50C=2111;A
+1D50D;A
+1D50E;A
+1D50F;A
+1D510;A
+1D511;A
+1D512;A
+1D513;A
+1D514;A
+#1D515=211C;A
+1D516;A
+1D517;A
+1D518;A
+1D519;A
+1D51A;A
+1D51B;A
+1D51C;A
+#1D51D=2128;A
+1D51E;A
+1D51F;A
+1D520;A
+1D521;A
+1D522;A
+1D523;A
+1D524;A
+1D525;A
+1D526;A
+1D527;A
+1D528;A
+1D529;A
+1D52A;A
+1D52B;A
+1D52C;A
+1D52D;A
+1D52E;A
+1D52F;A
+1D530;A
+1D531;A
+1D532;A
+1D533;A
+1D534;A
+1D535;A
+1D536;A
+1D537;A
+1D538;A
+1D539;A
+#1D53A=2102;A
+1D53B;A
+1D53C;A
+1D53D;A
+1D53E;A
+#1D53F=210D;A
+1D540;A
+1D541;A
+1D542;A
+1D543;A
+1D544;A
+#1D545=2115;A
+1D546;A
+#1D547=2119;A
+#1D548=211A;A
+#1D549=211D;A
+1D54A;A
+1D54B;A
+1D54C;A
+1D54D;A
+1D54E;A
+1D54F;A
+1D550;A
+#1D551=2124;A
+1D552;A
+1D553;A
+1D554;A
+1D555;A
+1D556;A
+1D557;A
+1D558;A
+1D559;A
+1D55A;A
+1D55B;A
+1D55C;A
+1D55D;A
+1D55E;A
+1D55F;A
+1D560;A
+1D561;A
+1D562;A
+1D563;A
+1D564;A
+1D565;A
+1D566;A
+1D567;A
+1D568;A
+1D569;A
+1D56A;A
+1D56B;A
+1D56C..1D6A3;A
+1D6A4;A
+1D6A5;A
+1D6A8..1D7C9;A
+1D7CA;A
+1D7CB;A
+1D7CE..1D7FF;N
+1EE00..1EE03;A
+1EE05..1EE1F;A
+1EE21;A
+1EE22;A
+1EE24;A
+1EE27;A
+1EE29..1EE32;A
+1EE34..1EE37;A
+1EE39;A
+1EE3B;A
+1EE42;A
+1EE47;A
+1EE49;A
+1EE4B;A
+1EE4D..1EE4F;A
+1EE51;A
+1EE52;A
+1EE54;A
+1EE57;A
+1EE59;A
+1EE5B;A
+1EE5D;A
+1EE5F;A
+1EE61;A
+1EE62;A
+1EE64;A
+1EE67..1EE6A;A
+1EE6C..1EE72;A
+1EE74..1EE77;A
+1EE79..1EE7C;A
+1EE7E;A
+1EE80..1EE89;A
+1EE8B..1EE9B;A
+1EEA1..1EEA3;A
+1EEA5..1EEA9;A
+1EEAB..1EEBB;A
+1EEF0;L
+1EEF1;L
+1F784;N
+1F78C;N
+1F78D;N
+1F797..1F799;N
+1F79D..1F79F;N
+
+# EOF
diff --git a/macros/luatex/optex/base/more-macros.opm b/macros/luatex/optex/base/more-macros.opm
new file mode 100644
index 0000000000..a022375360
--- /dev/null
+++ b/macros/luatex/optex/base/more-macros.opm
@@ -0,0 +1,241 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \eoldef {OpTeX useful macos <2020-05-03>} % preloaded in format
+
+ \_doc -----------------------------
+ We define \`\opinput` `{<file name>}` macro which
+ does `\input {<file name>}` but catocodes are set to normal catcodes
+ (like \OpTeX/ initializes them) and the catodes setting is return back to
+ the current values when the file is read. You can use `\optinput`
+ in any situation inside the document and you will be sure that the file
+ is read correctly with correct catcode settings.
+
+ In order to achieve this, we declare \`\optexcatcodes` catcode table
+ and \`\plaintexcatocdes`. They save the commonly used catcode tables.
+ Note that `\catcodetable` is a part of \LuaTeX/ extension.
+ The catcodetable stack is implemented by \OpTeX/ macros.
+ The \`\setctable` `<catcode table>` pushes
+ current catcode table to the stack and activates catcodes from
+ the `<catcode table>`. The \`\restorectable` returns to the saved catocdes
+ from the catcode table stack. So, the `\opinput` macro can be implemented simply:
+ \_cod -----------------------------
+
+\_def\_opinput #1{\_setctable\_optexcatcodes \_input {#1}\_relax\_restorectable}
+
+\_newcatcodetable \_optexcatcodes
+\_newcatcodetable \_plaintexcatcodes
+
+\_public \optexcatcodes \plaintexcatcodes \opinput ;
+
+\_savecatcodetable\_optexcatcodes
+{\_catcode`_=8 \savecatcodetable\plaintexcatcodes}
+
+ \_doc -----------------------------
+ The implementation of the catcodetable stack follows.
+
+ The current catodes are
+ managed in the `\catcodetable0`. If the `\setctable` is used first (or at
+ the outer level of the stack), then the `\catcodetable0` is pushed to the
+ stack and the current table is re-set to the given `<catcode table>`.
+ The numbers of these tables are stacked to the \`\_ctablelist` macro.
+ The `\restorectable` reads the last saved catcode table number from the
+ `\_ctablelist` and uses it.
+ \_cod -----------------------------
+
+\_newcount\_currctable \_currctable=0
+\_catcodetable0
+
+\_def\_setctable#1{\_edef\_ctablelist{{\_the\_currctable}\_ctablelist}%
+ \_catcodetable#1\_relax \_currctable=#1\_relax
+}
+\_def\_restorectable{\_ea\_restorectableA\_ctablelist\_relax}
+\_def\_restorectableA#1#2\_relax{%
+ \_ifx^#2^\_opwarning
+ {You can't use \_noindent\restorectable without previous \_string\setctable}%
+ \_else \_def\_ctablelist{#2}\_catcodetable#1\_relax \_currctable=#1\_relax \_fi
+}
+\_def\_ctablelist{.}
+
+\_public \setctable \restorectable ;
+
+ \_doc -----------------------------
+ When a special macro is defined with different catcodes then
+ \`\normalcatcodes` can be used at the end of such definition.
+ The normal catcodes are restored.
+ The macro reads
+ catcodes from `\optecatodes` table and sets it to the main catcode table 0.
+ \_cod -----------------------------
+
+\_def\_normalcatcodes {\_catcodetable\_optexcatcodes \_savecatcodetable0 \_catcodetable0 }
+\_public \normalcatodes ;
+
+ \_doc -----------------------------
+ The \`\load` `[<filename-list>]` loads files specfied in
+ comma separated `<filename-list>`. The first space (after comma)
+ is ignored using the trick `#1#2,`: first parameter is unseparated.
+ The `\load` macro saves the information about loaded files by setting
+ `\_load:<filename>` as a defined macro.
+
+ If the \`\_afterload` macro is defined then it is run after `\_opinput`.
+ The catcode setting should be here. Note that catcode setting done in the
+ loaded file is forgotten after the `\opinput`.
+ \_cod -----------------------------
+
+\_def \_load [#1]{\_loadA #1,,,\_end}
+\_def \_loadA #1#2,{\_ifx,#1 \_ea \_loadE \_else \_loadB{#1#2}\_ea\_loadA\_fi}
+\_def \_loadB #1{%
+ \_ifcsname _load:#1\_endcsname \_else
+ \_isfile {#1.opm}\_iftrue \_opinput {#1.opm}\_else \_opinput {#1}\_fi
+ \_sxdef{_load:#1}{}%
+ \_trycs{_afterload}{}\_let\_afterload=\_undefined
+ \_fi
+}
+\_def \_loadE #1\_end{}
+\_public \load ;
+
+ \_doc -----------------------------
+ The declarator \`\optdef``\macro [<opt default>] <params>{<replacement text>}`
+ defines the `\macro` with the optional parameter followed by normal parameters
+ declared in `<params>`. The optional parameter must be used as the first
+ first parameter in brackets `[...]`. If it isn't used then <opt default>
+ is taken into account. The `<replacement text>` can use `\the\opt`
+ because optional parameter is saved to the \`\opt` tokens register.
+ Note the difference from \LaTeX/ concept where the optional parameter is
+ in `#1`. \OpTeX/ uses `#1` as the first normal parameter (if declared).
+
+ The \`\_nospaceafter` ignores the following optional space at expand
+ processor level using the negative `\romannumeral` trick.
+ \_cod -----------------------------
+
+\_def\_optdef#1[#2]{%
+ \_def#1{\_opt={#2}\_isnextchar[{\_cs{_oA:\_string#1}}{\_cs{_oB:\_string#1}}}%
+ \_sdef{_oA:\_string#1}[##1]{\_opt={##1}\_cs{_oB:\_string#1\_nospaceafter}}%
+ \_sdef{_oB:\_string#1\_nospaceafter}%
+}
+\_def\_nospaceafter#1{\_ea#1\_romannumeral-`\.}
+\_newtoks\_opt
+
+\_public \opt \optdef ;
+
+ \_doc -----------------------------
+ The declarator \`\eoldef``\macro #1{<replacement text>}` defines a `\macro`
+ which scans its parameter to the end of the current line.
+ This is the parameter `#1` which can be used in the `<replacement text>`.
+ The catcode of the `\endlinechar` is reset temporarily when the parameter is scanned.
+
+ The macro defined by `\eoldef` cannot be used with its parameter inside
+ other macros because the catcode dancing is not possible here. But the
+ \`\bracedparam``\macro{<parameter>}` can be used here. The `\bracedparam`
+ is a prefix which re-sets temporarily the `\macro` to a `\macro` with
+ normal one parameter.
+
+ The \`\skiptoeol` macro reads the text to the end of the current line
+ and ignores it.
+ \_cod -----------------------------
+
+\_def\_eoldef #1{\_def #1{\_begingroup \_catcode`\^^M=12 \_eoldefA #1}%
+ \_ea\_def\_csname _\_csstring #1:M\_endcsname}
+\_catcode`\^^M=12 %
+\_def\_eoldefA #1#2^^M{\_endgroup\_csname _\_csstring #1:M\_endcsname{#2}}%
+\_normalcatcodes %
+
+\_eoldef\_skiptoeol#1{}
+\_def\_bracedparam#1{\_ifcsname _\_csstring #1:M\_endcsname
+ \_csname _\_csstring #1:M\_ea \_endcsname
+ \_else \_csname __in\_csstring #1:M\_ea \_endcsname \_fi
+}
+\_public \eoldef \skiptoeol \bracedparam ;
+
+ \_doc -----------------------------
+ The \`\replstring``\macro{<textA>}{<textB>}`
+ replaces all occurrences of `<textA>` by `<textB>` in the `\macro` body.
+ The `\macro` must be defined without parameters. The occurrences of
+ `<textA>` are not replaced if they are \"hidden" in braces, for example
+ `...{...<textA>...}...`. The category codes in the `<textA>` must exactly
+ match.
+ \_cod -----------------------------
+
+\_catcode`!=3 \_catcode`?=3
+\_def\_replstring #1#2#3{% \replstring #1{stringA}{stringB}
+ \_long\_def\_replacestringsA##1#2{\_def #1{##1}\_replacestringsB}%
+ \_long\_def\_replacestringsB##1#2{\_ifx!##1\_relax \_else \_addto #1{#3##1}%
+ \_ea\_replacestringsB\_fi}%
+ \_ea\_replacestringsA #1?#2!#2%
+ \_long\_def\_replacestringsA##1?{\_def #1{##1}}\_ea\_replacestringsA #1}
+\_normalcatcodes
+
+\_public \replstring ;
+
+ \_doc -----------------------------
+ The \`\catcode` primitive is redefined here. Why?
+ There is very common cases like \code{\\catcode`}`<something>`
+ or `\catcode"<number>` but these characters
+ \code{\`} or \code{"} can be set as active (typically by `\activettchar` macro).
+ Nothing problematic happens if re-defined `\catcode` is used in this case.
+
+ If you really need primitive `\catcode` then you can use `\_catcode`.
+ \_cod -----------------------------
+
+\_def\catcode{\_catcode\_string} % more robust in cases \catcode` or \catcode"
+
+ \_doc -----------------------------
+ The \`\removespaces` `<text with spaces >{}` expands to <textwithoutspaces>.
+ \nl
+ The `\_ea`\`\ignorept``\the<dimen>` expands to a decimal
+ number `\the<dimen>` but without `pt` unit.
+ \nl
+ The \`\ignoreit``<token>` just ignores the `<token>`.
+ \_cod -----------------------------
+
+\_def\_removespaces #1 {\_isempty{#1}\_iffalse #1\_ea\_removespaces\_fi}
+\_ea\_def \_ea\_ignorept \_ea#\_ea1\_detokenize{pt}{#1}
+\_def\_ignoreit#1{}
+
+\public \removespaces \ignorept \ignoreit ;
+
+ \_doc -----------------------------
+ You can use expandable \`\bp``{<dimen>}` convertor from
+ \TeX/ `<dimen>` (or from an expression accepted by
+ `\dimexpr` primitive) to a decimal value in big points
+ (used as natural unit in the PDF format). So, you can write, for example:
+ \begtt
+ \pdfliteral{q \_bp{.3\hsize-2mm} \_bp{2mm} m 0 \_bp{-4mm} l S Q}
+ \endtt
+ You can use expandable \`\expr``{<expression>}` for analogical purposes.
+ It expands to the value of the `<expression>` at expand processor level
+ with \`\_decdigits` digits after decimal point.
+ The `<expression>` can include `+-*/()` and decimal numbers in common syntax.
+
+ The usage of prefixed versions \`\_expr` or \`\_bp` is more recommended
+ because user can re-define the control sequences `\expr` or `\bp`.
+ \_cod -----------------------------
+
+\_def\_decdigits{3} % digits after decimal point in \_bp and \_expr outputs.
+\_def\_pttopb{%
+ \_directlua{tex.print(string.format('\_pcent.\_decdigits f',
+ token.scan_dimen()/65781.76))}% pt to bp conversion
+}
+\def\_bp#1{\_ea\_pttopb\_dimexpr#1\_relax}
+\def\_expr#1{\_directlua{tex.print(string.format('\_pcent.\_decdigits f',#1))}}
+
+\_public \expr \bp ;
+
+ \_doc ------------------
+ The pair {\`\_doc` ... \`\_cod`} is used for documenting macros and to
+ printing the technical documentation of the \OpTeX/. The syntax is:
+ {\begtt
+ \_doc <ignored text>
+ <documentation>
+ \_cod <ignored text>
+ \endtt
+ }
+ The `<documentation>` (and `<ignored text>` too) must be `<balanced text>`.
+ It means that you cannot document only the `{` but you must document the `}` too.
+ \_cod ------------------
+
+\_long\_def\_doc #1\_cod {\_skiptoeol}
+
+\_endcode % -------------------------------------
+
+2020-05-03 \load macro introduced
+2020-03-15 released
diff --git a/macros/luatex/optex/base/multicolumns.opm b/macros/luatex/optex/base/multicolumns.opm
new file mode 100644
index 0000000000..c593f72552
--- /dev/null
+++ b/macros/luatex/optex/base/multicolumns.opm
@@ -0,0 +1,114 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \begmulti {Balanced columns <2020-03-26>} % preloaded in format
+
+ \_doc -----------------------------
+ This code is documented in detail in the \"\TeX/book naruby", pages 244--246,
+ free available, \url{http://petr.olsak.net/tbn.html}, but in Czech.
+ Roughly speaking, macros complete all material between
+ \`\begmulti``<num-columns>` and \`\endmulti`
+ into one `\vbox 6`. Then the macro measures the amount of free space at the current
+ page using `\pagegoal` and `\pagtotal` and does `\vsplit` of `\vbox 6` to
+ columns with height of such free space. This is done only if we have
+ enought amount of material in `\vbox 6` to fill full page by columns.
+ This is repeated in loop until we have less amount of material in `\vbox 6`.
+ Then we run `\_balancecolumns` which balances the last part of columns.
+ Each part of printed material is distributed to main vertical list as
+ `\hbox{<columns>}` and we need not do any change in the output routine.
+
+ If you have paragraphs in `\begmulti`... `\endmulti` environment then
+ you may say `\raggedright` inside this environment and you can re-assign
+ `\widowpenalty` and `\clubppenalty` (they are set to 10000 in \OpTeX/).
+ \_cod -----------------------------
+
+\_def\_multiskip{\_medskip} % space above and below \begmulti...\endmulti
+
+\_newcount\_mullines
+
+\_def\_begmulti #1 {\_par\_bgroup\_wipeepar\_multiskip\_penalty0 \_def\_Ncols{#1}
+ \_setbox6=\_vbox\_bgroup\_penalty0
+ %% \hsize := column width = (\hsize+\colsep) / n - \colsep
+ \_advance\_hsize by\_colsep
+ \_divide\_hsize by\_Ncols \_advance\_hsize by-\_colsep
+ \_mullines=0
+ \_def\par{\_ifhmode\_endgraf\_global\_advance\_mullines by\_prevgraf\_fi}%
+}
+\_def\_endmulti{\_vskip-\_prevdepth\_vfil
+ \_ea\_egroup\_ea\_baselineskip\_the\_baselineskip\_relax
+ \_dimen0=.8\_maxdimen \_tmpnum=\_dimen0 \_divide\_tmpnum by\_baselineskip
+ \_splittopskip=\_baselineskip
+ \_setbox1=\_vsplit6 to0pt
+ %% \dimen1 := the free space on the page
+ \_ifdim\_pagegoal=\_maxdimen \_dimen1=\_vsize \_corrsize{\_dimen1}
+ \_else \_dimen1=\_pagegoal \_advance\_dimen1 by-\_pagetotal \_fi
+ \_ifdim \_dimen1<2\_baselineskip
+ \_vfil\_break \_dimen1=\_vsize \_corrsize{\_dimen1} \_fi
+ \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi
+ \_divide\_dimen0 by\_Ncols \_relax
+ %% split the material to more pages?
+ \_ifdim \_dimen0>\_dimen1 \_splitpart
+ \_else \_balancecolumns \_fi % only balancing
+ \_multiskip\_egroup
+}
+
+ \_doc -----------------------------
+ Splitting columns...
+ \_cod -----------------------------
+
+\_def\_makecolumns{\_bgroup % full page, destination height: \dimen1
+ \_vbadness=20000 \_setbox1=\_hbox{}\_tmpnum=0
+ \_loop \_ifnum\_Ncols>\_tmpnum
+ \_advance\_tmpnum by1
+ \_setbox1=\_hbox{\_unhbox1 \_vsplit6 to\_dimen1 \_hss}
+ \_repeat
+ \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip
+ \_line{\_unhbox1\_unskip}
+ \_dimen0=\_dimen1 \_divide\_dimen0 by\_baselineskip \_multiply\_dimen0 by\_Ncols
+ \_global\_advance\_mullines by-\_dimen0
+ \_egroup
+}
+\_def\_splitpart{%
+ \_makecolumns % full page
+ \_vskip 0pt plus 1fil minus\_baselineskip \_break
+ \_ifnum\_mullines<\_tmpnum \_dimen0=\_ht6 \_else \_dimen0=.8\_maxdimen \_fi
+ \_divide\_dimen0 by\_Ncols \_relax
+ \_ifx\_balancecolumns\_flushcolumns \_advance\_dimen0 by-.5\_vsize \_fi
+ \_dimen1=\_vsize \_corrsize{\_dimen1}\_dimen2=\_dimen1
+ \_advance\_dimen2 by-\_baselineskip
+ %% split the material to more pages?
+ \_ifvoid6 \_else
+ \_ifdim \_dimen0>\_dimen2 \_ea\_ea\_ea \_splitpart
+ \_else \_balancecolumns % last balancing
+ \_fi \_fi
+}
+
+ \_doc -----------------------------
+ Final balancing of the columns.
+ \_cod -----------------------------
+
+\_def\_balancecolumns{\_bgroup \_setbox7=\_copy6 % destination height: \dimen0
+ \_ifdim\_dimen0>\_baselineskip \_else \_dimen0=\_baselineskip \_fi
+ \_vbadness=20000
+ \_def\_tmp{%
+ \_setbox1=\_hbox{}\_tmpnum=0
+ \_loop \_ifnum\_Ncols>\_tmpnum
+ \_advance\_tmpnum by1
+ \_setbox1=\_hbox{\_unhbox1
+ \_ifvoid6 \_hbox to\_wd6{\_hss}\_else \_vsplit6 to\_dimen0 \_fi\_hss}
+ \_repeat
+ \_ifvoid6 \_else
+ \_advance \_dimen0 by.2\_baselineskip
+ \_setbox6=\_copy7
+ \_ea \_tmp \_fi}\_tmp
+ \_hbox{}\_nobreak\_vskip-\_splittopskip \_nointerlineskip
+ \_hbox to\_hsize{\_unhbox1\_unskip}%
+ \_egroup
+}
+\_def\_corrsize #1{%% #1 := #1 + \splittopskip - \topskip
+ \_advance #1 by \_splittopskip \_advance #1 by-\_topskip
+}
+\_public \begmulti \endmulti ;
+
+\_endcode % -------------------------------------
+
+
diff --git a/macros/luatex/optex/base/optex.ini b/macros/luatex/optex/base/optex.ini
new file mode 100644
index 0000000000..de15a1db73
--- /dev/null
+++ b/macros/luatex/optex/base/optex.ini
@@ -0,0 +1,99 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+%% OpTeX ini file
+%% Petr Olsak <project started from: Jan. 2020>
+
+% Catcodes:
+
+\catcode `\{=1 % left brace is begin-group character
+\catcode `\}=2 % right brace is end-group character
+\catcode `\$=3 % dollar sign is math shift
+\catcode `\&=4 % ampersand is alignment tab
+\catcode `\#=6 % hash mark is macro parameter character
+\catcode `\^=7 %
+\catcode `\^^K=7 % circumflex and uparrow are for superscripts
+\catcode `\^^A=8 % downarrow is for subscripts
+\catcode `\^^I=10 % ascii tab is a blank space
+\catcode `\_=11 % underline can be used in control sequences
+\catcode `\~=13 % tilde is active
+\catcode `\^^a0=13 % non breaking space in Unicode
+\catcode 127=12 % normal character
+
+% OpTeX version
+
+\def\optexversion{Beta 0.12 May 2020}
+\def\fmtname{OpTeX}
+
+% Engine testing:
+
+\newlinechar=`\^^J
+\ifx\directlua\undefined
+ \message{This format is based only on LuaTeX, use luatex -ini optex.ini^^J}
+ \endinput \fi
+
+\ifx\bgroup\undefined \else
+ \message{This file can be used only for format initialisation, use luatex -ini^^J}
+ \endinput \fi
+
+% Basic .opm syntax:
+
+\let\_endcode =\endinput
+\def \_codedecl #1#2{\message{#2^^J}}% information about .opm file
+\long\def\_doc#1\_cod#2 {} % skip documentation
+
+% Initialization:
+
+\message{OpTeX (Olsak's Plain TeX) initialization <\optexversion>^^J}
+
+\input prefixed.opm % prefixed primitives and code syntax
+\input luatex-ini.opm % luaTeX initialization
+\input basic-macros.opm % basic macros
+\input alloc.opm % allocators for registers
+\input if-macros.opm % special \if-macros, \is-macros and loops
+\input parameters.opm % parameters setting
+\input more-macros.opm % OpTeX useful macros (todo: doc)
+\input plain-macros.opm % plainTeX macros (todo:doc)
+\input fonts-preload.opm % preloaded Latin Modern fonts
+\input fonts-resize.opm % font resizing (low-level macros) (todo: texdoc)
+\input fonts-select.opm % font selection system (todo: texdoc)
+\input math-preload.opm % math fams CM + AMS preloaded (todo: doc)
+\input math-macros.opm % basic macros for math plus mathchardefs (todo: x)
+\input math-unicode.opm % macros for loading UnicodeMath fonts (todo: x)
+\input fonts-opmac.opm % font managing macros from OPmac (todo: doc)
+\input output.opm % output routine
+\input margins.opm % macros for margins setting (todo: texdoc)
+\input colors.opm % colors
+\input ref-file.opm % ref file
+\input references.opm % references
+\input hyperlinks.opm % hyperlinks
+\input maketoc.opm % maketoc
+\input outlines.opm % PDF outlines (todo: x)
+\input pdfuni-string.opm % PDFunicode strings for outlines (todo: x)
+\input sections.opm % titles, chapters, sections
+\input lists.opm % lists, \begitems, \enditems
+\input verbatim.opm % verbatim
+\input hi-syntax.opm % syntax highlighting of verbatim listimgs
+\input graphics.opm % graphics
+\input table.opm % table macro
+\input multicolumns.opm % more columns by \begmulti ...\endmulti
+\input cite-bib.opm % Bibliography, \cite
+\input makeindex.opm % Make index and sorting
+\input fnotes.opm % \fnotes, \mnotes
+\input styles.opm % styles \report, \letter
+\input logos.opm % standard logos
+\input uni-lcuc.opm % Setting lccodes and uccodes for Unicode characters
+\input hyphen-lan.opm % initialization of hyphenation patterns (todo: doc)
+\input languages.opm % languages
+\input others.opm % miscenaleous
+
+\_everyjob = {%
+ \_message{This is OpTeX (Olsak's Plain TeX), version <\optexversion>^^J}%
+ \_mathchardef\_fnotestack=\_pdfcolorstackinit page {0 g 0 G}%
+ \_mathsbon % replaces \int_a^b to \int _a^b
+ \_inputref % inputs \jobname.ref if exists
+}
+
+\_dump
+
+\_endcode % ------------------------------
+
diff --git a/macros/luatex/optex/base/others.opm b/macros/luatex/optex/base/others.opm
new file mode 100644
index 0000000000..ffa8451f90
--- /dev/null
+++ b/macros/luatex/optex/base/others.opm
@@ -0,0 +1,92 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \uv {Miscenaleous <2020-04-02>} % preloaded in format
+
+ \_doc ----------------------------
+ \`\useOpTeX` and \`\useoptex` are declared as `\relax`.
+ \_cod ----------------------------
+
+\_let \useOpTeX = \_relax \_let \useoptex = \_relax
+
+ \_doc ----------------------------
+ The \`\lastpage` and \`\totalpages` get the information from the
+ \^`\_currpage`. The \^`\_Xpage` from `.ref` file sets the \^`\_currpage`.
+ \_cod ----------------------------
+
+\_def\_totalpages {\_openref\_ea\_lastpageA\_currpage}
+\_def\_lastpage {\_openref\_ea\_lastpageB\_currpage}
+\_def\_lastpageA #1#2{#1}
+\_def\_lastpageB #1#2{#2}
+\_def\_currpage {{0}{?}}
+\_public \lastpage \totalpages ;
+
+ \_doc ----------------------------
+ We need \`\uv`, \`\clqq`, \`\crqq`, \`\flqq`, \`\frqq`, \`\uslang`, \`\ehyph`
+ \`\chyph`, \`\shyph`, for backward compatibility with \csplain.
+ Codes are set according to Unicode, because we are using Czech only in Unicode
+ when \LuaTeX/ is used.
+ \_cod ----------------------------
+
+
+% for compatibility with csplain:
+
+\_chardef\clqq=8222 \_chardef\crqq=8220
+\_chardef\flqq=171 \_chardef\frqq=187
+\_chardef\promile=8240
+
+\_def\uv#1{\clqq#1\crqq}
+
+\_let\uslang=\enlang \_let\ehyph=\enlang
+\_let\chyph=\cslang \_let\shyph=\sklang
+\_let\csUnicode=\csPatt \_let\czUnicode=\csPatt \_let\skUnicode=\skPatt
+
+ \_doc ----------------------------
+ The \`\letfont` was used in \csplain/ instead of `\fontlet`.
+ \_cod ----------------------------
+
+\_let \letfont = \_fontlet
+
+ \_doc ----------------------------
+ Non breaking space in Unicode.
+ \_cod ----------------------------
+
+\let ^^a0=~
+
+ \_doc ----------------------------
+ TikZ needs these funny control sequences.
+ \_cod ----------------------------
+
+\_ea\_toksdef \_csname toks@\_endcsname=0
+\_ea\_let \_csname voidb@x\_endcsname=\_voidbox
+
+ \_doc ----------------------------
+ We don't want to read `opmac.tex` unless `\input opmac` is specified.
+ \_cod ----------------------------
+
+\_def\OPmacversion{OpTeX}
+
+ \_doc ----------------------------
+ Lorem ipsum can be printed by \`\lipsum``[<range>]` or \`\lorem``[<range>]`,
+ for example `\lipsum[3]` or `\lipsum[112-121]`, max=150. The data are read
+ from \LaTeX/ file `lipsum.ltd.tex`.
+ \_cod ----------------------------
+
+\_def \_lipsum {%
+ {\_long\_def\ProvidesFile##1[##2]##3{\_ifx\_par##3\_relax\_else \_ea##3\_fi}\_tmpnum=0
+ \_def\NewLipsumPar{\_advance\_tmpnum by1
+ \_afterassignment\_negativermnm \_sxdef{lips:\_the\_tmpnum}}%
+ \_opinput {lipsum.ltd.tex}%
+ \_global\_let \_lipsum=\_reallipsum
+ }\_lipsum
+}
+\_def\_negativermnm{\_romannumeral-`\.}
+\_def\_reallipsum[#1]{\_lipsumA #1\_empty-\_empty\_end}
+\_def\_lipsumA #1-#2\_empty#3\_end{\_tmpnum=#1 \_edef\_tmp{\_ifx^#2^#1\_else#2\_fi}%
+ \_loop \_csname lips:\_the\_tmpnum\_endcsname \par % \par is better here
+ \_ifnum\_tmpnum<\_tmp \_advance\_tmpnum by1 \_repeat
+}
+\def\lipsum {\_lipsum}
+\def\lorem {\_lipsum}
+
+\_endcode
+
diff --git a/macros/luatex/optex/base/outlines.opm b/macros/luatex/optex/base/outlines.opm
new file mode 100644
index 0000000000..0d041c743c
--- /dev/null
+++ b/macros/luatex/optex/base/outlines.opm
@@ -0,0 +1,97 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \outlines {PDF outlines <2020-03-12>} % preloaded in format
+
+\_def\_outlines#1{\_pdfcatalog{/PageMode/UseOutlines}\_openref
+ \_ifx\_toclist\_empty
+ \_opwarning{\_noexpand\outlines -- data unavailable. TeX me again}%
+ \_else
+ \_ifx\_dest\_destactive \_else
+ \_opwarning{\_noexpand\outlines doesn't work when \_noexpand\hyperlinks isn't declared}\_fi
+ {\_let\_tocline=\_outlinesA
+ \_count0=0 \_count1=0 \_count2=0 \_count3=0 \_toclist % calculate numbers o childs
+ \_def\_outlinelevel{#1}\_let\_tocline=\_outlinesB
+ \_tocrefnum=0 \_count0=0 \_count1=0 \_count2=0 \_count3=0
+ \_toclist}% create outlines
+ \_fi
+}
+\_def\_outlinesA#1#2#3#4#5#6{%
+ \_advance\_count#1 by1
+ \_ifcase#1\_or
+ \_addoneol{_ol:\_the\_count0}\_or
+ \_addoneol{_ol:\_the\_count0:\_the\_count1}\_or
+ \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2}\_or
+ \_addoneol{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}\_fi
+}
+\_def\_addoneol#1{%
+ \_ifcsname #1\_endcsname
+ \_tmpnum=\_csname#1\_endcsname\_relax
+ \_advance\_tmpnum by1 \_sxdef{#1}{\_the\_tmpnum}%
+ \_else \_sxdef{#1}{1}%
+ \_fi
+}
+\_def\_outlinesB#1#2#3#4#5#6{%
+ \_advance\_count#1 by1
+ \_ifcase#1%
+ \_tmpnum=\_trycs{_ol:\_the\_count0}{0}\_or
+ \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1}{0}\_relax\_or
+ \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2}{0}\_relax\_or
+ \_tmpnum=\_trycs{_ol:\_the\_count0:\_the\_count1:\_the\_count2:\_the\_count3}{0}\_relax\_or
+ \_tmpnum = 0\_relax\_fi
+ \_pdfunidef\_tmp{#4}%
+ \_advance\_tocrefnum by1
+ \_outlinesC{#1}{toc:\_the\_tocrefnum}{\_ifnum#1<\_outlinelevel\_space\_else-\_fi}{\_tmpnum}{\_tmp}%
+}
+\_def\_outlinesC#1#2#3#4#5{\_pdfoutline goto name{#2} count #3#4{#5}\_relax}
+
+\_newcount\_oulnum
+\_def\_insertoutline#1{\_global\_advance\_oulnum by1
+ \_pdfdest name{oul:\_the\_oulnum} xyz\_relax
+ \_pdfunidef\_tmp{#1}%
+ \_pdfoutline goto name{oul:\_the\_oulnum} count0 {\_tmp}\_relax
+}
+\_public \outlines \insertoutline ;
+
+\_endcode % ----------------------------
+
+The problem is that PDF format needs to know the number of direct
+descendants of each outline if we need to create the tree of structured
+outlines. But we know only the level of each outline. The required data
+should be calculated from TOC data. We use two steps over TOC data saved in
+the `\_toclist` where each record is represented by one `\_tocline`.
+
+First step, the \`\outlines` macro sets `\_tocline` to \`\_outlinesA` and
+calculates the number of direct descendants of each record. Second step,
+the `\outlines` macro sets `\_tocline` to \`\_outlinesB` and it uses prepared
+data and create outlines.
+
+Each ouline is mapped to the control sequence of the type
+`\_ol:<num>` or `\_ol:<num>:<num>` or `\_ol:<num>:<num>:<num>` or etc.
+The first one is reserved for level 0, the second one for level 1 (chapters), third
+one for level 2 (sections) etc. The number of direct descentants will be stored
+in these macros after first step is finished. Each new outline of given level
+increases the `<num>` at given level. When the first step is processed then
+(above that) the `\_ol:..` sequence of the parent inceases its value too. The
+`_ol:...` sequences are implemented by `\_ol:\_count0:\_count1:\count2` etc.
+For example, when section (level 2) is processed in the first step then we do:
+
+\begtt
+ \advance \count2 by 1
+ % increases the mapping pointer of the type
+ % \_ol:<\_count0:\_count1:\_count2> of this section
+ \advance \<_ol:\_count0:\_count1> by 1
+ % increases the number of descendants connected
+ % to the parent of this section.
+\endtt
+
+When second step is processed, then we only read the stored data about the
+number of descentants. Ad we use it in `count` parameter of `\_pdfoutline`
+primitive.
+
+For linking, we use the same links as in TOC, i.e. the `toc:\_the\_tocrefnum`
+labels are used.
+
+\`\insertoutline` `{<text>}` inserts one outline with zero direct descendants.
+It creates link destination of the type `oul:<num>` into the document
+(where \^`\insertoutline` is used) and the link itself is created too in the
+outline.
diff --git a/macros/luatex/optex/base/output.opm b/macros/luatex/optex/base/output.opm
new file mode 100644
index 0000000000..ae8ee0b08b
--- /dev/null
+++ b/macros/luatex/optex/base/output.opm
@@ -0,0 +1,245 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \nopagenumbers {Output routine <2020-03-28>} % preloaded in format
+
+ \_doc -----------------------------
+ \`\_optexoutput` is default output routine. You can create another...
+ \_cod -----------------------------
+
+\_output={\_optexoutput}
+\_def \_optexoutput{\_begoutput \_shipout\_completepage \_endoutput}
+
+ \_doc -----------------------------
+ Default \`\_begoutput` and \`\_endoutput` is defined.
+ If you need another functionality implemented in the output routine, you can
+ \^`\addto``\_begoutput{...}` or \^`\addto``\_endoutput{...}`. The settings
+ here is local in the `\output` group.
+
+ The \`\_prepoffsets` can set `\hoffset` differently for left or right
+ page. It is re-defined by the \^`\margins` macro..
+
+ The \^`\_regmark` tokens list includes accumulated `#2` from the \^`\regmacro`.
+ Logos and another macros are re-defined here (locally) for their usage
+ in headlines or footlines.
+ \_cod -----------------------------
+
+\_def \_begoutput{\_incr\_gpageno
+ \_immediate\_wref\_Xpage{{\_the\_gpageno}{\_folio}}%
+ \_prepoffsets \_the\_regmark} %
+\_def \_endoutput{\_advancepageno
+ {\_globaldefs=1 \_the\_nextpages \_nextpages={}}%
+ \_ifnum\_outputpenalty>-20000 \_else\_dosupereject\_fi
+}
+\_def \_prepoffsets {}
+
+ \_doc -----------------------------
+ \`\gpageno` counts pages from one in whole document
+ \_cod -----------------------------
+
+\_newcount\_gpageno
+\_public \gpageno ;
+
+ \_doc -----------------------------
+ The \`\_completepage` is similar what plain \TeX/ does in its output routine.
+ New is only \`\_backgroundbox`. It is `\vbox` with zero height with its
+ contents (from \^`\pgbackground`) llaped down. It is shifted directly to the
+ left-upper corner of the paper.
+
+ The \`\_ensureblack` sets the typesetting of its parameter locally to `\Black`
+ color. We needn't do this if colors are never used in the document. So,
+ default value of the `\_ensureblack` macro is empty. But first usage of
+ color macros in the document re-defines `\_ensureblack`.
+ See the section~\ref[colors] for more details.
+ \_cod -----------------------------
+
+\_def\_completepage{\_vbox{%
+ \_istoksempty \_pgbackground
+ \_iffalse \_ensureblack{\_backgroundbox{\_the\_pgbackground}}\_nointerlineskip \_fi
+ \_ensureblack{\_makeheadline}%
+ \_vbox to\_vsize {\_boxmaxdepth=\_maxdepth \_pagecontents}% \pagebody in plainTeX
+ \_ensureblack{\_makefootline}}%
+}
+\_def \_ensureblack #1{#1} % will be re-defined by color macros
+\_let \_openfnotestack = \_relax % will be re-defined by color macros
+\_def \_backgroundbox #1{\_moveleft\_hoffset\_vbox to0pt{\_kern-\_voffset #1\_vss}}
+
+ \_doc -----------------------------
+ \`\_makeheadline` creates `\vbox to0pt` with its contents (the \^`\headline`)
+ shifted by \^`\headlinedist` up.
+ \_cod -----------------------------
+
+\_def\_makeheadline {\_istoksempty \_headline \_iffalse
+ \_vbox to0pt{\_vss
+ \_baselineskip=\_headlinedist \_lineskiplimit=-\_maxdimen
+ \_line{\_the\_headline}\_hbox{}}\_nointerlineskip
+ \_fi
+}
+
+ \_doc -----------------------------
+ The \`\_makefootline` appends the \^`\footline` to the page-body box.
+ \_cod -----------------------------
+
+\_def\_makefootline{\_istoksempty \_footline \_iffalse
+ \_baselineskip=\_footlinedist
+ \_lineskiplimit=-\_maxdimen \_line{\_the\_footline}
+ \_fi
+}
+
+ \_doc -----------------------------
+ The \`\_pagecontents` is similar as in plain \TeX/. The only differnece is
+ that the \`\_pagedest` is inserted at the top of `\_pagecontents` and
+ \^`\_ensureblack` is applied to the \^`\topins` and \^`\footins` material.\nl
+ The \`\_footnoterule` is defined here.
+ \_cod -----------------------------
+
+\_def\_pagecontents{\_pagedest % destination of the page
+ \_ifvoid\_topins \_else \_ensureblack{\_unvbox\_topins}\_fi
+ \_dimen0=\_dp255 \_unvbox255 % open up \box255
+ \_ifvoid\_footins \_else % footnote info is present
+ \_vskip\_skip\_footins
+ \_ensureblack{\_footnoterule \_openfnotestack \_unvbox\_footins}\_fi
+ \_kern-\_dimen0 \_vskip \_pgbottomskip
+}
+\_def \_pagedest {{\_def\_destheight{25pt}\_dest[pg:\_the\_gpageno]}}
+\_def \_footnoterule {\_kern-3pt \_hrule width 2truein \_kern 2.6pt }
+
+ \_doc -----------------------------
+ \`\pageno`, \`\folio`, \`\nopagenumbers`, \`\advancepageno`
+ and \`\normalbottom`
+ used in the context of the output routine
+ from plain \TeX/ is defined here.
+ Only the \`\raggedbottom` macro is defined differently. We use the
+ \^`\pgbottomskip` register here which is set to 0\,pt by default.
+ \_cod -----------------------------
+
+\_countdef\_pageno=0 \_pageno=1 % first page is number 1
+\_def \_folio {\_ifnum\_pageno<0 \_romannumeral-\_pageno \_else \_number\_pageno \_fi}
+\_def \_nopagenumbers {\_footline={}}
+\_def \_advancepageno {%
+ \_ifnum\_pageno<0 \_global\_advance\_pageno by-1 \_else \_incr\_pageno \_fi
+} % increase |pageno|
+\_def \_raggedbottom {\_topskip=\_dimexpr\_topskip plus60pt \_pgbottomskip=0pt plus1fil\_relax}
+\_def \_normalbottom {\_topskip=\_dimexpr\_topskip \_pgbottomskip=0pt\_relax}
+
+\_public \pageno \folio \nopagenumbers \advancepageno \raggedbottom \normalbottom ;
+
+ \_doc -----------------------------
+ Macros for footnotes are the same as in plain \TeX. There is only one
+ difference: \`\vfootnote` is implemented as \`\_opfootnote` with empty
+ parameter `#1`. This parameter should do a local settings inside
+ the \`\footins` group and it does it when `\fnote` macro is used.\nl
+ The `\_opfootnote` nor `\vfootnote` don't take the footnote text
+ as a parameter. This is due to user can do catcode settings (like inline
+ verbatim) in the footnote text. This idea is adapted from plain \TeX.\nl
+ The \`\footnote` and \`\footstrut` is defined as in plain \TeX/.
+ \_cod -----------------------------
+
+\_newinsert\_footins
+\_def \_footnote #1{\_let\_osf=\_empty % parameter #2 (the text) is read later
+ \_ifhmode \_edef\_osf{\_spacefactor\_the\_spacefactor}\/\_fi
+ #1\_osf\_vfootnote{#1}}
+\_def\_vfootnote{\_opfootnote{}}
+\_def \_opfootnote #1#2{\_insert\_footins\_bgroup
+ \_interlinepenalty=\_interfootnotelinepenalty
+ \_leftskip=0pt \_rightskip=0pt \_spaceskip=0pt \_xspaceskip=0pt \_relax
+ \_let\_colorstackcnt=\_fnotestack % special color stack for footnotes
+ #1\_relax % local settings used by \fnote macro
+ \_splittopskip=\_ht\_strutbox % top baseline for broken footnotes
+ \_splitmaxdepth=\_dp\_strutbox \_floatingpenalty=20000
+ \_textindent{#2}\_footstrut
+ \_isnextchar \_bgroup
+ {\_bgroup \_aftergroup\_vfootA \_afterassignment\_ignorespaces \_let\_next=}{\_vfootB}%
+}
+\_def\_vfootA{\_unskip\_strut\_isnextchar\_colorstackpop\_closefncolor\_vfootF}
+\_def\_vfootB #1{#1\_uskip\_strut\_vfootF}
+\_def\_vfootF{\_egroup} % close \_insert\_footins\_bgroup
+\_def\_closefncolor#1{#1\_isnextchar\_colorstackpop\_closefncolor\_vfootF}
+\_def \_footstrut {\_vbox to\_splittopskip{}}
+\_skip\_footins=\_bigskipamount % space added when footnote is present
+\_count\_footins=1000 % footnote magnification factor (1 to 1)
+\_dimen\_footins=8in % maximum footnotes per page
+\_public
+ \footins \footnote \vfootnote \footstrut ;
+
+ \_doc -----------------------------
+ The \`\topins` macros
+ \`\topinsert`, \`\midinsert`, \`\pageinsert`, \`\endinsert`
+ are the same as in plain \TeX/.
+ \_cod -----------------------------
+
+\_newinsert\_topins
+\_newifi\_ifupage \_newifi\_ifumid
+\_def \_topinsert {\_umidfalse \_upagefalse \_oins}
+\_def \_midinsert {\_umidtrue \_oins}
+\_def \_pageinsert {\_umidfalse \_upagetrue \_oins}
+\_skip\_topins=\_zoskip % no space added when a topinsert is present
+\_count\_topins=1000 % magnification factor (1 to 1)
+\_dimen\_topins=\_maxdimen % no limit per page
+\_def \_oins {\_par \_begingroup\_setbox0=\_vbox\_bgroup} % start a \_vbox
+\_def \_endinsert {\_par\_egroup % finish the \_vbox
+ \_ifumid \_dimen0=\_ht0 \_advance\_dimen0 by\_dp0 \_advance\_dimen0 by\_baselineskip
+ \_advance\_dimen0 by\_pagetotal \_advance\_dimen0 by-\_pageshrink
+ \_ifdim\_dimen0>\_pagegoal \_umidfalse \_upagefalse \_fi \_fi
+ \_ifumid \_bigskip \_box0 \_bigbreak
+ \_else \_insert \_topins {\_penalty100 % floating insertion
+ \_splittopskip=0pt
+ \_splitmaxdepth=\_maxdimen \_floatingpenalty=0
+ \_ifupage \_dimen0=\_dp0
+ \_vbox to\_vsize {\_unvbox0 \_kern-\_dimen0}% depth is zero
+ \_else \_box0 \_nobreak \_bigskip \_fi}\_fi\_endgroup}
+
+\_public \topins \topinsert \midinsert \pageinsert \endinsert ;
+
+ \_doc -----------------------------
+ The \`\draft` macro is an example of usage `\_pgbackground` to create
+ water color marks.
+ \_cod -----------------------------
+
+\_def \_draft {\_pgbackground={\_draftbox{\_draftfont DRAFT}}%
+ \_fontdef\_draftfont{\_setfontsize{at10pt}\_bf}%
+ \_global\_let\_draftfont=\_draftfont
+}
+\_def \_draftbox #1{\_setbox0=\_hbox{#1}%
+ \_kern.5\_vsize \_kern4.5\_wd0
+ \_hbox to0pt{\_kern.5\_hsize \_kern-1\_wd0
+ \_pdfsave \_pdfrotate{55}\_pdfscale{10}{10}%
+ \_hbox to0pt{\_localcolor\LightGrey \_box0\_hss}%
+ \_pdfrestore
+ \_hss}%
+}
+\_public \draft ;
+
+\_endcode % -------------------------------------
+
+
+The output routine \^`\_optexoutput` is similar as in plain \TeX. It does:
+
+\begitems
+* \^`\_begoutput` which does:
+ \begitems
+ * increments \^`\gpageno`,
+ * prints `\_Xpage{<gpageno>}{<pageno>}` to the `.ref` file
+ (if \^`\openref` is active),
+ * calculates `\hoffset`,
+ * sets local meaning of macros used in headlines/footlines (see \^`\regmacro`).
+ \enditems
+* `\shipout`\^`\_completepage`, which is `\vbox` of --
+ \begitems
+ * backrground box, if \^`\pgbackground` is non-empty,
+ * headline box by \^`\_makeheadline`, if the \^`\headline` is nonempty,
+ * `\vbox to\vsize` of \^`\_pagecontents` which cosnists of --
+ \begitems
+ * \^`\_pagedest`, the page destination `pg:<gpageno>` for hyperlinks is created here,
+ * \^`\topins` box if non-empty (from \^`\topinsert`s),
+ * `\box255` with completed vertical material from main vertical mode,
+ * \^`\_footnoterule` and \^`\footins` box if nonempty (from \^`\fnote`, \^`\footnote`),
+ * \^`\pgbottomskip` (default is 0\,pt).
+ \enditems
+ * footline box by `\_makefootline`, if the \^`\footline` is nonempty
+ \enditems
+* \^`\_endoutput` which does:
+ \begitems
+ * increments \^`\pageno` using \^`\advancepageno`
+ * runs output routine repeatedly if \^`\dosupereject` is activated.
+ \enditems
+\enditems
diff --git a/macros/luatex/optex/base/parameters.opm b/macros/luatex/optex/base/parameters.opm
new file mode 100644
index 0000000000..8a707b4758
--- /dev/null
+++ b/macros/luatex/optex/base/parameters.opm
@@ -0,0 +1,542 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \normalbaselineskip {Parameter settings <2020-03-17>} % preloaded in format
+
+ \_doc -----------------------------
+ \secc Primitive registers
+ The primitive registers with the same default value as in plain \TeX/ follow:
+ \_cod -----------------------------
+
+\_parindent=20pt % indentation of paragraphs
+\_pretolerance=100 % parameters used in paragraph breaking algorithm
+\_tolerance=200
+\_hbadness=1000
+\_vbadness=1000
+\_doublehyphendemerits=10000
+\_finalhyphendemerits=5000
+\_adjdemerits=10000
+\_uchyph=1
+\_defaulthyphenchar=`\-
+\_defaultskewchar=-1
+\_hfuzz=0.1pt
+\_vfuzz=0.1pt
+\_overfullrule=5pt
+\_linepenalty=10 % penalty between lines inside the paragraph
+\_hyphenpenalty=50 % when a word is bro-ken
+\_exhyphenpenalty=50 % when the hyphenmark is used explicitly
+\_binoppenalty=700 % between binary operators in math
+\_relpenalty=500 % between relations in math
+\_brokenpenalty=100 % after lines if they end by a broken word.
+\_displaywidowpenalty=50 % before last line of paragraph if display math follows
+\_predisplaypenalty=10000 % above display math
+\_postdisplaypenalty=0 % below display math
+\_delimiterfactor=901 % parameter for scaling delimiters
+\_delimitershortfall=5pt
+\_nulldelimiterspace=1.2pt
+\_scriptspace=0.5pt
+\_maxdepth=4pt
+\_splitmaxdepth=\_maxdimen
+\_boxmaxdepth=\_maxdimen
+\_parskip=0pt plus 1pt
+\_abovedisplayskip=12pt plus 3pt minus 9pt
+\_abovedisplayshortskip=0pt plus 3pt
+\_belowdisplayskip=12pt plus 3pt minus 9pt
+\_belowdisplayshortskip=7pt plus 3pt minus 4pt
+\_parfillskip=0pt plus 1fil
+\_thinmuskip=3mu
+\_medmuskip=4mu plus 2mu minus 4mu
+\_thickmuskip=5mu plus 5mu
+
+ \_doc -----------------------------
+ Note that `\topskip` and `\splittopskip` are changed when first
+ `\typosize` sets the main values (default font size and default
+ `\baselineskip`).
+ \_cod -----------------------------
+
+\_topskip=10pt % top edge of page-box to first baseline distance
+\_splittopskip=10pt
+
+ \_doc -----------------------------
+ \secc Plain \TeX/ registers
+ Declared registers used in plain \TeX/
+ \_cod -----------------------------
+
+% We also define special registers that function like parameters:
+\_newskip\_smallskipamount \_smallskipamount=3pt plus 1pt minus 1pt
+\_newskip\_medskipamount \_medskipamount=6pt plus 2pt minus 2pt
+\_newskip\_bigskipamount \_bigskipamount=12pt plus 4pt minus 4pt
+\_newskip\_normalbaselineskip \_normalbaselineskip=12pt
+\_newskip\_normallineskip \_normallineskip=1pt
+\_newdimen\_normallineskiplimit \_normallineskiplimit=0pt
+\_newdimen\_jot \_jot=3pt
+\_newcount\_interdisplaylinepenalty \_interdisplaylinepenalty=100
+\_newcount\_interfootnotelinepenalty \_interfootnotelinepenalty=100
+
+\_def\_normalbaselines{\_lineskip=\_normallineskip
+ \_baselineskip=\_normalbaselineskip \_lineskiplimit=\_normallineskiplimit}
+
+\_def\_frenchspacing{\_sfcode`\.=1000 \_sfcode`\?=1000 \_sfcode`\!=1000
+ \_sfcode`\:=1000 \_sfcode`\;=1000 \_sfcode`\,=1000 }
+\_def\_nonfrenchspacing{\_sfcode`\.=3000 \_sfcode`\?=3000 \_sfcode`\!=3000
+ \_sfcode`\:=2000 \_sfcode`\;=1500 \_sfcode`\,=1250 }
+
+\_public \normalbaselines \frenchspacing \nonfrenchspacing
+ \smallskipamount \medskipamount \bigskipamount
+ \normalbaselineskip \normallineskip \normallineskiplimit
+ \jot \interdisplaylinepenalty \interfootnotelinepenalty ;
+
+ \_doc -----------------------------
+ \secc Different settings than in plain \TeX/
+
+ Default \"baseline setting" is for 10\,pt fonts (like in plain \TeX/).
+ But `\typosize` and `\typoscale` macros re-declare it if another font size is used.
+
+ The \`\nonfrenchspacing` is not set by default because
+ the author of \OpTeX/ is living in the Europe.
+ If you set `\enlang` hyphenation patterns then `\nonfrenchspacing`
+ is set.
+ \_cod -----------------------------
+
+\_normalbaselines % baseline setting, 10 pt font size
+
+ \_doc -----------------------------
+ Different values than in plain \TeX/ have following primitive registers.
+ We prohibit orphans, set more information for tracing boxes, set page origin
+ to upper left corner of the paper (no at 1\,in, 1\,in coordinates)
+ and set default page dimensions as A4, no letter.
+ \_cod -----------------------------
+
+\_emergencystretch=20pt % we want to use third pass of aparagraph building algoritmh
+ % we need not to keep the compatibility with old documents
+
+\_clubpenalty=10000 % after first line of paragraph
+\_widowpenalty=10000 % before last line of paragraph
+
+\_showboxbreadth=150 % for tracing boxes
+\_showboxdepth=7
+\_errorcontextlines=15
+\_tracinglostchars=2 % missing chracter warnings on terminal too
+
+\_outputmode=1 % PDF ouput
+\_pdfvorigin=0pt % orgin is exatly at left upper corner
+\_pdfhorigin=0pt
+\_hoffset=25mm % margins are 2.5cm, no 1in
+\_voffset=25mm
+\_hsize=160mm % 210mm (from A4 size) - 2*25mm (default margins)
+\_vsize=244mm % 297mm (from A4 size) - 2*25mm (default margins) -3mm baseline correction
+\_pagewidth=210 true mm
+\_pageheight=297 true mm
+
+ \_doc -----------------------------
+ If you insist on plain \TeX/ values of these parameters then you can
+ call the `\plaintexsetting` macro.
+ \_cod -----------------------------
+
+\_def\_plaintexsetting{%
+ \_emergencystretch=0pt
+ \_clubpenalty=150
+ \_widowpenalty=150
+ \_pdfvorigin=1in
+ \_pdfhorigin=1in
+ \_hoffset=0pt
+ \_voffset=0pt
+ \_hsize=6.5in
+ \_vsize=8.9in
+ \_pagewidth=8.5 true in
+ \_pageheight=11 true in
+ \_nonfrenchspacing
+}
+\_public \plaintexsetting ;
+
+ \_doc -----------------------------
+ \secc \OpTeX/ parameters
+
+ The main principle how to configure \OpTeX/ is not to use only parameters.
+ A designer can copy macros from \OpTeX/ and re-define them as required.
+ This is a reason why we don't implement dozens of parameters,
+ but we keep \OpTeX/ macros relatively simple. Example: do you want
+ another design of section titles? Copy macros `\_printsec` and
+ `\_printsecc` from `sections.opm` file to your macro file and re-define them.
+
+ Notice for OPmac users: there is important difference: all "string-like"
+ parameters are token lists in \OpTeX/ (OPmac uses macros for them). The reason of
+ this difference: if user sets parameter by unprotected control sequence,
+ an \OpTeX/ macro can read {\em the same data} using protected control sequence.
+ If user re-defines such unprotected control sequence (because he/she does
+ know about it) then nothing bad happens.
+
+ The \`\picdir` tokens list can include a directory where image files
+ (loaded by `\inspic`) are saved. Empty `\picdir` (default value) means
+ that image files are in the current directory (or somewhere in the \TeX/
+ system where \LuaTeX/ is able to find them). If you set non-empty value to
+ the `\picdir`, then it must end by `/` character, for example
+ `\picdir={img/}` means that there exists a directory `img` in your
+ current directory and the image files are stored here.
+ \_cod -----------------------------
+
+\_newtoks\_picdir
+\_public \picdir ;
+
+ \_doc -----------------------------
+ You can control the dimesions of included images by
+ the parameters \`\picwidth` (which is equivalent to \`\picw`) and
+ \`\picheight`. By default these parameters are set to zero: the native
+ dimension of the image is used. If only `\picwidth` has a nonzero value,
+ then this is the width of the image (height is calculated automatically in
+ order to respect the aspect of the image). If only `\picheight` has
+ a nonzero value then height is given, width is calculated. If both
+ parameters are non-zero, the height and width are given and the aspect
+ ratio of the image is (probably) broken. We recommend to set these
+ parameters locally in the group where `\inspic` is used in order to not
+ influence the dimensions of another images. But there exist many
+ situations you need to put the same dimensions to more images,
+ so you can set this parameter only once before more `\inspic` macros.
+ \_cod -----------------------------
+
+\_newdimen\_picwidth \_picwidth=0pt \_let\picw=\_picwidth
+\_newdimen\_picheight \_picheight=0pt
+\_public \picwidth \picheight ;
+
+ \_doc -----------------------------
+ The \`\everytt` is token list used in
+ `\begtt`...`\endtt` environment and
+ in the verbatim group opened by `\verbinput` macro. You can include a
+ code which is processed inside the group after basic settings were done
+ On the other hand, it is processed before scanner of verbatim text is started.
+ Your macros should influence scanner (catcode settings) or printing
+ process of the verbatim code or both.
+
+ The code from the line immediately after `\begtt` is processed after
+ the `\everytt`. This code should overwrite `\everytt` settings. Use
+ `\everytt` for all verbatim environments in your document and use a code
+ after `\begtt` locally only for this environment.
+
+ The \`\everyintt` token list does similar work
+ but acts in the in-line verbatim
+ text processed by a pair of `\activettchar` characters or by `\code{<text>}`.
+ You can set `\everyintt={\Red}` for example if you want in-line verbatim
+ in red color.
+ \_cod -----------------------------
+
+\_newtoks\_everytt
+\_newtoks\_everyintt
+\_public \everytt \everyintt ;
+
+ \_doc -----------------------------
+ The \`\ttline` is used
+ in `\begtt`...`\endtt` environment or in the code
+ printed by `\verbinput`. If `\ttline` is positive or zero, then the
+ verbatim code have numbered lines from `\ttline+1`. The `\ttline`
+ register is re-set to new value after a code piece is printed, so next
+ code pieces have numbered lines continuously. If `\ttline=-1`, then
+ `\begtt`...`\endtt` lines are without numbers and `\verbinput` lines
+ shows the line numbers of inputted file. If `\ttline`\code{<-1}
+ then no line numbers are printed.
+ \_cod -----------------------------
+
+\_newcount\_ttline \_ttline=-1 % last line number in \begtt...\endtt
+\_public \ttline ;
+
+ \_doc -----------------------------
+ The \`\ttindent` gives default indentation
+ of verbatim lines printed by `\begtt`...`\endtt` pair or by
+ `\verbinput`.
+ \nl
+ The \`\ttshift` gives the amount of shift of all verbatim lines to right.
+ Despite to the \^`\ttindent`, it does not shift the line numbers, only
+ the text.
+ \nl
+ The \`\iindent` gives default indentations used in table of contents,
+ captions, lists, bib references,
+ \nl
+ It is strongly recommended to re-set this value if you set `\parindent`
+ to another value than plain \TeX/ default 20pt. A well typeset
+ document should have the same dimension for all indentations, so
+ you should say `\ttindent=\parindent` and `\iindent=\parindent`.
+ \_cod -----------------------------
+
+\_newdimen\_ttindent \_ttindent=\_parindent % indentation in verbatim
+\_newdimen\_ttshift
+\_newdimen\_iindent \_iindent=\_parindent
+\_public \ttindent \ttshift \iindent ;
+
+ \_doc -----------------------------
+ The tabelator `^^I` has its category code like space: it behaves as a
+ space in normal text. This is normal plain \TeX/ setting.
+ But in the multiline verbatim environment it
+ is active and expands to the `\hskip<dimen>` where `<dimen>`
+ is the width of \`\tabspaces` spaces.
+ Default `\tabspaces=3` means
+ that tabelator behaves like three spaces in multiline verbatim.
+ \_cod -----------------------------
+
+\_newcount \_tabspaces \_tabspaces=3
+\_public \tabspaces ;
+
+ \_doc -----------------------------
+ If \`\hicolors` is non-empty then its contents is used instead
+ `\_hicolors<name>` declared in the file `hisyntax-<name>.opm`.
+ The user can give his/her preferences about colors for
+ syntax highlighting by this tokens list.
+ Full color set must be declared here.
+ \_cod -----------------------------
+
+\_newtoks\_hicolors
+\_public \hicolors ;
+
+ \_doc -----------------------------
+ The default item mark used between `\begitems` and `\enditems` is bullet.
+ The \`\defaultitem` tokens list declare this default item mark.
+ \nl
+ The \`\everyitem` tokens list is applied in vertical mode
+ at the start of each item.
+ \nl
+ The \`\everylist` tokens list is applied after group is opened by
+ \nl
+ The \`\ilevel` keeps the value of current nesting level of the items list.
+ \nl
+ The \`\listskipamount` gives vertical skip above and below the items list
+ if `\ilevel=1`.
+ \_cod -----------------------------
+
+\_newtoks\_defaultitem \_defaultitem={$\_bullet$\_enspace}
+\_newtoks\_everyitem
+\_newtoks\_everylist
+\_newskip \_listskipamount \_listskipamount=\_medskipamount
+\_newcount \_ilevel
+\_public \defaultitem \everyitem \everylist \listskipamount \ilevel ;
+
+ \_doc -----------------------------
+ The `\tit` macro includes `\vglue`\`\titskip` above the title of the document.
+ \_cod -----------------------------
+
+\_newskip\_titskip \_titskip=40pt \_relax % \vglue above title printed by \tit
+\_public \titskip ;
+
+ \_doc ----------------------------
+ The `\begmulti` `\endmulti` pair creates more columns. The parameter
+ \`\colsep` declares the space between columns. If $n$ columns are specified
+ then we have $n-1$ `\colseps` and $n$ columns in total `\hsize`. This
+ gives definite result of columns width.
+ \_cod ----------------------------
+
+\_newdimen\_colsep \_colsep=20pt % space between columns
+\_public \colsep ;
+
+ \_doc -----------------------------
+ Each line in the Table of contents is printed in a group.
+ The \`\everytocline` tokens list is processed here before
+ the internal `\_tocl:<num>` macro which starts printing the line.
+ \_cod -----------------------------
+
+\_newtoks \_everytocline
+\_public \everytocline ;
+
+ \_doc -----------------------------
+ The \`\bibtexhook` tokens list is used inside the group when `\usebib` command is
+ processed after style file is loaded and before printing bib-entries.
+ You can re-define a behavior of style file here or you can modify the
+ more declaration for printing (fonts, baselineskip, etc.) or you can
+ define a specific macros used in your `.bib` file.
+ \_cod -----------------------------
+
+\_newtoks\_bibtexhook
+\_public \bibtexhook ;
+
+\_newtoks\_everycaptiont \_newtoks\_everycaptionf
+\_public \everycaptiont \everycaptionf ;
+
+ \_doc -----------------------------
+ The \`\everyii` tokens list is used before `\noindent` for each
+ Index item when printing the Index.
+ \_cod -----------------------------
+
+\_newtoks\_everyii
+\_public \everyii ;
+
+ \_doc -----------------------------
+ The \`\everymnote` is used in the `\mnote` group before `\noindent` which
+ immediately precedes marginal note text.
+ \nl
+ The \`\mnotesize` is horizontal size of the marginal notes.
+ \nl
+ The \`\mnoteindent` is horizontal space between body-text and marginal note.
+ \nl
+ The \`\mnoteskip` is a dimen which denotes the vertical shift of marginal
+ note from its normal position. Positive value means shift up, negative
+ down. The `\mnoteskip` register is set to zero
+ after the marginal note is printed.
+ Use it as an exception of marginal note position if the marginal
+ notes overlaps or they are put at bottom of the page.
+ \_cod -----------------------------
+
+\_newtoks\_everymnote
+\_newdimen\_mnotesize \_mnotesize=20mm % the width of the mnote paragraph
+\_newdimen\_mnoteindent \_mnoteindent=10pt % ditance between mnote and text
+\_newdimen\_mnoteskip
+\_public \everymnote \mnotesize \mnoteindent \mnoteskip ;
+
+ \_doc -----------------------------
+ The `\table` parameters follows. The \`\thistable` tokens list
+ register should be used for giving an exception for only one `\table`
+ which follows. It should change locally other parameters of the `\table`.
+ It is reset to empty list after the table is printed.
+ \nl
+ The \`\everytable` tokens list register is applied in every table.
+ There is another difference between these two registers.
+ The `\thistable` is used first, then strut and baselineskip settings are
+ done, then `\everytable` is applied and then the table is printed.
+ \nl
+ \`\tabstrut` configures the height and depth of lines in the table.
+ You can declare `\tabstrut={}`, then normal baselineskip is used in the
+ table. This can be used when you don't use horizontal nor vertical
+ lines in tables.
+ \nl
+ \`\tabiteml` is applied before each item,
+ \`\tabitemr` is applied after each item of the table.
+ \nl
+ \`\tablinespace` is additional vertical space between horizontal rules
+ and the lines of the table.
+ \nl
+ \`\hhkern` gives the space between horizontal lines if they are doubled and
+ \`\vvkern` gives the space between such vertical lines.
+ \_cod -----------------------------
+
+\_newtoks\_everytable \_newtoks\_thistable
+\_newtoks\_tabiteml \_newtoks\_tabitemr \_newtoks\_tabstrut
+\_newdimen\_tablinespace \_newdimen\_vvkern \_newdimen\_hhkern
+\_everytable={} % code used after settings in \vbox before table processing
+\_thistable={} % code used when \vbox starts, is is removed after using it
+\_tabstrut={\_strut}
+\_tabiteml={\_enspace} % left material in each column
+\_tabitemr={\_enspace} % right material in each column
+\_tablinespace=2pt % additional vertical space before/after horizontal rules
+\_vvkern=1pt % space between double vertical line and used in \frame
+\_hhkern=1pt % space between double horizontal line and used in \frame
+\_public \everytable \thistable \tabiteml \tabitemr \tabstrut \tablinespace \vvkern \hhkern ;
+
+ \_doc -----------------------------
+ The output routine uses token list \`\headline` and \`\footline` in the
+ same sense as in plain \TeX/. If they are non-empty then `\hfil` or `\hss`
+ must be here because they are used inside `\hbox to\hsize`.
+
+ Assume that page-body text can be typeset in different sizes and
+ different fonts and we don't know in what font context the output routine
+ is invoked. So, it is strongly recommended to declare fixed variants of
+ fonts at begining of your document. For example `\fontdef\rmfixed{\rm}`,
+ `\fontdef\itfixed{\it}`. Then use them in headline and footline:
+ \begtt
+ \headline={\itfixed Text of headline, section: \fistmark \hss}
+ \footline={\rmfixed \ifodd\pageno \hfill\fi \folio \hfil}
+ \endtt
+ \_cod -----------------------------
+
+\_newtoks\_headline \_headline={}
+\_newtoks\_footline \_footline={\_hss\_rmfixed \_folio \_hss}
+\_public \headline \footline ;
+
+ \_doc -----------------------------
+ The distance between the `\headline` and the top of the page-text
+ is controlled by the \`\headlinedist` register.
+ The distance between bottom of
+ page-text and `\footline` is \`\footlinedist`.
+ More precisely: baseline of
+ headline and baseline of first line in page-text have distance
+ `\headlinedist+\topskip`. The baseline of the last line in page-text and
+ the baseline of the footline have distance `\footlinedist`.
+ Default values are inspired from plain \TeX/.
+ \_cod -----------------------------
+
+\_newdimen \_headlinedist \_headlinedist=14pt
+\_newdimen \_footlinedist \_footlinedist=24pt
+\_public \headlinedist \footlinedist ;
+
+ \_doc -----------------------------
+ The \`\pgbottomskip` is inserted to the page bottom
+ in the output routine. You can set a less tolerance here than
+ `\raggedbotom` does. By default, no tolerance is given.
+ \_cod -----------------------------
+
+\_newskip \_pgbottomskip \_pgbottomskip=0pt \_relax
+\_public \pgbottomskip ;
+
+ \_doc -----------------------------
+ The \`\nextpages` tokens list can include settings which will be used at
+ next pages. It is processed at the end of output routine with
+ `\globaldefs=1` prefix. The `\nextpages` is reset to empty after
+ processing. Example of usage:
+ \begtt
+ \headline={} \nexptages={\headline={\fixedrm \firstmark \hfil}}
+ \endtt
+ This example sets current page with empty headline, but next pages have
+ non-empty headlines.
+ \_cod -----------------------------
+
+\_newtoks \_nextpages
+\_public \nextpages ;
+
+ \_doc -----------------------------
+ The \`\pgbackground` token list can include macros which generate a
+ vertical list. It is used as page background. The top-left corner of such
+ `\vbox` is at the top-left corner of the paper. Example creates the
+ background of all pages yellow:
+ \begtt
+ \pgbackground={\Yellow \hrule height 0pt depth\pdfpageheight width\pdfpagewidth}
+ \endtt
+ \_cod -----------------------------
+
+\_newtoks \_pgbackground \_pgbackground={} % for page background
+\_public \pgbackground ;
+
+ \_doc -----------------------------
+ The parameters used in `\inoval` and `\incircle` macros.
+ The default values (documented in user manual) are set in the macros.
+ The user can re-set these values using tokens \`\ovalparams`, \`\circleparams`.
+ \_cod -----------------------------
+
+\_newtoks \_ovalparams
+\_newtoks \_circleparams
+%\_ovalparams={\_roundness=2pt \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp
+% \_shadow=N \_overlapmargins=N \_hhkern=0pt \_vvkern=0pt }
+%\_circleparams={\_ratio=1 \_fcolor=\Yellow \_lcolor=\Red \_lwidth=.5bp
+% \_shadow=N \_overlapmargins=N \_hhkern=3pt \_vvkern=3pt}
+
+\_newdimen \_roundness \_roundness=5mm % used in \clippingoval macro
+
+\_public \ovalparams \circleparams \roundness ;
+
+
+\_endcode %----------------------------------------------------
+
+The behavior of document processing by \OpTeX/ is
+controlled by {\em parameters}. The parameters are
+\begitems
+* primitive registers used in build-in algorithms of \TeX/,
+* registers declared and used by \OpTeX/ macros.
+\enditems
+Both groups of registers have their type: number, dimension, skip, token
+list.
+
+The registers are represented by their names (control sequences). If the user
+re-defines such control sequence then the appropriate register exists
+steadily and build-in algorithms are using it without change. But user
+cannot access its value in such case. \OpTeX/ declares two control sequences
+for each register: prefixed and unprefixed. \OpTeX/ macros use only
+prefixed variants of control sequences. The user should use unprefixed variant
+with the same meaning and set or read values of registers using the
+unprefixed variant. If the user re-defines the unprefixed control sequence of
+a register then \OpTeX/ macros still work without change.
+
+%There is only few parameters declared by \OpTeX/ macros. All of them
+%are listed in this section. This is desired feature of the \OpTeX/.
+%If you want to do more
+%changes wich cannot be controlled by parameters listed here then you
+%can copy the appropriate \OpTeX/ macro to your macro file and you
+%can completely re-define it. The typical examples are `\_printsomething`
+%macros which declares the design of the document.
+
+\_endinput
+
+History:
+2020-04-04 ... \tabspaces added
+2020-04-03 ... \hicolors added
diff --git a/macros/luatex/optex/base/pdfuni-string.opm b/macros/luatex/optex/base/pdfuni-string.opm
new file mode 100644
index 0000000000..d7566eb91d
--- /dev/null
+++ b/macros/luatex/optex/base/pdfuni-string.opm
@@ -0,0 +1,78 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \pdfunidef {PDFunicode strings for outlines <2020-03-12>} % preloaded in format
+
+\_edef\_octalprint#1#2{\_noexpand\_directlua{% #1=character-code #2=character
+ if ('#2'>='A' and '#2'<='Z') or ('#2'>='a' and '#2'<='z') then
+ tex.print(string.format('000\_pcent s',"#2"))
+ else
+ local num=#1\_pcent256
+ tex.print(string.format('\_pcent 03o\_nbb\_pcent03o',(#1-num)/256,num))
+ end
+}}
+\_def\_pdfunidef#1#2{%
+ \_begingroup
+ \_catcode`\\=12 \_let\\=\_bslash
+ \_the\_regoul \_relax % \_regmacro alternatives of logos etc.
+ \_escapechar=-1
+ \_edef#1{#2\_empty}%
+ \_escapechar=`\\
+ \_ea\_edef \_ea#1\_ea{\_ea\_removeoutmath #1$\_end$}% $x$ -> x
+ \_ea\_edef \_ea#1\_ea{\_ea\_removeoutbraces #1{\_end}}% {x} -> x
+ \_edef#1{\_detokenize\_ea{#1}}%
+ \_replstring#1{ }{{ }}% text text -> text{ }text
+ \_edef\_out{\\376\\377}%
+ \_ea\_pdfunidefB#1^% text -> \_out in octal
+ \_ea
+ \_endgroup
+ \_ea\_def\_ea#1\_ea{\_out}
+}
+\_def\_pdfunidefB#1{%
+ \_ifx^#1\_else
+ \_tmpnum=`#1
+ \_pdfunidefC{\_luaescapestring{#1}}%
+ \_ea\_pdfunidefB \_fi
+}
+\_def\_pdfunidefC #1{\_edef\_out{\_out \\\_ea\_octalprint\_ea{\_the\_tmpnum}{#1}}}
+
+\_def\_removeoutbraces #1#{#1\_removeoutbracesA}
+\_def\_removeoutbracesA #1{\_ifx\_end#1\_else #1\_ea\_removeoutbraces\_fi}
+\_def\_removeoutmath #1$#2${#1\_ifx\_end#2\_else #2\_ea\_removeoutmath\_fi}
+
+\_regmacro {}{}{\_let\em=\_empty \_let\rm=\_empty \_let\bf=\_empty
+ \_let\it=\_empty \_let\bi=\_empty \_let\tt=\_empty \_let\/=\_empty
+ \_let~=\_space
+}
+\public \pdfunidef ;
+
+\_endcode % --------------------------------
+
+There are only two encodings for PDF strings (used in PDFoutlines, PDFinfo
+etc.). First one is PDFDocEncoding which is one-byte encoding, but most
+Czech or Slovak characters are missing here.
+
+The second encoding is PDFunicode encoding wich is implemented in this file.
+This encoding is \TeX/-discomfortable, because it looks like
+
+\begtt
+\376\377\000C\000v\000i\001\015\000e\000n\000\355\000\040\000j\000e\000\040
+\000z\000\341\000t\001\033\001\176
+\endtt
+
+This example is real encoding of the string "Cvičení je zátěž". You can see
+that this is UTF-16 encoding (two bytes per character) with two starting
+bytes FEFF. Moreover, each byte is encoded by three octal digits preceded by
+backslash. The only exception is the visible ASCII character encoding: such
+a character is encoded by its real byte preceded by `\000`.
+
+The command \`\pdfunidef``\macro{string}` is implemented here
+using `\directlua`.
+The input string is preprocessed: detokenized, converted `\word /` to
+`\word/` (used in logos) preprocessed spaces using \^`\replstring` and then the
+\`\_pdfunidefB` is repeated on each character. It calls the `\directlua` chunk
+to print octal numbers in the macro `\_octalprint`.
+
+The \^`\regmacro` is used in order to sed the values of macros
+`\em`, `\rm`, `\bf`, `\it`, `\bi`, `\tt`, `\/` and `~` to values usable in
+PDF outlines.
+
diff --git a/macros/luatex/optex/base/plain-macros.opm b/macros/luatex/optex/base/plain-macros.opm
new file mode 100644
index 0000000000..f5c16ba3bd
--- /dev/null
+++ b/macros/luatex/optex/base/plain-macros.opm
@@ -0,0 +1,339 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \magstep {Macros from plain TeX <2020-02-14>} % preloaded in format
+
+ \_doc -----------------------------
+ The \`\dospecials` works like in plain TeX but does nothing with `_`.
+ If you need to do the same with this character, you can re-define:
+ \begtt
+ \addto \dospecials{\do\_}
+ \endtt
+ \_cod -----------------------------
+
+\_def\_dospecials {\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\^^A\do\%\do\~}
+\_chardef\_active = 13
+
+\_public \dospecials \active ;
+
+ \_doc -----------------------------
+ The shortcuts `\chardef\@one` is not defined in \OpTeX/. Use normal
+ numbers instead of such obscurities.
+ \nl
+ The \`\magstep` and \`\magstephalf` are
+ defined with `\space`, (no `\relax`), in order to be expandable.
+ \_cod -----------------------------
+
+\_def \_magstephalf{1095 }
+\_def \_magstep#1{\_ifcase#1 1000\_or 1200\_or 1440\_or 1728\_or 2074\_or 2488\_fi\_space}
+\_public \magstephalf \magstep ;
+
+ \_doc -----------------------------
+ Plain \TeX/ basic macros and control sequences.
+ \`\endgraf`, \`\endline`.
+ The `^^L` is not defined in \OpTeX/ because it is obsolete.
+ \_cod -----------------------------
+
+\_def\^^M{\ } % control <return> = control <space>
+\_def\^^I{\ } % same for <tab>
+
+\_def\lq{`} \def\rq{'}
+\_def\lbrack{[} \_def\rbrack{]} % They are only public versions.
+% \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par" % obsolete
+
+\_let\_endgraf=\_par \_let\_endline=\_cr
+\_public \endgraf \endline ;
+
+ \_doc -----------------------------
+ Plain \TeX/ classical \`\obeylines` and \`\obeyspaces`.
+ \_cod -----------------------------
+
+% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
+% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
+{\_catcode`\^^M=13 % these lines must end with %
+ \_gdef\_obeylines{\_catcode`\^^M=13\_let^^M\_par}%
+ \_global\_let^^M=\par} % this is in case ^^M appears in a \write
+\_def\_obeyspaces{\_catcode`\ =13 }
+{\_obeyspaces\_global\_let =\_space}
+\_public \obeylines \obeyspaces ;
+
+ \_doc -----------------------------
+ Spaces.
+ \`\thinspace`, \`\negthinspace`, \`\enspace`, \`\enskip`,
+ \`\quad`, \`\qquad`, \`\smallskip`,
+ \`\medskip`, \`\bigskip`, \`\nointerlineskip`, \`\offinterlineskip`,
+ \`\topglue`, \`\vglue`, \`\hglue`, \`\slash`.
+ \_cod -----------------------------
+
+\_protected\_def\_thinspace {\_kern .16667em }
+\_protected\_def\_negthinspace {\_kern-.16667em }
+\_protected\_def\_enspace {\_kern.5em }
+\_protected\_def\_enskip {\_hskip.5em\_relax}
+\_protected\_def\_quad {\_hskip1em\_relax}
+\_protected\_def\_qquad {\_hskip2em\_relax}
+\_protected\_def\_smallskip {\_vskip\_smallskipamount}
+\_protected\_def\_medskip {\_vskip\_medskipamount}
+\_protected\_def\_bigskip {\_vskip\_bigskipamount}
+\_def\_nointerlineskip {\_prevdepth=-1000pt }
+\_def\_offinterlineskip {\_baselineskip=-1000pt \_lineskip=0pt \_lineskiplimit=\_maxdimen}
+
+\_public \thinspace \negthinspace \enspace \enskip \quad \qquad \smallskip
+ \medskip \bigskip \nointerlineskip \offinterlineskip ;
+
+\_def\_topglue {\_nointerlineskip\_vglue-\_topskip\_vglue} % for top of page
+\_def\_vglue {\_afterassignment\_vglA \_skip0=}
+\_def\_vglA {\_par \_dimen0=\_prevdepth \_hrule height0pt
+ \_nobreak\_vskip\_skip0 \_prevdepth=\_dimen0 }
+\_def\_hglue {\_afterassignment\_hglA \_skip0=}
+\_def\_hglA {\_leavevmode \_count255=\_spacefactor \_vrule width0pt
+ \_nobreak\_hskip\_skip0 \_spacefactor=\_count255 }
+\_protected\_def~{\_penalty10000 \ } % tie
+\_protected\_def\_slash {/\_penalty\_exhyphenpenalty} % a `/' that acts like a `-'
+
+\_public \topglue \vglue \hglue \slash ;
+
+ \_doc -----------------------------
+ Penalties macros:
+ \`\break`, \`\nobreak`, \`\allowbreak`, \`\filbreak`, \`\goodbreak`,
+ \`\eject`, \`\supereject`, \`\dosupereject`,
+ \`\removelastskip`, \`\smallbreak`, \`\medbreak`, \`\bigbreak`.
+ \_cod -----------------------------
+
+\_protected\_def \_break {\_penalty-10000 }
+\_protected\_def \_nobreak {\_penalty10000 }
+\_protected\_def \_allowbreak {\_penalty0 }
+\_protected\_def \_filbreak {\_par\_vfil\_penalty-200\_vfilneg}
+\_protected\_def \_goodbreak {\_par\_penalty-500 }
+\_protected\_def \_eject {\_par\_break}
+\_protected\_def \_supereject {\_par\_penalty-20000 }
+\_protected\_def \_dosupereject {\_ifnum \_insertpenalties>0 % something is being held over
+ \_line{}\_kern-\_topskip \_nobreak \_vfill \_supereject \_fi}
+\_def \_removelastskip {\_ifdim\_lastskip=0pt \_else \_vskip-\_lastskip \_fi}
+\_def \_smallbreak {\_par\_ifdim\_lastskip<\_smallskipamount
+ \_removelastskip \_penalty-50 \_smallskip \_fi}
+\_def \_medbreak {\_par\_ifdim\_lastskip<\_medskipamount
+ \_removelastskip \_penalty-100 \_medskip \_fi}
+\_def \_bigbreak {\_par\_ifdim\_lastskip<\_bigskipamount
+ \_removelastskip \_penalty-200 \_bigskip \_fi}
+
+\_public \break \nobreak \allowbreak \filbreak \goodbreak \eject \supereject \dosupereject
+ \removelastskip \smallbreak \medbreak \bigbreak ;
+
+ \_doc -----------------------------
+ Boxes.
+ \`\line`, \`\leftline`, \`\rightline`, \`\centerline`, \`\rlap`, \`\llap`,
+ \`\underbar`.
+ \_cod -----------------------------
+
+\_def \_line {\_hbox to\_hsize}
+\_def \_leftline #1{\_line{#1\_hss}}
+\_def \_rightline #1{\_line{\_hss#1}}
+\_def \_centerline #1{\_line{\_hss#1\_hss}}
+\_def \_rlap #1{\_hbox to0pt{#1\_hss}}
+\_def \_llap #1{\_hbox to0pt{\_hss#1}}
+\_def\_underbar #1{$\_setbox0=\_hbox{#1}\_dp0=0pt \_math \_underline{\_box0}$}
+
+\_public \line \leftline \rightline \centerline \rlap \llap \underbar ;
+
+ \_doc -----------------------------
+ The \`\strutbox` is declared as 10pt size dependent (like in plain \TeX), but
+ the macro `\_setbaselineskip` (from `fonts-opmac.opm`) redefines it.
+ \_cod -----------------------------
+
+\_newbox\_strutbox
+\_setbox\_strutbox=\_hbox{\_vrule height8.5pt depth3.5pt width0pt}
+\_def \_strut {\_relax\_ifmmode\_copy\_strutbox\_else\_unhcopy\_strutbox\_fi}
+
+\_public \strutbox \strut ;
+
+ \_doc -----------------------------
+ Alignment. \`\hidewidth` \`\ialign` \`\multispan`.
+ \_cod -----------------------------
+
+\_def \_hidewidth {\_hskip\_hideskip} % for alignment entries that can stick out
+\_def \_ialign{\_everycr={}\_tabskip=\_zoskip \_halign} % initialized \halign
+\_newcount\_mscount
+\_def \_multispan #1{\_omit \_mscount=#1\_relax
+ \_loop \_ifnum\_mscount>1 \_spanA \_repeat}
+\_def \_spanA {\_span\_omit \_advance\_mscount by-1 }
+
+\_public \hidewidth \ialign \multispan ;
+
+ \_doc -----------------------------
+ Tabbing macros are omitted because they are obsolete.
+ \nl
+ Indentation and others. \`\textindent`, \`\item`, \`\itemitem`,
+ \`\narrower`, \`\raggedright`, \`\ttraggedright`, \`\leavevmode`.
+ \_cod -----------------------------
+
+\_def \_hang {\_hangindent\_parindent}
+\_def \_textindent #1{\_indent\_llap{#1\_enspace}\_ignorespaces}
+\_def \_item {\_par\_hang\_textindent}
+\_def \_itemitem {\_par\_indent \_hangindent2\_parindent \_textindent}
+\_def \_narrower {\_advance\_leftskip\_parindent
+ \_advance\_rightskip\_parindent}
+\_def \_raggedright {\_rightskip=0pt plus2em
+ \_spaceskip=.3333em \_xspaceskip=.5em\_relax}
+\_def \_ttraggedright {\_tt \_rightskip=0pt plus2em\_relax} % for use with \tt only
+\_def \_leavevmode {\_unhbox\_voidbox} % begins a paragraph, if necessary
+
+\_public \hang \textindent \item \itemitem \narrower \raggedright \ttraggedright \leavevmode ;
+
+ \_doc -----------------------------
+ Few character codes are set for backward compatibility. But old obscurities
+ (from plain TeX) based on \`\mathhexbox`
+ are not supported -- an error message and recommendation
+ to directly using of the desired character is implemented by the
+ \`\_usedirectly` macro).
+ The user can re-define these control sequences of course.
+ \_cod -----------------------------
+
+%\chardef\%=`\%
+\_let\% = \_pcent % more natural, can be used in lua codes.
+\_chardef\&=`\&
+\_chardef\#=`\#
+\_chardef\$=`\$
+\_chardef\ss="FF
+\_chardef\ae="E6
+\_chardef\oe="F7
+\_chardef\o="F8
+\_chardef\AE="C6
+\_chardef\OE="D7
+\_chardef\O="D8
+\_chardef\i="11 \chardef\j="12 % dotless letters
+\_chardef\aa="E5
+\_chardef\AA="C5
+\_chardef\S="9F
+\_def\l{\_errmessage{\_usedirectly ł}}
+\_def\L{\_errmessage{\_usedirectly Ł}}
+%\def\_{\_ifmmode \kern.06em \vbox{\hrule width.3em}\else _\fi} % obsolete
+\_def\_{\_hbox{_}}
+\_def\dag{\_errmessage{\_usedirectly †}}
+\_def\ddag{\_errmessage{\_usedirectly ‡}}
+%\_def\copyright{\_errmessage{\_usedirectly ©}}
+\_def\copyright{©} % << example, what to do
+%\_def\Orb{\_mathhexbox20D} % obsolete (part of Copyright)
+%\_def\P{\_mathhexbox27B} % obsolete
+
+\_def \_usedirectly #1{Load Unicoded font by \string\fontfam\space and use directly #1}
+\_def \_mathhexbox #1#2#3{\_leavevmode \_hbox{$\_math \_mathchar"#1#2#3$}}
+\_public \mathhexbox ;
+
+ \_doc -----------------------------
+ Accents.
+ The macros \`\ooalign`, \`\d`, \`\b`, \`\c`, \`\dots`,
+ are defined for backward compatibility.
+ \_cod -----------------------------
+
+\_def \_oalign #1{\_leavevmode\_vtop{\_baselineskip=0pt \_lineskip=.25ex
+ \_ialign{##\_crcr#1\_crcr}}}
+\_def \_oalignA {\_lineskiplimit=0pt \_oalign}
+\_def \_ooalign {\_lineskiplimit=-\_maxdimen \_oalign} % chars over each other
+\_def \_shiftx #1{\_dimen0=#1\_kern\_ea\_ignorept \_the\_fontdimen1\_font
+ \_dimen0 } % kern by #1 times the current slant
+\_def \_d #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-1ex}.\_hidewidth}}}
+\_def \_b #1{{\_oalignA{\_relax#1\_crcr\_hidewidth\_shiftx{-3ex}%
+ \_vbox to.2ex{\_hbox{\_char\_macron}\_vss}\_hidewidth}}}
+\_def \_c #1{{\_setbox0=\_hbox{#1}\_ifdim\_ht0=1ex\_accent\_cedilla #1%
+ \_else\_ooalign{\_unhbox0\_crcr\_hidewidth\_cedilla\_hidewidth}\_fi}}
+\_def\_dots{\_relax\_ifmmode\_ldots\_else$\_math\_ldots\_thinsk$\_fi}
+\_public \oalign \ooalign \d \b \c \dots ;
+
+ \_doc -----------------------------
+ The accents commands like `\v`, `\.`, `\H`, etc. are not defined. Use the
+ accented characters directly -- it is best solution. But you can use the
+ macro \`\oldaccents` which defines accented macros.
+ \nl
+ Much more usable is to define these control sequences to other purposes.
+ \_cod -----------------------------
+
+\_def \_oldaccents {%
+ \_def\`##1{{\_accent\_tgrave ##1}}%
+ \_def\'##1{{\_accent\_tacute ##1}}%
+ \_def\v##1{{\_accent\_caron ##1}}%
+ \_def\u##1{{\_accent\_tbreve ##1}}%
+ \_def\=##1{{\_accent\_macron ##1}}%
+ \_def\^##1{{\_accent\_circumflex ##1}}%
+ \_def\.##1{{\_accent\_dotaccent ##1}}%
+ \_def\H##1{{\_accent\_hungarumlaut ##1}}%
+ \_def\~##1{{\_accent\_ttilde ##1}}%
+ \_def\"##1{{\_accent\_dieresis ##1}}%
+ \_def\r##1{{\_accent\_ring ##1}}%
+}
+\_public \oldaccents ;
+
+% ec-lmr encoding (will be changed after \fontfam macro):
+\_chardef\_tgrave=0
+\_chardef\_tacute=1
+\_chardef\_circumflex=2
+\_chardef\_ttilde=3
+\_chardef\_dieresis=4
+\_chardef\_hungarumlaut=5
+\_chardef\_ring=6
+\_chardef\_caron=7
+\_chardef\_tbreve=8
+\_chardef\_macron=9
+\_chardef\_dotaccent=10
+\_chardef\_cedilla=11
+
+\_def \_uniaccents {% accents with Unicode
+ \_chardef\_tgrave="0060
+ \_chardef\_tacute="00B4
+ \_chardef\_circumflex="005E
+ \_chardef\_ttilde="02DC
+ \_chardef\_dieresis="00A8
+ \_chardef\_hungarumlaut="02DD
+ \_chardef\_ring="02DA
+ \_chardef\_caron="02C7
+ \_chardef\_tbreve="02D8
+ \_chardef\_macron="00AF
+ \_chardef\_dotaccent="02D9
+ \_chardef\_cedilla="00B8
+ \_chardef\_ogonek="02DB
+ \_let \_uniaccents=\_relax
+}
+
+ \_doc -----------------------------
+ The last part of plain \TeX/ macros.
+ \`\hrulefill`, \`\dotfill`, \`\rightarrowfill`, \`\leftarrowfill`,
+ \`\magnification`, \`\bye`.
+ Math macros are defined in the `math-macros.opm` file.
+ \_cod -----------------------------
+
+
+\_def \_hrulefill {\_leaders\_hrule\_hfill}
+\_def \_dotfill {\_cleaders\_hbox{$\_math \_mkern1.5mu.\_mkern1.5mu$}\_hfill}
+\_def \_rightarrowfill {$\_math\_smash-\_mkern-7mu%
+ \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill
+ \_mkern-7mu\_mathord\_rightarrow$}
+\_def \_leftarrowfill {$\_math\_mathord\_leftarrow\_mkern-7mu%
+ \_cleaders\_hbox{$\_mkern-2mu\_smash-\_mkern-2mu$}\_hfill
+ \_mkern-7mu\_smash-$}
+
+\_public \hrulefill \dotfill \rightarrowfill \leftarrowfill ;
+
+% \downbracefill \upbracefill will be re-defined when Unicode-math is used
+\_mathchardef \_braceld="37A \_mathchardef \_bracerd="37B
+\_mathchardef \_bracelu="37C \_mathchardef \_braceru="37D
+\_def \downbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}%
+ \_braceld \_leaders\_vrule height\_ht0 depth0pt \_hfill \_braceru
+ \_bracelu \_leaders\_vrule height\_ht0 depth0pt \_hfill \_bracerd$}
+\_def \upbracefill {$\_math \_setbox0=\_hbox{$\_braceld$}%
+ \_bracelu \_leaders\_vrule height\_ht0 depth0pt \_hfill \_bracerd
+ \_braceld \_leaders\_vrule height\_ht0 depth0pt \_hfill \_braceru$}
+
+\_def \_magnification {\_afterassignment \_magA \_count255 }
+\_def \_magA {\_mag=\_count255 \_truedimen\_hsize \_truedimen\_vsize
+ \_dimen\_footins=8truein
+}
+% only for backward compatibility, but \margins macro is preferred.
+\_public \magnification ;
+
+\_def \_showhyphens #1{\_setbox0=\_vbox{\_parfillskip=0pt \_hsize=\_maxdimen \_tenrm
+ \_pretolerance=-1 \tolerance=-1 \hbadness=0 \showboxdepth=0 \ #1}}
+
+\_def \_bye {\_par \_vfill \_supereject \_end}
+\_public \bye ;
+
+\_endcode % -------------------------------------
+
diff --git a/macros/luatex/optex/base/prefixed.opm b/macros/luatex/optex/base/prefixed.opm
new file mode 100644
index 0000000000..799cc923f9
--- /dev/null
+++ b/macros/luatex/optex/base/prefixed.opm
@@ -0,0 +1,275 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \public {Prefixing and code syntax <2020-02-14>} % preloaded in format
+
+ \_doc ---------
+ All \TeX/ primitives have alternative control sequence `\_hbox` `\_string`, ...
+ \_cod ---------
+
+\let\_directlua = \directlua
+\_directlua {
+ % enable all TeX primitives with _ prefix
+ tex.enableprimitives('_', tex.extraprimitives('tex'))
+ % enable all primitives without prefixing
+ tex.enableprimitives('', tex.extraprimitives())
+ % enable all primitives with _ prefix
+ tex.enableprimitives('_', tex.extraprimitives())
+}
+
+ \_doc ------------------
+ \`\ea` is useful shortcut for `\expandafter`. We recommend to use always the
+ private form of \`\_ea`
+ because there is high probability that `\ea` will be redefined by the user.
+ \nl
+ \`\public` `<sequence> <sequence> ... ;` does
+ `\let \<sequence> = \_<sequence>` for all sequences.
+ \nl
+ \`\private` `<sequence> <sequence> ...;` does
+ `\let \_<sequence> = \<sequence>` for all sequences.
+ \nl
+ \`\xargs` `<what> <sequence> <sequence> ... ;`
+ does `<what><sequence>` for each sequences.
+ \_cod -----------------
+
+\_let\_ea =\_expandafter % usefull shortcut
+
+\_long\_def \_xargs #1#2{\_ifx #2;\_else \_ea#1\_ea#2\_ea\_xargs \_ea #1\_fi}
+
+\_def \_pkglabel{}
+\_def \_public {\_xargs \_publicA}
+\_def \_publicA #1{\_ea\_let \_ea#1\_csname \_pkglabel _\_csstring #1\_endcsname}
+
+\_def \_private {\_xargs \_privateA}
+\_def \_privateA #1{\_ea\_let \_csname \_pkglabel _\_csstring #1\_endcsname =#1}
+
+\_public \public \private \xargs \ea ;
+
+ \_doc -----------------------
+ Each macro file should begin with \`\_codedecl` `\macro {<info>}`.
+ If the `\macro` is defined already then the `\endpinput` protects to read
+ such file more than one times. Else the <info> is printed to the terminal
+ and the file is read.\nl
+ The {\`\_endcode`} is defined as `\endinput` in the `optex.ini` file.
+ \`\wterm` `{<text>}` prints `<text>`
+ to the terminal and to the `.log` file (as in plain \TeX/).
+ \_cod -----------------------
+
+\_def \_codedecl #1#2{%
+ \_ifx #1\_undefined \_wterm{#2}%
+ \_else \_expandafter \_endinput \_fi
+}
+\_def \_wterm {\_immediate \_write16 }
+
+\_public \wterm ;
+
+ \_doc ------------------------
+ The `\optexversion` and `\fmtname` are defined in the `optex.ini` file.
+ Maybe, somebody will need a private version of these macros.
+ \_cod ------------------------
+
+\_private \optexversion \fmtname ;
+
+ \_doc -----------------------------
+ The `\_mathsbon` and `\_mathsboff` are defined in `math-macros.opm` file.
+ Now, we define the macro \`\_namespace` `{<pkg label>}` for package writers, see
+ section~\ref[pkg-namespace].
+ \_cod -----------------------------
+
+\_def\_namespace #1{%
+ \_ifcsname namesp:#1\_endcsname \_errmessage
+ {The name space "#1" is used already, it cannot be used twice}%
+ \_endinput
+ \_else
+ \_ea \_gdef \_csname namesp:#1\_endcsname {}%
+ \_gdef \_pkglabel{_#1}%
+ \_directlua{
+ callback.register("process_input_buffer",
+ function (str)
+ return string.gsub(str, "\_nbb[.]([a-zA-Z])", "\_nbb _#1_\_pcent 1")
+ end )
+ }%
+ \_gdef \_endcode {%
+ \_ifmathsb \_mathsbon \_else \_mthsboff \_fi
+ \_gdef \_pkglabel{_#1}%
+ \_global \_let \_endcode=\_endinput
+ \_endinput }%
+ \_fi
+}
+
+\_endcode %----------------------------------------------------
+
+
+\sec Concept of name spaces of control sequences
+
+\secc Prefixing internal control sequences
+
+All control sequences used in \OpTeX/ are used and defined with `_` prefix.
+The user can be sure that when he/she does `\def\foo` then internal macros of
+\OpTeX/ nor \TeX/ primitives will be not damaged. For example
+`\def\if{...}` will not damage macros because \OpTeX/'s macros
+are using `\_if` instead of `\if`.
+
+All \TeX/ primitives are initialized with two representative control
+sequences: `\word` and `\_word`, for example `\hbox` and `\_hbox`.
+The first alternative is reserved for users or such control sequences
+can be re-defined by user.
+
+\OpTeX/ sets the character `_` as letter, so it can be used in
+control sequences. When a control sequence begins with this character
+then it means that it is a primitive or it is used in \OpTeX/ macros as
+internal. User can redefine such prefixed control sequence only
+if he/she explicitly know what happens.
+
+We never change catcode of `_`, so internal macros can be
+redefined by user without problems if it is desired. We need not
+something like `\makealetter` from \LaTeX/.
+
+\OpTeX/ defines all new macros as prefixed. For public usage of such macros
+we need to set non-prefixed version. This is done by
+
+\begtt
+\public <list of control sequences> ;
+\endtt
+
+For example \^`\public`` \foo \bar ;` does `\let\foo=\_foo`, `\let\bar=\_bar`.
+
+At the end of each code segment in \OpTeX/, the `\_public` macro is used. You
+can see, what macros are defined for public usage in such code segment.
+
+The macro \^`\private` does a reverse job to `\public` with the same syntax.
+For example `\private \foo \bar ;` does `\let\_foo=\foo`, `\let\_bar=\bar`.
+This should be used when unprefixed variant of control sequence is declared
+already but we need the prefixed variant too.
+
+In this documentation: if both variants of a control sequence are declared
+(prefixed and unprefixed), then the accompanying text mentions only
+unprefixed variant. The code typically defines prefixed variant
+and then the \^`\public` (or `\_public`) macro is used.
+
+\secc Name space of control sequences for users
+
+User can define or declare any control sequence with a name without any `_`.
+This does not make any problem. Only one exception is the reserved control
+sequence `\par`. It is generated by tokenizer (at empty lines)
+and used as internal in \TeX/.
+
+User can define or declare control sequences with `_` character, for
+example `\my_control_sequence`, but with the following exceptions:
+
+\begitems
+* Control sequences which begin with `_` are reserved for \TeX/ primitives,
+ \OpTeX/ internal macros and macro package writers.
+* Control sequences (terminated by non-letter) in the form
+ `\<word>_` or `\<word>_<one-letter>`, where
+ <word> is a sequence of letters, are unaccessible, because they
+ are interpreted as `\<word>` followed by `_` or as `\<word>` followed by
+ `_<one-letter>`. This is important for writing math, for example:
+\begtt \adef-{_}
+ \int-a^b ... is interpreted as \int _a^b
+ \max-M ... is interpreted as \max _M
+ \alpha-{ij} ... is interpreted as \alpha _{ij}
+\endtt
+ This feature is implemented using lua code at input processor level, see
+ the section~\ref[math-macros] for more details. You can deactivate this feature by
+ \^`\mathsboff`. After this, you can still write
+ `$`$\int$`_a^b$` (Unicode) or `$\int _a^b$` % $∫_a^b$ (Unicode) or $\int _a^b$
+ without problems but `\int``_a^b` yields to undefined control sequence
+ `\int``_a`. You can activate this feature again by \^`\mathsbon`. The
+ effect will take shape from next line read from input file.
+* Control sequences in the form `\_<pkg>_<word>` is intended for package
+ writers as internal macros for a package with `<pkg>` identifier,
+ see section~\ref[pkg-namespace].
+\enditems
+
+The single letter control sequences like `\%`, `\$`, `\^` etc. are not used
+in internal macros. User can redefine them, but (of course) some classical
+features can be lost (printing percent character by `\%` for example).
+
+\secc Macro files syntax
+
+Each segment of \OpTeX/ macros is stored in one file with `.opm` extension
+(means OPtex Macros). Your local macros should be in normal `*.tex` file.
+
+The code in macro files starts by \^`\_codedecl` and ends by \^`\_endcode`.
+The \^`\_endcode` is equivalent for `\endinput`, so documentation can follow.
+The \^`\_codedecl` has syntax:
+
+\begtt
+\_codedecl \sequence {Name <version>}
+\endtt
+
+If the mentioned `\sequence` is defined, then \^`\_codedecl` does the same as
+`\endinput`: this protect from reading the file twice. We suppose, that
+`\sequence` is defined in the macro file.
+
+It is possible to use the \^`\_doc` ... \^`\_cod` pair between the macro lines.
+The documentation text should be here. It is ignored when macros are read
+but it can be printed using `doc.opm` macros like in this documentation.
+
+
+\secc[pkg-namespace] Name spaces for package writers
+
+Package writer should use internal names in the form `\_<pgk>_<sequence>`,
+where `<pkg>` is a package label. For example:
+`\_qr_utfstring` from `qrcode.opm` package.
+
+The package writer needs not write repeatedly `\_pkg_foo` `\_pkg_bar`
+etc.\ again and again in the macro file.\fnote
+{We have not adatped the idea from expl3 language:)}
+When the \^`\_namespace` `{<pkg>}`
+is declared at the beginning of the macro file then all occurrences of
+`\.foo` will be replaced by `\_<pkg>_foo` at the input processor level.
+The macro writer can write (and backward can read his/her code) simply with
+`\.foo`, `\.bar` control sequences and `\_<pkg>_foo`, `\_<pkg>_bar`
+control sequences are processed internally.
+The scope of the \^`\_namespace` command ends at the \^`\_endcode` command
+or when another \^`\_namespace` is used. This command checks
+if the same package label is not declared by the \^`\_namespace` twice.
+
+The \^`\public` macro does `\let\foo = \_<pkg>_foo` when
+\^`\_namespace{<pkg>}` is declared. And the \^`\private` macro does reverse
+operation to it. Example: you can define `\def\.macro{...}` and then
+set it to the user name space by `\_public \macro;`.
+
+If the package writer needs to declare a control
+sequence by \^`\newif`, then there is an exception of the rule described above. Use
+\^`\_newifi\_if<pkg>_bar`, for example `\_newifi\_ifqr_incorner`.
+Then the control sequences `\_qr_incornertrue` and
+`\_qr_incornerfalse` can be used (or the sequences `\.incornertrue`
+and `\.incornerfalse` when `\_namespace{qr}` is used).
+
+
+\secc Summary about rules for external macro files published for \OpTeX/
+
+If you are writting a macro file which is intended to be published for
+\OpTeX/, then you are greatly welcome. You should follow these rules:
+
+\begitems
+* Don't use a control sequences from user name space in the macro
+ bodies if there is not explicit and documented reason to do this.
+* Don't declare control sequences in the user name space if there is not
+ explicit and documented reason to do this.
+* Use control sequences from \OpTeX/ and primitive name space
+ in read only mode if there is not explicit and documented reason to
+ redefine them.
+* Use `\_<pkg>_<name>` for your internal macros or `\.<name>` if the
+ \^`\_namespace{<pkg>}` is declared. See section~\ref[pkg-namespace].
+* Use \^`\load` (or better: `\_load`) for loading more external macros
+ if you need them. Don't use `\_input` explicitly in such cases.
+ The reason is: the external macro file is not loaded
+ twice if another macro or the user needs it explicitly too.
+* Use \^`\_codedecl` as your first command in the macro file and
+ \^`\_endcode` to close the text of macros.
+* Use \^`\_doc` ... \^`\_cod` pairs for documenting the code pieces and/or write
+ more documentation after the \^`\_endcode` command.
+\enditems
+
+If the macro file accepts these recommendations then it should be
+named by `<filename>.opm` where `<filename>` differs from file names
+used directly in \OpTeX/ and from other published macros.
+This extension `opm` has a precedence before `.tex` when
+the \^`\load` macro is used.
+
+The `qrcode.opm` is first example how an external macro file for \OpTeX/
+can look like.
+
diff --git a/macros/luatex/optex/base/ref-file.opm b/macros/luatex/optex/base/ref-file.opm
new file mode 100644
index 0000000000..52ace30b8d
--- /dev/null
+++ b/macros/luatex/optex/base/ref-file.opm
@@ -0,0 +1,137 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \openref {File for references <2020-02-14>} % preloaded in format
+
+ \_doc --------------------------
+ The \`\_inputref` macro is used in `\everyjob`. It reads `\jobname.ref` file
+ if it exists. After the file is read then it is removed and opened to write
+ a new contents to this file.
+ \_cod --------------------------
+
+\_newwrite\_reffile
+
+\_def\_inputref {%
+ \_isfile{\_jobname.ref}\_iftrue
+ \_input {\_jobname.ref}
+ \_gfnotenum=0 \_lfnotenum=0 \_mnotenum=0
+ \_openrefA{\_string\_inputref}%
+ \_fi
+}
+
+ \_doc --------------------------
+ If the file does not exists then it is not created by default. It means that if you
+ process a document without any forward references then no `\jobname.ref`
+ file is created because it is unusable. The \^`\_wref` macro is dummy in
+ such case.
+ \_cod --------------------------
+
+\_def\_wrefrelax#1#2{}
+\_let\_wref=\_wrefrelax
+
+ \_doc ---------------------
+ If a macro needs to ceate and to use `.ref` file then such macro must use
+ \`\openref`. When the file is created (using internal \`\_openrefA`) then
+ the \`\_wref` `\<macro>{<data>}` is redefined in order to
+ save the line `\<macro><data>` to the `.ref` file using asynchronous
+ `\write` primitive. Finally, the `\_openref` destroys itself, because we
+ need not to open the file again.
+ \_cod ---------------------
+
+\_def\_openref {%
+ \_ifx \_wref\_wrefrelax \_openrefA{\_string\openref}\_fi
+ \_gdef\_openref{}%
+}
+\_def\_openrefA #1{%
+ \_immediate\_openout\_reffile="\_jobname.ref"\_relax
+ \_gdef\_wref ##1##2{\_write\_reffile{\_string##1##2}}%
+ \_immediate\_write\_reffile {\_pcent\_pcent\_space OPTeX <\_optexversion> - REF file (#1)}%
+ \_immediate\_wref \Xrefversion{{\_REFversion}}%
+}
+\def\openref{\_openref}
+
+ \_doc ----------------------
+ We are using convention that the macros used in `.ref` file are named
+ `\_X<foo>`. If there is a new version of \OpTeX/ with different collection
+ of such macros then we don't want to read the `.ref` files produced by an
+ old version of \OpTeX/ or by OPmac. So first line of `.ref` file is in
+ the form
+ \begtt \catcode`\<=13
+ \Xrefversion{<version>}
+ \endtt
+ We can check the version compatibility by this macro.
+ Because OPmac does not understand `\_Xrefversion` we use
+ \`\Xrefversion` (with different number of `<version>` form OPmac) here.
+ The result: OPmac skips the `.ref` files produced by \OpTeX/ and vice
+ versa.
+ \_cod ----------------------
+
+\_def\_REFversion{3} % actual version of .ref files in OpTeX
+\_def\_Xrefversion#1{\_ifnum #1=\_REFversion\_relax \_else \_endinput \_fi}
+\_public \Xrefversion ; % we want to ignore .ref files generated by OPmac
+
+ \_doc -----------------------
+ You cannot define your special `.ref` macros before `.ref` file is read
+ because it is read in `\everyjob`. But you can define such macros using
+ \`\refdecl``{<definitions of your ref macros>}`.
+ This command sends to `.ref` file your `<definitions of your ref macros>`
+ immediately. Next lines in `.ref` file should include our macros. Example
+ from CTUstyle2:
+ \begtt
+ \refdecl{%
+ \def\totlist{} \def\toflist{}^^J
+ \def\Xtab#1#2#3{\addto\totlist{\totline{#1}{#2}{#3}}}^^J
+ \def\Xfig#1#2#3{\addto\toflist{\tofline{#1}{#2}{#3}}}
+ }
+ \endtt
+ We must read `<definition of your ref macros>` when catcode of `#` is 12
+ because we needn't to duplicate each `#` in the `.ref` file.
+ \_cod \_fin -----------------
+
+\_def\_refdecl{\_bgroup \_catcode`\#=12 \_refdeclA}
+\_def\_refdeclA #1{\egroup\_openref
+ \_immediate\_write\_reffile {\_pcent\_space \_string \refdecl:}%
+ \_immediate\_write\_reffile {\_detokenize{#1}}%
+}
+\_public \refdecl ;
+
+\_endcode % ================================================
+
+
+The `.ref` file has the name `\jobname.ref` and
+it saves information about references, TOC lines, etc.
+All data needed in next \TeX/ run are saved here.
+\OpTeX/ reads this file at the beginning of the document
+(using `\everyjob`) if such file exists.
+The `.ref` file looks like:
+
+\begtt \catcode`\<=13
+\Xrefversion{<ref-version>}
+\_Xpage{<gpageno>}{<pageno>}
+\_Xtoc{<level>}{<type>}{<text>}{<title>}
+\_Xlabel{<label>}{<text>}
+\_Xlabel{<label>}{<text>}
+...
+\_Xpage{<gpageno>}{<pageno>}
+\_Xlabel{<label>}{<text>}
+...
+\endtt
+%
+where <gpageno> is internal page number globally numbered from one and
+`<pageno>` is a page number (`\the\pageno`) used in pagination (they may be differ).
+Each page begins with `\_Xpage`.
+The `<label>` is a label used by user in `\label[<label>]` and `<text>` is a
+text which should be referenced (the number of section or table, for
+example `2.3.14`). The `<title>` is a title of the chapter (`<level>`=1,
+`<type>`=`chap`), section (`<level>`=2, `<type>`=`sec`), subsection
+(`<level>`=3, `<type>`=`secc`). The `\_Xpage` is written at begining of each
+page, the `\_Xtoc` is written when chapter or section or subsection title
+exists on the page and `\_Xlabel` when labeled object prefixed by
+`\label[<label>]` exists on the page.
+
+The `.ref` file is read when the processing of the document starts using
+`\everyjob`. It is read, removed and opened to writing immediately.
+But the `.ref` file should be missing. If none forward references are needed
+in the document then `.ref` file is not created. For example, you only want
+to test a simple plain \TeX/ macro, you create `test.tex` file, you do
+`optex test` and you don't need to see empty `test.ref` file in your directory.
+
diff --git a/macros/luatex/optex/base/references.opm b/macros/luatex/optex/base/references.opm
new file mode 100644
index 0000000000..5aaf36a87a
--- /dev/null
+++ b/macros/luatex/optex/base/references.opm
@@ -0,0 +1,86 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \ref {References <2020-03-03>} % preloaded in format
+
+ \_doc ----------------------------
+ \`\_Xpage` `{<gpageno>}{<pageno>}` saves the parameter pair into \`\_currpage`.
+ Resets `\_lfnotenum`; it is used if footnotes are numbered from one at each page.
+ \_cod ----------------------------
+
+\_def\_Xpage#1#2{\_def\_currpage{{#1}{#2}}\_lfnotenum=0 }
+
+ \_doc ----------------------------
+ \`\_Xlabel` `{<label>}{<text>}` saves the <text> to `\_lab:<label>` and saves
+ `[pg:<gpageno>]{<pageno>}` to `\_pgref:<label>`.
+ \_cod ----------------------------
+
+\_def\_Xlabel#1#2{\_sdef{_lab:#1}{#2}\_sxdef{_pgref:#1}{\_ea\_bracketspg\_currpage}}
+\_def\_bracketspg#1#2{[pg:#1]{#2}}
+
+ \_doc ----------------------------
+ \`\label``[<label>]` saves the decalred label to `\_lastlabel` and
+ \`\wlabel``{<text>}` uses the `\_lastlabel` and activates
+ `\wref\_Xlabel{<label>}{<text>}`.
+ \_cod ----------------------------
+
+\_def\_label[#1]{\_isempty{#1}\_iftrue \_global\_let \_lastlabel=\_undefined
+ \_else \_isdefined{l0:#1}%
+ \_iftrue \_opwarning{duplicated label [#1], ignored}\_else \_xdef\_lastlabel{#1}\_fi
+ \_fi \_ignorespaces
+}
+\_def\_wlabel#1{%
+ \_ifx\_lastlabel\_undefined \_else
+ \_dest[ref:\_lastlabel]%
+ \_printlabel\_lastlabel
+ \_edef\_tmp{{\_lastlabel}{#1}}%
+ \_ea\_wref \_ea\_Xlabel \_ea{\_tmp}%
+ \_sxdef{_lab:\_lastlabel}{#1}\_sxdef{l0:\_lastlabel}{}%
+ \_global\_let\_lastlabel=\_undefined
+ \_fi
+}
+\_public \label \wlabel ;
+
+ \_doc ----------------------------
+ \`\ref``[<label>]` uses saved `\_lab:<label>` and prints (linked) `<text>`.
+ If the reference is backwarded then we know `\lab:<label>` without any need
+ to read REF file. On the other hand, if the reference is forwarded, then we
+ doesn't know `\_lab:<label>` in first run of \TeX/ and we print warning and
+ do `\_openref`.
+ \nl
+ \`\pgref``[<label>]` uses `{<gpageno>}{<pageno>}` from `\_pgref:<label>` and
+ prints (linked) `<pageno>` using `\_ilink` macro.
+ \_cod ----------------------------
+
+\_def\_ref[#1]{\_isdefined{_lab:#1}%
+ \_iftrue \_ilink[ref:#1]{\_csname _lab:#1\_endcsname}%
+ \_else ??\_opwarning{label [#1] unknown. Try to TeX me again}\_openref
+ \_fi
+}
+\_def\_pgref[#1]{\_isdefined{_pgref:#1}%
+ \_iftrue \_ea\_ea\_ea\_ilink \_csname _pgref:#1\_endcsname
+ \_else ??\_opwarning{pg-label [#1] unknown. Try to TeX me again}\_openref
+ \_fi
+}
+\_public \ref \pgref ;
+
+ \_doc -----------------------------
+ Default \`\_printlabel` is empty macro (labels are not printed).
+ The \`\showlabels` redefines it as box with zero dimensions and
+ with left lapped `[<label>]` in blue 10pt `\tt` font shifted up by 1.7ex.
+ \_cod -----------------------------
+
+\_def\_printlabel#1{}
+\_def\_showlabels {%
+ \_def\_printlabel##1{\_vbox to0pt{\_vss\_llap{\_labelfont[##1]}\_kern1.7ex}}%
+ \_fontdef\_labelfont{\_setfontsize{at10pt}\setfontcolor{blue}\_tt}
+}
+\_public \showlabels ;
+
+\_endcode %------------------------------------------
+
+
+If the references are \"forward" (i.~e. the `\ref` is used first, the destination
+is created later) or if the reference text is page number then we must read
+`.ref` file first in order to get appropriate information.
+See section \ref[ref-file] for more information about `.ref` file concept.
+
diff --git a/macros/luatex/optex/base/sections.opm b/macros/luatex/optex/base/sections.opm
new file mode 100644
index 0000000000..45a3e61d28
--- /dev/null
+++ b/macros/luatex/optex/base/sections.opm
@@ -0,0 +1,411 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \chap {Titles, chapters, sections, subsections <2020-03-28>} % preloaded in format
+
+ \_doc ---------------------------
+ We are using scaled fonts for titles
+ \`\_titfont`, \`\_chapfont`, \`\_secfont` and \`\_seccfont`.
+ They are scaled from main fonts size
+ of the document, which is declared by first `\typosize[<fo-size>/<b-size>]`
+ command.
+ \_cod ---------------------------
+
+\_def \_titfont {\_scalemain\_typoscale[\_magstep4/\_magstep5]\_boldify}
+\_def \_chapfont {\_scalemain\_typoscale[\_magstep3/\_magstep3]\_boldify}
+\_def \_secfont {\_scalemain\_typoscale[\_magstep2/\_magstep2]\_boldify}
+\_def \_seccfont {\_scalemain\_typoscale[\_magstep1/\_magstep1]\_boldify}
+
+ \_doc ---------------------------
+ The \`\tit` macro is defined by `\eoldef`, it means that the parameter is
+ separated by end of line. The macros `\chap`, `\sec` and `\secc` use
+ `\eoldef` too.
+ \_cod ---------------------------
+
+\_eoldef\_tit #1{\_vglue\_titskip
+ {\_leftskip=0pt plus1fill \_rightskip=\_leftskip % centering
+ \_titfont \_noindent #1\_par}%
+ \_nobreak\_bigskip
+}
+\_public \tit ;
+
+ \_doc ---------------------------
+ You can re-define \`\_printchap`, \`\_printsec` or \`\_printsecc` macros if
+ another design of section titles is needed. These macros gets the
+ `<title>` text in its parameter. The common recommendations for these macros are:
+ \begitems
+ * Use \^`\_abovetitle``{<penaltyA>}{<skipA>}` and \^`\_belowtitle``{<skipB>}`
+ for inserting vertical material above and below the section title.
+ The arguments of these macros are normally used, i.\,e.\ \^`\_abovetitle`
+ inserts `<penaltyA><skipA>` and \^`\_belowtitle` inserts `<skipB>`.
+ But there is an
+ exception: if \^`\_belowtitle``{<skipB>}` is immediately followed by
+ \^`\_abovetitle``{<penaltyA>}{<skipA>}` (for example section title is
+ immediately followed by subsection title), then only `<skipA>` is generated,
+ i.\,e.\ `<skipB><penaltyA><skipA>` is reduced only to `<skipA>`.
+ The reason of such behavior: we don't want to duplicate vertical skip
+ and we don't want to use negative penalty in such cases.
+ Moreover, \^`\_abovetitle``{<penaltyA>}{<skipA>}` takes previous whatever
+ vertical skip (other than from `\_belowtitle`) and generates only
+ greater from this pair of skips. It means that `<whatever-skip><penaltyA><skipA>`
+ is transformed to `<penaltyA>`max(`<whatever-skip><skipA>`).
+ The reason of such behavior: we don't want to
+ duplicate vertical skips (from `\_belowlistskip`, for example) above the title.
+ * Use \^`\_printrefnum``[<pre>@<post>]` in horizontal mode. It prints
+ `<pre><ref-num><post>`. The `<ref-num>` is \^`\_thechapnum` or \^`\_thesecnum`
+ or \^`\_theseccnum` depending on what type o title is processed.
+ If \^`\nonum` prefix is used then \^`\_printrefnum` prints nothing.
+ The macro \^`\_printrefnum` does more work: it creates destination of hyperlinks
+ (if \^`\hyperlinks``{}{}` is used) and saves references from label (if
+ \^`\label``[<label>]` precedes) and saves references for table of contents
+ (if \^`\maketoc` is used).
+ * Use \^`\nbpar` for closing the paragraph for printing title. This
+ command inserts `\_nobreak` between each line of such paragraph, so
+ the title cannot be broken to more pages.
+ * You can use \^`\_firstnoindent` in order to the first paragraph after
+ the title is not indented.
+ \enditems
+ \_cod ---------------------------
+
+\_def\_printchap #1{\_vfill\_supereject
+ {\_chapfont \_noindent \_mtext{chap} \_printrefnum[@]\_par
+ \_nobreak\_smallskip
+ \_noindent \_raggedright #1\_nbpar}\_mark{}%
+ \_nobreak \_belowtitle{\_bigskip}%
+ \_firstnoindent
+}
+\_def\_printsec#1{\_par
+ \_abovetitle{\_penalty-400}\_bigskip
+ {\_secfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}%
+ \_nobreak \_belowtitle{\_medskip}%
+ \_firstnoindent
+}
+\_def\_printsecc#1{\_par
+ \_abovetitle{\_penalty-200}\_medskip
+ {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}%
+ \_nobreak \_belowtitle{\_medskip}%
+ \_firstnoindent
+}
+
+ \_doc --------------------------
+ The \`\_sectionlevel` is the level of the printed section:
+ \begitems
+ * `\_sectionlevel=0` -- reserved for parts of the book (unused by default)
+ * `\_sectionlevel=1` -- chapters (used in `\chap`)
+ * `\_sectionlevel=2` -- sections (used in `\sec`)
+ * `\_sectionlevel=3` -- subsections (used in `\secc`)
+ * `\_sectionlevel=4` -- subsubsections (unused by default)
+ \enditems
+ \_cod --------------------------
+
+\_newcount\_sectionlevel
+\_def \_secinfo {\_ifcase \_sectionlevel
+ part\_or chap\_or sec\_or secc\_or seccc\_fi
+}
+
+ \_doc --------------------------
+ The \`\_chapx` initializes counters used in chapters,
+ the \`\_secx` initializes counters in sections
+ and \`\_seccx` initializes counters in subsections.
+ If you have more types of numbered objects in your document then you can
+ declare appropriate counters and do `\addto\_chapx{\yourcounter=0 }`
+ for example. If you have another concept of numbering objects used in your
+ document, you can re-define these macros. All settings here are global
+ because it is used by `{\_globaldefs=1 \_chapx}`.
+
+ Default concept: Tables, figuers and display maths are numbered
+ from one in each section -- subsetions doesn't reset these counters.
+ Footnotes declared by \^`\fnotenumchapters` are numbered in each chapter
+ from one.
+
+ The `\_the*` macros
+ \`\_thechapnum`, \`\_thesecnum`, \`\_theseccnum`,
+ \`\_thetnum`, \`\_thefnum` and \`\_thednum`
+ include the format of numbers used when the object
+ is printing. If chapter is never used in the document then `\_chapnum=0`
+ and \`\_othe``\_chapnum.` expands to empty. Sections have numbers <num> and
+ subsections <num>.<num>. On the other hand, if chapter is used in the
+ document then `\_chapnum>0` and sections have numbers` <num>.<num>`
+ and subsections have numbers `<num>.<num>.<num>`.
+
+ \_cod --------------------------
+
+\_newcount \_chapnum % chapters
+\_newcount \_secnum % sections
+\_newcount \_seccnum % subsections
+\_newcount \_tnum % table numbers
+\_newcount \_fnum % figure numbers
+\_newcount \_dnum % numbered display maths
+
+\_def \_chapx {\_secx \_secnum=0 \_lfnotenum=0 }
+\_def \_secx {\_seccx \_seccnum=0 \_tnum=0 \_fnum=0 \_dnum=0 \_resetABCDE }
+\_def \_seccx {}
+
+\_def \_thechapnum {\_the\_chapnum}
+\_def \_thesecnum {\_othe\_chapnum.\_the\_secnum}
+\_def \_theseccnum {\_othe\_chapnum.\_the\_secnum.\_the\_seccnum}
+\_def \_thetnum {\_othe\_chapnum.\_the\_secnum.\_the\_tnum}
+\_def \_thefnum {\_othe\_chapnum.\_the\_secnum.\_the\_fnum}
+\_def \_thednum {(\_the\_dnum)}
+
+\_def\_othe #1.{\_ifnum#1>0 \_the#1.\_fi}
+\_def\_incr #1{\_global\_advance#1by1 }
+
+ \_doc ----------------------------
+ The \`\notoc` and \`\nonum` prefixes are implemented by
+ internal `\_ifnotoc` and `\_ifnonum`. They are reset
+ after each chapter/section/subsection by the \`\_resetnonumnotoc` macro.
+ \_cod ----------------------------
+
+\_newifi \_ifnotoc \_notocfalse \_def\_notoc {\_global\_notoctrue}
+\_newifi \_ifnonum \_nonumfalse \_def\_nonum {\_global\_nonumtrue}
+\_def \_resetnonumnotoc{\_global\_notocfalse \_global\_nonumfalse}
+\_public \notoc \nonum ;
+
+ \_doc ----------------------------
+ The \`\chap`, \`\sec` and \`\secc` macros are implemented here.
+ The \`\_inchap`, \`\_insec` and \`\_insecc` macros does the real work,
+ First, we read the optional parameter `[<label>]`, if it exists.
+ \_cod ----------------------------
+
+\_optdef\_chap[]{\_trylabel \_inchap}
+\_optdef\_sec []{\_trylabel \_insec}
+\_optdef\_secc[]{\_trylabel \_insecc}
+\_def\_trylabel{\_istoksempty\_opt\_iffalse \_label[\_the\_opt]\_fi}
+
+\_eoldef\_inchap #1{\_par \_sectionlevel=1
+ \_def \_savedtitle {#1}% saved to .ref file
+ \_ifnonum \_else {\_globaldefs=1 \_incr\_chapnum \_chapx}\_fi
+ \_edef \_therefnum {\_ifnonum \_space \_else \_thechapnum \_fi}%
+ \_printchap{#1}%
+ \_resetnonumnotoc
+}
+\_eoldef\_insec #1{\_par \_sectionlevel=2
+ \_def \_savedtitle {#1}% saved to .ref file
+ \_ifnonum \_else {\_globaldefs=1 \_incr\_secnum \_secx}\_fi
+ \_edef \_therefnum {\_ifnonum \_space \_else \_thesecnum \_fi}%
+ \_printsec{#1}%
+ \_resetnonumnotoc
+}
+\_eoldef\_insecc #1{\_par \_sectionlevel=3
+ \_def \_savedtitle {#1}% saved to .ref file
+ \_ifnonum \_else {\_globaldefs=1 \_incr\_seccnum \_seccx}\_fi
+ \_edef \_therefnum {\_ifnonum \_space \_else \_theseccnum \_fi}%
+ \_printsecc{#1}%
+ \_resetnonumnotoc
+}
+\_public \chap \sec \secc ;
+
+ \_doc ----------------------------
+ The \`\_printrefnum``[<pre>@<post>]` macro is used in `\_print*` macros.
+ \nl
+ The \`\_wtotoc` `{<level>}{<info>}{<ref-num>}{<title-text>}`
+ macro expands its parameters and does \^`\_wref`.
+
+ Note that the `<tite-text>` is `\detokenize`d before `\_wref`, so the
+ problem of \"fragile macros" from old \LaTeX/ never occurs.
+ \_cod ----------------------------
+
+\_def \_printrefnum [#1@#2]{\_leavevmode % we must be in horizontal mode
+ \_ifnonum \_else #1\_therefnum #2\_fi
+ \_wlabel \_therefnum % references, if `\label[<label>]` is declared
+ \_ifnotoc \_else \_incr \_tocrefnum
+ \_dest[toc:\_the\_tocrefnum]%
+ \_wtotoc{\_the\_sectionlevel}{\_secinfo}%
+ {\_therefnum}{\_detokenize\_ea{\_savedtitle}}%
+ \_fi
+}
+\_def \_wtotoc #1#2#3#4{\_edef\_tmp{{#1}{#2}{#3}{#4}}\_ea\_wtotocA\_tmp}
+\_def \_wtotocA #1#2#3#4{\_wref\_Xtoc{{#1}{#2}{#3}{#4}}}
+
+ \_doc -----------------------------
+ The \`\_abovetitle``{<penaltyA>}{<skipA>}` and \`\_belowtitle``{<skipB>}` pair
+ communicates using a special penalty 11333 in vertical mode.
+ The `\_belowtitle` puts the vertical skip (its value is saved in
+ `\_savedtitleskip`) followed by this special penalty.
+ The `\_abovetitle` reads `\lastpenalty` and if it has this special value
+ then it removes the skip used before and don't use the parameter.
+ The `\abovetitle` creates `<skipA>` only if whatever previous skip is less
+ or equal than `<skipA>`. We must save `<whatever-skip>`, remove it,
+ create `<penaltyA>` (if `\_belowtitle` does not preceded) and create
+ <whatever-skip> or `<skipA>` depending on what is greater.
+ The amount of `<skipA>` is measured using `\setbox0=\vbox`.
+ \_cod -----------------------------
+
+\_newskip \_savedtitleskip
+\_newskip \_savedlastskip
+\_def\_abovetitle #1#2{\_savedlastskip=\_lastskip % <whatever-skip>
+ \_ifdim\_lastskip>0pt \_vskip-\_lastskip \_fi
+ \_ifnum\_lastpenalty=11333 \_vskip-\_savedtitleskip \_else #1\_fi
+ \_ifdim\_savedlastskip>0pt \_setbox0=\_vbox{#2\_global\_tmpdim=\_lastskip}%
+ \_else \_tmpdim=\_maxdimen \_fi
+ \_ifdim\_savedlastskip>\_tmpdim \vskip\_savedlastskip \_else #2\_fi
+}
+\_def\_belowtitle #1{#1\_global\_savedtitleskip=\_lastskip \_penalty11333 }
+
+ \_doc -----------------------------
+ \`\nbpar` sets `\interlinepenaty` value.
+ \`\nl` is \"new line" in text (or titles), but space in toc or headlines or outlines.
+ \_cod -----------------------------
+
+\_def\_nbpar{{\_interlinepenalty=10000\_endgraf}}
+
+\_protected\_def\_nl{\_hfil\_break}
+\_regmacro {\_def\_nl{\_unskip\_space}} {\_def\_nl{\_unskip\_space}} {\_def\_nl{ }}
+\_regmacro {\_def\nl{\_unskip\_space}} {\_def\nl{\_unskip\_space}} {\_def\nl{ }}
+
+\_public \nbpar \nl ;
+
+ \_doc -----------------------------
+ \`\_firstnoindent` puts a material to `\everypar` in order to next
+ paragraph will be without indentation. It is useful after titles.
+ If you dislike this feature then you can say `\let\_firtnoindent=\relax`.
+ The \`\_wipeepar` removes the material from `\everypar`.
+ \_cod -----------------------------
+
+\_def \_firstnoindent {\_global\_everypar={\_wipeepar \_setbox7=\_lastbox}}
+\_def \_wipeepar {\_global\_everypar={}}
+
+ \_doc -----------------------------
+ The `\mark` (for running heads) is used in `\_printsection` only. We
+ suppose that chapters will be printed after `\vfil\break`, so user can
+ implement chapter titles for running headers directly by macros, no
+ `\mark` mechanism is needed. But sections need `\mark`s. And they can be
+ mixed with chapter's running heads, of course.
+
+ The \`\_insermark``{<title text>}` saves `\mark` in the format
+ `{<title-num>} {<title-text>}`, so it can be printed \"as is" in
+ `\headline` (see the space between them), or you can define a formating
+ macro with two parameters for processing these data, if you need it.
+ \_cod -----------------------------
+
+\_def\_insertmark#1{\_mark{{\_ifnonum\_else\_therefnum\_fi} {\_unexpanded{#1}}}}
+
+ \_doc -----------------------------
+ \OpTeX/ sets `\headline={}` by default, so no running headings are printed.
+ You can activate the running headings by following code, for example:
+ \begtt
+ \addto\_chapx {\_edef\_runningchap {\_thechapnum: \_unexpanded\_ea{\_savedtitle}}}
+ \def \formathead #1#2{\isempty{#1}\iffalse #1: #2\fi}
+ \headline = {%
+ \ifodd \pageno
+ \hfil \ea\formathead\firstmark{}{}%
+ \else
+ Chapter: \runningchap \hfil
+ \fi
+ }
+ \endtt
+ The \`\caption``/<letter>` uses `\_<letter>num` counter.
+ The group opened by `\caption` is finalized by first `\par` from
+ empty line or from `\vskip` or from `\endinsert`.
+ The `\_printcaption<letter>` is called, it starts with
+ printing of the caption.\nl
+ The \`\cskip` macro inserts nobreakable vertical space between caption and
+ the object.
+ \_cod -----------------------------
+
+\_def\_caption/#1{\_def\_tmpa{#1}\_nospaceafter \_capA}
+\_optdef\_capA []{\_trylabel \_incaption}
+\_def\_incaption {\_bgroup
+ \_ifcsname _\_tmpa num\_endcsname \_ea\_incr \_csname _\_tmpa num\_endcsname
+ \_else \_opwarning{Unknown caption /\_tmpa}\_fi
+ \_edef\_thecapnum {\_csname _the\_tmpa num\_endcsname}%
+ \_edef\_thecaptitle{\_mtext{\_tmpa}}%
+ \_ifcsname _everycaption\_tmpa\_endcsname
+ \_ea\_the \_csname _everycaption\_tmpa\_endcsname \_fi
+ \_def\_par{\_nbpar\_egroup}\_let\par=\_par
+ \_cs{_printcaption\_tmpa}%
+}
+\_def \_cskip {\_par\_nobreak\_medskip} % space between caption and the object
+
+\_public \caption \cskip ;
+
+ \_doc -----------------------------
+ The \`\_printcaptiont` and \`\_printcaptionf` macros start in vertical mode.
+ They switch to horizontal mode and use `\_wlabel\_thecapnum` (in order to
+ make reference and hyperlink destination) a they can use:
+ \begitems
+ * `\_thecaptitle` ... expands to the word Table or Figure (depending on
+ the current language).
+ * `\_thecapnum` ... expands to `\the<letter>num` (caption number).
+ \enditems
+ \_cod -----------------------------
+
+\_def \_printcaptiont {%
+ \_noindent \_wlabel\_thecapnum {\_bf\_thecaptitle~\_thecapnum}\_enspace
+ \_narrowlastlinecentered\_iindent
+}
+\_let \_printcaptionf = \_printcaptiont % caption of figures = caption of tables
+
+ \_doc -----------------------------
+ The default format of `\caption` text is paragraph in block narrower by
+ `\_iindent` and with the last line is centered. This setting is done by
+ the \`\_narrowlastlinecentered` macro.
+ \_cod -----------------------------
+
+\_def\_narrowlastlinecentered#1{%
+ \_leftskip=#1plus1fil
+ \_rightskip=#1plus-1fil
+ \_parfillskip=0pt plus2fil
+}
+
+ \_doc -----------------------------
+ \`\eqmark` is processed in display mode (we add `\eqno` primitive)
+ or in internal mode when `\eqaligno` is used (we don't add `\eqno`).
+ \_cod -----------------------------
+
+\_optdef\_eqmark []{\_trylabel \_ineqmark}
+\_def\_ineqmark{\_incr\_dnum
+ \_ifinner\_else\_eqno \_fi
+ \_wlabel\_thednum \_thednum
+}
+\_public \eqmark ;
+
+ \_doc -----------------------------
+ The \`\numberedpar` `<letter>{<name>}` is implemented here.
+ \_cod -----------------------------
+
+\_newcount\_counterA \_newcount\_counterB \_newcount\_counterC
+\_newcount\_counterD \_newcount\_counterE
+
+\_def\_resetABCDE {\_counterA=0 \_counterB=0 \_counterC=0 \_counterD=0 \_counterE=0 }
+
+\_def \_theAnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterA}
+\_def \_theBnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterB}
+\_def \_theCnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterC}
+\_def \_theDnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterD}
+\_def \_theEnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterE}
+
+\_def\_numberedpar#1#2{\_ea \_incr \_csname _counter#1\_endcsname
+ \_def\_tmpa{#1}\_def\_tmpb{#2}\_numberedparparam}
+\_optdef\_numberedparparam[]{%
+ \_ea \_printnumberedpar \_csname _the\_tmpa num\_ea\_endcsname\_ea{\_tmpb}}
+
+\_public \numberedpar ;
+
+ \_doc -----------------------------
+ The \`\_printnumberedpar` `\theXnum {<name>}` opens numbered paragraph and
+ prints it. The optional parameter is in `\_the\_opt`. You can re-define
+ it if you need another design.
+
+ `\_printnumberedpar` needs not to be re-defined if you only want to print
+ Theorems in italic and to insert vertical skips (for example). You can do this
+ by the following code:
+ \begtt
+ \def\theorem {\medskip\bgroup\it \numberedpar A{Theorem}}
+ \def\endtheorem {\par\egroup\medskip}
+
+ \theorem Let $M$ be... \endtheorem
+ \endtt
+ \_cod -----------------------------
+
+\_def \_printnumberedpar #1#2{\_par
+ \_noindent\_wlabel #1%
+ {\_bf #2 #1\_istoksempty\_opt\_iffalse \_space \_the\_opt \_fi.}\_space
+ \_ignorespaces
+}
+
+\_endcode % -------------------------------------
+
+2020-04-28 \_secfonts etc: \_boldify is last.
+2020-04-22 \_chapx, \_secx, \_seccx rewritten
+2020-03-14 introduced
diff --git a/macros/luatex/optex/base/slides.opm b/macros/luatex/optex/base/slides.opm
new file mode 100644
index 0000000000..e25cc5ee7a
--- /dev/null
+++ b/macros/luatex/optex/base/slides.opm
@@ -0,0 +1,219 @@
+% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \slideshow {Slides style for OpTeX <2020-03-19>} % loaded on demand by \slides
+
+ \_doc -----------------------------
+ Default margins and design is declared here.
+ The `\_ttfont` is scaled by `mag1.15` in order to balance the
+ ex height of Helvetica (Heros) and LM fonts Typewriter.
+ The `\begtt`...`\endtt` verbatim is printed by smaller text.
+ \_cod -----------------------------
+
+\_margins/1 a5l (14,14,10,3)mm % landscape A5 format
+\_def\_wideformat{\_margins/1 (263,148) (16,16,10,3)mm } % 16:9 format
+
+\_fontfam[Heros]
+\_typosize[16/19]
+\_famvardef\_ttfont{\_setfontsize{mag1.15}\_tt}
+\_def\_urlfont{}
+\_everytt={\_typosize[13/16] \advance\hsize by10mm}
+\_fontdef\_fixbf{\_bf}
+
+\_nopagenumbers
+\_parindent=0pt
+\_ttindent=5mm
+\_parskip=5pt plus 4pt minus2pt
+\_rightskip=0pt plus 1fil
+\_ttindent=10pt
+\_def\_ttskip{\_smallskip}
+
+\_onlyrgb % RGB color space is better for presentations
+
+ \_doc -----------------------------
+ The bottom margin is set to 3\,mm. If we use 1\,mm, then baseline of
+ `\footline` is 2\,mm from the bottom page. This is depth of the `\Grey`
+ rectangle used for page numbers. It is r-lapped to `\hoffset` width because left
+ margin = `\hoffset` = right margin. It is 14\,mm for narrow pages or
+ 16\,mm for wide pages.
+ \_cod -----------------------------
+
+\_footlinedist=1mm
+\_footline={\_hss \_rlap{%
+ \_rlap{\Grey\_kern.2\_hoffset\_vrule height6mm depth2mm width.8\_hoffset}%
+ \_hbox to\_hoffset{\White\_hss\_folio\_kern3mm}}}
+
+ \_doc -----------------------------
+ The \`\subtit` is defined analogically like `\tit`.
+ \_cod -----------------------------
+
+\_eoldef\_subtit#1{\_vskip20pt {\_leftskip=0pt plus1fill \_rightskip=\_leftskip
+ \_subtitfont #1\_nbpar}}
+
+ \_doc -----------------------------
+ The \`\pshow``<num>` prints the text in invisible
+ (transparent) font when \^`\layernum`\code{<}`<num>`.
+ The trasparency is set by by `\pdfpageresoyrces` primitive.
+ \_cod -----------------------------
+
+\pdfpageresources{/ExtGState << /Invisible << /Type /ExtGState /ca 0 /CA 0 >>
+ /Visible << /Type /ExtGState /ca 1 /CA 1 >> >>}
+\addto\_morepgresources{/Invisible << /Type /ExtGState /ca 0 /CA 0 >>
+ /Visible << /Type /ExtGState /ca 1 /CA 1 >>}
+\def\Invisible {\_pdfliteral{/Invisible gs}}
+\def\Visible {\_pdfliteral{/Visible gs}}
+\def\Transparent {\Invisible \_aftergroup \Visible}
+
+\_def\_use#1#2{\_ifnum\_layernum#1\_relax#2\_fi}
+\_def\_pshow#1{\_use{=#1}\Red \_use{<#1}\Transparent \_ignorespaces}
+
+ \_doc -----------------------------
+ The main level list of items is activated here. The `\_item:X` and
+ `\_item:x` are used and are re-defined here.
+ If we are in nested level of items and `\pg+` is used then
+ `\egroups` macro expands to the right number of `\egroup`s
+ in order to close page correctly. The level of nested item lists
+ is saved to the `\_ilevel` register and used when we start again
+ the next text after `\pg+`.
+ \_cod -----------------------------
+
+\_newcount\_gilevel
+\_def\*{*}
+\_adef*{\_startitem}
+\_sdef{_item:X}{\Blue\_raise.2ex\_fullrectangle{.8ex}\_kern.5em}
+\_sdef{_item:x}{\Blue\_raise.3ex\_fullrectangle{.6ex}\_kern.4em}
+\_style X
+\_def\_egroups{\_par\_global\_gilevel=\_ilevel \_egroup}
+\_everylist={\_novspaces \_ifcase\_ilevel \_or \_style x \_else \_style - \_fi
+ \_addto\_egroups{\_egroup}}
+
+ \_doc -----------------------------
+ The default values of \`\pg`, i.\,e.\ `\pg;`, `\pg+` and `\pg.` are very simple.
+ They are used when `\showslides` is not specified.
+ \_cod -----------------------------
+
+\_def\_pg#1{\_cs{_spg:#1}}
+\_sdef{_spg:;}{\_vfil\_break \_lfnotenumreset}
+\_sdef{_spg:.}{\_end}
+\_sdef{_spg:+}{\_par}
+
+ \_doc -----------------------------
+ We need no numbers and no table of contents when using slides.
+ The \^`\_printsec` macro is redefined in order the title is centered
+ and typeset in `\Blue`.
+ \_cod -----------------------------
+
+\_def\_titfont{\_typosize[42/60]\_bf \Blue}
+\_def\_subtitfont{\_typosize[20/30]\_bf}
+\_def\_secfont{\_typosize[25/30]\_bf \Blue}
+
+\_nonum \_notoc \_let\_resetnonumnotoc=\_relax
+\_def\_printsec#1{\_par
+ \_abovetitle{\_penalty-400}\_bigskip
+ {\_secfont \_noindent \_leftskip=0pt plus1fill \_rightskip=\_leftskip
+ \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}%
+ \_nobreak \_belowtitle{\_medskip}%
+}
+
+ \_doc -----------------------------
+ When \`\slideshow` is active then each page is opened
+ by `\setbox\_slidepage=\vbox\bgroup` (roughly speaking)
+ and closed by `\egroup`. The material is
+ `\unvbox`ed and saved for the usage in the next usage if `\pg+` is in process.
+ The \`\_slidelayer` is incremented instead `\pageno` if `\pg+`.
+ This counter is equal to `\count1`, so it is printed to the terminal and
+ log file next to `\pageno`.
+
+ The code is somewhat more complicated when \^`\layers` is used. Then
+ `<layered-text>` is saved to the \`\_layertext` macro, the material before
+ it is in \`\_slidepage` box and the material after it is in `\_slidepageB`
+ box. The pages are completed in the `\loop` which increments the
+ \`\layernum` register.
+ \_cod -----------------------------
+
+\_newbox\_slidepage \_newbox\_slidepageB
+\_countdef\_slidelayer=1
+\_def\_decr#1{\_global\_advance#1 by-1 }
+
+\_def\_slideshow{\_slidelayer=1 \_slideshowactive \_setbox\_slidepage=\_vbox\_bgroup}
+
+\_def\_slideshowactive{%
+ \_sdef{_spg:;}{\_closepage \_global\_slidelayer=1 \_resetpage \_openslide}
+ \_sdef{_spg:.}{\_closepage \_end}
+ \_sdef{_spg:+}{\_closepage \_incr\_slidelayer \_decr\_pageno \_openslide}
+ \_def\bye {\_closepage \_end}
+ \_let\_layers=\_layersactive
+ \_def\_destbox[##1:##2]{\_isequal{##1}{ref}\_iffalse \_destboxori[##1:##2]\_fi}%
+}
+\_def\_openslide{\_setbox\_slidepage=\_vbox\_bgroup \_setilevel
+ \_ifvoid\_slidepage \_else \_unvbox\_slidepage \_nointerlineskip\_lastbox \_fi}
+\_def\_setilevel{\_loop \_decr\_gilevel \_ifnum\_gilevel<0 \_else \_begitems \_repeat}
+
+\_def\_closepage{\_egroups
+ \_ifnum \_maxlayers=0 \_unvcopy\_slidepage \_vfil\_break
+ \_else \_begingroup \_setwarnslides \_layernum=0
+ \_loop
+ \_ifnum\_layernum<\_maxlayers \_advance\_layernum by1
+ \_printlayers \_vfil\_break
+ \_ifnum\_layernum<\_maxlayers \_incr\_slidelayer \_decr\_pageno \_fi
+ \_repeat
+ \_global\_maxlayers=0
+ \_incr\_layernum \_global\_setbox\_slidepage=\_vbox{\_printlayers}%
+ \_endgroup
+ \_fi}
+\_def\_resetpage{%
+ \_global\_setbox\_slidepage=\_box\_voidbox \_global\_setbox\_slidepageB=\_box\_voidbox
+ \_lfnotenumreset
+}
+\_def\_setwarnslides{%
+ \_def\pg##1{\_opwarning{\_string\pg##1 \_layersenv}\_def\pg####1{}}%
+ \_def\layers##1 {\_opwarning{\_string\layers\_space \_layersenv}\_def\layers####1{}}%
+}
+\_def\_layersenv{cannot be inside \_string\layers...\_string\endlayers, ignored}
+
+\_def\_printlayers{\_unvcopy\_slidepage \_nointerlineskip\_lastbox
+ \_layertext \_endgraf
+ \_ifdim\_prevdepth>-1000pt \_kern-\_prevdepth \_kern\_dp\_strutbox \_fi
+ \_vskip\_parskip
+ \_unvcopy\_slidepageB
+}
+\_let\_destboxori=\_destbox
+
+\_newcount\_layernum \_newcount\_maxlayers
+\_maxlayers=0
+
+\_long\_def\_layersactive #1 #2\endlayers{%
+ \_par\_egroup
+ \_gdef\_layertext{#2}%
+ \_global\_maxlayers=#1
+ \_setbox\_slidepageB=\_vbox\_bgroup
+}
+\_public \subtit \slideshow \pg \wideformat \use \pshow ;
+
+ \_doc -----------------------------
+ Default \`\layers` `<num>` macro (when \^`\slideshow` is not activated) is simple.
+ It prints the `<layered-text>` with `\layernum=<num>+1` because we need the
+ result after last layer is processed.
+ \_cod -----------------------------
+
+\_def\_layers #1 {\_par\_layernum=\_numexpr#1+1\_relax}
+\_let\endlayers=\_relax
+
+\_def\layers{\_layers}
+
+ \_doc -----------------------------
+ We must to redefine \`\fnotenumpages` because the data from `.ref` file
+ are less usable for implementing such feature: the
+ footnote should be in more layers repeatedly. But we can suppose that
+ each page starts by `\pg;` macro, so we can reset the footnote counter by
+ this macro.
+ \_cod -----------------------------
+
+\_def \_fnotenumpages {\_def\_fnotenum{\_the\_lfnotenum}\_pgfnotefalse
+ \_def\_lfnotenumreset{\_global\_lfnotenum=0 }}
+\_let \_lfnotenumreset=\_relax
+\_public \fnotenumpages ;
+
+\_endcode % ----------------------------------------------
+
+The user manual of \OpTeX/ slides are in `op-slides.tex` file.
+
diff --git a/macros/luatex/optex/base/styles.opm b/macros/luatex/optex/base/styles.opm
new file mode 100644
index 0000000000..a51f4e998d
--- /dev/null
+++ b/macros/luatex/optex/base/styles.opm
@@ -0,0 +1,115 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \report {Basic styles of OpTeX <2020-03-28>} % preloaded in format
+
+ \_doc -----------------------------
+ We define auxiliary macro first (used by the \^`\address` macro)
+ \nl
+ The `{`\`\boxlines` `<line-1><eol><line-2><eol>...<line-n><eol>}`
+ returns to the outer vertical mode a box with `<line-1>`, next box with
+ `<line-2>` etc. Each box has its natural width. This is reason why we cannot
+ use paragraph mode where each resulting box has the width `\hsize`.
+ The `<eol>` is set active and `\everypar` starts `\hbox{` and acive <eol>
+ closes this `\hbox` by `}`.
+ \_cod -----------------------------
+
+\_def\_boxlines{%
+ \_def\_boxlinesE{\_ifhmode\_egroup\_empty\_fi}%
+ \_def\_nl{\_boxlinesE}%
+ \_bgroup \_lccode`\~=`\^^M\_lowercase{\_egroup\_let~}\_boxlinesE
+ \_everypar{\_setbox0=\_lastbox\_endgraf
+ \_hbox\_bgroup \_catcode`\^^M=13 \_let\par=\_nl \_aftergroup\_boxlinesC}%
+}
+\_def\_boxlinesC{\_futurelet\_next\_boxlinesD}
+\_def\_boxlinesD{\_ifx\_next\_empty\_else\_ea\_egroup\_fi}
+
+\_public \boxlines ;
+
+ \_doc -----------------------------
+ The \`\report` and \`\letter` style initialization macros are defined here.
+ \nl
+ The `\letter` defines \`\address` and \`\subject` macros.
+ \_cod -----------------------------
+
+\_def\_report{
+ \_typosize[11/13.2]
+ \_vsize=\_dimexpr \_topskip + 52\_baselineskip \_relax % added 2020-03-28
+ \_let\_titfont=\_chapfont
+ \_titskip=3ex
+ \_eoldef\_author##1{\_removelastskip\_bigskip
+ {\_leftskip=0pt plus1fill \_rightskip=\_leftskip \_it \_noindent ##1\_par}\_nobreak\_bigskip
+ }
+ \_public \author ;
+ \_parindent=1.2em \_iindent=\_parindent \_ttindent=\_parindent
+ \_footline={\_global\_footline={\_hss\_rmfixed\_folio\_hss}}
+}
+\_def\_letter{
+ \_def\_address{\_vtop\_bgroup\_boxlines \_parskip=0pt \_let\par=\_egroup}
+ \_def\_subject{{\_bf \_mtext{subj}: }}
+ \_public \address \subject ;
+ \_typosize[11/14]
+ \_vsize=\_dimexpr \_topskip + 49\_baselineskip \_relax % added 2020-03-28
+ \_parindent=0pt
+ \_parskip=\_medskipamount
+ \_nopagenumbers
+}
+\_public \letter \report ;
+
+ \_doc -----------------------------
+ The \`\slides` macro reads macro file `slides.opm`, see the section~\ref[slides].
+ \_cod -----------------------------
+
+\_def\_slides{\_par
+ \_input slides.opm
+}
+\_public \slides ;
+
+
+\_endcode % -------------------------------------
+
+The example of `\letter` style document follows:
+
+\begtt %-----------------------------------------------------------------
+
+\letter
+\fontfam[bonum]
+\chyph
+
+\address
+ Vážený pan
+ Mgr. Bořek Byrokrat
+ ředitel Ústavu pro další možnosti
+ Úřední 789
+ 123 45 Praha 1
+
+\hfill V Praze dne \today
+
+\subject Žádost o možnost další možnosti
+
+Vážený pane řediteli
+
+na základě Vašeho dopisu č.j.~123456/78-dat a elektronické výzvy si dovoluji
+Vás požádat o prozkoumání mé možnosti další možnosti.
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
+veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+commodo consequat.
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
+veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
+esse cillum dolore eu fugiat nulla pariatur.
+
+S úctou
+
+\hfill \address
+ {\it Petr Olšák}
+ specialista na \TeX{}
+ Ulice 12345
+ Praha 13
+
+\bye
+
+\endtt %---------------------------------------------------------------------
+
diff --git a/macros/luatex/optex/base/table.opm b/macros/luatex/optex/base/table.opm
new file mode 100644
index 0000000000..5fa252eeba
--- /dev/null
+++ b/macros/luatex/optex/base/table.opm
@@ -0,0 +1,211 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \table {Basic macros for OpTeX <2020-04-10>} % preloaded in format
+
+ \_doc -----------------------------
+ The result of the \`\table``{<declaration>}{<data>}` macro is inserted into
+ `\_tablebox`. You can change default value if you want by
+ `\let\_tablebox=\vtop` or `\let\_tablebox=\relax`.
+ \_cod -----------------------------
+
+\_let\_tablebox=\_vbox
+
+ \_doc -----------------------------
+ Categories (for example of `|` character) have to be normal when reading
+ `\table` parameters.
+ \_cod -----------------------------
+
+\_def\_table{\_tablebox\_bgroup \_catcodetable\_optexcatcodes \_tableA}
+\_public \table ;
+
+ \_doc -----------------------------
+ The \^`\tablinespace` is implemented by enlarging given \^`\tabstrut`
+ by desired dimension (height and depth too) and by setting
+ `\_lineskip=-2\_tablinespace`. Normal table rows (where no `\hrule` is
+ between them) have normal baseline distance.
+ \_cod -----------------------------
+
+\_def\_tableA#1{%
+ \_the\_thistable \_global\_thistable={}%
+ \_ea\_ifx\_ea^\_the\_tabstrut^\_setbox\_tstrutbox=\_null
+ \_else \_setbox\_tstrutbox=\_hbox{\_the\_tabstrut}%
+ \_setbox\_tstrutbox=\_hbox{\_vrule width0pt
+ height\_dimexpr\_ht\_tstrutbox+\_tablinespace
+ depth\_dimexpr\_dp\_tstrutbox+\_tablinespace}%
+ \_offinterlineskip
+ \_lineskip=-2\_tablinespace
+ \_fi
+ \_colnum=0 \_def\_tmpa{}\_tabdata={}\_scantabdata#1\_relax
+ \_the\_everytable \_tableB
+}
+\_def\_tableB#1{\_halign\_ea{\_the\_tabdata\_cr#1\_crcr}\_egroup}
+\_newbox\_tstrutbox % strut used in table rows
+\_newtoks\_tabdata % the \halign declaration line
+\_newcount\_colnum % number of columns
+
+ \_doc -----------------------------
+ The \`\_scantabdata` converts `\table`'s `<declaration>` to
+ `\halign` `<declaration>`.
+ The result is stored into \`\_tabdata` tokens list.
+ For example, the
+ following result is generated when `<declaration>=|cr||cl|`.
+ \begtt
+ tabdata: \_vrule\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA
+ &\_the\_tabiteml\_hfil#\_unsskip\_the\_tabitemr
+ \_vrule\_kern\_vvkern\_vrule\_tabstrutA
+ &\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA
+ &\_the\_tabiteml#\_unsskip\_hfil\_the\_tabitemr\_vrule\_tabstrutA
+ ddlinedata: &\_dditem &\_dditem\_vvitem &\_dditem &\_dditem
+ \endtt
+ The second result in the \`\_ddlinedata` macro is a teplate of one row of the table
+ used by \^`\crli` macro.
+ \_cod -----------------------------
+
+\_def\_scantabdata#1{\_let\_next=\_scantabdata
+ \_ifx\_relax#1\_let\_next=\_relax
+ \_else\_ifx|#1\_addtabvrule
+ \_else\_ifx(#1\_def\_next{\_scantabdataE}%
+ \_else\_isinlist{123456789}#1\_iftrue \_def\_next{\_scantabdataC#1}%
+ \_else \_ea\_ifx\_csname _tabdeclare#1\_endcsname \_relax
+ \_ea\_ifx\_csname _paramtabdeclare#1\_endcsname \_relax
+ \_opwarning{tab-declarator "#1" unknown, ignored}%
+ \_else
+ \_def\_next{\_ea\_scantabdataB\_csname _paramtabdeclare#1\_endcsname}\_fi
+ \_else \_def\_next{\_ea\_scantabdataA\_csname _tabdeclare#1\_endcsname}%
+ \_fi\_fi\_fi\_fi\_fi \_next
+}
+\_def\_scantabdataA#1{\_addtabitem \_ea\_addtabdata\_ea{#1\_tabstrutA}\_scantabdata}
+\_def\_scantabdataB#1#2{\_addtabitem\_ea\_addtabdata\_ea{#1{#2}\_tabstrutA}\_scantabdata}
+\_def\_scantabdataC {\_def\_tmpb{}\_afterassignment\_scantabdataD \_tmpnum=}
+\_def\_scantabdataD#1{\_loop \_ifnum\_tmpnum>0 \_advance\_tmpnum by-1 \_addto\_tmpb{#1}\_repeat
+ \_ea\_scantabdata\_tmpb}
+\_def\_scantabdataE#1){\_addtabdata{#1}\_scantabdata}
+
+\_def\_addtabitem{\_ifnum\_colnum>0 \_addtabdata{&}\_addto\_ddlinedata{&\_dditem}\_fi
+ \_advance\_colnum by1 \_let\_tmpa=\_relax}
+\_def\_addtabdata#1{\_tabdata\_ea{\_the\_tabdata#1}}
+\_def\_addtabvrule{%
+ \_ifx\_tmpa\_vrule \_addtabdata{\_kern\_vvkern}%
+ \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitem}\_else\_addto\_ddlinedata{\_vvitem}\_fi
+ \_else \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitemA}\_else\_addto\_ddlinedata{\_vvitemA}\_fi\_fi
+ \_let\_tmpa=\_vrule \_addtabdata{\_vrule}%
+}
+\_def\_tabstrutA{\_copy\_tstrutbox}
+\_def\_vvleft{}
+\_def\_ddlinedata{}
+
+ \_doc -----------------------------
+ The default \"declaration letters" `c`, `l`, `r` and `p` are declared.
+ by `\def\_tabdeclare<letter>{...}` for a non-parametric
+ letter and by `\def\_paramtabdeclare<letter>{...}` for a letter with a parameter.
+ The double hash `##` must be in the definition, it is replaced by a real table item data.
+ All items are put in group because of `\aftergroup` can be used (from
+ `\localcolors` for example).
+ You can declare more such \"declaration letters" if you want.
+ \_cod -----------------------------
+
+\_def\_tabdeclarec{{\_the\_tabiteml\_hfil##\_unsskip\_hfil\_the\_tabitemr}}
+\_def\_tabdeclarel{{\_the\_tabiteml\_relax##\_unsskip\_hfil\_the\_tabitemr}}
+\_def\_tabdeclarer{{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr}}
+\_def\_paramtabdeclarep#1{{\_the\_tabiteml
+ \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip
+ \_lineskiplimit=0pt \_noindent##\_unsskip\_lower\_dp\_tstrutbox\_hbox{}}\_the\_tabitemr}}
+
+ \_doc -----------------------------
+ User puts optional spaces around the table item typically, i.\,e.\ he/she writes
+ `& text &` instead `&text&`. The left space is ignored by internal \TeX/ algorithm but
+ the right space must be removed by macros. This is a reason why we reccomend to
+ use \`\_unsskip` after each `##` in your definition of \"declaration letters".
+ This macro isn't only the primitive `\unskip` because we allow usage of plain \TeX/
+ `\hideskip` macro: `&\hideskip text\hideskip&`.
+ \_cod -----------------------------
+
+\_def\_unsskip{\_ifdim\_lastskip>0pt \_unskip\_fi}
+
+ \_doc -----------------------------
+ The family of `\_cr*` macros
+ \`\crl`, \`\crll`, \`\crli`, \`\crlli`, \`\crlp` and
+ \`\tskip` `<dimen>` is implemented here.
+ The \`\_zerotabrule` is used in order to suppress the negative `\lineskip`
+ declared by \^`\tablinespace`.
+ \_cod -----------------------------
+
+\_def\_crl{\_crcr\_noalign{\_hrule}}
+\_def\_crll{\_crcr\_noalign{\_hrule\_kern\_hhkern\_hrule}}
+\_def\_zerotabrule {\_noalign{\_hrule height0pt width0pt depth0pt}}
+
+\_def\_crli{\_crcr \_zerotabrule \_omit
+ \_gdef\_dditem{\_omit\_tablinefil}\_gdef\_vvitem{\_kern\_vvkern\_vrule}\_gdef\_vvitemA{\_vrule}%
+ \_vvleft\_tablinefil\_ddlinedata\_crcr \_zerotabrule}
+\_def\_crlli{\_crli\_noalign{\_kern\_hhkern}\_crli}
+\_def\_tablinefil{\_leaders\_hrule\_hfil}
+
+\_def\_crlp#1{\_crcr \_zerotabrule \_noalign{\_kern-\_drulewidth}%
+ \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_expandafter}\_expandafter\_crlpA\_crlplist,\_end,%
+ \_global\_tmpnum=0 \_gdef\_dditem{\_omit\_crlpD}%
+ \_gdef\_vvitem{\_kern\_vvkern\_kern\_drulewidth}\_gdef\_vvitemA{\_kern\_drulewidth}%
+ \_vvleft\_crlpD\_ddlinedata \_global\_tmpnum=0 \_crcr \_zerotabrule}
+\_def\_crlpA#1,{\_ifx\_end#1\_else \_crlpB#1-\_end,\_expandafter\_crlpA\_fi}
+\_def\_crlpB#1#2-#3,{\_ifx\_end#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi}
+\_def\_crlpC#1-#2-#3,{\_tmpnum=#1\_relax
+ \_loop \_xdef\_crlplist{\_crlplist\_the\_tmpnum,}\_ifnum\_tmpnum<#2\_advance\_tmpnum by1 \_repeat}
+\_def\_crlpD{\_global\_advance\_tmpnum by1
+ \_edef\_tmpa{\_noexpand\_isinlist\_noexpand\_crlplist{,\_the\_tmpnum,}}%
+ \_tmpa\_iftrue \_kern-\_drulewidth \_tablinefil \_kern-\_drulewidth\_else\_hfil \_fi}
+
+\_def\_tskip{\_afterassignment\_tskipA \_tmpdim}
+\_def\_tskipA{\_gdef\_dditem{}\_gdef\_vvitem{}\_gdef\_vvitemA{}\_gdef\_tabstrutA{}%
+ \_vbox to\_tmpdim{}\_ddlinedata \_crcr
+ \_zerotabrule \_noalign{\_gdef\_tabstrutA{\_copy\_tstrutbox}}}
+
+\_public \crl \crll \crli \crlli \crlp \tskip ;
+
+ \_doc -----------------------------
+ The \`\mspan``[<declaration>]{<text>}` macro generates similar `\omit\span\omit\span`
+ sequence as plain \TeX/ macro `\multispan`. Moreover, it uses \^`\_scantabdata` to
+ convert `<declaration>` from `\table` syntax to `\halign` syntax.
+ \_cod -----------------------------
+
+\_def\_mspan{\_omit \_tabdata={\_tabstrutA}\_let\_tmpa=\_relax \_afterassignment\_mspanA \_mscount=}
+\_def\_mspanA[#1]#2{\_loop \_ifnum\_mscount>1 \_cs{_span}\_omit \_advance\_mscount-1 \_repeat
+ \_colnum=0 \_def\_tmpa{}\_tabdata={}\_scantabdata#1\_relax
+ \_setbox0=\_vbox{\_halign\_expandafter{\_the\_tabdata\_cr#2\_cr}\_global\_setbox8=\_lastbox}%
+ \_setbox0=\_hbox{\_unhbox8 \_unskip \_global\_setbox8=\_lastbox}%
+ \_unhbox8 \_ignorespaces}
+\_public \mspan ;
+
+ \_doc -----------------------------
+ The parameters of primitive `\vrule` and `\hrule` keeps the rule \"last wins".
+ If we re-define `\hrule` to `\_orihrule height1pt` then each usage
+ of redefined `\hrule` uses `1pt` height if this parameter isn't
+ overwriten by another following `height` parameter. This principle is used for
+ settings another default rule thickness than 0.4\,pt by the macro
+ \`\rulewidth`.
+ \_cod -----------------------------
+
+\_newdimen\_drulewidth \_drulewidth=0.4pt
+\_let\_orihrule=\_hrule \_let\_orivrule=\_vrule
+\_def\_rulewidth{\_afterassignment\_rulewidthA \_drulewidth}
+\_def\_rulewidthA{\_edef\_hrule{\_orihrule height\_drulewidth}%
+ \_edef\_vrule{\_orivrule width\_drulewidth}%
+ \_let\_rulewidth=\_drulewidth
+ \_public \vrule \hrule \rulewidth;}
+\_public \rulewidth ;
+
+ \_doc -----------------------------
+ The \`\frame``{<text>}` uses \"\code{\\vbox} in \code{\\vtop}" trick in order to keep the
+ baseline of the internal text at the same level as outer baseline.
+ User can write `\frame{abcxyz}` in normal paragraph line, for example
+ and gets the expected result: \frame{abcxyz}.
+ The internal margins are set by `\vvkern` and `\hhkern` parameters.
+ \_cod -----------------------------
+
+\_long\_def\_frame#1{%
+ \_hbox{\_vrule\_vtop{\_vbox{\_hrule\_kern\_vvkern
+ \_hbox{\_kern\_hhkern\_relax#1\_kern\_hhkern}%
+ }\_kern\_vvkern\_hrule}\_vrule}}
+\_public \frame ;
+
+\_endcode % -------------------------------------
+
+2020-04-10 second group for items in order to \localcolors
diff --git a/macros/luatex/optex/base/uni-lcuc.opm b/macros/luatex/optex/base/uni-lcuc.opm
new file mode 100644
index 0000000000..3ddf286011
--- /dev/null
+++ b/macros/luatex/optex/base/uni-lcuc.opm
@@ -0,0 +1,15944 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+% Preloaded in format. A copy o uni-lcuc.tex fom csplain is here:
+
+% uni-lcuc.tex -- sets \lccodes and \uccodes for Unicode chars, nothing more
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak, Jul. 2014
+
+\_wterm{Setting lccodes and uccodes for Unicode characters}
+
+\_def\_tmp #1 #2 {\_ifx^#1^\_else
+ \_lccode"#1="#1
+ \_ifx.#2%
+ \_uccode"#1="#1
+ \_else
+ \_uccode"#2="#2
+ \_lccode"#2="#1
+ \_uccode"#1="#2
+ \_fi
+ \_ea \_tmp \_fi
+}
+\_tmp
+00AA .
+00B5 039C
+00BA .
+00E0 00C0
+00E1 00C1
+00E2 00C2
+00E3 00C3
+00E4 00C4
+00E5 00C5
+00E6 00C6
+00E7 00C7
+00E8 00C8
+00E9 00C9
+00EA 00CA
+00EB 00CB
+00EC 00CC
+00ED 00CD
+00EE 00CE
+00EF 00CF
+00F0 00D0
+00F1 00D1
+00F2 00D2
+00F3 00D3
+00F4 00D4
+00F5 00D5
+00F6 00D6
+00F8 00D8
+00F9 00D9
+00FA 00DA
+00FB 00DB
+00FC 00DC
+00FD 00DD
+00FE 00DE
+00DF .
+00FF 0178
+0101 0100
+0103 0102
+0105 0104
+0107 0106
+0109 0108
+010B 010A
+010D 010C
+010F 010E
+0111 0110
+0113 0112
+0115 0114
+0117 0116
+0119 0118
+011B 011A
+011D 011C
+011F 011E
+0121 0120
+0123 0122
+0125 0124
+0127 0126
+0129 0128
+012B 012A
+012D 012C
+012F 012E
+0133 0132
+0135 0134
+0137 0136
+0138 .
+013A 0139
+013C 013B
+013E 013D
+0140 013F
+0142 0141
+0144 0143
+0146 0145
+0148 0147
+0149 .
+014B 014A
+014D 014C
+014F 014E
+0151 0150
+0153 0152
+0155 0154
+0157 0156
+0159 0158
+015B 015A
+015D 015C
+015F 015E
+0161 0160
+0163 0162
+0165 0164
+0167 0166
+0169 0168
+016B 016A
+016D 016C
+016F 016E
+0171 0170
+0173 0172
+0175 0174
+0177 0176
+017A 0179
+017C 017B
+017E 017D
+0180 0243
+0253 0181
+0183 0182
+0185 0184
+0254 0186
+0188 0187
+0256 0189
+0257 018A
+018C 018B
+018D .
+01DD 018E
+0259 018F
+025B 0190
+0192 0191
+0260 0193
+0263 0194
+0195 01F6
+0269 0196
+0268 0197
+0199 0198
+019A 023D
+019B .
+026F 019C
+0272 019D
+019E 0220
+0275 019F
+01A1 01A0
+01A3 01A2
+01A5 01A4
+0280 01A6
+01A8 01A7
+0283 01A9
+01AA .
+01AB .
+01AD 01AC
+0288 01AE
+01B0 01AF
+028A 01B1
+028B 01B2
+01B4 01B3
+01B6 01B5
+0292 01B7
+01B9 01B8
+01BA .
+01BB .
+01BD 01BC
+01BE .
+01BF 01F7
+01C0 .
+01C1 .
+01C2 .
+01C3 .
+01C6 01C4
+01C9 01C7
+01CC 01CA
+01CE 01CD
+01D0 01CF
+01D2 01D1
+01D4 01D3
+01D6 01D5
+01D8 01D7
+01DA 01D9
+01DC 01DB
+01DF 01DE
+01E1 01E0
+01E3 01E2
+01E5 01E4
+01E7 01E6
+01E9 01E8
+01EB 01EA
+01ED 01EC
+01EF 01EE
+01F0 .
+01F3 01F1
+01F5 01F4
+01F9 01F8
+01FB 01FA
+01FD 01FC
+01FF 01FE
+0201 0200
+0203 0202
+0205 0204
+0207 0206
+0209 0208
+020B 020A
+020D 020C
+020F 020E
+0211 0210
+0213 0212
+0215 0214
+0217 0216
+0219 0218
+021B 021A
+021D 021C
+021F 021E
+0221 .
+0223 0222
+0225 0224
+0227 0226
+0229 0228
+022B 022A
+022D 022C
+022F 022E
+0231 0230
+0233 0232
+0234 .
+0235 .
+0236 .
+0237 .
+0238 .
+0239 .
+2C65 023A
+023C 023B
+2C66 023E
+023F 2C7E
+0240 2C7F
+0242 0241
+0289 0244
+028C 0245
+0247 0246
+0249 0248
+024B 024A
+024D 024C
+024F 024E
+0250 2C6F
+0251 2C6D
+0252 2C70
+0255 .
+0258 .
+025A .
+025C .
+025D .
+025E .
+025F .
+0261 .
+0262 .
+0264 .
+0265 A78D
+0266 A7AA
+0267 .
+026A .
+026B 2C62
+026C .
+026D .
+026E .
+0270 .
+0271 2C6E
+0273 .
+0274 .
+0276 .
+0277 .
+0278 .
+0279 .
+027A .
+027B .
+027C .
+027D 2C64
+027E .
+027F .
+0281 .
+0282 .
+0284 .
+0285 .
+0286 .
+0287 .
+028D .
+028E .
+028F .
+0290 .
+0291 .
+0293 .
+0294 .
+0295 .
+0296 .
+0297 .
+0298 .
+0299 .
+029A .
+029B .
+029C .
+029D .
+029E .
+029F .
+02A0 .
+02A1 .
+02A2 .
+02A3 .
+02A4 .
+02A5 .
+02A6 .
+02A7 .
+02A8 .
+02A9 .
+02AA .
+02AB .
+02AC .
+02AD .
+02AE .
+02AF .
+02B0 .
+02B1 .
+02B2 .
+02B3 .
+02B4 .
+02B5 .
+02B6 .
+02B7 .
+02B8 .
+02B9 .
+02BA .
+02BB .
+02BC .
+02BD .
+02BE .
+02BF .
+02C0 .
+02C1 .
+02C6 .
+02C7 .
+02C8 .
+02C9 .
+02CA .
+02CB .
+02CC .
+02CD .
+02CE .
+02CF .
+02D0 .
+02D1 .
+02E0 .
+02E1 .
+02E2 .
+02E3 .
+02E4 .
+02EC .
+02EE .
+0371 0370
+0373 0372
+0374 .
+0377 0376
+037A .
+037B 03FD
+037C 03FE
+037D 03FF
+03AC 0386
+03AD 0388
+03AE 0389
+03AF 038A
+03CC 038C
+03CD 038E
+03CE 038F
+0390 .
+03B1 0391
+03B2 0392
+03B3 0393
+03B4 0394
+03B5 0395
+03B6 0396
+03B7 0397
+03B8 0398
+03B9 0399
+03BA 039A
+03BB 039B
+03BD 039D
+03BE 039E
+03BF 039F
+03C0 03A0
+03C1 03A1
+03C3 03A3
+03C4 03A4
+03C5 03A5
+03C6 03A6
+03C7 03A7
+03C8 03A8
+03C9 03A9
+03CA 03AA
+03CB 03AB
+03B0 .
+03D7 03CF
+03D2 .
+03D3 .
+03D4 .
+03D9 03D8
+03DB 03DA
+03DD 03DC
+03DF 03DE
+03E1 03E0
+03E3 03E2
+03E5 03E4
+03E7 03E6
+03E9 03E8
+03EB 03EA
+03ED 03EC
+03EF 03EE
+03F2 03F9
+03F3 .
+03F8 03F7
+03FB 03FA
+03FC .
+0450 0400
+0451 0401
+0452 0402
+0453 0403
+0454 0404
+0455 0405
+0456 0406
+0457 0407
+0458 0408
+0459 0409
+045A 040A
+045B 040B
+045C 040C
+045D 040D
+045E 040E
+045F 040F
+0430 0410
+0431 0411
+0432 0412
+0433 0413
+0434 0414
+0435 0415
+0436 0416
+0437 0417
+0438 0418
+0439 0419
+043A 041A
+043B 041B
+043C 041C
+043D 041D
+043E 041E
+043F 041F
+0440 0420
+0441 0421
+0442 0422
+0443 0423
+0444 0424
+0445 0425
+0446 0426
+0447 0427
+0448 0428
+0449 0429
+044A 042A
+044B 042B
+044C 042C
+044D 042D
+044E 042E
+044F 042F
+0461 0460
+0463 0462
+0465 0464
+0467 0466
+0469 0468
+046B 046A
+046D 046C
+046F 046E
+0471 0470
+0473 0472
+0475 0474
+0477 0476
+0479 0478
+047B 047A
+047D 047C
+047F 047E
+0481 0480
+048B 048A
+048D 048C
+048F 048E
+0491 0490
+0493 0492
+0495 0494
+0497 0496
+0499 0498
+049B 049A
+049D 049C
+049F 049E
+04A1 04A0
+04A3 04A2
+04A5 04A4
+04A7 04A6
+04A9 04A8
+04AB 04AA
+04AD 04AC
+04AF 04AE
+04B1 04B0
+04B3 04B2
+04B5 04B4
+04B7 04B6
+04B9 04B8
+04BB 04BA
+04BD 04BC
+04BF 04BE
+04CF 04C0
+04C2 04C1
+04C4 04C3
+04C6 04C5
+04C8 04C7
+04CA 04C9
+04CC 04CB
+04CE 04CD
+04D1 04D0
+04D3 04D2
+04D5 04D4
+04D7 04D6
+04D9 04D8
+04DB 04DA
+04DD 04DC
+04DF 04DE
+04E1 04E0
+04E3 04E2
+04E5 04E4
+04E7 04E6
+04E9 04E8
+04EB 04EA
+04ED 04EC
+04EF 04EE
+04F1 04F0
+04F3 04F2
+04F5 04F4
+04F7 04F6
+04F9 04F8
+04FB 04FA
+04FD 04FC
+04FF 04FE
+0501 0500
+0503 0502
+0505 0504
+0507 0506
+0509 0508
+050B 050A
+050D 050C
+050F 050E
+0511 0510
+0513 0512
+0515 0514
+0517 0516
+0519 0518
+051B 051A
+051D 051C
+051F 051E
+0521 0520
+0523 0522
+0525 0524
+0527 0526
+0561 0531
+0562 0532
+0563 0533
+0564 0534
+0565 0535
+0566 0536
+0567 0537
+0568 0538
+0569 0539
+056A 053A
+056B 053B
+056C 053C
+056D 053D
+056E 053E
+056F 053F
+0570 0540
+0571 0541
+0572 0542
+0573 0543
+0574 0544
+0575 0545
+0576 0546
+0577 0547
+0578 0548
+0579 0549
+057A 054A
+057B 054B
+057C 054C
+057D 054D
+057E 054E
+057F 054F
+0580 0550
+0581 0551
+0582 0552
+0583 0553
+0584 0554
+0585 0555
+0586 0556
+0559 .
+0587 .
+05D0 .
+05D1 .
+05D2 .
+05D3 .
+05D4 .
+05D5 .
+05D6 .
+05D7 .
+05D8 .
+05D9 .
+05DA .
+05DB .
+05DC .
+05DD .
+05DE .
+05DF .
+05E0 .
+05E1 .
+05E2 .
+05E3 .
+05E4 .
+05E5 .
+05E6 .
+05E7 .
+05E8 .
+05E9 .
+05EA .
+05F0 .
+05F1 .
+05F2 .
+0620 .
+0621 .
+0622 .
+0623 .
+0624 .
+0625 .
+0626 .
+0627 .
+0628 .
+0629 .
+062A .
+062B .
+062C .
+062D .
+062E .
+062F .
+0630 .
+0631 .
+0632 .
+0633 .
+0634 .
+0635 .
+0636 .
+0637 .
+0638 .
+0639 .
+063A .
+063B .
+063C .
+063D .
+063E .
+063F .
+0640 .
+0641 .
+0642 .
+0643 .
+0644 .
+0645 .
+0646 .
+0647 .
+0648 .
+0649 .
+064A .
+066E .
+066F .
+0671 .
+0672 .
+0673 .
+0674 .
+0675 .
+0676 .
+0677 .
+0678 .
+0679 .
+067A .
+067B .
+067C .
+067D .
+067E .
+067F .
+0680 .
+0681 .
+0682 .
+0683 .
+0684 .
+0685 .
+0686 .
+0687 .
+0688 .
+0689 .
+068A .
+068B .
+068C .
+068D .
+068E .
+068F .
+0690 .
+0691 .
+0692 .
+0693 .
+0694 .
+0695 .
+0696 .
+0697 .
+0698 .
+0699 .
+069A .
+069B .
+069C .
+069D .
+069E .
+069F .
+06A0 .
+06A1 .
+06A2 .
+06A3 .
+06A4 .
+06A5 .
+06A6 .
+06A7 .
+06A8 .
+06A9 .
+06AA .
+06AB .
+06AC .
+06AD .
+06AE .
+06AF .
+06B0 .
+06B1 .
+06B2 .
+06B3 .
+06B4 .
+06B5 .
+06B6 .
+06B7 .
+06B8 .
+06B9 .
+06BA .
+06BB .
+06BC .
+06BD .
+06BE .
+06BF .
+06C0 .
+06C1 .
+06C2 .
+06C3 .
+06C4 .
+06C5 .
+06C6 .
+06C7 .
+06C8 .
+06C9 .
+06CA .
+06CB .
+06CC .
+06CD .
+06CE .
+06CF .
+06D0 .
+06D1 .
+06D2 .
+06D3 .
+06D5 .
+06E5 .
+06E6 .
+06EE .
+06EF .
+06FA .
+06FB .
+06FC .
+06FF .
+0710 .
+0712 .
+0713 .
+0714 .
+0715 .
+0716 .
+0717 .
+0718 .
+0719 .
+071A .
+071B .
+071C .
+071D .
+071E .
+071F .
+0720 .
+0721 .
+0722 .
+0723 .
+0724 .
+0725 .
+0726 .
+0727 .
+0728 .
+0729 .
+072A .
+072B .
+072C .
+072D .
+072E .
+072F .
+074D .
+074E .
+074F .
+0750 .
+0751 .
+0752 .
+0753 .
+0754 .
+0755 .
+0756 .
+0757 .
+0758 .
+0759 .
+075A .
+075B .
+075C .
+075D .
+075E .
+075F .
+0760 .
+0761 .
+0762 .
+0763 .
+0764 .
+0765 .
+0766 .
+0767 .
+0768 .
+0769 .
+076A .
+076B .
+076C .
+076D .
+076E .
+076F .
+0770 .
+0771 .
+0772 .
+0773 .
+0774 .
+0775 .
+0776 .
+0777 .
+0778 .
+0779 .
+077A .
+077B .
+077C .
+077D .
+077E .
+077F .
+0780 .
+0781 .
+0782 .
+0783 .
+0784 .
+0785 .
+0786 .
+0787 .
+0788 .
+0789 .
+078A .
+078B .
+078C .
+078D .
+078E .
+078F .
+0790 .
+0791 .
+0792 .
+0793 .
+0794 .
+0795 .
+0796 .
+0797 .
+0798 .
+0799 .
+079A .
+079B .
+079C .
+079D .
+079E .
+079F .
+07A0 .
+07A1 .
+07A2 .
+07A3 .
+07A4 .
+07A5 .
+07B1 .
+07CA .
+07CB .
+07CC .
+07CD .
+07CE .
+07CF .
+07D0 .
+07D1 .
+07D2 .
+07D3 .
+07D4 .
+07D5 .
+07D6 .
+07D7 .
+07D8 .
+07D9 .
+07DA .
+07DB .
+07DC .
+07DD .
+07DE .
+07DF .
+07E0 .
+07E1 .
+07E2 .
+07E3 .
+07E4 .
+07E5 .
+07E6 .
+07E7 .
+07E8 .
+07E9 .
+07EA .
+07F4 .
+07F5 .
+07FA .
+0800 .
+0801 .
+0802 .
+0803 .
+0804 .
+0805 .
+0806 .
+0807 .
+0808 .
+0809 .
+080A .
+080B .
+080C .
+080D .
+080E .
+080F .
+0810 .
+0811 .
+0812 .
+0813 .
+0814 .
+0815 .
+081A .
+0824 .
+0828 .
+0840 .
+0841 .
+0842 .
+0843 .
+0844 .
+0845 .
+0846 .
+0847 .
+0848 .
+0849 .
+084A .
+084B .
+084C .
+084D .
+084E .
+084F .
+0850 .
+0851 .
+0852 .
+0853 .
+0854 .
+0855 .
+0856 .
+0857 .
+0858 .
+08A0 .
+08A2 .
+08A3 .
+08A4 .
+08A5 .
+08A6 .
+08A7 .
+08A8 .
+08A9 .
+08AA .
+08AB .
+08AC .
+0904 .
+0905 .
+0906 .
+0907 .
+0908 .
+0909 .
+090A .
+090B .
+090C .
+090D .
+090E .
+090F .
+0910 .
+0911 .
+0912 .
+0913 .
+0914 .
+0915 .
+0916 .
+0917 .
+0918 .
+0919 .
+091A .
+091B .
+091C .
+091D .
+091E .
+091F .
+0920 .
+0921 .
+0922 .
+0923 .
+0924 .
+0925 .
+0926 .
+0927 .
+0928 .
+0929 .
+092A .
+092B .
+092C .
+092D .
+092E .
+092F .
+0930 .
+0931 .
+0932 .
+0933 .
+0934 .
+0935 .
+0936 .
+0937 .
+0938 .
+0939 .
+093D .
+0950 .
+0958 .
+0959 .
+095A .
+095B .
+095C .
+095D .
+095E .
+095F .
+0960 .
+0961 .
+0971 .
+0972 .
+0973 .
+0974 .
+0975 .
+0976 .
+0977 .
+0979 .
+097A .
+097B .
+097C .
+097D .
+097E .
+097F .
+0985 .
+0986 .
+0987 .
+0988 .
+0989 .
+098A .
+098B .
+098C .
+098F .
+0990 .
+0993 .
+0994 .
+0995 .
+0996 .
+0997 .
+0998 .
+0999 .
+099A .
+099B .
+099C .
+099D .
+099E .
+099F .
+09A0 .
+09A1 .
+09A2 .
+09A3 .
+09A4 .
+09A5 .
+09A6 .
+09A7 .
+09A8 .
+09AA .
+09AB .
+09AC .
+09AD .
+09AE .
+09AF .
+09B0 .
+09B2 .
+09B6 .
+09B7 .
+09B8 .
+09B9 .
+09BD .
+09CE .
+09DC .
+09DD .
+09DF .
+09E0 .
+09E1 .
+09F0 .
+09F1 .
+0A05 .
+0A06 .
+0A07 .
+0A08 .
+0A09 .
+0A0A .
+0A0F .
+0A10 .
+0A13 .
+0A14 .
+0A15 .
+0A16 .
+0A17 .
+0A18 .
+0A19 .
+0A1A .
+0A1B .
+0A1C .
+0A1D .
+0A1E .
+0A1F .
+0A20 .
+0A21 .
+0A22 .
+0A23 .
+0A24 .
+0A25 .
+0A26 .
+0A27 .
+0A28 .
+0A2A .
+0A2B .
+0A2C .
+0A2D .
+0A2E .
+0A2F .
+0A30 .
+0A32 .
+0A33 .
+0A35 .
+0A36 .
+0A38 .
+0A39 .
+0A59 .
+0A5A .
+0A5B .
+0A5C .
+0A5E .
+0A72 .
+0A73 .
+0A74 .
+0A85 .
+0A86 .
+0A87 .
+0A88 .
+0A89 .
+0A8A .
+0A8B .
+0A8C .
+0A8D .
+0A8F .
+0A90 .
+0A91 .
+0A93 .
+0A94 .
+0A95 .
+0A96 .
+0A97 .
+0A98 .
+0A99 .
+0A9A .
+0A9B .
+0A9C .
+0A9D .
+0A9E .
+0A9F .
+0AA0 .
+0AA1 .
+0AA2 .
+0AA3 .
+0AA4 .
+0AA5 .
+0AA6 .
+0AA7 .
+0AA8 .
+0AAA .
+0AAB .
+0AAC .
+0AAD .
+0AAE .
+0AAF .
+0AB0 .
+0AB2 .
+0AB3 .
+0AB5 .
+0AB6 .
+0AB7 .
+0AB8 .
+0AB9 .
+0ABD .
+0AD0 .
+0AE0 .
+0AE1 .
+0B05 .
+0B06 .
+0B07 .
+0B08 .
+0B09 .
+0B0A .
+0B0B .
+0B0C .
+0B0F .
+0B10 .
+0B13 .
+0B14 .
+0B15 .
+0B16 .
+0B17 .
+0B18 .
+0B19 .
+0B1A .
+0B1B .
+0B1C .
+0B1D .
+0B1E .
+0B1F .
+0B20 .
+0B21 .
+0B22 .
+0B23 .
+0B24 .
+0B25 .
+0B26 .
+0B27 .
+0B28 .
+0B2A .
+0B2B .
+0B2C .
+0B2D .
+0B2E .
+0B2F .
+0B30 .
+0B32 .
+0B33 .
+0B35 .
+0B36 .
+0B37 .
+0B38 .
+0B39 .
+0B3D .
+0B5C .
+0B5D .
+0B5F .
+0B60 .
+0B61 .
+0B71 .
+0B83 .
+0B85 .
+0B86 .
+0B87 .
+0B88 .
+0B89 .
+0B8A .
+0B8E .
+0B8F .
+0B90 .
+0B92 .
+0B93 .
+0B94 .
+0B95 .
+0B99 .
+0B9A .
+0B9C .
+0B9E .
+0B9F .
+0BA3 .
+0BA4 .
+0BA8 .
+0BA9 .
+0BAA .
+0BAE .
+0BAF .
+0BB0 .
+0BB1 .
+0BB2 .
+0BB3 .
+0BB4 .
+0BB5 .
+0BB6 .
+0BB7 .
+0BB8 .
+0BB9 .
+0BD0 .
+0C05 .
+0C06 .
+0C07 .
+0C08 .
+0C09 .
+0C0A .
+0C0B .
+0C0C .
+0C0E .
+0C0F .
+0C10 .
+0C12 .
+0C13 .
+0C14 .
+0C15 .
+0C16 .
+0C17 .
+0C18 .
+0C19 .
+0C1A .
+0C1B .
+0C1C .
+0C1D .
+0C1E .
+0C1F .
+0C20 .
+0C21 .
+0C22 .
+0C23 .
+0C24 .
+0C25 .
+0C26 .
+0C27 .
+0C28 .
+0C2A .
+0C2B .
+0C2C .
+0C2D .
+0C2E .
+0C2F .
+0C30 .
+0C31 .
+0C32 .
+0C33 .
+0C35 .
+0C36 .
+0C37 .
+0C38 .
+0C39 .
+0C3D .
+0C58 .
+0C59 .
+0C60 .
+0C61 .
+0C85 .
+0C86 .
+0C87 .
+0C88 .
+0C89 .
+0C8A .
+0C8B .
+0C8C .
+0C8E .
+0C8F .
+0C90 .
+0C92 .
+0C93 .
+0C94 .
+0C95 .
+0C96 .
+0C97 .
+0C98 .
+0C99 .
+0C9A .
+0C9B .
+0C9C .
+0C9D .
+0C9E .
+0C9F .
+0CA0 .
+0CA1 .
+0CA2 .
+0CA3 .
+0CA4 .
+0CA5 .
+0CA6 .
+0CA7 .
+0CA8 .
+0CAA .
+0CAB .
+0CAC .
+0CAD .
+0CAE .
+0CAF .
+0CB0 .
+0CB1 .
+0CB2 .
+0CB3 .
+0CB5 .
+0CB6 .
+0CB7 .
+0CB8 .
+0CB9 .
+0CBD .
+0CDE .
+0CE0 .
+0CE1 .
+0CF1 .
+0CF2 .
+0D05 .
+0D06 .
+0D07 .
+0D08 .
+0D09 .
+0D0A .
+0D0B .
+0D0C .
+0D0E .
+0D0F .
+0D10 .
+0D12 .
+0D13 .
+0D14 .
+0D15 .
+0D16 .
+0D17 .
+0D18 .
+0D19 .
+0D1A .
+0D1B .
+0D1C .
+0D1D .
+0D1E .
+0D1F .
+0D20 .
+0D21 .
+0D22 .
+0D23 .
+0D24 .
+0D25 .
+0D26 .
+0D27 .
+0D28 .
+0D29 .
+0D2A .
+0D2B .
+0D2C .
+0D2D .
+0D2E .
+0D2F .
+0D30 .
+0D31 .
+0D32 .
+0D33 .
+0D34 .
+0D35 .
+0D36 .
+0D37 .
+0D38 .
+0D39 .
+0D3A .
+0D3D .
+0D4E .
+0D60 .
+0D61 .
+0D7A .
+0D7B .
+0D7C .
+0D7D .
+0D7E .
+0D7F .
+0D85 .
+0D86 .
+0D87 .
+0D88 .
+0D89 .
+0D8A .
+0D8B .
+0D8C .
+0D8D .
+0D8E .
+0D8F .
+0D90 .
+0D91 .
+0D92 .
+0D93 .
+0D94 .
+0D95 .
+0D96 .
+0D9A .
+0D9B .
+0D9C .
+0D9D .
+0D9E .
+0D9F .
+0DA0 .
+0DA1 .
+0DA2 .
+0DA3 .
+0DA4 .
+0DA5 .
+0DA6 .
+0DA7 .
+0DA8 .
+0DA9 .
+0DAA .
+0DAB .
+0DAC .
+0DAD .
+0DAE .
+0DAF .
+0DB0 .
+0DB1 .
+0DB3 .
+0DB4 .
+0DB5 .
+0DB6 .
+0DB7 .
+0DB8 .
+0DB9 .
+0DBA .
+0DBB .
+0DBD .
+0DC0 .
+0DC1 .
+0DC2 .
+0DC3 .
+0DC4 .
+0DC5 .
+0DC6 .
+0E01 .
+0E02 .
+0E03 .
+0E04 .
+0E05 .
+0E06 .
+0E07 .
+0E08 .
+0E09 .
+0E0A .
+0E0B .
+0E0C .
+0E0D .
+0E0E .
+0E0F .
+0E10 .
+0E11 .
+0E12 .
+0E13 .
+0E14 .
+0E15 .
+0E16 .
+0E17 .
+0E18 .
+0E19 .
+0E1A .
+0E1B .
+0E1C .
+0E1D .
+0E1E .
+0E1F .
+0E20 .
+0E21 .
+0E22 .
+0E23 .
+0E24 .
+0E25 .
+0E26 .
+0E27 .
+0E28 .
+0E29 .
+0E2A .
+0E2B .
+0E2C .
+0E2D .
+0E2E .
+0E2F .
+0E30 .
+0E32 .
+0E33 .
+0E40 .
+0E41 .
+0E42 .
+0E43 .
+0E44 .
+0E45 .
+0E46 .
+0E81 .
+0E82 .
+0E84 .
+0E87 .
+0E88 .
+0E8A .
+0E8D .
+0E94 .
+0E95 .
+0E96 .
+0E97 .
+0E99 .
+0E9A .
+0E9B .
+0E9C .
+0E9D .
+0E9E .
+0E9F .
+0EA1 .
+0EA2 .
+0EA3 .
+0EA5 .
+0EA7 .
+0EAA .
+0EAB .
+0EAD .
+0EAE .
+0EAF .
+0EB0 .
+0EB2 .
+0EB3 .
+0EBD .
+0EC0 .
+0EC1 .
+0EC2 .
+0EC3 .
+0EC4 .
+0EC6 .
+0EDC .
+0EDD .
+0EDE .
+0EDF .
+0F00 .
+0F40 .
+0F41 .
+0F42 .
+0F43 .
+0F44 .
+0F45 .
+0F46 .
+0F47 .
+0F49 .
+0F4A .
+0F4B .
+0F4C .
+0F4D .
+0F4E .
+0F4F .
+0F50 .
+0F51 .
+0F52 .
+0F53 .
+0F54 .
+0F55 .
+0F56 .
+0F57 .
+0F58 .
+0F59 .
+0F5A .
+0F5B .
+0F5C .
+0F5D .
+0F5E .
+0F5F .
+0F60 .
+0F61 .
+0F62 .
+0F63 .
+0F64 .
+0F65 .
+0F66 .
+0F67 .
+0F68 .
+0F69 .
+0F6A .
+0F6B .
+0F6C .
+0F88 .
+0F89 .
+0F8A .
+0F8B .
+0F8C .
+1000 .
+1001 .
+1002 .
+1003 .
+1004 .
+1005 .
+1006 .
+1007 .
+1008 .
+1009 .
+100A .
+100B .
+100C .
+100D .
+100E .
+100F .
+1010 .
+1011 .
+1012 .
+1013 .
+1014 .
+1015 .
+1016 .
+1017 .
+1018 .
+1019 .
+101A .
+101B .
+101C .
+101D .
+101E .
+101F .
+1020 .
+1021 .
+1022 .
+1023 .
+1024 .
+1025 .
+1026 .
+1027 .
+1028 .
+1029 .
+102A .
+103F .
+1050 .
+1051 .
+1052 .
+1053 .
+1054 .
+1055 .
+105A .
+105B .
+105C .
+105D .
+1061 .
+1065 .
+1066 .
+106E .
+106F .
+1070 .
+1075 .
+1076 .
+1077 .
+1078 .
+1079 .
+107A .
+107B .
+107C .
+107D .
+107E .
+107F .
+1080 .
+1081 .
+108E .
+2D00 10A0
+2D01 10A1
+2D02 10A2
+2D03 10A3
+2D04 10A4
+2D05 10A5
+2D06 10A6
+2D07 10A7
+2D08 10A8
+2D09 10A9
+2D0A 10AA
+2D0B 10AB
+2D0C 10AC
+2D0D 10AD
+2D0E 10AE
+2D0F 10AF
+2D10 10B0
+2D11 10B1
+2D12 10B2
+2D13 10B3
+2D14 10B4
+2D15 10B5
+2D16 10B6
+2D17 10B7
+2D18 10B8
+2D19 10B9
+2D1A 10BA
+2D1B 10BB
+2D1C 10BC
+2D1D 10BD
+2D1E 10BE
+2D1F 10BF
+2D20 10C0
+2D21 10C1
+2D22 10C2
+2D23 10C3
+2D24 10C4
+2D25 10C5
+2D27 10C7
+2D2D 10CD
+10D0 .
+10D1 .
+10D2 .
+10D3 .
+10D4 .
+10D5 .
+10D6 .
+10D7 .
+10D8 .
+10D9 .
+10DA .
+10DB .
+10DC .
+10DD .
+10DE .
+10DF .
+10E0 .
+10E1 .
+10E2 .
+10E3 .
+10E4 .
+10E5 .
+10E6 .
+10E7 .
+10E8 .
+10E9 .
+10EA .
+10EB .
+10EC .
+10ED .
+10EE .
+10EF .
+10F0 .
+10F1 .
+10F2 .
+10F3 .
+10F4 .
+10F5 .
+10F6 .
+10F7 .
+10F8 .
+10F9 .
+10FA .
+10FC .
+10FD .
+10FE .
+10FF .
+1100 .
+1101 .
+1102 .
+1103 .
+1104 .
+1105 .
+1106 .
+1107 .
+1108 .
+1109 .
+110A .
+110B .
+110C .
+110D .
+110E .
+110F .
+1110 .
+1111 .
+1112 .
+1113 .
+1114 .
+1115 .
+1116 .
+1117 .
+1118 .
+1119 .
+111A .
+111B .
+111C .
+111D .
+111E .
+111F .
+1120 .
+1121 .
+1122 .
+1123 .
+1124 .
+1125 .
+1126 .
+1127 .
+1128 .
+1129 .
+112A .
+112B .
+112C .
+112D .
+112E .
+112F .
+1130 .
+1131 .
+1132 .
+1133 .
+1134 .
+1135 .
+1136 .
+1137 .
+1138 .
+1139 .
+113A .
+113B .
+113C .
+113D .
+113E .
+113F .
+1140 .
+1141 .
+1142 .
+1143 .
+1144 .
+1145 .
+1146 .
+1147 .
+1148 .
+1149 .
+114A .
+114B .
+114C .
+114D .
+114E .
+114F .
+1150 .
+1151 .
+1152 .
+1153 .
+1154 .
+1155 .
+1156 .
+1157 .
+1158 .
+1159 .
+115A .
+115B .
+115C .
+115D .
+115E .
+115F .
+1160 .
+1161 .
+1162 .
+1163 .
+1164 .
+1165 .
+1166 .
+1167 .
+1168 .
+1169 .
+116A .
+116B .
+116C .
+116D .
+116E .
+116F .
+1170 .
+1171 .
+1172 .
+1173 .
+1174 .
+1175 .
+1176 .
+1177 .
+1178 .
+1179 .
+117A .
+117B .
+117C .
+117D .
+117E .
+117F .
+1180 .
+1181 .
+1182 .
+1183 .
+1184 .
+1185 .
+1186 .
+1187 .
+1188 .
+1189 .
+118A .
+118B .
+118C .
+118D .
+118E .
+118F .
+1190 .
+1191 .
+1192 .
+1193 .
+1194 .
+1195 .
+1196 .
+1197 .
+1198 .
+1199 .
+119A .
+119B .
+119C .
+119D .
+119E .
+119F .
+11A0 .
+11A1 .
+11A2 .
+11A3 .
+11A4 .
+11A5 .
+11A6 .
+11A7 .
+11A8 .
+11A9 .
+11AA .
+11AB .
+11AC .
+11AD .
+11AE .
+11AF .
+11B0 .
+11B1 .
+11B2 .
+11B3 .
+11B4 .
+11B5 .
+11B6 .
+11B7 .
+11B8 .
+11B9 .
+11BA .
+11BB .
+11BC .
+11BD .
+11BE .
+11BF .
+11C0 .
+11C1 .
+11C2 .
+11C3 .
+11C4 .
+11C5 .
+11C6 .
+11C7 .
+11C8 .
+11C9 .
+11CA .
+11CB .
+11CC .
+11CD .
+11CE .
+11CF .
+11D0 .
+11D1 .
+11D2 .
+11D3 .
+11D4 .
+11D5 .
+11D6 .
+11D7 .
+11D8 .
+11D9 .
+11DA .
+11DB .
+11DC .
+11DD .
+11DE .
+11DF .
+11E0 .
+11E1 .
+11E2 .
+11E3 .
+11E4 .
+11E5 .
+11E6 .
+11E7 .
+11E8 .
+11E9 .
+11EA .
+11EB .
+11EC .
+11ED .
+11EE .
+11EF .
+11F0 .
+11F1 .
+11F2 .
+11F3 .
+11F4 .
+11F5 .
+11F6 .
+11F7 .
+11F8 .
+11F9 .
+11FA .
+11FB .
+11FC .
+11FD .
+11FE .
+11FF .
+1200 .
+1201 .
+1202 .
+1203 .
+1204 .
+1205 .
+1206 .
+1207 .
+1208 .
+1209 .
+120A .
+120B .
+120C .
+120D .
+120E .
+120F .
+1210 .
+1211 .
+1212 .
+1213 .
+1214 .
+1215 .
+1216 .
+1217 .
+1218 .
+1219 .
+121A .
+121B .
+121C .
+121D .
+121E .
+121F .
+1220 .
+1221 .
+1222 .
+1223 .
+1224 .
+1225 .
+1226 .
+1227 .
+1228 .
+1229 .
+122A .
+122B .
+122C .
+122D .
+122E .
+122F .
+1230 .
+1231 .
+1232 .
+1233 .
+1234 .
+1235 .
+1236 .
+1237 .
+1238 .
+1239 .
+123A .
+123B .
+123C .
+123D .
+123E .
+123F .
+1240 .
+1241 .
+1242 .
+1243 .
+1244 .
+1245 .
+1246 .
+1247 .
+1248 .
+124A .
+124B .
+124C .
+124D .
+1250 .
+1251 .
+1252 .
+1253 .
+1254 .
+1255 .
+1256 .
+1258 .
+125A .
+125B .
+125C .
+125D .
+1260 .
+1261 .
+1262 .
+1263 .
+1264 .
+1265 .
+1266 .
+1267 .
+1268 .
+1269 .
+126A .
+126B .
+126C .
+126D .
+126E .
+126F .
+1270 .
+1271 .
+1272 .
+1273 .
+1274 .
+1275 .
+1276 .
+1277 .
+1278 .
+1279 .
+127A .
+127B .
+127C .
+127D .
+127E .
+127F .
+1280 .
+1281 .
+1282 .
+1283 .
+1284 .
+1285 .
+1286 .
+1287 .
+1288 .
+128A .
+128B .
+128C .
+128D .
+1290 .
+1291 .
+1292 .
+1293 .
+1294 .
+1295 .
+1296 .
+1297 .
+1298 .
+1299 .
+129A .
+129B .
+129C .
+129D .
+129E .
+129F .
+12A0 .
+12A1 .
+12A2 .
+12A3 .
+12A4 .
+12A5 .
+12A6 .
+12A7 .
+12A8 .
+12A9 .
+12AA .
+12AB .
+12AC .
+12AD .
+12AE .
+12AF .
+12B0 .
+12B2 .
+12B3 .
+12B4 .
+12B5 .
+12B8 .
+12B9 .
+12BA .
+12BB .
+12BC .
+12BD .
+12BE .
+12C0 .
+12C2 .
+12C3 .
+12C4 .
+12C5 .
+12C8 .
+12C9 .
+12CA .
+12CB .
+12CC .
+12CD .
+12CE .
+12CF .
+12D0 .
+12D1 .
+12D2 .
+12D3 .
+12D4 .
+12D5 .
+12D6 .
+12D8 .
+12D9 .
+12DA .
+12DB .
+12DC .
+12DD .
+12DE .
+12DF .
+12E0 .
+12E1 .
+12E2 .
+12E3 .
+12E4 .
+12E5 .
+12E6 .
+12E7 .
+12E8 .
+12E9 .
+12EA .
+12EB .
+12EC .
+12ED .
+12EE .
+12EF .
+12F0 .
+12F1 .
+12F2 .
+12F3 .
+12F4 .
+12F5 .
+12F6 .
+12F7 .
+12F8 .
+12F9 .
+12FA .
+12FB .
+12FC .
+12FD .
+12FE .
+12FF .
+1300 .
+1301 .
+1302 .
+1303 .
+1304 .
+1305 .
+1306 .
+1307 .
+1308 .
+1309 .
+130A .
+130B .
+130C .
+130D .
+130E .
+130F .
+1310 .
+1312 .
+1313 .
+1314 .
+1315 .
+1318 .
+1319 .
+131A .
+131B .
+131C .
+131D .
+131E .
+131F .
+1320 .
+1321 .
+1322 .
+1323 .
+1324 .
+1325 .
+1326 .
+1327 .
+1328 .
+1329 .
+132A .
+132B .
+132C .
+132D .
+132E .
+132F .
+1330 .
+1331 .
+1332 .
+1333 .
+1334 .
+1335 .
+1336 .
+1337 .
+1338 .
+1339 .
+133A .
+133B .
+133C .
+133D .
+133E .
+133F .
+1340 .
+1341 .
+1342 .
+1343 .
+1344 .
+1345 .
+1346 .
+1347 .
+1348 .
+1349 .
+134A .
+134B .
+134C .
+134D .
+134E .
+134F .
+1350 .
+1351 .
+1352 .
+1353 .
+1354 .
+1355 .
+1356 .
+1357 .
+1358 .
+1359 .
+135A .
+1380 .
+1381 .
+1382 .
+1383 .
+1384 .
+1385 .
+1386 .
+1387 .
+1388 .
+1389 .
+138A .
+138B .
+138C .
+138D .
+138E .
+138F .
+13A0 .
+13A1 .
+13A2 .
+13A3 .
+13A4 .
+13A5 .
+13A6 .
+13A7 .
+13A8 .
+13A9 .
+13AA .
+13AB .
+13AC .
+13AD .
+13AE .
+13AF .
+13B0 .
+13B1 .
+13B2 .
+13B3 .
+13B4 .
+13B5 .
+13B6 .
+13B7 .
+13B8 .
+13B9 .
+13BA .
+13BB .
+13BC .
+13BD .
+13BE .
+13BF .
+13C0 .
+13C1 .
+13C2 .
+13C3 .
+13C4 .
+13C5 .
+13C6 .
+13C7 .
+13C8 .
+13C9 .
+13CA .
+13CB .
+13CC .
+13CD .
+13CE .
+13CF .
+13D0 .
+13D1 .
+13D2 .
+13D3 .
+13D4 .
+13D5 .
+13D6 .
+13D7 .
+13D8 .
+13D9 .
+13DA .
+13DB .
+13DC .
+13DD .
+13DE .
+13DF .
+13E0 .
+13E1 .
+13E2 .
+13E3 .
+13E4 .
+13E5 .
+13E6 .
+13E7 .
+13E8 .
+13E9 .
+13EA .
+13EB .
+13EC .
+13ED .
+13EE .
+13EF .
+13F0 .
+13F1 .
+13F2 .
+13F3 .
+13F4 .
+1401 .
+1402 .
+1403 .
+1404 .
+1405 .
+1406 .
+1407 .
+1408 .
+1409 .
+140A .
+140B .
+140C .
+140D .
+140E .
+140F .
+1410 .
+1411 .
+1412 .
+1413 .
+1414 .
+1415 .
+1416 .
+1417 .
+1418 .
+1419 .
+141A .
+141B .
+141C .
+141D .
+141E .
+141F .
+1420 .
+1421 .
+1422 .
+1423 .
+1424 .
+1425 .
+1426 .
+1427 .
+1428 .
+1429 .
+142A .
+142B .
+142C .
+142D .
+142E .
+142F .
+1430 .
+1431 .
+1432 .
+1433 .
+1434 .
+1435 .
+1436 .
+1437 .
+1438 .
+1439 .
+143A .
+143B .
+143C .
+143D .
+143E .
+143F .
+1440 .
+1441 .
+1442 .
+1443 .
+1444 .
+1445 .
+1446 .
+1447 .
+1448 .
+1449 .
+144A .
+144B .
+144C .
+144D .
+144E .
+144F .
+1450 .
+1451 .
+1452 .
+1453 .
+1454 .
+1455 .
+1456 .
+1457 .
+1458 .
+1459 .
+145A .
+145B .
+145C .
+145D .
+145E .
+145F .
+1460 .
+1461 .
+1462 .
+1463 .
+1464 .
+1465 .
+1466 .
+1467 .
+1468 .
+1469 .
+146A .
+146B .
+146C .
+146D .
+146E .
+146F .
+1470 .
+1471 .
+1472 .
+1473 .
+1474 .
+1475 .
+1476 .
+1477 .
+1478 .
+1479 .
+147A .
+147B .
+147C .
+147D .
+147E .
+147F .
+1480 .
+1481 .
+1482 .
+1483 .
+1484 .
+1485 .
+1486 .
+1487 .
+1488 .
+1489 .
+148A .
+148B .
+148C .
+148D .
+148E .
+148F .
+1490 .
+1491 .
+1492 .
+1493 .
+1494 .
+1495 .
+1496 .
+1497 .
+1498 .
+1499 .
+149A .
+149B .
+149C .
+149D .
+149E .
+149F .
+14A0 .
+14A1 .
+14A2 .
+14A3 .
+14A4 .
+14A5 .
+14A6 .
+14A7 .
+14A8 .
+14A9 .
+14AA .
+14AB .
+14AC .
+14AD .
+14AE .
+14AF .
+14B0 .
+14B1 .
+14B2 .
+14B3 .
+14B4 .
+14B5 .
+14B6 .
+14B7 .
+14B8 .
+14B9 .
+14BA .
+14BB .
+14BC .
+14BD .
+14BE .
+14BF .
+14C0 .
+14C1 .
+14C2 .
+14C3 .
+14C4 .
+14C5 .
+14C6 .
+14C7 .
+14C8 .
+14C9 .
+14CA .
+14CB .
+14CC .
+14CD .
+14CE .
+14CF .
+14D0 .
+14D1 .
+14D2 .
+14D3 .
+14D4 .
+14D5 .
+14D6 .
+14D7 .
+14D8 .
+14D9 .
+14DA .
+14DB .
+14DC .
+14DD .
+14DE .
+14DF .
+14E0 .
+14E1 .
+14E2 .
+14E3 .
+14E4 .
+14E5 .
+14E6 .
+14E7 .
+14E8 .
+14E9 .
+14EA .
+14EB .
+14EC .
+14ED .
+14EE .
+14EF .
+14F0 .
+14F1 .
+14F2 .
+14F3 .
+14F4 .
+14F5 .
+14F6 .
+14F7 .
+14F8 .
+14F9 .
+14FA .
+14FB .
+14FC .
+14FD .
+14FE .
+14FF .
+1500 .
+1501 .
+1502 .
+1503 .
+1504 .
+1505 .
+1506 .
+1507 .
+1508 .
+1509 .
+150A .
+150B .
+150C .
+150D .
+150E .
+150F .
+1510 .
+1511 .
+1512 .
+1513 .
+1514 .
+1515 .
+1516 .
+1517 .
+1518 .
+1519 .
+151A .
+151B .
+151C .
+151D .
+151E .
+151F .
+1520 .
+1521 .
+1522 .
+1523 .
+1524 .
+1525 .
+1526 .
+1527 .
+1528 .
+1529 .
+152A .
+152B .
+152C .
+152D .
+152E .
+152F .
+1530 .
+1531 .
+1532 .
+1533 .
+1534 .
+1535 .
+1536 .
+1537 .
+1538 .
+1539 .
+153A .
+153B .
+153C .
+153D .
+153E .
+153F .
+1540 .
+1541 .
+1542 .
+1543 .
+1544 .
+1545 .
+1546 .
+1547 .
+1548 .
+1549 .
+154A .
+154B .
+154C .
+154D .
+154E .
+154F .
+1550 .
+1551 .
+1552 .
+1553 .
+1554 .
+1555 .
+1556 .
+1557 .
+1558 .
+1559 .
+155A .
+155B .
+155C .
+155D .
+155E .
+155F .
+1560 .
+1561 .
+1562 .
+1563 .
+1564 .
+1565 .
+1566 .
+1567 .
+1568 .
+1569 .
+156A .
+156B .
+156C .
+156D .
+156E .
+156F .
+1570 .
+1571 .
+1572 .
+1573 .
+1574 .
+1575 .
+1576 .
+1577 .
+1578 .
+1579 .
+157A .
+157B .
+157C .
+157D .
+157E .
+157F .
+1580 .
+1581 .
+1582 .
+1583 .
+1584 .
+1585 .
+1586 .
+1587 .
+1588 .
+1589 .
+158A .
+158B .
+158C .
+158D .
+158E .
+158F .
+1590 .
+1591 .
+1592 .
+1593 .
+1594 .
+1595 .
+1596 .
+1597 .
+1598 .
+1599 .
+159A .
+159B .
+159C .
+159D .
+159E .
+159F .
+15A0 .
+15A1 .
+15A2 .
+15A3 .
+15A4 .
+15A5 .
+15A6 .
+15A7 .
+15A8 .
+15A9 .
+15AA .
+15AB .
+15AC .
+15AD .
+15AE .
+15AF .
+15B0 .
+15B1 .
+15B2 .
+15B3 .
+15B4 .
+15B5 .
+15B6 .
+15B7 .
+15B8 .
+15B9 .
+15BA .
+15BB .
+15BC .
+15BD .
+15BE .
+15BF .
+15C0 .
+15C1 .
+15C2 .
+15C3 .
+15C4 .
+15C5 .
+15C6 .
+15C7 .
+15C8 .
+15C9 .
+15CA .
+15CB .
+15CC .
+15CD .
+15CE .
+15CF .
+15D0 .
+15D1 .
+15D2 .
+15D3 .
+15D4 .
+15D5 .
+15D6 .
+15D7 .
+15D8 .
+15D9 .
+15DA .
+15DB .
+15DC .
+15DD .
+15DE .
+15DF .
+15E0 .
+15E1 .
+15E2 .
+15E3 .
+15E4 .
+15E5 .
+15E6 .
+15E7 .
+15E8 .
+15E9 .
+15EA .
+15EB .
+15EC .
+15ED .
+15EE .
+15EF .
+15F0 .
+15F1 .
+15F2 .
+15F3 .
+15F4 .
+15F5 .
+15F6 .
+15F7 .
+15F8 .
+15F9 .
+15FA .
+15FB .
+15FC .
+15FD .
+15FE .
+15FF .
+1600 .
+1601 .
+1602 .
+1603 .
+1604 .
+1605 .
+1606 .
+1607 .
+1608 .
+1609 .
+160A .
+160B .
+160C .
+160D .
+160E .
+160F .
+1610 .
+1611 .
+1612 .
+1613 .
+1614 .
+1615 .
+1616 .
+1617 .
+1618 .
+1619 .
+161A .
+161B .
+161C .
+161D .
+161E .
+161F .
+1620 .
+1621 .
+1622 .
+1623 .
+1624 .
+1625 .
+1626 .
+1627 .
+1628 .
+1629 .
+162A .
+162B .
+162C .
+162D .
+162E .
+162F .
+1630 .
+1631 .
+1632 .
+1633 .
+1634 .
+1635 .
+1636 .
+1637 .
+1638 .
+1639 .
+163A .
+163B .
+163C .
+163D .
+163E .
+163F .
+1640 .
+1641 .
+1642 .
+1643 .
+1644 .
+1645 .
+1646 .
+1647 .
+1648 .
+1649 .
+164A .
+164B .
+164C .
+164D .
+164E .
+164F .
+1650 .
+1651 .
+1652 .
+1653 .
+1654 .
+1655 .
+1656 .
+1657 .
+1658 .
+1659 .
+165A .
+165B .
+165C .
+165D .
+165E .
+165F .
+1660 .
+1661 .
+1662 .
+1663 .
+1664 .
+1665 .
+1666 .
+1667 .
+1668 .
+1669 .
+166A .
+166B .
+166C .
+166F .
+1670 .
+1671 .
+1672 .
+1673 .
+1674 .
+1675 .
+1676 .
+1677 .
+1678 .
+1679 .
+167A .
+167B .
+167C .
+167D .
+167E .
+167F .
+1681 .
+1682 .
+1683 .
+1684 .
+1685 .
+1686 .
+1687 .
+1688 .
+1689 .
+168A .
+168B .
+168C .
+168D .
+168E .
+168F .
+1690 .
+1691 .
+1692 .
+1693 .
+1694 .
+1695 .
+1696 .
+1697 .
+1698 .
+1699 .
+169A .
+16A0 .
+16A1 .
+16A2 .
+16A3 .
+16A4 .
+16A5 .
+16A6 .
+16A7 .
+16A8 .
+16A9 .
+16AA .
+16AB .
+16AC .
+16AD .
+16AE .
+16AF .
+16B0 .
+16B1 .
+16B2 .
+16B3 .
+16B4 .
+16B5 .
+16B6 .
+16B7 .
+16B8 .
+16B9 .
+16BA .
+16BB .
+16BC .
+16BD .
+16BE .
+16BF .
+16C0 .
+16C1 .
+16C2 .
+16C3 .
+16C4 .
+16C5 .
+16C6 .
+16C7 .
+16C8 .
+16C9 .
+16CA .
+16CB .
+16CC .
+16CD .
+16CE .
+16CF .
+16D0 .
+16D1 .
+16D2 .
+16D3 .
+16D4 .
+16D5 .
+16D6 .
+16D7 .
+16D8 .
+16D9 .
+16DA .
+16DB .
+16DC .
+16DD .
+16DE .
+16DF .
+16E0 .
+16E1 .
+16E2 .
+16E3 .
+16E4 .
+16E5 .
+16E6 .
+16E7 .
+16E8 .
+16E9 .
+16EA .
+1700 .
+1701 .
+1702 .
+1703 .
+1704 .
+1705 .
+1706 .
+1707 .
+1708 .
+1709 .
+170A .
+170B .
+170C .
+170E .
+170F .
+1710 .
+1711 .
+1720 .
+1721 .
+1722 .
+1723 .
+1724 .
+1725 .
+1726 .
+1727 .
+1728 .
+1729 .
+172A .
+172B .
+172C .
+172D .
+172E .
+172F .
+1730 .
+1731 .
+1740 .
+1741 .
+1742 .
+1743 .
+1744 .
+1745 .
+1746 .
+1747 .
+1748 .
+1749 .
+174A .
+174B .
+174C .
+174D .
+174E .
+174F .
+1750 .
+1751 .
+1760 .
+1761 .
+1762 .
+1763 .
+1764 .
+1765 .
+1766 .
+1767 .
+1768 .
+1769 .
+176A .
+176B .
+176C .
+176E .
+176F .
+1770 .
+1780 .
+1781 .
+1782 .
+1783 .
+1784 .
+1785 .
+1786 .
+1787 .
+1788 .
+1789 .
+178A .
+178B .
+178C .
+178D .
+178E .
+178F .
+1790 .
+1791 .
+1792 .
+1793 .
+1794 .
+1795 .
+1796 .
+1797 .
+1798 .
+1799 .
+179A .
+179B .
+179C .
+179D .
+179E .
+179F .
+17A0 .
+17A1 .
+17A2 .
+17A3 .
+17A4 .
+17A5 .
+17A6 .
+17A7 .
+17A8 .
+17A9 .
+17AA .
+17AB .
+17AC .
+17AD .
+17AE .
+17AF .
+17B0 .
+17B1 .
+17B2 .
+17B3 .
+17D7 .
+17DC .
+1820 .
+1821 .
+1822 .
+1823 .
+1824 .
+1825 .
+1826 .
+1827 .
+1828 .
+1829 .
+182A .
+182B .
+182C .
+182D .
+182E .
+182F .
+1830 .
+1831 .
+1832 .
+1833 .
+1834 .
+1835 .
+1836 .
+1837 .
+1838 .
+1839 .
+183A .
+183B .
+183C .
+183D .
+183E .
+183F .
+1840 .
+1841 .
+1842 .
+1843 .
+1844 .
+1845 .
+1846 .
+1847 .
+1848 .
+1849 .
+184A .
+184B .
+184C .
+184D .
+184E .
+184F .
+1850 .
+1851 .
+1852 .
+1853 .
+1854 .
+1855 .
+1856 .
+1857 .
+1858 .
+1859 .
+185A .
+185B .
+185C .
+185D .
+185E .
+185F .
+1860 .
+1861 .
+1862 .
+1863 .
+1864 .
+1865 .
+1866 .
+1867 .
+1868 .
+1869 .
+186A .
+186B .
+186C .
+186D .
+186E .
+186F .
+1870 .
+1871 .
+1872 .
+1873 .
+1874 .
+1875 .
+1876 .
+1877 .
+1880 .
+1881 .
+1882 .
+1883 .
+1884 .
+1885 .
+1886 .
+1887 .
+1888 .
+1889 .
+188A .
+188B .
+188C .
+188D .
+188E .
+188F .
+1890 .
+1891 .
+1892 .
+1893 .
+1894 .
+1895 .
+1896 .
+1897 .
+1898 .
+1899 .
+189A .
+189B .
+189C .
+189D .
+189E .
+189F .
+18A0 .
+18A1 .
+18A2 .
+18A3 .
+18A4 .
+18A5 .
+18A6 .
+18A7 .
+18A8 .
+18AA .
+18B0 .
+18B1 .
+18B2 .
+18B3 .
+18B4 .
+18B5 .
+18B6 .
+18B7 .
+18B8 .
+18B9 .
+18BA .
+18BB .
+18BC .
+18BD .
+18BE .
+18BF .
+18C0 .
+18C1 .
+18C2 .
+18C3 .
+18C4 .
+18C5 .
+18C6 .
+18C7 .
+18C8 .
+18C9 .
+18CA .
+18CB .
+18CC .
+18CD .
+18CE .
+18CF .
+18D0 .
+18D1 .
+18D2 .
+18D3 .
+18D4 .
+18D5 .
+18D6 .
+18D7 .
+18D8 .
+18D9 .
+18DA .
+18DB .
+18DC .
+18DD .
+18DE .
+18DF .
+18E0 .
+18E1 .
+18E2 .
+18E3 .
+18E4 .
+18E5 .
+18E6 .
+18E7 .
+18E8 .
+18E9 .
+18EA .
+18EB .
+18EC .
+18ED .
+18EE .
+18EF .
+18F0 .
+18F1 .
+18F2 .
+18F3 .
+18F4 .
+18F5 .
+1900 .
+1901 .
+1902 .
+1903 .
+1904 .
+1905 .
+1906 .
+1907 .
+1908 .
+1909 .
+190A .
+190B .
+190C .
+190D .
+190E .
+190F .
+1910 .
+1911 .
+1912 .
+1913 .
+1914 .
+1915 .
+1916 .
+1917 .
+1918 .
+1919 .
+191A .
+191B .
+191C .
+1950 .
+1951 .
+1952 .
+1953 .
+1954 .
+1955 .
+1956 .
+1957 .
+1958 .
+1959 .
+195A .
+195B .
+195C .
+195D .
+195E .
+195F .
+1960 .
+1961 .
+1962 .
+1963 .
+1964 .
+1965 .
+1966 .
+1967 .
+1968 .
+1969 .
+196A .
+196B .
+196C .
+196D .
+1970 .
+1971 .
+1972 .
+1973 .
+1974 .
+1980 .
+1981 .
+1982 .
+1983 .
+1984 .
+1985 .
+1986 .
+1987 .
+1988 .
+1989 .
+198A .
+198B .
+198C .
+198D .
+198E .
+198F .
+1990 .
+1991 .
+1992 .
+1993 .
+1994 .
+1995 .
+1996 .
+1997 .
+1998 .
+1999 .
+199A .
+199B .
+199C .
+199D .
+199E .
+199F .
+19A0 .
+19A1 .
+19A2 .
+19A3 .
+19A4 .
+19A5 .
+19A6 .
+19A7 .
+19A8 .
+19A9 .
+19AA .
+19AB .
+19C1 .
+19C2 .
+19C3 .
+19C4 .
+19C5 .
+19C6 .
+19C7 .
+1A00 .
+1A01 .
+1A02 .
+1A03 .
+1A04 .
+1A05 .
+1A06 .
+1A07 .
+1A08 .
+1A09 .
+1A0A .
+1A0B .
+1A0C .
+1A0D .
+1A0E .
+1A0F .
+1A10 .
+1A11 .
+1A12 .
+1A13 .
+1A14 .
+1A15 .
+1A16 .
+1A20 .
+1A21 .
+1A22 .
+1A23 .
+1A24 .
+1A25 .
+1A26 .
+1A27 .
+1A28 .
+1A29 .
+1A2A .
+1A2B .
+1A2C .
+1A2D .
+1A2E .
+1A2F .
+1A30 .
+1A31 .
+1A32 .
+1A33 .
+1A34 .
+1A35 .
+1A36 .
+1A37 .
+1A38 .
+1A39 .
+1A3A .
+1A3B .
+1A3C .
+1A3D .
+1A3E .
+1A3F .
+1A40 .
+1A41 .
+1A42 .
+1A43 .
+1A44 .
+1A45 .
+1A46 .
+1A47 .
+1A48 .
+1A49 .
+1A4A .
+1A4B .
+1A4C .
+1A4D .
+1A4E .
+1A4F .
+1A50 .
+1A51 .
+1A52 .
+1A53 .
+1A54 .
+1AA7 .
+1B05 .
+1B06 .
+1B07 .
+1B08 .
+1B09 .
+1B0A .
+1B0B .
+1B0C .
+1B0D .
+1B0E .
+1B0F .
+1B10 .
+1B11 .
+1B12 .
+1B13 .
+1B14 .
+1B15 .
+1B16 .
+1B17 .
+1B18 .
+1B19 .
+1B1A .
+1B1B .
+1B1C .
+1B1D .
+1B1E .
+1B1F .
+1B20 .
+1B21 .
+1B22 .
+1B23 .
+1B24 .
+1B25 .
+1B26 .
+1B27 .
+1B28 .
+1B29 .
+1B2A .
+1B2B .
+1B2C .
+1B2D .
+1B2E .
+1B2F .
+1B30 .
+1B31 .
+1B32 .
+1B33 .
+1B45 .
+1B46 .
+1B47 .
+1B48 .
+1B49 .
+1B4A .
+1B4B .
+1B83 .
+1B84 .
+1B85 .
+1B86 .
+1B87 .
+1B88 .
+1B89 .
+1B8A .
+1B8B .
+1B8C .
+1B8D .
+1B8E .
+1B8F .
+1B90 .
+1B91 .
+1B92 .
+1B93 .
+1B94 .
+1B95 .
+1B96 .
+1B97 .
+1B98 .
+1B99 .
+1B9A .
+1B9B .
+1B9C .
+1B9D .
+1B9E .
+1B9F .
+1BA0 .
+1BAE .
+1BAF .
+1BBA .
+1BBB .
+1BBC .
+1BBD .
+1BBE .
+1BBF .
+1BC0 .
+1BC1 .
+1BC2 .
+1BC3 .
+1BC4 .
+1BC5 .
+1BC6 .
+1BC7 .
+1BC8 .
+1BC9 .
+1BCA .
+1BCB .
+1BCC .
+1BCD .
+1BCE .
+1BCF .
+1BD0 .
+1BD1 .
+1BD2 .
+1BD3 .
+1BD4 .
+1BD5 .
+1BD6 .
+1BD7 .
+1BD8 .
+1BD9 .
+1BDA .
+1BDB .
+1BDC .
+1BDD .
+1BDE .
+1BDF .
+1BE0 .
+1BE1 .
+1BE2 .
+1BE3 .
+1BE4 .
+1BE5 .
+1C00 .
+1C01 .
+1C02 .
+1C03 .
+1C04 .
+1C05 .
+1C06 .
+1C07 .
+1C08 .
+1C09 .
+1C0A .
+1C0B .
+1C0C .
+1C0D .
+1C0E .
+1C0F .
+1C10 .
+1C11 .
+1C12 .
+1C13 .
+1C14 .
+1C15 .
+1C16 .
+1C17 .
+1C18 .
+1C19 .
+1C1A .
+1C1B .
+1C1C .
+1C1D .
+1C1E .
+1C1F .
+1C20 .
+1C21 .
+1C22 .
+1C23 .
+1C4D .
+1C4E .
+1C4F .
+1C5A .
+1C5B .
+1C5C .
+1C5D .
+1C5E .
+1C5F .
+1C60 .
+1C61 .
+1C62 .
+1C63 .
+1C64 .
+1C65 .
+1C66 .
+1C67 .
+1C68 .
+1C69 .
+1C6A .
+1C6B .
+1C6C .
+1C6D .
+1C6E .
+1C6F .
+1C70 .
+1C71 .
+1C72 .
+1C73 .
+1C74 .
+1C75 .
+1C76 .
+1C77 .
+1C78 .
+1C79 .
+1C7A .
+1C7B .
+1C7C .
+1C7D .
+1CE9 .
+1CEA .
+1CEB .
+1CEC .
+1CEE .
+1CEF .
+1CF0 .
+1CF1 .
+1CF5 .
+1CF6 .
+1D00 .
+1D01 .
+1D02 .
+1D03 .
+1D04 .
+1D05 .
+1D06 .
+1D07 .
+1D08 .
+1D09 .
+1D0A .
+1D0B .
+1D0C .
+1D0D .
+1D0E .
+1D0F .
+1D10 .
+1D11 .
+1D12 .
+1D13 .
+1D14 .
+1D15 .
+1D16 .
+1D17 .
+1D18 .
+1D19 .
+1D1A .
+1D1B .
+1D1C .
+1D1D .
+1D1E .
+1D1F .
+1D20 .
+1D21 .
+1D22 .
+1D23 .
+1D24 .
+1D25 .
+1D26 .
+1D27 .
+1D28 .
+1D29 .
+1D2A .
+1D2B .
+1D2C .
+1D2D .
+1D2E .
+1D2F .
+1D30 .
+1D31 .
+1D32 .
+1D33 .
+1D34 .
+1D35 .
+1D36 .
+1D37 .
+1D38 .
+1D39 .
+1D3A .
+1D3B .
+1D3C .
+1D3D .
+1D3E .
+1D3F .
+1D40 .
+1D41 .
+1D42 .
+1D43 .
+1D44 .
+1D45 .
+1D46 .
+1D47 .
+1D48 .
+1D49 .
+1D4A .
+1D4B .
+1D4C .
+1D4D .
+1D4E .
+1D4F .
+1D50 .
+1D51 .
+1D52 .
+1D53 .
+1D54 .
+1D55 .
+1D56 .
+1D57 .
+1D58 .
+1D59 .
+1D5A .
+1D5B .
+1D5C .
+1D5D .
+1D5E .
+1D5F .
+1D60 .
+1D61 .
+1D62 .
+1D63 .
+1D64 .
+1D65 .
+1D66 .
+1D67 .
+1D68 .
+1D69 .
+1D6A .
+1D6B .
+1D6C .
+1D6D .
+1D6E .
+1D6F .
+1D70 .
+1D71 .
+1D72 .
+1D73 .
+1D74 .
+1D75 .
+1D76 .
+1D77 .
+1D78 .
+1D79 A77D
+1D7A .
+1D7B .
+1D7C .
+1D7D 2C63
+1D7E .
+1D7F .
+1D80 .
+1D81 .
+1D82 .
+1D83 .
+1D84 .
+1D85 .
+1D86 .
+1D87 .
+1D88 .
+1D89 .
+1D8A .
+1D8B .
+1D8C .
+1D8D .
+1D8E .
+1D8F .
+1D90 .
+1D91 .
+1D92 .
+1D93 .
+1D94 .
+1D95 .
+1D96 .
+1D97 .
+1D98 .
+1D99 .
+1D9A .
+1D9B .
+1D9C .
+1D9D .
+1D9E .
+1D9F .
+1DA0 .
+1DA1 .
+1DA2 .
+1DA3 .
+1DA4 .
+1DA5 .
+1DA6 .
+1DA7 .
+1DA8 .
+1DA9 .
+1DAA .
+1DAB .
+1DAC .
+1DAD .
+1DAE .
+1DAF .
+1DB0 .
+1DB1 .
+1DB2 .
+1DB3 .
+1DB4 .
+1DB5 .
+1DB6 .
+1DB7 .
+1DB8 .
+1DB9 .
+1DBA .
+1DBB .
+1DBC .
+1DBD .
+1DBE .
+1DBF .
+1E01 1E00
+1E03 1E02
+1E05 1E04
+1E07 1E06
+1E09 1E08
+1E0B 1E0A
+1E0D 1E0C
+1E0F 1E0E
+1E11 1E10
+1E13 1E12
+1E15 1E14
+1E17 1E16
+1E19 1E18
+1E1B 1E1A
+1E1D 1E1C
+1E1F 1E1E
+1E21 1E20
+1E23 1E22
+1E25 1E24
+1E27 1E26
+1E29 1E28
+1E2B 1E2A
+1E2D 1E2C
+1E2F 1E2E
+1E31 1E30
+1E33 1E32
+1E35 1E34
+1E37 1E36
+1E39 1E38
+1E3B 1E3A
+1E3D 1E3C
+1E3F 1E3E
+1E41 1E40
+1E43 1E42
+1E45 1E44
+1E47 1E46
+1E49 1E48
+1E4B 1E4A
+1E4D 1E4C
+1E4F 1E4E
+1E51 1E50
+1E53 1E52
+1E55 1E54
+1E57 1E56
+1E59 1E58
+1E5B 1E5A
+1E5D 1E5C
+1E5F 1E5E
+1E61 1E60
+1E63 1E62
+1E65 1E64
+1E67 1E66
+1E69 1E68
+1E6B 1E6A
+1E6D 1E6C
+1E6F 1E6E
+1E71 1E70
+1E73 1E72
+1E75 1E74
+1E77 1E76
+1E79 1E78
+1E7B 1E7A
+1E7D 1E7C
+1E7F 1E7E
+1E81 1E80
+1E83 1E82
+1E85 1E84
+1E87 1E86
+1E89 1E88
+1E8B 1E8A
+1E8D 1E8C
+1E8F 1E8E
+1E91 1E90
+1E93 1E92
+1E95 1E94
+1E96 .
+1E97 .
+1E98 .
+1E99 .
+1E9A .
+1E9C .
+1E9D .
+1E9F .
+1EA1 1EA0
+1EA3 1EA2
+1EA5 1EA4
+1EA7 1EA6
+1EA9 1EA8
+1EAB 1EAA
+1EAD 1EAC
+1EAF 1EAE
+1EB1 1EB0
+1EB3 1EB2
+1EB5 1EB4
+1EB7 1EB6
+1EB9 1EB8
+1EBB 1EBA
+1EBD 1EBC
+1EBF 1EBE
+1EC1 1EC0
+1EC3 1EC2
+1EC5 1EC4
+1EC7 1EC6
+1EC9 1EC8
+1ECB 1ECA
+1ECD 1ECC
+1ECF 1ECE
+1ED1 1ED0
+1ED3 1ED2
+1ED5 1ED4
+1ED7 1ED6
+1ED9 1ED8
+1EDB 1EDA
+1EDD 1EDC
+1EDF 1EDE
+1EE1 1EE0
+1EE3 1EE2
+1EE5 1EE4
+1EE7 1EE6
+1EE9 1EE8
+1EEB 1EEA
+1EED 1EEC
+1EEF 1EEE
+1EF1 1EF0
+1EF3 1EF2
+1EF5 1EF4
+1EF7 1EF6
+1EF9 1EF8
+1EFB 1EFA
+1EFD 1EFC
+1EFF 1EFE
+1F00 1F08
+1F01 1F09
+1F02 1F0A
+1F03 1F0B
+1F04 1F0C
+1F05 1F0D
+1F06 1F0E
+1F07 1F0F
+1F10 1F18
+1F11 1F19
+1F12 1F1A
+1F13 1F1B
+1F14 1F1C
+1F15 1F1D
+1F20 1F28
+1F21 1F29
+1F22 1F2A
+1F23 1F2B
+1F24 1F2C
+1F25 1F2D
+1F26 1F2E
+1F27 1F2F
+1F30 1F38
+1F31 1F39
+1F32 1F3A
+1F33 1F3B
+1F34 1F3C
+1F35 1F3D
+1F36 1F3E
+1F37 1F3F
+1F40 1F48
+1F41 1F49
+1F42 1F4A
+1F43 1F4B
+1F44 1F4C
+1F45 1F4D
+1F50 .
+1F51 1F59
+1F52 .
+1F53 1F5B
+1F54 .
+1F55 1F5D
+1F56 .
+1F57 1F5F
+1F60 1F68
+1F61 1F69
+1F62 1F6A
+1F63 1F6B
+1F64 1F6C
+1F65 1F6D
+1F66 1F6E
+1F67 1F6F
+1F70 1FBA
+1F71 1FBB
+1F72 1FC8
+1F73 1FC9
+1F74 1FCA
+1F75 1FCB
+1F76 1FDA
+1F77 1FDB
+1F78 1FF8
+1F79 1FF9
+1F7A 1FEA
+1F7B 1FEB
+1F7C 1FFA
+1F7D 1FFB
+1F80 1F88
+1F81 1F89
+1F82 1F8A
+1F83 1F8B
+1F84 1F8C
+1F85 1F8D
+1F86 1F8E
+1F87 1F8F
+1F90 1F98
+1F91 1F99
+1F92 1F9A
+1F93 1F9B
+1F94 1F9C
+1F95 1F9D
+1F96 1F9E
+1F97 1F9F
+1FA0 1FA8
+1FA1 1FA9
+1FA2 1FAA
+1FA3 1FAB
+1FA4 1FAC
+1FA5 1FAD
+1FA6 1FAE
+1FA7 1FAF
+1FB0 1FB8
+1FB1 1FB9
+1FB2 .
+1FB3 1FBC
+1FB4 .
+1FB6 .
+1FB7 .
+1FC2 .
+1FC3 1FCC
+1FC4 .
+1FC6 .
+1FC7 .
+1FD0 1FD8
+1FD1 1FD9
+1FD2 .
+1FD3 .
+1FD6 .
+1FD7 .
+1FE0 1FE8
+1FE1 1FE9
+1FE2 .
+1FE3 .
+1FE4 .
+1FE5 1FEC
+1FE6 .
+1FE7 .
+1FF2 .
+1FF3 1FFC
+1FF4 .
+1FF6 .
+1FF7 .
+2071 .
+207F .
+2090 .
+2091 .
+2092 .
+2093 .
+2094 .
+2095 .
+2096 .
+2097 .
+2098 .
+2099 .
+209A .
+209B .
+209C .
+2102 .
+2107 .
+210A .
+210B .
+210C .
+210D .
+210E .
+210F .
+2110 .
+2111 .
+2112 .
+2113 .
+2115 .
+2119 .
+211A .
+211B .
+211C .
+211D .
+2124 .
+2128 .
+212C .
+212D .
+212F .
+2130 .
+2131 .
+214E 2132
+2133 .
+2134 .
+2135 .
+2136 .
+2137 .
+2138 .
+2139 .
+213C .
+213D .
+213E .
+213F .
+2145 .
+2146 .
+2147 .
+2148 .
+2149 .
+2184 2183
+2C30 2C00
+2C31 2C01
+2C32 2C02
+2C33 2C03
+2C34 2C04
+2C35 2C05
+2C36 2C06
+2C37 2C07
+2C38 2C08
+2C39 2C09
+2C3A 2C0A
+2C3B 2C0B
+2C3C 2C0C
+2C3D 2C0D
+2C3E 2C0E
+2C3F 2C0F
+2C40 2C10
+2C41 2C11
+2C42 2C12
+2C43 2C13
+2C44 2C14
+2C45 2C15
+2C46 2C16
+2C47 2C17
+2C48 2C18
+2C49 2C19
+2C4A 2C1A
+2C4B 2C1B
+2C4C 2C1C
+2C4D 2C1D
+2C4E 2C1E
+2C4F 2C1F
+2C50 2C20
+2C51 2C21
+2C52 2C22
+2C53 2C23
+2C54 2C24
+2C55 2C25
+2C56 2C26
+2C57 2C27
+2C58 2C28
+2C59 2C29
+2C5A 2C2A
+2C5B 2C2B
+2C5C 2C2C
+2C5D 2C2D
+2C5E 2C2E
+2C61 2C60
+2C68 2C67
+2C6A 2C69
+2C6C 2C6B
+2C71 .
+2C73 2C72
+2C74 .
+2C76 2C75
+2C77 .
+2C78 .
+2C79 .
+2C7A .
+2C7B .
+2C7C .
+2C7D .
+2C81 2C80
+2C83 2C82
+2C85 2C84
+2C87 2C86
+2C89 2C88
+2C8B 2C8A
+2C8D 2C8C
+2C8F 2C8E
+2C91 2C90
+2C93 2C92
+2C95 2C94
+2C97 2C96
+2C99 2C98
+2C9B 2C9A
+2C9D 2C9C
+2C9F 2C9E
+2CA1 2CA0
+2CA3 2CA2
+2CA5 2CA4
+2CA7 2CA6
+2CA9 2CA8
+2CAB 2CAA
+2CAD 2CAC
+2CAF 2CAE
+2CB1 2CB0
+2CB3 2CB2
+2CB5 2CB4
+2CB7 2CB6
+2CB9 2CB8
+2CBB 2CBA
+2CBD 2CBC
+2CBF 2CBE
+2CC1 2CC0
+2CC3 2CC2
+2CC5 2CC4
+2CC7 2CC6
+2CC9 2CC8
+2CCB 2CCA
+2CCD 2CCC
+2CCF 2CCE
+2CD1 2CD0
+2CD3 2CD2
+2CD5 2CD4
+2CD7 2CD6
+2CD9 2CD8
+2CDB 2CDA
+2CDD 2CDC
+2CDF 2CDE
+2CE1 2CE0
+2CE3 2CE2
+2CE4 .
+2CEC 2CEB
+2CEE 2CED
+2CF3 2CF2
+2D30 .
+2D31 .
+2D32 .
+2D33 .
+2D34 .
+2D35 .
+2D36 .
+2D37 .
+2D38 .
+2D39 .
+2D3A .
+2D3B .
+2D3C .
+2D3D .
+2D3E .
+2D3F .
+2D40 .
+2D41 .
+2D42 .
+2D43 .
+2D44 .
+2D45 .
+2D46 .
+2D47 .
+2D48 .
+2D49 .
+2D4A .
+2D4B .
+2D4C .
+2D4D .
+2D4E .
+2D4F .
+2D50 .
+2D51 .
+2D52 .
+2D53 .
+2D54 .
+2D55 .
+2D56 .
+2D57 .
+2D58 .
+2D59 .
+2D5A .
+2D5B .
+2D5C .
+2D5D .
+2D5E .
+2D5F .
+2D60 .
+2D61 .
+2D62 .
+2D63 .
+2D64 .
+2D65 .
+2D66 .
+2D67 .
+2D6F .
+2D80 .
+2D81 .
+2D82 .
+2D83 .
+2D84 .
+2D85 .
+2D86 .
+2D87 .
+2D88 .
+2D89 .
+2D8A .
+2D8B .
+2D8C .
+2D8D .
+2D8E .
+2D8F .
+2D90 .
+2D91 .
+2D92 .
+2D93 .
+2D94 .
+2D95 .
+2D96 .
+2DA0 .
+2DA1 .
+2DA2 .
+2DA3 .
+2DA4 .
+2DA5 .
+2DA6 .
+2DA8 .
+2DA9 .
+2DAA .
+2DAB .
+2DAC .
+2DAD .
+2DAE .
+2DB0 .
+2DB1 .
+2DB2 .
+2DB3 .
+2DB4 .
+2DB5 .
+2DB6 .
+2DB8 .
+2DB9 .
+2DBA .
+2DBB .
+2DBC .
+2DBD .
+2DBE .
+2DC0 .
+2DC1 .
+2DC2 .
+2DC3 .
+2DC4 .
+2DC5 .
+2DC6 .
+2DC8 .
+2DC9 .
+2DCA .
+2DCB .
+2DCC .
+2DCD .
+2DCE .
+2DD0 .
+2DD1 .
+2DD2 .
+2DD3 .
+2DD4 .
+2DD5 .
+2DD6 .
+2DD8 .
+2DD9 .
+2DDA .
+2DDB .
+2DDC .
+2DDD .
+2DDE .
+2E2F .
+3005 .
+3006 .
+3031 .
+3032 .
+3033 .
+3034 .
+3035 .
+303B .
+303C .
+3041 .
+3042 .
+3043 .
+3044 .
+3045 .
+3046 .
+3047 .
+3048 .
+3049 .
+304A .
+304B .
+304C .
+304D .
+304E .
+304F .
+3050 .
+3051 .
+3052 .
+3053 .
+3054 .
+3055 .
+3056 .
+3057 .
+3058 .
+3059 .
+305A .
+305B .
+305C .
+305D .
+305E .
+305F .
+3060 .
+3061 .
+3062 .
+3063 .
+3064 .
+3065 .
+3066 .
+3067 .
+3068 .
+3069 .
+306A .
+306B .
+306C .
+306D .
+306E .
+306F .
+3070 .
+3071 .
+3072 .
+3073 .
+3074 .
+3075 .
+3076 .
+3077 .
+3078 .
+3079 .
+307A .
+307B .
+307C .
+307D .
+307E .
+307F .
+3080 .
+3081 .
+3082 .
+3083 .
+3084 .
+3085 .
+3086 .
+3087 .
+3088 .
+3089 .
+308A .
+308B .
+308C .
+308D .
+308E .
+308F .
+3090 .
+3091 .
+3092 .
+3093 .
+3094 .
+3095 .
+3096 .
+309D .
+309E .
+309F .
+30A1 .
+30A2 .
+30A3 .
+30A4 .
+30A5 .
+30A6 .
+30A7 .
+30A8 .
+30A9 .
+30AA .
+30AB .
+30AC .
+30AD .
+30AE .
+30AF .
+30B0 .
+30B1 .
+30B2 .
+30B3 .
+30B4 .
+30B5 .
+30B6 .
+30B7 .
+30B8 .
+30B9 .
+30BA .
+30BB .
+30BC .
+30BD .
+30BE .
+30BF .
+30C0 .
+30C1 .
+30C2 .
+30C3 .
+30C4 .
+30C5 .
+30C6 .
+30C7 .
+30C8 .
+30C9 .
+30CA .
+30CB .
+30CC .
+30CD .
+30CE .
+30CF .
+30D0 .
+30D1 .
+30D2 .
+30D3 .
+30D4 .
+30D5 .
+30D6 .
+30D7 .
+30D8 .
+30D9 .
+30DA .
+30DB .
+30DC .
+30DD .
+30DE .
+30DF .
+30E0 .
+30E1 .
+30E2 .
+30E3 .
+30E4 .
+30E5 .
+30E6 .
+30E7 .
+30E8 .
+30E9 .
+30EA .
+30EB .
+30EC .
+30ED .
+30EE .
+30EF .
+30F0 .
+30F1 .
+30F2 .
+30F3 .
+30F4 .
+30F5 .
+30F6 .
+30F7 .
+30F8 .
+30F9 .
+30FA .
+30FC .
+30FD .
+30FE .
+30FF .
+3105 .
+3106 .
+3107 .
+3108 .
+3109 .
+310A .
+310B .
+310C .
+310D .
+310E .
+310F .
+3110 .
+3111 .
+3112 .
+3113 .
+3114 .
+3115 .
+3116 .
+3117 .
+3118 .
+3119 .
+311A .
+311B .
+311C .
+311D .
+311E .
+311F .
+3120 .
+3121 .
+3122 .
+3123 .
+3124 .
+3125 .
+3126 .
+3127 .
+3128 .
+3129 .
+312A .
+312B .
+312C .
+312D .
+3131 .
+3132 .
+3133 .
+3134 .
+3135 .
+3136 .
+3137 .
+3138 .
+3139 .
+313A .
+313B .
+313C .
+313D .
+313E .
+313F .
+3140 .
+3141 .
+3142 .
+3143 .
+3144 .
+3145 .
+3146 .
+3147 .
+3148 .
+3149 .
+314A .
+314B .
+314C .
+314D .
+314E .
+314F .
+3150 .
+3151 .
+3152 .
+3153 .
+3154 .
+3155 .
+3156 .
+3157 .
+3158 .
+3159 .
+315A .
+315B .
+315C .
+315D .
+315E .
+315F .
+3160 .
+3161 .
+3162 .
+3163 .
+3164 .
+3165 .
+3166 .
+3167 .
+3168 .
+3169 .
+316A .
+316B .
+316C .
+316D .
+316E .
+316F .
+3170 .
+3171 .
+3172 .
+3173 .
+3174 .
+3175 .
+3176 .
+3177 .
+3178 .
+3179 .
+317A .
+317B .
+317C .
+317D .
+317E .
+317F .
+3180 .
+3181 .
+3182 .
+3183 .
+3184 .
+3185 .
+3186 .
+3187 .
+3188 .
+3189 .
+318A .
+318B .
+318C .
+318D .
+318E .
+31A0 .
+31A1 .
+31A2 .
+31A3 .
+31A4 .
+31A5 .
+31A6 .
+31A7 .
+31A8 .
+31A9 .
+31AA .
+31AB .
+31AC .
+31AD .
+31AE .
+31AF .
+31B0 .
+31B1 .
+31B2 .
+31B3 .
+31B4 .
+31B5 .
+31B6 .
+31B7 .
+31B8 .
+31B9 .
+31BA .
+31F0 .
+31F1 .
+31F2 .
+31F3 .
+31F4 .
+31F5 .
+31F6 .
+31F7 .
+31F8 .
+31F9 .
+31FA .
+31FB .
+31FC .
+31FD .
+31FE .
+31FF .
+A000 .
+A001 .
+A002 .
+A003 .
+A004 .
+A005 .
+A006 .
+A007 .
+A008 .
+A009 .
+A00A .
+A00B .
+A00C .
+A00D .
+A00E .
+A00F .
+A010 .
+A011 .
+A012 .
+A013 .
+A014 .
+A015 .
+A016 .
+A017 .
+A018 .
+A019 .
+A01A .
+A01B .
+A01C .
+A01D .
+A01E .
+A01F .
+A020 .
+A021 .
+A022 .
+A023 .
+A024 .
+A025 .
+A026 .
+A027 .
+A028 .
+A029 .
+A02A .
+A02B .
+A02C .
+A02D .
+A02E .
+A02F .
+A030 .
+A031 .
+A032 .
+A033 .
+A034 .
+A035 .
+A036 .
+A037 .
+A038 .
+A039 .
+A03A .
+A03B .
+A03C .
+A03D .
+A03E .
+A03F .
+A040 .
+A041 .
+A042 .
+A043 .
+A044 .
+A045 .
+A046 .
+A047 .
+A048 .
+A049 .
+A04A .
+A04B .
+A04C .
+A04D .
+A04E .
+A04F .
+A050 .
+A051 .
+A052 .
+A053 .
+A054 .
+A055 .
+A056 .
+A057 .
+A058 .
+A059 .
+A05A .
+A05B .
+A05C .
+A05D .
+A05E .
+A05F .
+A060 .
+A061 .
+A062 .
+A063 .
+A064 .
+A065 .
+A066 .
+A067 .
+A068 .
+A069 .
+A06A .
+A06B .
+A06C .
+A06D .
+A06E .
+A06F .
+A070 .
+A071 .
+A072 .
+A073 .
+A074 .
+A075 .
+A076 .
+A077 .
+A078 .
+A079 .
+A07A .
+A07B .
+A07C .
+A07D .
+A07E .
+A07F .
+A080 .
+A081 .
+A082 .
+A083 .
+A084 .
+A085 .
+A086 .
+A087 .
+A088 .
+A089 .
+A08A .
+A08B .
+A08C .
+A08D .
+A08E .
+A08F .
+A090 .
+A091 .
+A092 .
+A093 .
+A094 .
+A095 .
+A096 .
+A097 .
+A098 .
+A099 .
+A09A .
+A09B .
+A09C .
+A09D .
+A09E .
+A09F .
+A0A0 .
+A0A1 .
+A0A2 .
+A0A3 .
+A0A4 .
+A0A5 .
+A0A6 .
+A0A7 .
+A0A8 .
+A0A9 .
+A0AA .
+A0AB .
+A0AC .
+A0AD .
+A0AE .
+A0AF .
+A0B0 .
+A0B1 .
+A0B2 .
+A0B3 .
+A0B4 .
+A0B5 .
+A0B6 .
+A0B7 .
+A0B8 .
+A0B9 .
+A0BA .
+A0BB .
+A0BC .
+A0BD .
+A0BE .
+A0BF .
+A0C0 .
+A0C1 .
+A0C2 .
+A0C3 .
+A0C4 .
+A0C5 .
+A0C6 .
+A0C7 .
+A0C8 .
+A0C9 .
+A0CA .
+A0CB .
+A0CC .
+A0CD .
+A0CE .
+A0CF .
+A0D0 .
+A0D1 .
+A0D2 .
+A0D3 .
+A0D4 .
+A0D5 .
+A0D6 .
+A0D7 .
+A0D8 .
+A0D9 .
+A0DA .
+A0DB .
+A0DC .
+A0DD .
+A0DE .
+A0DF .
+A0E0 .
+A0E1 .
+A0E2 .
+A0E3 .
+A0E4 .
+A0E5 .
+A0E6 .
+A0E7 .
+A0E8 .
+A0E9 .
+A0EA .
+A0EB .
+A0EC .
+A0ED .
+A0EE .
+A0EF .
+A0F0 .
+A0F1 .
+A0F2 .
+A0F3 .
+A0F4 .
+A0F5 .
+A0F6 .
+A0F7 .
+A0F8 .
+A0F9 .
+A0FA .
+A0FB .
+A0FC .
+A0FD .
+A0FE .
+A0FF .
+A100 .
+A101 .
+A102 .
+A103 .
+A104 .
+A105 .
+A106 .
+A107 .
+A108 .
+A109 .
+A10A .
+A10B .
+A10C .
+A10D .
+A10E .
+A10F .
+A110 .
+A111 .
+A112 .
+A113 .
+A114 .
+A115 .
+A116 .
+A117 .
+A118 .
+A119 .
+A11A .
+A11B .
+A11C .
+A11D .
+A11E .
+A11F .
+A120 .
+A121 .
+A122 .
+A123 .
+A124 .
+A125 .
+A126 .
+A127 .
+A128 .
+A129 .
+A12A .
+A12B .
+A12C .
+A12D .
+A12E .
+A12F .
+A130 .
+A131 .
+A132 .
+A133 .
+A134 .
+A135 .
+A136 .
+A137 .
+A138 .
+A139 .
+A13A .
+A13B .
+A13C .
+A13D .
+A13E .
+A13F .
+A140 .
+A141 .
+A142 .
+A143 .
+A144 .
+A145 .
+A146 .
+A147 .
+A148 .
+A149 .
+A14A .
+A14B .
+A14C .
+A14D .
+A14E .
+A14F .
+A150 .
+A151 .
+A152 .
+A153 .
+A154 .
+A155 .
+A156 .
+A157 .
+A158 .
+A159 .
+A15A .
+A15B .
+A15C .
+A15D .
+A15E .
+A15F .
+A160 .
+A161 .
+A162 .
+A163 .
+A164 .
+A165 .
+A166 .
+A167 .
+A168 .
+A169 .
+A16A .
+A16B .
+A16C .
+A16D .
+A16E .
+A16F .
+A170 .
+A171 .
+A172 .
+A173 .
+A174 .
+A175 .
+A176 .
+A177 .
+A178 .
+A179 .
+A17A .
+A17B .
+A17C .
+A17D .
+A17E .
+A17F .
+A180 .
+A181 .
+A182 .
+A183 .
+A184 .
+A185 .
+A186 .
+A187 .
+A188 .
+A189 .
+A18A .
+A18B .
+A18C .
+A18D .
+A18E .
+A18F .
+A190 .
+A191 .
+A192 .
+A193 .
+A194 .
+A195 .
+A196 .
+A197 .
+A198 .
+A199 .
+A19A .
+A19B .
+A19C .
+A19D .
+A19E .
+A19F .
+A1A0 .
+A1A1 .
+A1A2 .
+A1A3 .
+A1A4 .
+A1A5 .
+A1A6 .
+A1A7 .
+A1A8 .
+A1A9 .
+A1AA .
+A1AB .
+A1AC .
+A1AD .
+A1AE .
+A1AF .
+A1B0 .
+A1B1 .
+A1B2 .
+A1B3 .
+A1B4 .
+A1B5 .
+A1B6 .
+A1B7 .
+A1B8 .
+A1B9 .
+A1BA .
+A1BB .
+A1BC .
+A1BD .
+A1BE .
+A1BF .
+A1C0 .
+A1C1 .
+A1C2 .
+A1C3 .
+A1C4 .
+A1C5 .
+A1C6 .
+A1C7 .
+A1C8 .
+A1C9 .
+A1CA .
+A1CB .
+A1CC .
+A1CD .
+A1CE .
+A1CF .
+A1D0 .
+A1D1 .
+A1D2 .
+A1D3 .
+A1D4 .
+A1D5 .
+A1D6 .
+A1D7 .
+A1D8 .
+A1D9 .
+A1DA .
+A1DB .
+A1DC .
+A1DD .
+A1DE .
+A1DF .
+A1E0 .
+A1E1 .
+A1E2 .
+A1E3 .
+A1E4 .
+A1E5 .
+A1E6 .
+A1E7 .
+A1E8 .
+A1E9 .
+A1EA .
+A1EB .
+A1EC .
+A1ED .
+A1EE .
+A1EF .
+A1F0 .
+A1F1 .
+A1F2 .
+A1F3 .
+A1F4 .
+A1F5 .
+A1F6 .
+A1F7 .
+A1F8 .
+A1F9 .
+A1FA .
+A1FB .
+A1FC .
+A1FD .
+A1FE .
+A1FF .
+A200 .
+A201 .
+A202 .
+A203 .
+A204 .
+A205 .
+A206 .
+A207 .
+A208 .
+A209 .
+A20A .
+A20B .
+A20C .
+A20D .
+A20E .
+A20F .
+A210 .
+A211 .
+A212 .
+A213 .
+A214 .
+A215 .
+A216 .
+A217 .
+A218 .
+A219 .
+A21A .
+A21B .
+A21C .
+A21D .
+A21E .
+A21F .
+A220 .
+A221 .
+A222 .
+A223 .
+A224 .
+A225 .
+A226 .
+A227 .
+A228 .
+A229 .
+A22A .
+A22B .
+A22C .
+A22D .
+A22E .
+A22F .
+A230 .
+A231 .
+A232 .
+A233 .
+A234 .
+A235 .
+A236 .
+A237 .
+A238 .
+A239 .
+A23A .
+A23B .
+A23C .
+A23D .
+A23E .
+A23F .
+A240 .
+A241 .
+A242 .
+A243 .
+A244 .
+A245 .
+A246 .
+A247 .
+A248 .
+A249 .
+A24A .
+A24B .
+A24C .
+A24D .
+A24E .
+A24F .
+A250 .
+A251 .
+A252 .
+A253 .
+A254 .
+A255 .
+A256 .
+A257 .
+A258 .
+A259 .
+A25A .
+A25B .
+A25C .
+A25D .
+A25E .
+A25F .
+A260 .
+A261 .
+A262 .
+A263 .
+A264 .
+A265 .
+A266 .
+A267 .
+A268 .
+A269 .
+A26A .
+A26B .
+A26C .
+A26D .
+A26E .
+A26F .
+A270 .
+A271 .
+A272 .
+A273 .
+A274 .
+A275 .
+A276 .
+A277 .
+A278 .
+A279 .
+A27A .
+A27B .
+A27C .
+A27D .
+A27E .
+A27F .
+A280 .
+A281 .
+A282 .
+A283 .
+A284 .
+A285 .
+A286 .
+A287 .
+A288 .
+A289 .
+A28A .
+A28B .
+A28C .
+A28D .
+A28E .
+A28F .
+A290 .
+A291 .
+A292 .
+A293 .
+A294 .
+A295 .
+A296 .
+A297 .
+A298 .
+A299 .
+A29A .
+A29B .
+A29C .
+A29D .
+A29E .
+A29F .
+A2A0 .
+A2A1 .
+A2A2 .
+A2A3 .
+A2A4 .
+A2A5 .
+A2A6 .
+A2A7 .
+A2A8 .
+A2A9 .
+A2AA .
+A2AB .
+A2AC .
+A2AD .
+A2AE .
+A2AF .
+A2B0 .
+A2B1 .
+A2B2 .
+A2B3 .
+A2B4 .
+A2B5 .
+A2B6 .
+A2B7 .
+A2B8 .
+A2B9 .
+A2BA .
+A2BB .
+A2BC .
+A2BD .
+A2BE .
+A2BF .
+A2C0 .
+A2C1 .
+A2C2 .
+A2C3 .
+A2C4 .
+A2C5 .
+A2C6 .
+A2C7 .
+A2C8 .
+A2C9 .
+A2CA .
+A2CB .
+A2CC .
+A2CD .
+A2CE .
+A2CF .
+A2D0 .
+A2D1 .
+A2D2 .
+A2D3 .
+A2D4 .
+A2D5 .
+A2D6 .
+A2D7 .
+A2D8 .
+A2D9 .
+A2DA .
+A2DB .
+A2DC .
+A2DD .
+A2DE .
+A2DF .
+A2E0 .
+A2E1 .
+A2E2 .
+A2E3 .
+A2E4 .
+A2E5 .
+A2E6 .
+A2E7 .
+A2E8 .
+A2E9 .
+A2EA .
+A2EB .
+A2EC .
+A2ED .
+A2EE .
+A2EF .
+A2F0 .
+A2F1 .
+A2F2 .
+A2F3 .
+A2F4 .
+A2F5 .
+A2F6 .
+A2F7 .
+A2F8 .
+A2F9 .
+A2FA .
+A2FB .
+A2FC .
+A2FD .
+A2FE .
+A2FF .
+A300 .
+A301 .
+A302 .
+A303 .
+A304 .
+A305 .
+A306 .
+A307 .
+A308 .
+A309 .
+A30A .
+A30B .
+A30C .
+A30D .
+A30E .
+A30F .
+A310 .
+A311 .
+A312 .
+A313 .
+A314 .
+A315 .
+A316 .
+A317 .
+A318 .
+A319 .
+A31A .
+A31B .
+A31C .
+A31D .
+A31E .
+A31F .
+A320 .
+A321 .
+A322 .
+A323 .
+A324 .
+A325 .
+A326 .
+A327 .
+A328 .
+A329 .
+A32A .
+A32B .
+A32C .
+A32D .
+A32E .
+A32F .
+A330 .
+A331 .
+A332 .
+A333 .
+A334 .
+A335 .
+A336 .
+A337 .
+A338 .
+A339 .
+A33A .
+A33B .
+A33C .
+A33D .
+A33E .
+A33F .
+A340 .
+A341 .
+A342 .
+A343 .
+A344 .
+A345 .
+A346 .
+A347 .
+A348 .
+A349 .
+A34A .
+A34B .
+A34C .
+A34D .
+A34E .
+A34F .
+A350 .
+A351 .
+A352 .
+A353 .
+A354 .
+A355 .
+A356 .
+A357 .
+A358 .
+A359 .
+A35A .
+A35B .
+A35C .
+A35D .
+A35E .
+A35F .
+A360 .
+A361 .
+A362 .
+A363 .
+A364 .
+A365 .
+A366 .
+A367 .
+A368 .
+A369 .
+A36A .
+A36B .
+A36C .
+A36D .
+A36E .
+A36F .
+A370 .
+A371 .
+A372 .
+A373 .
+A374 .
+A375 .
+A376 .
+A377 .
+A378 .
+A379 .
+A37A .
+A37B .
+A37C .
+A37D .
+A37E .
+A37F .
+A380 .
+A381 .
+A382 .
+A383 .
+A384 .
+A385 .
+A386 .
+A387 .
+A388 .
+A389 .
+A38A .
+A38B .
+A38C .
+A38D .
+A38E .
+A38F .
+A390 .
+A391 .
+A392 .
+A393 .
+A394 .
+A395 .
+A396 .
+A397 .
+A398 .
+A399 .
+A39A .
+A39B .
+A39C .
+A39D .
+A39E .
+A39F .
+A3A0 .
+A3A1 .
+A3A2 .
+A3A3 .
+A3A4 .
+A3A5 .
+A3A6 .
+A3A7 .
+A3A8 .
+A3A9 .
+A3AA .
+A3AB .
+A3AC .
+A3AD .
+A3AE .
+A3AF .
+A3B0 .
+A3B1 .
+A3B2 .
+A3B3 .
+A3B4 .
+A3B5 .
+A3B6 .
+A3B7 .
+A3B8 .
+A3B9 .
+A3BA .
+A3BB .
+A3BC .
+A3BD .
+A3BE .
+A3BF .
+A3C0 .
+A3C1 .
+A3C2 .
+A3C3 .
+A3C4 .
+A3C5 .
+A3C6 .
+A3C7 .
+A3C8 .
+A3C9 .
+A3CA .
+A3CB .
+A3CC .
+A3CD .
+A3CE .
+A3CF .
+A3D0 .
+A3D1 .
+A3D2 .
+A3D3 .
+A3D4 .
+A3D5 .
+A3D6 .
+A3D7 .
+A3D8 .
+A3D9 .
+A3DA .
+A3DB .
+A3DC .
+A3DD .
+A3DE .
+A3DF .
+A3E0 .
+A3E1 .
+A3E2 .
+A3E3 .
+A3E4 .
+A3E5 .
+A3E6 .
+A3E7 .
+A3E8 .
+A3E9 .
+A3EA .
+A3EB .
+A3EC .
+A3ED .
+A3EE .
+A3EF .
+A3F0 .
+A3F1 .
+A3F2 .
+A3F3 .
+A3F4 .
+A3F5 .
+A3F6 .
+A3F7 .
+A3F8 .
+A3F9 .
+A3FA .
+A3FB .
+A3FC .
+A3FD .
+A3FE .
+A3FF .
+A400 .
+A401 .
+A402 .
+A403 .
+A404 .
+A405 .
+A406 .
+A407 .
+A408 .
+A409 .
+A40A .
+A40B .
+A40C .
+A40D .
+A40E .
+A40F .
+A410 .
+A411 .
+A412 .
+A413 .
+A414 .
+A415 .
+A416 .
+A417 .
+A418 .
+A419 .
+A41A .
+A41B .
+A41C .
+A41D .
+A41E .
+A41F .
+A420 .
+A421 .
+A422 .
+A423 .
+A424 .
+A425 .
+A426 .
+A427 .
+A428 .
+A429 .
+A42A .
+A42B .
+A42C .
+A42D .
+A42E .
+A42F .
+A430 .
+A431 .
+A432 .
+A433 .
+A434 .
+A435 .
+A436 .
+A437 .
+A438 .
+A439 .
+A43A .
+A43B .
+A43C .
+A43D .
+A43E .
+A43F .
+A440 .
+A441 .
+A442 .
+A443 .
+A444 .
+A445 .
+A446 .
+A447 .
+A448 .
+A449 .
+A44A .
+A44B .
+A44C .
+A44D .
+A44E .
+A44F .
+A450 .
+A451 .
+A452 .
+A453 .
+A454 .
+A455 .
+A456 .
+A457 .
+A458 .
+A459 .
+A45A .
+A45B .
+A45C .
+A45D .
+A45E .
+A45F .
+A460 .
+A461 .
+A462 .
+A463 .
+A464 .
+A465 .
+A466 .
+A467 .
+A468 .
+A469 .
+A46A .
+A46B .
+A46C .
+A46D .
+A46E .
+A46F .
+A470 .
+A471 .
+A472 .
+A473 .
+A474 .
+A475 .
+A476 .
+A477 .
+A478 .
+A479 .
+A47A .
+A47B .
+A47C .
+A47D .
+A47E .
+A47F .
+A480 .
+A481 .
+A482 .
+A483 .
+A484 .
+A485 .
+A486 .
+A487 .
+A488 .
+A489 .
+A48A .
+A48B .
+A48C .
+A4D0 .
+A4D1 .
+A4D2 .
+A4D3 .
+A4D4 .
+A4D5 .
+A4D6 .
+A4D7 .
+A4D8 .
+A4D9 .
+A4DA .
+A4DB .
+A4DC .
+A4DD .
+A4DE .
+A4DF .
+A4E0 .
+A4E1 .
+A4E2 .
+A4E3 .
+A4E4 .
+A4E5 .
+A4E6 .
+A4E7 .
+A4E8 .
+A4E9 .
+A4EA .
+A4EB .
+A4EC .
+A4ED .
+A4EE .
+A4EF .
+A4F0 .
+A4F1 .
+A4F2 .
+A4F3 .
+A4F4 .
+A4F5 .
+A4F6 .
+A4F7 .
+A4F8 .
+A4F9 .
+A4FA .
+A4FB .
+A4FC .
+A4FD .
+A500 .
+A501 .
+A502 .
+A503 .
+A504 .
+A505 .
+A506 .
+A507 .
+A508 .
+A509 .
+A50A .
+A50B .
+A50C .
+A50D .
+A50E .
+A50F .
+A510 .
+A511 .
+A512 .
+A513 .
+A514 .
+A515 .
+A516 .
+A517 .
+A518 .
+A519 .
+A51A .
+A51B .
+A51C .
+A51D .
+A51E .
+A51F .
+A520 .
+A521 .
+A522 .
+A523 .
+A524 .
+A525 .
+A526 .
+A527 .
+A528 .
+A529 .
+A52A .
+A52B .
+A52C .
+A52D .
+A52E .
+A52F .
+A530 .
+A531 .
+A532 .
+A533 .
+A534 .
+A535 .
+A536 .
+A537 .
+A538 .
+A539 .
+A53A .
+A53B .
+A53C .
+A53D .
+A53E .
+A53F .
+A540 .
+A541 .
+A542 .
+A543 .
+A544 .
+A545 .
+A546 .
+A547 .
+A548 .
+A549 .
+A54A .
+A54B .
+A54C .
+A54D .
+A54E .
+A54F .
+A550 .
+A551 .
+A552 .
+A553 .
+A554 .
+A555 .
+A556 .
+A557 .
+A558 .
+A559 .
+A55A .
+A55B .
+A55C .
+A55D .
+A55E .
+A55F .
+A560 .
+A561 .
+A562 .
+A563 .
+A564 .
+A565 .
+A566 .
+A567 .
+A568 .
+A569 .
+A56A .
+A56B .
+A56C .
+A56D .
+A56E .
+A56F .
+A570 .
+A571 .
+A572 .
+A573 .
+A574 .
+A575 .
+A576 .
+A577 .
+A578 .
+A579 .
+A57A .
+A57B .
+A57C .
+A57D .
+A57E .
+A57F .
+A580 .
+A581 .
+A582 .
+A583 .
+A584 .
+A585 .
+A586 .
+A587 .
+A588 .
+A589 .
+A58A .
+A58B .
+A58C .
+A58D .
+A58E .
+A58F .
+A590 .
+A591 .
+A592 .
+A593 .
+A594 .
+A595 .
+A596 .
+A597 .
+A598 .
+A599 .
+A59A .
+A59B .
+A59C .
+A59D .
+A59E .
+A59F .
+A5A0 .
+A5A1 .
+A5A2 .
+A5A3 .
+A5A4 .
+A5A5 .
+A5A6 .
+A5A7 .
+A5A8 .
+A5A9 .
+A5AA .
+A5AB .
+A5AC .
+A5AD .
+A5AE .
+A5AF .
+A5B0 .
+A5B1 .
+A5B2 .
+A5B3 .
+A5B4 .
+A5B5 .
+A5B6 .
+A5B7 .
+A5B8 .
+A5B9 .
+A5BA .
+A5BB .
+A5BC .
+A5BD .
+A5BE .
+A5BF .
+A5C0 .
+A5C1 .
+A5C2 .
+A5C3 .
+A5C4 .
+A5C5 .
+A5C6 .
+A5C7 .
+A5C8 .
+A5C9 .
+A5CA .
+A5CB .
+A5CC .
+A5CD .
+A5CE .
+A5CF .
+A5D0 .
+A5D1 .
+A5D2 .
+A5D3 .
+A5D4 .
+A5D5 .
+A5D6 .
+A5D7 .
+A5D8 .
+A5D9 .
+A5DA .
+A5DB .
+A5DC .
+A5DD .
+A5DE .
+A5DF .
+A5E0 .
+A5E1 .
+A5E2 .
+A5E3 .
+A5E4 .
+A5E5 .
+A5E6 .
+A5E7 .
+A5E8 .
+A5E9 .
+A5EA .
+A5EB .
+A5EC .
+A5ED .
+A5EE .
+A5EF .
+A5F0 .
+A5F1 .
+A5F2 .
+A5F3 .
+A5F4 .
+A5F5 .
+A5F6 .
+A5F7 .
+A5F8 .
+A5F9 .
+A5FA .
+A5FB .
+A5FC .
+A5FD .
+A5FE .
+A5FF .
+A600 .
+A601 .
+A602 .
+A603 .
+A604 .
+A605 .
+A606 .
+A607 .
+A608 .
+A609 .
+A60A .
+A60B .
+A60C .
+A610 .
+A611 .
+A612 .
+A613 .
+A614 .
+A615 .
+A616 .
+A617 .
+A618 .
+A619 .
+A61A .
+A61B .
+A61C .
+A61D .
+A61E .
+A61F .
+A62A .
+A62B .
+A641 A640
+A643 A642
+A645 A644
+A647 A646
+A649 A648
+A64B A64A
+A64D A64C
+A64F A64E
+A651 A650
+A653 A652
+A655 A654
+A657 A656
+A659 A658
+A65B A65A
+A65D A65C
+A65F A65E
+A661 A660
+A663 A662
+A665 A664
+A667 A666
+A669 A668
+A66B A66A
+A66D A66C
+A66E .
+A67F .
+A681 A680
+A683 A682
+A685 A684
+A687 A686
+A689 A688
+A68B A68A
+A68D A68C
+A68F A68E
+A691 A690
+A693 A692
+A695 A694
+A697 A696
+A6A0 .
+A6A1 .
+A6A2 .
+A6A3 .
+A6A4 .
+A6A5 .
+A6A6 .
+A6A7 .
+A6A8 .
+A6A9 .
+A6AA .
+A6AB .
+A6AC .
+A6AD .
+A6AE .
+A6AF .
+A6B0 .
+A6B1 .
+A6B2 .
+A6B3 .
+A6B4 .
+A6B5 .
+A6B6 .
+A6B7 .
+A6B8 .
+A6B9 .
+A6BA .
+A6BB .
+A6BC .
+A6BD .
+A6BE .
+A6BF .
+A6C0 .
+A6C1 .
+A6C2 .
+A6C3 .
+A6C4 .
+A6C5 .
+A6C6 .
+A6C7 .
+A6C8 .
+A6C9 .
+A6CA .
+A6CB .
+A6CC .
+A6CD .
+A6CE .
+A6CF .
+A6D0 .
+A6D1 .
+A6D2 .
+A6D3 .
+A6D4 .
+A6D5 .
+A6D6 .
+A6D7 .
+A6D8 .
+A6D9 .
+A6DA .
+A6DB .
+A6DC .
+A6DD .
+A6DE .
+A6DF .
+A6E0 .
+A6E1 .
+A6E2 .
+A6E3 .
+A6E4 .
+A6E5 .
+A717 .
+A718 .
+A719 .
+A71A .
+A71B .
+A71C .
+A71D .
+A71E .
+A71F .
+A723 A722
+A725 A724
+A727 A726
+A729 A728
+A72B A72A
+A72D A72C
+A72F A72E
+A730 .
+A731 .
+A733 A732
+A735 A734
+A737 A736
+A739 A738
+A73B A73A
+A73D A73C
+A73F A73E
+A741 A740
+A743 A742
+A745 A744
+A747 A746
+A749 A748
+A74B A74A
+A74D A74C
+A74F A74E
+A751 A750
+A753 A752
+A755 A754
+A757 A756
+A759 A758
+A75B A75A
+A75D A75C
+A75F A75E
+A761 A760
+A763 A762
+A765 A764
+A767 A766
+A769 A768
+A76B A76A
+A76D A76C
+A76F A76E
+A770 .
+A771 .
+A772 .
+A773 .
+A774 .
+A775 .
+A776 .
+A777 .
+A778 .
+A77A A779
+A77C A77B
+A77F A77E
+A781 A780
+A783 A782
+A785 A784
+A787 A786
+A788 .
+A78C A78B
+A78E .
+A791 A790
+A793 A792
+A7A1 A7A0
+A7A3 A7A2
+A7A5 A7A4
+A7A7 A7A6
+A7A9 A7A8
+A7F8 .
+A7F9 .
+A7FA .
+A7FB .
+A7FC .
+A7FD .
+A7FE .
+A7FF .
+A800 .
+A801 .
+A803 .
+A804 .
+A805 .
+A807 .
+A808 .
+A809 .
+A80A .
+A80C .
+A80D .
+A80E .
+A80F .
+A810 .
+A811 .
+A812 .
+A813 .
+A814 .
+A815 .
+A816 .
+A817 .
+A818 .
+A819 .
+A81A .
+A81B .
+A81C .
+A81D .
+A81E .
+A81F .
+A820 .
+A821 .
+A822 .
+A840 .
+A841 .
+A842 .
+A843 .
+A844 .
+A845 .
+A846 .
+A847 .
+A848 .
+A849 .
+A84A .
+A84B .
+A84C .
+A84D .
+A84E .
+A84F .
+A850 .
+A851 .
+A852 .
+A853 .
+A854 .
+A855 .
+A856 .
+A857 .
+A858 .
+A859 .
+A85A .
+A85B .
+A85C .
+A85D .
+A85E .
+A85F .
+A860 .
+A861 .
+A862 .
+A863 .
+A864 .
+A865 .
+A866 .
+A867 .
+A868 .
+A869 .
+A86A .
+A86B .
+A86C .
+A86D .
+A86E .
+A86F .
+A870 .
+A871 .
+A872 .
+A873 .
+A882 .
+A883 .
+A884 .
+A885 .
+A886 .
+A887 .
+A888 .
+A889 .
+A88A .
+A88B .
+A88C .
+A88D .
+A88E .
+A88F .
+A890 .
+A891 .
+A892 .
+A893 .
+A894 .
+A895 .
+A896 .
+A897 .
+A898 .
+A899 .
+A89A .
+A89B .
+A89C .
+A89D .
+A89E .
+A89F .
+A8A0 .
+A8A1 .
+A8A2 .
+A8A3 .
+A8A4 .
+A8A5 .
+A8A6 .
+A8A7 .
+A8A8 .
+A8A9 .
+A8AA .
+A8AB .
+A8AC .
+A8AD .
+A8AE .
+A8AF .
+A8B0 .
+A8B1 .
+A8B2 .
+A8B3 .
+A8F2 .
+A8F3 .
+A8F4 .
+A8F5 .
+A8F6 .
+A8F7 .
+A8FB .
+A90A .
+A90B .
+A90C .
+A90D .
+A90E .
+A90F .
+A910 .
+A911 .
+A912 .
+A913 .
+A914 .
+A915 .
+A916 .
+A917 .
+A918 .
+A919 .
+A91A .
+A91B .
+A91C .
+A91D .
+A91E .
+A91F .
+A920 .
+A921 .
+A922 .
+A923 .
+A924 .
+A925 .
+A930 .
+A931 .
+A932 .
+A933 .
+A934 .
+A935 .
+A936 .
+A937 .
+A938 .
+A939 .
+A93A .
+A93B .
+A93C .
+A93D .
+A93E .
+A93F .
+A940 .
+A941 .
+A942 .
+A943 .
+A944 .
+A945 .
+A946 .
+A960 .
+A961 .
+A962 .
+A963 .
+A964 .
+A965 .
+A966 .
+A967 .
+A968 .
+A969 .
+A96A .
+A96B .
+A96C .
+A96D .
+A96E .
+A96F .
+A970 .
+A971 .
+A972 .
+A973 .
+A974 .
+A975 .
+A976 .
+A977 .
+A978 .
+A979 .
+A97A .
+A97B .
+A97C .
+A984 .
+A985 .
+A986 .
+A987 .
+A988 .
+A989 .
+A98A .
+A98B .
+A98C .
+A98D .
+A98E .
+A98F .
+A990 .
+A991 .
+A992 .
+A993 .
+A994 .
+A995 .
+A996 .
+A997 .
+A998 .
+A999 .
+A99A .
+A99B .
+A99C .
+A99D .
+A99E .
+A99F .
+A9A0 .
+A9A1 .
+A9A2 .
+A9A3 .
+A9A4 .
+A9A5 .
+A9A6 .
+A9A7 .
+A9A8 .
+A9A9 .
+A9AA .
+A9AB .
+A9AC .
+A9AD .
+A9AE .
+A9AF .
+A9B0 .
+A9B1 .
+A9B2 .
+A9CF .
+AA00 .
+AA01 .
+AA02 .
+AA03 .
+AA04 .
+AA05 .
+AA06 .
+AA07 .
+AA08 .
+AA09 .
+AA0A .
+AA0B .
+AA0C .
+AA0D .
+AA0E .
+AA0F .
+AA10 .
+AA11 .
+AA12 .
+AA13 .
+AA14 .
+AA15 .
+AA16 .
+AA17 .
+AA18 .
+AA19 .
+AA1A .
+AA1B .
+AA1C .
+AA1D .
+AA1E .
+AA1F .
+AA20 .
+AA21 .
+AA22 .
+AA23 .
+AA24 .
+AA25 .
+AA26 .
+AA27 .
+AA28 .
+AA40 .
+AA41 .
+AA42 .
+AA44 .
+AA45 .
+AA46 .
+AA47 .
+AA48 .
+AA49 .
+AA4A .
+AA4B .
+AA60 .
+AA61 .
+AA62 .
+AA63 .
+AA64 .
+AA65 .
+AA66 .
+AA67 .
+AA68 .
+AA69 .
+AA6A .
+AA6B .
+AA6C .
+AA6D .
+AA6E .
+AA6F .
+AA70 .
+AA71 .
+AA72 .
+AA73 .
+AA74 .
+AA75 .
+AA76 .
+AA7A .
+AA80 .
+AA81 .
+AA82 .
+AA83 .
+AA84 .
+AA85 .
+AA86 .
+AA87 .
+AA88 .
+AA89 .
+AA8A .
+AA8B .
+AA8C .
+AA8D .
+AA8E .
+AA8F .
+AA90 .
+AA91 .
+AA92 .
+AA93 .
+AA94 .
+AA95 .
+AA96 .
+AA97 .
+AA98 .
+AA99 .
+AA9A .
+AA9B .
+AA9C .
+AA9D .
+AA9E .
+AA9F .
+AAA0 .
+AAA1 .
+AAA2 .
+AAA3 .
+AAA4 .
+AAA5 .
+AAA6 .
+AAA7 .
+AAA8 .
+AAA9 .
+AAAA .
+AAAB .
+AAAC .
+AAAD .
+AAAE .
+AAAF .
+AAB1 .
+AAB5 .
+AAB6 .
+AAB9 .
+AABA .
+AABB .
+AABC .
+AABD .
+AAC0 .
+AAC2 .
+AADB .
+AADC .
+AADD .
+AAE0 .
+AAE1 .
+AAE2 .
+AAE3 .
+AAE4 .
+AAE5 .
+AAE6 .
+AAE7 .
+AAE8 .
+AAE9 .
+AAEA .
+AAF2 .
+AAF3 .
+AAF4 .
+AB01 .
+AB02 .
+AB03 .
+AB04 .
+AB05 .
+AB06 .
+AB09 .
+AB0A .
+AB0B .
+AB0C .
+AB0D .
+AB0E .
+AB11 .
+AB12 .
+AB13 .
+AB14 .
+AB15 .
+AB16 .
+AB20 .
+AB21 .
+AB22 .
+AB23 .
+AB24 .
+AB25 .
+AB26 .
+AB28 .
+AB29 .
+AB2A .
+AB2B .
+AB2C .
+AB2D .
+AB2E .
+ABC0 .
+ABC1 .
+ABC2 .
+ABC3 .
+ABC4 .
+ABC5 .
+ABC6 .
+ABC7 .
+ABC8 .
+ABC9 .
+ABCA .
+ABCB .
+ABCC .
+ABCD .
+ABCE .
+ABCF .
+ABD0 .
+ABD1 .
+ABD2 .
+ABD3 .
+ABD4 .
+ABD5 .
+ABD6 .
+ABD7 .
+ABD8 .
+ABD9 .
+ABDA .
+ABDB .
+ABDC .
+ABDD .
+ABDE .
+ABDF .
+ABE0 .
+ABE1 .
+ABE2 .
+D7B0 .
+D7B1 .
+D7B2 .
+D7B3 .
+D7B4 .
+D7B5 .
+D7B6 .
+D7B7 .
+D7B8 .
+D7B9 .
+D7BA .
+D7BB .
+D7BC .
+D7BD .
+D7BE .
+D7BF .
+D7C0 .
+D7C1 .
+D7C2 .
+D7C3 .
+D7C4 .
+D7C5 .
+D7C6 .
+D7CB .
+D7CC .
+D7CD .
+D7CE .
+D7CF .
+D7D0 .
+D7D1 .
+D7D2 .
+D7D3 .
+D7D4 .
+D7D5 .
+D7D6 .
+D7D7 .
+D7D8 .
+D7D9 .
+D7DA .
+D7DB .
+D7DC .
+D7DD .
+D7DE .
+D7DF .
+D7E0 .
+D7E1 .
+D7E2 .
+D7E3 .
+D7E4 .
+D7E5 .
+D7E6 .
+D7E7 .
+D7E8 .
+D7E9 .
+D7EA .
+D7EB .
+D7EC .
+D7ED .
+D7EE .
+D7EF .
+D7F0 .
+D7F1 .
+D7F2 .
+D7F3 .
+D7F4 .
+D7F5 .
+D7F6 .
+D7F7 .
+D7F8 .
+D7F9 .
+D7FA .
+D7FB .
+F900 .
+F901 .
+F902 .
+F903 .
+F904 .
+F905 .
+F906 .
+F907 .
+F908 .
+F909 .
+F90A .
+F90B .
+F90C .
+F90D .
+F90E .
+F90F .
+F910 .
+F911 .
+F912 .
+F913 .
+F914 .
+F915 .
+F916 .
+F917 .
+F918 .
+F919 .
+F91A .
+F91B .
+F91C .
+F91D .
+F91E .
+F91F .
+F920 .
+F921 .
+F922 .
+F923 .
+F924 .
+F925 .
+F926 .
+F927 .
+F928 .
+F929 .
+F92A .
+F92B .
+F92C .
+F92D .
+F92E .
+F92F .
+F930 .
+F931 .
+F932 .
+F933 .
+F934 .
+F935 .
+F936 .
+F937 .
+F938 .
+F939 .
+F93A .
+F93B .
+F93C .
+F93D .
+F93E .
+F93F .
+F940 .
+F941 .
+F942 .
+F943 .
+F944 .
+F945 .
+F946 .
+F947 .
+F948 .
+F949 .
+F94A .
+F94B .
+F94C .
+F94D .
+F94E .
+F94F .
+F950 .
+F951 .
+F952 .
+F953 .
+F954 .
+F955 .
+F956 .
+F957 .
+F958 .
+F959 .
+F95A .
+F95B .
+F95C .
+F95D .
+F95E .
+F95F .
+F960 .
+F961 .
+F962 .
+F963 .
+F964 .
+F965 .
+F966 .
+F967 .
+F968 .
+F969 .
+F96A .
+F96B .
+F96C .
+F96D .
+F96E .
+F96F .
+F970 .
+F971 .
+F972 .
+F973 .
+F974 .
+F975 .
+F976 .
+F977 .
+F978 .
+F979 .
+F97A .
+F97B .
+F97C .
+F97D .
+F97E .
+F97F .
+F980 .
+F981 .
+F982 .
+F983 .
+F984 .
+F985 .
+F986 .
+F987 .
+F988 .
+F989 .
+F98A .
+F98B .
+F98C .
+F98D .
+F98E .
+F98F .
+F990 .
+F991 .
+F992 .
+F993 .
+F994 .
+F995 .
+F996 .
+F997 .
+F998 .
+F999 .
+F99A .
+F99B .
+F99C .
+F99D .
+F99E .
+F99F .
+F9A0 .
+F9A1 .
+F9A2 .
+F9A3 .
+F9A4 .
+F9A5 .
+F9A6 .
+F9A7 .
+F9A8 .
+F9A9 .
+F9AA .
+F9AB .
+F9AC .
+F9AD .
+F9AE .
+F9AF .
+F9B0 .
+F9B1 .
+F9B2 .
+F9B3 .
+F9B4 .
+F9B5 .
+F9B6 .
+F9B7 .
+F9B8 .
+F9B9 .
+F9BA .
+F9BB .
+F9BC .
+F9BD .
+F9BE .
+F9BF .
+F9C0 .
+F9C1 .
+F9C2 .
+F9C3 .
+F9C4 .
+F9C5 .
+F9C6 .
+F9C7 .
+F9C8 .
+F9C9 .
+F9CA .
+F9CB .
+F9CC .
+F9CD .
+F9CE .
+F9CF .
+F9D0 .
+F9D1 .
+F9D2 .
+F9D3 .
+F9D4 .
+F9D5 .
+F9D6 .
+F9D7 .
+F9D8 .
+F9D9 .
+F9DA .
+F9DB .
+F9DC .
+F9DD .
+F9DE .
+F9DF .
+F9E0 .
+F9E1 .
+F9E2 .
+F9E3 .
+F9E4 .
+F9E5 .
+F9E6 .
+F9E7 .
+F9E8 .
+F9E9 .
+F9EA .
+F9EB .
+F9EC .
+F9ED .
+F9EE .
+F9EF .
+F9F0 .
+F9F1 .
+F9F2 .
+F9F3 .
+F9F4 .
+F9F5 .
+F9F6 .
+F9F7 .
+F9F8 .
+F9F9 .
+F9FA .
+F9FB .
+F9FC .
+F9FD .
+F9FE .
+F9FF .
+FA00 .
+FA01 .
+FA02 .
+FA03 .
+FA04 .
+FA05 .
+FA06 .
+FA07 .
+FA08 .
+FA09 .
+FA0A .
+FA0B .
+FA0C .
+FA0D .
+FA0E .
+FA0F .
+FA10 .
+FA11 .
+FA12 .
+FA13 .
+FA14 .
+FA15 .
+FA16 .
+FA17 .
+FA18 .
+FA19 .
+FA1A .
+FA1B .
+FA1C .
+FA1D .
+FA1E .
+FA1F .
+FA20 .
+FA21 .
+FA22 .
+FA23 .
+FA24 .
+FA25 .
+FA26 .
+FA27 .
+FA28 .
+FA29 .
+FA2A .
+FA2B .
+FA2C .
+FA2D .
+FA2E .
+FA2F .
+FA30 .
+FA31 .
+FA32 .
+FA33 .
+FA34 .
+FA35 .
+FA36 .
+FA37 .
+FA38 .
+FA39 .
+FA3A .
+FA3B .
+FA3C .
+FA3D .
+FA3E .
+FA3F .
+FA40 .
+FA41 .
+FA42 .
+FA43 .
+FA44 .
+FA45 .
+FA46 .
+FA47 .
+FA48 .
+FA49 .
+FA4A .
+FA4B .
+FA4C .
+FA4D .
+FA4E .
+FA4F .
+FA50 .
+FA51 .
+FA52 .
+FA53 .
+FA54 .
+FA55 .
+FA56 .
+FA57 .
+FA58 .
+FA59 .
+FA5A .
+FA5B .
+FA5C .
+FA5D .
+FA5E .
+FA5F .
+FA60 .
+FA61 .
+FA62 .
+FA63 .
+FA64 .
+FA65 .
+FA66 .
+FA67 .
+FA68 .
+FA69 .
+FA6A .
+FA6B .
+FA6C .
+FA6D .
+FA70 .
+FA71 .
+FA72 .
+FA73 .
+FA74 .
+FA75 .
+FA76 .
+FA77 .
+FA78 .
+FA79 .
+FA7A .
+FA7B .
+FA7C .
+FA7D .
+FA7E .
+FA7F .
+FA80 .
+FA81 .
+FA82 .
+FA83 .
+FA84 .
+FA85 .
+FA86 .
+FA87 .
+FA88 .
+FA89 .
+FA8A .
+FA8B .
+FA8C .
+FA8D .
+FA8E .
+FA8F .
+FA90 .
+FA91 .
+FA92 .
+FA93 .
+FA94 .
+FA95 .
+FA96 .
+FA97 .
+FA98 .
+FA99 .
+FA9A .
+FA9B .
+FA9C .
+FA9D .
+FA9E .
+FA9F .
+FAA0 .
+FAA1 .
+FAA2 .
+FAA3 .
+FAA4 .
+FAA5 .
+FAA6 .
+FAA7 .
+FAA8 .
+FAA9 .
+FAAA .
+FAAB .
+FAAC .
+FAAD .
+FAAE .
+FAAF .
+FAB0 .
+FAB1 .
+FAB2 .
+FAB3 .
+FAB4 .
+FAB5 .
+FAB6 .
+FAB7 .
+FAB8 .
+FAB9 .
+FABA .
+FABB .
+FABC .
+FABD .
+FABE .
+FABF .
+FAC0 .
+FAC1 .
+FAC2 .
+FAC3 .
+FAC4 .
+FAC5 .
+FAC6 .
+FAC7 .
+FAC8 .
+FAC9 .
+FACA .
+FACB .
+FACC .
+FACD .
+FACE .
+FACF .
+FAD0 .
+FAD1 .
+FAD2 .
+FAD3 .
+FAD4 .
+FAD5 .
+FAD6 .
+FAD7 .
+FAD8 .
+FAD9 .
+FB00 .
+FB01 .
+FB02 .
+FB03 .
+FB04 .
+FB05 .
+FB06 .
+FB13 .
+FB14 .
+FB15 .
+FB16 .
+FB17 .
+FB1D .
+FB1F .
+FB20 .
+FB21 .
+FB22 .
+FB23 .
+FB24 .
+FB25 .
+FB26 .
+FB27 .
+FB28 .
+FB2A .
+FB2B .
+FB2C .
+FB2D .
+FB2E .
+FB2F .
+FB30 .
+FB31 .
+FB32 .
+FB33 .
+FB34 .
+FB35 .
+FB36 .
+FB38 .
+FB39 .
+FB3A .
+FB3B .
+FB3C .
+FB3E .
+FB40 .
+FB41 .
+FB43 .
+FB44 .
+FB46 .
+FB47 .
+FB48 .
+FB49 .
+FB4A .
+FB4B .
+FB4C .
+FB4D .
+FB4E .
+FB4F .
+FB50 .
+FB51 .
+FB52 .
+FB53 .
+FB54 .
+FB55 .
+FB56 .
+FB57 .
+FB58 .
+FB59 .
+FB5A .
+FB5B .
+FB5C .
+FB5D .
+FB5E .
+FB5F .
+FB60 .
+FB61 .
+FB62 .
+FB63 .
+FB64 .
+FB65 .
+FB66 .
+FB67 .
+FB68 .
+FB69 .
+FB6A .
+FB6B .
+FB6C .
+FB6D .
+FB6E .
+FB6F .
+FB70 .
+FB71 .
+FB72 .
+FB73 .
+FB74 .
+FB75 .
+FB76 .
+FB77 .
+FB78 .
+FB79 .
+FB7A .
+FB7B .
+FB7C .
+FB7D .
+FB7E .
+FB7F .
+FB80 .
+FB81 .
+FB82 .
+FB83 .
+FB84 .
+FB85 .
+FB86 .
+FB87 .
+FB88 .
+FB89 .
+FB8A .
+FB8B .
+FB8C .
+FB8D .
+FB8E .
+FB8F .
+FB90 .
+FB91 .
+FB92 .
+FB93 .
+FB94 .
+FB95 .
+FB96 .
+FB97 .
+FB98 .
+FB99 .
+FB9A .
+FB9B .
+FB9C .
+FB9D .
+FB9E .
+FB9F .
+FBA0 .
+FBA1 .
+FBA2 .
+FBA3 .
+FBA4 .
+FBA5 .
+FBA6 .
+FBA7 .
+FBA8 .
+FBA9 .
+FBAA .
+FBAB .
+FBAC .
+FBAD .
+FBAE .
+FBAF .
+FBB0 .
+FBB1 .
+FBD3 .
+FBD4 .
+FBD5 .
+FBD6 .
+FBD7 .
+FBD8 .
+FBD9 .
+FBDA .
+FBDB .
+FBDC .
+FBDD .
+FBDE .
+FBDF .
+FBE0 .
+FBE1 .
+FBE2 .
+FBE3 .
+FBE4 .
+FBE5 .
+FBE6 .
+FBE7 .
+FBE8 .
+FBE9 .
+FBEA .
+FBEB .
+FBEC .
+FBED .
+FBEE .
+FBEF .
+FBF0 .
+FBF1 .
+FBF2 .
+FBF3 .
+FBF4 .
+FBF5 .
+FBF6 .
+FBF7 .
+FBF8 .
+FBF9 .
+FBFA .
+FBFB .
+FBFC .
+FBFD .
+FBFE .
+FBFF .
+FC00 .
+FC01 .
+FC02 .
+FC03 .
+FC04 .
+FC05 .
+FC06 .
+FC07 .
+FC08 .
+FC09 .
+FC0A .
+FC0B .
+FC0C .
+FC0D .
+FC0E .
+FC0F .
+FC10 .
+FC11 .
+FC12 .
+FC13 .
+FC14 .
+FC15 .
+FC16 .
+FC17 .
+FC18 .
+FC19 .
+FC1A .
+FC1B .
+FC1C .
+FC1D .
+FC1E .
+FC1F .
+FC20 .
+FC21 .
+FC22 .
+FC23 .
+FC24 .
+FC25 .
+FC26 .
+FC27 .
+FC28 .
+FC29 .
+FC2A .
+FC2B .
+FC2C .
+FC2D .
+FC2E .
+FC2F .
+FC30 .
+FC31 .
+FC32 .
+FC33 .
+FC34 .
+FC35 .
+FC36 .
+FC37 .
+FC38 .
+FC39 .
+FC3A .
+FC3B .
+FC3C .
+FC3D .
+FC3E .
+FC3F .
+FC40 .
+FC41 .
+FC42 .
+FC43 .
+FC44 .
+FC45 .
+FC46 .
+FC47 .
+FC48 .
+FC49 .
+FC4A .
+FC4B .
+FC4C .
+FC4D .
+FC4E .
+FC4F .
+FC50 .
+FC51 .
+FC52 .
+FC53 .
+FC54 .
+FC55 .
+FC56 .
+FC57 .
+FC58 .
+FC59 .
+FC5A .
+FC5B .
+FC5C .
+FC5D .
+FC5E .
+FC5F .
+FC60 .
+FC61 .
+FC62 .
+FC63 .
+FC64 .
+FC65 .
+FC66 .
+FC67 .
+FC68 .
+FC69 .
+FC6A .
+FC6B .
+FC6C .
+FC6D .
+FC6E .
+FC6F .
+FC70 .
+FC71 .
+FC72 .
+FC73 .
+FC74 .
+FC75 .
+FC76 .
+FC77 .
+FC78 .
+FC79 .
+FC7A .
+FC7B .
+FC7C .
+FC7D .
+FC7E .
+FC7F .
+FC80 .
+FC81 .
+FC82 .
+FC83 .
+FC84 .
+FC85 .
+FC86 .
+FC87 .
+FC88 .
+FC89 .
+FC8A .
+FC8B .
+FC8C .
+FC8D .
+FC8E .
+FC8F .
+FC90 .
+FC91 .
+FC92 .
+FC93 .
+FC94 .
+FC95 .
+FC96 .
+FC97 .
+FC98 .
+FC99 .
+FC9A .
+FC9B .
+FC9C .
+FC9D .
+FC9E .
+FC9F .
+FCA0 .
+FCA1 .
+FCA2 .
+FCA3 .
+FCA4 .
+FCA5 .
+FCA6 .
+FCA7 .
+FCA8 .
+FCA9 .
+FCAA .
+FCAB .
+FCAC .
+FCAD .
+FCAE .
+FCAF .
+FCB0 .
+FCB1 .
+FCB2 .
+FCB3 .
+FCB4 .
+FCB5 .
+FCB6 .
+FCB7 .
+FCB8 .
+FCB9 .
+FCBA .
+FCBB .
+FCBC .
+FCBD .
+FCBE .
+FCBF .
+FCC0 .
+FCC1 .
+FCC2 .
+FCC3 .
+FCC4 .
+FCC5 .
+FCC6 .
+FCC7 .
+FCC8 .
+FCC9 .
+FCCA .
+FCCB .
+FCCC .
+FCCD .
+FCCE .
+FCCF .
+FCD0 .
+FCD1 .
+FCD2 .
+FCD3 .
+FCD4 .
+FCD5 .
+FCD6 .
+FCD7 .
+FCD8 .
+FCD9 .
+FCDA .
+FCDB .
+FCDC .
+FCDD .
+FCDE .
+FCDF .
+FCE0 .
+FCE1 .
+FCE2 .
+FCE3 .
+FCE4 .
+FCE5 .
+FCE6 .
+FCE7 .
+FCE8 .
+FCE9 .
+FCEA .
+FCEB .
+FCEC .
+FCED .
+FCEE .
+FCEF .
+FCF0 .
+FCF1 .
+FCF2 .
+FCF3 .
+FCF4 .
+FCF5 .
+FCF6 .
+FCF7 .
+FCF8 .
+FCF9 .
+FCFA .
+FCFB .
+FCFC .
+FCFD .
+FCFE .
+FCFF .
+FD00 .
+FD01 .
+FD02 .
+FD03 .
+FD04 .
+FD05 .
+FD06 .
+FD07 .
+FD08 .
+FD09 .
+FD0A .
+FD0B .
+FD0C .
+FD0D .
+FD0E .
+FD0F .
+FD10 .
+FD11 .
+FD12 .
+FD13 .
+FD14 .
+FD15 .
+FD16 .
+FD17 .
+FD18 .
+FD19 .
+FD1A .
+FD1B .
+FD1C .
+FD1D .
+FD1E .
+FD1F .
+FD20 .
+FD21 .
+FD22 .
+FD23 .
+FD24 .
+FD25 .
+FD26 .
+FD27 .
+FD28 .
+FD29 .
+FD2A .
+FD2B .
+FD2C .
+FD2D .
+FD2E .
+FD2F .
+FD30 .
+FD31 .
+FD32 .
+FD33 .
+FD34 .
+FD35 .
+FD36 .
+FD37 .
+FD38 .
+FD39 .
+FD3A .
+FD3B .
+FD3C .
+FD3D .
+FD50 .
+FD51 .
+FD52 .
+FD53 .
+FD54 .
+FD55 .
+FD56 .
+FD57 .
+FD58 .
+FD59 .
+FD5A .
+FD5B .
+FD5C .
+FD5D .
+FD5E .
+FD5F .
+FD60 .
+FD61 .
+FD62 .
+FD63 .
+FD64 .
+FD65 .
+FD66 .
+FD67 .
+FD68 .
+FD69 .
+FD6A .
+FD6B .
+FD6C .
+FD6D .
+FD6E .
+FD6F .
+FD70 .
+FD71 .
+FD72 .
+FD73 .
+FD74 .
+FD75 .
+FD76 .
+FD77 .
+FD78 .
+FD79 .
+FD7A .
+FD7B .
+FD7C .
+FD7D .
+FD7E .
+FD7F .
+FD80 .
+FD81 .
+FD82 .
+FD83 .
+FD84 .
+FD85 .
+FD86 .
+FD87 .
+FD88 .
+FD89 .
+FD8A .
+FD8B .
+FD8C .
+FD8D .
+FD8E .
+FD8F .
+FD92 .
+FD93 .
+FD94 .
+FD95 .
+FD96 .
+FD97 .
+FD98 .
+FD99 .
+FD9A .
+FD9B .
+FD9C .
+FD9D .
+FD9E .
+FD9F .
+FDA0 .
+FDA1 .
+FDA2 .
+FDA3 .
+FDA4 .
+FDA5 .
+FDA6 .
+FDA7 .
+FDA8 .
+FDA9 .
+FDAA .
+FDAB .
+FDAC .
+FDAD .
+FDAE .
+FDAF .
+FDB0 .
+FDB1 .
+FDB2 .
+FDB3 .
+FDB4 .
+FDB5 .
+FDB6 .
+FDB7 .
+FDB8 .
+FDB9 .
+FDBA .
+FDBB .
+FDBC .
+FDBD .
+FDBE .
+FDBF .
+FDC0 .
+FDC1 .
+FDC2 .
+FDC3 .
+FDC4 .
+FDC5 .
+FDC6 .
+FDC7 .
+FDF0 .
+FDF1 .
+FDF2 .
+FDF3 .
+FDF4 .
+FDF5 .
+FDF6 .
+FDF7 .
+FDF8 .
+FDF9 .
+FDFA .
+FDFB .
+FE70 .
+FE71 .
+FE72 .
+FE73 .
+FE74 .
+FE76 .
+FE77 .
+FE78 .
+FE79 .
+FE7A .
+FE7B .
+FE7C .
+FE7D .
+FE7E .
+FE7F .
+FE80 .
+FE81 .
+FE82 .
+FE83 .
+FE84 .
+FE85 .
+FE86 .
+FE87 .
+FE88 .
+FE89 .
+FE8A .
+FE8B .
+FE8C .
+FE8D .
+FE8E .
+FE8F .
+FE90 .
+FE91 .
+FE92 .
+FE93 .
+FE94 .
+FE95 .
+FE96 .
+FE97 .
+FE98 .
+FE99 .
+FE9A .
+FE9B .
+FE9C .
+FE9D .
+FE9E .
+FE9F .
+FEA0 .
+FEA1 .
+FEA2 .
+FEA3 .
+FEA4 .
+FEA5 .
+FEA6 .
+FEA7 .
+FEA8 .
+FEA9 .
+FEAA .
+FEAB .
+FEAC .
+FEAD .
+FEAE .
+FEAF .
+FEB0 .
+FEB1 .
+FEB2 .
+FEB3 .
+FEB4 .
+FEB5 .
+FEB6 .
+FEB7 .
+FEB8 .
+FEB9 .
+FEBA .
+FEBB .
+FEBC .
+FEBD .
+FEBE .
+FEBF .
+FEC0 .
+FEC1 .
+FEC2 .
+FEC3 .
+FEC4 .
+FEC5 .
+FEC6 .
+FEC7 .
+FEC8 .
+FEC9 .
+FECA .
+FECB .
+FECC .
+FECD .
+FECE .
+FECF .
+FED0 .
+FED1 .
+FED2 .
+FED3 .
+FED4 .
+FED5 .
+FED6 .
+FED7 .
+FED8 .
+FED9 .
+FEDA .
+FEDB .
+FEDC .
+FEDD .
+FEDE .
+FEDF .
+FEE0 .
+FEE1 .
+FEE2 .
+FEE3 .
+FEE4 .
+FEE5 .
+FEE6 .
+FEE7 .
+FEE8 .
+FEE9 .
+FEEA .
+FEEB .
+FEEC .
+FEED .
+FEEE .
+FEEF .
+FEF0 .
+FEF1 .
+FEF2 .
+FEF3 .
+FEF4 .
+FEF5 .
+FEF6 .
+FEF7 .
+FEF8 .
+FEF9 .
+FEFA .
+FEFB .
+FEFC .
+FF41 FF21
+FF42 FF22
+FF43 FF23
+FF44 FF24
+FF45 FF25
+FF46 FF26
+FF47 FF27
+FF48 FF28
+FF49 FF29
+FF4A FF2A
+FF4B FF2B
+FF4C FF2C
+FF4D FF2D
+FF4E FF2E
+FF4F FF2F
+FF50 FF30
+FF51 FF31
+FF52 FF32
+FF53 FF33
+FF54 FF34
+FF55 FF35
+FF56 FF36
+FF57 FF37
+FF58 FF38
+FF59 FF39
+FF5A FF3A
+FF66 .
+FF67 .
+FF68 .
+FF69 .
+FF6A .
+FF6B .
+FF6C .
+FF6D .
+FF6E .
+FF6F .
+FF70 .
+FF71 .
+FF72 .
+FF73 .
+FF74 .
+FF75 .
+FF76 .
+FF77 .
+FF78 .
+FF79 .
+FF7A .
+FF7B .
+FF7C .
+FF7D .
+FF7E .
+FF7F .
+FF80 .
+FF81 .
+FF82 .
+FF83 .
+FF84 .
+FF85 .
+FF86 .
+FF87 .
+FF88 .
+FF89 .
+FF8A .
+FF8B .
+FF8C .
+FF8D .
+FF8E .
+FF8F .
+FF90 .
+FF91 .
+FF92 .
+FF93 .
+FF94 .
+FF95 .
+FF96 .
+FF97 .
+FF98 .
+FF99 .
+FF9A .
+FF9B .
+FF9C .
+FF9D .
+FF9E .
+FF9F .
+FFA0 .
+FFA1 .
+FFA2 .
+FFA3 .
+FFA4 .
+FFA5 .
+FFA6 .
+FFA7 .
+FFA8 .
+FFA9 .
+FFAA .
+FFAB .
+FFAC .
+FFAD .
+FFAE .
+FFAF .
+FFB0 .
+FFB1 .
+FFB2 .
+FFB3 .
+FFB4 .
+FFB5 .
+FFB6 .
+FFB7 .
+FFB8 .
+FFB9 .
+FFBA .
+FFBB .
+FFBC .
+FFBD .
+FFBE .
+FFC2 .
+FFC3 .
+FFC4 .
+FFC5 .
+FFC6 .
+FFC7 .
+FFCA .
+FFCB .
+FFCC .
+FFCD .
+FFCE .
+FFCF .
+FFD2 .
+FFD3 .
+FFD4 .
+FFD5 .
+FFD6 .
+FFD7 .
+FFDA .
+FFDB .
+FFDC .
+10000 .
+10001 .
+10002 .
+10003 .
+10004 .
+10005 .
+10006 .
+10007 .
+10008 .
+10009 .
+1000A .
+1000B .
+1000D .
+1000E .
+1000F .
+10010 .
+10011 .
+10012 .
+10013 .
+10014 .
+10015 .
+10016 .
+10017 .
+10018 .
+10019 .
+1001A .
+1001B .
+1001C .
+1001D .
+1001E .
+1001F .
+10020 .
+10021 .
+10022 .
+10023 .
+10024 .
+10025 .
+10026 .
+10028 .
+10029 .
+1002A .
+1002B .
+1002C .
+1002D .
+1002E .
+1002F .
+10030 .
+10031 .
+10032 .
+10033 .
+10034 .
+10035 .
+10036 .
+10037 .
+10038 .
+10039 .
+1003A .
+1003C .
+1003D .
+1003F .
+10040 .
+10041 .
+10042 .
+10043 .
+10044 .
+10045 .
+10046 .
+10047 .
+10048 .
+10049 .
+1004A .
+1004B .
+1004C .
+1004D .
+10050 .
+10051 .
+10052 .
+10053 .
+10054 .
+10055 .
+10056 .
+10057 .
+10058 .
+10059 .
+1005A .
+1005B .
+1005C .
+1005D .
+10080 .
+10081 .
+10082 .
+10083 .
+10084 .
+10085 .
+10086 .
+10087 .
+10088 .
+10089 .
+1008A .
+1008B .
+1008C .
+1008D .
+1008E .
+1008F .
+10090 .
+10091 .
+10092 .
+10093 .
+10094 .
+10095 .
+10096 .
+10097 .
+10098 .
+10099 .
+1009A .
+1009B .
+1009C .
+1009D .
+1009E .
+1009F .
+100A0 .
+100A1 .
+100A2 .
+100A3 .
+100A4 .
+100A5 .
+100A6 .
+100A7 .
+100A8 .
+100A9 .
+100AA .
+100AB .
+100AC .
+100AD .
+100AE .
+100AF .
+100B0 .
+100B1 .
+100B2 .
+100B3 .
+100B4 .
+100B5 .
+100B6 .
+100B7 .
+100B8 .
+100B9 .
+100BA .
+100BB .
+100BC .
+100BD .
+100BE .
+100BF .
+100C0 .
+100C1 .
+100C2 .
+100C3 .
+100C4 .
+100C5 .
+100C6 .
+100C7 .
+100C8 .
+100C9 .
+100CA .
+100CB .
+100CC .
+100CD .
+100CE .
+100CF .
+100D0 .
+100D1 .
+100D2 .
+100D3 .
+100D4 .
+100D5 .
+100D6 .
+100D7 .
+100D8 .
+100D9 .
+100DA .
+100DB .
+100DC .
+100DD .
+100DE .
+100DF .
+100E0 .
+100E1 .
+100E2 .
+100E3 .
+100E4 .
+100E5 .
+100E6 .
+100E7 .
+100E8 .
+100E9 .
+100EA .
+100EB .
+100EC .
+100ED .
+100EE .
+100EF .
+100F0 .
+100F1 .
+100F2 .
+100F3 .
+100F4 .
+100F5 .
+100F6 .
+100F7 .
+100F8 .
+100F9 .
+100FA .
+10280 .
+10281 .
+10282 .
+10283 .
+10284 .
+10285 .
+10286 .
+10287 .
+10288 .
+10289 .
+1028A .
+1028B .
+1028C .
+1028D .
+1028E .
+1028F .
+10290 .
+10291 .
+10292 .
+10293 .
+10294 .
+10295 .
+10296 .
+10297 .
+10298 .
+10299 .
+1029A .
+1029B .
+1029C .
+102A0 .
+102A1 .
+102A2 .
+102A3 .
+102A4 .
+102A5 .
+102A6 .
+102A7 .
+102A8 .
+102A9 .
+102AA .
+102AB .
+102AC .
+102AD .
+102AE .
+102AF .
+102B0 .
+102B1 .
+102B2 .
+102B3 .
+102B4 .
+102B5 .
+102B6 .
+102B7 .
+102B8 .
+102B9 .
+102BA .
+102BB .
+102BC .
+102BD .
+102BE .
+102BF .
+102C0 .
+102C1 .
+102C2 .
+102C3 .
+102C4 .
+102C5 .
+102C6 .
+102C7 .
+102C8 .
+102C9 .
+102CA .
+102CB .
+102CC .
+102CD .
+102CE .
+102CF .
+102D0 .
+10300 .
+10301 .
+10302 .
+10303 .
+10304 .
+10305 .
+10306 .
+10307 .
+10308 .
+10309 .
+1030A .
+1030B .
+1030C .
+1030D .
+1030E .
+1030F .
+10310 .
+10311 .
+10312 .
+10313 .
+10314 .
+10315 .
+10316 .
+10317 .
+10318 .
+10319 .
+1031A .
+1031B .
+1031C .
+1031D .
+1031E .
+10330 .
+10331 .
+10332 .
+10333 .
+10334 .
+10335 .
+10336 .
+10337 .
+10338 .
+10339 .
+1033A .
+1033B .
+1033C .
+1033D .
+1033E .
+1033F .
+10340 .
+10342 .
+10343 .
+10344 .
+10345 .
+10346 .
+10347 .
+10348 .
+10349 .
+10380 .
+10381 .
+10382 .
+10383 .
+10384 .
+10385 .
+10386 .
+10387 .
+10388 .
+10389 .
+1038A .
+1038B .
+1038C .
+1038D .
+1038E .
+1038F .
+10390 .
+10391 .
+10392 .
+10393 .
+10394 .
+10395 .
+10396 .
+10397 .
+10398 .
+10399 .
+1039A .
+1039B .
+1039C .
+1039D .
+103A0 .
+103A1 .
+103A2 .
+103A3 .
+103A4 .
+103A5 .
+103A6 .
+103A7 .
+103A8 .
+103A9 .
+103AA .
+103AB .
+103AC .
+103AD .
+103AE .
+103AF .
+103B0 .
+103B1 .
+103B2 .
+103B3 .
+103B4 .
+103B5 .
+103B6 .
+103B7 .
+103B8 .
+103B9 .
+103BA .
+103BB .
+103BC .
+103BD .
+103BE .
+103BF .
+103C0 .
+103C1 .
+103C2 .
+103C3 .
+103C8 .
+103C9 .
+103CA .
+103CB .
+103CC .
+103CD .
+103CE .
+103CF .
+10428 10400
+10429 10401
+1042A 10402
+1042B 10403
+1042C 10404
+1042D 10405
+1042E 10406
+1042F 10407
+10430 10408
+10431 10409
+10432 1040A
+10433 1040B
+10434 1040C
+10435 1040D
+10436 1040E
+10437 1040F
+10438 10410
+10439 10411
+1043A 10412
+1043B 10413
+1043C 10414
+1043D 10415
+1043E 10416
+1043F 10417
+10440 10418
+10441 10419
+10442 1041A
+10443 1041B
+10444 1041C
+10445 1041D
+10446 1041E
+10447 1041F
+10448 10420
+10449 10421
+1044A 10422
+1044B 10423
+1044C 10424
+1044D 10425
+1044E 10426
+1044F 10427
+10450 .
+10451 .
+10452 .
+10453 .
+10454 .
+10455 .
+10456 .
+10457 .
+10458 .
+10459 .
+1045A .
+1045B .
+1045C .
+1045D .
+1045E .
+1045F .
+10460 .
+10461 .
+10462 .
+10463 .
+10464 .
+10465 .
+10466 .
+10467 .
+10468 .
+10469 .
+1046A .
+1046B .
+1046C .
+1046D .
+1046E .
+1046F .
+10470 .
+10471 .
+10472 .
+10473 .
+10474 .
+10475 .
+10476 .
+10477 .
+10478 .
+10479 .
+1047A .
+1047B .
+1047C .
+1047D .
+1047E .
+1047F .
+10480 .
+10481 .
+10482 .
+10483 .
+10484 .
+10485 .
+10486 .
+10487 .
+10488 .
+10489 .
+1048A .
+1048B .
+1048C .
+1048D .
+1048E .
+1048F .
+10490 .
+10491 .
+10492 .
+10493 .
+10494 .
+10495 .
+10496 .
+10497 .
+10498 .
+10499 .
+1049A .
+1049B .
+1049C .
+1049D .
+10800 .
+10801 .
+10802 .
+10803 .
+10804 .
+10805 .
+10808 .
+1080A .
+1080B .
+1080C .
+1080D .
+1080E .
+1080F .
+10810 .
+10811 .
+10812 .
+10813 .
+10814 .
+10815 .
+10816 .
+10817 .
+10818 .
+10819 .
+1081A .
+1081B .
+1081C .
+1081D .
+1081E .
+1081F .
+10820 .
+10821 .
+10822 .
+10823 .
+10824 .
+10825 .
+10826 .
+10827 .
+10828 .
+10829 .
+1082A .
+1082B .
+1082C .
+1082D .
+1082E .
+1082F .
+10830 .
+10831 .
+10832 .
+10833 .
+10834 .
+10835 .
+10837 .
+10838 .
+1083C .
+1083F .
+10840 .
+10841 .
+10842 .
+10843 .
+10844 .
+10845 .
+10846 .
+10847 .
+10848 .
+10849 .
+1084A .
+1084B .
+1084C .
+1084D .
+1084E .
+1084F .
+10850 .
+10851 .
+10852 .
+10853 .
+10854 .
+10855 .
+10900 .
+10901 .
+10902 .
+10903 .
+10904 .
+10905 .
+10906 .
+10907 .
+10908 .
+10909 .
+1090A .
+1090B .
+1090C .
+1090D .
+1090E .
+1090F .
+10910 .
+10911 .
+10912 .
+10913 .
+10914 .
+10915 .
+10920 .
+10921 .
+10922 .
+10923 .
+10924 .
+10925 .
+10926 .
+10927 .
+10928 .
+10929 .
+1092A .
+1092B .
+1092C .
+1092D .
+1092E .
+1092F .
+10930 .
+10931 .
+10932 .
+10933 .
+10934 .
+10935 .
+10936 .
+10937 .
+10938 .
+10939 .
+10980 .
+10981 .
+10982 .
+10983 .
+10984 .
+10985 .
+10986 .
+10987 .
+10988 .
+10989 .
+1098A .
+1098B .
+1098C .
+1098D .
+1098E .
+1098F .
+10990 .
+10991 .
+10992 .
+10993 .
+10994 .
+10995 .
+10996 .
+10997 .
+10998 .
+10999 .
+1099A .
+1099B .
+1099C .
+1099D .
+1099E .
+1099F .
+109A0 .
+109A1 .
+109A2 .
+109A3 .
+109A4 .
+109A5 .
+109A6 .
+109A7 .
+109A8 .
+109A9 .
+109AA .
+109AB .
+109AC .
+109AD .
+109AE .
+109AF .
+109B0 .
+109B1 .
+109B2 .
+109B3 .
+109B4 .
+109B5 .
+109B6 .
+109B7 .
+109BE .
+109BF .
+10A00 .
+10A10 .
+10A11 .
+10A12 .
+10A13 .
+10A15 .
+10A16 .
+10A17 .
+10A19 .
+10A1A .
+10A1B .
+10A1C .
+10A1D .
+10A1E .
+10A1F .
+10A20 .
+10A21 .
+10A22 .
+10A23 .
+10A24 .
+10A25 .
+10A26 .
+10A27 .
+10A28 .
+10A29 .
+10A2A .
+10A2B .
+10A2C .
+10A2D .
+10A2E .
+10A2F .
+10A30 .
+10A31 .
+10A32 .
+10A33 .
+10A60 .
+10A61 .
+10A62 .
+10A63 .
+10A64 .
+10A65 .
+10A66 .
+10A67 .
+10A68 .
+10A69 .
+10A6A .
+10A6B .
+10A6C .
+10A6D .
+10A6E .
+10A6F .
+10A70 .
+10A71 .
+10A72 .
+10A73 .
+10A74 .
+10A75 .
+10A76 .
+10A77 .
+10A78 .
+10A79 .
+10A7A .
+10A7B .
+10A7C .
+10B00 .
+10B01 .
+10B02 .
+10B03 .
+10B04 .
+10B05 .
+10B06 .
+10B07 .
+10B08 .
+10B09 .
+10B0A .
+10B0B .
+10B0C .
+10B0D .
+10B0E .
+10B0F .
+10B10 .
+10B11 .
+10B12 .
+10B13 .
+10B14 .
+10B15 .
+10B16 .
+10B17 .
+10B18 .
+10B19 .
+10B1A .
+10B1B .
+10B1C .
+10B1D .
+10B1E .
+10B1F .
+10B20 .
+10B21 .
+10B22 .
+10B23 .
+10B24 .
+10B25 .
+10B26 .
+10B27 .
+10B28 .
+10B29 .
+10B2A .
+10B2B .
+10B2C .
+10B2D .
+10B2E .
+10B2F .
+10B30 .
+10B31 .
+10B32 .
+10B33 .
+10B34 .
+10B35 .
+10B40 .
+10B41 .
+10B42 .
+10B43 .
+10B44 .
+10B45 .
+10B46 .
+10B47 .
+10B48 .
+10B49 .
+10B4A .
+10B4B .
+10B4C .
+10B4D .
+10B4E .
+10B4F .
+10B50 .
+10B51 .
+10B52 .
+10B53 .
+10B54 .
+10B55 .
+10B60 .
+10B61 .
+10B62 .
+10B63 .
+10B64 .
+10B65 .
+10B66 .
+10B67 .
+10B68 .
+10B69 .
+10B6A .
+10B6B .
+10B6C .
+10B6D .
+10B6E .
+10B6F .
+10B70 .
+10B71 .
+10B72 .
+10C00 .
+10C01 .
+10C02 .
+10C03 .
+10C04 .
+10C05 .
+10C06 .
+10C07 .
+10C08 .
+10C09 .
+10C0A .
+10C0B .
+10C0C .
+10C0D .
+10C0E .
+10C0F .
+10C10 .
+10C11 .
+10C12 .
+10C13 .
+10C14 .
+10C15 .
+10C16 .
+10C17 .
+10C18 .
+10C19 .
+10C1A .
+10C1B .
+10C1C .
+10C1D .
+10C1E .
+10C1F .
+10C20 .
+10C21 .
+10C22 .
+10C23 .
+10C24 .
+10C25 .
+10C26 .
+10C27 .
+10C28 .
+10C29 .
+10C2A .
+10C2B .
+10C2C .
+10C2D .
+10C2E .
+10C2F .
+10C30 .
+10C31 .
+10C32 .
+10C33 .
+10C34 .
+10C35 .
+10C36 .
+10C37 .
+10C38 .
+10C39 .
+10C3A .
+10C3B .
+10C3C .
+10C3D .
+10C3E .
+10C3F .
+10C40 .
+10C41 .
+10C42 .
+10C43 .
+10C44 .
+10C45 .
+10C46 .
+10C47 .
+10C48 .
+11003 .
+11004 .
+11005 .
+11006 .
+11007 .
+11008 .
+11009 .
+1100A .
+1100B .
+1100C .
+1100D .
+1100E .
+1100F .
+11010 .
+11011 .
+11012 .
+11013 .
+11014 .
+11015 .
+11016 .
+11017 .
+11018 .
+11019 .
+1101A .
+1101B .
+1101C .
+1101D .
+1101E .
+1101F .
+11020 .
+11021 .
+11022 .
+11023 .
+11024 .
+11025 .
+11026 .
+11027 .
+11028 .
+11029 .
+1102A .
+1102B .
+1102C .
+1102D .
+1102E .
+1102F .
+11030 .
+11031 .
+11032 .
+11033 .
+11034 .
+11035 .
+11036 .
+11037 .
+11083 .
+11084 .
+11085 .
+11086 .
+11087 .
+11088 .
+11089 .
+1108A .
+1108B .
+1108C .
+1108D .
+1108E .
+1108F .
+11090 .
+11091 .
+11092 .
+11093 .
+11094 .
+11095 .
+11096 .
+11097 .
+11098 .
+11099 .
+1109A .
+1109B .
+1109C .
+1109D .
+1109E .
+1109F .
+110A0 .
+110A1 .
+110A2 .
+110A3 .
+110A4 .
+110A5 .
+110A6 .
+110A7 .
+110A8 .
+110A9 .
+110AA .
+110AB .
+110AC .
+110AD .
+110AE .
+110AF .
+110D0 .
+110D1 .
+110D2 .
+110D3 .
+110D4 .
+110D5 .
+110D6 .
+110D7 .
+110D8 .
+110D9 .
+110DA .
+110DB .
+110DC .
+110DD .
+110DE .
+110DF .
+110E0 .
+110E1 .
+110E2 .
+110E3 .
+110E4 .
+110E5 .
+110E6 .
+110E7 .
+110E8 .
+11103 .
+11104 .
+11105 .
+11106 .
+11107 .
+11108 .
+11109 .
+1110A .
+1110B .
+1110C .
+1110D .
+1110E .
+1110F .
+11110 .
+11111 .
+11112 .
+11113 .
+11114 .
+11115 .
+11116 .
+11117 .
+11118 .
+11119 .
+1111A .
+1111B .
+1111C .
+1111D .
+1111E .
+1111F .
+11120 .
+11121 .
+11122 .
+11123 .
+11124 .
+11125 .
+11126 .
+11183 .
+11184 .
+11185 .
+11186 .
+11187 .
+11188 .
+11189 .
+1118A .
+1118B .
+1118C .
+1118D .
+1118E .
+1118F .
+11190 .
+11191 .
+11192 .
+11193 .
+11194 .
+11195 .
+11196 .
+11197 .
+11198 .
+11199 .
+1119A .
+1119B .
+1119C .
+1119D .
+1119E .
+1119F .
+111A0 .
+111A1 .
+111A2 .
+111A3 .
+111A4 .
+111A5 .
+111A6 .
+111A7 .
+111A8 .
+111A9 .
+111AA .
+111AB .
+111AC .
+111AD .
+111AE .
+111AF .
+111B0 .
+111B1 .
+111B2 .
+111C1 .
+111C2 .
+111C3 .
+111C4 .
+11680 .
+11681 .
+11682 .
+11683 .
+11684 .
+11685 .
+11686 .
+11687 .
+11688 .
+11689 .
+1168A .
+1168B .
+1168C .
+1168D .
+1168E .
+1168F .
+11690 .
+11691 .
+11692 .
+11693 .
+11694 .
+11695 .
+11696 .
+11697 .
+11698 .
+11699 .
+1169A .
+1169B .
+1169C .
+1169D .
+1169E .
+1169F .
+116A0 .
+116A1 .
+116A2 .
+116A3 .
+116A4 .
+116A5 .
+116A6 .
+116A7 .
+116A8 .
+116A9 .
+116AA .
+12000 .
+12001 .
+12002 .
+12003 .
+12004 .
+12005 .
+12006 .
+12007 .
+12008 .
+12009 .
+1200A .
+1200B .
+1200C .
+1200D .
+1200E .
+1200F .
+12010 .
+12011 .
+12012 .
+12013 .
+12014 .
+12015 .
+12016 .
+12017 .
+12018 .
+12019 .
+1201A .
+1201B .
+1201C .
+1201D .
+1201E .
+1201F .
+12020 .
+12021 .
+12022 .
+12023 .
+12024 .
+12025 .
+12026 .
+12027 .
+12028 .
+12029 .
+1202A .
+1202B .
+1202C .
+1202D .
+1202E .
+1202F .
+12030 .
+12031 .
+12032 .
+12033 .
+12034 .
+12035 .
+12036 .
+12037 .
+12038 .
+12039 .
+1203A .
+1203B .
+1203C .
+1203D .
+1203E .
+1203F .
+12040 .
+12041 .
+12042 .
+12043 .
+12044 .
+12045 .
+12046 .
+12047 .
+12048 .
+12049 .
+1204A .
+1204B .
+1204C .
+1204D .
+1204E .
+1204F .
+12050 .
+12051 .
+12052 .
+12053 .
+12054 .
+12055 .
+12056 .
+12057 .
+12058 .
+12059 .
+1205A .
+1205B .
+1205C .
+1205D .
+1205E .
+1205F .
+12060 .
+12061 .
+12062 .
+12063 .
+12064 .
+12065 .
+12066 .
+12067 .
+12068 .
+12069 .
+1206A .
+1206B .
+1206C .
+1206D .
+1206E .
+1206F .
+12070 .
+12071 .
+12072 .
+12073 .
+12074 .
+12075 .
+12076 .
+12077 .
+12078 .
+12079 .
+1207A .
+1207B .
+1207C .
+1207D .
+1207E .
+1207F .
+12080 .
+12081 .
+12082 .
+12083 .
+12084 .
+12085 .
+12086 .
+12087 .
+12088 .
+12089 .
+1208A .
+1208B .
+1208C .
+1208D .
+1208E .
+1208F .
+12090 .
+12091 .
+12092 .
+12093 .
+12094 .
+12095 .
+12096 .
+12097 .
+12098 .
+12099 .
+1209A .
+1209B .
+1209C .
+1209D .
+1209E .
+1209F .
+120A0 .
+120A1 .
+120A2 .
+120A3 .
+120A4 .
+120A5 .
+120A6 .
+120A7 .
+120A8 .
+120A9 .
+120AA .
+120AB .
+120AC .
+120AD .
+120AE .
+120AF .
+120B0 .
+120B1 .
+120B2 .
+120B3 .
+120B4 .
+120B5 .
+120B6 .
+120B7 .
+120B8 .
+120B9 .
+120BA .
+120BB .
+120BC .
+120BD .
+120BE .
+120BF .
+120C0 .
+120C1 .
+120C2 .
+120C3 .
+120C4 .
+120C5 .
+120C6 .
+120C7 .
+120C8 .
+120C9 .
+120CA .
+120CB .
+120CC .
+120CD .
+120CE .
+120CF .
+120D0 .
+120D1 .
+120D2 .
+120D3 .
+120D4 .
+120D5 .
+120D6 .
+120D7 .
+120D8 .
+120D9 .
+120DA .
+120DB .
+120DC .
+120DD .
+120DE .
+120DF .
+120E0 .
+120E1 .
+120E2 .
+120E3 .
+120E4 .
+120E5 .
+120E6 .
+120E7 .
+120E8 .
+120E9 .
+120EA .
+120EB .
+120EC .
+120ED .
+120EE .
+120EF .
+120F0 .
+120F1 .
+120F2 .
+120F3 .
+120F4 .
+120F5 .
+120F6 .
+120F7 .
+120F8 .
+120F9 .
+120FA .
+120FB .
+120FC .
+120FD .
+120FE .
+120FF .
+12100 .
+12101 .
+12102 .
+12103 .
+12104 .
+12105 .
+12106 .
+12107 .
+12108 .
+12109 .
+1210A .
+1210B .
+1210C .
+1210D .
+1210E .
+1210F .
+12110 .
+12111 .
+12112 .
+12113 .
+12114 .
+12115 .
+12116 .
+12117 .
+12118 .
+12119 .
+1211A .
+1211B .
+1211C .
+1211D .
+1211E .
+1211F .
+12120 .
+12121 .
+12122 .
+12123 .
+12124 .
+12125 .
+12126 .
+12127 .
+12128 .
+12129 .
+1212A .
+1212B .
+1212C .
+1212D .
+1212E .
+1212F .
+12130 .
+12131 .
+12132 .
+12133 .
+12134 .
+12135 .
+12136 .
+12137 .
+12138 .
+12139 .
+1213A .
+1213B .
+1213C .
+1213D .
+1213E .
+1213F .
+12140 .
+12141 .
+12142 .
+12143 .
+12144 .
+12145 .
+12146 .
+12147 .
+12148 .
+12149 .
+1214A .
+1214B .
+1214C .
+1214D .
+1214E .
+1214F .
+12150 .
+12151 .
+12152 .
+12153 .
+12154 .
+12155 .
+12156 .
+12157 .
+12158 .
+12159 .
+1215A .
+1215B .
+1215C .
+1215D .
+1215E .
+1215F .
+12160 .
+12161 .
+12162 .
+12163 .
+12164 .
+12165 .
+12166 .
+12167 .
+12168 .
+12169 .
+1216A .
+1216B .
+1216C .
+1216D .
+1216E .
+1216F .
+12170 .
+12171 .
+12172 .
+12173 .
+12174 .
+12175 .
+12176 .
+12177 .
+12178 .
+12179 .
+1217A .
+1217B .
+1217C .
+1217D .
+1217E .
+1217F .
+12180 .
+12181 .
+12182 .
+12183 .
+12184 .
+12185 .
+12186 .
+12187 .
+12188 .
+12189 .
+1218A .
+1218B .
+1218C .
+1218D .
+1218E .
+1218F .
+12190 .
+12191 .
+12192 .
+12193 .
+12194 .
+12195 .
+12196 .
+12197 .
+12198 .
+12199 .
+1219A .
+1219B .
+1219C .
+1219D .
+1219E .
+1219F .
+121A0 .
+121A1 .
+121A2 .
+121A3 .
+121A4 .
+121A5 .
+121A6 .
+121A7 .
+121A8 .
+121A9 .
+121AA .
+121AB .
+121AC .
+121AD .
+121AE .
+121AF .
+121B0 .
+121B1 .
+121B2 .
+121B3 .
+121B4 .
+121B5 .
+121B6 .
+121B7 .
+121B8 .
+121B9 .
+121BA .
+121BB .
+121BC .
+121BD .
+121BE .
+121BF .
+121C0 .
+121C1 .
+121C2 .
+121C3 .
+121C4 .
+121C5 .
+121C6 .
+121C7 .
+121C8 .
+121C9 .
+121CA .
+121CB .
+121CC .
+121CD .
+121CE .
+121CF .
+121D0 .
+121D1 .
+121D2 .
+121D3 .
+121D4 .
+121D5 .
+121D6 .
+121D7 .
+121D8 .
+121D9 .
+121DA .
+121DB .
+121DC .
+121DD .
+121DE .
+121DF .
+121E0 .
+121E1 .
+121E2 .
+121E3 .
+121E4 .
+121E5 .
+121E6 .
+121E7 .
+121E8 .
+121E9 .
+121EA .
+121EB .
+121EC .
+121ED .
+121EE .
+121EF .
+121F0 .
+121F1 .
+121F2 .
+121F3 .
+121F4 .
+121F5 .
+121F6 .
+121F7 .
+121F8 .
+121F9 .
+121FA .
+121FB .
+121FC .
+121FD .
+121FE .
+121FF .
+12200 .
+12201 .
+12202 .
+12203 .
+12204 .
+12205 .
+12206 .
+12207 .
+12208 .
+12209 .
+1220A .
+1220B .
+1220C .
+1220D .
+1220E .
+1220F .
+12210 .
+12211 .
+12212 .
+12213 .
+12214 .
+12215 .
+12216 .
+12217 .
+12218 .
+12219 .
+1221A .
+1221B .
+1221C .
+1221D .
+1221E .
+1221F .
+12220 .
+12221 .
+12222 .
+12223 .
+12224 .
+12225 .
+12226 .
+12227 .
+12228 .
+12229 .
+1222A .
+1222B .
+1222C .
+1222D .
+1222E .
+1222F .
+12230 .
+12231 .
+12232 .
+12233 .
+12234 .
+12235 .
+12236 .
+12237 .
+12238 .
+12239 .
+1223A .
+1223B .
+1223C .
+1223D .
+1223E .
+1223F .
+12240 .
+12241 .
+12242 .
+12243 .
+12244 .
+12245 .
+12246 .
+12247 .
+12248 .
+12249 .
+1224A .
+1224B .
+1224C .
+1224D .
+1224E .
+1224F .
+12250 .
+12251 .
+12252 .
+12253 .
+12254 .
+12255 .
+12256 .
+12257 .
+12258 .
+12259 .
+1225A .
+1225B .
+1225C .
+1225D .
+1225E .
+1225F .
+12260 .
+12261 .
+12262 .
+12263 .
+12264 .
+12265 .
+12266 .
+12267 .
+12268 .
+12269 .
+1226A .
+1226B .
+1226C .
+1226D .
+1226E .
+1226F .
+12270 .
+12271 .
+12272 .
+12273 .
+12274 .
+12275 .
+12276 .
+12277 .
+12278 .
+12279 .
+1227A .
+1227B .
+1227C .
+1227D .
+1227E .
+1227F .
+12280 .
+12281 .
+12282 .
+12283 .
+12284 .
+12285 .
+12286 .
+12287 .
+12288 .
+12289 .
+1228A .
+1228B .
+1228C .
+1228D .
+1228E .
+1228F .
+12290 .
+12291 .
+12292 .
+12293 .
+12294 .
+12295 .
+12296 .
+12297 .
+12298 .
+12299 .
+1229A .
+1229B .
+1229C .
+1229D .
+1229E .
+1229F .
+122A0 .
+122A1 .
+122A2 .
+122A3 .
+122A4 .
+122A5 .
+122A6 .
+122A7 .
+122A8 .
+122A9 .
+122AA .
+122AB .
+122AC .
+122AD .
+122AE .
+122AF .
+122B0 .
+122B1 .
+122B2 .
+122B3 .
+122B4 .
+122B5 .
+122B6 .
+122B7 .
+122B8 .
+122B9 .
+122BA .
+122BB .
+122BC .
+122BD .
+122BE .
+122BF .
+122C0 .
+122C1 .
+122C2 .
+122C3 .
+122C4 .
+122C5 .
+122C6 .
+122C7 .
+122C8 .
+122C9 .
+122CA .
+122CB .
+122CC .
+122CD .
+122CE .
+122CF .
+122D0 .
+122D1 .
+122D2 .
+122D3 .
+122D4 .
+122D5 .
+122D6 .
+122D7 .
+122D8 .
+122D9 .
+122DA .
+122DB .
+122DC .
+122DD .
+122DE .
+122DF .
+122E0 .
+122E1 .
+122E2 .
+122E3 .
+122E4 .
+122E5 .
+122E6 .
+122E7 .
+122E8 .
+122E9 .
+122EA .
+122EB .
+122EC .
+122ED .
+122EE .
+122EF .
+122F0 .
+122F1 .
+122F2 .
+122F3 .
+122F4 .
+122F5 .
+122F6 .
+122F7 .
+122F8 .
+122F9 .
+122FA .
+122FB .
+122FC .
+122FD .
+122FE .
+122FF .
+12300 .
+12301 .
+12302 .
+12303 .
+12304 .
+12305 .
+12306 .
+12307 .
+12308 .
+12309 .
+1230A .
+1230B .
+1230C .
+1230D .
+1230E .
+1230F .
+12310 .
+12311 .
+12312 .
+12313 .
+12314 .
+12315 .
+12316 .
+12317 .
+12318 .
+12319 .
+1231A .
+1231B .
+1231C .
+1231D .
+1231E .
+1231F .
+12320 .
+12321 .
+12322 .
+12323 .
+12324 .
+12325 .
+12326 .
+12327 .
+12328 .
+12329 .
+1232A .
+1232B .
+1232C .
+1232D .
+1232E .
+1232F .
+12330 .
+12331 .
+12332 .
+12333 .
+12334 .
+12335 .
+12336 .
+12337 .
+12338 .
+12339 .
+1233A .
+1233B .
+1233C .
+1233D .
+1233E .
+1233F .
+12340 .
+12341 .
+12342 .
+12343 .
+12344 .
+12345 .
+12346 .
+12347 .
+12348 .
+12349 .
+1234A .
+1234B .
+1234C .
+1234D .
+1234E .
+1234F .
+12350 .
+12351 .
+12352 .
+12353 .
+12354 .
+12355 .
+12356 .
+12357 .
+12358 .
+12359 .
+1235A .
+1235B .
+1235C .
+1235D .
+1235E .
+1235F .
+12360 .
+12361 .
+12362 .
+12363 .
+12364 .
+12365 .
+12366 .
+12367 .
+12368 .
+12369 .
+1236A .
+1236B .
+1236C .
+1236D .
+1236E .
+13000 .
+13001 .
+13002 .
+13003 .
+13004 .
+13005 .
+13006 .
+13007 .
+13008 .
+13009 .
+1300A .
+1300B .
+1300C .
+1300D .
+1300E .
+1300F .
+13010 .
+13011 .
+13012 .
+13013 .
+13014 .
+13015 .
+13016 .
+13017 .
+13018 .
+13019 .
+1301A .
+1301B .
+1301C .
+1301D .
+1301E .
+1301F .
+13020 .
+13021 .
+13022 .
+13023 .
+13024 .
+13025 .
+13026 .
+13027 .
+13028 .
+13029 .
+1302A .
+1302B .
+1302C .
+1302D .
+1302E .
+1302F .
+13030 .
+13031 .
+13032 .
+13033 .
+13034 .
+13035 .
+13036 .
+13037 .
+13038 .
+13039 .
+1303A .
+1303B .
+1303C .
+1303D .
+1303E .
+1303F .
+13040 .
+13041 .
+13042 .
+13043 .
+13044 .
+13045 .
+13046 .
+13047 .
+13048 .
+13049 .
+1304A .
+1304B .
+1304C .
+1304D .
+1304E .
+1304F .
+13050 .
+13051 .
+13052 .
+13053 .
+13054 .
+13055 .
+13056 .
+13057 .
+13058 .
+13059 .
+1305A .
+1305B .
+1305C .
+1305D .
+1305E .
+1305F .
+13060 .
+13061 .
+13062 .
+13063 .
+13064 .
+13065 .
+13066 .
+13067 .
+13068 .
+13069 .
+1306A .
+1306B .
+1306C .
+1306D .
+1306E .
+1306F .
+13070 .
+13071 .
+13072 .
+13073 .
+13074 .
+13075 .
+13076 .
+13077 .
+13078 .
+13079 .
+1307A .
+1307B .
+1307C .
+1307D .
+1307E .
+1307F .
+13080 .
+13081 .
+13082 .
+13083 .
+13084 .
+13085 .
+13086 .
+13087 .
+13088 .
+13089 .
+1308A .
+1308B .
+1308C .
+1308D .
+1308E .
+1308F .
+13090 .
+13091 .
+13092 .
+13093 .
+13094 .
+13095 .
+13096 .
+13097 .
+13098 .
+13099 .
+1309A .
+1309B .
+1309C .
+1309D .
+1309E .
+1309F .
+130A0 .
+130A1 .
+130A2 .
+130A3 .
+130A4 .
+130A5 .
+130A6 .
+130A7 .
+130A8 .
+130A9 .
+130AA .
+130AB .
+130AC .
+130AD .
+130AE .
+130AF .
+130B0 .
+130B1 .
+130B2 .
+130B3 .
+130B4 .
+130B5 .
+130B6 .
+130B7 .
+130B8 .
+130B9 .
+130BA .
+130BB .
+130BC .
+130BD .
+130BE .
+130BF .
+130C0 .
+130C1 .
+130C2 .
+130C3 .
+130C4 .
+130C5 .
+130C6 .
+130C7 .
+130C8 .
+130C9 .
+130CA .
+130CB .
+130CC .
+130CD .
+130CE .
+130CF .
+130D0 .
+130D1 .
+130D2 .
+130D3 .
+130D4 .
+130D5 .
+130D6 .
+130D7 .
+130D8 .
+130D9 .
+130DA .
+130DB .
+130DC .
+130DD .
+130DE .
+130DF .
+130E0 .
+130E1 .
+130E2 .
+130E3 .
+130E4 .
+130E5 .
+130E6 .
+130E7 .
+130E8 .
+130E9 .
+130EA .
+130EB .
+130EC .
+130ED .
+130EE .
+130EF .
+130F0 .
+130F1 .
+130F2 .
+130F3 .
+130F4 .
+130F5 .
+130F6 .
+130F7 .
+130F8 .
+130F9 .
+130FA .
+130FB .
+130FC .
+130FD .
+130FE .
+130FF .
+13100 .
+13101 .
+13102 .
+13103 .
+13104 .
+13105 .
+13106 .
+13107 .
+13108 .
+13109 .
+1310A .
+1310B .
+1310C .
+1310D .
+1310E .
+1310F .
+13110 .
+13111 .
+13112 .
+13113 .
+13114 .
+13115 .
+13116 .
+13117 .
+13118 .
+13119 .
+1311A .
+1311B .
+1311C .
+1311D .
+1311E .
+1311F .
+13120 .
+13121 .
+13122 .
+13123 .
+13124 .
+13125 .
+13126 .
+13127 .
+13128 .
+13129 .
+1312A .
+1312B .
+1312C .
+1312D .
+1312E .
+1312F .
+13130 .
+13131 .
+13132 .
+13133 .
+13134 .
+13135 .
+13136 .
+13137 .
+13138 .
+13139 .
+1313A .
+1313B .
+1313C .
+1313D .
+1313E .
+1313F .
+13140 .
+13141 .
+13142 .
+13143 .
+13144 .
+13145 .
+13146 .
+13147 .
+13148 .
+13149 .
+1314A .
+1314B .
+1314C .
+1314D .
+1314E .
+1314F .
+13150 .
+13151 .
+13152 .
+13153 .
+13154 .
+13155 .
+13156 .
+13157 .
+13158 .
+13159 .
+1315A .
+1315B .
+1315C .
+1315D .
+1315E .
+1315F .
+13160 .
+13161 .
+13162 .
+13163 .
+13164 .
+13165 .
+13166 .
+13167 .
+13168 .
+13169 .
+1316A .
+1316B .
+1316C .
+1316D .
+1316E .
+1316F .
+13170 .
+13171 .
+13172 .
+13173 .
+13174 .
+13175 .
+13176 .
+13177 .
+13178 .
+13179 .
+1317A .
+1317B .
+1317C .
+1317D .
+1317E .
+1317F .
+13180 .
+13181 .
+13182 .
+13183 .
+13184 .
+13185 .
+13186 .
+13187 .
+13188 .
+13189 .
+1318A .
+1318B .
+1318C .
+1318D .
+1318E .
+1318F .
+13190 .
+13191 .
+13192 .
+13193 .
+13194 .
+13195 .
+13196 .
+13197 .
+13198 .
+13199 .
+1319A .
+1319B .
+1319C .
+1319D .
+1319E .
+1319F .
+131A0 .
+131A1 .
+131A2 .
+131A3 .
+131A4 .
+131A5 .
+131A6 .
+131A7 .
+131A8 .
+131A9 .
+131AA .
+131AB .
+131AC .
+131AD .
+131AE .
+131AF .
+131B0 .
+131B1 .
+131B2 .
+131B3 .
+131B4 .
+131B5 .
+131B6 .
+131B7 .
+131B8 .
+131B9 .
+131BA .
+131BB .
+131BC .
+131BD .
+131BE .
+131BF .
+131C0 .
+131C1 .
+131C2 .
+131C3 .
+131C4 .
+131C5 .
+131C6 .
+131C7 .
+131C8 .
+131C9 .
+131CA .
+131CB .
+131CC .
+131CD .
+131CE .
+131CF .
+131D0 .
+131D1 .
+131D2 .
+131D3 .
+131D4 .
+131D5 .
+131D6 .
+131D7 .
+131D8 .
+131D9 .
+131DA .
+131DB .
+131DC .
+131DD .
+131DE .
+131DF .
+131E0 .
+131E1 .
+131E2 .
+131E3 .
+131E4 .
+131E5 .
+131E6 .
+131E7 .
+131E8 .
+131E9 .
+131EA .
+131EB .
+131EC .
+131ED .
+131EE .
+131EF .
+131F0 .
+131F1 .
+131F2 .
+131F3 .
+131F4 .
+131F5 .
+131F6 .
+131F7 .
+131F8 .
+131F9 .
+131FA .
+131FB .
+131FC .
+131FD .
+131FE .
+131FF .
+13200 .
+13201 .
+13202 .
+13203 .
+13204 .
+13205 .
+13206 .
+13207 .
+13208 .
+13209 .
+1320A .
+1320B .
+1320C .
+1320D .
+1320E .
+1320F .
+13210 .
+13211 .
+13212 .
+13213 .
+13214 .
+13215 .
+13216 .
+13217 .
+13218 .
+13219 .
+1321A .
+1321B .
+1321C .
+1321D .
+1321E .
+1321F .
+13220 .
+13221 .
+13222 .
+13223 .
+13224 .
+13225 .
+13226 .
+13227 .
+13228 .
+13229 .
+1322A .
+1322B .
+1322C .
+1322D .
+1322E .
+1322F .
+13230 .
+13231 .
+13232 .
+13233 .
+13234 .
+13235 .
+13236 .
+13237 .
+13238 .
+13239 .
+1323A .
+1323B .
+1323C .
+1323D .
+1323E .
+1323F .
+13240 .
+13241 .
+13242 .
+13243 .
+13244 .
+13245 .
+13246 .
+13247 .
+13248 .
+13249 .
+1324A .
+1324B .
+1324C .
+1324D .
+1324E .
+1324F .
+13250 .
+13251 .
+13252 .
+13253 .
+13254 .
+13255 .
+13256 .
+13257 .
+13258 .
+13259 .
+1325A .
+1325B .
+1325C .
+1325D .
+1325E .
+1325F .
+13260 .
+13261 .
+13262 .
+13263 .
+13264 .
+13265 .
+13266 .
+13267 .
+13268 .
+13269 .
+1326A .
+1326B .
+1326C .
+1326D .
+1326E .
+1326F .
+13270 .
+13271 .
+13272 .
+13273 .
+13274 .
+13275 .
+13276 .
+13277 .
+13278 .
+13279 .
+1327A .
+1327B .
+1327C .
+1327D .
+1327E .
+1327F .
+13280 .
+13281 .
+13282 .
+13283 .
+13284 .
+13285 .
+13286 .
+13287 .
+13288 .
+13289 .
+1328A .
+1328B .
+1328C .
+1328D .
+1328E .
+1328F .
+13290 .
+13291 .
+13292 .
+13293 .
+13294 .
+13295 .
+13296 .
+13297 .
+13298 .
+13299 .
+1329A .
+1329B .
+1329C .
+1329D .
+1329E .
+1329F .
+132A0 .
+132A1 .
+132A2 .
+132A3 .
+132A4 .
+132A5 .
+132A6 .
+132A7 .
+132A8 .
+132A9 .
+132AA .
+132AB .
+132AC .
+132AD .
+132AE .
+132AF .
+132B0 .
+132B1 .
+132B2 .
+132B3 .
+132B4 .
+132B5 .
+132B6 .
+132B7 .
+132B8 .
+132B9 .
+132BA .
+132BB .
+132BC .
+132BD .
+132BE .
+132BF .
+132C0 .
+132C1 .
+132C2 .
+132C3 .
+132C4 .
+132C5 .
+132C6 .
+132C7 .
+132C8 .
+132C9 .
+132CA .
+132CB .
+132CC .
+132CD .
+132CE .
+132CF .
+132D0 .
+132D1 .
+132D2 .
+132D3 .
+132D4 .
+132D5 .
+132D6 .
+132D7 .
+132D8 .
+132D9 .
+132DA .
+132DB .
+132DC .
+132DD .
+132DE .
+132DF .
+132E0 .
+132E1 .
+132E2 .
+132E3 .
+132E4 .
+132E5 .
+132E6 .
+132E7 .
+132E8 .
+132E9 .
+132EA .
+132EB .
+132EC .
+132ED .
+132EE .
+132EF .
+132F0 .
+132F1 .
+132F2 .
+132F3 .
+132F4 .
+132F5 .
+132F6 .
+132F7 .
+132F8 .
+132F9 .
+132FA .
+132FB .
+132FC .
+132FD .
+132FE .
+132FF .
+13300 .
+13301 .
+13302 .
+13303 .
+13304 .
+13305 .
+13306 .
+13307 .
+13308 .
+13309 .
+1330A .
+1330B .
+1330C .
+1330D .
+1330E .
+1330F .
+13310 .
+13311 .
+13312 .
+13313 .
+13314 .
+13315 .
+13316 .
+13317 .
+13318 .
+13319 .
+1331A .
+1331B .
+1331C .
+1331D .
+1331E .
+1331F .
+13320 .
+13321 .
+13322 .
+13323 .
+13324 .
+13325 .
+13326 .
+13327 .
+13328 .
+13329 .
+1332A .
+1332B .
+1332C .
+1332D .
+1332E .
+1332F .
+13330 .
+13331 .
+13332 .
+13333 .
+13334 .
+13335 .
+13336 .
+13337 .
+13338 .
+13339 .
+1333A .
+1333B .
+1333C .
+1333D .
+1333E .
+1333F .
+13340 .
+13341 .
+13342 .
+13343 .
+13344 .
+13345 .
+13346 .
+13347 .
+13348 .
+13349 .
+1334A .
+1334B .
+1334C .
+1334D .
+1334E .
+1334F .
+13350 .
+13351 .
+13352 .
+13353 .
+13354 .
+13355 .
+13356 .
+13357 .
+13358 .
+13359 .
+1335A .
+1335B .
+1335C .
+1335D .
+1335E .
+1335F .
+13360 .
+13361 .
+13362 .
+13363 .
+13364 .
+13365 .
+13366 .
+13367 .
+13368 .
+13369 .
+1336A .
+1336B .
+1336C .
+1336D .
+1336E .
+1336F .
+13370 .
+13371 .
+13372 .
+13373 .
+13374 .
+13375 .
+13376 .
+13377 .
+13378 .
+13379 .
+1337A .
+1337B .
+1337C .
+1337D .
+1337E .
+1337F .
+13380 .
+13381 .
+13382 .
+13383 .
+13384 .
+13385 .
+13386 .
+13387 .
+13388 .
+13389 .
+1338A .
+1338B .
+1338C .
+1338D .
+1338E .
+1338F .
+13390 .
+13391 .
+13392 .
+13393 .
+13394 .
+13395 .
+13396 .
+13397 .
+13398 .
+13399 .
+1339A .
+1339B .
+1339C .
+1339D .
+1339E .
+1339F .
+133A0 .
+133A1 .
+133A2 .
+133A3 .
+133A4 .
+133A5 .
+133A6 .
+133A7 .
+133A8 .
+133A9 .
+133AA .
+133AB .
+133AC .
+133AD .
+133AE .
+133AF .
+133B0 .
+133B1 .
+133B2 .
+133B3 .
+133B4 .
+133B5 .
+133B6 .
+133B7 .
+133B8 .
+133B9 .
+133BA .
+133BB .
+133BC .
+133BD .
+133BE .
+133BF .
+133C0 .
+133C1 .
+133C2 .
+133C3 .
+133C4 .
+133C5 .
+133C6 .
+133C7 .
+133C8 .
+133C9 .
+133CA .
+133CB .
+133CC .
+133CD .
+133CE .
+133CF .
+133D0 .
+133D1 .
+133D2 .
+133D3 .
+133D4 .
+133D5 .
+133D6 .
+133D7 .
+133D8 .
+133D9 .
+133DA .
+133DB .
+133DC .
+133DD .
+133DE .
+133DF .
+133E0 .
+133E1 .
+133E2 .
+133E3 .
+133E4 .
+133E5 .
+133E6 .
+133E7 .
+133E8 .
+133E9 .
+133EA .
+133EB .
+133EC .
+133ED .
+133EE .
+133EF .
+133F0 .
+133F1 .
+133F2 .
+133F3 .
+133F4 .
+133F5 .
+133F6 .
+133F7 .
+133F8 .
+133F9 .
+133FA .
+133FB .
+133FC .
+133FD .
+133FE .
+133FF .
+13400 .
+13401 .
+13402 .
+13403 .
+13404 .
+13405 .
+13406 .
+13407 .
+13408 .
+13409 .
+1340A .
+1340B .
+1340C .
+1340D .
+1340E .
+1340F .
+13410 .
+13411 .
+13412 .
+13413 .
+13414 .
+13415 .
+13416 .
+13417 .
+13418 .
+13419 .
+1341A .
+1341B .
+1341C .
+1341D .
+1341E .
+1341F .
+13420 .
+13421 .
+13422 .
+13423 .
+13424 .
+13425 .
+13426 .
+13427 .
+13428 .
+13429 .
+1342A .
+1342B .
+1342C .
+1342D .
+1342E .
+16800 .
+16801 .
+16802 .
+16803 .
+16804 .
+16805 .
+16806 .
+16807 .
+16808 .
+16809 .
+1680A .
+1680B .
+1680C .
+1680D .
+1680E .
+1680F .
+16810 .
+16811 .
+16812 .
+16813 .
+16814 .
+16815 .
+16816 .
+16817 .
+16818 .
+16819 .
+1681A .
+1681B .
+1681C .
+1681D .
+1681E .
+1681F .
+16820 .
+16821 .
+16822 .
+16823 .
+16824 .
+16825 .
+16826 .
+16827 .
+16828 .
+16829 .
+1682A .
+1682B .
+1682C .
+1682D .
+1682E .
+1682F .
+16830 .
+16831 .
+16832 .
+16833 .
+16834 .
+16835 .
+16836 .
+16837 .
+16838 .
+16839 .
+1683A .
+1683B .
+1683C .
+1683D .
+1683E .
+1683F .
+16840 .
+16841 .
+16842 .
+16843 .
+16844 .
+16845 .
+16846 .
+16847 .
+16848 .
+16849 .
+1684A .
+1684B .
+1684C .
+1684D .
+1684E .
+1684F .
+16850 .
+16851 .
+16852 .
+16853 .
+16854 .
+16855 .
+16856 .
+16857 .
+16858 .
+16859 .
+1685A .
+1685B .
+1685C .
+1685D .
+1685E .
+1685F .
+16860 .
+16861 .
+16862 .
+16863 .
+16864 .
+16865 .
+16866 .
+16867 .
+16868 .
+16869 .
+1686A .
+1686B .
+1686C .
+1686D .
+1686E .
+1686F .
+16870 .
+16871 .
+16872 .
+16873 .
+16874 .
+16875 .
+16876 .
+16877 .
+16878 .
+16879 .
+1687A .
+1687B .
+1687C .
+1687D .
+1687E .
+1687F .
+16880 .
+16881 .
+16882 .
+16883 .
+16884 .
+16885 .
+16886 .
+16887 .
+16888 .
+16889 .
+1688A .
+1688B .
+1688C .
+1688D .
+1688E .
+1688F .
+16890 .
+16891 .
+16892 .
+16893 .
+16894 .
+16895 .
+16896 .
+16897 .
+16898 .
+16899 .
+1689A .
+1689B .
+1689C .
+1689D .
+1689E .
+1689F .
+168A0 .
+168A1 .
+168A2 .
+168A3 .
+168A4 .
+168A5 .
+168A6 .
+168A7 .
+168A8 .
+168A9 .
+168AA .
+168AB .
+168AC .
+168AD .
+168AE .
+168AF .
+168B0 .
+168B1 .
+168B2 .
+168B3 .
+168B4 .
+168B5 .
+168B6 .
+168B7 .
+168B8 .
+168B9 .
+168BA .
+168BB .
+168BC .
+168BD .
+168BE .
+168BF .
+168C0 .
+168C1 .
+168C2 .
+168C3 .
+168C4 .
+168C5 .
+168C6 .
+168C7 .
+168C8 .
+168C9 .
+168CA .
+168CB .
+168CC .
+168CD .
+168CE .
+168CF .
+168D0 .
+168D1 .
+168D2 .
+168D3 .
+168D4 .
+168D5 .
+168D6 .
+168D7 .
+168D8 .
+168D9 .
+168DA .
+168DB .
+168DC .
+168DD .
+168DE .
+168DF .
+168E0 .
+168E1 .
+168E2 .
+168E3 .
+168E4 .
+168E5 .
+168E6 .
+168E7 .
+168E8 .
+168E9 .
+168EA .
+168EB .
+168EC .
+168ED .
+168EE .
+168EF .
+168F0 .
+168F1 .
+168F2 .
+168F3 .
+168F4 .
+168F5 .
+168F6 .
+168F7 .
+168F8 .
+168F9 .
+168FA .
+168FB .
+168FC .
+168FD .
+168FE .
+168FF .
+16900 .
+16901 .
+16902 .
+16903 .
+16904 .
+16905 .
+16906 .
+16907 .
+16908 .
+16909 .
+1690A .
+1690B .
+1690C .
+1690D .
+1690E .
+1690F .
+16910 .
+16911 .
+16912 .
+16913 .
+16914 .
+16915 .
+16916 .
+16917 .
+16918 .
+16919 .
+1691A .
+1691B .
+1691C .
+1691D .
+1691E .
+1691F .
+16920 .
+16921 .
+16922 .
+16923 .
+16924 .
+16925 .
+16926 .
+16927 .
+16928 .
+16929 .
+1692A .
+1692B .
+1692C .
+1692D .
+1692E .
+1692F .
+16930 .
+16931 .
+16932 .
+16933 .
+16934 .
+16935 .
+16936 .
+16937 .
+16938 .
+16939 .
+1693A .
+1693B .
+1693C .
+1693D .
+1693E .
+1693F .
+16940 .
+16941 .
+16942 .
+16943 .
+16944 .
+16945 .
+16946 .
+16947 .
+16948 .
+16949 .
+1694A .
+1694B .
+1694C .
+1694D .
+1694E .
+1694F .
+16950 .
+16951 .
+16952 .
+16953 .
+16954 .
+16955 .
+16956 .
+16957 .
+16958 .
+16959 .
+1695A .
+1695B .
+1695C .
+1695D .
+1695E .
+1695F .
+16960 .
+16961 .
+16962 .
+16963 .
+16964 .
+16965 .
+16966 .
+16967 .
+16968 .
+16969 .
+1696A .
+1696B .
+1696C .
+1696D .
+1696E .
+1696F .
+16970 .
+16971 .
+16972 .
+16973 .
+16974 .
+16975 .
+16976 .
+16977 .
+16978 .
+16979 .
+1697A .
+1697B .
+1697C .
+1697D .
+1697E .
+1697F .
+16980 .
+16981 .
+16982 .
+16983 .
+16984 .
+16985 .
+16986 .
+16987 .
+16988 .
+16989 .
+1698A .
+1698B .
+1698C .
+1698D .
+1698E .
+1698F .
+16990 .
+16991 .
+16992 .
+16993 .
+16994 .
+16995 .
+16996 .
+16997 .
+16998 .
+16999 .
+1699A .
+1699B .
+1699C .
+1699D .
+1699E .
+1699F .
+169A0 .
+169A1 .
+169A2 .
+169A3 .
+169A4 .
+169A5 .
+169A6 .
+169A7 .
+169A8 .
+169A9 .
+169AA .
+169AB .
+169AC .
+169AD .
+169AE .
+169AF .
+169B0 .
+169B1 .
+169B2 .
+169B3 .
+169B4 .
+169B5 .
+169B6 .
+169B7 .
+169B8 .
+169B9 .
+169BA .
+169BB .
+169BC .
+169BD .
+169BE .
+169BF .
+169C0 .
+169C1 .
+169C2 .
+169C3 .
+169C4 .
+169C5 .
+169C6 .
+169C7 .
+169C8 .
+169C9 .
+169CA .
+169CB .
+169CC .
+169CD .
+169CE .
+169CF .
+169D0 .
+169D1 .
+169D2 .
+169D3 .
+169D4 .
+169D5 .
+169D6 .
+169D7 .
+169D8 .
+169D9 .
+169DA .
+169DB .
+169DC .
+169DD .
+169DE .
+169DF .
+169E0 .
+169E1 .
+169E2 .
+169E3 .
+169E4 .
+169E5 .
+169E6 .
+169E7 .
+169E8 .
+169E9 .
+169EA .
+169EB .
+169EC .
+169ED .
+169EE .
+169EF .
+169F0 .
+169F1 .
+169F2 .
+169F3 .
+169F4 .
+169F5 .
+169F6 .
+169F7 .
+169F8 .
+169F9 .
+169FA .
+169FB .
+169FC .
+169FD .
+169FE .
+169FF .
+16A00 .
+16A01 .
+16A02 .
+16A03 .
+16A04 .
+16A05 .
+16A06 .
+16A07 .
+16A08 .
+16A09 .
+16A0A .
+16A0B .
+16A0C .
+16A0D .
+16A0E .
+16A0F .
+16A10 .
+16A11 .
+16A12 .
+16A13 .
+16A14 .
+16A15 .
+16A16 .
+16A17 .
+16A18 .
+16A19 .
+16A1A .
+16A1B .
+16A1C .
+16A1D .
+16A1E .
+16A1F .
+16A20 .
+16A21 .
+16A22 .
+16A23 .
+16A24 .
+16A25 .
+16A26 .
+16A27 .
+16A28 .
+16A29 .
+16A2A .
+16A2B .
+16A2C .
+16A2D .
+16A2E .
+16A2F .
+16A30 .
+16A31 .
+16A32 .
+16A33 .
+16A34 .
+16A35 .
+16A36 .
+16A37 .
+16A38 .
+16F00 .
+16F01 .
+16F02 .
+16F03 .
+16F04 .
+16F05 .
+16F06 .
+16F07 .
+16F08 .
+16F09 .
+16F0A .
+16F0B .
+16F0C .
+16F0D .
+16F0E .
+16F0F .
+16F10 .
+16F11 .
+16F12 .
+16F13 .
+16F14 .
+16F15 .
+16F16 .
+16F17 .
+16F18 .
+16F19 .
+16F1A .
+16F1B .
+16F1C .
+16F1D .
+16F1E .
+16F1F .
+16F20 .
+16F21 .
+16F22 .
+16F23 .
+16F24 .
+16F25 .
+16F26 .
+16F27 .
+16F28 .
+16F29 .
+16F2A .
+16F2B .
+16F2C .
+16F2D .
+16F2E .
+16F2F .
+16F30 .
+16F31 .
+16F32 .
+16F33 .
+16F34 .
+16F35 .
+16F36 .
+16F37 .
+16F38 .
+16F39 .
+16F3A .
+16F3B .
+16F3C .
+16F3D .
+16F3E .
+16F3F .
+16F40 .
+16F41 .
+16F42 .
+16F43 .
+16F44 .
+16F50 .
+16F93 .
+16F94 .
+16F95 .
+16F96 .
+16F97 .
+16F98 .
+16F99 .
+16F9A .
+16F9B .
+16F9C .
+16F9D .
+16F9E .
+16F9F .
+1B000 .
+1B001 .
+1D400 .
+1D401 .
+1D402 .
+1D403 .
+1D404 .
+1D405 .
+1D406 .
+1D407 .
+1D408 .
+1D409 .
+1D40A .
+1D40B .
+1D40C .
+1D40D .
+1D40E .
+1D40F .
+1D410 .
+1D411 .
+1D412 .
+1D413 .
+1D414 .
+1D415 .
+1D416 .
+1D417 .
+1D418 .
+1D419 .
+1D41A .
+1D41B .
+1D41C .
+1D41D .
+1D41E .
+1D41F .
+1D420 .
+1D421 .
+1D422 .
+1D423 .
+1D424 .
+1D425 .
+1D426 .
+1D427 .
+1D428 .
+1D429 .
+1D42A .
+1D42B .
+1D42C .
+1D42D .
+1D42E .
+1D42F .
+1D430 .
+1D431 .
+1D432 .
+1D433 .
+1D434 .
+1D435 .
+1D436 .
+1D437 .
+1D438 .
+1D439 .
+1D43A .
+1D43B .
+1D43C .
+1D43D .
+1D43E .
+1D43F .
+1D440 .
+1D441 .
+1D442 .
+1D443 .
+1D444 .
+1D445 .
+1D446 .
+1D447 .
+1D448 .
+1D449 .
+1D44A .
+1D44B .
+1D44C .
+1D44D .
+1D44E .
+1D44F .
+1D450 .
+1D451 .
+1D452 .
+1D453 .
+1D454 .
+1D456 .
+1D457 .
+1D458 .
+1D459 .
+1D45A .
+1D45B .
+1D45C .
+1D45D .
+1D45E .
+1D45F .
+1D460 .
+1D461 .
+1D462 .
+1D463 .
+1D464 .
+1D465 .
+1D466 .
+1D467 .
+1D468 .
+1D469 .
+1D46A .
+1D46B .
+1D46C .
+1D46D .
+1D46E .
+1D46F .
+1D470 .
+1D471 .
+1D472 .
+1D473 .
+1D474 .
+1D475 .
+1D476 .
+1D477 .
+1D478 .
+1D479 .
+1D47A .
+1D47B .
+1D47C .
+1D47D .
+1D47E .
+1D47F .
+1D480 .
+1D481 .
+1D482 .
+1D483 .
+1D484 .
+1D485 .
+1D486 .
+1D487 .
+1D488 .
+1D489 .
+1D48A .
+1D48B .
+1D48C .
+1D48D .
+1D48E .
+1D48F .
+1D490 .
+1D491 .
+1D492 .
+1D493 .
+1D494 .
+1D495 .
+1D496 .
+1D497 .
+1D498 .
+1D499 .
+1D49A .
+1D49B .
+1D49C .
+1D49E .
+1D49F .
+1D4A2 .
+1D4A5 .
+1D4A6 .
+1D4A9 .
+1D4AA .
+1D4AB .
+1D4AC .
+1D4AE .
+1D4AF .
+1D4B0 .
+1D4B1 .
+1D4B2 .
+1D4B3 .
+1D4B4 .
+1D4B5 .
+1D4B6 .
+1D4B7 .
+1D4B8 .
+1D4B9 .
+1D4BB .
+1D4BD .
+1D4BE .
+1D4BF .
+1D4C0 .
+1D4C1 .
+1D4C2 .
+1D4C3 .
+1D4C5 .
+1D4C6 .
+1D4C7 .
+1D4C8 .
+1D4C9 .
+1D4CA .
+1D4CB .
+1D4CC .
+1D4CD .
+1D4CE .
+1D4CF .
+1D4D0 .
+1D4D1 .
+1D4D2 .
+1D4D3 .
+1D4D4 .
+1D4D5 .
+1D4D6 .
+1D4D7 .
+1D4D8 .
+1D4D9 .
+1D4DA .
+1D4DB .
+1D4DC .
+1D4DD .
+1D4DE .
+1D4DF .
+1D4E0 .
+1D4E1 .
+1D4E2 .
+1D4E3 .
+1D4E4 .
+1D4E5 .
+1D4E6 .
+1D4E7 .
+1D4E8 .
+1D4E9 .
+1D4EA .
+1D4EB .
+1D4EC .
+1D4ED .
+1D4EE .
+1D4EF .
+1D4F0 .
+1D4F1 .
+1D4F2 .
+1D4F3 .
+1D4F4 .
+1D4F5 .
+1D4F6 .
+1D4F7 .
+1D4F8 .
+1D4F9 .
+1D4FA .
+1D4FB .
+1D4FC .
+1D4FD .
+1D4FE .
+1D4FF .
+1D500 .
+1D501 .
+1D502 .
+1D503 .
+1D504 .
+1D505 .
+1D507 .
+1D508 .
+1D509 .
+1D50A .
+1D50D .
+1D50E .
+1D50F .
+1D510 .
+1D511 .
+1D512 .
+1D513 .
+1D514 .
+1D516 .
+1D517 .
+1D518 .
+1D519 .
+1D51A .
+1D51B .
+1D51C .
+1D51E .
+1D51F .
+1D520 .
+1D521 .
+1D522 .
+1D523 .
+1D524 .
+1D525 .
+1D526 .
+1D527 .
+1D528 .
+1D529 .
+1D52A .
+1D52B .
+1D52C .
+1D52D .
+1D52E .
+1D52F .
+1D530 .
+1D531 .
+1D532 .
+1D533 .
+1D534 .
+1D535 .
+1D536 .
+1D537 .
+1D538 .
+1D539 .
+1D53B .
+1D53C .
+1D53D .
+1D53E .
+1D540 .
+1D541 .
+1D542 .
+1D543 .
+1D544 .
+1D546 .
+1D54A .
+1D54B .
+1D54C .
+1D54D .
+1D54E .
+1D54F .
+1D550 .
+1D552 .
+1D553 .
+1D554 .
+1D555 .
+1D556 .
+1D557 .
+1D558 .
+1D559 .
+1D55A .
+1D55B .
+1D55C .
+1D55D .
+1D55E .
+1D55F .
+1D560 .
+1D561 .
+1D562 .
+1D563 .
+1D564 .
+1D565 .
+1D566 .
+1D567 .
+1D568 .
+1D569 .
+1D56A .
+1D56B .
+1D56C .
+1D56D .
+1D56E .
+1D56F .
+1D570 .
+1D571 .
+1D572 .
+1D573 .
+1D574 .
+1D575 .
+1D576 .
+1D577 .
+1D578 .
+1D579 .
+1D57A .
+1D57B .
+1D57C .
+1D57D .
+1D57E .
+1D57F .
+1D580 .
+1D581 .
+1D582 .
+1D583 .
+1D584 .
+1D585 .
+1D586 .
+1D587 .
+1D588 .
+1D589 .
+1D58A .
+1D58B .
+1D58C .
+1D58D .
+1D58E .
+1D58F .
+1D590 .
+1D591 .
+1D592 .
+1D593 .
+1D594 .
+1D595 .
+1D596 .
+1D597 .
+1D598 .
+1D599 .
+1D59A .
+1D59B .
+1D59C .
+1D59D .
+1D59E .
+1D59F .
+1D5A0 .
+1D5A1 .
+1D5A2 .
+1D5A3 .
+1D5A4 .
+1D5A5 .
+1D5A6 .
+1D5A7 .
+1D5A8 .
+1D5A9 .
+1D5AA .
+1D5AB .
+1D5AC .
+1D5AD .
+1D5AE .
+1D5AF .
+1D5B0 .
+1D5B1 .
+1D5B2 .
+1D5B3 .
+1D5B4 .
+1D5B5 .
+1D5B6 .
+1D5B7 .
+1D5B8 .
+1D5B9 .
+1D5BA .
+1D5BB .
+1D5BC .
+1D5BD .
+1D5BE .
+1D5BF .
+1D5C0 .
+1D5C1 .
+1D5C2 .
+1D5C3 .
+1D5C4 .
+1D5C5 .
+1D5C6 .
+1D5C7 .
+1D5C8 .
+1D5C9 .
+1D5CA .
+1D5CB .
+1D5CC .
+1D5CD .
+1D5CE .
+1D5CF .
+1D5D0 .
+1D5D1 .
+1D5D2 .
+1D5D3 .
+1D5D4 .
+1D5D5 .
+1D5D6 .
+1D5D7 .
+1D5D8 .
+1D5D9 .
+1D5DA .
+1D5DB .
+1D5DC .
+1D5DD .
+1D5DE .
+1D5DF .
+1D5E0 .
+1D5E1 .
+1D5E2 .
+1D5E3 .
+1D5E4 .
+1D5E5 .
+1D5E6 .
+1D5E7 .
+1D5E8 .
+1D5E9 .
+1D5EA .
+1D5EB .
+1D5EC .
+1D5ED .
+1D5EE .
+1D5EF .
+1D5F0 .
+1D5F1 .
+1D5F2 .
+1D5F3 .
+1D5F4 .
+1D5F5 .
+1D5F6 .
+1D5F7 .
+1D5F8 .
+1D5F9 .
+1D5FA .
+1D5FB .
+1D5FC .
+1D5FD .
+1D5FE .
+1D5FF .
+1D600 .
+1D601 .
+1D602 .
+1D603 .
+1D604 .
+1D605 .
+1D606 .
+1D607 .
+1D608 .
+1D609 .
+1D60A .
+1D60B .
+1D60C .
+1D60D .
+1D60E .
+1D60F .
+1D610 .
+1D611 .
+1D612 .
+1D613 .
+1D614 .
+1D615 .
+1D616 .
+1D617 .
+1D618 .
+1D619 .
+1D61A .
+1D61B .
+1D61C .
+1D61D .
+1D61E .
+1D61F .
+1D620 .
+1D621 .
+1D622 .
+1D623 .
+1D624 .
+1D625 .
+1D626 .
+1D627 .
+1D628 .
+1D629 .
+1D62A .
+1D62B .
+1D62C .
+1D62D .
+1D62E .
+1D62F .
+1D630 .
+1D631 .
+1D632 .
+1D633 .
+1D634 .
+1D635 .
+1D636 .
+1D637 .
+1D638 .
+1D639 .
+1D63A .
+1D63B .
+1D63C .
+1D63D .
+1D63E .
+1D63F .
+1D640 .
+1D641 .
+1D642 .
+1D643 .
+1D644 .
+1D645 .
+1D646 .
+1D647 .
+1D648 .
+1D649 .
+1D64A .
+1D64B .
+1D64C .
+1D64D .
+1D64E .
+1D64F .
+1D650 .
+1D651 .
+1D652 .
+1D653 .
+1D654 .
+1D655 .
+1D656 .
+1D657 .
+1D658 .
+1D659 .
+1D65A .
+1D65B .
+1D65C .
+1D65D .
+1D65E .
+1D65F .
+1D660 .
+1D661 .
+1D662 .
+1D663 .
+1D664 .
+1D665 .
+1D666 .
+1D667 .
+1D668 .
+1D669 .
+1D66A .
+1D66B .
+1D66C .
+1D66D .
+1D66E .
+1D66F .
+1D670 .
+1D671 .
+1D672 .
+1D673 .
+1D674 .
+1D675 .
+1D676 .
+1D677 .
+1D678 .
+1D679 .
+1D67A .
+1D67B .
+1D67C .
+1D67D .
+1D67E .
+1D67F .
+1D680 .
+1D681 .
+1D682 .
+1D683 .
+1D684 .
+1D685 .
+1D686 .
+1D687 .
+1D688 .
+1D689 .
+1D68A .
+1D68B .
+1D68C .
+1D68D .
+1D68E .
+1D68F .
+1D690 .
+1D691 .
+1D692 .
+1D693 .
+1D694 .
+1D695 .
+1D696 .
+1D697 .
+1D698 .
+1D699 .
+1D69A .
+1D69B .
+1D69C .
+1D69D .
+1D69E .
+1D69F .
+1D6A0 .
+1D6A1 .
+1D6A2 .
+1D6A3 .
+1D6A4 .
+1D6A5 .
+1D6A8 .
+1D6A9 .
+1D6AA .
+1D6AB .
+1D6AC .
+1D6AD .
+1D6AE .
+1D6AF .
+1D6B0 .
+1D6B1 .
+1D6B2 .
+1D6B3 .
+1D6B4 .
+1D6B5 .
+1D6B6 .
+1D6B7 .
+1D6B8 .
+1D6B9 .
+1D6BA .
+1D6BB .
+1D6BC .
+1D6BD .
+1D6BE .
+1D6BF .
+1D6C0 .
+1D6C2 .
+1D6C3 .
+1D6C4 .
+1D6C5 .
+1D6C6 .
+1D6C7 .
+1D6C8 .
+1D6C9 .
+1D6CA .
+1D6CB .
+1D6CC .
+1D6CD .
+1D6CE .
+1D6CF .
+1D6D0 .
+1D6D1 .
+1D6D2 .
+1D6D3 .
+1D6D4 .
+1D6D5 .
+1D6D6 .
+1D6D7 .
+1D6D8 .
+1D6D9 .
+1D6DA .
+1D6DC .
+1D6DD .
+1D6DE .
+1D6DF .
+1D6E0 .
+1D6E1 .
+1D6E2 .
+1D6E3 .
+1D6E4 .
+1D6E5 .
+1D6E6 .
+1D6E7 .
+1D6E8 .
+1D6E9 .
+1D6EA .
+1D6EB .
+1D6EC .
+1D6ED .
+1D6EE .
+1D6EF .
+1D6F0 .
+1D6F1 .
+1D6F2 .
+1D6F3 .
+1D6F4 .
+1D6F5 .
+1D6F6 .
+1D6F7 .
+1D6F8 .
+1D6F9 .
+1D6FA .
+1D6FC .
+1D6FD .
+1D6FE .
+1D6FF .
+1D700 .
+1D701 .
+1D702 .
+1D703 .
+1D704 .
+1D705 .
+1D706 .
+1D707 .
+1D708 .
+1D709 .
+1D70A .
+1D70B .
+1D70C .
+1D70D .
+1D70E .
+1D70F .
+1D710 .
+1D711 .
+1D712 .
+1D713 .
+1D714 .
+1D716 .
+1D717 .
+1D718 .
+1D719 .
+1D71A .
+1D71B .
+1D71C .
+1D71D .
+1D71E .
+1D71F .
+1D720 .
+1D721 .
+1D722 .
+1D723 .
+1D724 .
+1D725 .
+1D726 .
+1D727 .
+1D728 .
+1D729 .
+1D72A .
+1D72B .
+1D72C .
+1D72D .
+1D72E .
+1D72F .
+1D730 .
+1D731 .
+1D732 .
+1D733 .
+1D734 .
+1D736 .
+1D737 .
+1D738 .
+1D739 .
+1D73A .
+1D73B .
+1D73C .
+1D73D .
+1D73E .
+1D73F .
+1D740 .
+1D741 .
+1D742 .
+1D743 .
+1D744 .
+1D745 .
+1D746 .
+1D747 .
+1D748 .
+1D749 .
+1D74A .
+1D74B .
+1D74C .
+1D74D .
+1D74E .
+1D750 .
+1D751 .
+1D752 .
+1D753 .
+1D754 .
+1D755 .
+1D756 .
+1D757 .
+1D758 .
+1D759 .
+1D75A .
+1D75B .
+1D75C .
+1D75D .
+1D75E .
+1D75F .
+1D760 .
+1D761 .
+1D762 .
+1D763 .
+1D764 .
+1D765 .
+1D766 .
+1D767 .
+1D768 .
+1D769 .
+1D76A .
+1D76B .
+1D76C .
+1D76D .
+1D76E .
+1D770 .
+1D771 .
+1D772 .
+1D773 .
+1D774 .
+1D775 .
+1D776 .
+1D777 .
+1D778 .
+1D779 .
+1D77A .
+1D77B .
+1D77C .
+1D77D .
+1D77E .
+1D77F .
+1D780 .
+1D781 .
+1D782 .
+1D783 .
+1D784 .
+1D785 .
+1D786 .
+1D787 .
+1D788 .
+1D78A .
+1D78B .
+1D78C .
+1D78D .
+1D78E .
+1D78F .
+1D790 .
+1D791 .
+1D792 .
+1D793 .
+1D794 .
+1D795 .
+1D796 .
+1D797 .
+1D798 .
+1D799 .
+1D79A .
+1D79B .
+1D79C .
+1D79D .
+1D79E .
+1D79F .
+1D7A0 .
+1D7A1 .
+1D7A2 .
+1D7A3 .
+1D7A4 .
+1D7A5 .
+1D7A6 .
+1D7A7 .
+1D7A8 .
+1D7AA .
+1D7AB .
+1D7AC .
+1D7AD .
+1D7AE .
+1D7AF .
+1D7B0 .
+1D7B1 .
+1D7B2 .
+1D7B3 .
+1D7B4 .
+1D7B5 .
+1D7B6 .
+1D7B7 .
+1D7B8 .
+1D7B9 .
+1D7BA .
+1D7BB .
+1D7BC .
+1D7BD .
+1D7BE .
+1D7BF .
+1D7C0 .
+1D7C1 .
+1D7C2 .
+1D7C4 .
+1D7C5 .
+1D7C6 .
+1D7C7 .
+1D7C8 .
+1D7C9 .
+1D7CA .
+1D7CB .
+1EE00 .
+1EE01 .
+1EE02 .
+1EE03 .
+1EE05 .
+1EE06 .
+1EE07 .
+1EE08 .
+1EE09 .
+1EE0A .
+1EE0B .
+1EE0C .
+1EE0D .
+1EE0E .
+1EE0F .
+1EE10 .
+1EE11 .
+1EE12 .
+1EE13 .
+1EE14 .
+1EE15 .
+1EE16 .
+1EE17 .
+1EE18 .
+1EE19 .
+1EE1A .
+1EE1B .
+1EE1C .
+1EE1D .
+1EE1E .
+1EE1F .
+1EE21 .
+1EE22 .
+1EE24 .
+1EE27 .
+1EE29 .
+1EE2A .
+1EE2B .
+1EE2C .
+1EE2D .
+1EE2E .
+1EE2F .
+1EE30 .
+1EE31 .
+1EE32 .
+1EE34 .
+1EE35 .
+1EE36 .
+1EE37 .
+1EE39 .
+1EE3B .
+1EE42 .
+1EE47 .
+1EE49 .
+1EE4B .
+1EE4D .
+1EE4E .
+1EE4F .
+1EE51 .
+1EE52 .
+1EE54 .
+1EE57 .
+1EE59 .
+1EE5B .
+1EE5D .
+1EE5F .
+1EE61 .
+1EE62 .
+1EE64 .
+1EE67 .
+1EE68 .
+1EE69 .
+1EE6A .
+1EE6C .
+1EE6D .
+1EE6E .
+1EE6F .
+1EE70 .
+1EE71 .
+1EE72 .
+1EE74 .
+1EE75 .
+1EE76 .
+1EE77 .
+1EE79 .
+1EE7A .
+1EE7B .
+1EE7C .
+1EE7E .
+1EE80 .
+1EE81 .
+1EE82 .
+1EE83 .
+1EE84 .
+1EE85 .
+1EE86 .
+1EE87 .
+1EE88 .
+1EE89 .
+1EE8B .
+1EE8C .
+1EE8D .
+1EE8E .
+1EE8F .
+1EE90 .
+1EE91 .
+1EE92 .
+1EE93 .
+1EE94 .
+1EE95 .
+1EE96 .
+1EE97 .
+1EE98 .
+1EE99 .
+1EE9A .
+1EE9B .
+1EEA1 .
+1EEA2 .
+1EEA3 .
+1EEA5 .
+1EEA6 .
+1EEA7 .
+1EEA8 .
+1EEA9 .
+1EEAB .
+1EEAC .
+1EEAD .
+1EEAE .
+1EEAF .
+1EEB0 .
+1EEB1 .
+1EEB2 .
+1EEB3 .
+1EEB4 .
+1EEB5 .
+1EEB6 .
+1EEB7 .
+1EEB8 .
+1EEB9 .
+1EEBA .
+1EEBB .
+2F800 .
+2F801 .
+2F802 .
+2F803 .
+2F804 .
+2F805 .
+2F806 .
+2F807 .
+2F808 .
+2F809 .
+2F80A .
+2F80B .
+2F80C .
+2F80D .
+2F80E .
+2F80F .
+2F810 .
+2F811 .
+2F812 .
+2F813 .
+2F814 .
+2F815 .
+2F816 .
+2F817 .
+2F818 .
+2F819 .
+2F81A .
+2F81B .
+2F81C .
+2F81D .
+2F81E .
+2F81F .
+2F820 .
+2F821 .
+2F822 .
+2F823 .
+2F824 .
+2F825 .
+2F826 .
+2F827 .
+2F828 .
+2F829 .
+2F82A .
+2F82B .
+2F82C .
+2F82D .
+2F82E .
+2F82F .
+2F830 .
+2F831 .
+2F832 .
+2F833 .
+2F834 .
+2F835 .
+2F836 .
+2F837 .
+2F838 .
+2F839 .
+2F83A .
+2F83B .
+2F83C .
+2F83D .
+2F83E .
+2F83F .
+2F840 .
+2F841 .
+2F842 .
+2F843 .
+2F844 .
+2F845 .
+2F846 .
+2F847 .
+2F848 .
+2F849 .
+2F84A .
+2F84B .
+2F84C .
+2F84D .
+2F84E .
+2F84F .
+2F850 .
+2F851 .
+2F852 .
+2F853 .
+2F854 .
+2F855 .
+2F856 .
+2F857 .
+2F858 .
+2F859 .
+2F85A .
+2F85B .
+2F85C .
+2F85D .
+2F85E .
+2F85F .
+2F860 .
+2F861 .
+2F862 .
+2F863 .
+2F864 .
+2F865 .
+2F866 .
+2F867 .
+2F868 .
+2F869 .
+2F86A .
+2F86B .
+2F86C .
+2F86D .
+2F86E .
+2F86F .
+2F870 .
+2F871 .
+2F872 .
+2F873 .
+2F874 .
+2F875 .
+2F876 .
+2F877 .
+2F878 .
+2F879 .
+2F87A .
+2F87B .
+2F87C .
+2F87D .
+2F87E .
+2F87F .
+2F880 .
+2F881 .
+2F882 .
+2F883 .
+2F884 .
+2F885 .
+2F886 .
+2F887 .
+2F888 .
+2F889 .
+2F88A .
+2F88B .
+2F88C .
+2F88D .
+2F88E .
+2F88F .
+2F890 .
+2F891 .
+2F892 .
+2F893 .
+2F894 .
+2F895 .
+2F896 .
+2F897 .
+2F898 .
+2F899 .
+2F89A .
+2F89B .
+2F89C .
+2F89D .
+2F89E .
+2F89F .
+2F8A0 .
+2F8A1 .
+2F8A2 .
+2F8A3 .
+2F8A4 .
+2F8A5 .
+2F8A6 .
+2F8A7 .
+2F8A8 .
+2F8A9 .
+2F8AA .
+2F8AB .
+2F8AC .
+2F8AD .
+2F8AE .
+2F8AF .
+2F8B0 .
+2F8B1 .
+2F8B2 .
+2F8B3 .
+2F8B4 .
+2F8B5 .
+2F8B6 .
+2F8B7 .
+2F8B8 .
+2F8B9 .
+2F8BA .
+2F8BB .
+2F8BC .
+2F8BD .
+2F8BE .
+2F8BF .
+2F8C0 .
+2F8C1 .
+2F8C2 .
+2F8C3 .
+2F8C4 .
+2F8C5 .
+2F8C6 .
+2F8C7 .
+2F8C8 .
+2F8C9 .
+2F8CA .
+2F8CB .
+2F8CC .
+2F8CD .
+2F8CE .
+2F8CF .
+2F8D0 .
+2F8D1 .
+2F8D2 .
+2F8D3 .
+2F8D4 .
+2F8D5 .
+2F8D6 .
+2F8D7 .
+2F8D8 .
+2F8D9 .
+2F8DA .
+2F8DB .
+2F8DC .
+2F8DD .
+2F8DE .
+2F8DF .
+2F8E0 .
+2F8E1 .
+2F8E2 .
+2F8E3 .
+2F8E4 .
+2F8E5 .
+2F8E6 .
+2F8E7 .
+2F8E8 .
+2F8E9 .
+2F8EA .
+2F8EB .
+2F8EC .
+2F8ED .
+2F8EE .
+2F8EF .
+2F8F0 .
+2F8F1 .
+2F8F2 .
+2F8F3 .
+2F8F4 .
+2F8F5 .
+2F8F6 .
+2F8F7 .
+2F8F8 .
+2F8F9 .
+2F8FA .
+2F8FB .
+2F8FC .
+2F8FD .
+2F8FE .
+2F8FF .
+2F900 .
+2F901 .
+2F902 .
+2F903 .
+2F904 .
+2F905 .
+2F906 .
+2F907 .
+2F908 .
+2F909 .
+2F90A .
+2F90B .
+2F90C .
+2F90D .
+2F90E .
+2F90F .
+2F910 .
+2F911 .
+2F912 .
+2F913 .
+2F914 .
+2F915 .
+2F916 .
+2F917 .
+2F918 .
+2F919 .
+2F91A .
+2F91B .
+2F91C .
+2F91D .
+2F91E .
+2F91F .
+2F920 .
+2F921 .
+2F922 .
+2F923 .
+2F924 .
+2F925 .
+2F926 .
+2F927 .
+2F928 .
+2F929 .
+2F92A .
+2F92B .
+2F92C .
+2F92D .
+2F92E .
+2F92F .
+2F930 .
+2F931 .
+2F932 .
+2F933 .
+2F934 .
+2F935 .
+2F936 .
+2F937 .
+2F938 .
+2F939 .
+2F93A .
+2F93B .
+2F93C .
+2F93D .
+2F93E .
+2F93F .
+2F940 .
+2F941 .
+2F942 .
+2F943 .
+2F944 .
+2F945 .
+2F946 .
+2F947 .
+2F948 .
+2F949 .
+2F94A .
+2F94B .
+2F94C .
+2F94D .
+2F94E .
+2F94F .
+2F950 .
+2F951 .
+2F952 .
+2F953 .
+2F954 .
+2F955 .
+2F956 .
+2F957 .
+2F958 .
+2F959 .
+2F95A .
+2F95B .
+2F95C .
+2F95D .
+2F95E .
+2F95F .
+2F960 .
+2F961 .
+2F962 .
+2F963 .
+2F964 .
+2F965 .
+2F966 .
+2F967 .
+2F968 .
+2F969 .
+2F96A .
+2F96B .
+2F96C .
+2F96D .
+2F96E .
+2F96F .
+2F970 .
+2F971 .
+2F972 .
+2F973 .
+2F974 .
+2F975 .
+2F976 .
+2F977 .
+2F978 .
+2F979 .
+2F97A .
+2F97B .
+2F97C .
+2F97D .
+2F97E .
+2F97F .
+2F980 .
+2F981 .
+2F982 .
+2F983 .
+2F984 .
+2F985 .
+2F986 .
+2F987 .
+2F988 .
+2F989 .
+2F98A .
+2F98B .
+2F98C .
+2F98D .
+2F98E .
+2F98F .
+2F990 .
+2F991 .
+2F992 .
+2F993 .
+2F994 .
+2F995 .
+2F996 .
+2F997 .
+2F998 .
+2F999 .
+2F99A .
+2F99B .
+2F99C .
+2F99D .
+2F99E .
+2F99F .
+2F9A0 .
+2F9A1 .
+2F9A2 .
+2F9A3 .
+2F9A4 .
+2F9A5 .
+2F9A6 .
+2F9A7 .
+2F9A8 .
+2F9A9 .
+2F9AA .
+2F9AB .
+2F9AC .
+2F9AD .
+2F9AE .
+2F9AF .
+2F9B0 .
+2F9B1 .
+2F9B2 .
+2F9B3 .
+2F9B4 .
+2F9B5 .
+2F9B6 .
+2F9B7 .
+2F9B8 .
+2F9B9 .
+2F9BA .
+2F9BB .
+2F9BC .
+2F9BD .
+2F9BE .
+2F9BF .
+2F9C0 .
+2F9C1 .
+2F9C2 .
+2F9C3 .
+2F9C4 .
+2F9C5 .
+2F9C6 .
+2F9C7 .
+2F9C8 .
+2F9C9 .
+2F9CA .
+2F9CB .
+2F9CC .
+2F9CD .
+2F9CE .
+2F9CF .
+2F9D0 .
+2F9D1 .
+2F9D2 .
+2F9D3 .
+2F9D4 .
+2F9D5 .
+2F9D6 .
+2F9D7 .
+2F9D8 .
+2F9D9 .
+2F9DA .
+2F9DB .
+2F9DC .
+2F9DD .
+2F9DE .
+2F9DF .
+2F9E0 .
+2F9E1 .
+2F9E2 .
+2F9E3 .
+2F9E4 .
+2F9E5 .
+2F9E6 .
+2F9E7 .
+2F9E8 .
+2F9E9 .
+2F9EA .
+2F9EB .
+2F9EC .
+2F9ED .
+2F9EE .
+2F9EF .
+2F9F0 .
+2F9F1 .
+2F9F2 .
+2F9F3 .
+2F9F4 .
+2F9F5 .
+2F9F6 .
+2F9F7 .
+2F9F8 .
+2F9F9 .
+2F9FA .
+2F9FB .
+2F9FC .
+2F9FD .
+2F9FE .
+2F9FF .
+2FA00 .
+2FA01 .
+2FA02 .
+2FA03 .
+2FA04 .
+2FA05 .
+2FA06 .
+2FA07 .
+2FA08 .
+2FA09 .
+2FA0A .
+2FA0B .
+2FA0C .
+2FA0D .
+2FA0E .
+2FA0F .
+2FA10 .
+2FA11 .
+2FA12 .
+2FA13 .
+2FA14 .
+2FA15 .
+2FA16 .
+2FA17 .
+2FA18 .
+2FA19 .
+2FA1A .
+2FA1B .
+2FA1C .
+2FA1D .
+2170 2160
+2171 2161
+2172 2162
+2173 2163
+2174 2164
+2175 2165
+2176 2166
+2177 2167
+2178 2168
+2179 2169
+217A 216A
+217B 216B
+217C 216C
+217D 216D
+217E 216E
+217F 216F
+24D0 24B6
+24D1 24B7
+24D2 24B8
+24D3 24B9
+24D4 24BA
+24D5 24BB
+24D6 24BC
+24D7 24BD
+24D8 24BE
+24D9 24BF
+24DA 24C0
+24DB 24C1
+24DC 24C2
+24DD 24C3
+24DE 24C4
+24DF 24C5
+24E0 24C6
+24E1 24C7
+24E2 24C8
+24E3 24C9
+24E4 24CA
+24E5 24CB
+24E6 24CC
+24E7 24CD
+24E8 24CE
+24E9 24CF
+0300 .
+0301 .
+0302 .
+0303 .
+0304 .
+0305 .
+0306 .
+0307 .
+0308 .
+0309 .
+030A .
+030B .
+030C .
+030D .
+030E .
+030F .
+0310 .
+0311 .
+0312 .
+0313 .
+0314 .
+0315 .
+0316 .
+0317 .
+0318 .
+0319 .
+031A .
+031B .
+031C .
+031D .
+031E .
+031F .
+0320 .
+0321 .
+0322 .
+0323 .
+0324 .
+0325 .
+0326 .
+0327 .
+0328 .
+0329 .
+032A .
+032B .
+032C .
+032D .
+032E .
+032F .
+0330 .
+0331 .
+0332 .
+0333 .
+0334 .
+0335 .
+0336 .
+0337 .
+0338 .
+0339 .
+033A .
+033B .
+033C .
+033D .
+033E .
+033F .
+0340 .
+0341 .
+0342 .
+0343 .
+0344 .
+0345 .
+0346 .
+0347 .
+0348 .
+0349 .
+034A .
+034B .
+034C .
+034D .
+034E .
+034F .
+0350 .
+0351 .
+0352 .
+0353 .
+0354 .
+0355 .
+0356 .
+0357 .
+0358 .
+0359 .
+035A .
+035B .
+035C .
+035D .
+035E .
+035F .
+0360 .
+0361 .
+0362 .
+0363 .
+0364 .
+0365 .
+0366 .
+0367 .
+0368 .
+0369 .
+036A .
+036B .
+036C .
+036D .
+036E .
+036F .
+0483 .
+0484 .
+0485 .
+0486 .
+0487 .
+0488 .
+0489 .
+0591 .
+0592 .
+0593 .
+0594 .
+0595 .
+0596 .
+0597 .
+0598 .
+0599 .
+059A .
+059B .
+059C .
+059D .
+059E .
+059F .
+05A0 .
+05A1 .
+05A2 .
+05A3 .
+05A4 .
+05A5 .
+05A6 .
+05A7 .
+05A8 .
+05A9 .
+05AA .
+05AB .
+05AC .
+05AD .
+05AE .
+05AF .
+05B0 .
+05B1 .
+05B2 .
+05B3 .
+05B4 .
+05B5 .
+05B6 .
+05B7 .
+05B8 .
+05B9 .
+05BA .
+05BB .
+05BC .
+05BD .
+05BF .
+05C1 .
+05C2 .
+05C4 .
+05C5 .
+05C7 .
+0610 .
+0611 .
+0612 .
+0613 .
+0614 .
+0615 .
+0616 .
+0617 .
+0618 .
+0619 .
+061A .
+064B .
+064C .
+064D .
+064E .
+064F .
+0650 .
+0651 .
+0652 .
+0653 .
+0654 .
+0655 .
+0656 .
+0657 .
+0658 .
+0659 .
+065A .
+065B .
+065C .
+065D .
+065E .
+065F .
+0670 .
+06D6 .
+06D7 .
+06D8 .
+06D9 .
+06DA .
+06DB .
+06DC .
+06DF .
+06E0 .
+06E1 .
+06E2 .
+06E3 .
+06E4 .
+06E7 .
+06E8 .
+06EA .
+06EB .
+06EC .
+06ED .
+0711 .
+0730 .
+0731 .
+0732 .
+0733 .
+0734 .
+0735 .
+0736 .
+0737 .
+0738 .
+0739 .
+073A .
+073B .
+073C .
+073D .
+073E .
+073F .
+0740 .
+0741 .
+0742 .
+0743 .
+0744 .
+0745 .
+0746 .
+0747 .
+0748 .
+0749 .
+074A .
+07A6 .
+07A7 .
+07A8 .
+07A9 .
+07AA .
+07AB .
+07AC .
+07AD .
+07AE .
+07AF .
+07B0 .
+07EB .
+07EC .
+07ED .
+07EE .
+07EF .
+07F0 .
+07F1 .
+07F2 .
+07F3 .
+0816 .
+0817 .
+0818 .
+0819 .
+081B .
+081C .
+081D .
+081E .
+081F .
+0820 .
+0821 .
+0822 .
+0823 .
+0825 .
+0826 .
+0827 .
+0829 .
+082A .
+082B .
+082C .
+082D .
+0859 .
+085A .
+085B .
+08E4 .
+08E5 .
+08E6 .
+08E7 .
+08E8 .
+08E9 .
+08EA .
+08EB .
+08EC .
+08ED .
+08EE .
+08EF .
+08F0 .
+08F1 .
+08F2 .
+08F3 .
+08F4 .
+08F5 .
+08F6 .
+08F7 .
+08F8 .
+08F9 .
+08FA .
+08FB .
+08FC .
+08FD .
+08FE .
+0900 .
+0901 .
+0902 .
+0903 .
+093A .
+093B .
+093C .
+093E .
+093F .
+0940 .
+0941 .
+0942 .
+0943 .
+0944 .
+0945 .
+0946 .
+0947 .
+0948 .
+0949 .
+094A .
+094B .
+094C .
+094D .
+094E .
+094F .
+0951 .
+0952 .
+0953 .
+0954 .
+0955 .
+0956 .
+0957 .
+0962 .
+0963 .
+0981 .
+0982 .
+0983 .
+09BC .
+09BE .
+09BF .
+09C0 .
+09C1 .
+09C2 .
+09C3 .
+09C4 .
+09C7 .
+09C8 .
+09CB .
+09CC .
+09CD .
+09D7 .
+09E2 .
+09E3 .
+0A01 .
+0A02 .
+0A03 .
+0A3C .
+0A3E .
+0A3F .
+0A40 .
+0A41 .
+0A42 .
+0A47 .
+0A48 .
+0A4B .
+0A4C .
+0A4D .
+0A51 .
+0A70 .
+0A71 .
+0A75 .
+0A81 .
+0A82 .
+0A83 .
+0ABC .
+0ABE .
+0ABF .
+0AC0 .
+0AC1 .
+0AC2 .
+0AC3 .
+0AC4 .
+0AC5 .
+0AC7 .
+0AC8 .
+0AC9 .
+0ACB .
+0ACC .
+0ACD .
+0AE2 .
+0AE3 .
+0B01 .
+0B02 .
+0B03 .
+0B3C .
+0B3E .
+0B3F .
+0B40 .
+0B41 .
+0B42 .
+0B43 .
+0B44 .
+0B47 .
+0B48 .
+0B4B .
+0B4C .
+0B4D .
+0B56 .
+0B57 .
+0B62 .
+0B63 .
+0B82 .
+0BBE .
+0BBF .
+0BC0 .
+0BC1 .
+0BC2 .
+0BC6 .
+0BC7 .
+0BC8 .
+0BCA .
+0BCB .
+0BCC .
+0BCD .
+0BD7 .
+0C01 .
+0C02 .
+0C03 .
+0C3E .
+0C3F .
+0C40 .
+0C41 .
+0C42 .
+0C43 .
+0C44 .
+0C46 .
+0C47 .
+0C48 .
+0C4A .
+0C4B .
+0C4C .
+0C4D .
+0C55 .
+0C56 .
+0C62 .
+0C63 .
+0C82 .
+0C83 .
+0CBC .
+0CBE .
+0CBF .
+0CC0 .
+0CC1 .
+0CC2 .
+0CC3 .
+0CC4 .
+0CC6 .
+0CC7 .
+0CC8 .
+0CCA .
+0CCB .
+0CCC .
+0CCD .
+0CD5 .
+0CD6 .
+0CE2 .
+0CE3 .
+0D02 .
+0D03 .
+0D3E .
+0D3F .
+0D40 .
+0D41 .
+0D42 .
+0D43 .
+0D44 .
+0D46 .
+0D47 .
+0D48 .
+0D4A .
+0D4B .
+0D4C .
+0D4D .
+0D57 .
+0D62 .
+0D63 .
+0D82 .
+0D83 .
+0DCA .
+0DCF .
+0DD0 .
+0DD1 .
+0DD2 .
+0DD3 .
+0DD4 .
+0DD6 .
+0DD8 .
+0DD9 .
+0DDA .
+0DDB .
+0DDC .
+0DDD .
+0DDE .
+0DDF .
+0DF2 .
+0DF3 .
+0E31 .
+0E34 .
+0E35 .
+0E36 .
+0E37 .
+0E38 .
+0E39 .
+0E3A .
+0E47 .
+0E48 .
+0E49 .
+0E4A .
+0E4B .
+0E4C .
+0E4D .
+0E4E .
+0EB1 .
+0EB4 .
+0EB5 .
+0EB6 .
+0EB7 .
+0EB8 .
+0EB9 .
+0EBB .
+0EBC .
+0EC8 .
+0EC9 .
+0ECA .
+0ECB .
+0ECC .
+0ECD .
+0F18 .
+0F19 .
+0F35 .
+0F37 .
+0F39 .
+0F3E .
+0F3F .
+0F71 .
+0F72 .
+0F73 .
+0F74 .
+0F75 .
+0F76 .
+0F77 .
+0F78 .
+0F79 .
+0F7A .
+0F7B .
+0F7C .
+0F7D .
+0F7E .
+0F7F .
+0F80 .
+0F81 .
+0F82 .
+0F83 .
+0F84 .
+0F86 .
+0F87 .
+0F8D .
+0F8E .
+0F8F .
+0F90 .
+0F91 .
+0F92 .
+0F93 .
+0F94 .
+0F95 .
+0F96 .
+0F97 .
+0F99 .
+0F9A .
+0F9B .
+0F9C .
+0F9D .
+0F9E .
+0F9F .
+0FA0 .
+0FA1 .
+0FA2 .
+0FA3 .
+0FA4 .
+0FA5 .
+0FA6 .
+0FA7 .
+0FA8 .
+0FA9 .
+0FAA .
+0FAB .
+0FAC .
+0FAD .
+0FAE .
+0FAF .
+0FB0 .
+0FB1 .
+0FB2 .
+0FB3 .
+0FB4 .
+0FB5 .
+0FB6 .
+0FB7 .
+0FB8 .
+0FB9 .
+0FBA .
+0FBB .
+0FBC .
+0FC6 .
+102B .
+102C .
+102D .
+102E .
+102F .
+1030 .
+1031 .
+1032 .
+1033 .
+1034 .
+1035 .
+1036 .
+1037 .
+1038 .
+1039 .
+103A .
+103B .
+103C .
+103D .
+103E .
+1056 .
+1057 .
+1058 .
+1059 .
+105E .
+105F .
+1060 .
+1062 .
+1063 .
+1064 .
+1067 .
+1068 .
+1069 .
+106A .
+106B .
+106C .
+106D .
+1071 .
+1072 .
+1073 .
+1074 .
+1082 .
+1083 .
+1084 .
+1085 .
+1086 .
+1087 .
+1088 .
+1089 .
+108A .
+108B .
+108C .
+108D .
+108F .
+109A .
+109B .
+109C .
+109D .
+135D .
+135E .
+135F .
+1712 .
+1713 .
+1714 .
+1732 .
+1733 .
+1734 .
+1752 .
+1753 .
+1772 .
+1773 .
+17B4 .
+17B5 .
+17B6 .
+17B7 .
+17B8 .
+17B9 .
+17BA .
+17BB .
+17BC .
+17BD .
+17BE .
+17BF .
+17C0 .
+17C1 .
+17C2 .
+17C3 .
+17C4 .
+17C5 .
+17C6 .
+17C7 .
+17C8 .
+17C9 .
+17CA .
+17CB .
+17CC .
+17CD .
+17CE .
+17CF .
+17D0 .
+17D1 .
+17D2 .
+17D3 .
+17DD .
+180B .
+180C .
+180D .
+18A9 .
+1920 .
+1921 .
+1922 .
+1923 .
+1924 .
+1925 .
+1926 .
+1927 .
+1928 .
+1929 .
+192A .
+192B .
+1930 .
+1931 .
+1932 .
+1933 .
+1934 .
+1935 .
+1936 .
+1937 .
+1938 .
+1939 .
+193A .
+193B .
+19B0 .
+19B1 .
+19B2 .
+19B3 .
+19B4 .
+19B5 .
+19B6 .
+19B7 .
+19B8 .
+19B9 .
+19BA .
+19BB .
+19BC .
+19BD .
+19BE .
+19BF .
+19C0 .
+19C8 .
+19C9 .
+1A17 .
+1A18 .
+1A19 .
+1A1A .
+1A1B .
+1A55 .
+1A56 .
+1A57 .
+1A58 .
+1A59 .
+1A5A .
+1A5B .
+1A5C .
+1A5D .
+1A5E .
+1A60 .
+1A61 .
+1A62 .
+1A63 .
+1A64 .
+1A65 .
+1A66 .
+1A67 .
+1A68 .
+1A69 .
+1A6A .
+1A6B .
+1A6C .
+1A6D .
+1A6E .
+1A6F .
+1A70 .
+1A71 .
+1A72 .
+1A73 .
+1A74 .
+1A75 .
+1A76 .
+1A77 .
+1A78 .
+1A79 .
+1A7A .
+1A7B .
+1A7C .
+1A7F .
+1B00 .
+1B01 .
+1B02 .
+1B03 .
+1B04 .
+1B34 .
+1B35 .
+1B36 .
+1B37 .
+1B38 .
+1B39 .
+1B3A .
+1B3B .
+1B3C .
+1B3D .
+1B3E .
+1B3F .
+1B40 .
+1B41 .
+1B42 .
+1B43 .
+1B44 .
+1B6B .
+1B6C .
+1B6D .
+1B6E .
+1B6F .
+1B70 .
+1B71 .
+1B72 .
+1B73 .
+1B80 .
+1B81 .
+1B82 .
+1BA1 .
+1BA2 .
+1BA3 .
+1BA4 .
+1BA5 .
+1BA6 .
+1BA7 .
+1BA8 .
+1BA9 .
+1BAA .
+1BAB .
+1BAC .
+1BAD .
+1BE6 .
+1BE7 .
+1BE8 .
+1BE9 .
+1BEA .
+1BEB .
+1BEC .
+1BED .
+1BEE .
+1BEF .
+1BF0 .
+1BF1 .
+1BF2 .
+1BF3 .
+1C24 .
+1C25 .
+1C26 .
+1C27 .
+1C28 .
+1C29 .
+1C2A .
+1C2B .
+1C2C .
+1C2D .
+1C2E .
+1C2F .
+1C30 .
+1C31 .
+1C32 .
+1C33 .
+1C34 .
+1C35 .
+1C36 .
+1C37 .
+1CD0 .
+1CD1 .
+1CD2 .
+1CD4 .
+1CD5 .
+1CD6 .
+1CD7 .
+1CD8 .
+1CD9 .
+1CDA .
+1CDB .
+1CDC .
+1CDD .
+1CDE .
+1CDF .
+1CE0 .
+1CE1 .
+1CE2 .
+1CE3 .
+1CE4 .
+1CE5 .
+1CE6 .
+1CE7 .
+1CE8 .
+1CED .
+1CF2 .
+1CF3 .
+1CF4 .
+1DC0 .
+1DC1 .
+1DC2 .
+1DC3 .
+1DC4 .
+1DC5 .
+1DC6 .
+1DC7 .
+1DC8 .
+1DC9 .
+1DCA .
+1DCB .
+1DCC .
+1DCD .
+1DCE .
+1DCF .
+1DD0 .
+1DD1 .
+1DD2 .
+1DD3 .
+1DD4 .
+1DD5 .
+1DD6 .
+1DD7 .
+1DD8 .
+1DD9 .
+1DDA .
+1DDB .
+1DDC .
+1DDD .
+1DDE .
+1DDF .
+1DE0 .
+1DE1 .
+1DE2 .
+1DE3 .
+1DE4 .
+1DE5 .
+1DE6 .
+1DFC .
+1DFD .
+1DFE .
+1DFF .
+20D0 .
+20D1 .
+20D2 .
+20D3 .
+20D4 .
+20D5 .
+20D6 .
+20D7 .
+20D8 .
+20D9 .
+20DA .
+20DB .
+20DC .
+20DD .
+20DE .
+20DF .
+20E0 .
+20E1 .
+20E2 .
+20E3 .
+20E4 .
+20E5 .
+20E6 .
+20E7 .
+20E8 .
+20E9 .
+20EA .
+20EB .
+20EC .
+20ED .
+20EE .
+20EF .
+20F0 .
+2CEF .
+2CF0 .
+2CF1 .
+2D7F .
+2DE0 .
+2DE1 .
+2DE2 .
+2DE3 .
+2DE4 .
+2DE5 .
+2DE6 .
+2DE7 .
+2DE8 .
+2DE9 .
+2DEA .
+2DEB .
+2DEC .
+2DED .
+2DEE .
+2DEF .
+2DF0 .
+2DF1 .
+2DF2 .
+2DF3 .
+2DF4 .
+2DF5 .
+2DF6 .
+2DF7 .
+2DF8 .
+2DF9 .
+2DFA .
+2DFB .
+2DFC .
+2DFD .
+2DFE .
+2DFF .
+302A .
+302B .
+302C .
+302D .
+302E .
+302F .
+3099 .
+309A .
+A66F .
+A670 .
+A671 .
+A672 .
+A674 .
+A675 .
+A676 .
+A677 .
+A678 .
+A679 .
+A67A .
+A67B .
+A67C .
+A67D .
+A69F .
+A6F0 .
+A6F1 .
+A802 .
+A806 .
+A80B .
+A823 .
+A824 .
+A825 .
+A826 .
+A827 .
+A880 .
+A881 .
+A8B4 .
+A8B5 .
+A8B6 .
+A8B7 .
+A8B8 .
+A8B9 .
+A8BA .
+A8BB .
+A8BC .
+A8BD .
+A8BE .
+A8BF .
+A8C0 .
+A8C1 .
+A8C2 .
+A8C3 .
+A8C4 .
+A8E0 .
+A8E1 .
+A8E2 .
+A8E3 .
+A8E4 .
+A8E5 .
+A8E6 .
+A8E7 .
+A8E8 .
+A8E9 .
+A8EA .
+A8EB .
+A8EC .
+A8ED .
+A8EE .
+A8EF .
+A8F0 .
+A8F1 .
+A926 .
+A927 .
+A928 .
+A929 .
+A92A .
+A92B .
+A92C .
+A92D .
+A947 .
+A948 .
+A949 .
+A94A .
+A94B .
+A94C .
+A94D .
+A94E .
+A94F .
+A950 .
+A951 .
+A952 .
+A953 .
+A980 .
+A981 .
+A982 .
+A983 .
+A9B3 .
+A9B4 .
+A9B5 .
+A9B6 .
+A9B7 .
+A9B8 .
+A9B9 .
+A9BA .
+A9BB .
+A9BC .
+A9BD .
+A9BE .
+A9BF .
+A9C0 .
+AA29 .
+AA2A .
+AA2B .
+AA2C .
+AA2D .
+AA2E .
+AA2F .
+AA30 .
+AA31 .
+AA32 .
+AA33 .
+AA34 .
+AA35 .
+AA36 .
+AA43 .
+AA4C .
+AA4D .
+AA7B .
+AAB0 .
+AAB2 .
+AAB3 .
+AAB4 .
+AAB7 .
+AAB8 .
+AABE .
+AABF .
+AAC1 .
+AAEB .
+AAEC .
+AAED .
+AAEE .
+AAEF .
+AAF5 .
+AAF6 .
+ABE3 .
+ABE4 .
+ABE5 .
+ABE6 .
+ABE7 .
+ABE8 .
+ABE9 .
+ABEA .
+ABEC .
+ABED .
+FB1E .
+FE00 .
+FE01 .
+FE02 .
+FE03 .
+FE04 .
+FE05 .
+FE06 .
+FE07 .
+FE08 .
+FE09 .
+FE0A .
+FE0B .
+FE0C .
+FE0D .
+FE0E .
+FE0F .
+FE20 .
+FE21 .
+FE22 .
+FE23 .
+FE24 .
+FE25 .
+FE26 .
+101FD .
+10A01 .
+10A02 .
+10A03 .
+10A05 .
+10A06 .
+10A0C .
+10A0D .
+10A0E .
+10A0F .
+10A38 .
+10A39 .
+10A3A .
+10A3F .
+11000 .
+11001 .
+11002 .
+11038 .
+11039 .
+1103A .
+1103B .
+1103C .
+1103D .
+1103E .
+1103F .
+11040 .
+11041 .
+11042 .
+11043 .
+11044 .
+11045 .
+11046 .
+11080 .
+11081 .
+11082 .
+110B0 .
+110B1 .
+110B2 .
+110B3 .
+110B4 .
+110B5 .
+110B6 .
+110B7 .
+110B8 .
+110B9 .
+110BA .
+11100 .
+11101 .
+11102 .
+11127 .
+11128 .
+11129 .
+1112A .
+1112B .
+1112C .
+1112D .
+1112E .
+1112F .
+11130 .
+11131 .
+11132 .
+11133 .
+11134 .
+11180 .
+11181 .
+11182 .
+111B3 .
+111B4 .
+111B5 .
+111B6 .
+111B7 .
+111B8 .
+111B9 .
+111BA .
+111BB .
+111BC .
+111BD .
+111BE .
+111BF .
+111C0 .
+116AB .
+116AC .
+116AD .
+116AE .
+116AF .
+116B0 .
+116B1 .
+116B2 .
+116B3 .
+116B4 .
+116B5 .
+116B6 .
+116B7 .
+16F51 .
+16F52 .
+16F53 .
+16F54 .
+16F55 .
+16F56 .
+16F57 .
+16F58 .
+16F59 .
+16F5A .
+16F5B .
+16F5C .
+16F5D .
+16F5E .
+16F5F .
+16F60 .
+16F61 .
+16F62 .
+16F63 .
+16F64 .
+16F65 .
+16F66 .
+16F67 .
+16F68 .
+16F69 .
+16F6A .
+16F6B .
+16F6C .
+16F6D .
+16F6E .
+16F6F .
+16F70 .
+16F71 .
+16F72 .
+16F73 .
+16F74 .
+16F75 .
+16F76 .
+16F77 .
+16F78 .
+16F79 .
+16F7A .
+16F7B .
+16F7C .
+16F7D .
+16F7E .
+16F8F .
+16F90 .
+16F91 .
+16F92 .
+1D165 .
+1D166 .
+1D167 .
+1D168 .
+1D169 .
+1D16D .
+1D16E .
+1D16F .
+1D170 .
+1D171 .
+1D172 .
+1D17B .
+1D17C .
+1D17D .
+1D17E .
+1D17F .
+1D180 .
+1D181 .
+1D182 .
+1D185 .
+1D186 .
+1D187 .
+1D188 .
+1D189 .
+1D18A .
+1D18B .
+1D1AA .
+1D1AB .
+1D1AC .
+1D1AD .
+1D242 .
+1D243 .
+1D244 .
+E0100 .
+E0101 .
+E0102 .
+E0103 .
+E0104 .
+E0105 .
+E0106 .
+E0107 .
+E0108 .
+E0109 .
+E010A .
+E010B .
+E010C .
+E010D .
+E010E .
+E010F .
+E0110 .
+E0111 .
+E0112 .
+E0113 .
+E0114 .
+E0115 .
+E0116 .
+E0117 .
+E0118 .
+E0119 .
+E011A .
+E011B .
+E011C .
+E011D .
+E011E .
+E011F .
+E0120 .
+E0121 .
+E0122 .
+E0123 .
+E0124 .
+E0125 .
+E0126 .
+E0127 .
+E0128 .
+E0129 .
+E012A .
+E012B .
+E012C .
+E012D .
+E012E .
+E012F .
+E0130 .
+E0131 .
+E0132 .
+E0133 .
+E0134 .
+E0135 .
+E0136 .
+E0137 .
+E0138 .
+E0139 .
+E013A .
+E013B .
+E013C .
+E013D .
+E013E .
+E013F .
+E0140 .
+E0141 .
+E0142 .
+E0143 .
+E0144 .
+E0145 .
+E0146 .
+E0147 .
+E0148 .
+E0149 .
+E014A .
+E014B .
+E014C .
+E014D .
+E014E .
+E014F .
+E0150 .
+E0151 .
+E0152 .
+E0153 .
+E0154 .
+E0155 .
+E0156 .
+E0157 .
+E0158 .
+E0159 .
+E015A .
+E015B .
+E015C .
+E015D .
+E015E .
+E015F .
+E0160 .
+E0161 .
+E0162 .
+E0163 .
+E0164 .
+E0165 .
+E0166 .
+E0167 .
+E0168 .
+E0169 .
+E016A .
+E016B .
+E016C .
+E016D .
+E016E .
+E016F .
+E0170 .
+E0171 .
+E0172 .
+E0173 .
+E0174 .
+E0175 .
+E0176 .
+E0177 .
+E0178 .
+E0179 .
+E017A .
+E017B .
+E017C .
+E017D .
+E017E .
+E017F .
+E0180 .
+E0181 .
+E0182 .
+E0183 .
+E0184 .
+E0185 .
+E0186 .
+E0187 .
+E0188 .
+E0189 .
+E018A .
+E018B .
+E018C .
+E018D .
+E018E .
+E018F .
+E0190 .
+E0191 .
+E0192 .
+E0193 .
+E0194 .
+E0195 .
+E0196 .
+E0197 .
+E0198 .
+E0199 .
+E019A .
+E019B .
+E019C .
+E019D .
+E019E .
+E019F .
+E01A0 .
+E01A1 .
+E01A2 .
+E01A3 .
+E01A4 .
+E01A5 .
+E01A6 .
+E01A7 .
+E01A8 .
+E01A9 .
+E01AA .
+E01AB .
+E01AC .
+E01AD .
+E01AE .
+E01AF .
+E01B0 .
+E01B1 .
+E01B2 .
+E01B3 .
+E01B4 .
+E01B5 .
+E01B6 .
+E01B7 .
+E01B8 .
+E01B9 .
+E01BA .
+E01BB .
+E01BC .
+E01BD .
+E01BE .
+E01BF .
+E01C0 .
+E01C1 .
+E01C2 .
+E01C3 .
+E01C4 .
+E01C5 .
+E01C6 .
+E01C7 .
+E01C8 .
+E01C9 .
+E01CA .
+E01CB .
+E01CC .
+E01CD .
+E01CE .
+E01CF .
+E01D0 .
+E01D1 .
+E01D2 .
+E01D3 .
+E01D4 .
+E01D5 .
+E01D6 .
+E01D7 .
+E01D8 .
+E01D9 .
+E01DA .
+E01DB .
+E01DC .
+E01DD .
+E01DE .
+E01DF .
+E01E0 .
+E01E1 .
+E01E2 .
+E01E3 .
+E01E4 .
+E01E5 .
+E01E6 .
+E01E7 .
+E01E8 .
+E01E9 .
+E01EA .
+E01EB .
+E01EC .
+E01ED .
+E01EE .
+E01EF .
+{} {} \_relax
+\_def\_tmp #1 #2 {\_lccode"#2="#1 \_uccode"#2="#2 }
+\_tmp 0069 0130
+\_tmp 03B8 03F4
+\_tmp 00DF 1E9E
+\_tmp 03C9 2126
+\_tmp 006B 212A
+\_tmp 00E5 212B
+\_def\_tmp #1 #2 {\_lccode"#1="#1 \_uccode"#1="#2 }
+\_tmp 0131 0049
+\_tmp 017F 0053
+\_tmp 03BC 039C
+\_tmp 03C2 03A3
+\_tmp 03D0 0392
+\_tmp 03D1 0398
+\_tmp 03D5 03A6
+\_tmp 03D6 03A0
+\_tmp 03F0 039A
+\_tmp 03F1 03A1
+\_tmp 03F5 0395
+\_tmp 1E9B 1E60
+\_tmp 1FBE 0399
+% end of file
+\_endcode
+
+All codes in unicode table keep information about pairs lowecase-uppercase
+letters or single letter. We need to read such information and set
+appropriate `\lccode` and `\uccode`. The `\catcode` above the code 127
+is not set, i.\,e.\ the `\catocde`=12 for all codes above 127.
+
+The file `uni-lcuc.opm` does this work. It is not much intereting file, only
+first few lines from 15928 lines in total is shown here.
+
+{\everytt={\typosize[8/10]\_let\_printverbline=\_printcodeline \medskip}\ttline=-1
+\def\docfile{uni-lcuc.opm}
+\verbinput (3-30) uni-lcuc.opm
+\vskip-\medskipamount
+\noindent\typosize[8/]\dots etc. (see {\tt\Brown\docfile})
+}
diff --git a/macros/luatex/optex/base/unimath-codes.opm b/macros/luatex/optex/base/unimath-codes.opm
new file mode 100644
index 0000000000..4be18807d7
--- /dev/null
+++ b/macros/luatex/optex/base/unimath-codes.opm
@@ -0,0 +1,361 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \_ncharrmA {Uni math codes <2020-03-14>} % preloaded on demand by \loadmath
+
+ \_doc -----------------------------
+ The control sequences for `\alpha`, `\beta` etc are redefined here.
+ The `\alpha` expands to the charcter with unicode `"03B1`, this is normal
+ character $α$. You can type it directly in your editor, if you know how
+ to do this.
+ \_cod -----------------------------
+
+\_umathnumB="0391
+\_greekdef \Alpha \Beta \Gamma \Delta \Epsilon \Zeta \Eta \Theta \Iota \Kappa
+ \Lambda \Mu \Nu \Xi \Omicron \Pi \Rho \varTheta \Sigma \Tau \Upsilon \Phi
+ \Chi \Psi \Omega \_relax
+
+\_umathnumB="03B1
+\_greekdef \alpha \beta \gamma \delta \varepsilon \zeta \eta \theta \iota \kappa
+ \lambda \mu \nu \xi \omicron \pi \rho \varsigma \sigma \tau \upsilon
+ \varphi \chi \psi \omega \vardelta \epsilon \vartheta \varkappa \phi
+ \varrho \varpi \_relax
+
+ \_doc -----------------------------
+ The math alphabets are declared here using the \^`\_umathrange` macro.
+ \_cod -----------------------------
+
+\_chardef\_ncharrmA=`A \_chardef\_ncharrma=`a
+\_chardef\_ncharbfA="1D400 \_chardef\_ncharbfa="1D41A
+\_chardef\_ncharitA="1D434 \_chardef\_ncharita="1D44E
+\_chardef\_ncharbiA="1D468 \_chardef\_ncharbia="1D482
+\_chardef\_ncharclA="1D49C \_chardef\_ncharcla="1D4B6
+\_chardef\_ncharbcA="1D4D0 \_chardef\_ncharbca="1D4EA
+\_chardef\_ncharfrA="1D504 \_chardef\_ncharfra="1D51E
+\_chardef\_ncharbrA="1D56C \_chardef\_ncharbra="1D586
+\_chardef\_ncharbbA="1D538 \_chardef\_ncharbba="1D552
+\_chardef\_ncharsnA="1D5A0 \_chardef\_ncharsna="1D5BA
+\_chardef\_ncharbsA="1D5D4 \_chardef\_ncharbsa="1D5EE
+\_chardef\_ncharsiA="1D608 \_chardef\_ncharsia="1D622
+\_chardef\_ncharsxA="1D63C \_chardef\_ncharsxa="1D656
+\_chardef\_ncharttA="1D670 \_chardef\_nchartta="1D68A
+
+\_protected\_def\_rmvariables {\_umathrange{A-Z}\_ncharrmA \_umathrange{a-z}\_ncharrma}
+\_protected\_def\_bfvariables {\_umathrange{A-Z}\_ncharbfA \_umathrange{a-z}\_ncharbfa}
+\_protected\_def\_nitvariables {\_umathrange{A-Z}\_ncharitA \_umathrange{a-z}\_ncharita}
+\_protected\_def\_bivariables {\_umathrange{A-Z}\_ncharbiA \_umathrange{a-z}\_ncharbia}
+\_protected\_def\_calvariables {\_umathrange{A-Z}\_ncharclA \_umathrange{a-z}\_ncharcla}
+\_protected\_def\_bcalvariables {\_umathrange{A-Z}\_ncharbcA \_umathrange{a-z}\_ncharbca}
+\_protected\_def\_frakvariables {\_umathrange{A-Z}\_ncharfrA \_umathrange{a-z}\_ncharfra}
+\_protected\_def\_bfrakvariables {\_umathrange{A-Z}\_ncharbrA \_umathrange{a-z}\_ncharbra}
+\_protected\_def\_bbvariables {\_umathrange{A-Z}\_ncharbbA \_umathrange{a-z}\_ncharbba}
+\_protected\_def\_sansvariables {\_umathrange{A-Z}\_ncharsnA \_umathrange{a-z}\_ncharsna}
+\_protected\_def\_bsansvariables {\_umathrange{A-Z}\_ncharbsA \_umathrange{a-z}\_ncharbsa}
+\_protected\_def\_isansvariables {\_umathrange{A-Z}\_ncharsiA \_umathrange{a-z}\_ncharsia}
+\_protected\_def\_bisansvariables {\_umathrange{A-Z}\_ncharsxA \_umathrange{a-z}\_ncharsxa}
+\_protected\_def\_ttvariables {\_umathrange{A-Z}\_ncharttA \_umathrange{a-z}\_nchartta}
+
+\_chardef\_greekrmA="0391 \_chardef\_greekrma="03B1
+\_chardef\_greekbfA="1D6A8 \_chardef\_greekbfa="1D6C2
+\_chardef\_greekitA="1D6E2 \_chardef\_greekita="1D6FC
+\_chardef\_greekbiA="1D71C \_chardef\_greekbia="1D736
+\_chardef\_greeksnA="1D756 \_chardef\_greeksna="1D770
+\_chardef\_greeksiA="1D790 \_chardef\_greeksia="1D7AA
+
+\_protected\_def\_nitgreek {\_umathrangeGREEK\_greekrmA \_umathrangegreek\_greekita}
+\_protected\_def\_rmgreek {\_umathrangeGREEK\_greekrmA \_umathrangegreek\_greekrma}
+\_protected\_def\_bfgreek {\_umathrangeGREEK\_greekbfA \_umathrangegreek\_greekbfa}
+\_protected\_def\_bigreek {\_umathrangeGREEK\_greekbfA \_umathrangegreek\_greekbia}
+\_protected\_def\_sansgreek {\_umathrangeGREEK\_greeksnA \_umathrangegreek\_greeksna}
+\_protected\_def\_isansgreek {\_umathrangeGREEK\_greeksnA \_umathrangegreek\_greeksia}
+
+% Another possibility (slanted capitals in \_nitgreek, \_bigreek, \_isansgreek):
+%\_protected\_def\_nitgreek {\_umathrangeGREEK\_greekitA \_umathrangegreek\_greekita}
+%\_protected\_def\_rmgreek {\_umathrangeGREEK\_greekrmA \_umathrangegreek\_greekrma}
+%\_protected\_def\_bfgreek {\_umathrangeGREEK\_greekbfA \_umathrangegreek\_greekbfa}
+%\_protected\_def\_bigreek {\_umathrangeGREEK\_greekbiA \_umathrangegreek\_greekbia}
+%\_protected\_def\_sansgreek {\_umathrangeGREEK\_greeksnA \_umathrangegreek\_greeksna}
+%\_protected\_def\_isansgreek {\_umathrangeGREEK\_greeksiA \_umathrangegreek\_greeksia}
+
+\_chardef\_digitrmO=`0
+\_chardef\_digitbfO="1D7CE
+\_chardef\_digitbbO="1D7D8
+\_chardef\_digitsnO="1D7E2
+\_chardef\_digitbsO="1D7EC
+\_chardef\_digitttO="1D7F6
+
+\_protected\_def\_rmdigits {\_umathrange{0-9}\_digitrmO}
+\_protected\_def\_bfdigits {\_umathrange{0-9}\_digitbfO}
+\_protected\_def\_bbdigits {\_umathrange{0-9}\_digitbbO}
+\_protected\_def\_sansdigits {\_umathrange{0-9}\_digitsnO}
+\_protected\_def\_bsansdigits {\_umathrange{0-9}\_digitbsO}
+\_protected\_def\_ttdigits {\_umathrange{0-9}\_digitttO}
+
+ \_doc -----------------------------
+ The \`\cal`, \`\bbchar`, \`\frak`, \`\script`
+ and
+ the \`\rm`, \`\bf`, \`\it`, \`\bi`, \`\tt` are defined here.
+ Their \"8bit definitions" from the file `math-preload.opm`
+ (section~\ref[math-preload]) are removed.\nl
+ You can redefine them again if you need different behavior (for example
+ you don't want to use sans serif bold in math). What to do:
+ \begtt \advance\hsize by2em
+ \_protected\_def\_bf {\_tryloadbf\_tenbf \_inmath{\_bfvariables\_bfgreek\_bfdigits}}
+ \_protected\_def\_bi {\_tryloadbi\_tenbi \_inmath{\_bivariables\_bigreek\_bfdigits}}
+ \_public \bf \bi ;
+ \endtt
+ \`\_inmath` `{<cmds>}` applies `<cmds>` only in math mode.
+ \_cod -----------------------------
+
+\_protected\_def\_inmath#1{\_relax \_ifmmode#1\_fi} % to keep off \loop processing in text mode
+
+% You can redefine these macros to follow your wishes.
+% For example you need upgright lowercase greek letters, you don't need
+% \bf and \bi behaves as sans serif in math, ...
+
+\_protected\_def\_rm {\_tryloadrm \_tenrm \_inmath{\_rmvariables \_rmdigits}}
+\_protected\_def\_it {\_tryloadit \_tenit \_inmath{\_nitvariables}}
+\_protected\_def\_bf {\_tryloadbf \_tenbf \_inmath{\_bsansvariables \_sansgreek \_bsansdigits}}
+\_protected\_def\_bi {\_tryloadbi \_tenbi \_inmath{\_bisansvariables \_isansgreek \_bsansdigits}}
+\_protected\_def\_tt {\_tryloadtt \_tentt \_inmath{\_ttvariables \_ttdigits}}
+\_protected\_def\_bbchar {\_bbvariables \_bbdigits}
+\_protected\_def\_cal {\_calvariables}
+\_protected\_def\_frak {\_frakvariables}
+\_protected\_def\_misans {\_isansvariables \_isansgreek \_sansdigits}
+\_protected\_def\_mbisans {\_bisansvariables \_isansgreek \_bsansdigits}
+\_protected\_def\_script {\_rmvariables \_fam4 }
+
+\_public \rm \it \bf \bi \tt \bbchar \cal \frak \misans \mbisans \script ;
+
+ \_doc -----------------------------
+ Each Unicode slot carries information about math type. This is saved in
+ the file `mathclass.txt` which is copied to `mathclass.opm` The file
+ has the following format:
+ {\vitt{mathclass.opm}\verbinput (70-85) mathclass.opm }
+ We have to read this information and convert it to the `\Umathcode`s.
+ \_cod -----------------------------
+
+\_begingroup % \input mathclass.opm (which is a copy of MathClass.txt):
+ \_def\_p#1;#2{\_edef\_tmp{\_pB#2}\_ifx\_tmp\_empty \_else\_pA#1....\_end#2\_fi}
+ \_def\_pA#1..#2..#3\_end#4{%
+ \_ifx\_relax#2\_relax \_pset{"#1}{#4}\_else
+ \_umathnumA="#1
+ \_loop
+ \_pset{\_umathnumA}{#4}%
+ \_ifnum\_umathnumA<"#2 \_advance\_umathnumA by1
+ \_repeat
+ \_fi
+ }
+ \_def\_pB#1{\_if#1L1\_fi \_if#1B2\_fi \_if#1V2\_fi \_if#1R3\_fi \_if#1N0\_fi \_if#1U0\_fi
+ \_if#1F0\_fi \_if#1O4\_fi \_if#1C5\_fi \_if#1P6\_fi \_if#1A7\_fi}
+ \_def\_pset#1#2{\_global\_Umathcode#1=\_tmp\_space 1 #1\_relax
+ \_if#2O\_global\_Udelcode#1=1 #1\_relax\_fi
+ \_if#2C\_global\_Udelcode#1=1 #1\_relax\_fi
+ \_if#2F\_global\_Udelcode#1=1 #1\_relax\_fi
+ }
+ \_catcode`#=14
+ \_everypar={\_setbox0=\_lastbox \_par \_p}
+ \_input mathclass.opm
+\_endgroup
+
+ \_doc -----------------------------
+ Each math symbol has its declaration in the file `unicode-math-table.tex`
+ which is copied to `unimath-table.opm`. The file has following format:
+ {\vitt{unimath-table.opm}\verbinput (70-85) unimath-table.opm }
+ We have to read this information and convert it to the Unicode math codes.
+ \_cod -----------------------------
+
+\_begingroup % \input unimath-table.opm (it is a copy of unicode-math-table.tex):
+ \_def\UnicodeMathSymbol #1#2#3#4{%
+ \_global\_Umathcharnumdef#2=\_Umathcodenum#1\_relax
+ \_ifx#3\_mathopen \_gdef#2{\_Udelimiter 4 1 #1 }\_fi
+ \_ifx#3\_mathclose \_gdef#2{\_Udelimiter 5 1 #1 }\_fi
+ \_ifx#3\_mathaccent \_gdef#2{\_Umathaccent fixed 7 1 #1 }\_fi
+ }
+ \_input unimath-table.opm
+\_endgroup
+
+ \_doc -----------------------------
+ Many special characters must be declared with care...
+ \_cod -----------------------------
+
+\_global\_Udelcode`<=1 "027E8 % these characters have different meaning
+\_global\_Udelcode`>=1 "027E9 % as normal and as delimeter
+
+\_nitgreek \_nitvariables \_rmdigits % default setting
+
+\_Umathcode `- = 2 1 "2212
+%\_Umathcode`: = 3 1 "3A % mathclass defines it as 6 1 "3A (punctuation)
+\_let\{=\lbrace \_let\}=\rbrace
+
+\_protected\_def \_sqrt {\_Uradical 1 "0221A }
+\_protected\_def \_cuberoot {\_Uradical 1 "0221B }
+\_protected\_def \_fourthroot {\_Uradical 1 "0221C }
+
+\_public \sqrt \cuberoot \fourthroot ;
+
+\_def\_intwithnolimits#1#2 {\_ifx#1\_relax \_else
+ \_ea\_let\_csname\_csstring#1op\_endcsname=#1%
+ \_ea\_def\_ea #1\_ea{\_csname\_csstring#1op\_endcsname \_nolimits}%
+ \_bgroup \_lccode`\~=#2 \_lowercase{\_egroup \_mathcode`~="8000 \_let ~=#1}%
+ \_ea \_intwithnolimits \_fi
+}
+\_intwithnolimits \int "0222B \iint "0222C \iiint "0222D
+ \oint "0222E \oiint "0222F \oiiint "02230
+ \intclockwise "02231 \varointclockwise "02232 \ointctrclockwise "02233
+ \sumint "02A0B \iiiint "02A0C \intbar "02A0D \intBar "02A0E \fint "02A0F
+ \pointint "02A15 \sqint "02A16 \intlarhk "02A17 \intx "02A18
+ \intcap "02A19 \intcup "02A1A \upint "02A1B \lowint "02A1C \_relax "0
+
+\_protected\_def \vert {\_Udelimiter 0 1 "07C }
+\_protected\_def \Vert {\_Udelimiter 0 1 "02016 }
+\_protected\_def \Vvert {\_Udelimiter 0 1 "02980 }
+
+\_protected\_def \_overbrace #1{\mathop {\Umathaccent 7 1 "023DE{#1}}\limits}
+\_protected\_def \_underbrace #1{\mathop {\Umathaccent bottom 7 1 "023DF{#1}}\limits}
+\_protected\_def \_overparen #1{\mathop {\Umathaccent 7 1 "023DC{#1}}\limits}
+\_protected\_def \_underparen #1{\mathop {\Umathaccent bottom 7 1 "023DD{#1}}\limits}
+\_protected\_def \_overbracket #1{\mathop {\Umathaccent 7 1 "023B4{#1}}\limits}
+\_protected\_def \_underbracket #1{\mathop {\Umathaccent bottom 7 1 "023B5{#1}}\limits}
+
+\_public \overbrace \underbrace \overparen \underparen \overbracket \underbracket ;
+
+\_protected\def \widehat {\Umathaccent 7 1 "00302 }
+\_protected\def \widetilde {\Umathaccent 7 1 "00303 }
+\_protected\def \overleftharpoon {\Umathaccent 7 1 "020D0 }
+\_protected\def \overrightharpoon {\Umathaccent 7 1 "020D1 }
+\_protected\def \overleftarrow {\Umathaccent 7 1 "020D6 }
+\_protected\def \overrightarrow {\Umathaccent 7 1 "020D7 }
+\_protected\def \overleftrightarrow {\Umathaccent 7 1 "020E1 }
+
+\_mathchardef\ldotp="612E
+\_let\|=\Vert
+\_mathcode`\_="8000
+
+ \_doc -----------------------------
+ Aliases are declared here. They are names not menitioned in the `unimath-table.opm` file
+ but commonly used in \TeX.
+ \_cod -----------------------------
+
+\_let \setminus=\smallsetminus
+\_let \diamond=\smwhtdiamond
+\_let \bullet=\smblkcircle
+\_let \circ=\vysmwhtcircle
+\_let \bigcirc=\mdlgwhtcircle
+\_let \to=\rightarrow
+\_let \le=\leq
+\_let \ge=\geq
+\_let \neq=\ne
+\_protected\_def \triangle {\mathord{\bigtriangleup}}
+\_let \emptyset=\varnothing
+\_let \hbar=\hslash
+\_let \land=\wedge
+\_let \lor=\vee
+\_let \owns=\ni
+\_let \gets=\leftarrow
+\_let \mathring=\ocirc
+\_let \lnot=\neg
+\_let \longdivision=\longdivisionsign
+\_let \backepsilon=\upbackepsilon
+\_let \eth=\matheth
+\_let \dbkarow=\dbkarrow
+\_let \drbkarow=\drbkarrow
+\_let \hksearow=\hksearrow
+\_let \hkswarow=\hkswarrow
+
+\_let \upalpha=\mupalpha
+\_let \upbeta=\mupbeta
+\_let \upgamma=\mupgamma
+\_let \updelta=\mupdelta
+\_let \upepsilon=\mupvarepsilon
+\_let \upvarepsilon=\mupvarepsilon
+\_let \upzeta=\mupzeta
+\_let \upeta=\mupeta
+\_let \uptheta=\muptheta
+\_let \upiota=\mupiota
+\_let \upkappa=\mupkappa
+\_let \uplambda=\muplambda
+\_let \upmu=\mupmu
+\_let \upnu=\mupnu
+\_let \upxi=\mupxi
+\_let \upomicron=\mupomicron
+\_let \uppi=\muppi
+\_let \uprho=\muprho
+\_let \upvarrho=\mupvarrho
+\_let \upvarsigma=\mupvarsigma
+\_let \upsigma=\mupsigma
+\_let \uptau=\muptau
+\_let \upupsilon=\mupupsilon
+\_let \upvarphi=\mupvarphi
+\_let \upchi=\mupchi
+\_let \uppsi=\muppsi
+\_let \upomega=\mupomega
+\_let \upvartheta=\mupvartheta
+\_let \upphi=\mupphi
+\_let \upvarpi=\mupvarpi
+
+ \_doc -----------------------------
+ The \^`\not` macro is redefined here.
+ \_cod -----------------------------
+
+\_protected\_def\_not#1{%
+ \_ifcsname _not!\_csstring#1\_endcsname \_csname _not!\_csstring#1\_endcsname
+ \_else \_mathrel{\_mathord{\_rlap{\_kern1pt/}}\_mathord{#1}}%
+ \_fi
+}
+\_def\_negationof #1#2{\_ea\_let \_csname _not!\_csstring#1\_endcsname =#2}
+\_negationof = \neq
+\_negationof < \nless
+\_negationof > \ngtr
+\_negationof \gets \nleftarrow
+\_negationof \simeq \nsime
+\_negationof \equal \ne
+\_negationof \le \nleq
+\_negationof \ge \ngeq
+\_negationof \greater \ngtr
+\_negationof \forksnot \forks
+\_negationof \in \notin
+
+\_public \not ;
+
+ \_doc -----------------------------
+ Newly declared public control sequences are used in internal macros by
+ \OpTeX/. We need to get new meanings of these control sequences in
+ private name space.
+ \_cod -----------------------------
+
+\_private
+ \ldotp \cdotp \bullet \triangleleft \trianglerigt \mapstochar \rightarrow
+ \prime \lhook \rightarrow \leftarrow \rhook \triangleright \triangleleft
+ \Relbar \Rightarrow \relbar \rightarrow \Leftarrow \mapstochar
+ \longrightarrow \Longleftrightarrow \vdots \ddots ;
+
+\_endcode
+
+\secc A few observations
+
+You can combine more fonts in math, if you register them to another
+math families (5, 6, 7, etc.) in the \^`\normalmath` macro.
+
+The default value of \^`\normalmath` shows a combination of base Unicode Math
+font with 8bit Math font at family 4. See definition of the `\script` macro where
+`\fam4` is used. Of course, we need to set `\rmvariables` too, because 8bit font
+accepts only codes less than 255.
+
+XITSmath-bold needs correction: the norm symbol ||x|| is missing here. So, you
+can define:
+
+\begtt
+\def\_boldmath{%
+ \loadumathfamily 1 {[xitsmath-bold]}{} % Base font
+ \loadmathfamily 4 rsfs % script
+ \loadumathfamily 5 {[xitsmath-regular]}{}
+ \def\|{\Udelimiter 0 5 "02016 }% % norm delimiter from family 5
+ \setmathdimens
+}
+\endtt
+
+\_endinput
+
+History:
+2020-04-30 Bug fix: \phi, \varpi etc. were bad encoded
+2020-04-09 Bug fix: \Udelcode`<, \Udelcode`> added
diff --git a/macros/luatex/optex/base/unimath-table.opm b/macros/luatex/optex/base/unimath-table.opm
new file mode 100644
index 0000000000..511b67e8ce
--- /dev/null
+++ b/macros/luatex/optex/base/unimath-table.opm
@@ -0,0 +1,2467 @@
+%%^^A%% unicode-math-table.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Source file of the math symbols.
+
+\UnicodeMathSymbol{"00021}{\mathexclam }{\mathclose}{exclamation mark}%
+\UnicodeMathSymbol{"00023}{\mathoctothorpe }{\mathord}{number sign}%
+\UnicodeMathSymbol{"00024}{\mathdollar }{\mathord}{dollar sign}%
+\UnicodeMathSymbol{"00025}{\mathpercent }{\mathord}{percent sign}%
+\UnicodeMathSymbol{"00026}{\mathampersand }{\mathord}{ampersand}%
+\UnicodeMathSymbol{"00028}{\lparen }{\mathopen}{left parenthesis}%
+\UnicodeMathSymbol{"00029}{\rparen }{\mathclose}{right parenthesis}%
+\UnicodeMathSymbol{"0002B}{\mathplus }{\mathbin}{plus sign b:}%
+\UnicodeMathSymbol{"0002C}{\mathcomma }{\mathpunct}{comma}%
+\UnicodeMathSymbol{"0002E}{\mathperiod }{\mathord}{full stop, period}%
+\UnicodeMathSymbol{"0002F}{\mathslash }{\mathord}{solidus}%
+\UnicodeMathSymbol{"0003A}{\mathcolon }{\mathpunct}{colon}%
+\UnicodeMathSymbol{"0003B}{\mathsemicolon }{\mathpunct}{semicolon p:}%
+\UnicodeMathSymbol{"0003C}{\less }{\mathrel}{less-than sign r:}%
+\UnicodeMathSymbol{"0003D}{\equal }{\mathrel}{equals sign r:}%
+\UnicodeMathSymbol{"0003E}{\greater }{\mathrel}{greater-than sign r:}%
+\UnicodeMathSymbol{"0003F}{\mathquestion }{\mathord}{question mark}%
+\UnicodeMathSymbol{"00040}{\mathatsign }{\mathord}{commercial at}%
+\UnicodeMathSymbol{"0005B}{\lbrack }{\mathopen}{left square bracket}%
+\UnicodeMathSymbol{"0005C}{\backslash }{\mathord}{reverse solidus}%
+\UnicodeMathSymbol{"0005D}{\rbrack }{\mathclose}{right square bracket}%
+\UnicodeMathSymbol{"0007B}{\lbrace }{\mathopen}{left curly bracket}%
+\UnicodeMathSymbol{"0007C}{\vert }{\mathfence}{vertical bar}%
+\UnicodeMathSymbol{"0007D}{\rbrace }{\mathclose}{right curly bracket}%
+\UnicodeMathSymbol{"000A3}{\mathsterling }{\mathord}{pound sign}%
+\UnicodeMathSymbol{"000A5}{\mathyen }{\mathord}{yen sign}%
+\UnicodeMathSymbol{"000A7}{\mathsection }{\mathord}{section symbol}%
+\UnicodeMathSymbol{"000AC}{\neg }{\mathord}{/neg /lnot not sign}%
+\UnicodeMathSymbol{"000B1}{\pm }{\mathbin}{plus-or-minus sign}%
+\UnicodeMathSymbol{"000B6}{\mathparagraph }{\mathord}{paragraph symbol}%
+\UnicodeMathSymbol{"000B7}{\cdotp }{\mathbin}{/centerdot b: middle dot}%
+\UnicodeMathSymbol{"000D7}{\times }{\mathbin}{multiply sign}%
+\UnicodeMathSymbol{"000F0}{\matheth }{\mathalpha}{eth}%
+\UnicodeMathSymbol{"000F7}{\div }{\mathbin}{divide sign}%
+\UnicodeMathSymbol{"001B5}{\Zbar }{\mathord}{impedance (latin capital letter z with stroke)}%
+\UnicodeMathSymbol{"00300}{\grave }{\mathaccent}{grave accent}%
+\UnicodeMathSymbol{"00301}{\acute }{\mathaccent}{acute accent}%
+\UnicodeMathSymbol{"00302}{\hat }{\mathaccent}{circumflex accent}%
+\UnicodeMathSymbol{"00302}{\widehat }{\mathaccentwide}{circumflex accent}%
+\UnicodeMathSymbol{"00303}{\tilde }{\mathaccent}{tilde}%
+\UnicodeMathSymbol{"00303}{\widetilde }{\mathaccentwide}{tilde}%
+\UnicodeMathSymbol{"00304}{\bar }{\mathaccent}{macron}%
+\UnicodeMathSymbol{"00305}{\overbar }{\mathaccent}{overbar embellishment}%
+\UnicodeMathSymbol{"00305}{\wideoverbar }{\mathaccentwide}{stretchy overbar embellishment}%
+\UnicodeMathSymbol{"00306}{\breve }{\mathaccent}{breve}%
+\UnicodeMathSymbol{"00306}{\widebreve }{\mathaccentwide}{stretchy breve}%
+\UnicodeMathSymbol{"00307}{\dot }{\mathaccent}{dot above}%
+\UnicodeMathSymbol{"00308}{\ddot }{\mathaccent}{dieresis}%
+\UnicodeMathSymbol{"00309}{\ovhook }{\mathaccent}{combining hook above}%
+\UnicodeMathSymbol{"0030A}{\ocirc }{\mathaccent}{ring}%
+\UnicodeMathSymbol{"0030C}{\check }{\mathaccent}{caron}%
+\UnicodeMathSymbol{"0030C}{\widecheck }{\mathaccentwide}{stretchy caron}%
+\UnicodeMathSymbol{"00310}{\candra }{\mathaccent}{candrabindu (non-spacing)}%
+\UnicodeMathSymbol{"00312}{\oturnedcomma }{\mathaccent}{combining turned comma above}%
+\UnicodeMathSymbol{"00315}{\ocommatopright }{\mathaccent}{combining comma above right}%
+\UnicodeMathSymbol{"0031A}{\droang }{\mathaccent}{left angle above (non-spacing)}%
+\UnicodeMathSymbol{"00330}{\wideutilde }{\mathbotaccentwide}{under tilde accent (multiple characters and non-spacing)}%
+\UnicodeMathSymbol{"00332}{\mathunderbar }{\mathbotaccentwide}{combining low line}%
+\UnicodeMathSymbol{"00338}{\notaccent }{\mathaccentoverlay}{combining long solidus overlay}%
+\UnicodeMathSymbol{"0034D}{\underleftrightarrow }{\mathbotaccentwide}{underleftrightarrow accent}%
+\UnicodeMathSymbol{"00391}{\mupAlpha }{\mathalpha}{capital alpha, greek}%
+\UnicodeMathSymbol{"00392}{\mupBeta }{\mathalpha}{capital beta, greek}%
+\UnicodeMathSymbol{"00393}{\mupGamma }{\mathalpha}{capital gamma, greek}%
+\UnicodeMathSymbol{"00394}{\mupDelta }{\mathalpha}{capital delta, greek}%
+\UnicodeMathSymbol{"00395}{\mupEpsilon }{\mathalpha}{capital epsilon, greek}%
+\UnicodeMathSymbol{"00396}{\mupZeta }{\mathalpha}{capital zeta, greek}%
+\UnicodeMathSymbol{"00397}{\mupEta }{\mathalpha}{capital eta, greek}%
+\UnicodeMathSymbol{"00398}{\mupTheta }{\mathalpha}{capital theta, greek}%
+\UnicodeMathSymbol{"00399}{\mupIota }{\mathalpha}{capital iota, greek}%
+\UnicodeMathSymbol{"0039A}{\mupKappa }{\mathalpha}{capital kappa, greek}%
+\UnicodeMathSymbol{"0039B}{\mupLambda }{\mathalpha}{capital lambda, greek}%
+\UnicodeMathSymbol{"0039C}{\mupMu }{\mathalpha}{capital mu, greek}%
+\UnicodeMathSymbol{"0039D}{\mupNu }{\mathalpha}{capital nu, greek}%
+\UnicodeMathSymbol{"0039E}{\mupXi }{\mathalpha}{capital xi, greek}%
+\UnicodeMathSymbol{"0039F}{\mupOmicron }{\mathalpha}{capital omicron, greek}%
+\UnicodeMathSymbol{"003A0}{\mupPi }{\mathalpha}{capital pi, greek}%
+\UnicodeMathSymbol{"003A1}{\mupRho }{\mathalpha}{capital rho, greek}%
+\UnicodeMathSymbol{"003A3}{\mupSigma }{\mathalpha}{capital sigma, greek}%
+\UnicodeMathSymbol{"003A4}{\mupTau }{\mathalpha}{capital tau, greek}%
+\UnicodeMathSymbol{"003A5}{\mupUpsilon }{\mathalpha}{capital upsilon, greek}%
+\UnicodeMathSymbol{"003A6}{\mupPhi }{\mathalpha}{capital phi, greek}%
+\UnicodeMathSymbol{"003A7}{\mupChi }{\mathalpha}{capital chi, greek}%
+\UnicodeMathSymbol{"003A8}{\mupPsi }{\mathalpha}{capital psi, greek}%
+\UnicodeMathSymbol{"003A9}{\mupOmega }{\mathalpha}{capital omega, greek}%
+\UnicodeMathSymbol{"003B1}{\mupalpha }{\mathalpha}{small alpha, greek}%
+\UnicodeMathSymbol{"003B2}{\mupbeta }{\mathalpha}{small beta, greek}%
+\UnicodeMathSymbol{"003B3}{\mupgamma }{\mathalpha}{small gamma, greek}%
+\UnicodeMathSymbol{"003B4}{\mupdelta }{\mathalpha}{small delta, greek}%
+\UnicodeMathSymbol{"003B5}{\mupvarepsilon }{\mathalpha}{rounded small varepsilon, greek}%
+\UnicodeMathSymbol{"003B6}{\mupzeta }{\mathalpha}{small zeta, greek}%
+\UnicodeMathSymbol{"003B7}{\mupeta }{\mathalpha}{small eta, greek}%
+\UnicodeMathSymbol{"003B8}{\muptheta }{\mathalpha}{straight theta, small theta, greek}%
+\UnicodeMathSymbol{"003B9}{\mupiota }{\mathalpha}{small iota, greek}%
+\UnicodeMathSymbol{"003BA}{\mupkappa }{\mathalpha}{small kappa, greek}%
+\UnicodeMathSymbol{"003BB}{\muplambda }{\mathalpha}{small lambda, greek}%
+\UnicodeMathSymbol{"003BC}{\mupmu }{\mathalpha}{small mu, greek}%
+\UnicodeMathSymbol{"003BD}{\mupnu }{\mathalpha}{small nu, greek}%
+\UnicodeMathSymbol{"003BE}{\mupxi }{\mathalpha}{small xi, greek}%
+\UnicodeMathSymbol{"003BF}{\mupomicron }{\mathalpha}{small omicron, greek}%
+\UnicodeMathSymbol{"003C0}{\muppi }{\mathalpha}{small pi, greek}%
+\UnicodeMathSymbol{"003C1}{\muprho }{\mathalpha}{small rho, greek}%
+\UnicodeMathSymbol{"003C2}{\mupvarsigma }{\mathalpha}{terminal sigma, greek}%
+\UnicodeMathSymbol{"003C3}{\mupsigma }{\mathalpha}{small sigma, greek}%
+\UnicodeMathSymbol{"003C4}{\muptau }{\mathalpha}{small tau, greek}%
+\UnicodeMathSymbol{"003C5}{\mupupsilon }{\mathalpha}{small upsilon, greek}%
+\UnicodeMathSymbol{"003C6}{\mupvarphi }{\mathalpha}{curly or open small phi, greek}%
+\UnicodeMathSymbol{"003C7}{\mupchi }{\mathalpha}{small chi, greek}%
+\UnicodeMathSymbol{"003C8}{\muppsi }{\mathalpha}{small psi, greek}%
+\UnicodeMathSymbol{"003C9}{\mupomega }{\mathalpha}{small omega, greek}%
+\UnicodeMathSymbol{"003D1}{\mupvartheta }{\mathalpha}{/vartheta - curly or open theta}%
+\UnicodeMathSymbol{"003D5}{\mupphi }{\mathalpha}{/straightphi - small phi, greek}%
+\UnicodeMathSymbol{"003D6}{\mupvarpi }{\mathalpha}{rounded small pi (pomega), greek}%
+\UnicodeMathSymbol{"003DC}{\upDigamma }{\mathalpha}{capital digamma}%
+\UnicodeMathSymbol{"003DD}{\updigamma }{\mathalpha}{old greek small letter digamma}%
+\UnicodeMathSymbol{"003F0}{\mupvarkappa }{\mathalpha}{rounded small kappa, greek}%
+\UnicodeMathSymbol{"003F1}{\mupvarrho }{\mathalpha}{rounded small rho, greek}%
+\UnicodeMathSymbol{"003F4}{\mupvarTheta }{\mathalpha}{greek capital theta symbol}%
+\UnicodeMathSymbol{"003F5}{\mupepsilon }{\mathalpha}{greek lunate varepsilon symbol}%
+\UnicodeMathSymbol{"003F6}{\upbackepsilon }{\mathord}{greek reversed lunate epsilon symbol}%
+\UnicodeMathSymbol{"02010}{\mathhyphen }{\mathalpha}{hyphen}%
+\UnicodeMathSymbol{"02015}{\horizbar }{\mathord}{horizontal bar}%
+\UnicodeMathSymbol{"02016}{\Vert }{\mathfence}{double vertical bar}%
+\UnicodeMathSymbol{"02017}{\twolowline }{\mathord}{double low line (spacing)}%
+\UnicodeMathSymbol{"02020}{\dagger }{\mathbin}{dagger relation}%
+\UnicodeMathSymbol{"02021}{\ddagger }{\mathbin}{double dagger relation}%
+\UnicodeMathSymbol{"02022}{\smblkcircle }{\mathbin}{/bullet b: round bullet, filled}%
+\UnicodeMathSymbol{"02025}{\enleadertwodots }{\mathord}{double baseline dot (en leader)}%
+\UnicodeMathSymbol{"02026}{\unicodeellipsis }{\mathord}{ellipsis (horizontal)}%
+\UnicodeMathSymbol{"02032}{\prime }{\mathord}{prime or minute, not superscripted}%
+\UnicodeMathSymbol{"02033}{\dprime }{\mathord}{double prime or second, not superscripted}%
+\UnicodeMathSymbol{"02034}{\trprime }{\mathord}{triple prime (not superscripted)}%
+\UnicodeMathSymbol{"02035}{\backprime }{\mathord}{reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02036}{\backdprime }{\mathord}{double reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02037}{\backtrprime }{\mathord}{triple reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02038}{\caretinsert }{\mathord}{caret (insertion mark)}%
+\UnicodeMathSymbol{"0203C}{\Exclam }{\mathord}{double exclamation mark}%
+\UnicodeMathSymbol{"02040}{\tieconcat }{\mathbin}{character tie, z notation sequence concatenation}%
+\UnicodeMathSymbol{"02043}{\hyphenbullet }{\mathord}{rectangle, filled (hyphen bullet)}%
+\UnicodeMathSymbol{"02044}{\fracslash }{\mathbin}{fraction slash}%
+\UnicodeMathSymbol{"02047}{\Question }{\mathord}{double question mark}%
+\UnicodeMathSymbol{"02050}{\closure }{\mathrel}{close up}%
+\UnicodeMathSymbol{"02057}{\qprime }{\mathord}{quadruple prime, not superscripted}%
+\UnicodeMathSymbol{"020AC}{\euro }{\mathord}{euro sign}%
+\UnicodeMathSymbol{"020D0}{\leftharpoonaccent }{\mathaccent}{combining left harpoon above}%
+\UnicodeMathSymbol{"020D0}{\overleftharpoon }{\mathaccentwide}{combining left harpoon above}%
+\UnicodeMathSymbol{"020D1}{\rightharpoonaccent }{\mathaccent}{combining right harpoon above}%
+\UnicodeMathSymbol{"020D1}{\overrightharpoon }{\mathaccentwide}{combining right harpoon above}%
+\UnicodeMathSymbol{"020D2}{\vertoverlay }{\mathaccent}{combining long vertical line overlay}%
+\UnicodeMathSymbol{"020D6}{\overleftarrow }{\mathaccentwide}{combining left arrow above}%
+\UnicodeMathSymbol{"020D7}{\overrightarrow }{\mathaccentwide}{combining left arrow above}%
+\UnicodeMathSymbol{"020D7}{\vec }{\mathaccent}{combining right arrow above}%
+\UnicodeMathSymbol{"020DB}{\dddot }{\mathaccent}{combining three dots above}%
+\UnicodeMathSymbol{"020DC}{\ddddot }{\mathaccent}{combining four dots above}%
+\UnicodeMathSymbol{"020DD}{\enclosecircle }{\mathord}{combining enclosing circle}%
+\UnicodeMathSymbol{"020DE}{\enclosesquare }{\mathord}{combining enclosing square}%
+\UnicodeMathSymbol{"020DF}{\enclosediamond }{\mathord}{combining enclosing diamond}%
+\UnicodeMathSymbol{"020E1}{\overleftrightarrow }{\mathaccentwide}{combining left right arrow above}%
+\UnicodeMathSymbol{"020E4}{\enclosetriangle }{\mathord}{combining enclosing upward pointing triangle}%
+\UnicodeMathSymbol{"020E7}{\annuity }{\mathaccent}{combining annuity symbol}%
+\UnicodeMathSymbol{"020E8}{\threeunderdot }{\mathbotaccent}{combining triple underdot}%
+\UnicodeMathSymbol{"020E9}{\widebridgeabove }{\mathaccent}{combining wide bridge above}%
+\UnicodeMathSymbol{"020EC}{\underrightharpoondown }{\mathbotaccentwide}{combining rightwards harpoon with barb downwards}%
+\UnicodeMathSymbol{"020ED}{\underleftharpoondown }{\mathbotaccentwide}{combining leftwards harpoon with barb downwards}%
+\UnicodeMathSymbol{"020EE}{\underleftarrow }{\mathbotaccentwide}{combining left arrow below}%
+\UnicodeMathSymbol{"020EF}{\underrightarrow }{\mathbotaccentwide}{combining right arrow below}%
+\UnicodeMathSymbol{"020F0}{\asteraccent }{\mathaccent}{combining asterisk above}%
+\UnicodeMathSymbol{"02102}{\BbbC }{\mathalpha}{/bbb c, open face c}%
+\UnicodeMathSymbol{"02107}{\Eulerconst }{\mathord}{euler constant}%
+\UnicodeMathSymbol{"0210A}{\mscrg }{\mathalpha}{/scr g, script letter g}%
+\UnicodeMathSymbol{"0210B}{\mscrH }{\mathalpha}{hamiltonian (script capital h)}%
+\UnicodeMathSymbol{"0210C}{\mfrakH }{\mathalpha}{/frak h, upper case h}%
+\UnicodeMathSymbol{"0210D}{\BbbH }{\mathalpha}{/bbb h, open face h}%
+\UnicodeMathSymbol{"0210E}{\Planckconst }{\mathord}{planck constant}%
+\UnicodeMathSymbol{"0210F}{\hslash }{\mathalpha}{/hslash - variant planck's over 2pi}%
+\UnicodeMathSymbol{"02110}{\mscrI }{\mathalpha}{/scr i, script letter i}%
+\UnicodeMathSymbol{"02111}{\Im }{\mathalpha}{imaginary part}%
+\UnicodeMathSymbol{"02112}{\mscrL }{\mathalpha}{lagrangian (script capital l)}%
+\UnicodeMathSymbol{"02113}{\ell }{\mathalpha}{cursive small l}%
+\UnicodeMathSymbol{"02115}{\BbbN }{\mathalpha}{/bbb n, open face n}%
+\UnicodeMathSymbol{"02118}{\wp }{\mathalpha}{weierstrass p}%
+\UnicodeMathSymbol{"02119}{\BbbP }{\mathalpha}{/bbb p, open face p}%
+\UnicodeMathSymbol{"0211A}{\BbbQ }{\mathalpha}{/bbb q, open face q}%
+\UnicodeMathSymbol{"0211B}{\mscrR }{\mathalpha}{/scr r, script letter r}%
+\UnicodeMathSymbol{"0211C}{\Re }{\mathalpha}{real part}%
+\UnicodeMathSymbol{"0211D}{\BbbR }{\mathalpha}{/bbb r, open face r}%
+\UnicodeMathSymbol{"02124}{\BbbZ }{\mathalpha}{/bbb z, open face z}%
+\UnicodeMathSymbol{"02127}{\mho }{\mathord}{conductance}%
+\UnicodeMathSymbol{"02128}{\mfrakZ }{\mathalpha}{/frak z, upper case z}%
+\UnicodeMathSymbol{"02129}{\turnediota }{\mathalpha}{turned iota}%
+\UnicodeMathSymbol{"0212B}{\Angstrom }{\mathalpha}{angstrom capital a, ring}%
+\UnicodeMathSymbol{"0212C}{\mscrB }{\mathalpha}{bernoulli function (script capital b)}%
+\UnicodeMathSymbol{"0212D}{\mfrakC }{\mathalpha}{black-letter capital c}%
+\UnicodeMathSymbol{"0212F}{\mscre }{\mathalpha}{/scr e, script letter e}%
+\UnicodeMathSymbol{"02130}{\mscrE }{\mathalpha}{/scr e, script letter e}%
+\UnicodeMathSymbol{"02131}{\mscrF }{\mathalpha}{/scr f, script letter f}%
+\UnicodeMathSymbol{"02132}{\Finv }{\mathord}{turned capital f}%
+\UnicodeMathSymbol{"02133}{\mscrM }{\mathalpha}{physics m-matrix (script capital m)}%
+\UnicodeMathSymbol{"02134}{\mscro }{\mathalpha}{order of (script small o)}%
+\UnicodeMathSymbol{"02135}{\aleph }{\mathalpha}{aleph, hebrew}%
+\UnicodeMathSymbol{"02136}{\beth }{\mathalpha}{beth, hebrew}%
+\UnicodeMathSymbol{"02137}{\gimel }{\mathalpha}{gimel, hebrew}%
+\UnicodeMathSymbol{"02138}{\daleth }{\mathalpha}{daleth, hebrew}%
+\UnicodeMathSymbol{"0213C}{\Bbbpi }{\mathord}{double-struck small pi}%
+\UnicodeMathSymbol{"0213D}{\Bbbgamma }{\mathalpha}{double-struck small gamma}%
+\UnicodeMathSymbol{"0213E}{\BbbGamma }{\mathalpha}{double-struck capital gamma}%
+\UnicodeMathSymbol{"0213F}{\BbbPi }{\mathalpha}{double-struck capital pi}%
+\UnicodeMathSymbol{"02140}{\Bbbsum }{\mathop}{double-struck n-ary summation}%
+\UnicodeMathSymbol{"02141}{\Game }{\mathord}{turned sans-serif capital g}%
+\UnicodeMathSymbol{"02142}{\sansLturned }{\mathord}{turned sans-serif capital l}%
+\UnicodeMathSymbol{"02143}{\sansLmirrored }{\mathord}{reversed sans-serif capital l}%
+\UnicodeMathSymbol{"02144}{\Yup }{\mathord}{turned sans-serif capital y}%
+\UnicodeMathSymbol{"02145}{\mitBbbD }{\mathord}{double-struck italic capital d}%
+\UnicodeMathSymbol{"02146}{\mitBbbd }{\mathord}{double-struck italic small d}%
+\UnicodeMathSymbol{"02147}{\mitBbbe }{\mathord}{double-struck italic small e}%
+\UnicodeMathSymbol{"02148}{\mitBbbi }{\mathord}{double-struck italic small i}%
+\UnicodeMathSymbol{"02149}{\mitBbbj }{\mathord}{double-struck italic small j}%
+\UnicodeMathSymbol{"0214A}{\PropertyLine }{\mathord}{property line}%
+\UnicodeMathSymbol{"0214B}{\upand }{\mathbin}{turned ampersand}%
+\UnicodeMathSymbol{"02190}{\leftarrow }{\mathrel}{/leftarrow /gets a: leftward arrow}%
+\UnicodeMathSymbol{"02191}{\uparrow }{\mathrel}{upward arrow}%
+\UnicodeMathSymbol{"02192}{\rightarrow }{\mathrel}{/rightarrow /to a: rightward arrow}%
+\UnicodeMathSymbol{"02193}{\downarrow }{\mathrel}{downward arrow}%
+\UnicodeMathSymbol{"02194}{\leftrightarrow }{\mathrel}{left and right arrow}%
+\UnicodeMathSymbol{"02195}{\updownarrow }{\mathrel}{up and down arrow}%
+\UnicodeMathSymbol{"02196}{\nwarrow }{\mathrel}{nw pointing arrow}%
+\UnicodeMathSymbol{"02197}{\nearrow }{\mathrel}{ne pointing arrow}%
+\UnicodeMathSymbol{"02198}{\searrow }{\mathrel}{se pointing arrow}%
+\UnicodeMathSymbol{"02199}{\swarrow }{\mathrel}{sw pointing arrow}%
+\UnicodeMathSymbol{"0219A}{\nleftarrow }{\mathrel}{not left arrow}%
+\UnicodeMathSymbol{"0219B}{\nrightarrow }{\mathrel}{not right arrow}%
+\UnicodeMathSymbol{"0219C}{\leftwavearrow }{\mathrel}{left arrow-wavy}%
+\UnicodeMathSymbol{"0219D}{\rightwavearrow }{\mathrel}{right arrow-wavy}%
+\UnicodeMathSymbol{"0219E}{\twoheadleftarrow }{\mathrel}{left two-headed arrow}%
+\UnicodeMathSymbol{"0219F}{\twoheaduparrow }{\mathrel}{up two-headed arrow}%
+\UnicodeMathSymbol{"021A0}{\twoheadrightarrow }{\mathrel}{right two-headed arrow}%
+\UnicodeMathSymbol{"021A1}{\twoheaddownarrow }{\mathrel}{down two-headed arrow}%
+\UnicodeMathSymbol{"021A2}{\leftarrowtail }{\mathrel}{left arrow-tailed}%
+\UnicodeMathSymbol{"021A3}{\rightarrowtail }{\mathrel}{right arrow-tailed}%
+\UnicodeMathSymbol{"021A4}{\mapsfrom }{\mathrel}{maps to, leftward}%
+\UnicodeMathSymbol{"021A5}{\mapsup }{\mathrel}{maps to, upward}%
+\UnicodeMathSymbol{"021A6}{\mapsto }{\mathrel}{maps to, rightward}%
+\UnicodeMathSymbol{"021A7}{\mapsdown }{\mathrel}{maps to, downward}%
+\UnicodeMathSymbol{"021A8}{\updownarrowbar }{\mathord}{up down arrow with base (perpendicular)}%
+\UnicodeMathSymbol{"021A9}{\hookleftarrow }{\mathrel}{left arrow-hooked}%
+\UnicodeMathSymbol{"021AA}{\hookrightarrow }{\mathrel}{right arrow-hooked}%
+\UnicodeMathSymbol{"021AB}{\looparrowleft }{\mathrel}{left arrow-looped}%
+\UnicodeMathSymbol{"021AC}{\looparrowright }{\mathrel}{right arrow-looped}%
+\UnicodeMathSymbol{"021AD}{\leftrightsquigarrow }{\mathrel}{left and right arr-wavy}%
+\UnicodeMathSymbol{"021AE}{\nleftrightarrow }{\mathrel}{not left and right arrow}%
+\UnicodeMathSymbol{"021AF}{\downzigzagarrow }{\mathrel}{downwards zigzag arrow}%
+\UnicodeMathSymbol{"021B0}{\Lsh }{\mathrel}{/lsh a:}%
+\UnicodeMathSymbol{"021B1}{\Rsh }{\mathrel}{/rsh a:}%
+\UnicodeMathSymbol{"021B2}{\Ldsh }{\mathrel}{left down angled arrow}%
+\UnicodeMathSymbol{"021B3}{\Rdsh }{\mathrel}{right down angled arrow}%
+\UnicodeMathSymbol{"021B4}{\linefeed }{\mathord}{rightwards arrow with corner downwards}%
+\UnicodeMathSymbol{"021B5}{\carriagereturn }{\mathord}{downwards arrow with corner leftward = carriage return}%
+\UnicodeMathSymbol{"021B6}{\curvearrowleft }{\mathrel}{left curved arrow}%
+\UnicodeMathSymbol{"021B7}{\curvearrowright }{\mathrel}{right curved arrow}%
+\UnicodeMathSymbol{"021B8}{\barovernorthwestarrow }{\mathord}{north west arrow to long bar}%
+\UnicodeMathSymbol{"021B9}{\barleftarrowrightarrowbar}{\mathord}{leftwards arrow to bar over rightwards arrow to bar}%
+\UnicodeMathSymbol{"021BA}{\acwopencirclearrow }{\mathord}{anticlockwise open circle arrow}%
+\UnicodeMathSymbol{"021BB}{\cwopencirclearrow }{\mathord}{clockwise open circle arrow}%
+\UnicodeMathSymbol{"021BC}{\leftharpoonup }{\mathrel}{left harpoon-up}%
+\UnicodeMathSymbol{"021BD}{\leftharpoondown }{\mathrel}{left harpoon-down}%
+\UnicodeMathSymbol{"021BE}{\upharpoonright }{\mathrel}{/upharpoonright /restriction a: up harpoon-right}%
+\UnicodeMathSymbol{"021BF}{\upharpoonleft }{\mathrel}{up harpoon-left}%
+\UnicodeMathSymbol{"021C0}{\rightharpoonup }{\mathrel}{right harpoon-up}%
+\UnicodeMathSymbol{"021C1}{\rightharpoondown }{\mathrel}{right harpoon-down}%
+\UnicodeMathSymbol{"021C2}{\downharpoonright }{\mathrel}{down harpoon-right}%
+\UnicodeMathSymbol{"021C3}{\downharpoonleft }{\mathrel}{down harpoon-left}%
+\UnicodeMathSymbol{"021C4}{\rightleftarrows }{\mathrel}{right arrow over left arrow}%
+\UnicodeMathSymbol{"021C5}{\updownarrows }{\mathrel}{up arrow, down arrow}%
+\UnicodeMathSymbol{"021C6}{\leftrightarrows }{\mathrel}{left arrow over right arrow}%
+\UnicodeMathSymbol{"021C7}{\leftleftarrows }{\mathrel}{two left arrows}%
+\UnicodeMathSymbol{"021C8}{\upuparrows }{\mathrel}{two up arrows}%
+\UnicodeMathSymbol{"021C9}{\rightrightarrows }{\mathrel}{two right arrows}%
+\UnicodeMathSymbol{"021CA}{\downdownarrows }{\mathrel}{two down arrows}%
+\UnicodeMathSymbol{"021CB}{\leftrightharpoons }{\mathrel}{left harpoon over right}%
+\UnicodeMathSymbol{"021CC}{\rightleftharpoons }{\mathrel}{right harpoon over left}%
+\UnicodeMathSymbol{"021CD}{\nLeftarrow }{\mathrel}{not implied by}%
+\UnicodeMathSymbol{"021CE}{\nLeftrightarrow }{\mathrel}{not left and right double arrows}%
+\UnicodeMathSymbol{"021CF}{\nRightarrow }{\mathrel}{not implies}%
+\UnicodeMathSymbol{"021D0}{\Leftarrow }{\mathrel}{is implied by}%
+\UnicodeMathSymbol{"021D1}{\Uparrow }{\mathrel}{up double arrow}%
+\UnicodeMathSymbol{"021D2}{\Rightarrow }{\mathrel}{implies}%
+\UnicodeMathSymbol{"021D3}{\Downarrow }{\mathrel}{down double arrow}%
+\UnicodeMathSymbol{"021D4}{\Leftrightarrow }{\mathrel}{left and right double arrow}%
+\UnicodeMathSymbol{"021D5}{\Updownarrow }{\mathrel}{up and down double arrow}%
+\UnicodeMathSymbol{"021D6}{\Nwarrow }{\mathrel}{nw pointing double arrow}%
+\UnicodeMathSymbol{"021D7}{\Nearrow }{\mathrel}{ne pointing double arrow}%
+\UnicodeMathSymbol{"021D8}{\Searrow }{\mathrel}{se pointing double arrow}%
+\UnicodeMathSymbol{"021D9}{\Swarrow }{\mathrel}{sw pointing double arrow}%
+\UnicodeMathSymbol{"021DA}{\Lleftarrow }{\mathrel}{left triple arrow}%
+\UnicodeMathSymbol{"021DB}{\Rrightarrow }{\mathrel}{right triple arrow}%
+\UnicodeMathSymbol{"021DC}{\leftsquigarrow }{\mathrel}{leftwards squiggle arrow}%
+\UnicodeMathSymbol{"021DD}{\rightsquigarrow }{\mathrel}{rightwards squiggle arrow}%
+\UnicodeMathSymbol{"021DE}{\nHuparrow }{\mathord}{upwards arrow with double stroke}%
+\UnicodeMathSymbol{"021DF}{\nHdownarrow }{\mathord}{downwards arrow with double stroke}%
+\UnicodeMathSymbol{"021E0}{\leftdasharrow }{\mathord}{leftwards dashed arrow}%
+\UnicodeMathSymbol{"021E1}{\updasharrow }{\mathord}{upwards dashed arrow}%
+\UnicodeMathSymbol{"021E2}{\rightdasharrow }{\mathord}{rightwards dashed arrow}%
+\UnicodeMathSymbol{"021E3}{\downdasharrow }{\mathord}{downwards dashed arrow}%
+\UnicodeMathSymbol{"021E4}{\barleftarrow }{\mathrel}{leftwards arrow to bar}%
+\UnicodeMathSymbol{"021E5}{\rightarrowbar }{\mathrel}{rightwards arrow to bar}%
+\UnicodeMathSymbol{"021E6}{\leftwhitearrow }{\mathord}{leftwards white arrow}%
+\UnicodeMathSymbol{"021E7}{\upwhitearrow }{\mathord}{upwards white arrow}%
+\UnicodeMathSymbol{"021E8}{\rightwhitearrow }{\mathord}{rightwards white arrow}%
+\UnicodeMathSymbol{"021E9}{\downwhitearrow }{\mathord}{downwards white arrow}%
+\UnicodeMathSymbol{"021EA}{\whitearrowupfrombar }{\mathord}{upwards white arrow from bar}%
+\UnicodeMathSymbol{"021F4}{\circleonrightarrow }{\mathrel}{right arrow with small circle}%
+\UnicodeMathSymbol{"021F5}{\downuparrows }{\mathrel}{downwards arrow leftwards of upwards arrow}%
+\UnicodeMathSymbol{"021F6}{\rightthreearrows }{\mathrel}{three rightwards arrows}%
+\UnicodeMathSymbol{"021F7}{\nvleftarrow }{\mathrel}{leftwards arrow with vertical stroke}%
+\UnicodeMathSymbol{"021F8}{\nvrightarrow }{\mathrel}{rightwards arrow with vertical stroke}%
+\UnicodeMathSymbol{"021F9}{\nvleftrightarrow }{\mathrel}{left right arrow with vertical stroke}%
+\UnicodeMathSymbol{"021FA}{\nVleftarrow }{\mathrel}{leftwards arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FB}{\nVrightarrow }{\mathrel}{rightwards arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FC}{\nVleftrightarrow }{\mathrel}{left right arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FD}{\leftarrowtriangle }{\mathrel}{leftwards open-headed arrow}%
+\UnicodeMathSymbol{"021FE}{\rightarrowtriangle }{\mathrel}{rightwards open-headed arrow}%
+\UnicodeMathSymbol{"021FF}{\leftrightarrowtriangle }{\mathrel}{left right open-headed arrow}%
+\UnicodeMathSymbol{"02200}{\forall }{\mathord}{for all}%
+\UnicodeMathSymbol{"02201}{\complement }{\mathord}{complement sign}%
+\UnicodeMathSymbol{"02202}{\partial }{\mathalpha}{partial differential}%
+\UnicodeMathSymbol{"02203}{\exists }{\mathord}{at least one exists}%
+\UnicodeMathSymbol{"02204}{\nexists }{\mathord}{negated exists}%
+\UnicodeMathSymbol{"02205}{\varnothing }{\mathord}{circle, slash}%
+\UnicodeMathSymbol{"02206}{\increment }{\mathord}{laplacian (delta; nabla\string^2)}%
+\UnicodeMathSymbol{"02207}{\nabla }{\mathalpha}{nabla, del, hamilton operator}%
+\UnicodeMathSymbol{"02208}{\in }{\mathrel}{set membership, variant}%
+\UnicodeMathSymbol{"02209}{\notin }{\mathrel}{negated set membership}%
+\UnicodeMathSymbol{"0220A}{\smallin }{\mathrel}{set membership (small set membership)}%
+\UnicodeMathSymbol{"0220B}{\ni }{\mathrel}{contains, variant}%
+\UnicodeMathSymbol{"0220C}{\nni }{\mathrel}{negated contains, variant}%
+\UnicodeMathSymbol{"0220D}{\smallni }{\mathrel}{/ni /owns r: contains (small contains as member)}%
+\UnicodeMathSymbol{"0220E}{\QED }{\mathord}{end of proof}%
+\UnicodeMathSymbol{"0220F}{\prod }{\mathop}{product operator}%
+\UnicodeMathSymbol{"02210}{\coprod }{\mathop}{coproduct operator}%
+\UnicodeMathSymbol{"02211}{\sum }{\mathop}{summation operator}%
+\UnicodeMathSymbol{"02212}{\minus }{\mathbin}{minus sign}%
+\UnicodeMathSymbol{"02213}{\mp }{\mathbin}{minus-or-plus sign}%
+\UnicodeMathSymbol{"02214}{\dotplus }{\mathbin}{plus sign, dot above}%
+\UnicodeMathSymbol{"02215}{\divslash }{\mathbin}{division slash}%
+\UnicodeMathSymbol{"02216}{\smallsetminus }{\mathbin}{small set minus (cf. reverse solidus)}%
+\UnicodeMathSymbol{"02217}{\ast }{\mathbin}{centered asterisk}%
+\UnicodeMathSymbol{"02218}{\vysmwhtcircle }{\mathbin}{composite function (small circle)}%
+\UnicodeMathSymbol{"02219}{\vysmblkcircle }{\mathbin}{bullet operator}%
+\UnicodeMathSymbol{"0221A}{\sqrt }{\mathopen}{radical}%
+\UnicodeMathSymbol{"0221A}{\surd }{\mathord}{radical}%
+\UnicodeMathSymbol{"0221B}{\cuberoot }{\mathopen}{cube root}%
+\UnicodeMathSymbol{"0221C}{\fourthroot }{\mathopen}{fourth root}%
+\UnicodeMathSymbol{"0221D}{\propto }{\mathrel}{is proportional to}%
+\UnicodeMathSymbol{"0221E}{\infty }{\mathord}{infinity}%
+\UnicodeMathSymbol{"0221F}{\rightangle }{\mathord}{right (90 degree) angle}%
+\UnicodeMathSymbol{"02220}{\angle }{\mathord}{angle}%
+\UnicodeMathSymbol{"02221}{\measuredangle }{\mathord}{angle-measured}%
+\UnicodeMathSymbol{"02222}{\sphericalangle }{\mathord}{angle-spherical}%
+\UnicodeMathSymbol{"02223}{\mid }{\mathrel}{/mid r:}%
+\UnicodeMathSymbol{"02224}{\nmid }{\mathrel}{negated mid}%
+\UnicodeMathSymbol{"02225}{\parallel }{\mathrel}{parallel}%
+\UnicodeMathSymbol{"02226}{\nparallel }{\mathrel}{not parallel}%
+\UnicodeMathSymbol{"02227}{\wedge }{\mathbin}{/wedge /land b: logical and}%
+\UnicodeMathSymbol{"02228}{\vee }{\mathbin}{/vee /lor b: logical or}%
+\UnicodeMathSymbol{"02229}{\cap }{\mathbin}{intersection}%
+\UnicodeMathSymbol{"0222A}{\cup }{\mathbin}{union or logical sum}%
+\UnicodeMathSymbol{"0222B}{\int }{\mathop}{integral operator}%
+\UnicodeMathSymbol{"0222C}{\iint }{\mathop}{double integral operator}%
+\UnicodeMathSymbol{"0222D}{\iiint }{\mathop}{triple integral operator}%
+\UnicodeMathSymbol{"0222E}{\oint }{\mathop}{contour integral operator}%
+\UnicodeMathSymbol{"0222F}{\oiint }{\mathop}{double contour integral operator}%
+\UnicodeMathSymbol{"02230}{\oiiint }{\mathop}{triple contour integral operator}%
+\UnicodeMathSymbol{"02231}{\intclockwise }{\mathop}{clockwise integral}%
+\UnicodeMathSymbol{"02232}{\varointclockwise }{\mathop}{contour integral, clockwise}%
+\UnicodeMathSymbol{"02233}{\ointctrclockwise }{\mathop}{contour integral, anticlockwise}%
+\UnicodeMathSymbol{"02234}{\therefore }{\mathord}{therefore}%
+\UnicodeMathSymbol{"02235}{\because }{\mathord}{because}%
+\UnicodeMathSymbol{"02236}{\mathratio }{\mathrel}{ratio}%
+\UnicodeMathSymbol{"02237}{\Colon }{\mathrel}{two colons}%
+\UnicodeMathSymbol{"02238}{\dotminus }{\mathbin}{minus sign, dot above}%
+\UnicodeMathSymbol{"02239}{\dashcolon }{\mathrel}{excess (-:)}%
+\UnicodeMathSymbol{"0223A}{\dotsminusdots }{\mathrel}{minus with four dots, geometric properties}%
+\UnicodeMathSymbol{"0223B}{\kernelcontraction }{\mathrel}{homothetic}%
+\UnicodeMathSymbol{"0223C}{\sim }{\mathrel}{similar}%
+\UnicodeMathSymbol{"0223D}{\backsim }{\mathrel}{reverse similar}%
+\UnicodeMathSymbol{"0223E}{\invlazys }{\mathbin}{most positive [inverted lazy s]}%
+\UnicodeMathSymbol{"0223F}{\sinewave }{\mathord}{sine wave}%
+\UnicodeMathSymbol{"02240}{\wr }{\mathbin}{wreath product}%
+\UnicodeMathSymbol{"02241}{\nsim }{\mathrel}{not similar}%
+\UnicodeMathSymbol{"02242}{\eqsim }{\mathrel}{equals, similar}%
+\UnicodeMathSymbol{"02243}{\simeq }{\mathrel}{similar, equals}%
+\UnicodeMathSymbol{"02244}{\nsime }{\mathrel}{not similar, equals}%
+\UnicodeMathSymbol{"02243}{\sime }{\mathrel}{similar, equals (alias)}%
+\UnicodeMathSymbol{"02244}{\nsimeq }{\mathrel}{not similar, equals (alias)}%
+\UnicodeMathSymbol{"02245}{\cong }{\mathrel}{congruent with}%
+\UnicodeMathSymbol{"02246}{\simneqq }{\mathrel}{similar, not equals [vert only for 9573 entity]}%
+\UnicodeMathSymbol{"02247}{\ncong }{\mathrel}{not congruent with}%
+\UnicodeMathSymbol{"02248}{\approx }{\mathrel}{approximate}%
+\UnicodeMathSymbol{"02249}{\napprox }{\mathrel}{not approximate}%
+\UnicodeMathSymbol{"0224A}{\approxeq }{\mathrel}{approximate, equals}%
+\UnicodeMathSymbol{"0224B}{\approxident }{\mathrel}{approximately identical to}%
+\UnicodeMathSymbol{"0224C}{\backcong }{\mathrel}{all equal to}%
+\UnicodeMathSymbol{"0224D}{\asymp }{\mathrel}{asymptotically equal to}%
+\UnicodeMathSymbol{"0224E}{\Bumpeq }{\mathrel}{bumpy equals}%
+\UnicodeMathSymbol{"0224F}{\bumpeq }{\mathrel}{bumpy equals, equals}%
+\UnicodeMathSymbol{"02250}{\doteq }{\mathrel}{equals, single dot above}%
+\UnicodeMathSymbol{"02251}{\Doteq }{\mathrel}{/doteqdot /doteq r: equals, even dots}%
+\UnicodeMathSymbol{"02252}{\fallingdotseq }{\mathrel}{equals, falling dots}%
+\UnicodeMathSymbol{"02253}{\risingdotseq }{\mathrel}{equals, rising dots}%
+\UnicodeMathSymbol{"02254}{\coloneq }{\mathrel}{colon, equals}%
+\UnicodeMathSymbol{"02255}{\eqcolon }{\mathrel}{equals, colon}%
+\UnicodeMathSymbol{"02256}{\eqcirc }{\mathrel}{circle on equals sign}%
+\UnicodeMathSymbol{"02257}{\circeq }{\mathrel}{circle, equals}%
+\UnicodeMathSymbol{"02258}{\arceq }{\mathrel}{arc, equals; corresponds to}%
+\UnicodeMathSymbol{"02259}{\wedgeq }{\mathrel}{corresponds to (wedge, equals)}%
+\UnicodeMathSymbol{"0225A}{\veeeq }{\mathrel}{logical or, equals}%
+\UnicodeMathSymbol{"0225B}{\stareq }{\mathrel}{star equals}%
+\UnicodeMathSymbol{"0225C}{\triangleq }{\mathrel}{triangle, equals}%
+\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}%
+\UnicodeMathSymbol{"0225E}{\measeq }{\mathrel}{measured by (m over equals)}%
+\UnicodeMathSymbol{"0225F}{\questeq }{\mathrel}{equal with questionmark}%
+\UnicodeMathSymbol{"02260}{\ne }{\mathrel}{/ne /neq r: not equal}%
+\UnicodeMathSymbol{"02261}{\equiv }{\mathrel}{identical with}%
+\UnicodeMathSymbol{"02262}{\nequiv }{\mathrel}{not identical with}%
+\UnicodeMathSymbol{"02263}{\Equiv }{\mathrel}{strict equivalence (4 lines)}%
+\UnicodeMathSymbol{"02264}{\leq }{\mathrel}{/leq /le r: less-than-or-equal}%
+\UnicodeMathSymbol{"02265}{\geq }{\mathrel}{/geq /ge r: greater-than-or-equal}%
+\UnicodeMathSymbol{"02266}{\leqq }{\mathrel}{less, double equals}%
+\UnicodeMathSymbol{"02267}{\geqq }{\mathrel}{greater, double equals}%
+\UnicodeMathSymbol{"02268}{\lneqq }{\mathrel}{less, not double equals}%
+\UnicodeMathSymbol{"02269}{\gneqq }{\mathrel}{greater, not double equals}%
+\UnicodeMathSymbol{"0226A}{\ll }{\mathrel}{much less than, type 2}%
+\UnicodeMathSymbol{"0226B}{\gg }{\mathrel}{much greater than, type 2}%
+\UnicodeMathSymbol{"0226C}{\between }{\mathrel}{between}%
+\UnicodeMathSymbol{"0226D}{\nasymp }{\mathrel}{not asymptotically equal to}%
+\UnicodeMathSymbol{"0226E}{\nless }{\mathrel}{not less-than}%
+\UnicodeMathSymbol{"0226F}{\ngtr }{\mathrel}{not greater-than}%
+\UnicodeMathSymbol{"02270}{\nleq }{\mathrel}{not less-than-or-equal}%
+\UnicodeMathSymbol{"02271}{\ngeq }{\mathrel}{not greater-than-or-equal}%
+\UnicodeMathSymbol{"02272}{\lesssim }{\mathrel}{less, similar}%
+\UnicodeMathSymbol{"02273}{\gtrsim }{\mathrel}{greater, similar}%
+\UnicodeMathSymbol{"02274}{\nlesssim }{\mathrel}{not less, similar}%
+\UnicodeMathSymbol{"02275}{\ngtrsim }{\mathrel}{not greater, similar}%
+\UnicodeMathSymbol{"02276}{\lessgtr }{\mathrel}{less, greater}%
+\UnicodeMathSymbol{"02277}{\gtrless }{\mathrel}{greater, less}%
+\UnicodeMathSymbol{"02278}{\nlessgtr }{\mathrel}{not less, greater}%
+\UnicodeMathSymbol{"02279}{\ngtrless }{\mathrel}{not greater, less}%
+\UnicodeMathSymbol{"0227A}{\prec }{\mathrel}{precedes}%
+\UnicodeMathSymbol{"0227B}{\succ }{\mathrel}{succeeds}%
+\UnicodeMathSymbol{"0227C}{\preccurlyeq }{\mathrel}{precedes, curly equals}%
+\UnicodeMathSymbol{"0227D}{\succcurlyeq }{\mathrel}{succeeds, curly equals}%
+\UnicodeMathSymbol{"0227E}{\precsim }{\mathrel}{precedes, similar}%
+\UnicodeMathSymbol{"0227F}{\succsim }{\mathrel}{succeeds, similar}%
+\UnicodeMathSymbol{"02280}{\nprec }{\mathrel}{not precedes}%
+\UnicodeMathSymbol{"02281}{\nsucc }{\mathrel}{not succeeds}%
+\UnicodeMathSymbol{"02282}{\subset }{\mathrel}{subset or is implied by}%
+\UnicodeMathSymbol{"02283}{\supset }{\mathrel}{superset or implies}%
+\UnicodeMathSymbol{"02284}{\nsubset }{\mathrel}{not subset, variant [slash negation]}%
+\UnicodeMathSymbol{"02285}{\nsupset }{\mathrel}{not superset, variant [slash negation]}%
+\UnicodeMathSymbol{"02286}{\subseteq }{\mathrel}{subset, equals}%
+\UnicodeMathSymbol{"02287}{\supseteq }{\mathrel}{superset, equals}%
+\UnicodeMathSymbol{"02288}{\nsubseteq }{\mathrel}{not subset, equals}%
+\UnicodeMathSymbol{"02289}{\nsupseteq }{\mathrel}{not superset, equals}%
+\UnicodeMathSymbol{"0228A}{\subsetneq }{\mathrel}{subset, not equals}%
+\UnicodeMathSymbol{"0228B}{\supsetneq }{\mathrel}{superset, not equals}%
+\UnicodeMathSymbol{"0228C}{\cupleftarrow }{\mathbin}{multiset}%
+\UnicodeMathSymbol{"0228D}{\cupdot }{\mathbin}{union, with dot}%
+\UnicodeMathSymbol{"0228E}{\uplus }{\mathbin}{plus sign in union}%
+\UnicodeMathSymbol{"0228F}{\sqsubset }{\mathrel}{square subset}%
+\UnicodeMathSymbol{"02290}{\sqsupset }{\mathrel}{square superset}%
+\UnicodeMathSymbol{"02291}{\sqsubseteq }{\mathrel}{square subset, equals}%
+\UnicodeMathSymbol{"02292}{\sqsupseteq }{\mathrel}{square superset, equals}%
+\UnicodeMathSymbol{"02293}{\sqcap }{\mathbin}{square intersection}%
+\UnicodeMathSymbol{"02294}{\sqcup }{\mathbin}{square union}%
+\UnicodeMathSymbol{"02295}{\oplus }{\mathbin}{plus sign in circle}%
+\UnicodeMathSymbol{"02296}{\ominus }{\mathbin}{minus sign in circle}%
+\UnicodeMathSymbol{"02297}{\otimes }{\mathbin}{multiply sign in circle}%
+\UnicodeMathSymbol{"02298}{\oslash }{\mathbin}{solidus in circle}%
+\UnicodeMathSymbol{"02299}{\odot }{\mathbin}{middle dot in circle}%
+\UnicodeMathSymbol{"0229A}{\circledcirc }{\mathbin}{small circle in circle}%
+\UnicodeMathSymbol{"0229B}{\circledast }{\mathbin}{asterisk in circle}%
+\UnicodeMathSymbol{"0229C}{\circledequal }{\mathbin}{equal in circle}%
+\UnicodeMathSymbol{"0229D}{\circleddash }{\mathbin}{hyphen in circle}%
+\UnicodeMathSymbol{"0229E}{\boxplus }{\mathbin}{plus sign in box}%
+\UnicodeMathSymbol{"0229F}{\boxminus }{\mathbin}{minus sign in box}%
+\UnicodeMathSymbol{"022A0}{\boxtimes }{\mathbin}{multiply sign in box}%
+\UnicodeMathSymbol{"022A1}{\boxdot }{\mathbin}{/dotsquare /boxdot b: small dot in box}%
+\UnicodeMathSymbol{"022A2}{\vdash }{\mathrel}{vertical, dash}%
+\UnicodeMathSymbol{"022A3}{\dashv }{\mathrel}{dash, vertical}%
+\UnicodeMathSymbol{"022A4}{\top }{\mathord}{top}%
+\UnicodeMathSymbol{"022A5}{\bot }{\mathord}{bottom}%
+\UnicodeMathSymbol{"022A6}{\assert }{\mathrel}{assertion (vertical, short dash)}%
+\UnicodeMathSymbol{"022A7}{\models }{\mathrel}{models (vertical, short double dash)}%
+\UnicodeMathSymbol{"022A8}{\vDash }{\mathrel}{vertical, double dash}%
+\UnicodeMathSymbol{"022A9}{\Vdash }{\mathrel}{double vertical, dash}%
+\UnicodeMathSymbol{"022AA}{\Vvdash }{\mathrel}{triple vertical, dash}%
+\UnicodeMathSymbol{"022AB}{\VDash }{\mathrel}{double vert, double dash}%
+\UnicodeMathSymbol{"022AC}{\nvdash }{\mathrel}{not vertical, dash}%
+\UnicodeMathSymbol{"022AD}{\nvDash }{\mathrel}{not vertical, double dash}%
+\UnicodeMathSymbol{"022AE}{\nVdash }{\mathrel}{not double vertical, dash}%
+\UnicodeMathSymbol{"022AF}{\nVDash }{\mathrel}{not double vert, double dash}%
+\UnicodeMathSymbol{"022B0}{\prurel }{\mathrel}{element precedes under relation}%
+\UnicodeMathSymbol{"022B1}{\scurel }{\mathrel}{succeeds under relation}%
+\UnicodeMathSymbol{"022B2}{\vartriangleleft }{\mathrel}{left triangle, open, variant}%
+\UnicodeMathSymbol{"022B3}{\vartriangleright }{\mathrel}{right triangle, open, variant}%
+\UnicodeMathSymbol{"022B4}{\trianglelefteq }{\mathrel}{left triangle, equals}%
+\UnicodeMathSymbol{"022B5}{\trianglerighteq }{\mathrel}{right triangle, equals}%
+\UnicodeMathSymbol{"022B6}{\origof }{\mathrel}{original of}%
+\UnicodeMathSymbol{"022B7}{\imageof }{\mathrel}{image of}%
+\UnicodeMathSymbol{"022B8}{\multimap }{\mathrel}{/multimap a:}%
+\UnicodeMathSymbol{"022B9}{\hermitmatrix }{\mathord}{hermitian conjugate matrix}%
+\UnicodeMathSymbol{"022BA}{\intercal }{\mathbin}{intercal}%
+\UnicodeMathSymbol{"022BB}{\veebar }{\mathbin}{logical or, bar below (large vee); exclusive disjunction}%
+\UnicodeMathSymbol{"022BC}{\barwedge }{\mathbin}{bar, wedge (large wedge)}%
+\UnicodeMathSymbol{"022BD}{\barvee }{\mathbin}{bar, vee (large vee)}%
+\UnicodeMathSymbol{"022BE}{\measuredrightangle }{\mathord}{right angle-measured [with arc]}%
+\UnicodeMathSymbol{"022BF}{\varlrtriangle }{\mathord}{right triangle}%
+\UnicodeMathSymbol{"022C0}{\bigwedge }{\mathop}{logical and operator}%
+\UnicodeMathSymbol{"022C1}{\bigvee }{\mathop}{logical or operator}%
+\UnicodeMathSymbol{"022C2}{\bigcap }{\mathop}{intersection operator}%
+\UnicodeMathSymbol{"022C3}{\bigcup }{\mathop}{union operator}%
+\UnicodeMathSymbol{"022C4}{\smwhtdiamond }{\mathbin}{white diamond}%
+\UnicodeMathSymbol{"022C5}{\cdot }{\mathbin}{small middle dot}%
+\UnicodeMathSymbol{"022C6}{\star }{\mathbin}{small star, filled, low}%
+\UnicodeMathSymbol{"022C7}{\divideontimes }{\mathbin}{division on times}%
+\UnicodeMathSymbol{"022C8}{\bowtie }{\mathrel}{bowtie}%
+\UnicodeMathSymbol{"022C9}{\ltimes }{\mathbin}{times sign, left closed}%
+\UnicodeMathSymbol{"022CA}{\rtimes }{\mathbin}{times sign, right closed}%
+\UnicodeMathSymbol{"022CB}{\leftthreetimes }{\mathbin}{left semidirect product}%
+\UnicodeMathSymbol{"022CC}{\rightthreetimes }{\mathbin}{right semidirect product}%
+\UnicodeMathSymbol{"022CD}{\backsimeq }{\mathrel}{reverse similar, equals}%
+\UnicodeMathSymbol{"022CE}{\curlyvee }{\mathbin}{curly logical or}%
+\UnicodeMathSymbol{"022CF}{\curlywedge }{\mathbin}{curly logical and}%
+\UnicodeMathSymbol{"022D0}{\Subset }{\mathrel}{double subset}%
+\UnicodeMathSymbol{"022D1}{\Supset }{\mathrel}{double superset}%
+\UnicodeMathSymbol{"022D2}{\Cap }{\mathbin}{/cap /doublecap b: double intersection}%
+\UnicodeMathSymbol{"022D3}{\Cup }{\mathbin}{/cup /doublecup b: double union}%
+\UnicodeMathSymbol{"022D4}{\pitchfork }{\mathrel}{pitchfork}%
+\UnicodeMathSymbol{"022D5}{\equalparallel }{\mathrel}{parallel, equal; equal or parallel}%
+\UnicodeMathSymbol{"022D6}{\lessdot }{\mathrel}{less than, with dot}%
+\UnicodeMathSymbol{"022D7}{\gtrdot }{\mathrel}{greater than, with dot}%
+\UnicodeMathSymbol{"022D8}{\lll }{\mathrel}{/ll /lll /llless r: triple less-than}%
+\UnicodeMathSymbol{"022D9}{\ggg }{\mathrel}{/ggg /gg /gggtr r: triple greater-than}%
+\UnicodeMathSymbol{"022DA}{\lesseqgtr }{\mathrel}{less, equals, greater}%
+\UnicodeMathSymbol{"022DB}{\gtreqless }{\mathrel}{greater, equals, less}%
+\UnicodeMathSymbol{"022DC}{\eqless }{\mathrel}{equal-or-less}%
+\UnicodeMathSymbol{"022DD}{\eqgtr }{\mathrel}{equal-or-greater}%
+\UnicodeMathSymbol{"022DE}{\curlyeqprec }{\mathrel}{curly equals, precedes}%
+\UnicodeMathSymbol{"022DF}{\curlyeqsucc }{\mathrel}{curly equals, succeeds}%
+\UnicodeMathSymbol{"022E0}{\npreccurlyeq }{\mathrel}{not precedes, curly equals}%
+\UnicodeMathSymbol{"022E1}{\nsucccurlyeq }{\mathrel}{not succeeds, curly equals}%
+\UnicodeMathSymbol{"022E2}{\nsqsubseteq }{\mathrel}{not, square subset, equals}%
+\UnicodeMathSymbol{"022E3}{\nsqsupseteq }{\mathrel}{not, square superset, equals}%
+\UnicodeMathSymbol{"022E4}{\sqsubsetneq }{\mathrel}{square subset, not equals}%
+\UnicodeMathSymbol{"022E5}{\sqsupsetneq }{\mathrel}{square superset, not equals}%
+\UnicodeMathSymbol{"022E6}{\lnsim }{\mathrel}{less, not similar}%
+\UnicodeMathSymbol{"022E7}{\gnsim }{\mathrel}{greater, not similar}%
+\UnicodeMathSymbol{"022E8}{\precnsim }{\mathrel}{precedes, not similar}%
+\UnicodeMathSymbol{"022E9}{\succnsim }{\mathrel}{succeeds, not similar}%
+\UnicodeMathSymbol{"022EA}{\nvartriangleleft }{\mathrel}{not left triangle}%
+\UnicodeMathSymbol{"022EB}{\nvartriangleright }{\mathrel}{not right triangle}%
+\UnicodeMathSymbol{"022EC}{\ntrianglelefteq }{\mathrel}{not left triangle, equals}%
+\UnicodeMathSymbol{"022ED}{\ntrianglerighteq }{\mathrel}{not right triangle, equals}%
+\UnicodeMathSymbol{"022EE}{\vdots }{\mathrel}{vertical ellipsis}%
+\UnicodeMathSymbol{"022EF}{\unicodecdots }{\mathord}{three dots, centered}%
+\UnicodeMathSymbol{"022F0}{\adots }{\mathrel}{three dots, ascending}%
+\UnicodeMathSymbol{"022F1}{\ddots }{\mathrel}{three dots, descending}%
+\UnicodeMathSymbol{"022F2}{\disin }{\mathrel}{element of with long horizontal stroke}%
+\UnicodeMathSymbol{"022F3}{\varisins }{\mathrel}{element of with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022F4}{\isins }{\mathrel}{small element of with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022F5}{\isindot }{\mathrel}{element of with dot above}%
+\UnicodeMathSymbol{"022F6}{\varisinobar }{\mathrel}{element of with overbar}%
+\UnicodeMathSymbol{"022F7}{\isinobar }{\mathrel}{small element of with overbar}%
+\UnicodeMathSymbol{"022F8}{\isinvb }{\mathrel}{element of with underbar}%
+\UnicodeMathSymbol{"022F9}{\isinE }{\mathrel}{element of with two horizontal strokes}%
+\UnicodeMathSymbol{"022FA}{\nisd }{\mathrel}{contains with long horizontal stroke}%
+\UnicodeMathSymbol{"022FB}{\varnis }{\mathrel}{contains with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022FC}{\nis }{\mathrel}{small contains with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022FD}{\varniobar }{\mathrel}{contains with overbar}%
+\UnicodeMathSymbol{"022FE}{\niobar }{\mathrel}{small contains with overbar}%
+\UnicodeMathSymbol{"022FF}{\bagmember }{\mathrel}{z notation bag membership}%
+\UnicodeMathSymbol{"02300}{\diameter }{\mathord}{diameter sign}%
+\UnicodeMathSymbol{"02302}{\house }{\mathord}{house}%
+\UnicodeMathSymbol{"02305}{\varbarwedge }{\mathbin}{/barwedge b: logical and, bar above [projective (bar over small wedge)]}%
+\UnicodeMathSymbol{"02306}{\vardoublebarwedge }{\mathbin}{/doublebarwedge b: logical and, double bar above [perspective (double bar over small wedge)]}%
+\UnicodeMathSymbol{"02308}{\lceil }{\mathopen}{left ceiling}%
+\UnicodeMathSymbol{"02309}{\rceil }{\mathclose}{right ceiling}%
+\UnicodeMathSymbol{"0230A}{\lfloor }{\mathopen}{left floor}%
+\UnicodeMathSymbol{"0230B}{\rfloor }{\mathclose}{right floor}%
+\UnicodeMathSymbol{"02310}{\invnot }{\mathord}{reverse not}%
+\UnicodeMathSymbol{"02311}{\sqlozenge }{\mathord}{square lozenge}%
+\UnicodeMathSymbol{"02312}{\profline }{\mathord}{profile of a line}%
+\UnicodeMathSymbol{"02313}{\profsurf }{\mathord}{profile of a surface}%
+\UnicodeMathSymbol{"02317}{\viewdata }{\mathord}{viewdata square}%
+\UnicodeMathSymbol{"02319}{\turnednot }{\mathord}{turned not sign}%
+\UnicodeMathSymbol{"0231C}{\ulcorner }{\mathopen}{upper left corner}%
+\UnicodeMathSymbol{"0231D}{\urcorner }{\mathclose}{upper right corner}%
+\UnicodeMathSymbol{"0231E}{\llcorner }{\mathopen}{lower left corner}%
+\UnicodeMathSymbol{"0231F}{\lrcorner }{\mathclose}{lower right corner}%
+\UnicodeMathSymbol{"02320}{\inttop }{\mathord}{top half integral}%
+\UnicodeMathSymbol{"02321}{\intbottom }{\mathord}{bottom half integral}%
+\UnicodeMathSymbol{"02322}{\frown }{\mathrel}{down curve}%
+\UnicodeMathSymbol{"02323}{\smile }{\mathrel}{up curve}%
+\UnicodeMathSymbol{"0232C}{\varhexagonlrbonds }{\mathord}{six carbon ring, corner down, double bonds lower right etc}%
+\UnicodeMathSymbol{"02332}{\conictaper }{\mathord}{conical taper }%
+\UnicodeMathSymbol{"02336}{\topbot }{\mathord}{top and bottom}%
+\UnicodeMathSymbol{"0233D}{\obar }{\mathbin}{circle with vertical bar}%
+\UnicodeMathSymbol{"0233F}{\APLnotslash }{\mathrel}{solidus, bar through (apl functional symbol slash bar)}%
+\UnicodeMathSymbol{"02340}{\APLnotbackslash }{\mathord}{apl functional symbol backslash bar}%
+\UnicodeMathSymbol{"02353}{\APLboxupcaret }{\mathord}{boxed up caret}%
+\UnicodeMathSymbol{"02370}{\APLboxquestion }{\mathord}{boxed question mark}%
+\UnicodeMathSymbol{"0237C}{\rangledownzigzagarrow }{\mathord}{right angle with downwards zigzag arrow}%
+\UnicodeMathSymbol{"02394}{\hexagon }{\mathord}{horizontal benzene ring [hexagon flat open]}%
+\UnicodeMathSymbol{"0239B}{\lparenuend }{\mathord}{left parenthesis upper hook}%
+\UnicodeMathSymbol{"0239C}{\lparenextender }{\mathord}{left parenthesis extension}%
+\UnicodeMathSymbol{"0239D}{\lparenlend }{\mathord}{left parenthesis lower hook}%
+\UnicodeMathSymbol{"0239E}{\rparenuend }{\mathord}{right parenthesis upper hook}%
+\UnicodeMathSymbol{"0239F}{\rparenextender }{\mathord}{right parenthesis extension}%
+\UnicodeMathSymbol{"023A0}{\rparenlend }{\mathord}{right parenthesis lower hook}%
+\UnicodeMathSymbol{"023A1}{\lbrackuend }{\mathord}{left square bracket upper corner}%
+\UnicodeMathSymbol{"023A2}{\lbrackextender }{\mathord}{left square bracket extension}%
+\UnicodeMathSymbol{"023A3}{\lbracklend }{\mathord}{left square bracket lower corner}%
+\UnicodeMathSymbol{"023A4}{\rbrackuend }{\mathord}{right square bracket upper corner}%
+\UnicodeMathSymbol{"023A5}{\rbrackextender }{\mathord}{right square bracket extension}%
+\UnicodeMathSymbol{"023A6}{\rbracklend }{\mathord}{right square bracket lower corner}%
+\UnicodeMathSymbol{"023A7}{\lbraceuend }{\mathord}{left curly bracket upper hook}%
+\UnicodeMathSymbol{"023A8}{\lbracemid }{\mathord}{left curly bracket middle piece}%
+\UnicodeMathSymbol{"023A9}{\lbracelend }{\mathord}{left curly bracket lower hook}%
+\UnicodeMathSymbol{"023AA}{\vbraceextender }{\mathord}{curly bracket extension}%
+\UnicodeMathSymbol{"023AB}{\rbraceuend }{\mathord}{right curly bracket upper hook}%
+\UnicodeMathSymbol{"023AC}{\rbracemid }{\mathord}{right curly bracket middle piece}%
+\UnicodeMathSymbol{"023AD}{\rbracelend }{\mathord}{right curly bracket lower hook}%
+\UnicodeMathSymbol{"023AE}{\intextender }{\mathord}{integral extension}%
+\UnicodeMathSymbol{"023AF}{\harrowextender }{\mathord}{horizontal line extension (used to extend arrows)}%
+\UnicodeMathSymbol{"023B0}{\lmoustache }{\mathopen}{upper left or lower right curly bracket section}%
+\UnicodeMathSymbol{"023B1}{\rmoustache }{\mathclose}{upper right or lower left curly bracket section}%
+\UnicodeMathSymbol{"023B2}{\sumtop }{\mathord}{summation top}%
+\UnicodeMathSymbol{"023B3}{\sumbottom }{\mathord}{summation bottom}%
+\UnicodeMathSymbol{"023B4}{\overbracket }{\mathover}{top square bracket}%
+\UnicodeMathSymbol{"023B5}{\underbracket }{\mathunder}{bottom square bracket}%
+\UnicodeMathSymbol{"023B6}{\bbrktbrk }{\mathord}{bottom square bracket over top square bracket}%
+\UnicodeMathSymbol{"023B7}{\sqrtbottom }{\mathord}{radical symbol bottom}%
+\UnicodeMathSymbol{"023B8}{\lvboxline }{\mathord}{left vertical box line}%
+\UnicodeMathSymbol{"023B9}{\rvboxline }{\mathord}{right vertical box line}%
+\UnicodeMathSymbol{"023CE}{\varcarriagereturn }{\mathord}{return symbol}%
+\UnicodeMathSymbol{"023DC}{\overparen }{\mathover}{top parenthesis (mathematical use)}%
+\UnicodeMathSymbol{"023DD}{\underparen }{\mathunder}{bottom parenthesis (mathematical use)}%
+\UnicodeMathSymbol{"023DE}{\overbrace }{\mathover}{top curly bracket (mathematical use)}%
+\UnicodeMathSymbol{"023DF}{\underbrace }{\mathunder}{bottom curly bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E0}{\obrbrak }{\mathord}{top tortoise shell bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E1}{\ubrbrak }{\mathord}{bottom tortoise shell bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E2}{\trapezium }{\mathord}{white trapezium}%
+\UnicodeMathSymbol{"023E3}{\benzenr }{\mathord}{benzene ring with circle}%
+\UnicodeMathSymbol{"023E4}{\strns }{\mathord}{straightness}%
+\UnicodeMathSymbol{"023E5}{\fltns }{\mathord}{flatness}%
+\UnicodeMathSymbol{"023E6}{\accurrent }{\mathord}{ac current}%
+\UnicodeMathSymbol{"023E7}{\elinters }{\mathord}{electrical intersection}%
+\UnicodeMathSymbol{"02422}{\blanksymbol }{\mathord}{blank symbol}%
+\UnicodeMathSymbol{"02423}{\mathvisiblespace }{\mathord}{open box}%
+\UnicodeMathSymbol{"02506}{\bdtriplevdash }{\mathord}{doubly broken vert}%
+\UnicodeMathSymbol{"02580}{\blockuphalf }{\mathord}{upper half block}%
+\UnicodeMathSymbol{"02584}{\blocklowhalf }{\mathord}{lower half block}%
+\UnicodeMathSymbol{"02588}{\blockfull }{\mathord}{full block}%
+\UnicodeMathSymbol{"0258C}{\blocklefthalf }{\mathord}{left half block}%
+\UnicodeMathSymbol{"02590}{\blockrighthalf }{\mathord}{right half block}%
+\UnicodeMathSymbol{"02591}{\blockqtrshaded }{\mathord}{25\% shaded block}%
+\UnicodeMathSymbol{"02592}{\blockhalfshaded }{\mathord}{50\% shaded block}%
+\UnicodeMathSymbol{"02593}{\blockthreeqtrshaded }{\mathord}{75\% shaded block}%
+\UnicodeMathSymbol{"025A0}{\mdlgblksquare }{\mathord}{square, filled}%
+\UnicodeMathSymbol{"025A1}{\mdlgwhtsquare }{\mathord}{square, open}%
+\UnicodeMathSymbol{"025A2}{\squoval }{\mathord}{white square with rounded corners}%
+\UnicodeMathSymbol{"025A3}{\blackinwhitesquare }{\mathord}{white square containing black small square}%
+\UnicodeMathSymbol{"025A4}{\squarehfill }{\mathord}{square, horizontal rule filled}%
+\UnicodeMathSymbol{"025A5}{\squarevfill }{\mathord}{square, vertical rule filled}%
+\UnicodeMathSymbol{"025A6}{\squarehvfill }{\mathord}{square with orthogonal crosshatch fill}%
+\UnicodeMathSymbol{"025A7}{\squarenwsefill }{\mathord}{square, nw-to-se rule filled}%
+\UnicodeMathSymbol{"025A8}{\squareneswfill }{\mathord}{square, ne-to-sw rule filled}%
+\UnicodeMathSymbol{"025A9}{\squarecrossfill }{\mathord}{square with diagonal crosshatch fill}%
+\UnicodeMathSymbol{"025AA}{\smblksquare }{\mathord}{/blacksquare - sq bullet, filled}%
+\UnicodeMathSymbol{"025AB}{\smwhtsquare }{\mathord}{white small square}%
+\UnicodeMathSymbol{"025AC}{\hrectangleblack }{\mathord}{black rectangle}%
+\UnicodeMathSymbol{"025AD}{\hrectangle }{\mathord}{horizontal rectangle, open}%
+\UnicodeMathSymbol{"025AE}{\vrectangleblack }{\mathord}{black vertical rectangle}%
+\UnicodeMathSymbol{"025AF}{\vrectangle }{\mathord}{rectangle, white (vertical)}%
+\UnicodeMathSymbol{"025B0}{\parallelogramblack }{\mathord}{black parallelogram}%
+\UnicodeMathSymbol{"025B1}{\parallelogram }{\mathord}{parallelogram, open}%
+\UnicodeMathSymbol{"025B2}{\bigblacktriangleup }{\mathord}{black up-pointing triangle}%
+\UnicodeMathSymbol{"025B3}{\bigtriangleup }{\mathbin}{big up triangle, open}%
+\UnicodeMathSymbol{"025B4}{\blacktriangle }{\mathord}{up triangle, filled}%
+\UnicodeMathSymbol{"025B5}{\vartriangle }{\mathrel}{/triangle - up triangle, open}%
+\UnicodeMathSymbol{"025B6}{\blacktriangleright }{\mathord}{(large) right triangle, filled}%
+\UnicodeMathSymbol{"025B7}{\triangleright }{\mathbin}{(large) right triangle, open; z notation range restriction}%
+\UnicodeMathSymbol{"025B8}{\smallblacktriangleright }{\mathord}{right triangle, filled}%
+\UnicodeMathSymbol{"025B9}{\smalltriangleright }{\mathord}{right triangle, open}%
+\UnicodeMathSymbol{"025BA}{\blackpointerright }{\mathord}{black right-pointing pointer}%
+\UnicodeMathSymbol{"025BB}{\whitepointerright }{\mathord}{white right-pointing pointer}%
+\UnicodeMathSymbol{"025BC}{\bigblacktriangledown }{\mathord}{big down triangle, filled}%
+\UnicodeMathSymbol{"025BD}{\bigtriangledown }{\mathord}{big down triangle, open}%
+\UnicodeMathSymbol{"025BE}{\blacktriangledown }{\mathord}{down triangle, filled}%
+\UnicodeMathSymbol{"025BF}{\triangledown }{\mathord}{down triangle, open}%
+\UnicodeMathSymbol{"025C0}{\blacktriangleleft }{\mathord}{(large) left triangle, filled}%
+\UnicodeMathSymbol{"025C1}{\triangleleft }{\mathbin}{(large) left triangle, open; z notation domain restriction}%
+\UnicodeMathSymbol{"025C2}{\smallblacktriangleleft }{\mathord}{left triangle, filled}%
+\UnicodeMathSymbol{"025C3}{\smalltriangleleft }{\mathord}{left triangle, open}%
+\UnicodeMathSymbol{"025C4}{\blackpointerleft }{\mathord}{black left-pointing pointer}%
+\UnicodeMathSymbol{"025C5}{\whitepointerleft }{\mathord}{white left-pointing pointer}%
+\UnicodeMathSymbol{"025C6}{\mdlgblkdiamond }{\mathord}{black diamond}%
+\UnicodeMathSymbol{"025C7}{\mdlgwhtdiamond }{\mathord}{white diamond; diamond, open}%
+\UnicodeMathSymbol{"025C8}{\blackinwhitediamond }{\mathord}{white diamond containing black small diamond}%
+\UnicodeMathSymbol{"025C9}{\fisheye }{\mathord}{fisheye}%
+\UnicodeMathSymbol{"025CA}{\mdlgwhtlozenge }{\mathord}{lozenge or total mark}%
+\UnicodeMathSymbol{"025CB}{\mdlgwhtcircle }{\mathbin}{medium large circle}%
+\UnicodeMathSymbol{"025CC}{\dottedcircle }{\mathord}{dotted circle}%
+\UnicodeMathSymbol{"025CD}{\circlevertfill }{\mathord}{circle with vertical fill}%
+\UnicodeMathSymbol{"025CE}{\bullseye }{\mathord}{bullseye}%
+\UnicodeMathSymbol{"025CF}{\mdlgblkcircle }{\mathord}{circle, filled}%
+\UnicodeMathSymbol{"025D0}{\circlelefthalfblack }{\mathord}{circle, filled left half [harvey ball]}%
+\UnicodeMathSymbol{"025D1}{\circlerighthalfblack }{\mathord}{circle, filled right half}%
+\UnicodeMathSymbol{"025D2}{\circlebottomhalfblack }{\mathord}{circle, filled bottom half}%
+\UnicodeMathSymbol{"025D3}{\circletophalfblack }{\mathord}{circle, filled top half}%
+\UnicodeMathSymbol{"025D4}{\circleurquadblack }{\mathord}{circle with upper right quadrant black}%
+\UnicodeMathSymbol{"025D5}{\blackcircleulquadwhite }{\mathord}{circle with all but upper left quadrant black}%
+\UnicodeMathSymbol{"025D6}{\blacklefthalfcircle }{\mathord}{left half black circle}%
+\UnicodeMathSymbol{"025D7}{\blackrighthalfcircle }{\mathord}{right half black circle}%
+\UnicodeMathSymbol{"025D8}{\inversebullet }{\mathord}{inverse bullet }%
+\UnicodeMathSymbol{"025D9}{\inversewhitecircle }{\mathord}{inverse white circle}%
+\UnicodeMathSymbol{"025DA}{\invwhiteupperhalfcircle }{\mathord}{upper half inverse white circle}%
+\UnicodeMathSymbol{"025DB}{\invwhitelowerhalfcircle }{\mathord}{lower half inverse white circle}%
+\UnicodeMathSymbol{"025DC}{\ularc }{\mathord}{upper left quadrant circular arc}%
+\UnicodeMathSymbol{"025DD}{\urarc }{\mathord}{upper right quadrant circular arc}%
+\UnicodeMathSymbol{"025DE}{\lrarc }{\mathord}{lower right quadrant circular arc}%
+\UnicodeMathSymbol{"025DF}{\llarc }{\mathord}{lower left quadrant circular arc}%
+\UnicodeMathSymbol{"025E0}{\topsemicircle }{\mathord}{upper half circle}%
+\UnicodeMathSymbol{"025E1}{\botsemicircle }{\mathord}{lower half circle}%
+\UnicodeMathSymbol{"025E2}{\lrblacktriangle }{\mathord}{lower right triangle, filled}%
+\UnicodeMathSymbol{"025E3}{\llblacktriangle }{\mathord}{lower left triangle, filled}%
+\UnicodeMathSymbol{"025E4}{\ulblacktriangle }{\mathord}{upper left triangle, filled}%
+\UnicodeMathSymbol{"025E5}{\urblacktriangle }{\mathord}{upper right triangle, filled}%
+\UnicodeMathSymbol{"025E6}{\smwhtcircle }{\mathord}{white bullet}%
+\UnicodeMathSymbol{"025E7}{\squareleftblack }{\mathord}{square, filled left half}%
+\UnicodeMathSymbol{"025E8}{\squarerightblack }{\mathord}{square, filled right half}%
+\UnicodeMathSymbol{"025E9}{\squareulblack }{\mathord}{square, filled top left corner}%
+\UnicodeMathSymbol{"025EA}{\squarelrblack }{\mathord}{square, filled bottom right corner}%
+\UnicodeMathSymbol{"025EB}{\boxbar }{\mathbin}{vertical bar in box}%
+\UnicodeMathSymbol{"025EC}{\trianglecdot }{\mathord}{triangle with centered dot}%
+\UnicodeMathSymbol{"025ED}{\triangleleftblack }{\mathord}{up-pointing triangle with left half black}%
+\UnicodeMathSymbol{"025EE}{\trianglerightblack }{\mathord}{up-pointing triangle with right half black}%
+\UnicodeMathSymbol{"025EF}{\lgwhtcircle }{\mathord}{large circle}%
+\UnicodeMathSymbol{"025F0}{\squareulquad }{\mathord}{white square with upper left quadrant}%
+\UnicodeMathSymbol{"025F1}{\squarellquad }{\mathord}{white square with lower left quadrant}%
+\UnicodeMathSymbol{"025F2}{\squarelrquad }{\mathord}{white square with lower right quadrant}%
+\UnicodeMathSymbol{"025F3}{\squareurquad }{\mathord}{white square with upper right quadrant}%
+\UnicodeMathSymbol{"025F4}{\circleulquad }{\mathord}{white circle with upper left quadrant}%
+\UnicodeMathSymbol{"025F5}{\circlellquad }{\mathord}{white circle with lower left quadrant}%
+\UnicodeMathSymbol{"025F6}{\circlelrquad }{\mathord}{white circle with lower right quadrant}%
+\UnicodeMathSymbol{"025F7}{\circleurquad }{\mathord}{white circle with upper right quadrant}%
+\UnicodeMathSymbol{"025F8}{\ultriangle }{\mathord}{upper left triangle}%
+\UnicodeMathSymbol{"025F9}{\urtriangle }{\mathord}{upper right triangle}%
+\UnicodeMathSymbol{"025FA}{\lltriangle }{\mathord}{lower left triangle}%
+\UnicodeMathSymbol{"025FB}{\mdwhtsquare }{\mathord}{white medium square}%
+\UnicodeMathSymbol{"025FC}{\mdblksquare }{\mathord}{black medium square}%
+\UnicodeMathSymbol{"025FD}{\mdsmwhtsquare }{\mathord}{white medium small square}%
+\UnicodeMathSymbol{"025FE}{\mdsmblksquare }{\mathord}{black medium small square}%
+\UnicodeMathSymbol{"025FF}{\lrtriangle }{\mathord}{lower right triangle}%
+\UnicodeMathSymbol{"02605}{\bigstar }{\mathord}{star, filled}%
+\UnicodeMathSymbol{"02606}{\bigwhitestar }{\mathord}{star, open}%
+\UnicodeMathSymbol{"02609}{\astrosun }{\mathord}{sun}%
+\UnicodeMathSymbol{"02621}{\danger }{\mathord}{dangerous bend (caution sign)}%
+\UnicodeMathSymbol{"0263B}{\blacksmiley }{\mathord}{black smiling face}%
+\UnicodeMathSymbol{"0263C}{\sun }{\mathord}{white sun with rays}%
+\UnicodeMathSymbol{"0263D}{\rightmoon }{\mathord}{first quarter moon}%
+\UnicodeMathSymbol{"0263E}{\leftmoon }{\mathord}{last quarter moon}%
+\UnicodeMathSymbol{"02640}{\female }{\mathord}{venus, female}%
+\UnicodeMathSymbol{"02642}{\male }{\mathord}{mars, male}%
+\UnicodeMathSymbol{"02660}{\spadesuit }{\mathord}{spades suit symbol}%
+\UnicodeMathSymbol{"02661}{\heartsuit }{\mathord}{heart suit symbol}%
+\UnicodeMathSymbol{"02662}{\diamondsuit }{\mathord}{diamond suit symbol}%
+\UnicodeMathSymbol{"02663}{\clubsuit }{\mathord}{club suit symbol}%
+\UnicodeMathSymbol{"02664}{\varspadesuit }{\mathord}{spade, white (card suit)}%
+\UnicodeMathSymbol{"02665}{\varheartsuit }{\mathord}{filled heart (card suit)}%
+\UnicodeMathSymbol{"02666}{\vardiamondsuit }{\mathord}{filled diamond (card suit)}%
+\UnicodeMathSymbol{"02667}{\varclubsuit }{\mathord}{club, white (card suit)}%
+\UnicodeMathSymbol{"02669}{\quarternote }{\mathord}{music note (sung text sign)}%
+\UnicodeMathSymbol{"0266A}{\eighthnote }{\mathord}{eighth note}%
+\UnicodeMathSymbol{"0266B}{\twonotes }{\mathord}{beamed eighth notes}%
+\UnicodeMathSymbol{"0266D}{\flat }{\mathord}{musical flat}%
+\UnicodeMathSymbol{"0266E}{\natural }{\mathord}{music natural}%
+\UnicodeMathSymbol{"0266F}{\sharp }{\mathord}{musical sharp}%
+\UnicodeMathSymbol{"0267E}{\acidfree }{\mathord}{permanent paper sign}%
+\UnicodeMathSymbol{"02680}{\dicei }{\mathord}{die face-1}%
+\UnicodeMathSymbol{"02681}{\diceii }{\mathord}{die face-2}%
+\UnicodeMathSymbol{"02682}{\diceiii }{\mathord}{die face-3}%
+\UnicodeMathSymbol{"02683}{\diceiv }{\mathord}{die face-4}%
+\UnicodeMathSymbol{"02684}{\dicev }{\mathord}{die face-5}%
+\UnicodeMathSymbol{"02685}{\dicevi }{\mathord}{die face-6}%
+\UnicodeMathSymbol{"02686}{\circledrightdot }{\mathord}{white circle with dot right}%
+\UnicodeMathSymbol{"02687}{\circledtwodots }{\mathord}{white circle with two dots}%
+\UnicodeMathSymbol{"02688}{\blackcircledrightdot }{\mathord}{black circle with white dot right}%
+\UnicodeMathSymbol{"02689}{\blackcircledtwodots }{\mathord}{black circle with two white dots}%
+\UnicodeMathSymbol{"026A5}{\Hermaphrodite }{\mathord}{male and female sign}%
+\UnicodeMathSymbol{"026AA}{\mdwhtcircle }{\mathord}{medium white circle}%
+\UnicodeMathSymbol{"026AB}{\mdblkcircle }{\mathord}{medium black circle}%
+\UnicodeMathSymbol{"026AC}{\mdsmwhtcircle }{\mathord}{medium small white circle}%
+\UnicodeMathSymbol{"026B2}{\neuter }{\mathord}{neuter}%
+\UnicodeMathSymbol{"02713}{\checkmark }{\mathord}{tick, check mark}%
+\UnicodeMathSymbol{"02720}{\maltese }{\mathord}{maltese cross}%
+\UnicodeMathSymbol{"0272A}{\circledstar }{\mathord}{circled white star}%
+\UnicodeMathSymbol{"02736}{\varstar }{\mathord}{six pointed black star}%
+\UnicodeMathSymbol{"0273D}{\dingasterisk }{\mathord}{heavy teardrop-spoked asterisk}%
+\UnicodeMathSymbol{"02772}{\lbrbrak }{\mathopen}{light left tortoise shell bracket ornament}%
+\UnicodeMathSymbol{"02773}{\rbrbrak }{\mathclose}{light right tortoise shell bracket ornament}%
+\UnicodeMathSymbol{"0279B}{\draftingarrow }{\mathord}{right arrow with bold head (drafting)}%
+\UnicodeMathSymbol{"027C0}{\threedangle }{\mathord}{three dimensional angle}%
+\UnicodeMathSymbol{"027C1}{\whiteinwhitetriangle }{\mathord}{white triangle containing small white triangle}%
+\UnicodeMathSymbol{"027C2}{\perp }{\mathrel}{perpendicular}%
+\UnicodeMathSymbol{"027C3}{\subsetcirc }{\mathord}{open subset}%
+\UnicodeMathSymbol{"027C4}{\supsetcirc }{\mathord}{open superset}%
+\UnicodeMathSymbol{"027C5}{\lbag }{\mathopen}{left s-shaped bag delimiter}%
+\UnicodeMathSymbol{"027C6}{\rbag }{\mathclose}{right s-shaped bag delimiter}%
+\UnicodeMathSymbol{"027C7}{\veedot }{\mathbin}{or with dot inside}%
+\UnicodeMathSymbol{"027C8}{\bsolhsub }{\mathrel}{reverse solidus preceding subset}%
+\UnicodeMathSymbol{"027C9}{\suphsol }{\mathrel}{superset preceding solidus}%
+\UnicodeMathSymbol{"027CC}{\longdivision }{\mathopen}{long division}%
+\UnicodeMathSymbol{"027D0}{\diamondcdot }{\mathord}{white diamond with centred dot}%
+\UnicodeMathSymbol{"027D1}{\wedgedot }{\mathbin}{and with dot}%
+\UnicodeMathSymbol{"027D2}{\upin }{\mathrel}{element of opening upwards}%
+\UnicodeMathSymbol{"027D3}{\pullback }{\mathrel}{lower right corner with dot}%
+\UnicodeMathSymbol{"027D4}{\pushout }{\mathrel}{upper left corner with dot}%
+\UnicodeMathSymbol{"027D5}{\leftouterjoin }{\mathop}{left outer join}%
+\UnicodeMathSymbol{"027D6}{\rightouterjoin }{\mathop}{right outer join}%
+\UnicodeMathSymbol{"027D7}{\fullouterjoin }{\mathop}{full outer join}%
+\UnicodeMathSymbol{"027D8}{\bigbot }{\mathop}{large up tack}%
+\UnicodeMathSymbol{"027D9}{\bigtop }{\mathop}{large down tack}%
+\UnicodeMathSymbol{"027DA}{\DashVDash }{\mathrel}{left and right double turnstile}%
+\UnicodeMathSymbol{"027DB}{\dashVdash }{\mathrel}{left and right tack}%
+\UnicodeMathSymbol{"027DC}{\multimapinv }{\mathrel}{left multimap}%
+\UnicodeMathSymbol{"027DD}{\vlongdash }{\mathrel}{long left tack}%
+\UnicodeMathSymbol{"027DE}{\longdashv }{\mathrel}{long right tack}%
+\UnicodeMathSymbol{"027DF}{\cirbot }{\mathrel}{up tack with circle above}%
+\UnicodeMathSymbol{"027E0}{\lozengeminus }{\mathbin}{lozenge divided by horizontal rule}%
+\UnicodeMathSymbol{"027E1}{\concavediamond }{\mathbin}{white concave-sided diamond}%
+\UnicodeMathSymbol{"027E2}{\concavediamondtickleft }{\mathbin}{white concave-sided diamond with leftwards tick}%
+\UnicodeMathSymbol{"027E3}{\concavediamondtickright }{\mathbin}{white concave-sided diamond with rightwards tick}%
+\UnicodeMathSymbol{"027E4}{\whitesquaretickleft }{\mathbin}{white square with leftwards tick}%
+\UnicodeMathSymbol{"027E5}{\whitesquaretickright }{\mathbin}{white square with rightwards tick}%
+\UnicodeMathSymbol{"027E6}{\lBrack }{\mathopen}{mathematical left white square bracket}%
+\UnicodeMathSymbol{"027E7}{\rBrack }{\mathclose}{mathematical right white square bracket}%
+\UnicodeMathSymbol{"027E8}{\langle }{\mathopen}{mathematical left angle bracket}%
+\UnicodeMathSymbol{"027E9}{\rangle }{\mathclose}{mathematical right angle bracket}%
+\UnicodeMathSymbol{"027EA}{\lAngle }{\mathopen}{mathematical left double angle bracket}%
+\UnicodeMathSymbol{"027EB}{\rAngle }{\mathclose}{mathematical right double angle bracket}%
+\UnicodeMathSymbol{"027EC}{\Lbrbrak }{\mathopen}{mathematical left white tortoise shell bracket}%
+\UnicodeMathSymbol{"027ED}{\Rbrbrak }{\mathclose}{mathematical right white tortoise shell bracket}%
+\UnicodeMathSymbol{"027EE}{\lgroup }{\mathopen}{mathematical left flattened parenthesis}%
+\UnicodeMathSymbol{"027EF}{\rgroup }{\mathclose}{mathematical right flattened parenthesis}%
+\UnicodeMathSymbol{"027F0}{\UUparrow }{\mathrel}{upwards quadruple arrow}%
+\UnicodeMathSymbol{"027F1}{\DDownarrow }{\mathrel}{downwards quadruple arrow}%
+\UnicodeMathSymbol{"027F2}{\acwgapcirclearrow }{\mathrel}{anticlockwise gapped circle arrow}%
+\UnicodeMathSymbol{"027F3}{\cwgapcirclearrow }{\mathrel}{clockwise gapped circle arrow}%
+\UnicodeMathSymbol{"027F4}{\rightarrowonoplus }{\mathrel}{right arrow with circled plus}%
+\UnicodeMathSymbol{"027F5}{\longleftarrow }{\mathrel}{long leftwards arrow}%
+\UnicodeMathSymbol{"027F6}{\longrightarrow }{\mathrel}{long rightwards arrow}%
+\UnicodeMathSymbol{"027F7}{\longleftrightarrow }{\mathrel}{long left right arrow}%
+\UnicodeMathSymbol{"027F8}{\Longleftarrow }{\mathrel}{long leftwards double arrow}%
+\UnicodeMathSymbol{"027F9}{\Longrightarrow }{\mathrel}{long rightwards double arrow}%
+\UnicodeMathSymbol{"027FA}{\Longleftrightarrow }{\mathrel}{long left right double arrow}%
+\UnicodeMathSymbol{"027FB}{\longmapsfrom }{\mathrel}{long leftwards arrow from bar}%
+\UnicodeMathSymbol{"027FC}{\longmapsto }{\mathrel}{long rightwards arrow from bar}%
+\UnicodeMathSymbol{"027FD}{\Longmapsfrom }{\mathrel}{long leftwards double arrow from bar}%
+\UnicodeMathSymbol{"027FE}{\Longmapsto }{\mathrel}{long rightwards double arrow from bar}%
+\UnicodeMathSymbol{"027FF}{\longrightsquigarrow }{\mathrel}{long rightwards squiggle arrow}%
+\UnicodeMathSymbol{"02900}{\nvtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with vertical stroke}%
+\UnicodeMathSymbol{"02901}{\nVtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with double vertical stroke}%
+\UnicodeMathSymbol{"02902}{\nvLeftarrow }{\mathrel}{leftwards double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02903}{\nvRightarrow }{\mathrel}{rightwards double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02904}{\nvLeftrightarrow }{\mathrel}{left right double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02905}{\twoheadmapsto }{\mathrel}{rightwards two-headed arrow from bar}%
+\UnicodeMathSymbol{"02906}{\Mapsfrom }{\mathrel}{leftwards double arrow from bar}%
+\UnicodeMathSymbol{"02907}{\Mapsto }{\mathrel}{rightwards double arrow from bar}%
+\UnicodeMathSymbol{"02908}{\downarrowbarred }{\mathrel}{downwards arrow with horizontal stroke}%
+\UnicodeMathSymbol{"02909}{\uparrowbarred }{\mathrel}{upwards arrow with horizontal stroke}%
+\UnicodeMathSymbol{"0290A}{\Uuparrow }{\mathrel}{upwards triple arrow}%
+\UnicodeMathSymbol{"0290B}{\Ddownarrow }{\mathrel}{downwards triple arrow}%
+\UnicodeMathSymbol{"0290C}{\leftbkarrow }{\mathrel}{leftwards double dash arrow}%
+\UnicodeMathSymbol{"0290D}{\rightbkarrow }{\mathrel}{rightwards double dash arrow}%
+\UnicodeMathSymbol{"0290E}{\leftdbkarrow }{\mathrel}{leftwards triple dash arrow}%
+\UnicodeMathSymbol{"0290F}{\dbkarrow }{\mathrel}{rightwards triple dash arrow}%
+\UnicodeMathSymbol{"02910}{\drbkarrow }{\mathrel}{rightwards two-headed triple dash arrow}%
+\UnicodeMathSymbol{"02911}{\rightdotarrow }{\mathrel}{rightwards arrow with dotted stem}%
+\UnicodeMathSymbol{"02912}{\baruparrow }{\mathrel}{upwards arrow to bar}%
+\UnicodeMathSymbol{"02913}{\downarrowbar }{\mathrel}{downwards arrow to bar}%
+\UnicodeMathSymbol{"02914}{\nvrightarrowtail }{\mathrel}{rightwards arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02915}{\nVrightarrowtail }{\mathrel}{rightwards arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02916}{\twoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail}%
+\UnicodeMathSymbol{"02917}{\nvtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02918}{\nVtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02919}{\lefttail }{\mathrel}{leftwards arrow-tail}%
+\UnicodeMathSymbol{"0291A}{\righttail }{\mathrel}{rightwards arrow-tail}%
+\UnicodeMathSymbol{"0291B}{\leftdbltail }{\mathrel}{leftwards double arrow-tail}%
+\UnicodeMathSymbol{"0291C}{\rightdbltail }{\mathrel}{rightwards double arrow-tail}%
+\UnicodeMathSymbol{"0291D}{\diamondleftarrow }{\mathrel}{leftwards arrow to black diamond}%
+\UnicodeMathSymbol{"0291E}{\rightarrowdiamond }{\mathrel}{rightwards arrow to black diamond}%
+\UnicodeMathSymbol{"0291F}{\diamondleftarrowbar }{\mathrel}{leftwards arrow from bar to black diamond}%
+\UnicodeMathSymbol{"02920}{\barrightarrowdiamond }{\mathrel}{rightwards arrow from bar to black diamond}%
+\UnicodeMathSymbol{"02921}{\nwsearrow }{\mathrel}{north west and south east arrow}%
+\UnicodeMathSymbol{"02922}{\neswarrow }{\mathrel}{north east and south west arrow}%
+\UnicodeMathSymbol{"02923}{\hknwarrow }{\mathrel}{north west arrow with hook}%
+\UnicodeMathSymbol{"02924}{\hknearrow }{\mathrel}{north east arrow with hook}%
+\UnicodeMathSymbol{"02925}{\hksearrow }{\mathrel}{south east arrow with hook}%
+\UnicodeMathSymbol{"02926}{\hkswarrow }{\mathrel}{south west arrow with hook}%
+\UnicodeMathSymbol{"02927}{\tona }{\mathrel}{north west arrow and north east arrow}%
+\UnicodeMathSymbol{"02928}{\toea }{\mathrel}{north east arrow and south east arrow}%
+\UnicodeMathSymbol{"02929}{\tosa }{\mathrel}{south east arrow and south west arrow}%
+\UnicodeMathSymbol{"0292A}{\towa }{\mathrel}{south west arrow and north west arrow}%
+\UnicodeMathSymbol{"0292B}{\rdiagovfdiag }{\mathord}{rising diagonal crossing falling diagonal}%
+\UnicodeMathSymbol{"0292C}{\fdiagovrdiag }{\mathord}{falling diagonal crossing rising diagonal}%
+\UnicodeMathSymbol{"0292D}{\seovnearrow }{\mathord}{south east arrow crossing north east arrow}%
+\UnicodeMathSymbol{"0292E}{\neovsearrow }{\mathord}{north east arrow crossing south east arrow}%
+\UnicodeMathSymbol{"0292F}{\fdiagovnearrow }{\mathord}{falling diagonal crossing north east arrow}%
+\UnicodeMathSymbol{"02930}{\rdiagovsearrow }{\mathord}{rising diagonal crossing south east arrow}%
+\UnicodeMathSymbol{"02931}{\neovnwarrow }{\mathord}{north east arrow crossing north west arrow}%
+\UnicodeMathSymbol{"02932}{\nwovnearrow }{\mathord}{north west arrow crossing north east arrow}%
+\UnicodeMathSymbol{"02933}{\rightcurvedarrow }{\mathrel}{wave arrow pointing directly right}%
+\UnicodeMathSymbol{"02934}{\uprightcurvearrow }{\mathord}{arrow pointing rightwards then curving upwards}%
+\UnicodeMathSymbol{"02935}{\downrightcurvedarrow }{\mathord}{arrow pointing rightwards then curving downwards}%
+\UnicodeMathSymbol{"02936}{\leftdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving leftwards}%
+\UnicodeMathSymbol{"02937}{\rightdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving rightwards}%
+\UnicodeMathSymbol{"02938}{\cwrightarcarrow }{\mathrel}{right-side arc clockwise arrow}%
+\UnicodeMathSymbol{"02939}{\acwleftarcarrow }{\mathrel}{left-side arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293A}{\acwoverarcarrow }{\mathrel}{top arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293B}{\acwunderarcarrow }{\mathrel}{bottom arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293C}{\curvearrowrightminus }{\mathrel}{top arc clockwise arrow with minus}%
+\UnicodeMathSymbol{"0293D}{\curvearrowleftplus }{\mathrel}{top arc anticlockwise arrow with plus}%
+\UnicodeMathSymbol{"0293E}{\cwundercurvearrow }{\mathrel}{lower right semicircular clockwise arrow}%
+\UnicodeMathSymbol{"0293F}{\ccwundercurvearrow }{\mathrel}{lower left semicircular anticlockwise arrow}%
+\UnicodeMathSymbol{"02940}{\acwcirclearrow }{\mathrel}{anticlockwise closed circle arrow}%
+\UnicodeMathSymbol{"02941}{\cwcirclearrow }{\mathrel}{clockwise closed circle arrow}%
+\UnicodeMathSymbol{"02942}{\rightarrowshortleftarrow }{\mathrel}{rightwards arrow above short leftwards arrow}%
+\UnicodeMathSymbol{"02943}{\leftarrowshortrightarrow }{\mathrel}{leftwards arrow above short rightwards arrow}%
+\UnicodeMathSymbol{"02944}{\shortrightarrowleftarrow }{\mathrel}{short rightwards arrow above leftwards arrow}%
+\UnicodeMathSymbol{"02945}{\rightarrowplus }{\mathrel}{rightwards arrow with plus below}%
+\UnicodeMathSymbol{"02946}{\leftarrowplus }{\mathrel}{leftwards arrow with plus below}%
+\UnicodeMathSymbol{"02947}{\rightarrowx }{\mathrel}{rightwards arrow through x}%
+\UnicodeMathSymbol{"02948}{\leftrightarrowcircle }{\mathrel}{left right arrow through small circle}%
+\UnicodeMathSymbol{"02949}{\twoheaduparrowcircle }{\mathrel}{upwards two-headed arrow from small circle}%
+\UnicodeMathSymbol{"0294A}{\leftrightharpoonupdown }{\mathrel}{left barb up right barb down harpoon}%
+\UnicodeMathSymbol{"0294B}{\leftrightharpoondownup }{\mathrel}{left barb down right barb up harpoon}%
+\UnicodeMathSymbol{"0294C}{\updownharpoonrightleft }{\mathrel}{up barb right down barb left harpoon}%
+\UnicodeMathSymbol{"0294D}{\updownharpoonleftright }{\mathrel}{up barb left down barb right harpoon}%
+\UnicodeMathSymbol{"0294E}{\leftrightharpoonupup }{\mathrel}{left barb up right barb up harpoon}%
+\UnicodeMathSymbol{"0294F}{\updownharpoonrightright }{\mathrel}{up barb right down barb right harpoon}%
+\UnicodeMathSymbol{"02950}{\leftrightharpoondowndown }{\mathrel}{left barb down right barb down harpoon}%
+\UnicodeMathSymbol{"02951}{\updownharpoonleftleft }{\mathrel}{up barb left down barb left harpoon}%
+\UnicodeMathSymbol{"02952}{\barleftharpoonup }{\mathrel}{leftwards harpoon with barb up to bar}%
+\UnicodeMathSymbol{"02953}{\rightharpoonupbar }{\mathrel}{rightwards harpoon with barb up to bar}%
+\UnicodeMathSymbol{"02954}{\barupharpoonright }{\mathrel}{upwards harpoon with barb right to bar}%
+\UnicodeMathSymbol{"02955}{\downharpoonrightbar }{\mathrel}{downwards harpoon with barb right to bar}%
+\UnicodeMathSymbol{"02956}{\barleftharpoondown }{\mathrel}{leftwards harpoon with barb down to bar}%
+\UnicodeMathSymbol{"02957}{\rightharpoondownbar }{\mathrel}{rightwards harpoon with barb down to bar}%
+\UnicodeMathSymbol{"02958}{\barupharpoonleft }{\mathrel}{upwards harpoon with barb left to bar}%
+\UnicodeMathSymbol{"02959}{\downharpoonleftbar }{\mathrel}{downwards harpoon with barb left to bar}%
+\UnicodeMathSymbol{"0295A}{\leftharpoonupbar }{\mathrel}{leftwards harpoon with barb up from bar}%
+\UnicodeMathSymbol{"0295B}{\barrightharpoonup }{\mathrel}{rightwards harpoon with barb up from bar}%
+\UnicodeMathSymbol{"0295C}{\upharpoonrightbar }{\mathrel}{upwards harpoon with barb right from bar}%
+\UnicodeMathSymbol{"0295D}{\bardownharpoonright }{\mathrel}{downwards harpoon with barb right from bar}%
+\UnicodeMathSymbol{"0295E}{\leftharpoondownbar }{\mathrel}{leftwards harpoon with barb down from bar}%
+\UnicodeMathSymbol{"0295F}{\barrightharpoondown }{\mathrel}{rightwards harpoon with barb down from bar}%
+\UnicodeMathSymbol{"02960}{\upharpoonleftbar }{\mathrel}{upwards harpoon with barb left from bar}%
+\UnicodeMathSymbol{"02961}{\bardownharpoonleft }{\mathrel}{downwards harpoon with barb left from bar}%
+\UnicodeMathSymbol{"02962}{\leftharpoonsupdown }{\mathrel}{leftwards harpoon with barb up above leftwards harpoon with barb down}%
+\UnicodeMathSymbol{"02963}{\upharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside upwards harpoon with barb right}%
+\UnicodeMathSymbol{"02964}{\rightharpoonsupdown }{\mathrel}{rightwards harpoon with barb up above rightwards harpoon with barb down}%
+\UnicodeMathSymbol{"02965}{\downharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside downwards harpoon with barb right}%
+\UnicodeMathSymbol{"02966}{\leftrightharpoonsup }{\mathrel}{leftwards harpoon with barb up above rightwards harpoon with barb up}%
+\UnicodeMathSymbol{"02967}{\leftrightharpoonsdown }{\mathrel}{leftwards harpoon with barb down above rightwards harpoon with barb down}%
+\UnicodeMathSymbol{"02968}{\rightleftharpoonsup }{\mathrel}{rightwards harpoon with barb up above leftwards harpoon with barb up}%
+\UnicodeMathSymbol{"02969}{\rightleftharpoonsdown }{\mathrel}{rightwards harpoon with barb down above leftwards harpoon with barb down}%
+\UnicodeMathSymbol{"0296A}{\leftharpoonupdash }{\mathrel}{leftwards harpoon with barb up above long dash}%
+\UnicodeMathSymbol{"0296B}{\dashleftharpoondown }{\mathrel}{leftwards harpoon with barb down below long dash}%
+\UnicodeMathSymbol{"0296C}{\rightharpoonupdash }{\mathrel}{rightwards harpoon with barb up above long dash}%
+\UnicodeMathSymbol{"0296D}{\dashrightharpoondown }{\mathrel}{rightwards harpoon with barb down below long dash}%
+\UnicodeMathSymbol{"0296E}{\updownharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside downwards harpoon with barb right}%
+\UnicodeMathSymbol{"0296F}{\downupharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside upwards harpoon with barb right}%
+\UnicodeMathSymbol{"02970}{\rightimply }{\mathrel}{right double arrow with rounded head}%
+\UnicodeMathSymbol{"02971}{\equalrightarrow }{\mathrel}{equals sign above rightwards arrow}%
+\UnicodeMathSymbol{"02972}{\similarrightarrow }{\mathrel}{tilde operator above rightwards arrow}%
+\UnicodeMathSymbol{"02973}{\leftarrowsimilar }{\mathrel}{leftwards arrow above tilde operator}%
+\UnicodeMathSymbol{"02974}{\rightarrowsimilar }{\mathrel}{rightwards arrow above tilde operator}%
+\UnicodeMathSymbol{"02975}{\rightarrowapprox }{\mathrel}{rightwards arrow above almost equal to}%
+\UnicodeMathSymbol{"02976}{\ltlarr }{\mathrel}{less-than above leftwards arrow}%
+\UnicodeMathSymbol{"02977}{\leftarrowless }{\mathrel}{leftwards arrow through less-than}%
+\UnicodeMathSymbol{"02978}{\gtrarr }{\mathrel}{greater-than above rightwards arrow}%
+\UnicodeMathSymbol{"02979}{\subrarr }{\mathrel}{subset above rightwards arrow}%
+\UnicodeMathSymbol{"0297A}{\leftarrowsubset }{\mathrel}{leftwards arrow through subset}%
+\UnicodeMathSymbol{"0297B}{\suplarr }{\mathrel}{superset above leftwards arrow}%
+\UnicodeMathSymbol{"0297C}{\leftfishtail }{\mathrel}{left fish tail}%
+\UnicodeMathSymbol{"0297D}{\rightfishtail }{\mathrel}{right fish tail}%
+\UnicodeMathSymbol{"0297E}{\upfishtail }{\mathrel}{up fish tail}%
+\UnicodeMathSymbol{"0297F}{\downfishtail }{\mathrel}{down fish tail}%
+\UnicodeMathSymbol{"02980}{\Vvert }{\mathfence}{triple vertical bar delimiter}%
+\UnicodeMathSymbol{"02981}{\mdsmblkcircle }{\mathord}{z notation spot}%
+\UnicodeMathSymbol{"02982}{\typecolon }{\mathrel}{z notation type colon}%
+\UnicodeMathSymbol{"02983}{\lBrace }{\mathopen}{left white curly bracket}%
+\UnicodeMathSymbol{"02984}{\rBrace }{\mathclose}{right white curly bracket}%
+\UnicodeMathSymbol{"02985}{\lParen }{\mathopen}{left white parenthesis}%
+\UnicodeMathSymbol{"02986}{\rParen }{\mathclose}{right white parenthesis}%
+\UnicodeMathSymbol{"02987}{\llparenthesis }{\mathopen}{z notation left image bracket}%
+\UnicodeMathSymbol{"02988}{\rrparenthesis }{\mathclose}{z notation right image bracket}%
+\UnicodeMathSymbol{"02989}{\llangle }{\mathopen}{z notation left binding bracket}%
+\UnicodeMathSymbol{"0298A}{\rrangle }{\mathclose}{z notation right binding bracket}%
+\UnicodeMathSymbol{"0298B}{\lbrackubar }{\mathopen}{left square bracket with underbar}%
+\UnicodeMathSymbol{"0298C}{\rbrackubar }{\mathclose}{right square bracket with underbar}%
+\UnicodeMathSymbol{"0298D}{\lbrackultick }{\mathopen}{left square bracket with tick in top corner}%
+\UnicodeMathSymbol{"0298E}{\rbracklrtick }{\mathclose}{right square bracket with tick in bottom corner}%
+\UnicodeMathSymbol{"0298F}{\lbracklltick }{\mathopen}{left square bracket with tick in bottom corner}%
+\UnicodeMathSymbol{"02990}{\rbrackurtick }{\mathclose}{right square bracket with tick in top corner}%
+\UnicodeMathSymbol{"02991}{\langledot }{\mathopen}{left angle bracket with dot}%
+\UnicodeMathSymbol{"02992}{\rangledot }{\mathclose}{right angle bracket with dot}%
+\UnicodeMathSymbol{"02993}{\lparenless }{\mathopen}{left arc less-than bracket}%
+\UnicodeMathSymbol{"02994}{\rparengtr }{\mathclose}{right arc greater-than bracket}%
+\UnicodeMathSymbol{"02995}{\Lparengtr }{\mathopen}{double left arc greater-than bracket}%
+\UnicodeMathSymbol{"02996}{\Rparenless }{\mathclose}{double right arc less-than bracket}%
+\UnicodeMathSymbol{"02997}{\lblkbrbrak }{\mathopen}{left black tortoise shell bracket}%
+\UnicodeMathSymbol{"02998}{\rblkbrbrak }{\mathclose}{right black tortoise shell bracket}%
+\UnicodeMathSymbol{"02999}{\fourvdots }{\mathord}{dotted fence}%
+\UnicodeMathSymbol{"0299A}{\vzigzag }{\mathord}{vertical zigzag line}%
+\UnicodeMathSymbol{"0299B}{\measuredangleleft }{\mathord}{measured angle opening left}%
+\UnicodeMathSymbol{"0299C}{\rightanglesqr }{\mathord}{right angle variant with square}%
+\UnicodeMathSymbol{"0299D}{\rightanglemdot }{\mathord}{measured right angle with dot}%
+\UnicodeMathSymbol{"0299E}{\angles }{\mathord}{angle with s inside}%
+\UnicodeMathSymbol{"0299F}{\angdnr }{\mathord}{acute angle}%
+\UnicodeMathSymbol{"029A0}{\gtlpar }{\mathord}{spherical angle opening left}%
+\UnicodeMathSymbol{"029A1}{\sphericalangleup }{\mathord}{spherical angle opening up}%
+\UnicodeMathSymbol{"029A2}{\turnangle }{\mathord}{turned angle}%
+\UnicodeMathSymbol{"029A3}{\revangle }{\mathord}{reversed angle}%
+\UnicodeMathSymbol{"029A4}{\angleubar }{\mathord}{angle with underbar}%
+\UnicodeMathSymbol{"029A5}{\revangleubar }{\mathord}{reversed angle with underbar}%
+\UnicodeMathSymbol{"029A6}{\wideangledown }{\mathord}{oblique angle opening up}%
+\UnicodeMathSymbol{"029A7}{\wideangleup }{\mathord}{oblique angle opening down}%
+\UnicodeMathSymbol{"029A8}{\measanglerutone }{\mathord}{measured angle with open arm ending in arrow pointing up and right}%
+\UnicodeMathSymbol{"029A9}{\measanglelutonw }{\mathord}{measured angle with open arm ending in arrow pointing up and left}%
+\UnicodeMathSymbol{"029AA}{\measanglerdtose }{\mathord}{measured angle with open arm ending in arrow pointing down and right}%
+\UnicodeMathSymbol{"029AB}{\measangleldtosw }{\mathord}{measured angle with open arm ending in arrow pointing down and left}%
+\UnicodeMathSymbol{"029AC}{\measangleurtone }{\mathord}{measured angle with open arm ending in arrow pointing right and up}%
+\UnicodeMathSymbol{"029AD}{\measangleultonw }{\mathord}{measured angle with open arm ending in arrow pointing left and up}%
+\UnicodeMathSymbol{"029AE}{\measangledrtose }{\mathord}{measured angle with open arm ending in arrow pointing right and down}%
+\UnicodeMathSymbol{"029AF}{\measangledltosw }{\mathord}{measured angle with open arm ending in arrow pointing left and down}%
+\UnicodeMathSymbol{"029B0}{\revemptyset }{\mathord}{reversed empty set}%
+\UnicodeMathSymbol{"029B1}{\emptysetobar }{\mathord}{empty set with overbar}%
+\UnicodeMathSymbol{"029B2}{\emptysetocirc }{\mathord}{empty set with small circle above}%
+\UnicodeMathSymbol{"029B3}{\emptysetoarr }{\mathord}{empty set with right arrow above}%
+\UnicodeMathSymbol{"029B4}{\emptysetoarrl }{\mathord}{empty set with left arrow above}%
+\UnicodeMathSymbol{"029B5}{\circlehbar }{\mathbin}{circle with horizontal bar}%
+\UnicodeMathSymbol{"029B6}{\circledvert }{\mathbin}{circled vertical bar}%
+\UnicodeMathSymbol{"029B7}{\circledparallel }{\mathbin}{circled parallel}%
+\UnicodeMathSymbol{"029B8}{\obslash }{\mathbin}{circled reverse solidus}%
+\UnicodeMathSymbol{"029B9}{\operp }{\mathbin}{circled perpendicular}%
+\UnicodeMathSymbol{"029BA}{\obot }{\mathord}{circle divided by horizontal bar and top half divided by vertical bar}%
+\UnicodeMathSymbol{"029BB}{\olcross }{\mathord}{circle with superimposed x}%
+\UnicodeMathSymbol{"029BC}{\odotslashdot }{\mathord}{circled anticlockwise-rotated division sign}%
+\UnicodeMathSymbol{"029BD}{\uparrowoncircle }{\mathord}{up arrow through circle}%
+\UnicodeMathSymbol{"029BE}{\circledwhitebullet }{\mathord}{circled white bullet}%
+\UnicodeMathSymbol{"029BF}{\circledbullet }{\mathord}{circled bullet}%
+\UnicodeMathSymbol{"029C0}{\olessthan }{\mathbin}{circled less-than}%
+\UnicodeMathSymbol{"029C1}{\ogreaterthan }{\mathbin}{circled greater-than}%
+\UnicodeMathSymbol{"029C2}{\cirscir }{\mathord}{circle with small circle to the right}%
+\UnicodeMathSymbol{"029C3}{\cirE }{\mathord}{circle with two horizontal strokes to the right}%
+\UnicodeMathSymbol{"029C4}{\boxdiag }{\mathbin}{squared rising diagonal slash}%
+\UnicodeMathSymbol{"029C5}{\boxbslash }{\mathbin}{squared falling diagonal slash}%
+\UnicodeMathSymbol{"029C6}{\boxast }{\mathbin}{squared asterisk}%
+\UnicodeMathSymbol{"029C7}{\boxcircle }{\mathbin}{squared small circle}%
+\UnicodeMathSymbol{"029C8}{\boxbox }{\mathbin}{squared square}%
+\UnicodeMathSymbol{"029C9}{\boxonbox }{\mathord}{two joined squares}%
+\UnicodeMathSymbol{"029CA}{\triangleodot }{\mathord}{triangle with dot above}%
+\UnicodeMathSymbol{"029CB}{\triangleubar }{\mathord}{triangle with underbar}%
+\UnicodeMathSymbol{"029CC}{\triangles }{\mathord}{s in triangle}%
+\UnicodeMathSymbol{"029CD}{\triangleserifs }{\mathbin}{triangle with serifs at bottom}%
+\UnicodeMathSymbol{"029CE}{\rtriltri }{\mathrel}{right triangle above left triangle}%
+\UnicodeMathSymbol{"029CF}{\ltrivb }{\mathrel}{left triangle beside vertical bar}%
+\UnicodeMathSymbol{"029D0}{\vbrtri }{\mathrel}{vertical bar beside right triangle}%
+\UnicodeMathSymbol{"029D1}{\lfbowtie }{\mathrel}{left black bowtie}%
+\UnicodeMathSymbol{"029D2}{\rfbowtie }{\mathrel}{right black bowtie}%
+\UnicodeMathSymbol{"029D3}{\fbowtie }{\mathrel}{black bowtie}%
+\UnicodeMathSymbol{"029D4}{\lftimes }{\mathrel}{left black times}%
+\UnicodeMathSymbol{"029D5}{\rftimes }{\mathrel}{right black times}%
+\UnicodeMathSymbol{"029D6}{\hourglass }{\mathbin}{white hourglass}%
+\UnicodeMathSymbol{"029D7}{\blackhourglass }{\mathbin}{black hourglass}%
+\UnicodeMathSymbol{"029D8}{\lvzigzag }{\mathopen}{left wiggly fence}%
+\UnicodeMathSymbol{"029D9}{\rvzigzag }{\mathclose}{right wiggly fence}%
+\UnicodeMathSymbol{"029DA}{\Lvzigzag }{\mathopen}{left double wiggly fence}%
+\UnicodeMathSymbol{"029DB}{\Rvzigzag }{\mathclose}{right double wiggly fence}%
+\UnicodeMathSymbol{"029DC}{\iinfin }{\mathord}{incomplete infinity}%
+\UnicodeMathSymbol{"029DD}{\tieinfty }{\mathord}{tie over infinity}%
+\UnicodeMathSymbol{"029DE}{\nvinfty }{\mathord}{infinity negated with vertical bar}%
+\UnicodeMathSymbol{"029DF}{\dualmap }{\mathrel}{double-ended multimap}%
+\UnicodeMathSymbol{"029E0}{\laplac }{\mathord}{square with contoured outline}%
+\UnicodeMathSymbol{"029E1}{\lrtriangleeq }{\mathrel}{increases as}%
+\UnicodeMathSymbol{"029E2}{\shuffle }{\mathbin}{shuffle product}%
+\UnicodeMathSymbol{"029E3}{\eparsl }{\mathrel}{equals sign and slanted parallel}%
+\UnicodeMathSymbol{"029E4}{\smeparsl }{\mathrel}{equals sign and slanted parallel with tilde above}%
+\UnicodeMathSymbol{"029E5}{\eqvparsl }{\mathrel}{identical to and slanted parallel}%
+\UnicodeMathSymbol{"029E6}{\gleichstark }{\mathrel}{gleich stark}%
+\UnicodeMathSymbol{"029E7}{\thermod }{\mathord}{thermodynamic}%
+\UnicodeMathSymbol{"029E8}{\downtriangleleftblack }{\mathord}{down-pointing triangle with left half black}%
+\UnicodeMathSymbol{"029E9}{\downtrianglerightblack }{\mathord}{down-pointing triangle with right half black}%
+\UnicodeMathSymbol{"029EA}{\blackdiamonddownarrow }{\mathord}{black diamond with down arrow}%
+\UnicodeMathSymbol{"029EB}{\mdlgblklozenge }{\mathbin}{black lozenge}%
+\UnicodeMathSymbol{"029EC}{\circledownarrow }{\mathord}{white circle with down arrow}%
+\UnicodeMathSymbol{"029ED}{\blackcircledownarrow }{\mathord}{black circle with down arrow}%
+\UnicodeMathSymbol{"029EE}{\errbarsquare }{\mathord}{error-barred white square}%
+\UnicodeMathSymbol{"029EF}{\errbarblacksquare }{\mathord}{error-barred black square}%
+\UnicodeMathSymbol{"029F0}{\errbardiamond }{\mathord}{error-barred white diamond}%
+\UnicodeMathSymbol{"029F1}{\errbarblackdiamond }{\mathord}{error-barred black diamond}%
+\UnicodeMathSymbol{"029F2}{\errbarcircle }{\mathord}{error-barred white circle}%
+\UnicodeMathSymbol{"029F3}{\errbarblackcircle }{\mathord}{error-barred black circle}%
+\UnicodeMathSymbol{"029F4}{\ruledelayed }{\mathrel}{rule-delayed}%
+\UnicodeMathSymbol{"029F5}{\setminus }{\mathbin}{reverse solidus operator}%
+\UnicodeMathSymbol{"029F6}{\dsol }{\mathbin}{solidus with overbar}%
+\UnicodeMathSymbol{"029F7}{\rsolbar }{\mathbin}{reverse solidus with horizontal stroke}%
+\UnicodeMathSymbol{"029F8}{\xsol }{\mathop}{big solidus}%
+\UnicodeMathSymbol{"029F9}{\xbsol }{\mathop}{big reverse solidus}%
+\UnicodeMathSymbol{"029FA}{\doubleplus }{\mathbin}{double plus}%
+\UnicodeMathSymbol{"029FB}{\tripleplus }{\mathbin}{triple plus}%
+\UnicodeMathSymbol{"029FC}{\lcurvyangle }{\mathopen}{left pointing curved angle bracket}%
+\UnicodeMathSymbol{"029FD}{\rcurvyangle }{\mathclose}{right pointing curved angle bracket}%
+\UnicodeMathSymbol{"029FE}{\tplus }{\mathbin}{tiny}%
+\UnicodeMathSymbol{"029FF}{\tminus }{\mathbin}{miny}%
+\UnicodeMathSymbol{"02A00}{\bigodot }{\mathop}{n-ary circled dot operator}%
+\UnicodeMathSymbol{"02A01}{\bigoplus }{\mathop}{n-ary circled plus operator}%
+\UnicodeMathSymbol{"02A02}{\bigotimes }{\mathop}{n-ary circled times operator}%
+\UnicodeMathSymbol{"02A03}{\bigcupdot }{\mathop}{n-ary union operator with dot}%
+\UnicodeMathSymbol{"02A04}{\biguplus }{\mathop}{n-ary union operator with plus}%
+\UnicodeMathSymbol{"02A05}{\bigsqcap }{\mathop}{n-ary square intersection operator}%
+\UnicodeMathSymbol{"02A06}{\bigsqcup }{\mathop}{n-ary square union operator}%
+\UnicodeMathSymbol{"02A07}{\conjquant }{\mathop}{two logical and operator}%
+\UnicodeMathSymbol{"02A08}{\disjquant }{\mathop}{two logical or operator}%
+\UnicodeMathSymbol{"02A09}{\bigtimes }{\mathop}{n-ary times operator}%
+\UnicodeMathSymbol{"02A0A}{\modtwosum }{\mathop}{modulo two sum}%
+\UnicodeMathSymbol{"02A0B}{\sumint }{\mathop}{summation with integral}%
+\UnicodeMathSymbol{"02A0C}{\iiiint }{\mathop}{quadruple integral operator}%
+\UnicodeMathSymbol{"02A0D}{\intbar }{\mathop}{finite part integral}%
+\UnicodeMathSymbol{"02A0E}{\intBar }{\mathop}{integral with double stroke}%
+\UnicodeMathSymbol{"02A0F}{\fint }{\mathop}{integral average with slash}%
+\UnicodeMathSymbol{"02A10}{\cirfnint }{\mathop}{circulation function}%
+\UnicodeMathSymbol{"02A11}{\awint }{\mathop}{anticlockwise integration}%
+\UnicodeMathSymbol{"02A12}{\rppolint }{\mathop}{line integration with rectangular path around pole}%
+\UnicodeMathSymbol{"02A13}{\scpolint }{\mathop}{line integration with semicircular path around pole}%
+\UnicodeMathSymbol{"02A14}{\npolint }{\mathop}{line integration not including the pole}%
+\UnicodeMathSymbol{"02A15}{\pointint }{\mathop}{integral around a point operator}%
+\UnicodeMathSymbol{"02A16}{\sqint }{\mathop}{quaternion integral operator}%
+\UnicodeMathSymbol{"02A17}{\intlarhk }{\mathop}{integral with leftwards arrow with hook}%
+\UnicodeMathSymbol{"02A18}{\intx }{\mathop}{integral with times sign}%
+\UnicodeMathSymbol{"02A19}{\intcap }{\mathop}{integral with intersection}%
+\UnicodeMathSymbol{"02A1A}{\intcup }{\mathop}{integral with union}%
+\UnicodeMathSymbol{"02A1B}{\upint }{\mathop}{integral with overbar}%
+\UnicodeMathSymbol{"02A1C}{\lowint }{\mathop}{integral with underbar}%
+\UnicodeMathSymbol{"02A1D}{\Join }{\mathop}{join}%
+\UnicodeMathSymbol{"02A1E}{\bigtriangleleft }{\mathop}{large left triangle operator}%
+\UnicodeMathSymbol{"02A1F}{\zcmp }{\mathop}{z notation schema composition}%
+\UnicodeMathSymbol{"02A20}{\zpipe }{\mathop}{z notation schema piping}%
+\UnicodeMathSymbol{"02A21}{\zproject }{\mathop}{z notation schema projection}%
+\UnicodeMathSymbol{"02A22}{\ringplus }{\mathbin}{plus sign with small circle above}%
+\UnicodeMathSymbol{"02A23}{\plushat }{\mathbin}{plus sign with circumflex accent above}%
+\UnicodeMathSymbol{"02A24}{\simplus }{\mathbin}{plus sign with tilde above}%
+\UnicodeMathSymbol{"02A25}{\plusdot }{\mathbin}{plus sign with dot below}%
+\UnicodeMathSymbol{"02A26}{\plussim }{\mathbin}{plus sign with tilde below}%
+\UnicodeMathSymbol{"02A27}{\plussubtwo }{\mathbin}{plus sign with subscript two}%
+\UnicodeMathSymbol{"02A28}{\plustrif }{\mathbin}{plus sign with black triangle}%
+\UnicodeMathSymbol{"02A29}{\commaminus }{\mathbin}{minus sign with comma above}%
+\UnicodeMathSymbol{"02A2A}{\minusdot }{\mathbin}{minus sign with dot below}%
+\UnicodeMathSymbol{"02A2B}{\minusfdots }{\mathbin}{minus sign with falling dots}%
+\UnicodeMathSymbol{"02A2C}{\minusrdots }{\mathbin}{minus sign with rising dots}%
+\UnicodeMathSymbol{"02A2D}{\opluslhrim }{\mathbin}{plus sign in left half circle}%
+\UnicodeMathSymbol{"02A2E}{\oplusrhrim }{\mathbin}{plus sign in right half circle}%
+\UnicodeMathSymbol{"02A2F}{\vectimes }{\mathbin}{vector or cross product}%
+\UnicodeMathSymbol{"02A30}{\dottimes }{\mathbin}{multiplication sign with dot above}%
+\UnicodeMathSymbol{"02A31}{\timesbar }{\mathbin}{multiplication sign with underbar}%
+\UnicodeMathSymbol{"02A32}{\btimes }{\mathbin}{semidirect product with bottom closed}%
+\UnicodeMathSymbol{"02A33}{\smashtimes }{\mathbin}{smash product}%
+\UnicodeMathSymbol{"02A34}{\otimeslhrim }{\mathbin}{multiplication sign in left half circle}%
+\UnicodeMathSymbol{"02A35}{\otimesrhrim }{\mathbin}{multiplication sign in right half circle}%
+\UnicodeMathSymbol{"02A36}{\otimeshat }{\mathbin}{circled multiplication sign with circumflex accent}%
+\UnicodeMathSymbol{"02A37}{\Otimes }{\mathbin}{multiplication sign in double circle}%
+\UnicodeMathSymbol{"02A38}{\odiv }{\mathbin}{circled division sign}%
+\UnicodeMathSymbol{"02A39}{\triangleplus }{\mathbin}{plus sign in triangle}%
+\UnicodeMathSymbol{"02A3A}{\triangleminus }{\mathbin}{minus sign in triangle}%
+\UnicodeMathSymbol{"02A3B}{\triangletimes }{\mathbin}{multiplication sign in triangle}%
+\UnicodeMathSymbol{"02A3C}{\intprod }{\mathbin}{interior product}%
+\UnicodeMathSymbol{"02A3D}{\intprodr }{\mathbin}{righthand interior product}%
+\UnicodeMathSymbol{"02A3E}{\fcmp }{\mathbin}{z notation relational composition}%
+\UnicodeMathSymbol{"02A3F}{\amalg }{\mathbin}{amalgamation or coproduct}%
+\UnicodeMathSymbol{"02A40}{\capdot }{\mathbin}{intersection with dot}%
+\UnicodeMathSymbol{"02A41}{\uminus }{\mathbin}{union with minus sign}%
+\UnicodeMathSymbol{"02A42}{\barcup }{\mathbin}{union with overbar}%
+\UnicodeMathSymbol{"02A43}{\barcap }{\mathbin}{intersection with overbar}%
+\UnicodeMathSymbol{"02A44}{\capwedge }{\mathbin}{intersection with logical and}%
+\UnicodeMathSymbol{"02A45}{\cupvee }{\mathbin}{union with logical or}%
+\UnicodeMathSymbol{"02A46}{\cupovercap }{\mathbin}{union above intersection}%
+\UnicodeMathSymbol{"02A47}{\capovercup }{\mathbin}{intersection above union}%
+\UnicodeMathSymbol{"02A48}{\cupbarcap }{\mathbin}{union above bar above intersection}%
+\UnicodeMathSymbol{"02A49}{\capbarcup }{\mathbin}{intersection above bar above union}%
+\UnicodeMathSymbol{"02A4A}{\twocups }{\mathbin}{union beside and joined with union}%
+\UnicodeMathSymbol{"02A4B}{\twocaps }{\mathbin}{intersection beside and joined with intersection}%
+\UnicodeMathSymbol{"02A4C}{\closedvarcup }{\mathbin}{closed union with serifs}%
+\UnicodeMathSymbol{"02A4D}{\closedvarcap }{\mathbin}{closed intersection with serifs}%
+\UnicodeMathSymbol{"02A4E}{\Sqcap }{\mathbin}{double square intersection}%
+\UnicodeMathSymbol{"02A4F}{\Sqcup }{\mathbin}{double square union}%
+\UnicodeMathSymbol{"02A50}{\closedvarcupsmashprod }{\mathbin}{closed union with serifs and smash product}%
+\UnicodeMathSymbol{"02A51}{\wedgeodot }{\mathbin}{logical and with dot above}%
+\UnicodeMathSymbol{"02A52}{\veeodot }{\mathbin}{logical or with dot above}%
+\UnicodeMathSymbol{"02A53}{\Wedge }{\mathbin}{double logical and}%
+\UnicodeMathSymbol{"02A54}{\Vee }{\mathbin}{double logical or}%
+\UnicodeMathSymbol{"02A55}{\wedgeonwedge }{\mathbin}{two intersecting logical and}%
+\UnicodeMathSymbol{"02A56}{\veeonvee }{\mathbin}{two intersecting logical or}%
+\UnicodeMathSymbol{"02A57}{\bigslopedvee }{\mathbin}{sloping large or}%
+\UnicodeMathSymbol{"02A58}{\bigslopedwedge }{\mathbin}{sloping large and}%
+\UnicodeMathSymbol{"02A59}{\veeonwedge }{\mathrel}{logical or overlapping logical and}%
+\UnicodeMathSymbol{"02A5A}{\wedgemidvert }{\mathbin}{logical and with middle stem}%
+\UnicodeMathSymbol{"02A5B}{\veemidvert }{\mathbin}{logical or with middle stem}%
+\UnicodeMathSymbol{"02A5C}{\midbarwedge }{\mathbin}{ogical and with horizontal dash}%
+\UnicodeMathSymbol{"02A5D}{\midbarvee }{\mathbin}{logical or with horizontal dash}%
+\UnicodeMathSymbol{"02A5E}{\doublebarwedge }{\mathbin}{logical and with double overbar}%
+\UnicodeMathSymbol{"02A5F}{\wedgebar }{\mathbin}{logical and with underbar}%
+\UnicodeMathSymbol{"02A60}{\wedgedoublebar }{\mathbin}{logical and with double underbar}%
+\UnicodeMathSymbol{"02A61}{\varveebar }{\mathbin}{small vee with underbar}%
+\UnicodeMathSymbol{"02A62}{\doublebarvee }{\mathbin}{logical or with double overbar}%
+\UnicodeMathSymbol{"02A63}{\veedoublebar }{\mathbin}{logical or with double underbar}%
+\UnicodeMathSymbol{"02A64}{\dsub }{\mathbin}{z notation domain antirestriction}%
+\UnicodeMathSymbol{"02A65}{\rsub }{\mathbin}{z notation range antirestriction}%
+\UnicodeMathSymbol{"02A66}{\eqdot }{\mathrel}{equals sign with dot below}%
+\UnicodeMathSymbol{"02A67}{\dotequiv }{\mathrel}{identical with dot above}%
+\UnicodeMathSymbol{"02A68}{\equivVert }{\mathrel}{triple horizontal bar with double vertical stroke}%
+\UnicodeMathSymbol{"02A69}{\equivVvert }{\mathrel}{triple horizontal bar with triple vertical stroke}%
+\UnicodeMathSymbol{"02A6A}{\dotsim }{\mathrel}{tilde operator with dot above}%
+\UnicodeMathSymbol{"02A6B}{\simrdots }{\mathrel}{tilde operator with rising dots}%
+\UnicodeMathSymbol{"02A6C}{\simminussim }{\mathrel}{similar minus similar}%
+\UnicodeMathSymbol{"02A6D}{\congdot }{\mathrel}{congruent with dot above}%
+\UnicodeMathSymbol{"02A6E}{\asteq }{\mathrel}{equals with asterisk}%
+\UnicodeMathSymbol{"02A6F}{\hatapprox }{\mathrel}{almost equal to with circumflex accent}%
+\UnicodeMathSymbol{"02A70}{\approxeqq }{\mathrel}{approximately equal or equal to}%
+\UnicodeMathSymbol{"02A71}{\eqqplus }{\mathbin}{equals sign above plus sign}%
+\UnicodeMathSymbol{"02A72}{\pluseqq }{\mathbin}{plus sign above equals sign}%
+\UnicodeMathSymbol{"02A73}{\eqqsim }{\mathrel}{equals sign above tilde operator}%
+\UnicodeMathSymbol{"02A74}{\Coloneq }{\mathrel}{double colon equal}%
+\UnicodeMathSymbol{"02A75}{\eqeq }{\mathrel}{two consecutive equals signs}%
+\UnicodeMathSymbol{"02A76}{\eqeqeq }{\mathrel}{three consecutive equals signs}%
+\UnicodeMathSymbol{"02A77}{\ddotseq }{\mathrel}{equals sign with two dots above and two dots below}%
+\UnicodeMathSymbol{"02A78}{\equivDD }{\mathrel}{equivalent with four dots above}%
+\UnicodeMathSymbol{"02A79}{\ltcir }{\mathrel}{less-than with circle inside}%
+\UnicodeMathSymbol{"02A7A}{\gtcir }{\mathrel}{greater-than with circle inside}%
+\UnicodeMathSymbol{"02A7B}{\ltquest }{\mathrel}{less-than with question mark above}%
+\UnicodeMathSymbol{"02A7C}{\gtquest }{\mathrel}{greater-than with question mark above}%
+\UnicodeMathSymbol{"02A7D}{\leqslant }{\mathrel}{less-than or slanted equal to}%
+\UnicodeMathSymbol{"02A7E}{\geqslant }{\mathrel}{greater-than or slanted equal to}%
+\UnicodeMathSymbol{"02A7F}{\lesdot }{\mathrel}{less-than or slanted equal to with dot inside}%
+\UnicodeMathSymbol{"02A80}{\gesdot }{\mathrel}{greater-than or slanted equal to with dot inside}%
+\UnicodeMathSymbol{"02A81}{\lesdoto }{\mathrel}{less-than or slanted equal to with dot above}%
+\UnicodeMathSymbol{"02A82}{\gesdoto }{\mathrel}{greater-than or slanted equal to with dot above}%
+\UnicodeMathSymbol{"02A83}{\lesdotor }{\mathrel}{less-than or slanted equal to with dot above right}%
+\UnicodeMathSymbol{"02A84}{\gesdotol }{\mathrel}{greater-than or slanted equal to with dot above left}%
+\UnicodeMathSymbol{"02A85}{\lessapprox }{\mathrel}{less-than or approximate}%
+\UnicodeMathSymbol{"02A86}{\gtrapprox }{\mathrel}{greater-than or approximate}%
+\UnicodeMathSymbol{"02A87}{\lneq }{\mathrel}{less-than and single-line not equal to}%
+\UnicodeMathSymbol{"02A88}{\gneq }{\mathrel}{greater-than and single-line not equal to}%
+\UnicodeMathSymbol{"02A89}{\lnapprox }{\mathrel}{less-than and not approximate}%
+\UnicodeMathSymbol{"02A8A}{\gnapprox }{\mathrel}{greater-than and not approximate}%
+\UnicodeMathSymbol{"02A8B}{\lesseqqgtr }{\mathrel}{less-than above double-line equal above greater-than}%
+\UnicodeMathSymbol{"02A8C}{\gtreqqless }{\mathrel}{greater-than above double-line equal above less-than}%
+\UnicodeMathSymbol{"02A8D}{\lsime }{\mathrel}{less-than above similar or equal}%
+\UnicodeMathSymbol{"02A8E}{\gsime }{\mathrel}{greater-than above similar or equal}%
+\UnicodeMathSymbol{"02A8F}{\lsimg }{\mathrel}{less-than above similar above greater-than}%
+\UnicodeMathSymbol{"02A90}{\gsiml }{\mathrel}{greater-than above similar above less-than}%
+\UnicodeMathSymbol{"02A91}{\lgE }{\mathrel}{less-than above greater-than above double-line equal}%
+\UnicodeMathSymbol{"02A92}{\glE }{\mathrel}{greater-than above less-than above double-line equal}%
+\UnicodeMathSymbol{"02A93}{\lesges }{\mathrel}{less-than above slanted equal above greater-than above slanted equal}%
+\UnicodeMathSymbol{"02A94}{\gesles }{\mathrel}{greater-than above slanted equal above less-than above slanted equal}%
+\UnicodeMathSymbol{"02A95}{\eqslantless }{\mathrel}{slanted equal to or less-than}%
+\UnicodeMathSymbol{"02A96}{\eqslantgtr }{\mathrel}{slanted equal to or greater-than}%
+\UnicodeMathSymbol{"02A97}{\elsdot }{\mathrel}{slanted equal to or less-than with dot inside}%
+\UnicodeMathSymbol{"02A98}{\egsdot }{\mathrel}{slanted equal to or greater-than with dot inside}%
+\UnicodeMathSymbol{"02A99}{\eqqless }{\mathrel}{double-line equal to or less-than}%
+\UnicodeMathSymbol{"02A9A}{\eqqgtr }{\mathrel}{double-line equal to or greater-than}%
+\UnicodeMathSymbol{"02A9B}{\eqqslantless }{\mathrel}{double-line slanted equal to or less-than}%
+\UnicodeMathSymbol{"02A9C}{\eqqslantgtr }{\mathrel}{double-line slanted equal to or greater-than}%
+\UnicodeMathSymbol{"02A9D}{\simless }{\mathrel}{similar or less-than}%
+\UnicodeMathSymbol{"02A9E}{\simgtr }{\mathrel}{similar or greater-than}%
+\UnicodeMathSymbol{"02A9F}{\simlE }{\mathrel}{similar above less-than above equals sign}%
+\UnicodeMathSymbol{"02AA0}{\simgE }{\mathrel}{similar above greater-than above equals sign}%
+\UnicodeMathSymbol{"02AA1}{\Lt }{\mathrel}{double nested less-than}%
+\UnicodeMathSymbol{"02AA2}{\Gt }{\mathrel}{double nested greater-than}%
+\UnicodeMathSymbol{"02AA3}{\partialmeetcontraction }{\mathrel}{double less-than with underbar}%
+\UnicodeMathSymbol{"02AA4}{\glj }{\mathrel}{greater-than overlapping less-than}%
+\UnicodeMathSymbol{"02AA5}{\gla }{\mathrel}{greater-than beside less-than}%
+\UnicodeMathSymbol{"02AA6}{\ltcc }{\mathrel}{less-than closed by curve}%
+\UnicodeMathSymbol{"02AA7}{\gtcc }{\mathrel}{greater-than closed by curve}%
+\UnicodeMathSymbol{"02AA8}{\lescc }{\mathrel}{less-than closed by curve above slanted equal}%
+\UnicodeMathSymbol{"02AA9}{\gescc }{\mathrel}{greater-than closed by curve above slanted equal}%
+\UnicodeMathSymbol{"02AAA}{\smt }{\mathrel}{smaller than}%
+\UnicodeMathSymbol{"02AAB}{\lat }{\mathrel}{larger than}%
+\UnicodeMathSymbol{"02AAC}{\smte }{\mathrel}{smaller than or equal to}%
+\UnicodeMathSymbol{"02AAD}{\late }{\mathrel}{larger than or equal to}%
+\UnicodeMathSymbol{"02AAE}{\bumpeqq }{\mathrel}{equals sign with bumpy above}%
+\UnicodeMathSymbol{"02AAF}{\preceq }{\mathrel}{precedes above single-line equals sign}%
+\UnicodeMathSymbol{"02AB0}{\succeq }{\mathrel}{succeeds above single-line equals sign}%
+\UnicodeMathSymbol{"02AB1}{\precneq }{\mathrel}{precedes above single-line not equal to}%
+\UnicodeMathSymbol{"02AB2}{\succneq }{\mathrel}{succeeds above single-line not equal to}%
+\UnicodeMathSymbol{"02AB3}{\preceqq }{\mathrel}{precedes above equals sign}%
+\UnicodeMathSymbol{"02AB4}{\succeqq }{\mathrel}{succeeds above equals sign}%
+\UnicodeMathSymbol{"02AB5}{\precneqq }{\mathrel}{precedes above not equal to}%
+\UnicodeMathSymbol{"02AB6}{\succneqq }{\mathrel}{succeeds above not equal to}%
+\UnicodeMathSymbol{"02AB7}{\precapprox }{\mathrel}{precedes above almost equal to}%
+\UnicodeMathSymbol{"02AB8}{\succapprox }{\mathrel}{succeeds above almost equal to}%
+\UnicodeMathSymbol{"02AB9}{\precnapprox }{\mathrel}{precedes above not almost equal to}%
+\UnicodeMathSymbol{"02ABA}{\succnapprox }{\mathrel}{succeeds above not almost equal to}%
+\UnicodeMathSymbol{"02ABB}{\Prec }{\mathrel}{double precedes}%
+\UnicodeMathSymbol{"02ABC}{\Succ }{\mathrel}{double succeeds}%
+\UnicodeMathSymbol{"02ABD}{\subsetdot }{\mathrel}{subset with dot}%
+\UnicodeMathSymbol{"02ABE}{\supsetdot }{\mathrel}{superset with dot}%
+\UnicodeMathSymbol{"02ABF}{\subsetplus }{\mathrel}{subset with plus sign below}%
+\UnicodeMathSymbol{"02AC0}{\supsetplus }{\mathrel}{superset with plus sign below}%
+\UnicodeMathSymbol{"02AC1}{\submult }{\mathrel}{subset with multiplication sign below}%
+\UnicodeMathSymbol{"02AC2}{\supmult }{\mathrel}{superset with multiplication sign below}%
+\UnicodeMathSymbol{"02AC3}{\subedot }{\mathrel}{subset of or equal to with dot above}%
+\UnicodeMathSymbol{"02AC4}{\supedot }{\mathrel}{superset of or equal to with dot above}%
+\UnicodeMathSymbol{"02AC5}{\subseteqq }{\mathrel}{subset of above equals sign}%
+\UnicodeMathSymbol{"02AC6}{\supseteqq }{\mathrel}{superset of above equals sign}%
+\UnicodeMathSymbol{"02AC7}{\subsim }{\mathrel}{subset of above tilde operator}%
+\UnicodeMathSymbol{"02AC8}{\supsim }{\mathrel}{superset of above tilde operator}%
+\UnicodeMathSymbol{"02AC9}{\subsetapprox }{\mathrel}{subset of above almost equal to}%
+\UnicodeMathSymbol{"02ACA}{\supsetapprox }{\mathrel}{superset of above almost equal to}%
+\UnicodeMathSymbol{"02ACB}{\subsetneqq }{\mathrel}{subset of above not equal to}%
+\UnicodeMathSymbol{"02ACC}{\supsetneqq }{\mathrel}{superset of above not equal to}%
+\UnicodeMathSymbol{"02ACD}{\lsqhook }{\mathrel}{square left open box operator}%
+\UnicodeMathSymbol{"02ACE}{\rsqhook }{\mathrel}{square right open box operator}%
+\UnicodeMathSymbol{"02ACF}{\csub }{\mathrel}{closed subset}%
+\UnicodeMathSymbol{"02AD0}{\csup }{\mathrel}{closed superset}%
+\UnicodeMathSymbol{"02AD1}{\csube }{\mathrel}{closed subset or equal to}%
+\UnicodeMathSymbol{"02AD2}{\csupe }{\mathrel}{closed superset or equal to}%
+\UnicodeMathSymbol{"02AD3}{\subsup }{\mathrel}{subset above superset}%
+\UnicodeMathSymbol{"02AD4}{\supsub }{\mathrel}{superset above subset}%
+\UnicodeMathSymbol{"02AD5}{\subsub }{\mathrel}{subset above subset}%
+\UnicodeMathSymbol{"02AD6}{\supsup }{\mathrel}{superset above superset}%
+\UnicodeMathSymbol{"02AD7}{\suphsub }{\mathrel}{superset beside subset}%
+\UnicodeMathSymbol{"02AD8}{\supdsub }{\mathrel}{superset beside and joined by dash with subset}%
+\UnicodeMathSymbol{"02AD9}{\forkv }{\mathrel}{element of opening downwards}%
+\UnicodeMathSymbol{"02ADA}{\topfork }{\mathrel}{pitchfork with tee top}%
+\UnicodeMathSymbol{"02ADB}{\mlcp }{\mathrel}{transversal intersection}%
+\UnicodeMathSymbol{"02ADC}{\forks }{\mathrel}{forking}%
+\UnicodeMathSymbol{"02ADD}{\forksnot }{\mathrel}{nonforking}%
+\UnicodeMathSymbol{"02ADE}{\shortlefttack }{\mathrel}{short left tack}%
+\UnicodeMathSymbol{"02ADF}{\shortdowntack }{\mathrel}{short down tack}%
+\UnicodeMathSymbol{"02AE0}{\shortuptack }{\mathrel}{short up tack}%
+\UnicodeMathSymbol{"02AE1}{\perps }{\mathord}{perpendicular with s}%
+\UnicodeMathSymbol{"02AE2}{\vDdash }{\mathrel}{vertical bar triple right turnstile}%
+\UnicodeMathSymbol{"02AE3}{\dashV }{\mathrel}{double vertical bar left turnstile}%
+\UnicodeMathSymbol{"02AE4}{\Dashv }{\mathrel}{vertical bar double left turnstile}%
+\UnicodeMathSymbol{"02AE5}{\DashV }{\mathrel}{double vertical bar double left turnstile}%
+\UnicodeMathSymbol{"02AE6}{\varVdash }{\mathrel}{long dash from left member of double vertical}%
+\UnicodeMathSymbol{"02AE7}{\Barv }{\mathrel}{short down tack with overbar}%
+\UnicodeMathSymbol{"02AE8}{\vBar }{\mathrel}{short up tack with underbar}%
+\UnicodeMathSymbol{"02AE9}{\vBarv }{\mathrel}{short up tack above short down tack}%
+\UnicodeMathSymbol{"02AEA}{\barV }{\mathrel}{double down tack}%
+\UnicodeMathSymbol{"02AEB}{\Vbar }{\mathrel}{double up tack}%
+\UnicodeMathSymbol{"02AEC}{\Not }{\mathrel}{double stroke not sign}%
+\UnicodeMathSymbol{"02AED}{\bNot }{\mathrel}{reversed double stroke not sign}%
+\UnicodeMathSymbol{"02AEE}{\revnmid }{\mathrel}{does not divide with reversed negation slash}%
+\UnicodeMathSymbol{"02AEF}{\cirmid }{\mathrel}{vertical line with circle above}%
+\UnicodeMathSymbol{"02AF0}{\midcir }{\mathrel}{vertical line with circle below}%
+\UnicodeMathSymbol{"02AF1}{\topcir }{\mathord}{down tack with circle below}%
+\UnicodeMathSymbol{"02AF2}{\nhpar }{\mathrel}{parallel with horizontal stroke}%
+\UnicodeMathSymbol{"02AF3}{\parsim }{\mathrel}{parallel with tilde operator}%
+\UnicodeMathSymbol{"02AF4}{\interleave }{\mathbin}{triple vertical bar binary relation}%
+\UnicodeMathSymbol{"02AF5}{\nhVvert }{\mathbin}{triple vertical bar with horizontal stroke}%
+\UnicodeMathSymbol{"02AF6}{\threedotcolon }{\mathbin}{triple colon operator}%
+\UnicodeMathSymbol{"02AF7}{\lllnest }{\mathrel}{stacked very much less-than}%
+\UnicodeMathSymbol{"02AF8}{\gggnest }{\mathrel}{stacked very much greater-than}%
+\UnicodeMathSymbol{"02AF9}{\leqqslant }{\mathrel}{double-line slanted less-than or equal to}%
+\UnicodeMathSymbol{"02AFA}{\geqqslant }{\mathrel}{double-line slanted greater-than or equal to}%
+\UnicodeMathSymbol{"02AFB}{\trslash }{\mathbin}{triple solidus binary relation}%
+\UnicodeMathSymbol{"02AFC}{\biginterleave }{\mathop}{large triple vertical bar operator}%
+\UnicodeMathSymbol{"02AFD}{\sslash }{\mathbin}{double solidus operator}%
+\UnicodeMathSymbol{"02AFE}{\talloblong }{\mathbin}{white vertical bar}%
+\UnicodeMathSymbol{"02AFF}{\bigtalloblong }{\mathop}{n-ary white vertical bar}%
+\UnicodeMathSymbol{"02B12}{\squaretopblack }{\mathord}{square with top half black}%
+\UnicodeMathSymbol{"02B13}{\squarebotblack }{\mathord}{square with bottom half black}%
+\UnicodeMathSymbol{"02B14}{\squareurblack }{\mathord}{square with upper right diagonal half black}%
+\UnicodeMathSymbol{"02B15}{\squarellblack }{\mathord}{square with lower left diagonal half black}%
+\UnicodeMathSymbol{"02B16}{\diamondleftblack }{\mathord}{diamond with left half black}%
+\UnicodeMathSymbol{"02B17}{\diamondrightblack }{\mathord}{diamond with right half black}%
+\UnicodeMathSymbol{"02B18}{\diamondtopblack }{\mathord}{diamond with top half black}%
+\UnicodeMathSymbol{"02B19}{\diamondbotblack }{\mathord}{diamond with bottom half black}%
+\UnicodeMathSymbol{"02B1A}{\dottedsquare }{\mathord}{dotted square}%
+\UnicodeMathSymbol{"02B1B}{\lgblksquare }{\mathord}{black large square}%
+\UnicodeMathSymbol{"02B1C}{\lgwhtsquare }{\mathord}{white large square}%
+\UnicodeMathSymbol{"02B1D}{\vysmblksquare }{\mathord}{black very small square}%
+\UnicodeMathSymbol{"02B1E}{\vysmwhtsquare }{\mathord}{white very small square}%
+\UnicodeMathSymbol{"02B1F}{\pentagonblack }{\mathord}{black pentagon}%
+\UnicodeMathSymbol{"02B20}{\pentagon }{\mathord}{white pentagon}%
+\UnicodeMathSymbol{"02B21}{\varhexagon }{\mathord}{white hexagon}%
+\UnicodeMathSymbol{"02B22}{\varhexagonblack }{\mathord}{black hexagon}%
+\UnicodeMathSymbol{"02B23}{\hexagonblack }{\mathord}{horizontal black hexagon}%
+\UnicodeMathSymbol{"02B24}{\lgblkcircle }{\mathord}{black large circle}%
+\UnicodeMathSymbol{"02B25}{\mdblkdiamond }{\mathord}{black medium diamond}%
+\UnicodeMathSymbol{"02B26}{\mdwhtdiamond }{\mathord}{white medium diamond}%
+\UnicodeMathSymbol{"02B27}{\mdblklozenge }{\mathord}{black medium lozenge}%
+\UnicodeMathSymbol{"02B28}{\mdwhtlozenge }{\mathord}{white medium lozenge}%
+\UnicodeMathSymbol{"02B29}{\smblkdiamond }{\mathord}{black small diamond}%
+\UnicodeMathSymbol{"02B2A}{\smblklozenge }{\mathord}{black small lozenge}%
+\UnicodeMathSymbol{"02B2B}{\smwhtlozenge }{\mathord}{white small lozenge}%
+\UnicodeMathSymbol{"02B2C}{\blkhorzoval }{\mathord}{black horizontal ellipse}%
+\UnicodeMathSymbol{"02B2D}{\whthorzoval }{\mathord}{white horizontal ellipse}%
+\UnicodeMathSymbol{"02B2E}{\blkvertoval }{\mathord}{black vertical ellipse}%
+\UnicodeMathSymbol{"02B2F}{\whtvertoval }{\mathord}{white vertical ellipse}%
+\UnicodeMathSymbol{"02B30}{\circleonleftarrow }{\mathrel}{left arrow with small circle}%
+\UnicodeMathSymbol{"02B31}{\leftthreearrows }{\mathrel}{three leftwards arrows}%
+\UnicodeMathSymbol{"02B32}{\leftarrowonoplus }{\mathrel}{left arrow with circled plus}%
+\UnicodeMathSymbol{"02B33}{\longleftsquigarrow }{\mathrel}{long leftwards squiggle arrow}%
+\UnicodeMathSymbol{"02B34}{\nvtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with vertical stroke}%
+\UnicodeMathSymbol{"02B35}{\nVtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with double vertical stroke}%
+\UnicodeMathSymbol{"02B36}{\twoheadmapsfrom }{\mathrel}{leftwards two-headed arrow from bar}%
+\UnicodeMathSymbol{"02B37}{\twoheadleftdbkarrow }{\mathrel}{leftwards two-headed triple-dash arrow}%
+\UnicodeMathSymbol{"02B38}{\leftdotarrow }{\mathrel}{leftwards arrow with dotted stem}%
+\UnicodeMathSymbol{"02B39}{\nvleftarrowtail }{\mathrel}{leftwards arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02B3A}{\nVleftarrowtail }{\mathrel}{leftwards arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02B3B}{\twoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail}%
+\UnicodeMathSymbol{"02B3C}{\nvtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02B3D}{\nVtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02B3E}{\leftarrowx }{\mathrel}{leftwards arrow through x}%
+\UnicodeMathSymbol{"02B3F}{\leftcurvedarrow }{\mathrel}{wave arrow pointing directly left}%
+\UnicodeMathSymbol{"02B40}{\equalleftarrow }{\mathrel}{equals sign above leftwards arrow}%
+\UnicodeMathSymbol{"02B41}{\bsimilarleftarrow }{\mathrel}{reverse tilde operator above leftwards arrow}%
+\UnicodeMathSymbol{"02B42}{\leftarrowbackapprox }{\mathrel}{leftwards arrow above reverse almost equal to}%
+\UnicodeMathSymbol{"02B43}{\rightarrowgtr }{\mathrel}{rightwards arrow through greater-than}%
+\UnicodeMathSymbol{"02B44}{\rightarrowsupset }{\mathrel}{rightwards arrow through subset}%
+\UnicodeMathSymbol{"02B45}{\LLeftarrow }{\mathrel}{leftwards quadruple arrow}%
+\UnicodeMathSymbol{"02B46}{\RRightarrow }{\mathrel}{rightwards quadruple arrow}%
+\UnicodeMathSymbol{"02B47}{\bsimilarrightarrow }{\mathrel}{reverse tilde operator above rightwards arrow}%
+\UnicodeMathSymbol{"02B48}{\rightarrowbackapprox }{\mathrel}{rightwards arrow above reverse almost equal to}%
+\UnicodeMathSymbol{"02B49}{\similarleftarrow }{\mathrel}{tilde operator above leftwards arrow}%
+\UnicodeMathSymbol{"02B4A}{\leftarrowapprox }{\mathrel}{leftwards arrow above almost equal to}%
+\UnicodeMathSymbol{"02B4B}{\leftarrowbsimilar }{\mathrel}{leftwards arrow above reverse tilde operator}%
+\UnicodeMathSymbol{"02B4C}{\rightarrowbsimilar }{\mathrel}{righttwards arrow above reverse tilde operator}%
+\UnicodeMathSymbol{"02B50}{\medwhitestar }{\mathord}{white medium star}%
+\UnicodeMathSymbol{"02B51}{\medblackstar }{\mathord}{black medium star}%
+\UnicodeMathSymbol{"02B52}{\smwhitestar }{\mathord}{white small star}%
+\UnicodeMathSymbol{"02B53}{\rightpentagonblack }{\mathord}{black right-pointing pentagon}%
+\UnicodeMathSymbol{"02B54}{\rightpentagon }{\mathord}{white right-pointing pentagon}%
+\UnicodeMathSymbol{"03012}{\postalmark }{\mathord}{postal mark}%
+\UnicodeMathSymbol{"03030}{\hzigzag }{\mathord}{zigzag}%
+\UnicodeMathSymbol{"1D400}{\mbfA }{\mathalpha}{mathematical bold capital a}%
+\UnicodeMathSymbol{"1D401}{\mbfB }{\mathalpha}{mathematical bold capital b}%
+\UnicodeMathSymbol{"1D402}{\mbfC }{\mathalpha}{mathematical bold capital c}%
+\UnicodeMathSymbol{"1D403}{\mbfD }{\mathalpha}{mathematical bold capital d}%
+\UnicodeMathSymbol{"1D404}{\mbfE }{\mathalpha}{mathematical bold capital e}%
+\UnicodeMathSymbol{"1D405}{\mbfF }{\mathalpha}{mathematical bold capital f}%
+\UnicodeMathSymbol{"1D406}{\mbfG }{\mathalpha}{mathematical bold capital g}%
+\UnicodeMathSymbol{"1D407}{\mbfH }{\mathalpha}{mathematical bold capital h}%
+\UnicodeMathSymbol{"1D408}{\mbfI }{\mathalpha}{mathematical bold capital i}%
+\UnicodeMathSymbol{"1D409}{\mbfJ }{\mathalpha}{mathematical bold capital j}%
+\UnicodeMathSymbol{"1D40A}{\mbfK }{\mathalpha}{mathematical bold capital k}%
+\UnicodeMathSymbol{"1D40B}{\mbfL }{\mathalpha}{mathematical bold capital l}%
+\UnicodeMathSymbol{"1D40C}{\mbfM }{\mathalpha}{mathematical bold capital m}%
+\UnicodeMathSymbol{"1D40D}{\mbfN }{\mathalpha}{mathematical bold capital n}%
+\UnicodeMathSymbol{"1D40E}{\mbfO }{\mathalpha}{mathematical bold capital o}%
+\UnicodeMathSymbol{"1D40F}{\mbfP }{\mathalpha}{mathematical bold capital p}%
+\UnicodeMathSymbol{"1D410}{\mbfQ }{\mathalpha}{mathematical bold capital q}%
+\UnicodeMathSymbol{"1D411}{\mbfR }{\mathalpha}{mathematical bold capital r}%
+\UnicodeMathSymbol{"1D412}{\mbfS }{\mathalpha}{mathematical bold capital s}%
+\UnicodeMathSymbol{"1D413}{\mbfT }{\mathalpha}{mathematical bold capital t}%
+\UnicodeMathSymbol{"1D414}{\mbfU }{\mathalpha}{mathematical bold capital u}%
+\UnicodeMathSymbol{"1D415}{\mbfV }{\mathalpha}{mathematical bold capital v}%
+\UnicodeMathSymbol{"1D416}{\mbfW }{\mathalpha}{mathematical bold capital w}%
+\UnicodeMathSymbol{"1D417}{\mbfX }{\mathalpha}{mathematical bold capital x}%
+\UnicodeMathSymbol{"1D418}{\mbfY }{\mathalpha}{mathematical bold capital y}%
+\UnicodeMathSymbol{"1D419}{\mbfZ }{\mathalpha}{mathematical bold capital z}%
+\UnicodeMathSymbol{"1D41A}{\mbfa }{\mathalpha}{mathematical bold small a}%
+\UnicodeMathSymbol{"1D41B}{\mbfb }{\mathalpha}{mathematical bold small b}%
+\UnicodeMathSymbol{"1D41C}{\mbfc }{\mathalpha}{mathematical bold small c}%
+\UnicodeMathSymbol{"1D41D}{\mbfd }{\mathalpha}{mathematical bold small d}%
+\UnicodeMathSymbol{"1D41E}{\mbfe }{\mathalpha}{mathematical bold small e}%
+\UnicodeMathSymbol{"1D41F}{\mbff }{\mathalpha}{mathematical bold small f}%
+\UnicodeMathSymbol{"1D420}{\mbfg }{\mathalpha}{mathematical bold small g}%
+\UnicodeMathSymbol{"1D421}{\mbfh }{\mathalpha}{mathematical bold small h}%
+\UnicodeMathSymbol{"1D422}{\mbfi }{\mathalpha}{mathematical bold small i}%
+\UnicodeMathSymbol{"1D423}{\mbfj }{\mathalpha}{mathematical bold small j}%
+\UnicodeMathSymbol{"1D424}{\mbfk }{\mathalpha}{mathematical bold small k}%
+\UnicodeMathSymbol{"1D425}{\mbfl }{\mathalpha}{mathematical bold small l}%
+\UnicodeMathSymbol{"1D426}{\mbfm }{\mathalpha}{mathematical bold small m}%
+\UnicodeMathSymbol{"1D427}{\mbfn }{\mathalpha}{mathematical bold small n}%
+\UnicodeMathSymbol{"1D428}{\mbfo }{\mathalpha}{mathematical bold small o}%
+\UnicodeMathSymbol{"1D429}{\mbfp }{\mathalpha}{mathematical bold small p}%
+\UnicodeMathSymbol{"1D42A}{\mbfq }{\mathalpha}{mathematical bold small q}%
+\UnicodeMathSymbol{"1D42B}{\mbfr }{\mathalpha}{mathematical bold small r}%
+\UnicodeMathSymbol{"1D42C}{\mbfs }{\mathalpha}{mathematical bold small s}%
+\UnicodeMathSymbol{"1D42D}{\mbft }{\mathalpha}{mathematical bold small t}%
+\UnicodeMathSymbol{"1D42E}{\mbfu }{\mathalpha}{mathematical bold small u}%
+\UnicodeMathSymbol{"1D42F}{\mbfv }{\mathalpha}{mathematical bold small v}%
+\UnicodeMathSymbol{"1D430}{\mbfw }{\mathalpha}{mathematical bold small w}%
+\UnicodeMathSymbol{"1D431}{\mbfx }{\mathalpha}{mathematical bold small x}%
+\UnicodeMathSymbol{"1D432}{\mbfy }{\mathalpha}{mathematical bold small y}%
+\UnicodeMathSymbol{"1D433}{\mbfz }{\mathalpha}{mathematical bold small z}%
+\UnicodeMathSymbol{"1D434}{\mitA }{\mathalpha}{mathematical italic capital a}%
+\UnicodeMathSymbol{"1D435}{\mitB }{\mathalpha}{mathematical italic capital b}%
+\UnicodeMathSymbol{"1D436}{\mitC }{\mathalpha}{mathematical italic capital c}%
+\UnicodeMathSymbol{"1D437}{\mitD }{\mathalpha}{mathematical italic capital d}%
+\UnicodeMathSymbol{"1D438}{\mitE }{\mathalpha}{mathematical italic capital e}%
+\UnicodeMathSymbol{"1D439}{\mitF }{\mathalpha}{mathematical italic capital f}%
+\UnicodeMathSymbol{"1D43A}{\mitG }{\mathalpha}{mathematical italic capital g}%
+\UnicodeMathSymbol{"1D43B}{\mitH }{\mathalpha}{mathematical italic capital h}%
+\UnicodeMathSymbol{"1D43C}{\mitI }{\mathalpha}{mathematical italic capital i}%
+\UnicodeMathSymbol{"1D43D}{\mitJ }{\mathalpha}{mathematical italic capital j}%
+\UnicodeMathSymbol{"1D43E}{\mitK }{\mathalpha}{mathematical italic capital k}%
+\UnicodeMathSymbol{"1D43F}{\mitL }{\mathalpha}{mathematical italic capital l}%
+\UnicodeMathSymbol{"1D440}{\mitM }{\mathalpha}{mathematical italic capital m}%
+\UnicodeMathSymbol{"1D441}{\mitN }{\mathalpha}{mathematical italic capital n}%
+\UnicodeMathSymbol{"1D442}{\mitO }{\mathalpha}{mathematical italic capital o}%
+\UnicodeMathSymbol{"1D443}{\mitP }{\mathalpha}{mathematical italic capital p}%
+\UnicodeMathSymbol{"1D444}{\mitQ }{\mathalpha}{mathematical italic capital q}%
+\UnicodeMathSymbol{"1D445}{\mitR }{\mathalpha}{mathematical italic capital r}%
+\UnicodeMathSymbol{"1D446}{\mitS }{\mathalpha}{mathematical italic capital s}%
+\UnicodeMathSymbol{"1D447}{\mitT }{\mathalpha}{mathematical italic capital t}%
+\UnicodeMathSymbol{"1D448}{\mitU }{\mathalpha}{mathematical italic capital u}%
+\UnicodeMathSymbol{"1D449}{\mitV }{\mathalpha}{mathematical italic capital v}%
+\UnicodeMathSymbol{"1D44A}{\mitW }{\mathalpha}{mathematical italic capital w}%
+\UnicodeMathSymbol{"1D44B}{\mitX }{\mathalpha}{mathematical italic capital x}%
+\UnicodeMathSymbol{"1D44C}{\mitY }{\mathalpha}{mathematical italic capital y}%
+\UnicodeMathSymbol{"1D44D}{\mitZ }{\mathalpha}{mathematical italic capital z}%
+\UnicodeMathSymbol{"1D44E}{\mita }{\mathalpha}{mathematical italic small a}%
+\UnicodeMathSymbol{"1D44F}{\mitb }{\mathalpha}{mathematical italic small b}%
+\UnicodeMathSymbol{"1D450}{\mitc }{\mathalpha}{mathematical italic small c}%
+\UnicodeMathSymbol{"1D451}{\mitd }{\mathalpha}{mathematical italic small d}%
+\UnicodeMathSymbol{"1D452}{\mite }{\mathalpha}{mathematical italic small e}%
+\UnicodeMathSymbol{"1D453}{\mitf }{\mathalpha}{mathematical italic small f}%
+\UnicodeMathSymbol{"1D454}{\mitg }{\mathalpha}{mathematical italic small g}%
+\UnicodeMathSymbol{"1D456}{\miti }{\mathalpha}{mathematical italic small i}%
+\UnicodeMathSymbol{"1D457}{\mitj }{\mathalpha}{mathematical italic small j}%
+\UnicodeMathSymbol{"1D458}{\mitk }{\mathalpha}{mathematical italic small k}%
+\UnicodeMathSymbol{"1D459}{\mitl }{\mathalpha}{mathematical italic small l}%
+\UnicodeMathSymbol{"1D45A}{\mitm }{\mathalpha}{mathematical italic small m}%
+\UnicodeMathSymbol{"1D45B}{\mitn }{\mathalpha}{mathematical italic small n}%
+\UnicodeMathSymbol{"1D45C}{\mito }{\mathalpha}{mathematical italic small o}%
+\UnicodeMathSymbol{"1D45D}{\mitp }{\mathalpha}{mathematical italic small p}%
+\UnicodeMathSymbol{"1D45E}{\mitq }{\mathalpha}{mathematical italic small q}%
+\UnicodeMathSymbol{"1D45F}{\mitr }{\mathalpha}{mathematical italic small r}%
+\UnicodeMathSymbol{"1D460}{\mits }{\mathalpha}{mathematical italic small s}%
+\UnicodeMathSymbol{"1D461}{\mitt }{\mathalpha}{mathematical italic small t}%
+\UnicodeMathSymbol{"1D462}{\mitu }{\mathalpha}{mathematical italic small u}%
+\UnicodeMathSymbol{"1D463}{\mitv }{\mathalpha}{mathematical italic small v}%
+\UnicodeMathSymbol{"1D464}{\mitw }{\mathalpha}{mathematical italic small w}%
+\UnicodeMathSymbol{"1D465}{\mitx }{\mathalpha}{mathematical italic small x}%
+\UnicodeMathSymbol{"1D466}{\mity }{\mathalpha}{mathematical italic small y}%
+\UnicodeMathSymbol{"1D467}{\mitz }{\mathalpha}{mathematical italic small z}%
+\UnicodeMathSymbol{"1D468}{\mbfitA }{\mathalpha}{mathematical bold italic capital a}%
+\UnicodeMathSymbol{"1D469}{\mbfitB }{\mathalpha}{mathematical bold italic capital b}%
+\UnicodeMathSymbol{"1D46A}{\mbfitC }{\mathalpha}{mathematical bold italic capital c}%
+\UnicodeMathSymbol{"1D46B}{\mbfitD }{\mathalpha}{mathematical bold italic capital d}%
+\UnicodeMathSymbol{"1D46C}{\mbfitE }{\mathalpha}{mathematical bold italic capital e}%
+\UnicodeMathSymbol{"1D46D}{\mbfitF }{\mathalpha}{mathematical bold italic capital f}%
+\UnicodeMathSymbol{"1D46E}{\mbfitG }{\mathalpha}{mathematical bold italic capital g}%
+\UnicodeMathSymbol{"1D46F}{\mbfitH }{\mathalpha}{mathematical bold italic capital h}%
+\UnicodeMathSymbol{"1D470}{\mbfitI }{\mathalpha}{mathematical bold italic capital i}%
+\UnicodeMathSymbol{"1D471}{\mbfitJ }{\mathalpha}{mathematical bold italic capital j}%
+\UnicodeMathSymbol{"1D472}{\mbfitK }{\mathalpha}{mathematical bold italic capital k}%
+\UnicodeMathSymbol{"1D473}{\mbfitL }{\mathalpha}{mathematical bold italic capital l}%
+\UnicodeMathSymbol{"1D474}{\mbfitM }{\mathalpha}{mathematical bold italic capital m}%
+\UnicodeMathSymbol{"1D475}{\mbfitN }{\mathalpha}{mathematical bold italic capital n}%
+\UnicodeMathSymbol{"1D476}{\mbfitO }{\mathalpha}{mathematical bold italic capital o}%
+\UnicodeMathSymbol{"1D477}{\mbfitP }{\mathalpha}{mathematical bold italic capital p}%
+\UnicodeMathSymbol{"1D478}{\mbfitQ }{\mathalpha}{mathematical bold italic capital q}%
+\UnicodeMathSymbol{"1D479}{\mbfitR }{\mathalpha}{mathematical bold italic capital r}%
+\UnicodeMathSymbol{"1D47A}{\mbfitS }{\mathalpha}{mathematical bold italic capital s}%
+\UnicodeMathSymbol{"1D47B}{\mbfitT }{\mathalpha}{mathematical bold italic capital t}%
+\UnicodeMathSymbol{"1D47C}{\mbfitU }{\mathalpha}{mathematical bold italic capital u}%
+\UnicodeMathSymbol{"1D47D}{\mbfitV }{\mathalpha}{mathematical bold italic capital v}%
+\UnicodeMathSymbol{"1D47E}{\mbfitW }{\mathalpha}{mathematical bold italic capital w}%
+\UnicodeMathSymbol{"1D47F}{\mbfitX }{\mathalpha}{mathematical bold italic capital x}%
+\UnicodeMathSymbol{"1D480}{\mbfitY }{\mathalpha}{mathematical bold italic capital y}%
+\UnicodeMathSymbol{"1D481}{\mbfitZ }{\mathalpha}{mathematical bold italic capital z}%
+\UnicodeMathSymbol{"1D482}{\mbfita }{\mathalpha}{mathematical bold italic small a}%
+\UnicodeMathSymbol{"1D483}{\mbfitb }{\mathalpha}{mathematical bold italic small b}%
+\UnicodeMathSymbol{"1D484}{\mbfitc }{\mathalpha}{mathematical bold italic small c}%
+\UnicodeMathSymbol{"1D485}{\mbfitd }{\mathalpha}{mathematical bold italic small d}%
+\UnicodeMathSymbol{"1D486}{\mbfite }{\mathalpha}{mathematical bold italic small e}%
+\UnicodeMathSymbol{"1D487}{\mbfitf }{\mathalpha}{mathematical bold italic small f}%
+\UnicodeMathSymbol{"1D488}{\mbfitg }{\mathalpha}{mathematical bold italic small g}%
+\UnicodeMathSymbol{"1D489}{\mbfith }{\mathalpha}{mathematical bold italic small h}%
+\UnicodeMathSymbol{"1D48A}{\mbfiti }{\mathalpha}{mathematical bold italic small i}%
+\UnicodeMathSymbol{"1D48B}{\mbfitj }{\mathalpha}{mathematical bold italic small j}%
+\UnicodeMathSymbol{"1D48C}{\mbfitk }{\mathalpha}{mathematical bold italic small k}%
+\UnicodeMathSymbol{"1D48D}{\mbfitl }{\mathalpha}{mathematical bold italic small l}%
+\UnicodeMathSymbol{"1D48E}{\mbfitm }{\mathalpha}{mathematical bold italic small m}%
+\UnicodeMathSymbol{"1D48F}{\mbfitn }{\mathalpha}{mathematical bold italic small n}%
+\UnicodeMathSymbol{"1D490}{\mbfito }{\mathalpha}{mathematical bold italic small o}%
+\UnicodeMathSymbol{"1D491}{\mbfitp }{\mathalpha}{mathematical bold italic small p}%
+\UnicodeMathSymbol{"1D492}{\mbfitq }{\mathalpha}{mathematical bold italic small q}%
+\UnicodeMathSymbol{"1D493}{\mbfitr }{\mathalpha}{mathematical bold italic small r}%
+\UnicodeMathSymbol{"1D494}{\mbfits }{\mathalpha}{mathematical bold italic small s}%
+\UnicodeMathSymbol{"1D495}{\mbfitt }{\mathalpha}{mathematical bold italic small t}%
+\UnicodeMathSymbol{"1D496}{\mbfitu }{\mathalpha}{mathematical bold italic small u}%
+\UnicodeMathSymbol{"1D497}{\mbfitv }{\mathalpha}{mathematical bold italic small v}%
+\UnicodeMathSymbol{"1D498}{\mbfitw }{\mathalpha}{mathematical bold italic small w}%
+\UnicodeMathSymbol{"1D499}{\mbfitx }{\mathalpha}{mathematical bold italic small x}%
+\UnicodeMathSymbol{"1D49A}{\mbfity }{\mathalpha}{mathematical bold italic small y}%
+\UnicodeMathSymbol{"1D49B}{\mbfitz }{\mathalpha}{mathematical bold italic small z}%
+\UnicodeMathSymbol{"1D49C}{\mscrA }{\mathalpha}{mathematical script capital a}%
+\UnicodeMathSymbol{"1D49E}{\mscrC }{\mathalpha}{mathematical script capital c}%
+\UnicodeMathSymbol{"1D49F}{\mscrD }{\mathalpha}{mathematical script capital d}%
+\UnicodeMathSymbol{"1D4A2}{\mscrG }{\mathalpha}{mathematical script capital g}%
+\UnicodeMathSymbol{"1D4A5}{\mscrJ }{\mathalpha}{mathematical script capital j}%
+\UnicodeMathSymbol{"1D4A6}{\mscrK }{\mathalpha}{mathematical script capital k}%
+\UnicodeMathSymbol{"1D4A9}{\mscrN }{\mathalpha}{mathematical script capital n}%
+\UnicodeMathSymbol{"1D4AA}{\mscrO }{\mathalpha}{mathematical script capital o}%
+\UnicodeMathSymbol{"1D4AB}{\mscrP }{\mathalpha}{mathematical script capital p}%
+\UnicodeMathSymbol{"1D4AC}{\mscrQ }{\mathalpha}{mathematical script capital q}%
+\UnicodeMathSymbol{"1D4AE}{\mscrS }{\mathalpha}{mathematical script capital s}%
+\UnicodeMathSymbol{"1D4AF}{\mscrT }{\mathalpha}{mathematical script capital t}%
+\UnicodeMathSymbol{"1D4B0}{\mscrU }{\mathalpha}{mathematical script capital u}%
+\UnicodeMathSymbol{"1D4B1}{\mscrV }{\mathalpha}{mathematical script capital v}%
+\UnicodeMathSymbol{"1D4B2}{\mscrW }{\mathalpha}{mathematical script capital w}%
+\UnicodeMathSymbol{"1D4B3}{\mscrX }{\mathalpha}{mathematical script capital x}%
+\UnicodeMathSymbol{"1D4B4}{\mscrY }{\mathalpha}{mathematical script capital y}%
+\UnicodeMathSymbol{"1D4B5}{\mscrZ }{\mathalpha}{mathematical script capital z}%
+\UnicodeMathSymbol{"1D4B6}{\mscra }{\mathalpha}{mathematical script small a}%
+\UnicodeMathSymbol{"1D4B7}{\mscrb }{\mathalpha}{mathematical script small b}%
+\UnicodeMathSymbol{"1D4B8}{\mscrc }{\mathalpha}{mathematical script small c}%
+\UnicodeMathSymbol{"1D4B9}{\mscrd }{\mathalpha}{mathematical script small d}%
+\UnicodeMathSymbol{"1D4BB}{\mscrf }{\mathalpha}{mathematical script small f}%
+\UnicodeMathSymbol{"1D4BD}{\mscrh }{\mathalpha}{mathematical script small h}%
+\UnicodeMathSymbol{"1D4BE}{\mscri }{\mathalpha}{mathematical script small i}%
+\UnicodeMathSymbol{"1D4BF}{\mscrj }{\mathalpha}{mathematical script small j}%
+\UnicodeMathSymbol{"1D4C0}{\mscrk }{\mathalpha}{mathematical script small k}%
+\UnicodeMathSymbol{"1D4C1}{\mscrl }{\mathalpha}{mathematical script small l}%
+\UnicodeMathSymbol{"1D4C2}{\mscrm }{\mathalpha}{mathematical script small m}%
+\UnicodeMathSymbol{"1D4C3}{\mscrn }{\mathalpha}{mathematical script small n}%
+\UnicodeMathSymbol{"1D4C5}{\mscrp }{\mathalpha}{mathematical script small p}%
+\UnicodeMathSymbol{"1D4C6}{\mscrq }{\mathalpha}{mathematical script small q}%
+\UnicodeMathSymbol{"1D4C7}{\mscrr }{\mathalpha}{mathematical script small r}%
+\UnicodeMathSymbol{"1D4C8}{\mscrs }{\mathalpha}{mathematical script small s}%
+\UnicodeMathSymbol{"1D4C9}{\mscrt }{\mathalpha}{mathematical script small t}%
+\UnicodeMathSymbol{"1D4CA}{\mscru }{\mathalpha}{mathematical script small u}%
+\UnicodeMathSymbol{"1D4CB}{\mscrv }{\mathalpha}{mathematical script small v}%
+\UnicodeMathSymbol{"1D4CC}{\mscrw }{\mathalpha}{mathematical script small w}%
+\UnicodeMathSymbol{"1D4CD}{\mscrx }{\mathalpha}{mathematical script small x}%
+\UnicodeMathSymbol{"1D4CE}{\mscry }{\mathalpha}{mathematical script small y}%
+\UnicodeMathSymbol{"1D4CF}{\mscrz }{\mathalpha}{mathematical script small z}%
+\UnicodeMathSymbol{"1D4D0}{\mbfscrA }{\mathalpha}{mathematical bold script capital a}%
+\UnicodeMathSymbol{"1D4D1}{\mbfscrB }{\mathalpha}{mathematical bold script capital b}%
+\UnicodeMathSymbol{"1D4D2}{\mbfscrC }{\mathalpha}{mathematical bold script capital c}%
+\UnicodeMathSymbol{"1D4D3}{\mbfscrD }{\mathalpha}{mathematical bold script capital d}%
+\UnicodeMathSymbol{"1D4D4}{\mbfscrE }{\mathalpha}{mathematical bold script capital e}%
+\UnicodeMathSymbol{"1D4D5}{\mbfscrF }{\mathalpha}{mathematical bold script capital f}%
+\UnicodeMathSymbol{"1D4D6}{\mbfscrG }{\mathalpha}{mathematical bold script capital g}%
+\UnicodeMathSymbol{"1D4D7}{\mbfscrH }{\mathalpha}{mathematical bold script capital h}%
+\UnicodeMathSymbol{"1D4D8}{\mbfscrI }{\mathalpha}{mathematical bold script capital i}%
+\UnicodeMathSymbol{"1D4D9}{\mbfscrJ }{\mathalpha}{mathematical bold script capital j}%
+\UnicodeMathSymbol{"1D4DA}{\mbfscrK }{\mathalpha}{mathematical bold script capital k}%
+\UnicodeMathSymbol{"1D4DB}{\mbfscrL }{\mathalpha}{mathematical bold script capital l}%
+\UnicodeMathSymbol{"1D4DC}{\mbfscrM }{\mathalpha}{mathematical bold script capital m}%
+\UnicodeMathSymbol{"1D4DD}{\mbfscrN }{\mathalpha}{mathematical bold script capital n}%
+\UnicodeMathSymbol{"1D4DE}{\mbfscrO }{\mathalpha}{mathematical bold script capital o}%
+\UnicodeMathSymbol{"1D4DF}{\mbfscrP }{\mathalpha}{mathematical bold script capital p}%
+\UnicodeMathSymbol{"1D4E0}{\mbfscrQ }{\mathalpha}{mathematical bold script capital q}%
+\UnicodeMathSymbol{"1D4E1}{\mbfscrR }{\mathalpha}{mathematical bold script capital r}%
+\UnicodeMathSymbol{"1D4E2}{\mbfscrS }{\mathalpha}{mathematical bold script capital s}%
+\UnicodeMathSymbol{"1D4E3}{\mbfscrT }{\mathalpha}{mathematical bold script capital t}%
+\UnicodeMathSymbol{"1D4E4}{\mbfscrU }{\mathalpha}{mathematical bold script capital u}%
+\UnicodeMathSymbol{"1D4E5}{\mbfscrV }{\mathalpha}{mathematical bold script capital v}%
+\UnicodeMathSymbol{"1D4E6}{\mbfscrW }{\mathalpha}{mathematical bold script capital w}%
+\UnicodeMathSymbol{"1D4E7}{\mbfscrX }{\mathalpha}{mathematical bold script capital x}%
+\UnicodeMathSymbol{"1D4E8}{\mbfscrY }{\mathalpha}{mathematical bold script capital y}%
+\UnicodeMathSymbol{"1D4E9}{\mbfscrZ }{\mathalpha}{mathematical bold script capital z}%
+\UnicodeMathSymbol{"1D4EA}{\mbfscra }{\mathalpha}{mathematical bold script small a}%
+\UnicodeMathSymbol{"1D4EB}{\mbfscrb }{\mathalpha}{mathematical bold script small b}%
+\UnicodeMathSymbol{"1D4EC}{\mbfscrc }{\mathalpha}{mathematical bold script small c}%
+\UnicodeMathSymbol{"1D4ED}{\mbfscrd }{\mathalpha}{mathematical bold script small d}%
+\UnicodeMathSymbol{"1D4EE}{\mbfscre }{\mathalpha}{mathematical bold script small e}%
+\UnicodeMathSymbol{"1D4EF}{\mbfscrf }{\mathalpha}{mathematical bold script small f}%
+\UnicodeMathSymbol{"1D4F0}{\mbfscrg }{\mathalpha}{mathematical bold script small g}%
+\UnicodeMathSymbol{"1D4F1}{\mbfscrh }{\mathalpha}{mathematical bold script small h}%
+\UnicodeMathSymbol{"1D4F2}{\mbfscri }{\mathalpha}{mathematical bold script small i}%
+\UnicodeMathSymbol{"1D4F3}{\mbfscrj }{\mathalpha}{mathematical bold script small j}%
+\UnicodeMathSymbol{"1D4F4}{\mbfscrk }{\mathalpha}{mathematical bold script small k}%
+\UnicodeMathSymbol{"1D4F5}{\mbfscrl }{\mathalpha}{mathematical bold script small l}%
+\UnicodeMathSymbol{"1D4F6}{\mbfscrm }{\mathalpha}{mathematical bold script small m}%
+\UnicodeMathSymbol{"1D4F7}{\mbfscrn }{\mathalpha}{mathematical bold script small n}%
+\UnicodeMathSymbol{"1D4F8}{\mbfscro }{\mathalpha}{mathematical bold script small o}%
+\UnicodeMathSymbol{"1D4F9}{\mbfscrp }{\mathalpha}{mathematical bold script small p}%
+\UnicodeMathSymbol{"1D4FA}{\mbfscrq }{\mathalpha}{mathematical bold script small q}%
+\UnicodeMathSymbol{"1D4FB}{\mbfscrr }{\mathalpha}{mathematical bold script small r}%
+\UnicodeMathSymbol{"1D4FC}{\mbfscrs }{\mathalpha}{mathematical bold script small s}%
+\UnicodeMathSymbol{"1D4FD}{\mbfscrt }{\mathalpha}{mathematical bold script small t}%
+\UnicodeMathSymbol{"1D4FE}{\mbfscru }{\mathalpha}{mathematical bold script small u}%
+\UnicodeMathSymbol{"1D4FF}{\mbfscrv }{\mathalpha}{mathematical bold script small v}%
+\UnicodeMathSymbol{"1D500}{\mbfscrw }{\mathalpha}{mathematical bold script small w}%
+\UnicodeMathSymbol{"1D501}{\mbfscrx }{\mathalpha}{mathematical bold script small x}%
+\UnicodeMathSymbol{"1D502}{\mbfscry }{\mathalpha}{mathematical bold script small y}%
+\UnicodeMathSymbol{"1D503}{\mbfscrz }{\mathalpha}{mathematical bold script small z}%
+\UnicodeMathSymbol{"1D504}{\mfrakA }{\mathalpha}{mathematical fraktur capital a}%
+\UnicodeMathSymbol{"1D505}{\mfrakB }{\mathalpha}{mathematical fraktur capital b}%
+\UnicodeMathSymbol{"1D507}{\mfrakD }{\mathalpha}{mathematical fraktur capital d}%
+\UnicodeMathSymbol{"1D508}{\mfrakE }{\mathalpha}{mathematical fraktur capital e}%
+\UnicodeMathSymbol{"1D509}{\mfrakF }{\mathalpha}{mathematical fraktur capital f}%
+\UnicodeMathSymbol{"1D50A}{\mfrakG }{\mathalpha}{mathematical fraktur capital g}%
+\UnicodeMathSymbol{"1D50D}{\mfrakJ }{\mathalpha}{mathematical fraktur capital j}%
+\UnicodeMathSymbol{"1D50E}{\mfrakK }{\mathalpha}{mathematical fraktur capital k}%
+\UnicodeMathSymbol{"1D50F}{\mfrakL }{\mathalpha}{mathematical fraktur capital l}%
+\UnicodeMathSymbol{"1D510}{\mfrakM }{\mathalpha}{mathematical fraktur capital m}%
+\UnicodeMathSymbol{"1D511}{\mfrakN }{\mathalpha}{mathematical fraktur capital n}%
+\UnicodeMathSymbol{"1D512}{\mfrakO }{\mathalpha}{mathematical fraktur capital o}%
+\UnicodeMathSymbol{"1D513}{\mfrakP }{\mathalpha}{mathematical fraktur capital p}%
+\UnicodeMathSymbol{"1D514}{\mfrakQ }{\mathalpha}{mathematical fraktur capital q}%
+\UnicodeMathSymbol{"1D516}{\mfrakS }{\mathalpha}{mathematical fraktur capital s}%
+\UnicodeMathSymbol{"1D517}{\mfrakT }{\mathalpha}{mathematical fraktur capital t}%
+\UnicodeMathSymbol{"1D518}{\mfrakU }{\mathalpha}{mathematical fraktur capital u}%
+\UnicodeMathSymbol{"1D519}{\mfrakV }{\mathalpha}{mathematical fraktur capital v}%
+\UnicodeMathSymbol{"1D51A}{\mfrakW }{\mathalpha}{mathematical fraktur capital w}%
+\UnicodeMathSymbol{"1D51B}{\mfrakX }{\mathalpha}{mathematical fraktur capital x}%
+\UnicodeMathSymbol{"1D51C}{\mfrakY }{\mathalpha}{mathematical fraktur capital y}%
+\UnicodeMathSymbol{"1D51E}{\mfraka }{\mathalpha}{mathematical fraktur small a}%
+\UnicodeMathSymbol{"1D51F}{\mfrakb }{\mathalpha}{mathematical fraktur small b}%
+\UnicodeMathSymbol{"1D520}{\mfrakc }{\mathalpha}{mathematical fraktur small c}%
+\UnicodeMathSymbol{"1D521}{\mfrakd }{\mathalpha}{mathematical fraktur small d}%
+\UnicodeMathSymbol{"1D522}{\mfrake }{\mathalpha}{mathematical fraktur small e}%
+\UnicodeMathSymbol{"1D523}{\mfrakf }{\mathalpha}{mathematical fraktur small f}%
+\UnicodeMathSymbol{"1D524}{\mfrakg }{\mathalpha}{mathematical fraktur small g}%
+\UnicodeMathSymbol{"1D525}{\mfrakh }{\mathalpha}{mathematical fraktur small h}%
+\UnicodeMathSymbol{"1D526}{\mfraki }{\mathalpha}{mathematical fraktur small i}%
+\UnicodeMathSymbol{"1D527}{\mfrakj }{\mathalpha}{mathematical fraktur small j}%
+\UnicodeMathSymbol{"1D528}{\mfrakk }{\mathalpha}{mathematical fraktur small k}%
+\UnicodeMathSymbol{"1D529}{\mfrakl }{\mathalpha}{mathematical fraktur small l}%
+\UnicodeMathSymbol{"1D52A}{\mfrakm }{\mathalpha}{mathematical fraktur small m}%
+\UnicodeMathSymbol{"1D52B}{\mfrakn }{\mathalpha}{mathematical fraktur small n}%
+\UnicodeMathSymbol{"1D52C}{\mfrako }{\mathalpha}{mathematical fraktur small o}%
+\UnicodeMathSymbol{"1D52D}{\mfrakp }{\mathalpha}{mathematical fraktur small p}%
+\UnicodeMathSymbol{"1D52E}{\mfrakq }{\mathalpha}{mathematical fraktur small q}%
+\UnicodeMathSymbol{"1D52F}{\mfrakr }{\mathalpha}{mathematical fraktur small r}%
+\UnicodeMathSymbol{"1D530}{\mfraks }{\mathalpha}{mathematical fraktur small s}%
+\UnicodeMathSymbol{"1D531}{\mfrakt }{\mathalpha}{mathematical fraktur small t}%
+\UnicodeMathSymbol{"1D532}{\mfraku }{\mathalpha}{mathematical fraktur small u}%
+\UnicodeMathSymbol{"1D533}{\mfrakv }{\mathalpha}{mathematical fraktur small v}%
+\UnicodeMathSymbol{"1D534}{\mfrakw }{\mathalpha}{mathematical fraktur small w}%
+\UnicodeMathSymbol{"1D535}{\mfrakx }{\mathalpha}{mathematical fraktur small x}%
+\UnicodeMathSymbol{"1D536}{\mfraky }{\mathalpha}{mathematical fraktur small y}%
+\UnicodeMathSymbol{"1D537}{\mfrakz }{\mathalpha}{mathematical fraktur small z}%
+\UnicodeMathSymbol{"1D538}{\BbbA }{\mathalpha}{mathematical double-struck capital a}%
+\UnicodeMathSymbol{"1D539}{\BbbB }{\mathalpha}{mathematical double-struck capital b}%
+\UnicodeMathSymbol{"1D53B}{\BbbD }{\mathalpha}{mathematical double-struck capital d}%
+\UnicodeMathSymbol{"1D53C}{\BbbE }{\mathalpha}{mathematical double-struck capital e}%
+\UnicodeMathSymbol{"1D53D}{\BbbF }{\mathalpha}{mathematical double-struck capital f}%
+\UnicodeMathSymbol{"1D53E}{\BbbG }{\mathalpha}{mathematical double-struck capital g}%
+\UnicodeMathSymbol{"1D540}{\BbbI }{\mathalpha}{mathematical double-struck capital i}%
+\UnicodeMathSymbol{"1D541}{\BbbJ }{\mathalpha}{mathematical double-struck capital j}%
+\UnicodeMathSymbol{"1D542}{\BbbK }{\mathalpha}{mathematical double-struck capital k}%
+\UnicodeMathSymbol{"1D543}{\BbbL }{\mathalpha}{mathematical double-struck capital l}%
+\UnicodeMathSymbol{"1D544}{\BbbM }{\mathalpha}{mathematical double-struck capital m}%
+\UnicodeMathSymbol{"1D546}{\BbbO }{\mathalpha}{mathematical double-struck capital o}%
+\UnicodeMathSymbol{"1D54A}{\BbbS }{\mathalpha}{mathematical double-struck capital s}%
+\UnicodeMathSymbol{"1D54B}{\BbbT }{\mathalpha}{mathematical double-struck capital t}%
+\UnicodeMathSymbol{"1D54C}{\BbbU }{\mathalpha}{mathematical double-struck capital u}%
+\UnicodeMathSymbol{"1D54D}{\BbbV }{\mathalpha}{mathematical double-struck capital v}%
+\UnicodeMathSymbol{"1D54E}{\BbbW }{\mathalpha}{mathematical double-struck capital w}%
+\UnicodeMathSymbol{"1D54F}{\BbbX }{\mathalpha}{mathematical double-struck capital x}%
+\UnicodeMathSymbol{"1D550}{\BbbY }{\mathalpha}{mathematical double-struck capital y}%
+\UnicodeMathSymbol{"1D552}{\Bbba }{\mathalpha}{mathematical double-struck small a}%
+\UnicodeMathSymbol{"1D553}{\Bbbb }{\mathalpha}{mathematical double-struck small b}%
+\UnicodeMathSymbol{"1D554}{\Bbbc }{\mathalpha}{mathematical double-struck small c}%
+\UnicodeMathSymbol{"1D555}{\Bbbd }{\mathalpha}{mathematical double-struck small d}%
+\UnicodeMathSymbol{"1D556}{\Bbbe }{\mathalpha}{mathematical double-struck small e}%
+\UnicodeMathSymbol{"1D557}{\Bbbf }{\mathalpha}{mathematical double-struck small f}%
+\UnicodeMathSymbol{"1D558}{\Bbbg }{\mathalpha}{mathematical double-struck small g}%
+\UnicodeMathSymbol{"1D559}{\Bbbh }{\mathalpha}{mathematical double-struck small h}%
+\UnicodeMathSymbol{"1D55A}{\Bbbi }{\mathalpha}{mathematical double-struck small i}%
+\UnicodeMathSymbol{"1D55B}{\Bbbj }{\mathalpha}{mathematical double-struck small j}%
+\UnicodeMathSymbol{"1D55C}{\Bbbk }{\mathalpha}{mathematical double-struck small k}%
+\UnicodeMathSymbol{"1D55D}{\Bbbl }{\mathalpha}{mathematical double-struck small l}%
+\UnicodeMathSymbol{"1D55E}{\Bbbm }{\mathalpha}{mathematical double-struck small m}%
+\UnicodeMathSymbol{"1D55F}{\Bbbn }{\mathalpha}{mathematical double-struck small n}%
+\UnicodeMathSymbol{"1D560}{\Bbbo }{\mathalpha}{mathematical double-struck small o}%
+\UnicodeMathSymbol{"1D561}{\Bbbp }{\mathalpha}{mathematical double-struck small p}%
+\UnicodeMathSymbol{"1D562}{\Bbbq }{\mathalpha}{mathematical double-struck small q}%
+\UnicodeMathSymbol{"1D563}{\Bbbr }{\mathalpha}{mathematical double-struck small r}%
+\UnicodeMathSymbol{"1D564}{\Bbbs }{\mathalpha}{mathematical double-struck small s}%
+\UnicodeMathSymbol{"1D565}{\Bbbt }{\mathalpha}{mathematical double-struck small t}%
+\UnicodeMathSymbol{"1D566}{\Bbbu }{\mathalpha}{mathematical double-struck small u}%
+\UnicodeMathSymbol{"1D567}{\Bbbv }{\mathalpha}{mathematical double-struck small v}%
+\UnicodeMathSymbol{"1D568}{\Bbbw }{\mathalpha}{mathematical double-struck small w}%
+\UnicodeMathSymbol{"1D569}{\Bbbx }{\mathalpha}{mathematical double-struck small x}%
+\UnicodeMathSymbol{"1D56A}{\Bbby }{\mathalpha}{mathematical double-struck small y}%
+\UnicodeMathSymbol{"1D56B}{\Bbbz }{\mathalpha}{mathematical double-struck small z}%
+\UnicodeMathSymbol{"1D56C}{\mbffrakA }{\mathalpha}{mathematical bold fraktur capital a}%
+\UnicodeMathSymbol{"1D56D}{\mbffrakB }{\mathalpha}{mathematical bold fraktur capital b}%
+\UnicodeMathSymbol{"1D56E}{\mbffrakC }{\mathalpha}{mathematical bold fraktur capital c}%
+\UnicodeMathSymbol{"1D56F}{\mbffrakD }{\mathalpha}{mathematical bold fraktur capital d}%
+\UnicodeMathSymbol{"1D570}{\mbffrakE }{\mathalpha}{mathematical bold fraktur capital e}%
+\UnicodeMathSymbol{"1D571}{\mbffrakF }{\mathalpha}{mathematical bold fraktur capital f}%
+\UnicodeMathSymbol{"1D572}{\mbffrakG }{\mathalpha}{mathematical bold fraktur capital g}%
+\UnicodeMathSymbol{"1D573}{\mbffrakH }{\mathalpha}{mathematical bold fraktur capital h}%
+\UnicodeMathSymbol{"1D574}{\mbffrakI }{\mathalpha}{mathematical bold fraktur capital i}%
+\UnicodeMathSymbol{"1D575}{\mbffrakJ }{\mathalpha}{mathematical bold fraktur capital j}%
+\UnicodeMathSymbol{"1D576}{\mbffrakK }{\mathalpha}{mathematical bold fraktur capital k}%
+\UnicodeMathSymbol{"1D577}{\mbffrakL }{\mathalpha}{mathematical bold fraktur capital l}%
+\UnicodeMathSymbol{"1D578}{\mbffrakM }{\mathalpha}{mathematical bold fraktur capital m}%
+\UnicodeMathSymbol{"1D579}{\mbffrakN }{\mathalpha}{mathematical bold fraktur capital n}%
+\UnicodeMathSymbol{"1D57A}{\mbffrakO }{\mathalpha}{mathematical bold fraktur capital o}%
+\UnicodeMathSymbol{"1D57B}{\mbffrakP }{\mathalpha}{mathematical bold fraktur capital p}%
+\UnicodeMathSymbol{"1D57C}{\mbffrakQ }{\mathalpha}{mathematical bold fraktur capital q}%
+\UnicodeMathSymbol{"1D57D}{\mbffrakR }{\mathalpha}{mathematical bold fraktur capital r}%
+\UnicodeMathSymbol{"1D57E}{\mbffrakS }{\mathalpha}{mathematical bold fraktur capital s}%
+\UnicodeMathSymbol{"1D57F}{\mbffrakT }{\mathalpha}{mathematical bold fraktur capital t}%
+\UnicodeMathSymbol{"1D580}{\mbffrakU }{\mathalpha}{mathematical bold fraktur capital u}%
+\UnicodeMathSymbol{"1D581}{\mbffrakV }{\mathalpha}{mathematical bold fraktur capital v}%
+\UnicodeMathSymbol{"1D582}{\mbffrakW }{\mathalpha}{mathematical bold fraktur capital w}%
+\UnicodeMathSymbol{"1D583}{\mbffrakX }{\mathalpha}{mathematical bold fraktur capital x}%
+\UnicodeMathSymbol{"1D584}{\mbffrakY }{\mathalpha}{mathematical bold fraktur capital y}%
+\UnicodeMathSymbol{"1D585}{\mbffrakZ }{\mathalpha}{mathematical bold fraktur capital z}%
+\UnicodeMathSymbol{"1D586}{\mbffraka }{\mathalpha}{mathematical bold fraktur small a}%
+\UnicodeMathSymbol{"1D587}{\mbffrakb }{\mathalpha}{mathematical bold fraktur small b}%
+\UnicodeMathSymbol{"1D588}{\mbffrakc }{\mathalpha}{mathematical bold fraktur small c}%
+\UnicodeMathSymbol{"1D589}{\mbffrakd }{\mathalpha}{mathematical bold fraktur small d}%
+\UnicodeMathSymbol{"1D58A}{\mbffrake }{\mathalpha}{mathematical bold fraktur small e}%
+\UnicodeMathSymbol{"1D58B}{\mbffrakf }{\mathalpha}{mathematical bold fraktur small f}%
+\UnicodeMathSymbol{"1D58C}{\mbffrakg }{\mathalpha}{mathematical bold fraktur small g}%
+\UnicodeMathSymbol{"1D58D}{\mbffrakh }{\mathalpha}{mathematical bold fraktur small h}%
+\UnicodeMathSymbol{"1D58E}{\mbffraki }{\mathalpha}{mathematical bold fraktur small i}%
+\UnicodeMathSymbol{"1D58F}{\mbffrakj }{\mathalpha}{mathematical bold fraktur small j}%
+\UnicodeMathSymbol{"1D590}{\mbffrakk }{\mathalpha}{mathematical bold fraktur small k}%
+\UnicodeMathSymbol{"1D591}{\mbffrakl }{\mathalpha}{mathematical bold fraktur small l}%
+\UnicodeMathSymbol{"1D592}{\mbffrakm }{\mathalpha}{mathematical bold fraktur small m}%
+\UnicodeMathSymbol{"1D593}{\mbffrakn }{\mathalpha}{mathematical bold fraktur small n}%
+\UnicodeMathSymbol{"1D594}{\mbffrako }{\mathalpha}{mathematical bold fraktur small o}%
+\UnicodeMathSymbol{"1D595}{\mbffrakp }{\mathalpha}{mathematical bold fraktur small p}%
+\UnicodeMathSymbol{"1D596}{\mbffrakq }{\mathalpha}{mathematical bold fraktur small q}%
+\UnicodeMathSymbol{"1D597}{\mbffrakr }{\mathalpha}{mathematical bold fraktur small r}%
+\UnicodeMathSymbol{"1D598}{\mbffraks }{\mathalpha}{mathematical bold fraktur small s}%
+\UnicodeMathSymbol{"1D599}{\mbffrakt }{\mathalpha}{mathematical bold fraktur small t}%
+\UnicodeMathSymbol{"1D59A}{\mbffraku }{\mathalpha}{mathematical bold fraktur small u}%
+\UnicodeMathSymbol{"1D59B}{\mbffrakv }{\mathalpha}{mathematical bold fraktur small v}%
+\UnicodeMathSymbol{"1D59C}{\mbffrakw }{\mathalpha}{mathematical bold fraktur small w}%
+\UnicodeMathSymbol{"1D59D}{\mbffrakx }{\mathalpha}{mathematical bold fraktur small x}%
+\UnicodeMathSymbol{"1D59E}{\mbffraky }{\mathalpha}{mathematical bold fraktur small y}%
+\UnicodeMathSymbol{"1D59F}{\mbffrakz }{\mathalpha}{mathematical bold fraktur small z}%
+\UnicodeMathSymbol{"1D5A0}{\msansA }{\mathalpha}{mathematical sans-serif capital a}%
+\UnicodeMathSymbol{"1D5A1}{\msansB }{\mathalpha}{mathematical sans-serif capital b}%
+\UnicodeMathSymbol{"1D5A2}{\msansC }{\mathalpha}{mathematical sans-serif capital c}%
+\UnicodeMathSymbol{"1D5A3}{\msansD }{\mathalpha}{mathematical sans-serif capital d}%
+\UnicodeMathSymbol{"1D5A4}{\msansE }{\mathalpha}{mathematical sans-serif capital e}%
+\UnicodeMathSymbol{"1D5A5}{\msansF }{\mathalpha}{mathematical sans-serif capital f}%
+\UnicodeMathSymbol{"1D5A6}{\msansG }{\mathalpha}{mathematical sans-serif capital g}%
+\UnicodeMathSymbol{"1D5A7}{\msansH }{\mathalpha}{mathematical sans-serif capital h}%
+\UnicodeMathSymbol{"1D5A8}{\msansI }{\mathalpha}{mathematical sans-serif capital i}%
+\UnicodeMathSymbol{"1D5A9}{\msansJ }{\mathalpha}{mathematical sans-serif capital j}%
+\UnicodeMathSymbol{"1D5AA}{\msansK }{\mathalpha}{mathematical sans-serif capital k}%
+\UnicodeMathSymbol{"1D5AB}{\msansL }{\mathalpha}{mathematical sans-serif capital l}%
+\UnicodeMathSymbol{"1D5AC}{\msansM }{\mathalpha}{mathematical sans-serif capital m}%
+\UnicodeMathSymbol{"1D5AD}{\msansN }{\mathalpha}{mathematical sans-serif capital n}%
+\UnicodeMathSymbol{"1D5AE}{\msansO }{\mathalpha}{mathematical sans-serif capital o}%
+\UnicodeMathSymbol{"1D5AF}{\msansP }{\mathalpha}{mathematical sans-serif capital p}%
+\UnicodeMathSymbol{"1D5B0}{\msansQ }{\mathalpha}{mathematical sans-serif capital q}%
+\UnicodeMathSymbol{"1D5B1}{\msansR }{\mathalpha}{mathematical sans-serif capital r}%
+\UnicodeMathSymbol{"1D5B2}{\msansS }{\mathalpha}{mathematical sans-serif capital s}%
+\UnicodeMathSymbol{"1D5B3}{\msansT }{\mathalpha}{mathematical sans-serif capital t}%
+\UnicodeMathSymbol{"1D5B4}{\msansU }{\mathalpha}{mathematical sans-serif capital u}%
+\UnicodeMathSymbol{"1D5B5}{\msansV }{\mathalpha}{mathematical sans-serif capital v}%
+\UnicodeMathSymbol{"1D5B6}{\msansW }{\mathalpha}{mathematical sans-serif capital w}%
+\UnicodeMathSymbol{"1D5B7}{\msansX }{\mathalpha}{mathematical sans-serif capital x}%
+\UnicodeMathSymbol{"1D5B8}{\msansY }{\mathalpha}{mathematical sans-serif capital y}%
+\UnicodeMathSymbol{"1D5B9}{\msansZ }{\mathalpha}{mathematical sans-serif capital z}%
+\UnicodeMathSymbol{"1D5BA}{\msansa }{\mathalpha}{mathematical sans-serif small a}%
+\UnicodeMathSymbol{"1D5BB}{\msansb }{\mathalpha}{mathematical sans-serif small b}%
+\UnicodeMathSymbol{"1D5BC}{\msansc }{\mathalpha}{mathematical sans-serif small c}%
+\UnicodeMathSymbol{"1D5BD}{\msansd }{\mathalpha}{mathematical sans-serif small d}%
+\UnicodeMathSymbol{"1D5BE}{\msanse }{\mathalpha}{mathematical sans-serif small e}%
+\UnicodeMathSymbol{"1D5BF}{\msansf }{\mathalpha}{mathematical sans-serif small f}%
+\UnicodeMathSymbol{"1D5C0}{\msansg }{\mathalpha}{mathematical sans-serif small g}%
+\UnicodeMathSymbol{"1D5C1}{\msansh }{\mathalpha}{mathematical sans-serif small h}%
+\UnicodeMathSymbol{"1D5C2}{\msansi }{\mathalpha}{mathematical sans-serif small i}%
+\UnicodeMathSymbol{"1D5C3}{\msansj }{\mathalpha}{mathematical sans-serif small j}%
+\UnicodeMathSymbol{"1D5C4}{\msansk }{\mathalpha}{mathematical sans-serif small k}%
+\UnicodeMathSymbol{"1D5C5}{\msansl }{\mathalpha}{mathematical sans-serif small l}%
+\UnicodeMathSymbol{"1D5C6}{\msansm }{\mathalpha}{mathematical sans-serif small m}%
+\UnicodeMathSymbol{"1D5C7}{\msansn }{\mathalpha}{mathematical sans-serif small n}%
+\UnicodeMathSymbol{"1D5C8}{\msanso }{\mathalpha}{mathematical sans-serif small o}%
+\UnicodeMathSymbol{"1D5C9}{\msansp }{\mathalpha}{mathematical sans-serif small p}%
+\UnicodeMathSymbol{"1D5CA}{\msansq }{\mathalpha}{mathematical sans-serif small q}%
+\UnicodeMathSymbol{"1D5CB}{\msansr }{\mathalpha}{mathematical sans-serif small r}%
+\UnicodeMathSymbol{"1D5CC}{\msanss }{\mathalpha}{mathematical sans-serif small s}%
+\UnicodeMathSymbol{"1D5CD}{\msanst }{\mathalpha}{mathematical sans-serif small t}%
+\UnicodeMathSymbol{"1D5CE}{\msansu }{\mathalpha}{mathematical sans-serif small u}%
+\UnicodeMathSymbol{"1D5CF}{\msansv }{\mathalpha}{mathematical sans-serif small v}%
+\UnicodeMathSymbol{"1D5D0}{\msansw }{\mathalpha}{mathematical sans-serif small w}%
+\UnicodeMathSymbol{"1D5D1}{\msansx }{\mathalpha}{mathematical sans-serif small x}%
+\UnicodeMathSymbol{"1D5D2}{\msansy }{\mathalpha}{mathematical sans-serif small y}%
+\UnicodeMathSymbol{"1D5D3}{\msansz }{\mathalpha}{mathematical sans-serif small z}%
+\UnicodeMathSymbol{"1D5D4}{\mbfsansA }{\mathalpha}{mathematical sans-serif bold capital a}%
+\UnicodeMathSymbol{"1D5D5}{\mbfsansB }{\mathalpha}{mathematical sans-serif bold capital b}%
+\UnicodeMathSymbol{"1D5D6}{\mbfsansC }{\mathalpha}{mathematical sans-serif bold capital c}%
+\UnicodeMathSymbol{"1D5D7}{\mbfsansD }{\mathalpha}{mathematical sans-serif bold capital d}%
+\UnicodeMathSymbol{"1D5D8}{\mbfsansE }{\mathalpha}{mathematical sans-serif bold capital e}%
+\UnicodeMathSymbol{"1D5D9}{\mbfsansF }{\mathalpha}{mathematical sans-serif bold capital f}%
+\UnicodeMathSymbol{"1D5DA}{\mbfsansG }{\mathalpha}{mathematical sans-serif bold capital g}%
+\UnicodeMathSymbol{"1D5DB}{\mbfsansH }{\mathalpha}{mathematical sans-serif bold capital h}%
+\UnicodeMathSymbol{"1D5DC}{\mbfsansI }{\mathalpha}{mathematical sans-serif bold capital i}%
+\UnicodeMathSymbol{"1D5DD}{\mbfsansJ }{\mathalpha}{mathematical sans-serif bold capital j}%
+\UnicodeMathSymbol{"1D5DE}{\mbfsansK }{\mathalpha}{mathematical sans-serif bold capital k}%
+\UnicodeMathSymbol{"1D5DF}{\mbfsansL }{\mathalpha}{mathematical sans-serif bold capital l}%
+\UnicodeMathSymbol{"1D5E0}{\mbfsansM }{\mathalpha}{mathematical sans-serif bold capital m}%
+\UnicodeMathSymbol{"1D5E1}{\mbfsansN }{\mathalpha}{mathematical sans-serif bold capital n}%
+\UnicodeMathSymbol{"1D5E2}{\mbfsansO }{\mathalpha}{mathematical sans-serif bold capital o}%
+\UnicodeMathSymbol{"1D5E3}{\mbfsansP }{\mathalpha}{mathematical sans-serif bold capital p}%
+\UnicodeMathSymbol{"1D5E4}{\mbfsansQ }{\mathalpha}{mathematical sans-serif bold capital q}%
+\UnicodeMathSymbol{"1D5E5}{\mbfsansR }{\mathalpha}{mathematical sans-serif bold capital r}%
+\UnicodeMathSymbol{"1D5E6}{\mbfsansS }{\mathalpha}{mathematical sans-serif bold capital s}%
+\UnicodeMathSymbol{"1D5E7}{\mbfsansT }{\mathalpha}{mathematical sans-serif bold capital t}%
+\UnicodeMathSymbol{"1D5E8}{\mbfsansU }{\mathalpha}{mathematical sans-serif bold capital u}%
+\UnicodeMathSymbol{"1D5E9}{\mbfsansV }{\mathalpha}{mathematical sans-serif bold capital v}%
+\UnicodeMathSymbol{"1D5EA}{\mbfsansW }{\mathalpha}{mathematical sans-serif bold capital w}%
+\UnicodeMathSymbol{"1D5EB}{\mbfsansX }{\mathalpha}{mathematical sans-serif bold capital x}%
+\UnicodeMathSymbol{"1D5EC}{\mbfsansY }{\mathalpha}{mathematical sans-serif bold capital y}%
+\UnicodeMathSymbol{"1D5ED}{\mbfsansZ }{\mathalpha}{mathematical sans-serif bold capital z}%
+\UnicodeMathSymbol{"1D5EE}{\mbfsansa }{\mathalpha}{mathematical sans-serif bold small a}%
+\UnicodeMathSymbol{"1D5EF}{\mbfsansb }{\mathalpha}{mathematical sans-serif bold small b}%
+\UnicodeMathSymbol{"1D5F0}{\mbfsansc }{\mathalpha}{mathematical sans-serif bold small c}%
+\UnicodeMathSymbol{"1D5F1}{\mbfsansd }{\mathalpha}{mathematical sans-serif bold small d}%
+\UnicodeMathSymbol{"1D5F2}{\mbfsanse }{\mathalpha}{mathematical sans-serif bold small e}%
+\UnicodeMathSymbol{"1D5F3}{\mbfsansf }{\mathalpha}{mathematical sans-serif bold small f}%
+\UnicodeMathSymbol{"1D5F4}{\mbfsansg }{\mathalpha}{mathematical sans-serif bold small g}%
+\UnicodeMathSymbol{"1D5F5}{\mbfsansh }{\mathalpha}{mathematical sans-serif bold small h}%
+\UnicodeMathSymbol{"1D5F6}{\mbfsansi }{\mathalpha}{mathematical sans-serif bold small i}%
+\UnicodeMathSymbol{"1D5F7}{\mbfsansj }{\mathalpha}{mathematical sans-serif bold small j}%
+\UnicodeMathSymbol{"1D5F8}{\mbfsansk }{\mathalpha}{mathematical sans-serif bold small k}%
+\UnicodeMathSymbol{"1D5F9}{\mbfsansl }{\mathalpha}{mathematical sans-serif bold small l}%
+\UnicodeMathSymbol{"1D5FA}{\mbfsansm }{\mathalpha}{mathematical sans-serif bold small m}%
+\UnicodeMathSymbol{"1D5FB}{\mbfsansn }{\mathalpha}{mathematical sans-serif bold small n}%
+\UnicodeMathSymbol{"1D5FC}{\mbfsanso }{\mathalpha}{mathematical sans-serif bold small o}%
+\UnicodeMathSymbol{"1D5FD}{\mbfsansp }{\mathalpha}{mathematical sans-serif bold small p}%
+\UnicodeMathSymbol{"1D5FE}{\mbfsansq }{\mathalpha}{mathematical sans-serif bold small q}%
+\UnicodeMathSymbol{"1D5FF}{\mbfsansr }{\mathalpha}{mathematical sans-serif bold small r}%
+\UnicodeMathSymbol{"1D600}{\mbfsanss }{\mathalpha}{mathematical sans-serif bold small s}%
+\UnicodeMathSymbol{"1D601}{\mbfsanst }{\mathalpha}{mathematical sans-serif bold small t}%
+\UnicodeMathSymbol{"1D602}{\mbfsansu }{\mathalpha}{mathematical sans-serif bold small u}%
+\UnicodeMathSymbol{"1D603}{\mbfsansv }{\mathalpha}{mathematical sans-serif bold small v}%
+\UnicodeMathSymbol{"1D604}{\mbfsansw }{\mathalpha}{mathematical sans-serif bold small w}%
+\UnicodeMathSymbol{"1D605}{\mbfsansx }{\mathalpha}{mathematical sans-serif bold small x}%
+\UnicodeMathSymbol{"1D606}{\mbfsansy }{\mathalpha}{mathematical sans-serif bold small y}%
+\UnicodeMathSymbol{"1D607}{\mbfsansz }{\mathalpha}{mathematical sans-serif bold small z}%
+\UnicodeMathSymbol{"1D608}{\mitsansA }{\mathalpha}{mathematical sans-serif italic capital a}%
+\UnicodeMathSymbol{"1D609}{\mitsansB }{\mathalpha}{mathematical sans-serif italic capital b}%
+\UnicodeMathSymbol{"1D60A}{\mitsansC }{\mathalpha}{mathematical sans-serif italic capital c}%
+\UnicodeMathSymbol{"1D60B}{\mitsansD }{\mathalpha}{mathematical sans-serif italic capital d}%
+\UnicodeMathSymbol{"1D60C}{\mitsansE }{\mathalpha}{mathematical sans-serif italic capital e}%
+\UnicodeMathSymbol{"1D60D}{\mitsansF }{\mathalpha}{mathematical sans-serif italic capital f}%
+\UnicodeMathSymbol{"1D60E}{\mitsansG }{\mathalpha}{mathematical sans-serif italic capital g}%
+\UnicodeMathSymbol{"1D60F}{\mitsansH }{\mathalpha}{mathematical sans-serif italic capital h}%
+\UnicodeMathSymbol{"1D610}{\mitsansI }{\mathalpha}{mathematical sans-serif italic capital i}%
+\UnicodeMathSymbol{"1D611}{\mitsansJ }{\mathalpha}{mathematical sans-serif italic capital j}%
+\UnicodeMathSymbol{"1D612}{\mitsansK }{\mathalpha}{mathematical sans-serif italic capital k}%
+\UnicodeMathSymbol{"1D613}{\mitsansL }{\mathalpha}{mathematical sans-serif italic capital l}%
+\UnicodeMathSymbol{"1D614}{\mitsansM }{\mathalpha}{mathematical sans-serif italic capital m}%
+\UnicodeMathSymbol{"1D615}{\mitsansN }{\mathalpha}{mathematical sans-serif italic capital n}%
+\UnicodeMathSymbol{"1D616}{\mitsansO }{\mathalpha}{mathematical sans-serif italic capital o}%
+\UnicodeMathSymbol{"1D617}{\mitsansP }{\mathalpha}{mathematical sans-serif italic capital p}%
+\UnicodeMathSymbol{"1D618}{\mitsansQ }{\mathalpha}{mathematical sans-serif italic capital q}%
+\UnicodeMathSymbol{"1D619}{\mitsansR }{\mathalpha}{mathematical sans-serif italic capital r}%
+\UnicodeMathSymbol{"1D61A}{\mitsansS }{\mathalpha}{mathematical sans-serif italic capital s}%
+\UnicodeMathSymbol{"1D61B}{\mitsansT }{\mathalpha}{mathematical sans-serif italic capital t}%
+\UnicodeMathSymbol{"1D61C}{\mitsansU }{\mathalpha}{mathematical sans-serif italic capital u}%
+\UnicodeMathSymbol{"1D61D}{\mitsansV }{\mathalpha}{mathematical sans-serif italic capital v}%
+\UnicodeMathSymbol{"1D61E}{\mitsansW }{\mathalpha}{mathematical sans-serif italic capital w}%
+\UnicodeMathSymbol{"1D61F}{\mitsansX }{\mathalpha}{mathematical sans-serif italic capital x}%
+\UnicodeMathSymbol{"1D620}{\mitsansY }{\mathalpha}{mathematical sans-serif italic capital y}%
+\UnicodeMathSymbol{"1D621}{\mitsansZ }{\mathalpha}{mathematical sans-serif italic capital z}%
+\UnicodeMathSymbol{"1D622}{\mitsansa }{\mathalpha}{mathematical sans-serif italic small a}%
+\UnicodeMathSymbol{"1D623}{\mitsansb }{\mathalpha}{mathematical sans-serif italic small b}%
+\UnicodeMathSymbol{"1D624}{\mitsansc }{\mathalpha}{mathematical sans-serif italic small c}%
+\UnicodeMathSymbol{"1D625}{\mitsansd }{\mathalpha}{mathematical sans-serif italic small d}%
+\UnicodeMathSymbol{"1D626}{\mitsanse }{\mathalpha}{mathematical sans-serif italic small e}%
+\UnicodeMathSymbol{"1D627}{\mitsansf }{\mathalpha}{mathematical sans-serif italic small f}%
+\UnicodeMathSymbol{"1D628}{\mitsansg }{\mathalpha}{mathematical sans-serif italic small g}%
+\UnicodeMathSymbol{"1D629}{\mitsansh }{\mathalpha}{mathematical sans-serif italic small h}%
+\UnicodeMathSymbol{"1D62A}{\mitsansi }{\mathalpha}{mathematical sans-serif italic small i}%
+\UnicodeMathSymbol{"1D62B}{\mitsansj }{\mathalpha}{mathematical sans-serif italic small j}%
+\UnicodeMathSymbol{"1D62C}{\mitsansk }{\mathalpha}{mathematical sans-serif italic small k}%
+\UnicodeMathSymbol{"1D62D}{\mitsansl }{\mathalpha}{mathematical sans-serif italic small l}%
+\UnicodeMathSymbol{"1D62E}{\mitsansm }{\mathalpha}{mathematical sans-serif italic small m}%
+\UnicodeMathSymbol{"1D62F}{\mitsansn }{\mathalpha}{mathematical sans-serif italic small n}%
+\UnicodeMathSymbol{"1D630}{\mitsanso }{\mathalpha}{mathematical sans-serif italic small o}%
+\UnicodeMathSymbol{"1D631}{\mitsansp }{\mathalpha}{mathematical sans-serif italic small p}%
+\UnicodeMathSymbol{"1D632}{\mitsansq }{\mathalpha}{mathematical sans-serif italic small q}%
+\UnicodeMathSymbol{"1D633}{\mitsansr }{\mathalpha}{mathematical sans-serif italic small r}%
+\UnicodeMathSymbol{"1D634}{\mitsanss }{\mathalpha}{mathematical sans-serif italic small s}%
+\UnicodeMathSymbol{"1D635}{\mitsanst }{\mathalpha}{mathematical sans-serif italic small t}%
+\UnicodeMathSymbol{"1D636}{\mitsansu }{\mathalpha}{mathematical sans-serif italic small u}%
+\UnicodeMathSymbol{"1D637}{\mitsansv }{\mathalpha}{mathematical sans-serif italic small v}%
+\UnicodeMathSymbol{"1D638}{\mitsansw }{\mathalpha}{mathematical sans-serif italic small w}%
+\UnicodeMathSymbol{"1D639}{\mitsansx }{\mathalpha}{mathematical sans-serif italic small x}%
+\UnicodeMathSymbol{"1D63A}{\mitsansy }{\mathalpha}{mathematical sans-serif italic small y}%
+\UnicodeMathSymbol{"1D63B}{\mitsansz }{\mathalpha}{mathematical sans-serif italic small z}%
+\UnicodeMathSymbol{"1D63C}{\mbfitsansA }{\mathalpha}{mathematical sans-serif bold italic capital a}%
+\UnicodeMathSymbol{"1D63D}{\mbfitsansB }{\mathalpha}{mathematical sans-serif bold italic capital b}%
+\UnicodeMathSymbol{"1D63E}{\mbfitsansC }{\mathalpha}{mathematical sans-serif bold italic capital c}%
+\UnicodeMathSymbol{"1D63F}{\mbfitsansD }{\mathalpha}{mathematical sans-serif bold italic capital d}%
+\UnicodeMathSymbol{"1D640}{\mbfitsansE }{\mathalpha}{mathematical sans-serif bold italic capital e}%
+\UnicodeMathSymbol{"1D641}{\mbfitsansF }{\mathalpha}{mathematical sans-serif bold italic capital f}%
+\UnicodeMathSymbol{"1D642}{\mbfitsansG }{\mathalpha}{mathematical sans-serif bold italic capital g}%
+\UnicodeMathSymbol{"1D643}{\mbfitsansH }{\mathalpha}{mathematical sans-serif bold italic capital h}%
+\UnicodeMathSymbol{"1D644}{\mbfitsansI }{\mathalpha}{mathematical sans-serif bold italic capital i}%
+\UnicodeMathSymbol{"1D645}{\mbfitsansJ }{\mathalpha}{mathematical sans-serif bold italic capital j}%
+\UnicodeMathSymbol{"1D646}{\mbfitsansK }{\mathalpha}{mathematical sans-serif bold italic capital k}%
+\UnicodeMathSymbol{"1D647}{\mbfitsansL }{\mathalpha}{mathematical sans-serif bold italic capital l}%
+\UnicodeMathSymbol{"1D648}{\mbfitsansM }{\mathalpha}{mathematical sans-serif bold italic capital m}%
+\UnicodeMathSymbol{"1D649}{\mbfitsansN }{\mathalpha}{mathematical sans-serif bold italic capital n}%
+\UnicodeMathSymbol{"1D64A}{\mbfitsansO }{\mathalpha}{mathematical sans-serif bold italic capital o}%
+\UnicodeMathSymbol{"1D64B}{\mbfitsansP }{\mathalpha}{mathematical sans-serif bold italic capital p}%
+\UnicodeMathSymbol{"1D64C}{\mbfitsansQ }{\mathalpha}{mathematical sans-serif bold italic capital q}%
+\UnicodeMathSymbol{"1D64D}{\mbfitsansR }{\mathalpha}{mathematical sans-serif bold italic capital r}%
+\UnicodeMathSymbol{"1D64E}{\mbfitsansS }{\mathalpha}{mathematical sans-serif bold italic capital s}%
+\UnicodeMathSymbol{"1D64F}{\mbfitsansT }{\mathalpha}{mathematical sans-serif bold italic capital t}%
+\UnicodeMathSymbol{"1D650}{\mbfitsansU }{\mathalpha}{mathematical sans-serif bold italic capital u}%
+\UnicodeMathSymbol{"1D651}{\mbfitsansV }{\mathalpha}{mathematical sans-serif bold italic capital v}%
+\UnicodeMathSymbol{"1D652}{\mbfitsansW }{\mathalpha}{mathematical sans-serif bold italic capital w}%
+\UnicodeMathSymbol{"1D653}{\mbfitsansX }{\mathalpha}{mathematical sans-serif bold italic capital x}%
+\UnicodeMathSymbol{"1D654}{\mbfitsansY }{\mathalpha}{mathematical sans-serif bold italic capital y}%
+\UnicodeMathSymbol{"1D655}{\mbfitsansZ }{\mathalpha}{mathematical sans-serif bold italic capital z}%
+\UnicodeMathSymbol{"1D656}{\mbfitsansa }{\mathalpha}{mathematical sans-serif bold italic small a}%
+\UnicodeMathSymbol{"1D657}{\mbfitsansb }{\mathalpha}{mathematical sans-serif bold italic small b}%
+\UnicodeMathSymbol{"1D658}{\mbfitsansc }{\mathalpha}{mathematical sans-serif bold italic small c}%
+\UnicodeMathSymbol{"1D659}{\mbfitsansd }{\mathalpha}{mathematical sans-serif bold italic small d}%
+\UnicodeMathSymbol{"1D65A}{\mbfitsanse }{\mathalpha}{mathematical sans-serif bold italic small e}%
+\UnicodeMathSymbol{"1D65B}{\mbfitsansf }{\mathalpha}{mathematical sans-serif bold italic small f}%
+\UnicodeMathSymbol{"1D65C}{\mbfitsansg }{\mathalpha}{mathematical sans-serif bold italic small g}%
+\UnicodeMathSymbol{"1D65D}{\mbfitsansh }{\mathalpha}{mathematical sans-serif bold italic small h}%
+\UnicodeMathSymbol{"1D65E}{\mbfitsansi }{\mathalpha}{mathematical sans-serif bold italic small i}%
+\UnicodeMathSymbol{"1D65F}{\mbfitsansj }{\mathalpha}{mathematical sans-serif bold italic small j}%
+\UnicodeMathSymbol{"1D660}{\mbfitsansk }{\mathalpha}{mathematical sans-serif bold italic small k}%
+\UnicodeMathSymbol{"1D661}{\mbfitsansl }{\mathalpha}{mathematical sans-serif bold italic small l}%
+\UnicodeMathSymbol{"1D662}{\mbfitsansm }{\mathalpha}{mathematical sans-serif bold italic small m}%
+\UnicodeMathSymbol{"1D663}{\mbfitsansn }{\mathalpha}{mathematical sans-serif bold italic small n}%
+\UnicodeMathSymbol{"1D664}{\mbfitsanso }{\mathalpha}{mathematical sans-serif bold italic small o}%
+\UnicodeMathSymbol{"1D665}{\mbfitsansp }{\mathalpha}{mathematical sans-serif bold italic small p}%
+\UnicodeMathSymbol{"1D666}{\mbfitsansq }{\mathalpha}{mathematical sans-serif bold italic small q}%
+\UnicodeMathSymbol{"1D667}{\mbfitsansr }{\mathalpha}{mathematical sans-serif bold italic small r}%
+\UnicodeMathSymbol{"1D668}{\mbfitsanss }{\mathalpha}{mathematical sans-serif bold italic small s}%
+\UnicodeMathSymbol{"1D669}{\mbfitsanst }{\mathalpha}{mathematical sans-serif bold italic small t}%
+\UnicodeMathSymbol{"1D66A}{\mbfitsansu }{\mathalpha}{mathematical sans-serif bold italic small u}%
+\UnicodeMathSymbol{"1D66B}{\mbfitsansv }{\mathalpha}{mathematical sans-serif bold italic small v}%
+\UnicodeMathSymbol{"1D66C}{\mbfitsansw }{\mathalpha}{mathematical sans-serif bold italic small w}%
+\UnicodeMathSymbol{"1D66D}{\mbfitsansx }{\mathalpha}{mathematical sans-serif bold italic small x}%
+\UnicodeMathSymbol{"1D66E}{\mbfitsansy }{\mathalpha}{mathematical sans-serif bold italic small y}%
+\UnicodeMathSymbol{"1D66F}{\mbfitsansz }{\mathalpha}{mathematical sans-serif bold italic small z}%
+\UnicodeMathSymbol{"1D670}{\mttA }{\mathalpha}{mathematical monospace capital a}%
+\UnicodeMathSymbol{"1D671}{\mttB }{\mathalpha}{mathematical monospace capital b}%
+\UnicodeMathSymbol{"1D672}{\mttC }{\mathalpha}{mathematical monospace capital c}%
+\UnicodeMathSymbol{"1D673}{\mttD }{\mathalpha}{mathematical monospace capital d}%
+\UnicodeMathSymbol{"1D674}{\mttE }{\mathalpha}{mathematical monospace capital e}%
+\UnicodeMathSymbol{"1D675}{\mttF }{\mathalpha}{mathematical monospace capital f}%
+\UnicodeMathSymbol{"1D676}{\mttG }{\mathalpha}{mathematical monospace capital g}%
+\UnicodeMathSymbol{"1D677}{\mttH }{\mathalpha}{mathematical monospace capital h}%
+\UnicodeMathSymbol{"1D678}{\mttI }{\mathalpha}{mathematical monospace capital i}%
+\UnicodeMathSymbol{"1D679}{\mttJ }{\mathalpha}{mathematical monospace capital j}%
+\UnicodeMathSymbol{"1D67A}{\mttK }{\mathalpha}{mathematical monospace capital k}%
+\UnicodeMathSymbol{"1D67B}{\mttL }{\mathalpha}{mathematical monospace capital l}%
+\UnicodeMathSymbol{"1D67C}{\mttM }{\mathalpha}{mathematical monospace capital m}%
+\UnicodeMathSymbol{"1D67D}{\mttN }{\mathalpha}{mathematical monospace capital n}%
+\UnicodeMathSymbol{"1D67E}{\mttO }{\mathalpha}{mathematical monospace capital o}%
+\UnicodeMathSymbol{"1D67F}{\mttP }{\mathalpha}{mathematical monospace capital p}%
+\UnicodeMathSymbol{"1D680}{\mttQ }{\mathalpha}{mathematical monospace capital q}%
+\UnicodeMathSymbol{"1D681}{\mttR }{\mathalpha}{mathematical monospace capital r}%
+\UnicodeMathSymbol{"1D682}{\mttS }{\mathalpha}{mathematical monospace capital s}%
+\UnicodeMathSymbol{"1D683}{\mttT }{\mathalpha}{mathematical monospace capital t}%
+\UnicodeMathSymbol{"1D684}{\mttU }{\mathalpha}{mathematical monospace capital u}%
+\UnicodeMathSymbol{"1D685}{\mttV }{\mathalpha}{mathematical monospace capital v}%
+\UnicodeMathSymbol{"1D686}{\mttW }{\mathalpha}{mathematical monospace capital w}%
+\UnicodeMathSymbol{"1D687}{\mttX }{\mathalpha}{mathematical monospace capital x}%
+\UnicodeMathSymbol{"1D688}{\mttY }{\mathalpha}{mathematical monospace capital y}%
+\UnicodeMathSymbol{"1D689}{\mttZ }{\mathalpha}{mathematical monospace capital z}%
+\UnicodeMathSymbol{"1D68A}{\mtta }{\mathalpha}{mathematical monospace small a}%
+\UnicodeMathSymbol{"1D68B}{\mttb }{\mathalpha}{mathematical monospace small b}%
+\UnicodeMathSymbol{"1D68C}{\mttc }{\mathalpha}{mathematical monospace small c}%
+\UnicodeMathSymbol{"1D68D}{\mttd }{\mathalpha}{mathematical monospace small d}%
+\UnicodeMathSymbol{"1D68E}{\mtte }{\mathalpha}{mathematical monospace small e}%
+\UnicodeMathSymbol{"1D68F}{\mttf }{\mathalpha}{mathematical monospace small f}%
+\UnicodeMathSymbol{"1D690}{\mttg }{\mathalpha}{mathematical monospace small g}%
+\UnicodeMathSymbol{"1D691}{\mtth }{\mathalpha}{mathematical monospace small h}%
+\UnicodeMathSymbol{"1D692}{\mtti }{\mathalpha}{mathematical monospace small i}%
+\UnicodeMathSymbol{"1D693}{\mttj }{\mathalpha}{mathematical monospace small j}%
+\UnicodeMathSymbol{"1D694}{\mttk }{\mathalpha}{mathematical monospace small k}%
+\UnicodeMathSymbol{"1D695}{\mttl }{\mathalpha}{mathematical monospace small l}%
+\UnicodeMathSymbol{"1D696}{\mttm }{\mathalpha}{mathematical monospace small m}%
+\UnicodeMathSymbol{"1D697}{\mttn }{\mathalpha}{mathematical monospace small n}%
+\UnicodeMathSymbol{"1D698}{\mtto }{\mathalpha}{mathematical monospace small o}%
+\UnicodeMathSymbol{"1D699}{\mttp }{\mathalpha}{mathematical monospace small p}%
+\UnicodeMathSymbol{"1D69A}{\mttq }{\mathalpha}{mathematical monospace small q}%
+\UnicodeMathSymbol{"1D69B}{\mttr }{\mathalpha}{mathematical monospace small r}%
+\UnicodeMathSymbol{"1D69C}{\mtts }{\mathalpha}{mathematical monospace small s}%
+\UnicodeMathSymbol{"1D69D}{\mttt }{\mathalpha}{mathematical monospace small t}%
+\UnicodeMathSymbol{"1D69E}{\mttu }{\mathalpha}{mathematical monospace small u}%
+\UnicodeMathSymbol{"1D69F}{\mttv }{\mathalpha}{mathematical monospace small v}%
+\UnicodeMathSymbol{"1D6A0}{\mttw }{\mathalpha}{mathematical monospace small w}%
+\UnicodeMathSymbol{"1D6A1}{\mttx }{\mathalpha}{mathematical monospace small x}%
+\UnicodeMathSymbol{"1D6A2}{\mtty }{\mathalpha}{mathematical monospace small y}%
+\UnicodeMathSymbol{"1D6A3}{\mttz }{\mathalpha}{mathematical monospace small z}%
+\UnicodeMathSymbol{"1D6A4}{\imath }{\mathalpha}{mathematical italic small dotless i}%
+\UnicodeMathSymbol{"1D6A5}{\jmath }{\mathalpha}{mathematical italic small dotless j}%
+\UnicodeMathSymbol{"1D6A8}{\mbfAlpha }{\mathalpha}{mathematical bold capital alpha}%
+\UnicodeMathSymbol{"1D6A9}{\mbfBeta }{\mathalpha}{mathematical bold capital beta}%
+\UnicodeMathSymbol{"1D6AA}{\mbfGamma }{\mathalpha}{mathematical bold capital gamma}%
+\UnicodeMathSymbol{"1D6AB}{\mbfDelta }{\mathalpha}{mathematical bold capital delta}%
+\UnicodeMathSymbol{"1D6AC}{\mbfEpsilon }{\mathalpha}{mathematical bold capital epsilon}%
+\UnicodeMathSymbol{"1D6AD}{\mbfZeta }{\mathalpha}{mathematical bold capital zeta}%
+\UnicodeMathSymbol{"1D6AE}{\mbfEta }{\mathalpha}{mathematical bold capital eta}%
+\UnicodeMathSymbol{"1D6AF}{\mbfTheta }{\mathalpha}{mathematical bold capital theta}%
+\UnicodeMathSymbol{"1D6B0}{\mbfIota }{\mathalpha}{mathematical bold capital iota}%
+\UnicodeMathSymbol{"1D6B1}{\mbfKappa }{\mathalpha}{mathematical bold capital kappa}%
+\UnicodeMathSymbol{"1D6B2}{\mbfLambda }{\mathalpha}{mathematical bold capital lambda}%
+\UnicodeMathSymbol{"1D6B3}{\mbfMu }{\mathalpha}{mathematical bold capital mu}%
+\UnicodeMathSymbol{"1D6B4}{\mbfNu }{\mathalpha}{mathematical bold capital nu}%
+\UnicodeMathSymbol{"1D6B5}{\mbfXi }{\mathalpha}{mathematical bold capital xi}%
+\UnicodeMathSymbol{"1D6B6}{\mbfOmicron }{\mathalpha}{mathematical bold capital omicron}%
+\UnicodeMathSymbol{"1D6B7}{\mbfPi }{\mathalpha}{mathematical bold capital pi}%
+\UnicodeMathSymbol{"1D6B8}{\mbfRho }{\mathalpha}{mathematical bold capital rho}%
+\UnicodeMathSymbol{"1D6B9}{\mbfvarTheta }{\mathalpha}{mathematical bold capital theta symbol}%
+\UnicodeMathSymbol{"1D6BA}{\mbfSigma }{\mathalpha}{mathematical bold capital sigma}%
+\UnicodeMathSymbol{"1D6BB}{\mbfTau }{\mathalpha}{mathematical bold capital tau}%
+\UnicodeMathSymbol{"1D6BC}{\mbfUpsilon }{\mathalpha}{mathematical bold capital upsilon}%
+\UnicodeMathSymbol{"1D6BD}{\mbfPhi }{\mathalpha}{mathematical bold capital phi}%
+\UnicodeMathSymbol{"1D6BE}{\mbfChi }{\mathalpha}{mathematical bold capital chi}%
+\UnicodeMathSymbol{"1D6BF}{\mbfPsi }{\mathalpha}{mathematical bold capital psi}%
+\UnicodeMathSymbol{"1D6C0}{\mbfOmega }{\mathalpha}{mathematical bold capital omega}%
+\UnicodeMathSymbol{"1D6C1}{\mbfnabla }{\mathalpha}{mathematical bold nabla}%
+\UnicodeMathSymbol{"1D6C2}{\mbfalpha }{\mathalpha}{mathematical bold small alpha}%
+\UnicodeMathSymbol{"1D6C3}{\mbfbeta }{\mathalpha}{mathematical bold small beta}%
+\UnicodeMathSymbol{"1D6C4}{\mbfgamma }{\mathalpha}{mathematical bold small gamma}%
+\UnicodeMathSymbol{"1D6C5}{\mbfdelta }{\mathalpha}{mathematical bold small delta}%
+\UnicodeMathSymbol{"1D6C6}{\mbfvarepsilon }{\mathalpha}{mathematical bold small varepsilon}%
+\UnicodeMathSymbol{"1D6C7}{\mbfzeta }{\mathalpha}{mathematical bold small zeta}%
+\UnicodeMathSymbol{"1D6C8}{\mbfeta }{\mathalpha}{mathematical bold small eta}%
+\UnicodeMathSymbol{"1D6C9}{\mbftheta }{\mathalpha}{mathematical bold small theta}%
+\UnicodeMathSymbol{"1D6CA}{\mbfiota }{\mathalpha}{mathematical bold small iota}%
+\UnicodeMathSymbol{"1D6CB}{\mbfkappa }{\mathalpha}{mathematical bold small kappa}%
+\UnicodeMathSymbol{"1D6CC}{\mbflambda }{\mathalpha}{mathematical bold small lambda}%
+\UnicodeMathSymbol{"1D6CD}{\mbfmu }{\mathalpha}{mathematical bold small mu}%
+\UnicodeMathSymbol{"1D6CE}{\mbfnu }{\mathalpha}{mathematical bold small nu}%
+\UnicodeMathSymbol{"1D6CF}{\mbfxi }{\mathalpha}{mathematical bold small xi}%
+\UnicodeMathSymbol{"1D6D0}{\mbfomicron }{\mathalpha}{mathematical bold small omicron}%
+\UnicodeMathSymbol{"1D6D1}{\mbfpi }{\mathalpha}{mathematical bold small pi}%
+\UnicodeMathSymbol{"1D6D2}{\mbfrho }{\mathalpha}{mathematical bold small rho}%
+\UnicodeMathSymbol{"1D6D3}{\mbfvarsigma }{\mathalpha}{mathematical bold small final sigma}%
+\UnicodeMathSymbol{"1D6D4}{\mbfsigma }{\mathalpha}{mathematical bold small sigma}%
+\UnicodeMathSymbol{"1D6D5}{\mbftau }{\mathalpha}{mathematical bold small tau}%
+\UnicodeMathSymbol{"1D6D6}{\mbfupsilon }{\mathalpha}{mathematical bold small upsilon}%
+\UnicodeMathSymbol{"1D6D7}{\mbfvarphi }{\mathalpha}{mathematical bold small phi}%
+\UnicodeMathSymbol{"1D6D8}{\mbfchi }{\mathalpha}{mathematical bold small chi}%
+\UnicodeMathSymbol{"1D6D9}{\mbfpsi }{\mathalpha}{mathematical bold small psi}%
+\UnicodeMathSymbol{"1D6DA}{\mbfomega }{\mathalpha}{mathematical bold small omega}%
+\UnicodeMathSymbol{"1D6DB}{\mbfpartial }{\mathalpha}{mathematical bold partial differential}%
+\UnicodeMathSymbol{"1D6DC}{\mbfepsilon }{\mathalpha}{mathematical bold varepsilon symbol}%
+\UnicodeMathSymbol{"1D6DD}{\mbfvartheta }{\mathalpha}{mathematical bold theta symbol}%
+\UnicodeMathSymbol{"1D6DE}{\mbfvarkappa }{\mathalpha}{mathematical bold kappa symbol}%
+\UnicodeMathSymbol{"1D6DF}{\mbfphi }{\mathalpha}{mathematical bold phi symbol}%
+\UnicodeMathSymbol{"1D6E0}{\mbfvarrho }{\mathalpha}{mathematical bold rho symbol}%
+\UnicodeMathSymbol{"1D6E1}{\mbfvarpi }{\mathalpha}{mathematical bold pi symbol}%
+\UnicodeMathSymbol{"1D6E2}{\mitAlpha }{\mathalpha}{mathematical italic capital alpha}%
+\UnicodeMathSymbol{"1D6E3}{\mitBeta }{\mathalpha}{mathematical italic capital beta}%
+\UnicodeMathSymbol{"1D6E4}{\mitGamma }{\mathalpha}{mathematical italic capital gamma}%
+\UnicodeMathSymbol{"1D6E5}{\mitDelta }{\mathalpha}{mathematical italic capital delta}%
+\UnicodeMathSymbol{"1D6E6}{\mitEpsilon }{\mathalpha}{mathematical italic capital epsilon}%
+\UnicodeMathSymbol{"1D6E7}{\mitZeta }{\mathalpha}{mathematical italic capital zeta}%
+\UnicodeMathSymbol{"1D6E8}{\mitEta }{\mathalpha}{mathematical italic capital eta}%
+\UnicodeMathSymbol{"1D6E9}{\mitTheta }{\mathalpha}{mathematical italic capital theta}%
+\UnicodeMathSymbol{"1D6EA}{\mitIota }{\mathalpha}{mathematical italic capital iota}%
+\UnicodeMathSymbol{"1D6EB}{\mitKappa }{\mathalpha}{mathematical italic capital kappa}%
+\UnicodeMathSymbol{"1D6EC}{\mitLambda }{\mathalpha}{mathematical italic capital lambda}%
+\UnicodeMathSymbol{"1D6ED}{\mitMu }{\mathalpha}{mathematical italic capital mu}%
+\UnicodeMathSymbol{"1D6EE}{\mitNu }{\mathalpha}{mathematical italic capital nu}%
+\UnicodeMathSymbol{"1D6EF}{\mitXi }{\mathalpha}{mathematical italic capital xi}%
+\UnicodeMathSymbol{"1D6F0}{\mitOmicron }{\mathalpha}{mathematical italic capital omicron}%
+\UnicodeMathSymbol{"1D6F1}{\mitPi }{\mathalpha}{mathematical italic capital pi}%
+\UnicodeMathSymbol{"1D6F2}{\mitRho }{\mathalpha}{mathematical italic capital rho}%
+\UnicodeMathSymbol{"1D6F3}{\mitvarTheta }{\mathalpha}{mathematical italic capital theta symbol}%
+\UnicodeMathSymbol{"1D6F4}{\mitSigma }{\mathalpha}{mathematical italic capital sigma}%
+\UnicodeMathSymbol{"1D6F5}{\mitTau }{\mathalpha}{mathematical italic capital tau}%
+\UnicodeMathSymbol{"1D6F6}{\mitUpsilon }{\mathalpha}{mathematical italic capital upsilon}%
+\UnicodeMathSymbol{"1D6F7}{\mitPhi }{\mathalpha}{mathematical italic capital phi}%
+\UnicodeMathSymbol{"1D6F8}{\mitChi }{\mathalpha}{mathematical italic capital chi}%
+\UnicodeMathSymbol{"1D6F9}{\mitPsi }{\mathalpha}{mathematical italic capital psi}%
+\UnicodeMathSymbol{"1D6FA}{\mitOmega }{\mathalpha}{mathematical italic capital omega}%
+\UnicodeMathSymbol{"1D6FB}{\mitnabla }{\mathalpha}{mathematical italic nabla}%
+\UnicodeMathSymbol{"1D6FC}{\mitalpha }{\mathalpha}{mathematical italic small alpha}%
+\UnicodeMathSymbol{"1D6FD}{\mitbeta }{\mathalpha}{mathematical italic small beta}%
+\UnicodeMathSymbol{"1D6FE}{\mitgamma }{\mathalpha}{mathematical italic small gamma}%
+\UnicodeMathSymbol{"1D6FF}{\mitdelta }{\mathalpha}{mathematical italic small delta}%
+\UnicodeMathSymbol{"1D700}{\mitvarepsilon }{\mathalpha}{mathematical italic small varepsilon}%
+\UnicodeMathSymbol{"1D701}{\mitzeta }{\mathalpha}{mathematical italic small zeta}%
+\UnicodeMathSymbol{"1D702}{\miteta }{\mathalpha}{mathematical italic small eta}%
+\UnicodeMathSymbol{"1D703}{\mittheta }{\mathalpha}{mathematical italic small theta}%
+\UnicodeMathSymbol{"1D704}{\mitiota }{\mathalpha}{mathematical italic small iota}%
+\UnicodeMathSymbol{"1D705}{\mitkappa }{\mathalpha}{mathematical italic small kappa}%
+\UnicodeMathSymbol{"1D706}{\mitlambda }{\mathalpha}{mathematical italic small lambda}%
+\UnicodeMathSymbol{"1D707}{\mitmu }{\mathalpha}{mathematical italic small mu}%
+\UnicodeMathSymbol{"1D708}{\mitnu }{\mathalpha}{mathematical italic small nu}%
+\UnicodeMathSymbol{"1D709}{\mitxi }{\mathalpha}{mathematical italic small xi}%
+\UnicodeMathSymbol{"1D70A}{\mitomicron }{\mathalpha}{mathematical italic small omicron}%
+\UnicodeMathSymbol{"1D70B}{\mitpi }{\mathalpha}{mathematical italic small pi}%
+\UnicodeMathSymbol{"1D70C}{\mitrho }{\mathalpha}{mathematical italic small rho}%
+\UnicodeMathSymbol{"1D70D}{\mitvarsigma }{\mathalpha}{mathematical italic small final sigma}%
+\UnicodeMathSymbol{"1D70E}{\mitsigma }{\mathalpha}{mathematical italic small sigma}%
+\UnicodeMathSymbol{"1D70F}{\mittau }{\mathalpha}{mathematical italic small tau}%
+\UnicodeMathSymbol{"1D710}{\mitupsilon }{\mathalpha}{mathematical italic small upsilon}%
+\UnicodeMathSymbol{"1D711}{\mitvarphi }{\mathalpha}{mathematical italic small phi}%
+\UnicodeMathSymbol{"1D712}{\mitchi }{\mathalpha}{mathematical italic small chi}%
+\UnicodeMathSymbol{"1D713}{\mitpsi }{\mathalpha}{mathematical italic small psi}%
+\UnicodeMathSymbol{"1D714}{\mitomega }{\mathalpha}{mathematical italic small omega}%
+\UnicodeMathSymbol{"1D715}{\mitpartial }{\mathalpha}{mathematical italic partial differential}%
+\UnicodeMathSymbol{"1D716}{\mitepsilon }{\mathalpha}{mathematical italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D717}{\mitvartheta }{\mathalpha}{mathematical italic theta symbol}%
+\UnicodeMathSymbol{"1D718}{\mitvarkappa }{\mathalpha}{mathematical italic kappa symbol}%
+\UnicodeMathSymbol{"1D719}{\mitphi }{\mathalpha}{mathematical italic phi symbol}%
+\UnicodeMathSymbol{"1D71A}{\mitvarrho }{\mathalpha}{mathematical italic rho symbol}%
+\UnicodeMathSymbol{"1D71B}{\mitvarpi }{\mathalpha}{mathematical italic pi symbol}%
+\UnicodeMathSymbol{"1D71C}{\mbfitAlpha }{\mathalpha}{mathematical bold italic capital alpha}%
+\UnicodeMathSymbol{"1D71D}{\mbfitBeta }{\mathalpha}{mathematical bold italic capital beta}%
+\UnicodeMathSymbol{"1D71E}{\mbfitGamma }{\mathalpha}{mathematical bold italic capital gamma}%
+\UnicodeMathSymbol{"1D71F}{\mbfitDelta }{\mathalpha}{mathematical bold italic capital delta}%
+\UnicodeMathSymbol{"1D720}{\mbfitEpsilon }{\mathalpha}{mathematical bold italic capital epsilon}%
+\UnicodeMathSymbol{"1D721}{\mbfitZeta }{\mathalpha}{mathematical bold italic capital zeta}%
+\UnicodeMathSymbol{"1D722}{\mbfitEta }{\mathalpha}{mathematical bold italic capital eta}%
+\UnicodeMathSymbol{"1D723}{\mbfitTheta }{\mathalpha}{mathematical bold italic capital theta}%
+\UnicodeMathSymbol{"1D724}{\mbfitIota }{\mathalpha}{mathematical bold italic capital iota}%
+\UnicodeMathSymbol{"1D725}{\mbfitKappa }{\mathalpha}{mathematical bold italic capital kappa}%
+\UnicodeMathSymbol{"1D726}{\mbfitLambda }{\mathalpha}{mathematical bold italic capital lambda}%
+\UnicodeMathSymbol{"1D727}{\mbfitMu }{\mathalpha}{mathematical bold italic capital mu}%
+\UnicodeMathSymbol{"1D728}{\mbfitNu }{\mathalpha}{mathematical bold italic capital nu}%
+\UnicodeMathSymbol{"1D729}{\mbfitXi }{\mathalpha}{mathematical bold italic capital xi}%
+\UnicodeMathSymbol{"1D72A}{\mbfitOmicron }{\mathalpha}{mathematical bold italic capital omicron}%
+\UnicodeMathSymbol{"1D72B}{\mbfitPi }{\mathalpha}{mathematical bold italic capital pi}%
+\UnicodeMathSymbol{"1D72C}{\mbfitRho }{\mathalpha}{mathematical bold italic capital rho}%
+\UnicodeMathSymbol{"1D72D}{\mbfitvarTheta }{\mathalpha}{mathematical bold italic capital theta symbol}%
+\UnicodeMathSymbol{"1D72E}{\mbfitSigma }{\mathalpha}{mathematical bold italic capital sigma}%
+\UnicodeMathSymbol{"1D72F}{\mbfitTau }{\mathalpha}{mathematical bold italic capital tau}%
+\UnicodeMathSymbol{"1D730}{\mbfitUpsilon }{\mathalpha}{mathematical bold italic capital upsilon}%
+\UnicodeMathSymbol{"1D731}{\mbfitPhi }{\mathalpha}{mathematical bold italic capital phi}%
+\UnicodeMathSymbol{"1D732}{\mbfitChi }{\mathalpha}{mathematical bold italic capital chi}%
+\UnicodeMathSymbol{"1D733}{\mbfitPsi }{\mathalpha}{mathematical bold italic capital psi}%
+\UnicodeMathSymbol{"1D734}{\mbfitOmega }{\mathalpha}{mathematical bold italic capital omega}%
+\UnicodeMathSymbol{"1D735}{\mbfitnabla }{\mathalpha}{mathematical bold italic nabla}%
+\UnicodeMathSymbol{"1D736}{\mbfitalpha }{\mathalpha}{mathematical bold italic small alpha}%
+\UnicodeMathSymbol{"1D737}{\mbfitbeta }{\mathalpha}{mathematical bold italic small beta}%
+\UnicodeMathSymbol{"1D738}{\mbfitgamma }{\mathalpha}{mathematical bold italic small gamma}%
+\UnicodeMathSymbol{"1D739}{\mbfitdelta }{\mathalpha}{mathematical bold italic small delta}%
+\UnicodeMathSymbol{"1D73A}{\mbfitvarepsilon }{\mathalpha}{mathematical bold italic small varepsilon}%
+\UnicodeMathSymbol{"1D73B}{\mbfitzeta }{\mathalpha}{mathematical bold italic small zeta}%
+\UnicodeMathSymbol{"1D73C}{\mbfiteta }{\mathalpha}{mathematical bold italic small eta}%
+\UnicodeMathSymbol{"1D73D}{\mbfittheta }{\mathalpha}{mathematical bold italic small theta}%
+\UnicodeMathSymbol{"1D73E}{\mbfitiota }{\mathalpha}{mathematical bold italic small iota}%
+\UnicodeMathSymbol{"1D73F}{\mbfitkappa }{\mathalpha}{mathematical bold italic small kappa}%
+\UnicodeMathSymbol{"1D740}{\mbfitlambda }{\mathalpha}{mathematical bold italic small lambda}%
+\UnicodeMathSymbol{"1D741}{\mbfitmu }{\mathalpha}{mathematical bold italic small mu}%
+\UnicodeMathSymbol{"1D742}{\mbfitnu }{\mathalpha}{mathematical bold italic small nu}%
+\UnicodeMathSymbol{"1D743}{\mbfitxi }{\mathalpha}{mathematical bold italic small xi}%
+\UnicodeMathSymbol{"1D744}{\mbfitomicron }{\mathalpha}{mathematical bold italic small omicron}%
+\UnicodeMathSymbol{"1D745}{\mbfitpi }{\mathalpha}{mathematical bold italic small pi}%
+\UnicodeMathSymbol{"1D746}{\mbfitrho }{\mathalpha}{mathematical bold italic small rho}%
+\UnicodeMathSymbol{"1D747}{\mbfitvarsigma }{\mathalpha}{mathematical bold italic small final sigma}%
+\UnicodeMathSymbol{"1D748}{\mbfitsigma }{\mathalpha}{mathematical bold italic small sigma}%
+\UnicodeMathSymbol{"1D749}{\mbfittau }{\mathalpha}{mathematical bold italic small tau}%
+\UnicodeMathSymbol{"1D74A}{\mbfitupsilon }{\mathalpha}{mathematical bold italic small upsilon}%
+\UnicodeMathSymbol{"1D74B}{\mbfitvarphi }{\mathalpha}{mathematical bold italic small phi}%
+\UnicodeMathSymbol{"1D74C}{\mbfitchi }{\mathalpha}{mathematical bold italic small chi}%
+\UnicodeMathSymbol{"1D74D}{\mbfitpsi }{\mathalpha}{mathematical bold italic small psi}%
+\UnicodeMathSymbol{"1D74E}{\mbfitomega }{\mathalpha}{mathematical bold italic small omega}%
+\UnicodeMathSymbol{"1D74F}{\mbfitpartial }{\mathalpha}{mathematical bold italic partial differential}%
+\UnicodeMathSymbol{"1D750}{\mbfitepsilon }{\mathalpha}{mathematical bold italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D751}{\mbfitvartheta }{\mathalpha}{mathematical bold italic theta symbol}%
+\UnicodeMathSymbol{"1D752}{\mbfitvarkappa }{\mathalpha}{mathematical bold italic kappa symbol}%
+\UnicodeMathSymbol{"1D753}{\mbfitphi }{\mathalpha}{mathematical bold italic phi symbol}%
+\UnicodeMathSymbol{"1D754}{\mbfitvarrho }{\mathalpha}{mathematical bold italic rho symbol}%
+\UnicodeMathSymbol{"1D755}{\mbfitvarpi }{\mathalpha}{mathematical bold italic pi symbol}%
+\UnicodeMathSymbol{"1D756}{\mbfsansAlpha }{\mathalpha}{mathematical sans-serif bold capital alpha}%
+\UnicodeMathSymbol{"1D757}{\mbfsansBeta }{\mathalpha}{mathematical sans-serif bold capital beta}%
+\UnicodeMathSymbol{"1D758}{\mbfsansGamma }{\mathalpha}{mathematical sans-serif bold capital gamma}%
+\UnicodeMathSymbol{"1D759}{\mbfsansDelta }{\mathalpha}{mathematical sans-serif bold capital delta}%
+\UnicodeMathSymbol{"1D75A}{\mbfsansEpsilon }{\mathalpha}{mathematical sans-serif bold capital epsilon}%
+\UnicodeMathSymbol{"1D75B}{\mbfsansZeta }{\mathalpha}{mathematical sans-serif bold capital zeta}%
+\UnicodeMathSymbol{"1D75C}{\mbfsansEta }{\mathalpha}{mathematical sans-serif bold capital eta}%
+\UnicodeMathSymbol{"1D75D}{\mbfsansTheta }{\mathalpha}{mathematical sans-serif bold capital theta}%
+\UnicodeMathSymbol{"1D75E}{\mbfsansIota }{\mathalpha}{mathematical sans-serif bold capital iota}%
+\UnicodeMathSymbol{"1D75F}{\mbfsansKappa }{\mathalpha}{mathematical sans-serif bold capital kappa}%
+\UnicodeMathSymbol{"1D760}{\mbfsansLambda }{\mathalpha}{mathematical sans-serif bold capital lambda}%
+\UnicodeMathSymbol{"1D761}{\mbfsansMu }{\mathalpha}{mathematical sans-serif bold capital mu}%
+\UnicodeMathSymbol{"1D762}{\mbfsansNu }{\mathalpha}{mathematical sans-serif bold capital nu}%
+\UnicodeMathSymbol{"1D763}{\mbfsansXi }{\mathalpha}{mathematical sans-serif bold capital xi}%
+\UnicodeMathSymbol{"1D764}{\mbfsansOmicron }{\mathalpha}{mathematical sans-serif bold capital omicron}%
+\UnicodeMathSymbol{"1D765}{\mbfsansPi }{\mathalpha}{mathematical sans-serif bold capital pi}%
+\UnicodeMathSymbol{"1D766}{\mbfsansRho }{\mathalpha}{mathematical sans-serif bold capital rho}%
+\UnicodeMathSymbol{"1D767}{\mbfsansvarTheta }{\mathalpha}{mathematical sans-serif bold capital theta symbol}%
+\UnicodeMathSymbol{"1D768}{\mbfsansSigma }{\mathalpha}{mathematical sans-serif bold capital sigma}%
+\UnicodeMathSymbol{"1D769}{\mbfsansTau }{\mathalpha}{mathematical sans-serif bold capital tau}%
+\UnicodeMathSymbol{"1D76A}{\mbfsansUpsilon }{\mathalpha}{mathematical sans-serif bold capital upsilon}%
+\UnicodeMathSymbol{"1D76B}{\mbfsansPhi }{\mathalpha}{mathematical sans-serif bold capital phi}%
+\UnicodeMathSymbol{"1D76C}{\mbfsansChi }{\mathalpha}{mathematical sans-serif bold capital chi}%
+\UnicodeMathSymbol{"1D76D}{\mbfsansPsi }{\mathalpha}{mathematical sans-serif bold capital psi}%
+\UnicodeMathSymbol{"1D76E}{\mbfsansOmega }{\mathalpha}{mathematical sans-serif bold capital omega}%
+\UnicodeMathSymbol{"1D76F}{\mbfsansnabla }{\mathalpha}{mathematical sans-serif bold nabla}%
+\UnicodeMathSymbol{"1D770}{\mbfsansalpha }{\mathalpha}{mathematical sans-serif bold small alpha}%
+\UnicodeMathSymbol{"1D771}{\mbfsansbeta }{\mathalpha}{mathematical sans-serif bold small beta}%
+\UnicodeMathSymbol{"1D772}{\mbfsansgamma }{\mathalpha}{mathematical sans-serif bold small gamma}%
+\UnicodeMathSymbol{"1D773}{\mbfsansdelta }{\mathalpha}{mathematical sans-serif bold small delta}%
+\UnicodeMathSymbol{"1D774}{\mbfsansvarepsilon }{\mathalpha}{mathematical sans-serif bold small varepsilon}%
+\UnicodeMathSymbol{"1D775}{\mbfsanszeta }{\mathalpha}{mathematical sans-serif bold small zeta}%
+\UnicodeMathSymbol{"1D776}{\mbfsanseta }{\mathalpha}{mathematical sans-serif bold small eta}%
+\UnicodeMathSymbol{"1D777}{\mbfsanstheta }{\mathalpha}{mathematical sans-serif bold small theta}%
+\UnicodeMathSymbol{"1D778}{\mbfsansiota }{\mathalpha}{mathematical sans-serif bold small iota}%
+\UnicodeMathSymbol{"1D779}{\mbfsanskappa }{\mathalpha}{mathematical sans-serif bold small kappa}%
+\UnicodeMathSymbol{"1D77A}{\mbfsanslambda }{\mathalpha}{mathematical sans-serif bold small lambda}%
+\UnicodeMathSymbol{"1D77B}{\mbfsansmu }{\mathalpha}{mathematical sans-serif bold small mu}%
+\UnicodeMathSymbol{"1D77C}{\mbfsansnu }{\mathalpha}{mathematical sans-serif bold small nu}%
+\UnicodeMathSymbol{"1D77D}{\mbfsansxi }{\mathalpha}{mathematical sans-serif bold small xi}%
+\UnicodeMathSymbol{"1D77E}{\mbfsansomicron }{\mathalpha}{mathematical sans-serif bold small omicron}%
+\UnicodeMathSymbol{"1D77F}{\mbfsanspi }{\mathalpha}{mathematical sans-serif bold small pi}%
+\UnicodeMathSymbol{"1D780}{\mbfsansrho }{\mathalpha}{mathematical sans-serif bold small rho}%
+\UnicodeMathSymbol{"1D781}{\mbfsansvarsigma }{\mathalpha}{mathematical sans-serif bold small final sigma}%
+\UnicodeMathSymbol{"1D782}{\mbfsanssigma }{\mathalpha}{mathematical sans-serif bold small sigma}%
+\UnicodeMathSymbol{"1D783}{\mbfsanstau }{\mathalpha}{mathematical sans-serif bold small tau}%
+\UnicodeMathSymbol{"1D784}{\mbfsansupsilon }{\mathalpha}{mathematical sans-serif bold small upsilon}%
+\UnicodeMathSymbol{"1D785}{\mbfsansvarphi }{\mathalpha}{mathematical sans-serif bold small phi}%
+\UnicodeMathSymbol{"1D786}{\mbfsanschi }{\mathalpha}{mathematical sans-serif bold small chi}%
+\UnicodeMathSymbol{"1D787}{\mbfsanspsi }{\mathalpha}{mathematical sans-serif bold small psi}%
+\UnicodeMathSymbol{"1D788}{\mbfsansomega }{\mathalpha}{mathematical sans-serif bold small omega}%
+\UnicodeMathSymbol{"1D789}{\mbfsanspartial }{\mathalpha}{mathematical sans-serif bold partial differential}%
+\UnicodeMathSymbol{"1D78A}{\mbfsansepsilon }{\mathalpha}{mathematical sans-serif bold varepsilon symbol}%
+\UnicodeMathSymbol{"1D78B}{\mbfsansvartheta }{\mathalpha}{mathematical sans-serif bold theta symbol}%
+\UnicodeMathSymbol{"1D78C}{\mbfsansvarkappa }{\mathalpha}{mathematical sans-serif bold kappa symbol}%
+\UnicodeMathSymbol{"1D78D}{\mbfsansphi }{\mathalpha}{mathematical sans-serif bold phi symbol}%
+\UnicodeMathSymbol{"1D78E}{\mbfsansvarrho }{\mathalpha}{mathematical sans-serif bold rho symbol}%
+\UnicodeMathSymbol{"1D78F}{\mbfsansvarpi }{\mathalpha}{mathematical sans-serif bold pi symbol}%
+\UnicodeMathSymbol{"1D790}{\mbfitsansAlpha }{\mathalpha}{mathematical sans-serif bold italic capital alpha}%
+\UnicodeMathSymbol{"1D791}{\mbfitsansBeta }{\mathalpha}{mathematical sans-serif bold italic capital beta}%
+\UnicodeMathSymbol{"1D792}{\mbfitsansGamma }{\mathalpha}{mathematical sans-serif bold italic capital gamma}%
+\UnicodeMathSymbol{"1D793}{\mbfitsansDelta }{\mathalpha}{mathematical sans-serif bold italic capital delta}%
+\UnicodeMathSymbol{"1D794}{\mbfitsansEpsilon }{\mathalpha}{mathematical sans-serif bold italic capital epsilon}%
+\UnicodeMathSymbol{"1D795}{\mbfitsansZeta }{\mathalpha}{mathematical sans-serif bold italic capital zeta}%
+\UnicodeMathSymbol{"1D796}{\mbfitsansEta }{\mathalpha}{mathematical sans-serif bold italic capital eta}%
+\UnicodeMathSymbol{"1D797}{\mbfitsansTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta}%
+\UnicodeMathSymbol{"1D798}{\mbfitsansIota }{\mathalpha}{mathematical sans-serif bold italic capital iota}%
+\UnicodeMathSymbol{"1D799}{\mbfitsansKappa }{\mathalpha}{mathematical sans-serif bold italic capital kappa}%
+\UnicodeMathSymbol{"1D79A}{\mbfitsansLambda }{\mathalpha}{mathematical sans-serif bold italic capital lambda}%
+\UnicodeMathSymbol{"1D79B}{\mbfitsansMu }{\mathalpha}{mathematical sans-serif bold italic capital mu}%
+\UnicodeMathSymbol{"1D79C}{\mbfitsansNu }{\mathalpha}{mathematical sans-serif bold italic capital nu}%
+\UnicodeMathSymbol{"1D79D}{\mbfitsansXi }{\mathalpha}{mathematical sans-serif bold italic capital xi}%
+\UnicodeMathSymbol{"1D79E}{\mbfitsansOmicron }{\mathalpha}{mathematical sans-serif bold italic capital omicron}%
+\UnicodeMathSymbol{"1D79F}{\mbfitsansPi }{\mathalpha}{mathematical sans-serif bold italic capital pi}%
+\UnicodeMathSymbol{"1D7A0}{\mbfitsansRho }{\mathalpha}{mathematical sans-serif bold italic capital rho}%
+\UnicodeMathSymbol{"1D7A1}{\mbfitsansvarTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta symbol}%
+\UnicodeMathSymbol{"1D7A2}{\mbfitsansSigma }{\mathalpha}{mathematical sans-serif bold italic capital sigma}%
+\UnicodeMathSymbol{"1D7A3}{\mbfitsansTau }{\mathalpha}{mathematical sans-serif bold italic capital tau}%
+\UnicodeMathSymbol{"1D7A4}{\mbfitsansUpsilon }{\mathalpha}{mathematical sans-serif bold italic capital upsilon}%
+\UnicodeMathSymbol{"1D7A5}{\mbfitsansPhi }{\mathalpha}{mathematical sans-serif bold italic capital phi}%
+\UnicodeMathSymbol{"1D7A6}{\mbfitsansChi }{\mathalpha}{mathematical sans-serif bold italic capital chi}%
+\UnicodeMathSymbol{"1D7A7}{\mbfitsansPsi }{\mathalpha}{mathematical sans-serif bold italic capital psi}%
+\UnicodeMathSymbol{"1D7A8}{\mbfitsansOmega }{\mathalpha}{mathematical sans-serif bold italic capital omega}%
+\UnicodeMathSymbol{"1D7A9}{\mbfitsansnabla }{\mathalpha}{mathematical sans-serif bold italic nabla}%
+\UnicodeMathSymbol{"1D7AA}{\mbfitsansalpha }{\mathalpha}{mathematical sans-serif bold italic small alpha}%
+\UnicodeMathSymbol{"1D7AB}{\mbfitsansbeta }{\mathalpha}{mathematical sans-serif bold italic small beta}%
+\UnicodeMathSymbol{"1D7AC}{\mbfitsansgamma }{\mathalpha}{mathematical sans-serif bold italic small gamma}%
+\UnicodeMathSymbol{"1D7AD}{\mbfitsansdelta }{\mathalpha}{mathematical sans-serif bold italic small delta}%
+\UnicodeMathSymbol{"1D7AE}{\mbfitsansvarepsilon }{\mathalpha}{mathematical sans-serif bold italic small varepsilon}%
+\UnicodeMathSymbol{"1D7AF}{\mbfitsanszeta }{\mathalpha}{mathematical sans-serif bold italic small zeta}%
+\UnicodeMathSymbol{"1D7B0}{\mbfitsanseta }{\mathalpha}{mathematical sans-serif bold italic small eta}%
+\UnicodeMathSymbol{"1D7B1}{\mbfitsanstheta }{\mathalpha}{mathematical sans-serif bold italic small theta}%
+\UnicodeMathSymbol{"1D7B2}{\mbfitsansiota }{\mathalpha}{mathematical sans-serif bold italic small iota}%
+\UnicodeMathSymbol{"1D7B3}{\mbfitsanskappa }{\mathalpha}{mathematical sans-serif bold italic small kappa}%
+\UnicodeMathSymbol{"1D7B4}{\mbfitsanslambda }{\mathalpha}{mathematical sans-serif bold italic small lambda}%
+\UnicodeMathSymbol{"1D7B5}{\mbfitsansmu }{\mathalpha}{mathematical sans-serif bold italic small mu}%
+\UnicodeMathSymbol{"1D7B6}{\mbfitsansnu }{\mathalpha}{mathematical sans-serif bold italic small nu}%
+\UnicodeMathSymbol{"1D7B7}{\mbfitsansxi }{\mathalpha}{mathematical sans-serif bold italic small xi}%
+\UnicodeMathSymbol{"1D7B8}{\mbfitsansomicron }{\mathalpha}{mathematical sans-serif bold italic small omicron}%
+\UnicodeMathSymbol{"1D7B9}{\mbfitsanspi }{\mathalpha}{mathematical sans-serif bold italic small pi}%
+\UnicodeMathSymbol{"1D7BA}{\mbfitsansrho }{\mathalpha}{mathematical sans-serif bold italic small rho}%
+\UnicodeMathSymbol{"1D7BB}{\mbfitsansvarsigma }{\mathalpha}{mathematical sans-serif bold italic small final sigma}%
+\UnicodeMathSymbol{"1D7BC}{\mbfitsanssigma }{\mathalpha}{mathematical sans-serif bold italic small sigma}%
+\UnicodeMathSymbol{"1D7BD}{\mbfitsanstau }{\mathalpha}{mathematical sans-serif bold italic small tau}%
+\UnicodeMathSymbol{"1D7BE}{\mbfitsansupsilon }{\mathalpha}{mathematical sans-serif bold italic small upsilon}%
+\UnicodeMathSymbol{"1D7BF}{\mbfitsansvarphi }{\mathalpha}{mathematical sans-serif bold italic small phi}%
+\UnicodeMathSymbol{"1D7C0}{\mbfitsanschi }{\mathalpha}{mathematical sans-serif bold italic small chi}%
+\UnicodeMathSymbol{"1D7C1}{\mbfitsanspsi }{\mathalpha}{mathematical sans-serif bold italic small psi}%
+\UnicodeMathSymbol{"1D7C2}{\mbfitsansomega }{\mathalpha}{mathematical sans-serif bold italic small omega}%
+\UnicodeMathSymbol{"1D7C3}{\mbfitsanspartial }{\mathalpha}{mathematical sans-serif bold italic partial differential}%
+\UnicodeMathSymbol{"1D7C4}{\mbfitsansepsilon }{\mathalpha}{mathematical sans-serif bold italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D7C5}{\mbfitsansvartheta }{\mathalpha}{mathematical sans-serif bold italic theta symbol}%
+\UnicodeMathSymbol{"1D7C6}{\mbfitsansvarkappa }{\mathalpha}{mathematical sans-serif bold italic kappa symbol}%
+\UnicodeMathSymbol{"1D7C7}{\mbfitsansphi }{\mathalpha}{mathematical sans-serif bold italic phi symbol}%
+\UnicodeMathSymbol{"1D7C8}{\mbfitsansvarrho }{\mathalpha}{mathematical sans-serif bold italic rho symbol}%
+\UnicodeMathSymbol{"1D7C9}{\mbfitsansvarpi }{\mathalpha}{mathematical sans-serif bold italic pi symbol}%
+\UnicodeMathSymbol{"1D7CA}{\mbfDigamma }{\mathalpha}{mathematical bold capital digamma}%
+\UnicodeMathSymbol{"1D7CB}{\mbfdigamma }{\mathalpha}{mathematical bold small digamma}%
+\UnicodeMathSymbol{"1D7CE}{\mbfzero }{\mathord}{mathematical bold digit 0}%
+\UnicodeMathSymbol{"1D7CF}{\mbfone }{\mathord}{mathematical bold digit 1}%
+\UnicodeMathSymbol{"1D7D0}{\mbftwo }{\mathord}{mathematical bold digit 2}%
+\UnicodeMathSymbol{"1D7D1}{\mbfthree }{\mathord}{mathematical bold digit 3}%
+\UnicodeMathSymbol{"1D7D2}{\mbffour }{\mathord}{mathematical bold digit 4}%
+\UnicodeMathSymbol{"1D7D3}{\mbffive }{\mathord}{mathematical bold digit 5}%
+\UnicodeMathSymbol{"1D7D4}{\mbfsix }{\mathord}{mathematical bold digit 6}%
+\UnicodeMathSymbol{"1D7D5}{\mbfseven }{\mathord}{mathematical bold digit 7}%
+\UnicodeMathSymbol{"1D7D6}{\mbfeight }{\mathord}{mathematical bold digit 8}%
+\UnicodeMathSymbol{"1D7D7}{\mbfnine }{\mathord}{mathematical bold digit 9}%
+\UnicodeMathSymbol{"1D7D8}{\Bbbzero }{\mathord}{mathematical double-struck digit 0}%
+\UnicodeMathSymbol{"1D7D9}{\Bbbone }{\mathord}{mathematical double-struck digit 1}%
+\UnicodeMathSymbol{"1D7DA}{\Bbbtwo }{\mathord}{mathematical double-struck digit 2}%
+\UnicodeMathSymbol{"1D7DB}{\Bbbthree }{\mathord}{mathematical double-struck digit 3}%
+\UnicodeMathSymbol{"1D7DC}{\Bbbfour }{\mathord}{mathematical double-struck digit 4}%
+\UnicodeMathSymbol{"1D7DD}{\Bbbfive }{\mathord}{mathematical double-struck digit 5}%
+\UnicodeMathSymbol{"1D7DE}{\Bbbsix }{\mathord}{mathematical double-struck digit 6}%
+\UnicodeMathSymbol{"1D7DF}{\Bbbseven }{\mathord}{mathematical double-struck digit 7}%
+\UnicodeMathSymbol{"1D7E0}{\Bbbeight }{\mathord}{mathematical double-struck digit 8}%
+\UnicodeMathSymbol{"1D7E1}{\Bbbnine }{\mathord}{mathematical double-struck digit 9}%
+\UnicodeMathSymbol{"1D7E2}{\msanszero }{\mathord}{mathematical sans-serif digit 0}%
+\UnicodeMathSymbol{"1D7E3}{\msansone }{\mathord}{mathematical sans-serif digit 1}%
+\UnicodeMathSymbol{"1D7E4}{\msanstwo }{\mathord}{mathematical sans-serif digit 2}%
+\UnicodeMathSymbol{"1D7E5}{\msansthree }{\mathord}{mathematical sans-serif digit 3}%
+\UnicodeMathSymbol{"1D7E6}{\msansfour }{\mathord}{mathematical sans-serif digit 4}%
+\UnicodeMathSymbol{"1D7E7}{\msansfive }{\mathord}{mathematical sans-serif digit 5}%
+\UnicodeMathSymbol{"1D7E8}{\msanssix }{\mathord}{mathematical sans-serif digit 6}%
+\UnicodeMathSymbol{"1D7E9}{\msansseven }{\mathord}{mathematical sans-serif digit 7}%
+\UnicodeMathSymbol{"1D7EA}{\msanseight }{\mathord}{mathematical sans-serif digit 8}%
+\UnicodeMathSymbol{"1D7EB}{\msansnine }{\mathord}{mathematical sans-serif digit 9}%
+\UnicodeMathSymbol{"1D7EC}{\mbfsanszero }{\mathord}{mathematical sans-serif bold digit 0}%
+\UnicodeMathSymbol{"1D7ED}{\mbfsansone }{\mathord}{mathematical sans-serif bold digit 1}%
+\UnicodeMathSymbol{"1D7EE}{\mbfsanstwo }{\mathord}{mathematical sans-serif bold digit 2}%
+\UnicodeMathSymbol{"1D7EF}{\mbfsansthree }{\mathord}{mathematical sans-serif bold digit 3}%
+\UnicodeMathSymbol{"1D7F0}{\mbfsansfour }{\mathord}{mathematical sans-serif bold digit 4}%
+\UnicodeMathSymbol{"1D7F1}{\mbfsansfive }{\mathord}{mathematical sans-serif bold digit 5}%
+\UnicodeMathSymbol{"1D7F2}{\mbfsanssix }{\mathord}{mathematical sans-serif bold digit 6}%
+\UnicodeMathSymbol{"1D7F3}{\mbfsansseven }{\mathord}{mathematical sans-serif bold digit 7}%
+\UnicodeMathSymbol{"1D7F4}{\mbfsanseight }{\mathord}{mathematical sans-serif bold digit 8}%
+\UnicodeMathSymbol{"1D7F5}{\mbfsansnine }{\mathord}{mathematical sans-serif bold digit 9}%
+\UnicodeMathSymbol{"1D7F6}{\mttzero }{\mathord}{mathematical monospace digit 0}%
+\UnicodeMathSymbol{"1D7F7}{\mttone }{\mathord}{mathematical monospace digit 1}%
+\UnicodeMathSymbol{"1D7F8}{\mtttwo }{\mathord}{mathematical monospace digit 2}%
+\UnicodeMathSymbol{"1D7F9}{\mttthree }{\mathord}{mathematical monospace digit 3}%
+\UnicodeMathSymbol{"1D7FA}{\mttfour }{\mathord}{mathematical monospace digit 4}%
+\UnicodeMathSymbol{"1D7FB}{\mttfive }{\mathord}{mathematical monospace digit 5}%
+\UnicodeMathSymbol{"1D7FC}{\mttsix }{\mathord}{mathematical monospace digit 6}%
+\UnicodeMathSymbol{"1D7FD}{\mttseven }{\mathord}{mathematical monospace digit 7}%
+\UnicodeMathSymbol{"1D7FE}{\mtteight }{\mathord}{mathematical monospace digit 8}%
+\UnicodeMathSymbol{"1D7FF}{\mttnine }{\mathord}{mathematical monospace digit 9}%
+\UnicodeMathSymbol{"1EEF0}{\arabicmaj }{\mathop}{arabic mathematical operator meem with hah with tatweel}%
+\UnicodeMathSymbol{"1EEF1}{\arabichad }{\mathop}{arabic mathematical operator hah with dal}%
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
+
diff --git a/macros/luatex/optex/base/usebib.opm b/macros/luatex/optex/base/usebib.opm
new file mode 100644
index 0000000000..33ac47b575
--- /dev/null
+++ b/macros/luatex/optex/base/usebib.opm
@@ -0,0 +1,351 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \MakeReference {Reading bib databases <2020-03-13>} % loaded on demand by \usebib
+
+ \_doc -----------------------------
+ Loading the `librarian.tex` macro package. See `texdoc librarian`
+ for more information about it.
+ \_cod -----------------------------
+
+\_def\_tmp{}
+\_let\_errmessageori=\_errmessage % we needn't \errmessage during \input librarian
+\_def\_errmessage#1{\_def\_tmp{error}}
+\_let\_newwriteori=\_newwrite % we need not to create \jobname.lbr:
+\_def\_newwrite#1{\_csname lb@restoreat\_endcsname \_endinput}
+\_def\_tmpb{\_catcode`\_=12 \_input librarian \_catcode`\_=11 }\_tmpb
+\_let\_errmessage=\_errmessageori
+\_let\_newwrite=\_newwriteori
+\_ifx\_tmp\_empty\_else
+ \_def\_usebib/#1 (#2) #3 {%
+ \_opwarning{eTeX and (pdfTeX or XeTeX or LuaTeX) not detected}%
+ \_immediate\_write16{\_space\_space
+ But librarian package needs it. \_noexpand\usebib ignored.}%
+ }
+ \_endinput \_fi
+\_private \BibFile \ReadList \SortList \SortingOrder \NameCount \AbbreviateFirstname
+ \CreateField \RetrieveFieldInFor \RetrieveFieldIn ;
+
+ \_doc -----------------------------
+ The `\usebib` command.
+ \_cod -----------------------------
+
+\_def\_usebib/#1 (#2) #3 {%
+ \_ifx\_citelist\_empty
+ \_opwarning{No cited items. \_noexpand\usebib ignored}%
+ \_else
+ \_bgroup \_par
+ \_emergencystretch=.3\_hsize
+ \_ifx\_bibpart\_undefined \_def\_bibpart{none}\_fi
+ \_def\_optexbibstyle{#2}%
+ \_setctable\_optexcatcodes
+ \_input bib-#2.opm
+ \_the \_bibtexhook
+ \_let\_citeI=\_relax \_xdef\_citelist{\_citelist\_citelistB}%
+ \_global\_let\_addcitelist=\_writeXcite
+ \_def\_tmp##1[*]##2\_relax{\_def\_tmp{##2}}\_expandafter\_tmp\_citelist[*]\_relax
+ \_ifx\_tmp\_empty\_else % there was \nocite[*] used.
+ \_setbox0=\_vbox{\_hsize=\_maxdimen \_def\_citelist{}\_adef@{\_readbibentry}%
+ \_input #3.bib
+ \_expandafter}\_expandafter\_def\_expandafter\_citelist\_expandafter{\_citelist}%
+ \_fi
+ \_def\_citeI[##1]{\_csname lb@cite\_endcsname{##1}{\_bibpart}{}{}}\_citelist
+ \_BibFile{#3}%
+ \_if s#1\_SortList{\_bibpart}\_fi
+ \_ReadList{\_bibpart}%
+ \_restorectable
+ \_egroup
+ \_fi
+}
+\_def\_readbibentry#1#{\_readbibentryA}
+\_def\_readbibentryA#1{\_readbibentryB#1,,\_relax!.}
+\_def\_readbibentryB#1#2,#3\_relax!.{\_addto\_citelist{\_citeI[#1#2]}}
+
+ \_doc -----------------------------
+ Corrections in librarian macros.
+ \_cod -----------------------------
+
+\_tmpnum=\_catcode`\@ \_catcode`\@=11
+\_def\lb@checkmissingentries#1,{% we needn't \errmessage here, only \opmacwarning
+ \_def\lb@temp{#1}%
+ \_unless\_ifx\lb@temp\lb@eoe
+ \lb@ifcs{#1}{fields}%
+ {}%
+ {\_opwarning{\_string\_usebib: entry [#1] isn't found in .bib file(s)}}%
+ \_ea\lb@checkmissingentries
+ \_fi
+}
+\_def\lb@readentry#1#2#3,{% space before key have to be ingnored
+ \_def\lb@temp{#2#3}% we need case sensitive keys
+ \_def\lb@next{\_ea\lb@gotoat\lb@gobbletoeoe}%
+ \lb@ifcs\lb@temp{requested}%
+ {\_let\lb@entrykey\lb@temp
+ \lb@ifcs\lb@entrykey{fields}{}%
+ {\lb@defcs\lb@entrykey{fields}{}%
+ \_lowercase{\lb@addfield{entrytype}{#1}}%
+ \_let\lb@next\lb@analyzeentry}}{}%
+ \lb@next
+}
+\_let\lb@compareA=\lb@compare
+\_let\lb@preparesortA=\lb@preparesort
+\_def\lb@compare#1\lb@eoe#2\lb@eoe{% SpecialSort:
+ \_ifx\lb@sorttype\lb@namestring
+ \_ifx\_sortfield\_undefined \lb@compareA#1\lb@eoe#2\lb@eoe
+ \_else
+ \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@entrykey\lb@temp
+ \_ifx\lb@temp\_empty \_toks1={#1\lb@eoe}\_else \_toks1=\_ea{\lb@temp\lb@eoe}\_fi
+ \_ea\_RetrieveFieldInFor\_ea{\_sortfield}\lb@currententry\lb@temp
+ \_ifx\lb@temp\_empty \_toks2={#2\lb@eoe}\_else \_toks2=\_ea{\lb@temp\lb@eoe}\_fi
+ \_edef\lb@temp{\_noexpand\lb@compareA\_space\_the\_toks1 \_space\_the\_toks2}\lb@temp
+ \_fi
+ \_else \lb@compareA#1\lb@eoe#2\lb@eoe \_fi
+}
+\_def\lb@preparesort#1#2\lb@eoe{%
+ \_if#1-%
+ \_def\lb@sorttype{#2}%
+ \_else
+ \_def\lb@sorttype{#1#2}%
+ \_fi
+ \lb@preparesortA#1#2\lb@eoe
+}
+\_def\_SpecialSort#1{\_def\_sortfield{#1}}
+\_def\WriteImmediateInfo#1{} % the existence of .lbr file bocks new reading of .bib
+\_catcode`\@=\_tmpnum
+
+ \_doc -----------------------------
+ Main action per every entry.
+ \_cod -----------------------------
+
+\_def\MakeReference{\_par \_bibskip
+ \_advance\_bibnum by1
+ \_isdefined{_bim:\_the\_bibnum}\_iftrue
+ \_edef\_tmpb{\_csname _bim:\_the\_bibnum\_endcsname}%
+ \_bibmark=\_ea{\_tmpb}%
+ \_else \_bibmark={}\_fi
+ \_edef\_tmpb{\EntryKey}%
+ \_noindent \_dest[cite:\_the\_bibnum]\_printlabel\EntryKey
+ \_printbib
+ {%
+ \_RetrieveFieldIn{entrytype}\_entrytype
+ \_csname _print:BEGIN\_endcsname
+ \_isdefined{_print:\_entrytype}\_iftrue
+ \_csname _print:\_entrytype\_endcsname
+ \_else
+ \_ifx\_entrytype\_empty \_else
+ \_opwarning{Entrytype @\_entrytype\_space from [\EntryKey] undefined}%
+ \_csname _print:misc\_endcsname
+ \_fi\_fi
+ \_csname _print:END\_endcsname
+ \_ifx\_wref\_wrefrelax\_else
+ \_immediate\_wref\_Xbib{{\EntryKey}{\_the\_bibnum}{\_the\_bibmark}}\_fi
+ }\_par
+}
+
+ \_doc -----------------------------
+ The \`\_bprinta`, \`\_bprintb`, \`\_bprintc`, \`\_bprintv`
+ commands used in the style files:
+ \_cod -----------------------------
+
+\_def\_bprinta {\_bprintb*}
+\_def\_bprintb #1[#2#3]{%
+ \_def\_bibfieldname{#2#3}%
+ \_if!#2\_relax
+ \_def\_bibfieldname{#3}%
+ \_RetrieveFieldIn{#3}\_bibfield
+ \_ifx\_bibfield\_empty\_else
+ \_RetrieveFieldIn{#3number}\_namecount
+ \_def\_bibfield{\_csname _Read#3\_ea\_endcsname \_csname _pp:#3\_endcsname}%
+ \_fi
+ \_else
+ \_RetrieveFieldIn{#2#3}\_bibfield
+ \_fi
+ \_if^#1^%
+ \_ifx\_bibfield\_empty \_ea\_ea\_ea \_doemptyfield
+ \_else \_ea\_ea\_ea \_dofullfield \_fi
+ \_else \_ea \_bprintaA
+ \_fi
+}
+\_def\_dofullfield#1#2{\_def\_dofield##1{#1}\_ea\_dofield\_ea{\_bibfield}}
+\_def\_doemptyfield#1#2{\_def\_dofield##1{#2}\_ea\_dofield\_ea{\_bibfield}}
+\_let\_Readauthor=\ReadAuthor \_let\_Readeditor=\ReadEditor
+\_def\_bprintaA #1#2{\_ifx\_bibfield\_empty #2\_else\_bprintaB #1**\_eee\_fi}
+\_def\_bprintaB #1*#2*#3\_eee{\_if^#3^#1\_else\_ea\_bprintaC\_ea{\_bibfield}{#1}{#2}\_fi}
+\_def\_bprintaC #1#2#3{#2#1#3}
+\_def\_bprintc#1#2{\_bprintcA#1#2**\_relax}
+\_def\_bprintcA#1#2*#3*#4\_relax{\_ifx#1\_empty \_else \_if^#4^#2\_else#2#1#3\_fi\_fi}
+\_def\_bprintv [#1]#2#3{\_def\_tmpa{#2}\_def\_tmpb{#3}\_bprintvA #1,,}
+\_def\_bprintvA #1,{%
+ \_if^#1^\_tmpb\_else
+ \_RetrieveFieldIn{#1}\_tmp
+ \_ifx \_tmp\_empty
+ \_else \_tmpa \_def\_tmpb{}\_def\_tmpa{}%
+ \_fi
+ \_ea \_bprintvA
+ \_fi
+}
+\_sdef{_pp:author}{\_letNames\_authorname}
+\_sdef{_pp:editor}{\_letNames\_editorname}
+\_def\_letNames{\_let\_Firstname=\Firstname \_let\_Lastname=\Lastname
+ \_let\_Von=\Von \_let\_Junior=\Junior
+}
+
+ \_doc -----------------------------
+ Various macros + multilinguas.
+ \_cod -----------------------------
+
+\_def\_bibwarning{\_opwarning{Missing field "\_bibfieldname" in [\EntryKey]}}
+
+\_def\_mtdef#1#2#3#4{\_sdef{_mt:#1:en}{#2} \_sdef{_mt:#1:cs}{#3}
+ \_if$#4$\_slet{_mt:#1:sk}{_mt:#1:cs}
+ \_else \_sdef{_mt:#1:sk}{#4}
+ \_fi
+}
+
+\_endcode
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The file `usebib.opm` implements the command
+`\usebib/<sorttype> (<style>) <bibfiles>`
+where `<sorttype>` is one letter `c` (references ordered by citation order in
+the text) or `s` (references ordered by key in the style file),
+`<style>` is the part of the name `bib-<style>.opm` of the style file
+and `<bibfiles>` are one or more `.bib` file names without suffix separated by
+comma without space. Example:
+
+\begtt
+\usebib/s (simple) mybase,yourbase
+\endtt
+
+This command reads the `<bibfiles>` directly and creates the list of
+bibliographics references (only those declared by by `\cite[]` or
+`\nocite[]` in the text). The formatting of such references is defined in the style
+file. The usage is mentioned in user documentation too.
+
+The principle \"first entry wins" is used. Suppose `\usebib/s (simple) local,global`.
+If an entry with the same label is declared in `local.bib` and in
+`global.bib` too then the first wins. So, you can set an exceptions in your
+`local.bib` file for your document.
+
+\seccc Notes for style writers
+
+The `bib-<style>.opm` file must define the commands:
+
+\begitems
+* `\_authorname` ... formatting of one name in the authors list. The macro can
+ use the following data: `\_NameCount` (the number of the currently
+ processed author name in the list), `0\_namecount` (the total number of the
+ authors in the list), `\_Lastname`, `\_Firstname`, `\_Von`, `\_Junior`
+ (the parts of the name). See the documentation of the librarian package
+ for more info.
+* `\_editorname` ... the same as `\_authorname`, but for editors list.
+* `_print:<entrytype>` (defined by `\_sdef`) for formatting the entry of `<entrytype>`.
+ The `<entrytype>` have to be lowercase. This command can use the command:
+* `\_bprinta [<fieldname>] {<if defined>} {<if not defined>}`. The part <if defined>
+ is executed if <fieldname> is declared in .bib file for the entry which is
+ currently processed. Else the part <if not defined> is processed.
+ The part <if defined> can include the `*` parameter which is replaced
+ by the value of the <fieldname>. The part <if not defined> can include
+ the `\_bibwarning` command if the <fieldname> is mandatory.
+* `\_bprintb [<fieldname>] {<if defined>} {<if not defined>}`. The same as
+ `\_bprinta`, but the `##1` parameter is used instead `*`. Differences: `##1`
+ parameter can be used more than once and can be enclosed in nested
+ braces. The * parameter can be used at most once and cannot be enclosed
+ in braces. Warning: if the `\_bprintb` commands are nested (`\_bprintb` in
+ `\_bprintb`), then you need to write `####1` parameter for internal `\_bprintb`.
+ But if `\_bprinta` commands are nested then the parameter is not duplicated.
+* `\_pbprintc \macro {<if non-empty>}`. The <if non-empty> part is executed if
+ `\macro` is non-empty. The * parameter can be used, it is replaced by
+ the `\macro`.
+* `\_bprintv [<field1>,<field2>,...] {<if defined>} {<if not defined>}`.
+ The part <if defined> is executed if <field1> or <filed2> or ...
+ is defined, else the second part <if not defined> is executed.
+ There is one filed name or the list field names separated by commas.
+ The parts cannot include any parameter.
+\enditems
+%
+There are two special fieldnames: `!author` and `!editor`. The processed list of
+authors or editors (by repeatedly calling `\_authorname` or `\_editorname`) are
+used here insted of raw data.
+
+You can define `_print:BEGIN` and/or `_print:END` which is executed at the begin or
+end of each `<entrytype>`. The formatting does not solve the numbering and
+paragraph indentation of the entry. This is processed by `\_printbib` macro
+used in \OpTeX/ (and may be redefined by the author or document designer).
+
+You can declare `\_bimark={something}` in the `_print:END` macro. This bibmark is
+saved to the `.ref` file (created by \OpTeX/) and used in the next \TeX/ run as
+`\cite` marks when `\nonumcitations` is set.
+
+The whole style file is read in the group during `\usebib` command is executed
+before typesetting the reference list. Each definition or setting is local
+here.
+
+If you are using non-standard fieldnames in .bib database and bib. style,
+you has to declare them by `\_CreateField {<fieldname>}`.
+
+You can declare `\_SortingOrder` in the manner documented by librarian package.
+
+If your style adds some words or abbreviations you can make them
+multilingual by saying `\_mtext{<label>}` instead such word and
+`\_mtdef{<label>} {<English>} {<Czech>} {<Slovak>}` declaration.
+The right part is printed by current value of the `\language` regiter.
+You can add more languages by re-defining the `\_mtdef` command.
+See the section \ref[langphrases] for more information.
+
+If you are using `\nonumcitations`, then the `\_bibmark` tokens register have to be
+prepared in the style file (in `_print:BEGIN`, `_print:END`, in
+`\_authorname` etc.) This value will be used in the `\cite[]` places
+in the document.
+
+The example of the style file is in `bib-simple.opm`.
+
+User or author of the `bib.` style can create the hidden field which has a
+precedence while sorting names. Example:
+
+\begtt
+\CreateField {sortedby}
+\SpecialSort {sortedby}
+\endtt
+Suppose that the .bib file includes:
+\begtt
+...
+author = "Jan Chadima",
+sortedby = "Hzzadima Jan",
+...
+\endtt
+Now, this author is sorted between H and I, because the Ch digraph in this
+name has to be sorted by this rule.
+
+If you need (for example) to place the autocitations before other citations,
+then you can mark your entries in `.bib` file by `sortedby = "@"`, because this
+character is sorted before `A`.
+
+\_endinput
+
+History:
+--------
+
+Apr. 2014: released in OPmac
+Jan. 2016: "first entry wins" implemented
+Apr. 2016: \readentry -> \readbibentry, \usebib->\MakeReference
+Feb. 2018: \input librarian does not create \jobname.lbr
+
+% Source:
+
+% opmac-bib
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak, version Feb. 2018 (beta)
+
+% This is module for OPmac macros, see http://petr.olsak.net/opmac.html
+% The command:
+% \usebib/<sorttype> (<style>) (bibfiles>
+% for direct reading .bib files by OPmac macros (without bibTeX) is implemented here.
+% The implementation depends on librarian.tex package by Paul Isambert.
+% Use:
+% \input opmac \input opmac-bib
+% or simply:
+% \input opmac-bib
+% before using the command \usebib.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end
+
diff --git a/macros/luatex/optex/base/verbatim.opm b/macros/luatex/optex/base/verbatim.opm
new file mode 100644
index 0000000000..ba2cf93dab
--- /dev/null
+++ b/macros/luatex/optex/base/verbatim.opm
@@ -0,0 +1,267 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \begtt {Verbatim <2020-04-22>} % preloaded in format
+
+ \_doc ----------------------------
+ The internal parameters
+ \`\_ttskip`, \`\_ttpenalty`, \`\_viline`, \`\_vifile` and \`\_ttfont`
+ for verbatim macros are set.
+ \_cod ----------------------------
+
+\_def\_ttskip{\_medskip} % space above and below \begtt, \verbinput
+\_mathchardef\_ttpenalty=100 % penalty between lines in \begtt, \verbinput
+\_newcount\_viline % last line number in \verbinput
+\_newread\_vifile % file given by \verinput
+\_def\_ttfont{\_tt} % default tt font
+
+ \_doc ----------------------------
+ \`\code``{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In
+ order to do it more robust when it is used in `\write` then it expands as
+ noexpanded `\code<space>` (followed by space in its csname). This macro
+ does the real work.
+
+ The \`\_printinverbatim``{<text>}` macro is used for `\code{<text>}` printing and for
+ \code{`}<text>\code{`} printing. It is defined as `\hbox`, so the in-verbatim <text>
+ will be never broken. But you can re-define this macro.
+
+ When `\code` occurs in PDF outlines then it does the same as `\detokenize`.
+ The macro for preparing outlines sets `\escapechar` to $-1$ and uses
+ \^`\_regoul` token list before `\edef`.
+
+ The `\code` is not `\proteced` because we want it expands to
+ `\unexpanded{\code<space>{<text>}}` in `\write` parameters. This protect the
+ expansions of the `\code` parameter (like `\\`, `\^` etc.).
+ \_cod ----------------------------
+
+\_def\_code#1{\_unexpanded\_ea{\_csname _code \_endcsname{#1}}}
+\_protected\_sdef{_code }#1{{\_escapechar=-1 \_ttfont \_the\_everyintt \_relax
+ \_ea\_printinverbatim\_ea{\_detokenize{#1}}}}
+\_def\_printinverbatim#1{\_leavevmode\_hbox{#1}}
+
+\_regmacro {}{}{\_let\code=\_detokenize \_let\_code=\_detokenize}
+\_public \code ;
+
+ \_doc ----------------------------
+ The \`\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only
+ in a group, so we prepare a new catcode table with \"verbatim" catcodes and we define
+ it as\nl `\_catcodetable`\`\_verbatimcatcodes`. After the group is finished then
+ original catcode table is restored.
+ \_cod ----------------------------
+
+\_newcatcodetable \_verbatimcatcodes
+\_def\_setverb{\_begingroup
+ \_def\do##1{\_catcode`##1=12 }
+ \_dospecials
+ \_savecatcodetable\_verbatimcatcodes % all characters are normal
+ \_endgroup
+}
+\_setverb
+\_def\_setverb{\_catcodetable\_verbatimcatcodes }%
+
+ \_doc ----------------------------
+ \`\activettchar``<char>` saves original catcode of previously declared `<char>` (if
+ such character was declared) using \`\_savedttchar` and \`\_savedttcharc`
+ values. Then new such values are stored. The declared charater is activated
+ by `\_adef` as a macro (active character) which opens a group,
+ does `\_setverb` and other settings and reads its parameter until second the same
+ character. This is done by the \`\_readverb` macro. Finally it prints scanned
+ `<text>` by \^`\_printinverbatim` and closes group. Suppose that `\activettchar"` is
+ used. Then the following work is schematically done:
+ \begtt
+ \_def "{\_begingroup \_setverb ... \_readverb}
+ \_def \_readverb #1"{\_printinverbatim{#1}\_endgroup}
+ \endtt
+ Note that the second occurrence of `"` is not active because `\_setverb`
+ deactivates it.
+ \_cod ----------------------------
+
+\_def\_activettchar#1{%
+ \_ifx\_savedttchar\_undefined\_else \_catcode\_savedttchar=\_savedttcharc \_fi
+ \_chardef\_savedttchar=`#1
+ \_chardef\_savedttcharc=\_catcode`#1
+ \_adef{#1}{\_begingroup \_setverb \_adef{ }{\ }\_ttfont \_the\_everyintt\_relax \_readverb}%
+ \_def\_readverb ##1#1{\_printinverbatim{##1}\_endgroup}%
+}
+\_public \activettchar ;
+
+ \_doc ----------------------------
+ \`\begtt` is defined only as public. We don't need private `\_begtt` variant.
+ This macro is defined by `\eoldef`, so user can put a parameter at the
+ same line where `\begtt` is. This `#1` parameter is used after `\_everytt`
+ parameters settings, so user can change them locally.
+
+ The `\begtt` macro opens group, does \^`\_setverb` and another preprocessing, sets
+ `\endlinechar` to `^^J` and reads the following text in verbatim mode
+ until \`\endtt` occurs. This scanning is done by \`\_startverb` macro which is
+ defined as:
+ \begtt \adef/{\bslash}
+ \_def\_startverb #1/endtt #2^^J{...}
+ \endtt
+ We must to ensure that the backslash in `\endtt` has category 12 (this is a
+ reason of the `\ea` chain in real code).
+ The `#2` is something between `\endtt` and end of the same line and it is simply
+ ignored.
+
+ The `\_startverb` puts the scanned data to \`\_prepareverbdata`. It sets the data
+ to `\_tmpb` without changes by default, but you should re-define it in order
+ to do special changes, if you want. (For example, \^`\hisyntax` redefines
+ this macro.) The scanned data have `^^J` at each end of line and all spaces are
+ active characters (defined as {\visiblesp`\ `}).
+ Other characters have normal category 11 or 12.
+
+ When `\_prepareverbdata` finishes then `\_startverb` runs \`\_printverb` loop
+ over each line of the data and does a final work: last skip plus `\noindent`
+ in the next paragraph.
+
+ The `\_printverb` macro calls \`\_printverbline``{<line>}` to each scanned line of
+ verbatim text. This macro expect that it strarts in vertical mode and it must
+ do `\par` in order to return the vertical mode. The \`\_printverblinenum`
+ is used here: it does nothing when `\_ttline`\code{<0} else it prints the line
+ number using `\_llap`.
+ \_cod ----------------------------
+
+\_eoldef \begtt#1{\_par \_wipeepar
+ \_vskip\_parskip \_ttskip
+ \_begingroup
+ \_setverb
+ \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
+ \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt
+ \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}%
+ \_the\_everytt \_relax #1\_relax \_ttfont
+ \_endlinechar=`^^J
+ \_startverb
+}
+\_ea\_def\_ea\_startverb \_ea#\_ea1\_csstring\\endtt#2^^J{%
+ \_prepareverbdata\_tmpb{#1^^J}%
+ \_ea\_printverb \_tmpb\_end
+ \_par
+ \_endgroup \_ttskip
+ \_isnextchar\_par{}{\_noindent}%
+}
+\_def\_printverb #1^^J#2{\_ifx\_end#2
+ \_bgroup \_adef{ }{}\_def\t{}%
+ \_ifcat&#1&\_egroup \_else\_egroup \_printverbline{#1}\_fi
+ \_else
+ \_printverbline{#1}%
+ \_ea \_printverb \_ea #2%
+ \_fi
+}
+\_def\_prepareverbdata#1#2{\_def#1{#2}}
+\_def\_printverbline#1{\_penalty \_ttpenalty
+ \_indent \_printverblinenum \_kern\_ttshift #1\par}
+\_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font}
+\_def\_printverblinenum{\_global\_advance\_ttline by1 \_llap{\_sevenrm \_the\_ttline\_kern.9em}}
+
+ \_doc ----------------------------
+ Macro \`\verbinput` uses a file read previously or opens the given file. Then
+ it runs the parameter scanning by \`\_viscanparameter` and \`\_viscanminus`.
+ Finally the \`\_doverbinput` is run. At begining of `\_doverbinput`, we have
+ `\_viline`= number of lines already read using previous `\verbinput`,
+ `\_vinolines`= the number of lines we need to skip and `\_vidolnes`= the
+ number of lines we need to print.
+ Similar preparation is done as in `\begtt` after the group is opened. Then
+ we skip \`\_vinolines` lines in a loop a and we read \`\_vidolines` lines. The
+ read data is accumulated into `\_tmpb` macro. The next steps are equal to
+ the steps done in \^`\_startverb` macro: data are processed via
+ \^`\_prepareverbdata` and printed via \^`\_printverb` loop.
+ \_cod \_fin ----------------------
+
+\_def\_verbinput #1(#2) #3 {\_par \_def\_tmpa{#3}%
+ \_def\_tmpb{#1}% cmds used in local group
+ \_ifx\_vifilename\_tmpa \_else
+ \_openin\_vifile={#3}%
+ \_global\_viline=0 \_global\_let\_vifilename=\_tmpa
+ \_ifeof\_vifile
+ \_opwarning{\_noexpand\verbinput - file "#3" is unable to reading}
+ \_ea\_ea\_ea\_skiptorelax
+ \_fi
+ \_fi
+ \_viscanparameter #2+\_relax
+}
+\_def\_skiptorelax#1\_relax{}
+
+\_def \_viscanparameter #1+#2\_relax{%
+ \_if$#2$\_viscanminus(#1)\_else \_viscanplus(#1+#2)\_fi
+}
+\_def\_viscanplus(#1+#2+){%
+ \_if$#1$\_tmpnum=\_viline
+ \_else \_ifnum#1<0 \_tmpnum=\_viline \_advance\_tmpnum by-#1
+ \_else \_tmpnum=#1
+ \_advance\_tmpnum by-1
+ \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0+13) = (1+13)
+ \_fi \_fi
+ \_edef\_vinolines{\_the\_tmpnum}%
+ \_if$#2$\_def\_vidolines{0}\_else\_edef\_vidolines{#2}\_fi
+ \_doverbinput
+}
+\_def\_viscanminus(#1-#2){%
+ \_if$#1$\_tmpnum=0
+ \_else \_tmpnum=#1 \_advance\_tmpnum by-1 \_fi
+ \_ifnum\_tmpnum<0 \_tmpnum=0 \_fi % (0-13) = (1-13)
+ \_edef\_vinolines{\_the\_tmpnum}%
+ \_if$#2$\_tmpnum=0
+ \_else \_tmpnum=#2 \_advance\_tmpnum by-\_vinolines \_fi
+ \_edef\_vidolines{\_the\_tmpnum}%
+ \_doverbinput
+}
+\_def\_doverbinput{%
+ \_tmpnum=\_vinolines
+ \_advance\_tmpnum by-\_viline
+ \_ifnum\_tmpnum<0
+ \_openin\_vifile={\_vifilename}%
+ \_global\_viline=0
+ \_else
+ \_edef\_vinolines{\_the\_tmpnum}%
+ \_fi
+ \_vskip\_parskip \_ttskip \_wipeepar
+ \_begingroup
+ \_ifnum\_ttline<-1 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
+ \_setverb \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt
+ \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}%
+ \_the\_everytt\_relax \_tmpb\_relax \_ttfont
+ \_endlinechar=`^^J \_tmpnum=0
+ \_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi
+ \_ifnum\_tmpnum<\_vinolines\_space
+ \_vireadline \_advance\_tmpnum by1 \_repeat %% skip lines
+ \_edef\_ttlinesave{\_ttline=\_the\_ttline}%
+ \_ifnum\_ttline=-1 \_ttline=\_viline \_fi
+ \_tmpnum=0 \_def\_tmpb{}%
+ \_ifnum\_vidolines=0 \_tmpnum=-1 \_fi
+ \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_fi
+ \_loop \_ifnum\_tmpnum<\_vidolines\_space
+ \_vireadline
+ \_ifnum\_vidolines=0 \_else\_advance\_tmpnum by1 \_fi
+ \_ifeof\_vifile \_tmpnum=\_vidolines\_space \_else \_visaveline \_fi %% save line
+ \_repeat
+ \_ea\_prepareverbdata \_ea \_tmpb\_ea{\_tmpb^^J}%
+ \_ea\_printverb \_tmpb\_end
+ \_global\_ttlinesave
+ \_par
+ \_endgroup
+ \_ttskip
+ \_isnextchar\_par{}{\_noindent}%
+}
+\_def\_vireadline{\_read\_vifile to \_tmp \_global\_advance\_viline by1 }
+\_def\_visaveline{\_ea\_addto\_ea\_tmpb\_ea{\_tmp}}
+
+\_public \verbinput ;
+
+ \_doc -----------------------------
+ The \`\visiblesp` sets spaces as visible characters \char9251.
+ It redefines {\visiblesp`\ `} primitive, so it is useful for verbatim modes only.
+ \_cod -----------------------------
+
+\_def \_visiblesp{\_ifx\_initunifonts\_relax \_def\ {\_char9251 }%
+ \_else \_def\ {\_char32 }\_fi}
+
+\_public \visiblesp ;
+
+\_endcode
+
+\_endinput
+
+History:
+2020-04-22 ... \ttshift introduced
+2020-04-06 ... \visiblesp added
+2020-04-04 ... ^^I activated as \t for multiline verbatim
+ \verbinput <cmds> (...) <filename>, <cmds> added.