summaryrefslogtreecommitdiff
path: root/macros/latex/exptl
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/exptl
Initial commit
Diffstat (limited to 'macros/latex/exptl')
l---------macros/latex/exptl/biblatex1
l---------macros/latex/exptl/biblatex-contrib1
-rw-r--r--macros/latex/exptl/delimtxt/delimtxt.dtx330
-rw-r--r--macros/latex/exptl/delimtxt/delimtxt.ins6
-rw-r--r--macros/latex/exptl/delimtxt/delimtxt.pdfbin0 -> 55074 bytes
-rw-r--r--macros/latex/exptl/delimtxt/resulta.dat2
-rw-r--r--macros/latex/exptl/delimtxt/resultb.dat2
-rw-r--r--macros/latex/exptl/delimtxt/resultc.dat2
-rw-r--r--macros/latex/exptl/delimtxt/test1.tex31
-rw-r--r--macros/latex/exptl/delimtxt/test2.tex29
-rw-r--r--macros/latex/exptl/delimtxt/test3.tex33
-rw-r--r--macros/latex/exptl/gcite/CHANGES20
-rw-r--r--macros/latex/exptl/gcite/README36
-rw-r--r--macros/latex/exptl/gcite/gcite.dtx392
-rw-r--r--macros/latex/exptl/gcite/gcite.ins32
-rw-r--r--macros/latex/exptl/gcite/gcite.pdfbin0 -> 203393 bytes
-rw-r--r--macros/latex/exptl/graphicp/descend.123
-rw-r--r--macros/latex/exptl/graphicp/descend.mp34
-rw-r--r--macros/latex/exptl/graphicp/div16b.sty490
-rwxr-xr-xmacros/latex/exptl/graphicp/epstopdf476
-rw-r--r--macros/latex/exptl/graphicp/f2cletter.eps35
-rw-r--r--macros/latex/exptl/graphicp/f2cletter.pdfbin0 -> 934 bytes
-rw-r--r--macros/latex/exptl/graphicp/f2mletter.eps23
-rw-r--r--macros/latex/exptl/graphicp/f2mletter.pdfbin0 -> 582 bytes
-rw-r--r--macros/latex/exptl/graphicp/ficletter.jpgbin0 -> 590 bytes
-rw-r--r--macros/latex/exptl/graphicp/ficletter.pbmbin0 -> 116 bytes
-rw-r--r--macros/latex/exptl/graphicp/ficletter.pngbin0 -> 199 bytes
-rw-r--r--macros/latex/exptl/graphicp/files22
-rw-r--r--macros/latex/exptl/graphicp/graphicp.sty407
-rw-r--r--macros/latex/exptl/graphicp/graphicpdoc.pdfbin0 -> 86972 bytes
-rw-r--r--macros/latex/exptl/graphicp/graphicpdoc.tex146
-rwxr-xr-xmacros/latex/exptl/graphicp/img_bbox.pl2079
-rw-r--r--macros/latex/exptl/graphicp/keyvalx.sty76
-rw-r--r--macros/latex/exptl/graphicp/laemu.sty206
-rw-r--r--macros/latex/exptl/graphicp/laltest.tex166
-rw-r--r--macros/latex/exptl/graphicp/laxtest.bbx18
-rwxr-xr-xmacros/latex/exptl/graphicp/pdfboxes.pl863
-rw-r--r--macros/latex/exptl/graphicp/pts_bbox.sty418
-rw-r--r--macros/latex/exptl/graphicp/pts_img.sty801
-rwxr-xr-xmacros/latex/exptl/mem/Mtp/allmtp.py27
-rw-r--r--macros/latex/exptl/mem/Mtp/ellintex.mtp249
-rw-r--r--macros/latex/exptl/mem/Mtp/ellinviu.mtp15
-rw-r--r--macros/latex/exptl/mem/Mtp/ellmedb.mtp13
-rw-r--r--macros/latex/exptl/mem/Mtp/ellpsili.mtp15
-rw-r--r--macros/latex/exptl/mem/Mtp/fratext.mtp16
-rw-r--r--macros/latex/exptl/mem/Mtp/inputtex.mtp16
-rw-r--r--macros/latex/exptl/mem/Mtp/lat2ru.mtp113
-rw-r--r--macros/latex/exptl/mem/Mtp/lgr-com.mtp67
-rw-r--r--macros/latex/exptl/mem/Mtp/lgr-dec.mtp539
-rw-r--r--macros/latex/exptl/mem/Mtp/lgr-rec.mtp459
-rw-r--r--macros/latex/exptl/mem/Mtp/ot1-com.mtp70
-rw-r--r--macros/latex/exptl/mem/Mtp/ot1-dec.mtp1023
-rw-r--r--macros/latex/exptl/mem/Mtp/ot1-rec.mtp149
-rw-r--r--macros/latex/exptl/mem/Mtp/spguill.mtp9
-rw-r--r--macros/latex/exptl/mem/Mtp/sppcent.mtp8
-rw-r--r--macros/latex/exptl/mem/Mtp/t1-com.mtp71
-rw-r--r--macros/latex/exptl/mem/Mtp/t1-dec.mtp1023
-rw-r--r--macros/latex/exptl/mem/Mtp/t1-rec.mtp303
-rw-r--r--macros/latex/exptl/mem/Mtp/t2a-com.mtp71
-rw-r--r--macros/latex/exptl/mem/Mtp/t2a-dec.mtp133
-rw-r--r--macros/latex/exptl/mem/Mtp/t2a-rec.mtp226
-rw-r--r--macros/latex/exptl/mem/Mtp/ucnoacc.mtp254
-rw-r--r--macros/latex/exptl/mem/Mtp/ucy-com.mtp141
-rw-r--r--macros/latex/exptl/mem/Mtp/ucy-dec.mtp127
-rw-r--r--macros/latex/exptl/mem/Mtp/ucy-rec.mtp128
-rw-r--r--macros/latex/exptl/mem/Mtp/uel-com.mtp137
-rw-r--r--macros/latex/exptl/mem/Mtp/uel-dec.mtp533
-rw-r--r--macros/latex/exptl/mem/Mtp/uel-rec.mtp308
-rw-r--r--macros/latex/exptl/mem/Mtp/ula-com.mtp137
-rw-r--r--macros/latex/exptl/mem/Mtp/ula-dec.mtp1017
-rw-r--r--macros/latex/exptl/mem/Mtp/ula-rec.mtp573
-rw-r--r--macros/latex/exptl/mem/Mtp/utf8.mtp14
-rwxr-xr-xmacros/latex/exptl/mem/Tools/charset2otp.py99
-rwxr-xr-xmacros/latex/exptl/mem/Tools/fontenc2mtp.py433
-rw-r--r--macros/latex/exptl/mem/Tools/lgr.mmap245
-rwxr-xr-xmacros/latex/exptl/mem/Tools/mtp2ocp.py53
-rw-r--r--macros/latex/exptl/mem/Tools/ot1.mmap130
-rw-r--r--macros/latex/exptl/mem/Tools/t1.mmap254
-rw-r--r--macros/latex/exptl/mem/Tools/t2a.mmap216
-rw-r--r--macros/latex/exptl/mem/Tools/ts1.mmap59
-rw-r--r--macros/latex/exptl/mem/ar.sd5
-rw-r--r--macros/latex/exptl/mem/ara.ld17
-rw-r--r--macros/latex/exptl/mem/arabic.pdfbin0 -> 26189 bytes
-rw-r--r--macros/latex/exptl/mem/arabic.tex98
-rw-r--r--macros/latex/exptl/mem/bugs.txt35
-rw-r--r--macros/latex/exptl/mem/cp1251.ocpbin0 -> 1180 bytes
-rw-r--r--macros/latex/exptl/mem/cp1252.ocpbin0 -> 796 bytes
-rw-r--r--macros/latex/exptl/mem/cp1253.ocpbin0 -> 1180 bytes
-rw-r--r--macros/latex/exptl/mem/cp1256.ocpbin0 -> 1180 bytes
-rw-r--r--macros/latex/exptl/mem/cp1257.ocpbin0 -> 1180 bytes
-rw-r--r--macros/latex/exptl/mem/cy.sd37
-rw-r--r--macros/latex/exptl/mem/el.sd39
-rw-r--r--macros/latex/exptl/mem/ell.ld210
-rw-r--r--macros/latex/exptl/mem/ellintex.ocpbin0 -> 8244 bytes
-rw-r--r--macros/latex/exptl/mem/ellinviu.ocpbin0 -> 184 bytes
-rw-r--r--macros/latex/exptl/mem/ellmedb.ocpbin0 -> 288 bytes
-rw-r--r--macros/latex/exptl/mem/ellpsili.ocpbin0 -> 312 bytes
-rw-r--r--macros/latex/exptl/mem/eng.ld98
-rw-r--r--macros/latex/exptl/mem/esp.ld51
-rw-r--r--macros/latex/exptl/mem/espisolat1.id10
-rw-r--r--macros/latex/exptl/mem/fra.ld129
-rw-r--r--macros/latex/exptl/mem/fratext.ocpbin0 -> 1284 bytes
-rw-r--r--macros/latex/exptl/mem/greek.pdfbin0 -> 88734 bytes
-rw-r--r--macros/latex/exptl/mem/greek.tex307
-rw-r--r--macros/latex/exptl/mem/inputtex.ocpbin0 -> 320 bytes
-rw-r--r--macros/latex/exptl/mem/isoara.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/isocyr.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/isoell.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/isolat1.ocpbin0 -> 616 bytes
-rw-r--r--macros/latex/exptl/mem/isolat2.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/isolat4.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/koi8ru.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/koi8uk.ocpbin0 -> 1052 bytes
-rw-r--r--macros/latex/exptl/mem/la.sd67
-rw-r--r--macros/latex/exptl/mem/lat2ru.ocpbin0 -> 1676 bytes
-rw-r--r--macros/latex/exptl/mem/lgr-com.ocpbin0 -> 2568 bytes
-rw-r--r--macros/latex/exptl/mem/lgr-dec.ocpbin0 -> 6868 bytes
-rw-r--r--macros/latex/exptl/mem/lgr-rec.ocpbin0 -> 16352 bytes
-rw-r--r--macros/latex/exptl/mem/lgr.ed6
-rw-r--r--macros/latex/exptl/mem/macstd.ocpbin0 -> 1180 bytes
-rw-r--r--macros/latex/exptl/mem/mem-comm.sty112
-rw-r--r--macros/latex/exptl/mem/mem.cfg17
-rw-r--r--macros/latex/exptl/mem/mem.pdfbin0 -> 213362 bytes
-rw-r--r--macros/latex/exptl/mem/mem.sty1439
-rw-r--r--macros/latex/exptl/mem/mem.tex1197
-rw-r--r--macros/latex/exptl/mem/ot1-com.ocpbin0 -> 3968 bytes
-rw-r--r--macros/latex/exptl/mem/ot1-dec.ocpbin0 -> 12612 bytes
-rw-r--r--macros/latex/exptl/mem/ot1-rec.ocpbin0 -> 8476 bytes
-rw-r--r--macros/latex/exptl/mem/ot1.ed6
-rw-r--r--macros/latex/exptl/mem/readme.txt258
-rw-r--r--macros/latex/exptl/mem/rus.ld71
-rw-r--r--macros/latex/exptl/mem/russian.pdfbin0 -> 31721 bytes
-rw-r--r--macros/latex/exptl/mem/russian.tex82
-rw-r--r--macros/latex/exptl/mem/shared.sd99
-rw-r--r--macros/latex/exptl/mem/spguill.ocpbin0 -> 276 bytes
-rw-r--r--macros/latex/exptl/mem/spguill.sty15
-rw-r--r--macros/latex/exptl/mem/spguill.tex20
-rw-r--r--macros/latex/exptl/mem/sppcent.ocpbin0 -> 132 bytes
-rw-r--r--macros/latex/exptl/mem/t1-com.ocpbin0 -> 3984 bytes
-rw-r--r--macros/latex/exptl/mem/t1-dec.ocpbin0 -> 12612 bytes
-rw-r--r--macros/latex/exptl/mem/t1-rec.ocpbin0 -> 12512 bytes
-rw-r--r--macros/latex/exptl/mem/t1.ed5
-rw-r--r--macros/latex/exptl/mem/t1comp.ocpbin0 -> 23548 bytes
-rw-r--r--macros/latex/exptl/mem/t2a-com.ocpbin0 -> 3904 bytes
-rw-r--r--macros/latex/exptl/mem/t2a-dec.ocpbin0 -> 1476 bytes
-rw-r--r--macros/latex/exptl/mem/t2a-rec.ocpbin0 -> 9436 bytes
-rw-r--r--macros/latex/exptl/mem/t2a.ed5
-rw-r--r--macros/latex/exptl/mem/testmisc.pdfbin0 -> 22012 bytes
-rw-r--r--macros/latex/exptl/mem/testmisc.tex81
-rw-r--r--macros/latex/exptl/mem/uar.ed5
-rw-r--r--macros/latex/exptl/mem/uaromarb.fd45
-rw-r--r--macros/latex/exptl/mem/ucnoacc.ocpbin0 -> 5212 bytes
-rw-r--r--macros/latex/exptl/mem/ucy-com.ocpbin0 -> 11148 bytes
-rw-r--r--macros/latex/exptl/mem/ucy-dec.ocpbin0 -> 1416 bytes
-rw-r--r--macros/latex/exptl/mem/ucy-rec.ocpbin0 -> 3320 bytes
-rw-r--r--macros/latex/exptl/mem/ucy.ed5
-rw-r--r--macros/latex/exptl/mem/ucyomlgc.fd45
-rw-r--r--macros/latex/exptl/mem/uel-com.ocpbin0 -> 10732 bytes
-rw-r--r--macros/latex/exptl/mem/uel-dec.ocpbin0 -> 6808 bytes
-rw-r--r--macros/latex/exptl/mem/uel-rec.ocpbin0 -> 9080 bytes
-rw-r--r--macros/latex/exptl/mem/uel.ed9
-rw-r--r--macros/latex/exptl/mem/uelomlgc.fd45
-rw-r--r--macros/latex/exptl/mem/ula-com.ocpbin0 -> 10692 bytes
-rw-r--r--macros/latex/exptl/mem/ula-dec.ocpbin0 -> 12552 bytes
-rw-r--r--macros/latex/exptl/mem/ula-rec.ocpbin0 -> 17520 bytes
-rw-r--r--macros/latex/exptl/mem/ula.ed10
-rw-r--r--macros/latex/exptl/mem/ulaomlgc.fd45
-rw-r--r--macros/latex/exptl/mem/utf8.ocpbin0 -> 448 bytes
-rw-r--r--macros/latex/exptl/mem/verbatim.pdfbin0 -> 14099 bytes
-rw-r--r--macros/latex/exptl/mem/verbatim.tex25
-rw-r--r--macros/latex/exptl/mem/yatest.pdfbin0 -> 25665 bytes
-rw-r--r--macros/latex/exptl/mem/yatest.tex125
l---------macros/latex/exptl/siunitx1
l---------macros/latex/exptl/texpower1
-rw-r--r--macros/latex/exptl/thmtools/COPYING416
-rw-r--r--macros/latex/exptl/thmtools/README21
-rw-r--r--macros/latex/exptl/thmtools/TODO3
-rw-r--r--macros/latex/exptl/thmtools/VERSION.tex1
-rw-r--r--macros/latex/exptl/thmtools/aliasctr.dtx114
-rw-r--r--macros/latex/exptl/thmtools/parseargs.dtx80
-rw-r--r--macros/latex/exptl/thmtools/thm-amsthm.dtx162
-rw-r--r--macros/latex/exptl/thmtools/thm-autoref.dtx119
-rw-r--r--macros/latex/exptl/thmtools/thm-beamer.dtx44
-rw-r--r--macros/latex/exptl/thmtools/thm-kv.dtx486
-rw-r--r--macros/latex/exptl/thmtools/thm-listof.dtx222
-rw-r--r--macros/latex/exptl/thmtools/thm-llncs.dtx90
-rw-r--r--macros/latex/exptl/thmtools/thm-ntheorem.dtx131
-rw-r--r--macros/latex/exptl/thmtools/thm-patch.dtx252
-rw-r--r--macros/latex/exptl/thmtools/thm-restate.dtx336
-rw-r--r--macros/latex/exptl/thmtools/thmdef-mdframed.dtx28
-rw-r--r--macros/latex/exptl/thmtools/thmdef-shaded.dtx109
-rw-r--r--macros/latex/exptl/thmtools/thmdef-thmbox.dtx36
-rw-r--r--macros/latex/exptl/thmtools/thmtools-manual.tex1154
-rw-r--r--macros/latex/exptl/thmtools/thmtools.dtx90
-rw-r--r--macros/latex/exptl/thmtools/thmtools.ins61
-rw-r--r--macros/latex/exptl/thmtools/thmtools.pdfbin0 -> 225947 bytes
-rw-r--r--macros/latex/exptl/thmtools/unique.dtx173
l---------macros/latex/exptl/xdoc1
198 files changed, 25679 insertions, 0 deletions
diff --git a/macros/latex/exptl/biblatex b/macros/latex/exptl/biblatex
new file mode 120000
index 0000000000..5824d9c628
--- /dev/null
+++ b/macros/latex/exptl/biblatex
@@ -0,0 +1 @@
+../contrib/biblatex \ No newline at end of file
diff --git a/macros/latex/exptl/biblatex-contrib b/macros/latex/exptl/biblatex-contrib
new file mode 120000
index 0000000000..2e38bcfa06
--- /dev/null
+++ b/macros/latex/exptl/biblatex-contrib
@@ -0,0 +1 @@
+../contrib/biblatex-contrib \ No newline at end of file
diff --git a/macros/latex/exptl/delimtxt/delimtxt.dtx b/macros/latex/exptl/delimtxt/delimtxt.dtx
new file mode 100644
index 0000000000..28b11ed95a
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/delimtxt.dtx
@@ -0,0 +1,330 @@
+% \iffalse
+%<*drv>
+\documentclass{ltxdoc}
+\usepackage{doc}
+\usepackage[T1]{fontenc}
+\usepackage[ansinew]{inputenc}
+\CodelineIndex
+\parindent0pt
+\setcounter{IndexColumns}{2}
+\begin{document}
+%\OnlyDescription %Comment out for Desription only
+\setlength\hfuzz{15pt}
+\sloppy
+\DocInput{delimtxt.dtx}
+\end{document}
+%</drv>
+%\fi
+% \MakeShortVerb{\|}
+% \CheckSum{270}
+% Copyright 1999 Bjoern Pedersen
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+%
+%
+%% This is heavily based on:
+%% textmerg.dtx (with options: `textmerg')
+%%
+%% Copyright (C) 1992,1994 Mike Piff, University of Sheffield, England
+% \section{Intro}
+% This package tries do deal with single character delimited table
+% files. It was mainly inspired and is heavily based on Mike Piff's
+% textmerg package.
+%
+% Note for package writers:
+% As this package is still under development, the interface is not g
+% guaranteed to be stable. Please consider this if you want to use this
+% package in your style files
+%
+% \section{Description}
+% \DescribeMacro{\SetDel}
+% The |\SetDel<charactertoken>| set the character used as
+% a delimiter in the input file. The default is \texttt{\char126}.
+% If the character does not have |\catcode=12|, you should adjust this
+% before setting it as in this example:
+% \begin{verbatim}
+% {\catcode`\^^I=12
+% \SetDel^^I}
+% \end{verbatim}
+% This would set del to the <tab>-character
+%
+% \DescribeMacro{\Fields}
+% The |\Fields| macor takes a list of control sequence, which will be
+% assigned during the read in process.
+% Example:
+% \begin{verbatim}
+% \Fields{\Title\Forenames\Surname\Address\Grade}
+% \end{verbatim}
+%
+% \DescribeMacro{\DelimRead}
+% After defining the |\Fields|, a file is read in with
+% |\DelimRead{File}{Template}|,
+% where |File| is the filename of the data file, and |Template| is the
+% text, in which occurences of the csnames in the |\Fields|-macro
+% should be replaced by text from the data file.
+%
+% \StopEventually
+% \section{Code}
+% \subsection{Header}
+% Announce the file.
+% \begin{macrocode}
+%<*delimtxt>
+\def\fileversion{1.02}
+\def\filedate{1999/05/03}
+\def\filename{delimtxt.dtx}
+\def\Copyright{Copyright 1999 Bjoern Pedersen}
+\NeedsTeXFormat{LaTeX2e}[1998/06/01]
+\ProvidesPackage{delimtxt}[\filedate]
+\typeout{Package `delimtxt´ <\filedate>.}
+\typeout{\Copyright}
+% \end{macrocode}
+% \subsection{Utility macros}
+% \begin{macrocode}
+\def\glet{\global\let}
+
+% \end{macrocode}
+%\subsection{File Handling}
+% This opens a file and reads it line by line into |\InputBuffer|.
+% \begin{macrocode}
+\newread\DelimFile
+
+\def\InputFile#1{%
+ \openin\DelimFile=#1
+ \ifeof\DelimFile
+ \errmessage{Empty Delim file}%
+ \closein\DelimFile
+ \long\def\MakeTemplate##1{%
+ \def\Template{}}%
+ \else\GetInput
+ \fi}
+% \end{macrocode}
+%
+% Adjust the catcode of the delimiter temporarily, and read one line
+% of input.
+% \begin{macrocode}
+\def\GetInput{{
+ \global\LF@false
+ \endlinechar=-1%
+ \expandafter\catcode\expandafter`\the\Del=12
+ \global\read\DelimFile to\InputBuffer}}
+% \end{macrocode}
+%
+% Check, if there is anything left in the Input file. If not, stop
+% Iterating. Empty lines in the file are silently skipped.
+%
+% \begin{macrocode}
+\def\SeeIfEof{%
+ \let\NextLook\relax
+ \ifeof\DelimFile
+ \else
+ \ifx\InputBuffer\empty
+ \LookAgain
+ \fi
+ \fi
+ \NextLook}
+
+\def\LookAgain{\GetInput
+ \let\NextLook\SeeIfEof}
+% \end{macrocode}
+
+
+% \begin{macro}{\ifNonBlank}
+% \begin{macro}{\AllowBlank}
+% \begin{macro}{\DontAllowBlank}
+%We can now prepare to read actual fields from the merge file. A conditional
+%is used to indicate whether or not the field we are about to read is
+%allowed to be blank. We also set up a mechanism for changing its value.
+% \begin{macrocode}
+\newif\ifNonBlank \NonBlankfalse
+\def\AllowBlank{\global\NonBlankfalse}
+\def\DontAllowBlank{\global\NonBlanktrue}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+
+
+% \subsection{Parsing the Input Buffer}
+% This is the difficult part of the processing.
+% \subsubsection{Helper macros and registers}
+% We need some token registers to save the Input, the delimiter, and
+% some of the definitions for dynamic parameter lists
+% \begin{macrocode}
+\newif\ifLF@
+\def\mark{\relax}
+\newtoks\InPutField
+\newtoks\Del
+\newtoks\StripT@k
+\newtoks\NextFieldT@k
+% \end{macrocode}
+%\subsubsection{Strip mark helper}
+% A helper macro to strip of a marker, we placed in the input
+% stream. It is put in |\StripT@k| and the actual definiton will take
+% place on execution of |\SetDel| as we need to know what the
+% delimiter actually is.
+%
+% \begin{macrocode}
+\StripT@k={%
+{%
+\aftergroup\gdef%
+\aftergroup\StripMark%
+\aftergroup#\aftergroup1%
+\expandafter\aftergroup\the\Del%
+\aftergroup\mark%
+}{\gdef\InputBuffer{#1}}}
+% \end{macrocode}
+% \subsubsection{Get the next Field value from the input stream }
+% On execution of |\SetDel| this mess will define a macro
+% |\GetNextInputField#1<expanded \del>#2\lineend|.
+% This will perform somthing similar to the C language |strtok| function.
+% This macro gets the contents of the |\InputBuffer| plus an extra
+% delimiter, a mark and a lineend marker.
+% On Exit |\InputBuffer| is reassigned with one less Field after
+% stripping of all markers.
+% If nothing is left, a flag is set and |\InputBuffer| is set empty.
+% This flag is currently unused, but could be used for better error
+% handling in case of missing fields in the input.
+% \begin{macrocode}
+
+\NextFieldT@k={%
+{%begin of aftergroup group
+\aftergroup\gdef%
+\aftergroup\GetNextInputField%
+\aftergroup#\aftergroup1%
+\expandafter\aftergroup\the\Del%
+\aftergroup#\aftergroup2%
+\aftergroup\lineend}%end of aftergroup group
+{%
+ \if\mark #2%
+ \global\LF@true%
+ \glet\InputBuffer=\empty%
+ \else%
+ \global\LF@false%
+ \StripMark#2%
+ \fi%
+ \InPutField={#1}%
+ \if!#1!% check if Field is empty (Ref: D.Carlise in comp.text.tex)
+ \ifNonBlank%
+ \MissingField%
+ \InPutField={???}%
+ \else%
+ \InPutField={#1}%
+ \fi%
+ \else
+ \relax
+ \fi%
+}}
+% \end{macrocode}
+%
+% This macro sets the Delimiter. As this may be called at any time,
+% we need to redefine the macros |\GetNextInputField|
+% and |\StripMark|. The definitions have been stored in two token
+% registers, so we have just to execute them. The trickery with
+% |\aftergroup| in the token list enables expansion of |\the\Del| in
+% the macro parameter list.
+%
+%
+% \begin{macrocode}
+\def\SetDel#1{\global\Del={#1}%
+\the\StripT@k%
+\the\NextFieldT@k%
+}
+\SetDel|
+
+
+% \end{macrocode}
+% \subsection{Parsing the fields}
+% Here we parse the inout fields as in the textmerg package, but
+% getting values from our new parser. Probably, the treatment of
+% missing items is not very good( in fact it is completly missing)
+% We have to put a |\mark| and |\lineend| in the stream, do detect
+% the end of the input line.
+%
+% \begin{macrocode}
+
+\def\ReadIn#1{%
+ \expandafter\expandafter\expandafter%
+ \GetNextInputField%
+ \expandafter\InputBuffer\the\Del%
+ \mark\lineend%
+ \global\edef#1{\the\InPutField}%
+}
+% \end{macrocode}
+% This is not used yet.
+% \begin{macrocode}
+\def\MissingField{%
+ \message{Missing field in file}}
+% \end{macrocode}
+%
+% Here begins the field parsing, as in the textmerg-package.
+%
+% \begin{macrocode}
+
+\newtoks\GlobalFields
+%
+\def\Fields#1{\GlobalFields{#1}}
+%
+\def\ParseFields#1{%
+ \ifx#1\EndParseFields%
+ \let\NextParse\relax%
+ \ifLF@%
+ \message{ Line was OK}%
+ \else%
+ {\message{ There were more items than fields on line
+ \the\Iteratecounter. They will be skipped.}
+ \glet\InputBuffer=\empty}%
+ \fi%
+ \else%
+ \let\NextParse\ParseFields%
+ \ifx#1+\DontAllowBlank%
+ \else%
+ \ifx#1-\AllowBlank%
+ \else\ReadIn#1%
+ \fi%
+ \fi%
+ \fi\NextParse}%
+
+\let\EndParseFields\ParseFields%
+% \end{macrocode}
+% \begin{macrocode}
+\def\ReadFields#1{
+\ifeof\DelimFile%
+ \else%
+\expandafter\ParseFields%
+ \the#1\EndParseFields%
+\fi}%
+% \end{macrocode}
+%\subsection{The iteration code}
+% \begin{macrocode}
+\long\def\DelimRead#1#2{\begingroup%
+ \InputFile{#1}%
+ \def\Fields##1{%
+ \ParseFields##1\EndParseFields}%
+ \MakeTemplate{#2}\Iterate}%
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\MakeTemplate#1{\def\Template{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\countdef\Iteratecounter=1%
+
+\Iteratecounter=0
+\def\Iterate{%
+ \global\advance\Iteratecounter by1%
+ \ReadFields\GlobalFields%
+ \Template%
+ \SeeIfEof%
+ \ifeof\DelimFile%
+ \def\NextIteration{%
+ \endgroup\closein\DelimFile}%
+ \else%
+ \let\NextIteration\Iterate%
+ \fi%
+ \NextIteration}
+\endinput
+% \end{macrocode}
+%</delimtxt>
+%\Finale
diff --git a/macros/latex/exptl/delimtxt/delimtxt.ins b/macros/latex/exptl/delimtxt/delimtxt.ins
new file mode 100644
index 0000000000..b093b8760b
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/delimtxt.ins
@@ -0,0 +1,6 @@
+%% DocStrip driver for ffmbg
+\input docstrip
+%\askonceonly
+\generate{\file{delimtxt.sty}{\from{delimtxt.dtx}{delimtxt}}}
+\endbatchfile
+
diff --git a/macros/latex/exptl/delimtxt/delimtxt.pdf b/macros/latex/exptl/delimtxt/delimtxt.pdf
new file mode 100644
index 0000000000..16cb56228b
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/delimtxt.pdf
Binary files differ
diff --git a/macros/latex/exptl/delimtxt/resulta.dat b/macros/latex/exptl/delimtxt/resulta.dat
new file mode 100644
index 0000000000..540f89b9f9
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/resulta.dat
@@ -0,0 +1,2 @@
+Miss|Iusta|Mo|34 Winchester Road\\Sheffield\\England|9
+Mr|Arthur|Minit|43 Sheffield Road\\Winchester\\England|8
diff --git a/macros/latex/exptl/delimtxt/resultb.dat b/macros/latex/exptl/delimtxt/resultb.dat
new file mode 100644
index 0000000000..390c6eb972
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/resultb.dat
@@ -0,0 +1,2 @@
+Miss Iusta Mo 34 Winchester Road\\Sheffield\\England 2 7 xxx
+Mr Arthur Minit 43 Sheffield Road\\Winchester\\England 3 6
diff --git a/macros/latex/exptl/delimtxt/resultc.dat b/macros/latex/exptl/delimtxt/resultc.dat
new file mode 100644
index 0000000000..ff6817938b
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/resultc.dat
@@ -0,0 +1,2 @@
+Miss|Iusta|Mo|34 Winchester Road\\Sheffield\\England|11 22 33
+Mr|Arthur|Minit|43 Sheffield Road\\Winchester\\England|C
diff --git a/macros/latex/exptl/delimtxt/test1.tex b/macros/latex/exptl/delimtxt/test1.tex
new file mode 100644
index 0000000000..74f76101df
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/test1.tex
@@ -0,0 +1,31 @@
+%%
+%% This is file `tmexamp1.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% textmerg.dtx (with options: `examp')
+%%
+\documentclass[12pt]{letter}
+\usepackage[ansinew]{inputenc}
+
+\usepackage{delimtxt}
+\begin{document}
+\Fields{\Title\Forenames\Surname
+ \Address\Grade}
+{\catcode`\^^I=12
+\SetDel^^I}
+\DelimRead{resultb.dat}{%
+\begin{letter}{\Title\ \Forenames\
+ \Surname\\\Address}
+ \opening{Dear \Title\ \Surname,}
+ This letter is to inform you
+ that you obtained grade \Grade\ in
+ your recent examinations.
+ \closing{Yours faithfully,}
+\end{letter}
+}
+\end{document}
+\endinput
+%%
+%% End of file `tmexamp1.tex'.
diff --git a/macros/latex/exptl/delimtxt/test2.tex b/macros/latex/exptl/delimtxt/test2.tex
new file mode 100644
index 0000000000..1958cfb22a
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/test2.tex
@@ -0,0 +1,29 @@
+%%
+%% This is file `tmexamp1.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% textmerg.dtx (with options: `examp')
+%%
+\documentclass[12pt]{letter}
+\usepackage[ansinew]{inputenc}
+
+\usepackage{delimtxt}
+\begin{document}
+\Fields{\Title\Forenames\Surname
+ \Address\Grade}
+\DelimRead{resulta.dat}{%
+\begin{letter}{\Title\ \Forenames\
+ \Surname\\\Address}
+ \opening{Dear \Title\ \Surname,}
+ This letter is to inform you
+ that you obtained grade \Grade\ in
+ your recent examinations.
+ \closing{Yours faithfully,}
+\end{letter}
+}
+\end{document}
+\endinput
+%%
+%% End of file `tmexamp1.tex'.
diff --git a/macros/latex/exptl/delimtxt/test3.tex b/macros/latex/exptl/delimtxt/test3.tex
new file mode 100644
index 0000000000..6a97c946e4
--- /dev/null
+++ b/macros/latex/exptl/delimtxt/test3.tex
@@ -0,0 +1,33 @@
+%%
+%% This is file `tmexamp1.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% textmerg.dtx (with options: `examp')
+%%
+\documentclass[12pt]{letter}
+\usepackage[latin1]{inputenc}
+
+\usepackage{delimtxt}
+\begin{document}
+\Fields{\Title\Forenames\Surname
+ \Address-\Grade}
+%{\catcode`\^^I=12
+%\SetDel^^I}
+\tracingmacros=2
+\tracingcommands=2
+\DelimRead{resultc.dat}{%
+\begin{letter}{\Title\ \Forenames\
+ \Surname\\\Address}
+ \opening{Dear \Title\ \Surname,}
+ This letter is to inform you
+ that you obtained grade \Grade\ in
+ your recent examinations.
+ \closing{Yours faithfully,}
+\end{letter}
+}
+\end{document}
+\endinput
+%%
+%% End of file `tmexamp1.tex'.
diff --git a/macros/latex/exptl/gcite/CHANGES b/macros/latex/exptl/gcite/CHANGES
new file mode 100644
index 0000000000..6e463aabf3
--- /dev/null
+++ b/macros/latex/exptl/gcite/CHANGES
@@ -0,0 +1,20 @@
+The gcite Package
+==================
+
+Copyright 2007--2009 Matthew Tylee Atkinson, Iain Phillips
+Distributed under the LPPL 1.3 (http://www.latex-project.org/lppl.txt)
+
+Changes
+--------
+
+v1.0.1 -- 3rd July 2009
+ * Don't crash TeX if [normalcite] is passed to the package and \origcite is used.
+ * Allow an optional argument to be passed to \cite (as with the command in standard LaTeX).
+ * Authors should write using the standard LaTeX ``~\cite'' convention.
+ * Minor documentation improvements (consistency with other documentation; improved navigation and clarification of some issues).
+
+v1.0.0 -- 2nd September 2007
+ * Initial release.
+
+
+== END ==
diff --git a/macros/latex/exptl/gcite/README b/macros/latex/exptl/gcite/README
new file mode 100644
index 0000000000..b56ca6c91d
--- /dev/null
+++ b/macros/latex/exptl/gcite/README
@@ -0,0 +1,36 @@
+The gcite Package
+==================
+
+Copyright 2007--2009 Matthew Tylee Atkinson, Iain Phillips
+Distributed under the LPPL 1.3 (http://www.latex-project.org/lppl.txt)
+
+Abstract
+---------
+
+This package allows you to make citations in the German style, which
+is considered by many to be particularly reader-friendly. The citation
+provides a small amount of bibliographic information in a footnote on
+the page where each citation is made. It combines a desire to eliminate
+unnecessary page-turning with the look-up efficiency afforded by numeric
+citations.
+
+Installation
+-------------
+
+If you wish to install the latest version of gcite locally...
+
+1. mkdir -pv ~/texmf/tex/latex/gcite/
+2. cp gcite.dtx gcite.ins ~/texmf/tex/latex/gcite/
+3. cd ~/texmf/tex/latex/gcite/
+4. latex gcite.ins
+5. Compile the manual...
+ a. pdflatex gcite.dtx
+ b. bibtex gcite
+ c. pdflatex gcite.dtx
+ d. pdflatex gcite.dtx
+6. Read the manual ;-).
+
+Please contact us if you have any problems or suggestions.
+
+
+== END ==
diff --git a/macros/latex/exptl/gcite/gcite.dtx b/macros/latex/exptl/gcite/gcite.dtx
new file mode 100644
index 0000000000..c225cdbc92
--- /dev/null
+++ b/macros/latex/exptl/gcite/gcite.dtx
@@ -0,0 +1,392 @@
+%\iffalse
+% gcite.dtx generated using makedtx version 0.94b (c) Nicola Talbot
+% Command line args:
+% -setambles "gcite\.bib=>\nopreamble\nopostamble"
+% -src "gcite\.sty=>gcite.sty"
+% -src "gcite\.bib=>gcite.bib"
+% -doc "gcite.tex"
+% -author "Matthew Tylee Atkinson and Iain Phillips"
+% -license "lppl"
+% gcite
+% Created on 2009/7/4 13:22
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2009 Matthew Tylee Atkinson and Iain Phillips, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+%%%
+%%% gcite manual
+%%% Matthew Tylee Atkinson
+%%% Package code written with Iain Phillips
+%%%
+\documentclass[british,a4paper]{ltxdoc}
+\usepackage{babel,color}
+\usepackage[hyperref=true]{biblatex}
+\definecolor{darkblue}{rgb}{0, 0, 0.5}
+\definecolor{darkgreen}{rgb}{0, 0.5, 0}
+\usepackage[colorlinks,linkcolor=darkblue,citecolor=darkgreen,breaklinks,linktocpage,pdftitle={The gcite Package},pdfauthor={Matthew Tylee Atkinson and Iain Phillips},pdfsubject={}]{hyperref}
+\usepackage{gcite}
+
+\title{The \pkg{gcite} Package\\\large Citations in the German\footnote{footnotes containing brief information and standard numeric links to bibliography entries with full information}~~Style \\ Version 1.0.1}
+\author{Matthew Tylee Atkinson\\\email{M.T.Atkinson@lboro.ac.uk} \and Iain Phillips\\\email{I.W.Phillips@lboro.ac.uk}}
+\date{3rd July 2009}
+
+\newcommand{\pkg}[1]{%
+ \textsf{#1}}
+\newcommand{\opt}[1]{%
+ \texttt{#1}}
+\newcommand{\email}[1]{%
+ \texttt{#1}}
+\newcommand{\biblatexSecPage}[2]{%
+ (section #1; page #2)}
+
+\bibliography{gcite}
+\begin{document}
+\DocInput{gcite.dtx}
+\end{document}
+%</driver>
+%\fi
+%\maketitle
+%\begin{abstract}
+%This package allows you to make citations in the German style, which is considered by many to be particularly reader-friendly. The citation provides a small amount of bibliographic information in a footnote on the page where each citation is made. It combines a desire to eliminate unnecessary page-turning with the look-up efficiency afforded by numeric citations.
+%\end{abstract}
+%
+%\tableofcontents
+%
+%\section{Introduction}
+%
+%When writing a document, the aim should be to make the reading process as smooth as possible. You may well enjoy using the numeric style of citations, but this means that no information on the cited works is made available at the point of citation in the text.
+%
+%One answer to this the German citation style, which is implemented by the \pkg{gcite} package. It will print some limited information about cited works\cite{Dhiensa2005} in a footnote and still provide a traditional numeric link to the bibliography. Using \pkg{gcite} offers more information than the author-year citation format and keeps the fast indexing ability of using numeric citations.
+%
+%The package can also deal with multi-key citations, as with the traditional \LaTeX\ |\cite| command\cite{opcit,AGRIP}.
+%
+%\section{Prerequisites}
+%
+%The \pkg{gcite} package requires that you use \pkg{biblatex}. This package implements most of the functionality of \BibTeX\ in \LaTeX\ and provides commands that allow lower-level access to bibliographic data than the standard |\cite| command.
+%
+%It is recommended that you read the documentation for the \pkg{biblatex} package\cite{biblatex}. However, what follows is a short overview of the few steps needed to turn a standard \LaTeX\ document into one that will work with \pkg{biblatex}.
+%
+%\begin{enumerate}
+%\item |\usepackage[hyperref=true]{biblatex}| \emph{before} \pkg{hyperref} is loaded, if you're using it (if not you can ignore the \opt{hyperref} option completely).
+%
+%\item Move your |\bibliography| command to the document's preamble (e.g. directly before |\begin{document}|).
+%
+%\item Remove the |\bibliographystyle| command.
+%
+%\item Add |\printbibliography| where you want the bibliography to be generated. Use |\printbibliography[heading=bibintoc]| if you want the bibliography section to show up in the table of contents of your document.
+%\end{enumerate}
+%
+%\section{Usage}
+%
+%\DescribeMacro{\usepackage\{gcite\}} To use the \pkg{gcite} package, simply load it. There is only one package option, detailed in section~\ref{sec:pkgopt}.
+%
+%All of your citation commands will then be overridden with the new behaviour (even those with non-breaking spaces before them, as is customary for citations in \LaTeX\ documents).
+%
+%\subsection{Recommended Citation Style}
+%
+%All of the examples in this manual were created using \pkg{biblatex}'s default style of citation markers. This is the same as the ``plain'' bibliography style in normal \LaTeX/\BibTeX\ and is the recommended style for use with \pkg{gcite}, because it allows for fast indexing into the bibliography section.
+%
+%You are, however, free to choose whichever style of citation you like---\pkg{gcite} will still encapsulate it into a footnote as in the examples presented here.
+%
+%\subsection{Multi-Key Citations}
+%
+%Sometimes you will wish to cite only one piece of work to prove a point and, at other times, multiple works ought to be cited. The traditional |\cite| command groups multi-key citations together (i.e. multiple numbers, separated by commas, can be found inside the square brackets).
+%
+%\pkg{gcite} groups multi-key citations similarly, outputting the minimal bibliographic details for each work in turn, then the grouped numeric citation at the end. Section~\ref{sec:customisation:multi} contains information on how the separator used may be customised.
+%
+%\subsection{Citations Within Footnotes}
+%
+%There may be occasions when you may wish to make a citation from within a |\footnote|. In this case, \pkg{gcite} will not create a new footnote, but continue using the existing one\footnote{as shown in this example\cite{AGRIP}}. Section~\ref{sec:customisation:foot} contains some information on how this behaviour may be customised.
+%
+%\subsection{Reverting to the Standard Behaviour}
+%
+%It is possible to revert to the standard \LaTeX/\BibTeX\ citation behaviour. Two methods are provided (to cater for global and local reversion).
+%
+%\subsubsection{The \opt{normalcite} Option\label{sec:pkgopt}}
+%
+%\DescribeMacro{normalcite} Simply specify the \opt{normalcite} option when loading \pkg{gcite} and the standard behaviour will be restored for all citations in your document.
+%
+%Please note that if you use this method, you'll not be required to re-insert spaces before each |\cite| command---\pkg{gcite} will insert them for you.
+%
+%\subsubsection{One-Off Citations in the Standard Style}
+%
+%\DescribeMacro{\origcite\{\}} If you wish to make relatively few citations in the standard, non-footnote style, you can use this command. It will affect only the current citation being made and \emph{does} require that a space (non-breaking or otherwise) be inserted before it.
+%
+%This command is provided for special cases (such as an appendix to a thesis that lists prior publications) where adding the footnotes would be repeating information. It is not intended to be used often, or even at all, by most users.
+%
+%\section{Customisation}
+%
+%There are a few customisation options provided by the \pkg{gcite} package. They allow some control over the way that citations are presented.
+%
+%\subsection{Multi-Key Item Separator}
+%\label{sec:customisation:multi}
+%
+%\DescribeMacro{\gciteitemsep\{\}} The default separator between items (cited works) in a multi-key citation is the semicolon, followed by a space. This can be easily changed by using the |\gciteitemsep| command. The example below shows the separator being set to the bullet point symbol, with a space on either side.
+%
+%\gciteitemsep{ \textbullet\ }
+%\begin{verbatim}
+%\gciteitemsep{ \textbullet\ }
+%\end{verbatim}
+%
+%It is possible to use this command anywhere in your document. After doing so, the effects of having adjusted the citation separator can be seen\cite{biblatex,Dhiensa2005,Stone2004}.
+%
+%\subsection{Footnote Citation Separators}
+%\label{sec:customisation:foot}
+%
+%\DescribeMacro{\gcitefoot*sep\{\}} As discussed above, citations may be made inside footnotes. In this case, a separator is placed between the footnote text and citation text \emph{and} at the end of the citation text. The default pre-citation text separator is the em-dash (``---'') and the default post-citation text separator is literally nothing. As with the multi-key separator above, both of these may be customised. Some examples follow.
+%
+%In this example, we redefine only the pre-citation text separator.
+%
+%\gcitefootpresep{: }
+%\begin{verbatim}
+%\gcitefootpresep{: }
+%\end{verbatim}
+%
+%These commands may also be used anywhere in your document\footnote{and here is an example\cite{makedtx}}. Below is an example where both the pre- and post- separators are set.
+%
+%\gcitefootpresep{ (}
+%\gcitefootpostsep{)}
+%\begin{verbatim}
+%\gcitefootpresep{ (}
+%\gcitefootpostsep{)}
+%\end{verbatim}
+%
+%Once again, the effect of executing these commands can be seen below\footnote{Setting both a pre- and post-citation separator has an effect like this\cite{AGRIP}.}.
+%
+%\printbibliography[heading=bibnumbered]
+%\appendix
+%\section{Help for Newcomers to \pkg{biblatex}}
+%
+%\begin{quote}
+%``Don't Panic!''\\
+%---Douglas Adams, ``The Hitchhiker's Guide to the Galaxy''
+%\end{quote}
+%
+%\gcitefootpresep{}
+%\gcitefootpostsep{; }
+%
+%Below is a list of things that people new to the \pkg{biblatex} package need to be aware of. Information on how to solve some potential problems is given, along with section and page number links to the \pkg{biblatex} documentation\footnote{\cite{biblatex}referenced manual section and page numbers are correct for version 0.6 beta (6th January 2007)} that you can use to find out more.
+%
+%\gcitefootpresep{---}
+%\gcitefootpostsep{}
+%
+%\subsection{No Classic \BibTeX\ Custom Styles}
+%
+%Only styles made for \pkg{biblatex} may be used. This is not foreseen to be a problem in reality, as using \pkg{gcite} implies that the user has a particular (implemented) style in mind, but it is worth mentioning \biblatexSecPage{2}{2}.
+%
+%\subsection{More \BibTeX\ Fields Displayed}
+%
+%\pkg{biblatex} by default prints out more information from your |.bib| file(s). Fields such as ``howpublished'', ``doi'' and ``url'' are typeset by default \biblatexSecPage{2.1.1}{3--5}.
+%
+%It is possible to create your own bibliography style that suppress this extra information. The manual provides details \biblatexSecPage{4.2 [specifically 4.2.1 and 4.2.3]}{67--73} and the file |biblatex/bbx/standard.bbx| provides a useful template.
+%
+%\subsection{``Missing \$ inserted'' Compilation Error}
+%
+%This can be caused by invalid (special) characters appearing in certain fields in the |.bib| file(s). It may have gone un-noticed until now due to \pkg{biblatex}'s default inclusion of more field types than \BibTeX\ in the typeset document. One example cause is the special characters (such as: `\_'; `\&' and `\%') in a URL, if one is present in a field other than ``url'' (those \emph{inside} a ``url'' field will be automatically escaped).
+%
+%Make sure URLs are specified only in the ``url'' field and that special characters\footnote{see \url{http://theoval.cmp.uea.ac.uk/~nlct/latex/novices/node30.html}; last accessed 1st September 2007} in any other fields are escaped. The error message may tell you the line in any external file to the document (such as the intermediate |.bbl| file) where the error occurred.
+%
+%\subsection{When Non-US Localisation is Required\ldots}
+%
+%As \pkg{biblatex} prints out more fields than \BibTeX\ by default, including URL access dates, you may need to carry out some localisation to ensure these fields are typeset in an appropriate way for your country.
+%
+%A simple way to do this is to use the \pkg{babel} package\footnote{\url{http://www.ctan.org/tex-archive/macros/latex/required/babel/}; last accessed 1st September 2007}. Specify your language string (as listed in the \pkg{babel} documentation) as one of the options to |\documentclass|, then ensure you |\usepackage{babel}|. This way, all packages that support automatic localisation will pick up your language option. \pkg{biblatex} will reflect this too (and will do things such as use your local date format and provide some string translations as a result).
+%
+%\subsection{Not All Author Names Displayed in Bibliography}
+%
+%This is caused by \pkg{biblatex}'s default style only showing a certain number of author names by default, in contrast to what most people expect to see in the bibliography (a full list). You can solve this by use of the \opt{maxnames} package option for \pkg{biblatex}.
+%
+%
+%
+%\StopEventually{}
+%\section{The Code}
+%\iffalse
+% \begin{macrocode}
+%<*gcite.sty>
+% \end{macrocode}
+%\fi
+% Package definition.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gcite}[2009/07/03 1.0.1]
+\RequirePackage{biblatex}
+% \end{macrocode}
+% Define our \opt{normalcite} option and set it to false by default.
+% \begin{macrocode}
+\newif\ifgcite@normalcite
+\gcite@normalcitefalse
+\DeclareOption{normalcite}{\gcite@normalcitetrue}
+\ProcessOptions\relax
+% \end{macrocode}
+% \subsection{Minor Bits}
+% Move the traditional |\cite{}| command out of the way.
+% \begin{macrocode}
+\let\origcite\cite
+% \end{macrocode}
+% Provide a way to customise the separator used between individual cited works.
+% \begin{macrocode}
+\providecommand{\gciteitemsep}[1]{\def\gcite@itemsep{#1}}
+% \end{macrocode}
+% Default multi-item separator is semicolon with a space following.
+% \begin{macrocode}
+\def\gcite@itemsep{; }
+% \end{macrocode}
+% Provide a way to customise the separator used between the footnote text and the citation text when a citation is made from inside a footnote.
+% \begin{macrocode}
+\providecommand{\gcitefootpresep}[1]{\def\gcite@foot@presep{#1}}
+\providecommand{\gcitefootpostsep}[1]{\def\gcite@foot@postsep{#1}}
+% \end{macrocode}
+% Default footnote citation text pre-separator is an em-dash; default post-seperator is literally nothing.
+% \begin{macrocode}
+\def\gcite@foot@presep{---}
+\def\gcite@foot@postsep{}
+% \end{macrocode}
+% \subsection{Core Commands}
+% The core commands of the German citation style produce the short version(s) of the bibliographical information, followed by a pointer to the full citation in the bibliography. They are called internally.
+%
+% Each individual cited work's details must be treated atomically.
+% \begin{macrocode}
+\def\gcite@one#1{\citeauthor{#1}, \citetitle{#1}, \citeyear{#1}}
+% \end{macrocode}
+% We need a loop to output the details of each cited work in turn, then display the numerical link(s) at the end.
+% \begin{macrocode}
+\def\gcite@core#1#2{%
+ \newif\ifgcite@nfirst
+ \gcite@nfirstfalse%
+ \@for\@c:=#1\do{%
+ \ifgcite@nfirst{\gcite@itemsep}\else\gcite@nfirsttrue\fi%
+ \gcite@one\@c}~\origcite[#2]{#1}}
+% \end{macrocode}
+% \subsection{Citation Command Replacement}
+% If the \opt{normalcite} option was specified, simply emulate the standard \LaTeX\ behaviour (including the non-breaking space).
+% \begin{macrocode}
+\ifgcite@normalcite%
+% (do nothing)
+\else%
+% \end{macrocode}
+% Otherwise, we use the \pkg{gcite} behaviour. As of version 1.0.1 we can handle an option passed in to this command to allow, for example, the document's author to refer the reader to a particular part of the cited document.
+% \begin{macrocode}
+ \renewcommand{\cite}[2][]{%
+% \end{macrocode}
+% Here is a wrapper to decide if we're in a footnote or not. The idea was gained from the \pkg{opcit} package\cite{opcit}.
+% \begin{macrocode}
+ \ifnum\interlinepenalty=\interfootnotelinepenalty%
+% \end{macrocode}
+% We are in a footnote---just add the text of the footnote citation to the end of the current footnote, separating it from the rest of the footnote text, if the user wishes. We pass the optional argument in as the second argument to our core routine (this is an aesthetic design decision and was made to signify the optional argument to this command being less important than the cite key(s)).
+% \begin{macrocode}
+ \gcite@foot@presep\gcite@core{#2}{#1}\gcite@foot@postsep%
+ \else%
+% \end{macrocode}
+% Otherwise, we're not in a footnote, so create a new one. Again, the optional argument is passed in last. We use |\unskip| so that the author can put spaces (even non-breaking ones) before the citation, as they normally would.
+% \begin{macrocode}
+ \unskip\footnote{\gcite@core{#2}{#1}}%
+ \fi%
+ }
+\fi
+% \end{macrocode}
+% That's all, folks!
+%\iffalse
+% \begin{macrocode}
+%</gcite.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*gcite.bib>
+% \end{macrocode}
+%\fi
+% \iffalse
+% \begin{macrocode}
+@Misc{ makedtx,
+ author = "Nicola Talbot",
+ title = "{makedtx : a Perl script to help create a DTX file from
+ source code}",
+ url = "http://www.ctan.org/tex-archive/support/makedtx/",
+ urldate = {2007-09-02},
+ year = "2005"
+}
+
+@Misc{ opcit,
+ author = "Federico Garcia",
+ title = "{opcit (version 2.0) a package for footnote-style
+ bibliographical references}",
+ url = "http://www.ctan.org/tex-archive/macros/latex/contrib/opcit/"
+ ,
+ urldate = {2007-09-02},
+ year = "2006"
+}
+
+@Misc{ biblatex,
+ author = "Philipp Lehman",
+ title = "{The biblatex package}",
+ url = "http://www.ctan.org/tex-archive/macros/latex/exptl/biblatex/"
+ ,
+ urldate = {2007-09-02},
+ year = "2006"
+}
+
+@Misc{ agrip,
+ author = "Matthew Tylee Atkinson and Sabahattin Gucukoglu",
+ title = "{Accessible Gaming Rendering Independence Possible}",
+ url = "http://www.agrip.org.uk/",
+ month = "05",
+ year = "2003"
+}
+
+@InProceedings{ dhiensa2005,
+ author = "Jatinder Dhiensa and Colin Machin and Francesca Smith and
+ Roger Stone",
+ title = "Optimizing the User Environment: Leading Towards an
+ Accessible and Usable Experience",
+ booktitle = "Accessible Design in the Digital World Conference 2005",
+ year = "2005",
+ issn = "1477-9358",
+ location = "Dundee, Scotland",
+ pdf = "paper3.pdf"
+}
+
+@InProceedings{ stone2004,
+ author = "R. G. Stone and J. Dhiensa",
+ title = "Proving the validity and accessibility of dynamic
+ web-pages",
+ booktitle = "W4A '04: Proceedings of the 2004 international
+ cross-disciplinary workshop on Web accessibility (W4A)",
+ year = "2004",
+ pages = "45--49",
+ address = "New York, NY, USA",
+ publisher = "ACM Press",
+ doi = "http://doi.acm.org/10.1145/990657.990665",
+ isbn = "1-58113-903-9",
+ pdf = "p45-stone.pdf"
+}
+% \end{macrocode}
+% \fi
+%\iffalse
+% \begin{macrocode}
+%</gcite.bib>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput
diff --git a/macros/latex/exptl/gcite/gcite.ins b/macros/latex/exptl/gcite/gcite.ins
new file mode 100644
index 0000000000..5fab61b8b5
--- /dev/null
+++ b/macros/latex/exptl/gcite/gcite.ins
@@ -0,0 +1,32 @@
+% gcite.ins generated using makedtx version 0.94b 2009/7/4 13:22
+\input docstrip
+
+\preamble
+
+ gcite.dtx
+ Copyright 2009 Matthew Tylee Atkinson and Iain Phillips
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3
+ of this license of (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Matthew Tylee Atkinson and Iain Phillips.
+
+ This work consists of the files gcite.dtx and gcite.ins and the derived files gcite.sty, gcite.bib.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{gcite.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{gcite.dtx}{gcite.sty,package}}
+\file{gcite.bib}{\nopreamble\nopostamble\from{gcite.dtx}{gcite.bib}}
+}
+
+\endbatchfile
diff --git a/macros/latex/exptl/gcite/gcite.pdf b/macros/latex/exptl/gcite/gcite.pdf
new file mode 100644
index 0000000000..0a3edb1179
--- /dev/null
+++ b/macros/latex/exptl/gcite/gcite.pdf
Binary files differ
diff --git a/macros/latex/exptl/graphicp/descend.1 b/macros/latex/exptl/graphicp/descend.1
new file mode 100644
index 0000000000..68d10eee40
--- /dev/null
+++ b/macros/latex/exptl/graphicp/descend.1
@@ -0,0 +1,23 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: -6 -29 29 29
+%%Creator: MetaPost
+%%CreationDate: 2002.12.24:2244
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+%%HiResBoundingBox: -5.25 -28.25 28.59645 28.25
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath -5 -28 moveto
+28.34645 -28 lineto
+-5 28 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 11.67323 -28 moveto
+-5 28 lineto stroke
+newpath 11.67322 0 moveto
+-5 -28 lineto stroke
+newpath -5 0 moveto
+28.34645 -28 lineto stroke
+showpage
+%%EOF
diff --git a/macros/latex/exptl/graphicp/descend.mp b/macros/latex/exptl/graphicp/descend.mp
new file mode 100644
index 0000000000..193612a443
--- /dev/null
+++ b/macros/latex/exptl/graphicp/descend.mp
@@ -0,0 +1,34 @@
+%
+% descend.mp -- a MetaPost figure that descends far below the baseline
+% by pts@fazekas.hu at Wed Feb 5 00:28:41 CET 2003
+%
+
+% input plain;
+
+% message jobname;
+
+extra_endfig := extra_endfig
+ & "special ("
+ & ditto & "%%HiResBoundingBox: " & ditto
+ & "&decimal xpart llcorner currentpicture &" & ditto & " " & ditto
+ & "&decimal ypart llcorner currentpicture &" & ditto & " " & ditto
+ & "&decimal xpart urcorner currentpicture &" & ditto & " " & ditto
+ & "&decimal ypart urcorner currentpicture );";
+
+prologues:=2; % 2 == TeX
+
+%beginfig(-1)
+beginfig(1)
+%string extra_endfig;
+ %boxit a (btex Essai etex);
+ %fill bpath a witchcolor .5[red,white];
+ %drawboxed(a);
+ pair A, B, C;
+ A:=(-5bp,-28bp); B:=(1cm,-28bp); C:=(-5bp,28bp);
+ draw A--B--C--cycle;
+ draw 1/2[A,B] -- C;
+ draw 1/2[B,C] -- A;
+ draw 1/2[C,A] -- B;
+endfig;
+
+end;
diff --git a/macros/latex/exptl/graphicp/div16b.sty b/macros/latex/exptl/graphicp/div16b.sty
new file mode 100644
index 0000000000..523fa75026
--- /dev/null
+++ b/macros/latex/exptl/graphicp/div16b.sty
@@ -0,0 +1,490 @@
+%
+% div16.tex -- perform 16.16 bit fixed point division
+% by pts@fazekas.hu at Fri Dec 27 22:40:52 CET 2002 --- ...
+%
+% This .tex file contains TeX macros for double precision multiplication,
+% division of integer and real numbers and image size scaling. The most
+% remarkable macro in this file is \@@muldivletposdim (see the comments in
+% front of it for detailed documentation).
+%
+% If you process this file with
+% Plain TeX, the unit regression testsuite will be run, and the results of
+% the operations issued at the end of this file will be printed to the
+% terminal and into the .log file.
+%
+% The documentation of this macro package is scattered through this file as
+% embedded TeX comments.
+%
+% History
+% ~~~~~~~
+% started at Fri Dec 27 22:40:52 CET 2002
+% --- Sat Dec 28 01:26:52 CET 2002
+% 31.31 bit arithmetic: Tue Jan 7 18:12:53 CET 2003
+% skippable, partial \@@muldivpos at Tue Jan 7 21:00:17 CET 2003
+% skippable, finished, doesn't work at Tue Jan 7 21:43:25 CET 2003
+% first successful test case at Tue Jan 7 22:34:32 CET 2003
+% all test cases OK at Tue Jan 7 23:30:32 CET 2003
+% Fri Jan 24 12:56:23 CET 2003
+% uses laemu.sty
+%
+
+\expandafter\ifx\csname ifLaTeX\endcsname\relax\input laemu.sty\relax\fi%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{div16b}[2003/01/24 v0.0 high precision div and mul]
+
+%
+% SUXX: `\count0=2\count1' and `\advance\count0 by 2\count1' disallowed
+% Dat: `\count0=-\count1' and `\advance\count0 by -\count1' OK
+%
+% Imp: @@ namespace
+%
+
+% \def\@empty{} % from laemu.sty
+% \catcode`\@=11 % \makeatletter
+
+%\def\loop#1\repeat{%
+% \def\iterate{#1\relax\expandafter\iterate\fi}%
+% \iterate \let\iterate\relax%
+%}%
+%\let\repeat\fi%
+
+% vvv so we can nest a \@@loop inside \loop or vica versa
+\def\@@loop#1\@@repeat{%
+ \def\@@iterate{#1\relax\expandafter\@@iterate\fi}%
+ \@@iterate \let\@@iterate\relax%
+}%
+\let\@@repeat\fi%
+
+%\repeat
+%alma
+%\iftrue
+%korte
+%\loop
+
+\def\@@gobbleend#1\end{}%
+
+%** `\@@aftergroupbegin ... \end' types `...' token-by-token \aftergroup
+%** Argument of \@@aftergroupbegin must not contain \end, {, or }
+\def\@@aftergroupbegin#1{%
+ \ifx#1\end%
+ %\message{done}
+ \else%
+ %\message{\string#1}%
+ \aftergroup#1%
+ \expandafter\@@aftergroupbegin%
+ \fi%
+}%
+
+%** Doesn't make a \global assignment to #1, but keeps its value after the
+%** the next `}'.
+%** @param #1 name of a \count, \dimen or \skip register (i.e \count0 or
+%** \jot)
+\def\@@noresetaftergroup#1{%
+ \@@aftergroupbegin#1=\end%
+ \expandafter\@@aftergroupbegin\the#1 \end%
+ % ^^^ The space before \end is required, because in LaTeX, \end is expandable
+ \aftergroup\relax% finish assignment
+}%
+%** Doesn't work if the definition of #1 contains strange tokens
+%** @param #1 a macro \cs name
+\def\@@keepdefaftergroup#1{%
+ \aftergroup\def%
+ \aftergroup#1%
+ \aftergroup{%
+ \expandafter\@@aftergroupbegin#1\end%
+ \aftergroup}%
+}%
+
+%** Performs the `#1 := #2' assignment, avoids `Dimension too large' error if
+%** both #1 and #2 are \counts.
+%** @param #1 a \count or \dimen register specification
+%** @param #2 a \count or \dimen register specification, an integer, a real
+%** number or a dimension. Numbers are assumed to have unit `sp'.
+\def\@@letdimcount#1#2{{%
+ \afterassignment\@@letdimcount@a\count0=#2 \end%
+ % Dat: now \@@letdimcount@c contains any of "", "sp", ".45", ".45pt"
+ \afterassignment\@@gobbleend\dimen0=1\@@letdimcount@c sp \end% "1", "1sp" "1.45sp" "1.45pt"
+ % Dat: 1.99999999sp == 1sp
+ \ifdim\dimen0=1sp%
+ %\showthe\count0 \message{\the\count0-sp}%
+ \afterassignment\@@gobbleend#1=\count0 sp \end%
+ \else%
+ \afterassignment\@@gobbleend\dimen0=#2 sp \end%
+ \afterassignment\@@gobbleend#1=\dimen0 sp \end%
+ \fi%
+ \@@noresetaftergroup{#1}% return(\T)
+}}%
+\def\@@letdimcount@a#1\end{\def\@@letdimcount@c{#1}}%
+%** Performs the `#1 := #2' assignment, doesn't avoid `Dimension too large'
+%** error if both #1 and #2 are \counts.
+%** `\@@letdimcount#1#2' is the same as `\@@letdimcountany#1#2{sp}', but
+%** \@@letdimcount avoids the error.
+%** @param #1 a \count or \dimen register specification
+%** @param #2 a \count or \dimen register specification, an integer, a real
+%** number or a dimension. Numbers are assumed to have unit `#3'.
+%** @param #3 default metric unit
+\def\@@letdimcountany#1#2#3{{%
+ \afterassignment\@@letdimcount@a\dimen0=#2 #3 bp\end%
+ #1=\dimen0%
+ \@@noresetaftergroup{#1}% return(\T)
+}}%
+
+\iffalse
+% Regression test for \@@letdimcount:
+\@@letdimcount{\count0}{2147483647} \message{\the\count0}
+\@@letdimcount{\count0}{2147483647sp} \message{\the\count0}
+\@@letdimcount{\count0}{2147483647.0sp} \message{\the\count0}
+\@@letdimcount{\count0}{2147483647.999999sp} \message{\the\count0}
+\@@letdimcount{\count0}{16383.99999pt} \message{\the\count0}
+\@@letdimcount{\dimen0}{16383.99999pt} \message{\the\dimen0}
+%\@@letdimcount{\count0}{16384pt} % Dimension too large.
+%\@@letdimcount{\dimen0}{2000000000} % Dimension too large.
+\@@letdimcount{\dimen0}{\count0} \message{\the\dimen0}
+\fi
+
+% ---
+
+% !! why no \space in \write?
+%** Performs the assignment `#1 := \dimen0 / \dimen1',
+%** @param #1 is a name of a TeX dimen/count register (i.e \jot or \count7).
+%** If dimen, then it contains quotient in dimension `pt' (i.e 1in / 1cm
+%** is 2.54pt). If count, then its value divided by 65536 is the quotient
+%** (so this is 16.16 bit fixed-point notation).
+%** \dimen0 must not be negative. \dimen1 must be positive.
+%** Overwrites \dimen2.
+\def\@@divletpos#1{%
+ \dimen2=1pt\relax%
+ \multiply#1 0% `#1 := 0' works for both \dimen and \count registers
+ \loop\ifdim\dimen0>0pt%
+ \immediate\write16{0 a=\the\dimen0:b=\the\dimen1:m=\the\dimen2:q=\the#1}
+ \@@loop\ifdim\dimen1<0.5\dimen0%
+ \advance\dimen1\dimen1%
+ \advance\dimen2\dimen2%
+ % ^^^ this is the only statement where an arithmetic overflow can occur.
+ % an arithmetic overflow means that the divisor is zero is very
+ % small positive, so the result will be a ``dimen too large''
+ \@@repeat%
+ \immediate\write16{1 a=\the\dimen0\space b=\the\dimen1\space m=\the\dimen2\space q=\the#1}
+ \@@loop\ifdim\dimen1>\dimen0%
+ \divide\dimen1 2%
+ \divide\dimen2 2%
+ \ifdim\dimen2=0pt%
+ \dimen0\dimen2%
+ \dimen1\dimen2%
+ \fi%
+ \@@repeat%
+ \immediate\write16{2 a=\the\dimen0\space b=\the\dimen1\space m=\the\dimen2\space q=\the#1}
+ \ifdim\dimen0>0pt%
+ \@@loop\ifdim\dimen0<8192pt%
+ \multiply\dimen0 2%
+ \multiply\dimen1 2%
+ \@@repeat%
+ \fi%
+ \immediate\write16{3 a=\the\dimen0\space b=\the\dimen1\space m=\the\dimen2\space q=\the#1}
+ \advance\dimen0-\dimen1%
+ \advance#1\dimen2%
+ % ^^^ Dat: because of this, \dimen2 must be a dimen (and not a count)
+ \immediate\write16{4 a=\the\dimen0\space b=\the\dimen1\space m=\the\dimen2\space q=\the#1}
+ \repeat%
+ %\ifdim\dimen0>0pt \message{SUXX}\fi%
+}%
+
+%** The same as \@@divletpos, except for #2 and #3 may be either positive or
+%** negative, and they might be either dimen or count registers. (A count is
+%** measured in sp.)
+%** Please don't pass \dimen0, \dimen1 or \dimen2 as argument.
+%** @param #1 is a name of a TeX dimen/count register (i.e \jot or \count7).
+%** If dimen, then it contains quotient in dimension `pt' (i.e 1in / 1cm
+%** is 2.54pt). If count, then its value divided by 65536 is the quotient
+%** (so this is 16.16 bit fixed-point notation).
+%** @param #2 and #3 are token lists
+%** containing a _positive_ integer or floating point value
+%** (measured in sp, must be specified explicitly), or a dimen such as `2.54cm'.
+\def\@@divletdim#1#2#3{{%
+ \afterassignment\@@gobbleend\dimen0=#2 sp\end% \dimen0 := #1, convert count -> sp
+ \afterassignment\@@gobbleend\dimen1=#3 sp\end%
+ \ifdim\dimen1=0pt%
+ \divide\dimen0 by0% trigger a TeX division-by-zero error
+ \else%
+ \ifdim\dimen1<0pt%
+ \dimen1-\dimen1%
+ \ifdim\dimen0<0pt%
+ \dimen0-\dimen0%
+ \@@divletpos{#1}%
+ \else
+ \@@divletpos{#1}%
+ #1-#1%
+ \fi%
+ \else%
+ \ifdim\dimen0<0pt%
+ \dimen0-\dimen0%
+ \@@divletpos{#1}%
+ #1-#1%
+ \else
+ \@@divletpos{#1}%
+ \fi%
+ \fi%
+ \fi%
+ % Imp: round to nearest integer
+ \@@noresetaftergroup{#1}%
+}}%
+
+% --- Dobule (high) precision multiplication and division.
+
+% The type co31.31 denotes two \count registers, representing a nonnegative
+% value in 31.31 bit fixed point notation. The sign bits of the registers
+% are unused.
+
+%** Subtracts #3#4 from #1#2, modifies #1#2 in place
+%** @param #1 \control-sequence on less
+%** @param #2 \control-sequence on greater-or-equal
+%** @param #3#4 co31.31
+%** @param #5#6 co31.31
+\def\@@dolt#1#2#3#4#5#6{%
+ \ifnum#3<#5%
+ \expandafter#1%
+ \else%
+ \ifnum#3>#5%
+ \expandafter#2%
+ \else%
+ \ifnum#4<#6%
+ \expandafter#1%
+ \else%
+ \expandafter#2%
+ \fi%
+ \fi%
+ \fi%
+}%
+
+%** Subtracts #3#4 from #1#2, modifies #1#2 in place
+%** @param #1#2 co31.31
+%** @param #3#4 co31.31
+\def\@@letsub#1#2#3#4#5{%
+ \ifnum#2<#4%
+ \advance#1-1%
+ \advance#2-#4%
+ \advance#2-#5% #2 += 0x80000000
+ \else%
+ \advance#2-#4%
+ \fi%
+ \advance#1-#3%
+}%
+
+%** Adds #3#4 to #1#2, modifies #1#2 in place
+%** @param #1#2 co31.31
+%** @param #3#4 co31.31
+%** @param #5 \countx, whose value is -0x80000000 (-2147483648)
+\def\@@letadd#1#2#3#4#5{%
+ % \message{add:\the#3:\the#4}%
+ \advance#2#5% #2 -= 0x80000000
+ \ifnum#2<-#4% orig#2-0x80000000<-#4 <=> orig#2+#4 < 0x80000000
+ \advance#2-#5% #2 += 0x80000000
+ \else%
+ \advance#1 1%
+ \fi%
+ \advance#2#4%
+ \advance#1#3%
+}%
+
+%** Multiplies #1#2 by two, modifies #1#2 in place
+%** @param #1#2 co31.31
+\def\@@lettwice#1#2{%
+ \advance#1#1%
+ \ifnum#2>1073741823%
+ \advance#1 1%
+ \advance#2-1073741824%
+ \fi%
+ \advance#2#2%
+}%
+
+%** Divides #1#2 by two, discards LSB, modifies #1#2 in place
+%** @param #1#2 co31.31
+\def\@@lethalf#1#2{%
+ \divide#2 2%
+ \ifodd#1%
+ \advance#2 1073741824%
+ \fi%
+ \divide#1 2%
+}%
+
+% vvv SUXX: \newif is `\outer'
+\newif\ifLOOP
+% \def\x{ \expandafter\newif\csname ifLOOP\endcsname}%
+
+%** `\@@muldivletposdim#1#2#3#4' performs the assignment `#1 := #2 * #3 / #4'.
+%** `\@@muldivletposdim#1{1pt}#3#4' performs the assignment `#1 := #3 / #4'.
+%** `\@@muldivletposdim#1#2#3{1pt}' performs the assignment `#1 := #2 * #3'.
+%**
+%** All source arguments (#2, #3, #4) can be valid TeX dimen/count values, or
+%** \dimen / \count register specifications. Input values may be negative or
+%** positive or zero.
+%**
+%** -- Before each multiplication and division, the arguments are converted
+%** to `pt' (if the argument is a bare number or a \count register, it is
+%** treated as being a dimension in `sp'), the operation is performed on
+%** the numbers, and `pt' is added
+%** to the resulting number, so the result will be a dimension.
+%** -- The default unit of measure is `sp'. That is, all bare numbers and
+%** \count registers are treated as being a dimension in `sp'. This
+%** applies to both source and target argument. (You may notice that 1pt
+%** == 65536sp. So the operations are performed in a fixed-point
+%** arithmetic with 16 bits in the fraction.)
+%** -- The multiplication is performed exactly (i.e without loss of
+%** precision). However, the division and the 31.31 -> 15.16 rounding
+%** after the division may degrade precision. Internal calculations are
+%** performed in fixed-point arithmetic with 31 bits in the fraction.
+%** -- The following constants are valid source arguments, and represent the
+%** same number (one and a half): `1.5pt', `98304sp', `98304 sp',
+%** `98304', `98304.1sp', `98304.9sp'.
+%** -- To specify the real number `1.5', please specify `1.5 pt'.
+%** -- To specify the integer `42', please specify `42 pt'.
+%** -- If you do only division, set #2 := `1pt'. In that special case you may
+%** specify bare integers (or `... sp') for _both_ #3 and #4.
+%** -- The following are valid arguments: `\count0',
+%** `\dimen7', `\jot', `\interdisplaylinepenalty'
+%** -- Due to a limitation of TeX's fixed-precision arithmetic, it is
+%** impossible to specify exactly `1.5pt' in inches. `0.02075958251953in'
+%** is `1.49974pt', and `0.02075958251954in' is `1.50084pt'. (Of course,
+%** `1.5pt' is `1.5pt'.) That's because TeX converts the real constant
+%** 0.02075958251953 to the fraction `1360/65536' and
+%** 0.02075958251954 to the fraction `1361/65536', before multiplying.
+%** -- If you specify >=2 of \dimen0, \dimen1 and \dimen2 as input, please
+%** specify them in this order.
+%**
+%** @param #1 target, must be a \dimen or \count register
+%** specification (including `\count0' and `\jot'). If a \dimen register,
+%** its maximum will be 1073741823sp. If a \count register, its maximum
+%** will be 2147483647.
+%** @param #2 must be >=0
+%** @param #3 must be >=0
+%** @param #4 must be >0
+%**
+\def\@@muldivletposdim#1#2#3#4{{%
+ %\afterassignment\@@gobbleend\dimen0=#2 sp\end% \dimen0 := #1, convert count -> sp
+ %\afterassignment\@@gobbleend\dimen1=#3 sp\end%
+ %\afterassignment\@@gobbleend\dimen2=#4 sp\end%
+ \countdef\Y 2 \@@letdimcount\Y{#4}%
+ \countdef\F 14 \ifnum\Y<0 \Y-\Y \F-1 \else \F1 \fi%
+% \showthe\Y%
+ \ifnum0=\Y % SUXX: \ifnum\Y=0 doesn't work
+ \divide\Y0% trigger a TeX division-by-zero error (`arithmetic overflow')
+ \else%
+ % vvv declare my input arguments as local variables
+ \countdef\XA 0 \@@letdimcount\XA{#2}% treat dimen as in `sp'
+ \ifnum\XA<0 \XA-\XA \F-\F\fi%
+ \countdef\XB 1 \@@letdimcount\XB{#3}%
+ \ifnum\XB<0 \XB-\XB \F-\F\fi%
+ %\countdef\XA 0 \XA\dimen0% treat dimen as in `sp'
+ %\countdef\XB 1 \XB\dimen1%
+ %\countdef\Y 2 \Y \dimen2%
+ % vvv declare local variables
+ \countdef\C 3%
+ \countdef\B 4%
+ \countdef\R 5%
+ \countdef\S 6%
+ \countdef\T 7%
+ \countdef\U 8%
+ \countdef\D 9%
+ \countdef\A 10%
+ \countdef\L 11%
+ \countdef\M 12%
+ % vvv ++++ comment out the line below to get rid of the error ++++
+ \countdef\G 13 \relax \G-1073741824 \advance\G\G% G := -0x80000000
+ %
+ % Imp: support negative numbers here
+ \ifnum\XB=\Y% shortcut
+ \T\XA%
+ \else%
+ \ifnum\XA=\Y% shortcut
+ \T\XB%
+ \else% really multiply and divide
+ \@@muldivpos%
+ %
+ % vvv convert (round) \T\U: co31.31 -> \T: dimen15.16
+ % return (\U>=0x7fffc000) ? ((\T+1)<<16) : (\T<<16)+((\U+0x4000)>>15)
+ \multiply\T65536% result too large
+ \ifnum\U<2147467264% 0x80000000-0x4000
+ \advance\U16384%
+ \divide\U32768%
+ \advance\T\U%
+ \else%
+ \advance\T65536%
+ \fi%
+ \fi%
+ \fi%
+ \ifnum\F<0 \T-\T\fi%
+ %\afterassignment\@@gobbleend#1=\T sp\end% works if #1 is a dimen/count
+ \@@letdimcount{#1}\T%
+ \@@noresetaftergroup{#1}% return(\T)
+ \fi% else of division-by-zero
+}}%
+
+%** Performs the assignment `\T\U := \XA * \XB / \Y'. Destroys contents of
+%** \XA \XB \Y \C \B \R \S \T \U \D \A \L and \M during operations. All
+%** control sequences mentioned in this paragraph must be predefined \count
+%** registers.
+%** Assumes \newif\LOOP, sets \LOOPfalse upon return
+%** Inputs are: \XA \XB \Y and \G. \XA \XB \Y must be in 15.16 bit
+%** fixed-point notation (i.e dimension in `pt' converted to a \count).
+%** \G must be -0x80000000.
+%** Outputs are \T and \U. \T\U is a real number in 31.31 bit fixed-point
+%** notation (the sign bits are unused).
+%** This is helper routine called by \@@muldivletposdim.
+\def\@@muldivpos{%
+ %\message{A}%
+ \R\XA \divide\R65536 \S-\R \multiply\S65536 \advance\S\XA% my(\R,\S)=(( \XA >>16), \XA &0xffff);
+ %\message{A.S=\the\S,R=\the\XA}%
+ \T\XB \divide\T65536 \U-\T \multiply\U65536 \advance\U\XB% my(\T,\U)=(( \XB >>16), \XB &0xffff);
+ \D0 \A\Y \divide\A65536 \multiply\A32768 % my (\D,\A)=(0, ((( \Y >>16)&0xffff)<<15)); % round() final result
+ \L\R \advance\L\L \multiply\L\T \M0 \@@letadd\D\A\L\M\G% \@@letadd( (\D,\A), ((\R*\T)<<1, 0)
+ \L\R \multiply\L\U \M\L \divide\L32768 \multiply\L32768 \advance\M-\L \divide\L32768 \multiply\M65536 \@@letadd\D\A\L\M\G% \@@letadd( (\D,\A), ((\R*\U)>>15, ((\R*\U)&0x7fff)<<16)
+ \L\S \multiply\L\T \M\L \divide\L32768 \multiply\L32768 \advance\M-\L \divide\L32768 \multiply\M65536 \@@letadd\D\A\L\M\G% \@@letadd( (\D,\A), ((\S*\T)>>15, ((\S*\T)&0x7fff)<<16)
+ \ifnum\S>32767 %
+ \L0 \M\U \multiply\M32768 \@@letadd\D\A\L\M\G% \@@letadd( (\D,\A), (0, \U<<15)
+ \advance\S-32768%
+ \fi%
+ %\message{B.S=\the\S,U=\the\U}%
+ \L0 \M\S \multiply\M\U \@@letadd\D\A\L\M\G% \@@letadd( (\D,\A), (0, \S*\U)
+ \C\Y \divide\C 32768 \B-\C \multiply\B32768 \advance\B\Y \multiply\B65536 % my(\C,\B)=(( \Y >>15),(( \Y &0x7fff)<<16));
+ \L1 \M0 \T0 \U0% my (\L,\M)=(1,0); (\T,\U)=(0,0);
+ %\showthe\D \showthe\A \showthe\C \showthe\B
+ %\message{C}%
+ \loop% vvv while (\D!=0 or \A!=0) % DA != 0 % \D!=0 <=> \D>0
+ %\message{if}%
+ \LOOPfalse%
+ \ifnum\D>0 \LOOPtrue \fi% Dat: must have a space after `>0'
+ \ifnum\A>0 \LOOPtrue \fi%
+ \ifLOOP% loop condition
+ \R\D \S\A \@@lethalf\R\S% (\R,\S)=(\D,\A); _Half(\R,\S);
+ \@@loop% vvv while (_lt((\C,\B),(\R,\S))) % while (CB<DA/2)
+ %\message{ina}%
+ \@@dolt\LOOPtrue\LOOPfalse\C\B\R\S%
+ \ifLOOP% loop condition
+ \@@lettwice\C\B%
+ \ifnum\L=1073741824% Dat: \L\M is a power of 2
+ \divide\L0% die "overflow or division by 0" if \L<0
+ \fi%
+ \@@lettwice\L\M%
+ \@@repeat%
+ \@@loop% vvv while (_lt((\D,\A),(\C,\B)))
+ %\immediate\write16{D=\the\D:A=\the\A:C=\the\C:B=\the\B}%
+ %\message{inb}%
+ \@@dolt\LOOPtrue\LOOPfalse\D\A\C\B%
+ \ifLOOP% loop condition
+ \ifnum\D<1073741824 \@@lettwice\D\A \else \@@lethalf\C\B \fi%
+ \@@lethalf\L\M%
+ \ifnum0=\L \ifnum0=\M %
+ \D0 \A0% (\D,\A)=(0,0) if \L==0 and \M==0;
+ \B0 \C0%
+ \fi\fi%
+ \@@repeat%
+ \@@letsub\D\A\C\B\G%
+ \@@letadd\T\U\L\M\G%
+ \repeat%
+ \ifnum\T>32767\divide\T0\fi% die "overflow2 or division by 0" if \T>=0x8000
+ % ^^^ !! Imp: more meaningful overflow error message (here and at other places)
+ % return value: \T\U: co31.31
+ % to convert it to \dimen, do: (\U>=0x7fffc000) ? ((\T+1)<<16) : (\T<<16)+((\U+0x4000)>>15)
+}%
+
+\endinput%
diff --git a/macros/latex/exptl/graphicp/epstopdf b/macros/latex/exptl/graphicp/epstopdf
new file mode 100755
index 0000000000..f7b5b1675c
--- /dev/null
+++ b/macros/latex/exptl/graphicp/epstopdf
@@ -0,0 +1,476 @@
+#! /bin/sh
+eval '(exit $?0)' && eval 'PERL_BADLANG=x;export PERL_BADLANG;: \
+;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;
+eval 'setenv PERL_BADLANG x;exec perl -x -S -- "$0" $argv:q;#'.q
+#!perl -w
++($0=~/(.*)/s);do$1;die$@if$@;__END__+if 0;
+# Don't touch/remove lines 1--7: http://www.inf.bme.hu/~pts/Magic.Perl.Header
+
+use strict;
+
+# Change by Thomas Esser, Sept. 1998: The above lines allows us to find
+# perl along $PATH rather than guessing a fixed location. The above
+# construction should work with most shells.
+# Modified by pts@fazekas.hu at and before Sun Feb 2 12:57:10 CET 2003
+
+# A script to transform an EPS file so that:
+# a) it is guarenteed to start at the 0,0 coordinate
+# b) it sets a page size exactly corresponding to the BoundingBox
+# This means that when Ghostscript renders it, the result needs no
+# cropping, and the PDF MediaBox is correct.
+# c) the result is piped to Ghostscript and a PDF version written
+#
+# -- It needs a Level 2 PS interpreter.
+# -- If the bounding box is not right, of course, you have problems...
+# -- BoundingBox: (atend) is perfectly supported.
+# -- recommended options: --below --hires
+#
+# Sebastian Rahtz, for Elsevier Science
+#
+# now with extra tricks from Hans Hagen's texutil.
+#
+# History
+# 1999/05/06 v2.5 (Heiko Oberdiek)
+# * New options: --hires, --exact, --filter, --help.
+# * Many cosmetics: title, usage, ...
+# * New code for debug, warning, error
+# * Detecting of cygwin perl
+# * Scanning for %%{Hires,Exact,}BoundingBox.
+# * Scanning only the header in order not to get a wrong
+# BoundingBox of an included file.
+# * (atend) supported.
+# * uses strict; (earlier error detecting).
+# * changed first comment from '%!PS' to '%!';
+# * corrected (atend) pattern: '\s*\(atend\)'
+# * using of $bbxpat in all BoundingBox cases,
+# correct the first white space to '...Box:\s*$bb...'
+# * corrected first line (one line instead of two before 'if 0;';
+# 2000/11/05 v2.6 (Heiko Oberdiek)
+# * %%HiresBoundingBox corrected to %%HiResBoundingBox
+# 2001/03/05 v2.7 (Heiko Oberdiek)
+# * Newline before grestore for the case that there is no
+# whitespace at the end of the eps file.
+# 2003/02/02 (Szabó Péter)
+# * option --below
+# * removes DOS EPSF binary junk correctly
+# * adds all 3 BoundingBox DSC comments
+# * reads all 3 BoundingBox DSC comments, and picks the best
+# * forces BoundingBox to be an integer
+# * adds %%EndComments and proper %!PS-Adobe-?-? EPSF-?.? header
+# * adds %%Pages:
+#
+# Dat: calling ``showpage'' is not required, gs 6.50 works without it
+# Imp: detect error messages from GS, abort...
+# Imp: make it work for PDF input
+# Imp: make it work for PS non-EPS files
+
+### program identification
+my $program = "epstopdf";
+my $filedate="2003/02/02"; # my $filedate="2001/03/05";
+my $fileversion="2.7p";
+my $copyright = "Copyright 1998-2001 by Sebastian Rahtz et al.\nContains modifications by pts\@fazekas.hu";
+my $title = "\U$program\E $fileversion, $filedate - $copyright\n";
+
+### ghostscript command name
+my($quote,$GS)=("'","gs");
+($quote,$GS) = ("\"","gswin32c") if $^O eq 'MSWin32' or $^O =~ /cygwin/i;
+
+### options
+$::opt_help=0;
+$::opt_debug=0;
+$::opt_compress=1;
+$::opt_gs=1;
+$::opt_hires=0;
+$::opt_exact=0;
+$::opt_filter=0;
+$::opt_outfile="";
+$::opt_below=0;
+
+### usage
+my @bool = ("false", "true");
+my $usage = <<"END_OF_USAGE";
+${title}Syntax: $program [options] <eps file>
+Options:
+ --help: print usage
+ --outfile=<file>: write result to <file>
+ --(no)filter: read standard input (default: $bool[$::opt_filter])
+ --(no)gs: run Ghostscript to create PDF (default: $bool[$::opt_gs])
+ --(no)compress: use compression (default: $bool[$::opt_compress])
+ --(no)hires: scan HiResBoundingBox (default: $bool[$::opt_hires])
+ --(no)exact: scan ExactBoundingBox (default: $bool[$::opt_exact])
+ --(no)debug: debug informations (default: $bool[$::opt_debug])
+ --(no)below: allow below baseline (default: $bool[$::opt_below])
+Examples for producing 'test.pdf':
+ * $program test.eps
+ * produce postscript | $program --filter >test.pdf
+ * produce postscript | $program -f -d -o=test.pdf
+Example: look for HiResBoundingBox and produce corrected PostScript:
+ * $program -d --nogs -hires test.ps>testcorr.ps
+END_OF_USAGE
+
+### process options
+use Getopt::Long;
+GetOptions (
+ "help!",
+ "debug!",
+ "filter!",
+ "compress!",
+ "gs!",
+ "hires!",
+ "below!",
+ "exact!",
+ "outfile=s",
+) or die $usage;
+
+### help functions
+sub debug {
+ print STDERR "* @_\n" if $::opt_debug;
+}
+sub warning {
+ print STDERR "==> Warning: @_!\n";
+}
+sub error {
+ die "$title!!! Error: @_!\n";
+}
+sub errorUsage {
+ die "$usage\n!!! Error: @_!\n";
+}
+
+### option help
+die $usage if $::opt_help;
+
+### get input filename
+my $InputFilename = "";
+if ($::opt_filter) {
+ @ARGV == 0 or
+ errorUsage "Input file cannot be used with filter option";
+ $InputFilename = "-";
+ debug "Input file: standard input";
+} else {
+ @ARGV > 0 or errorUsage "Input filename missing";
+ @ARGV < 2 or errorUsage "Unknown option or too many input files";
+ $InputFilename = $ARGV[0];
+ if ($ARGV[0] eq '-') {
+ $::opt_filter=1;
+ debug "Input file: standard input";
+ } else {
+ -f $InputFilename or error "'$InputFilename' does not exist";
+ debug "Input filename:", $InputFilename;
+ }
+}
+
+### option compress
+my $GSOPTS;
+$GSOPTS = "-dUseFlateCompression=".($::opt_compress?"true":"false")." ";
+# $GSOPTS.=" -r72 -g99999x99999 ";
+$GSOPTS.=" -r72 -sPAPERSIZE=a4 "; # default
+$GSOPTS.=" -dCompatibilityLevel=1.2";
+
+### option BoundingBox types
+#**** pts ****
+# scan all of them and find the best
+{ my $BBprint = "%%BoundingBox:";
+ $BBprint = "%%HiResBoundingBox:" if $::opt_hires;
+ $BBprint = "%%ExactBoundingBox:" if $::opt_exact;
+ debug "strongest BoundingBox comment:", $BBprint;
+}
+my $BBregex='%%(Hi[Rr]es|Exact|)BoundingBox:';
+
+### option outfile
+my $OutputFilename = $::opt_outfile;
+if ($OutputFilename eq "") {
+ if ($::opt_gs) {
+ $OutputFilename = $InputFilename;
+ if (!$::opt_filter) {
+ $OutputFilename =~ s/\.[^\.]*$//;
+ $OutputFilename .= ".pdf";
+ }
+ }
+ else {
+ $OutputFilename = "-"; # standard output
+ }
+}
+if ($::opt_filter) {
+ debug "Output file: standard output";
+}
+else {
+ debug "Output filename:", $OutputFilename;
+}
+
+### option gs
+if ($::opt_gs) {
+ debug "Ghostscript command:", $GS;
+ debug "Compression:", ($::opt_compress) ? "on" : "off";
+}
+
+### open input file
+if ($::opt_filter) {
+ open(IN, "<&STDIN") or error "Cannot open standard input";
+} else {
+ open(IN,"< $InputFilename") or error "Cannot open '$InputFilename'";
+}
+binmode IN;
+
+
+#**** pts ****
+sub read_error() { error "read $InputFilename: $!" }
+my $bytes_left=-1;
+#** @param $_[0] number of bytes to read, or undef to read a line
+#** @return the string read
+sub readIN(;$) {
+ my $S;
+ return "" if $bytes_left==0;
+ ## print STDERR "READ\n";
+ if (defined $_[0]) { read_error if 0>read IN, $S, $_[0] }
+ else {
+ $S=<IN>;
+ read_error if !defined($S) and $!;
+ $S="" if !defined $S;
+ }
+ if ($bytes_left<0) { # unlimited
+ } elsif (length($S)>=$bytes_left) {
+ $S=substr($S, 0, $bytes_left);
+ $bytes_left=0;
+ } else { $bytes_left-=length($S) }
+ $S
+}
+
+### scan first line, check for DOS eps (and remove DOS headers)
+#**** pts ****
+my $header="";
+$_="";
+{ my $S;
+ read_error if 0>read IN, $S, 1;
+ error "$InputFilename: empty file" if 0==length($S);
+ if ($S eq "\305") { # DOS EPSF header
+ read_error if 29>read IN, $S, 29, 1;
+ my ($eheader,$ps_ofs,$ps_len,$wmf_ofs,$wmf_len,$tif_ofs,$tif_len,$checksum)=
+ unpack"A4VVVVVVv", $S;
+ error "$InputFilename: bad DOS EPS" if $eheader ne "\305\320\323\306" or $ps_ofs<30;
+ my($ps_end, $wmf_end, $tif_end)=($ps_ofs+$ps_len, $wmf_ofs+$wmf_len, $tif_ofs+$tif_len);
+ $ps_ofs-=30;
+ if (!seek IN, $ps_ofs, 1) {
+ while ($ps_ofs>4096) { $ps_ofs-=4096; readIN 4096 }
+ read_in $ps_ofs if $ps_ofs>0;
+ }
+ $bytes_left=($ps_end>$wmf_end and $ps_end>$tif_end) ? -1 : $ps_len;
+ $S=readIN(1);
+ }
+ if ($S eq '%') {
+ $S.=readIN;
+ error "$InputFilename: won't read a PDF file" if substr($S,0,4)eq'%PDF';
+ error "$InputFilename: EPS DSC must be %!PS-Adobe" if substr($S,0,4)ne'%!PS';
+ # ^^^ Dat: mpost outputs "%!PS\n"
+ } else {
+ warning "$InputFilename: no PS ADSC header, BoundingBox not found\n"
+ }
+ $header=$S;
+}
+
+### open output file
+if ($::opt_gs) {
+ my $fn=$OutputFilename;
+ $fn=~s@'@\\'@g if $quote eq "'";
+ my $pipe = "$GS -q -dBATCH -sDEVICE=pdfwrite $GSOPTS " .
+ "-sOutputFile=$quote$OutputFilename$quote -";
+ debug "Ghostscript pipe:", $pipe;
+ open(OUT,"|$pipe") or error "Cannot open Ghostscript for piped input";
+} else {
+ open(OUT,"> $OutputFilename") or error "Cannot write '$OutputFilename";
+}
+die unless binmode OUT;
+
+### variables and pattern for BoundingBox search
+my $bbxpatt = '[0-9eE\.\-]';
+ # protect backslashes: "\\" gets '\'
+my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)";
+
+#** @return arg rounded down to int
+sub floor($) {
+ # Dat: Perl int() rounds towards zero
+ $_[0] < 0 ? -int(-$_[0]) : int($_[0])
+}
+
+#** @return arg rounded up to int
+sub ceil($) {
+ $_[0] > 0 ? -int(-$_[0]) : int($_[0])
+}
+
+my ($xoffset, $yoffset) = (0, 0);
+my $do_translate=0;
+#** @return PostScript code to be printed after the header
+sub CorrectBoundingBox($$$$) {
+ my ($llx, $lly, $urx, $ury) = @_;
+ debug "Old BoundingBox:", $llx, $lly, $urx, $ury;
+ my ($width, $height) = ($urx - $llx, $ury - $lly);
+ ($xoffset, $yoffset) = (-$llx, -$lly);
+ # Dat: it is inherently impossible to tell GS that it shouldn't
+ # recompress the images already compressed in the EPS file, but keep
+ # them in their original, compressed form. So we rather instruct GS to
+ # recompress
+ my $pagedevice2set="
+/AutoRotatePages /None
+/CompatibilityLevel 1.2
+/UseFlateCompression true
+/AutoPositionEPSFiles false
+/AutoFilterGrayImages false
+/ConvertImagesToIndexed false
+/DownsampleMonoImages false
+/DownsampleGrayImages false
+/DownsampleColorImages false
+/AutoFilterColorImages false
+/EncodeMonoImages true
+/EncodeGrayImages true
+/EncodeColorImages true
+/AntiAliasMonoImages false
+/AntiAliasGrayImages false
+/AntiAliasColorImages false\n";
+
+ $::opt_below=0 if $lly>=0;
+ ($llx,$lly,$urx,$ury)=(0,0,$urx-$llx,$ury-$lly) if !$::opt_below;
+ my $bbx="%%BoundingBox: ".floor($llx)." ".floor($lly)." ".
+ ceil ($urx)." ".ceil ($ury)."\n".
+ "%%HiResBoundingBox: $llx $lly $urx $ury\n".
+ "%%ExactBoundingBox: $llx $lly $urx $ury\n%%EndComments\n";
+ if ($::opt_below) { #**** pts ****
+ # vvv we output a second /MediaBox here, and we'll remove the first one
+ # (written by GS) later
+ return "$bbx<< /PageSize [$width $height] $pagedevice2set >> setpagedevice
+mark /MediaBox [$llx $lly $urx $ury] /PAGE pdfmark
+mark /CropBox [$llx $lly $urx $ury] /PAGE pdfmark\n";
+ }
+ debug "New BoundingBox: 0 0", $width, $height;
+ debug "Offset:", $xoffset, $yoffset;
+ if ($xoffset==0 and $yoffset==0) {
+ return "$bbx<< /PageSize [$width $height] $pagedevice2set >> setpagedevice
+mark /CropBox [0 0 $width $height] /PAGE pdfmark\n"
+ }
+ $xoffset=0 if $xoffset==0; # get rid of `-0'
+ $yoffset=0 if $yoffset==0; # get rid of `-0'
+ $do_translate=1;
+ "$bbx<< /PageSize [$width $height] $pagedevice2set >> setpagedevice
+mark /CropBox [0 0 $width $height] /PAGE pdfmark
+gsave $xoffset $yoffset translate\n"
+}
+
+### scan header
+if (1<length($header)) {
+ my($llx,$lly,$urx,$ury);
+ my($bbtype)='-'; # None
+ debug "Scanning header for BoundingBox";
+ $header=~s@\r\n?\Z(?!\n)@@;
+ { my $headEPSF="EPSF-3.0";
+ my $headPS="PS-Adobe-3.0";
+ $headEPSF=$1 if $header=~s/\s+(EPSF-[.\d]+)$//;
+ $headPS=$1 if $header=~s/(PS-Adobe-[.\d+])$//;
+ print OUT "%!$headPS $headEPSF\n";
+ }
+ my $BBCorrected="";
+ my $do_atend=0;
+ my $had_pages=0;
+ my $doing_atend=0;
+ my $saved_pos;
+ my $saved_bytes_left;
+ read_again: while (length($_=readIN)) {
+ ## print STDERR "(($_))\n";
+ ### end of header
+ if (!$doing_atend) {
+ if (/^%%EndComments/i) { last }
+ if (substr($_,0,2)ne'%%' or substr($_,0,5)eq'%%End') { $BBCorrected=$_; last }
+ }
+
+ ### BoundingBox with values
+ if (/^$BBregex$BBValues/oi) {
+ if ($bbtype eq '-'
+ or $::opt_hires and $1 eq 'H'
+ or $::opt_exact and $1 eq 'E'
+ or $::opt_hires and $1 eq 'E' and $bbtype ne 'H'
+ or $::opt_exact and $1 eq 'H' and $bbtype ne 'E'
+ ) {
+ ($bbtype,$llx,$lly,$urx,$ury)=($1,$2+0,$3+0,$4+0,$5+0);
+ }
+ } elsif (/^$BBregex\s*\(atend\)/oi) {
+ ### BoundingBox with (atend)
+ debug "BoundingBox $1 (atend)";
+ if ($::opt_filter) {
+ warning "Cannot look for BoundingBox in the trailer",
+ "with option --filter";
+ } else { $do_atend=1 }
+ } elsif ($doing_atend) {
+ } elsif (/^%%Pages:/) {
+ print OUT; $had_pages=1;
+ } else { print OUT }
+ }
+ if ($doing_atend) { # already read (atend); restore file position
+ seek(IN, $saved_pos, 0) or error "Cannot go back to line `: (atend)'";
+ $bytes_left=$saved_bytes_left;
+ } elsif ($do_atend) { # seek to near EOF and try again
+ error "Cannot leave line `: (atend)'" if ($saved_pos=tell IN)<0;
+ $saved_bytes_left=$bytes_left;
+ # vvv get the very last *BoundingBox entry from the last 4096 bytes
+ if ($bytes_left>4096) {
+ die unless seek(IN, $bytes_left-4096, 1);
+ $bytes_left=4096;
+ } elsif ($bytes_left<0) {
+ die unless seek(IN, -4096, 2);
+ }
+ $doing_atend=1; goto read_again;
+ }
+ print OUT "%%Pages: 1\n" if !$had_pages;
+ if ($bbtype ne'-') { print OUT CorrectBoundingBox $llx, $lly, $urx, $ury }
+ else { warning "BoundingBox not found"; print OUT "%%EndComments\n" }
+ print OUT $BBCorrected;
+}
+
+### print rest of file
+print OUT while length($_=readIN 4096);
+
+### close files
+error "running gs" unless close(IN);
+# ^^^ SUXX: gs always exit(0), if exists
+print OUT "\ngrestore\n" if $do_translate;
+close(OUT);
+
+if ($::opt_below and $::opt_gs) {
+ ### ****pts**** remove incorrect /MediaBox produced by gs
+ die unless open F, "> $OutputFilename.tgs"; # Imp: in temp dir
+ die unless print F '
+ % this is temporary gs command file created by epstopdf
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ FN (r) file pdfopen begin
+ % vvv keep file offsets, because `pdffindpageref` overrides it with contents
+ /OFT Objects 0 get dup length array copy def
+ % vvv Dat: the generation number is assumed to be 0
+ % vvv Dat: modifies Objects[0]
+ 1 pdffindpageref 0 get
+ Objects 0 OFT put
+ readxrefentry ===
+ currentdict pdfclose end end end
+ ';
+ die unless close F;
+
+ my $offset=`$GS -dNODISPLAY -dSAFER -dBATCH -sFN=$quote$OutputFilename$quote -q $quote$OutputFilename.tgs$quote`;
+ chomp $offset;
+ unlink "$OutputFilename.tgs";
+ die unless $offset=~/\A\d+\Z(?!\n)/;
+ # Dat: now $offsets is a file position in $OutputFilename containing our /Page object
+
+ die unless open F, "+< $OutputFilename";
+ die unless binmode F;
+ die unless seek F, $offset+=0, 0;
+ my $pageobj;
+ die unless 32<read F, $pageobj, 4096;
+ if ($pageobj=~m@\A(.*?/Type\s*/Page\b.*?)(/MediaBox\s*\[[^\]]*\]).*?/MediaBox@s) {
+ substr($pageobj, length($1), length($2))=" "x length($2);
+ # ^^^ overwrite first buggy /MediaBox definition with spaces
+ die unless seek F, $offset, 0;
+ die unless print F $pageobj;
+ debug "Below correction ($xoffset $yoffset) applied.";
+ } else {
+ debug "warning: double /MediaBox not found.";
+ }
+ die unless close F;
+}
+
+debug "Ready.";
diff --git a/macros/latex/exptl/graphicp/f2cletter.eps b/macros/latex/exptl/graphicp/f2cletter.eps
new file mode 100644
index 0000000000..dad46ba7df
--- /dev/null
+++ b/macros/latex/exptl/graphicp/f2cletter.eps
@@ -0,0 +1,35 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Pages: 1
+%%BoundingBox: 3 -10 23 20
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%EndComments
+%%Page: 1 1
+save 26 dict begin
+3 -10 translate
+/x{load def}def/E/def x/A/currentfile x/c/exch x/i/ifelse x/S 32 E/D 0 E/C 0 E
+/;/getinterval x/p/putinterval x/b/bitshift x/+/add x/O/pop x/*/mul x/u/dup x
+/-/sub x/"/string x/?/length x/y/copy x{
+{mark A/ASCII85Decode filter/T exch def}stopped
+/B exch def cleartomark B{{
+/d{{27 S ge{exit}if A read not{511}if u 122 eq{/S 27 E/D 0 E/C 0 E}{u 117 gt{
+A read{O}if/S 54 S - E}{u 33 ge{S 32 eq{u/C c E/D -1670420001 E}{u 117 -{1 85
+7225 614125}S 28 - get * D +/D c E}i/S S 1 - E}if}i}i O}loop S 22 eq{511}{C
+1868977 * D + S 24 and neg b 23 S lt{C 3 * +}if 255 and/S S 3 eq{32}{S 7 mod 3
+eq{22}{S 8 -}i}i E}i}E
+/B 90 " E/L 128 " E/Ex()E
+20 30 1[1 0 0 -1 0 30]{B Ex{2 y ? c ? ge{2 y c ? 0 c ; 2 index y ? 2 y c
+? c - ;/Ex c E O exit}{2 y c y O ? 2 y c ? c - ;}i d u 128 le{L c 0 c 1 + ; u ?
+1 - 0 c 1 c{d 3 y put O O}for}{L c d c 257 c - 3 y 1 - -1 0{3 y c put O}for O O
+c O 0 c ;}i}loop B}image
+d O d O}bind exec}{
+/F T/RunLengthDecode filter def
+20 30 1[1 0 0 -1 0 30]F image F closefile T closefile}i}
+%%BeginData:
+exec
+2?<4HJbTeor%Q%d0Z3fBkPfG`IW4I6E9E7#kN6aA!-$irE9HA&kDjNE5&f\6E5VT-JbTcVqu?p#cg^
+^Bn-SS3nFAC)noO<l%J0)bkOA6OnGEgds$-"'~>
+%%EndData
+end restore showpage
+%%Trailer
+%%EOF
diff --git a/macros/latex/exptl/graphicp/f2cletter.pdf b/macros/latex/exptl/graphicp/f2cletter.pdf
new file mode 100644
index 0000000000..267f853dfa
--- /dev/null
+++ b/macros/latex/exptl/graphicp/f2cletter.pdf
Binary files differ
diff --git a/macros/latex/exptl/graphicp/f2mletter.eps b/macros/latex/exptl/graphicp/f2mletter.eps
new file mode 100644
index 0000000000..3310d86cf4
--- /dev/null
+++ b/macros/latex/exptl/graphicp/f2mletter.eps
@@ -0,0 +1,23 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Pages: 1
+%%BoundingBox: -8 5 12 35
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%Page: 1 1
+save 9 dict begin
+-8 5 translate
+{/T currentfile/ASCII85Decode filter def/DeviceGray setcolorspace
+/F T/LZWDecode filter def
+<</ImageType 1/Width 20/Height 30/BitsPerComponent
+1/ImageMatrix[1 0 0 -1 0 30]/Decode
+[0 1]/DataSource F>> image
+ F closefile T closefile}
+%%BeginData:
+exec
+J,gVj":O-1_gW";&?&6mr,?_LU''V23[!QE2ujPXgR^+^M`KdZ'8.tF&-,=6:\K.On7Qu."RcSWc=h
+9D4Pju]bFVrDGWu5t#Pe8V!<~>
+%%EndData
+end restore showpage
+%%Trailer
+%%EOF
diff --git a/macros/latex/exptl/graphicp/f2mletter.pdf b/macros/latex/exptl/graphicp/f2mletter.pdf
new file mode 100644
index 0000000000..4a78a6c166
--- /dev/null
+++ b/macros/latex/exptl/graphicp/f2mletter.pdf
Binary files differ
diff --git a/macros/latex/exptl/graphicp/ficletter.jpg b/macros/latex/exptl/graphicp/ficletter.jpg
new file mode 100644
index 0000000000..958f35809d
--- /dev/null
+++ b/macros/latex/exptl/graphicp/ficletter.jpg
Binary files differ
diff --git a/macros/latex/exptl/graphicp/ficletter.pbm b/macros/latex/exptl/graphicp/ficletter.pbm
new file mode 100644
index 0000000000..13db3eddff
--- /dev/null
+++ b/macros/latex/exptl/graphicp/ficletter.pbm
Binary files differ
diff --git a/macros/latex/exptl/graphicp/ficletter.png b/macros/latex/exptl/graphicp/ficletter.png
new file mode 100644
index 0000000000..6a803b1c91
--- /dev/null
+++ b/macros/latex/exptl/graphicp/ficletter.png
Binary files differ
diff --git a/macros/latex/exptl/graphicp/files b/macros/latex/exptl/graphicp/files
new file mode 100644
index 0000000000..1423b1331b
--- /dev/null
+++ b/macros/latex/exptl/graphicp/files
@@ -0,0 +1,22 @@
+files
+div16b.sty
+graphicp.sty
+keyvalx.sty
+laemu.sty
+pts_img.sty
+pts_bbox.sty
+descend.mp
+descend.1
+laltest.tex
+ficletter.pbm
+f2cletter.eps
+f2cletter.pdf
+f2mletter.eps
+f2mletter.pdf
+ficletter.png
+ficletter.jpg
+laxtest.bbx
+epstopdf
+img_bbox.pl
+pdfboxes.pl
+graphicpdoc.tex
diff --git a/macros/latex/exptl/graphicp/graphicp.sty b/macros/latex/exptl/graphicp/graphicp.sty
new file mode 100644
index 0000000000..001aaad978
--- /dev/null
+++ b/macros/latex/exptl/graphicp/graphicp.sty
@@ -0,0 +1,407 @@
+%
+% graphicp.tex -- a graphics.sty replacement for LaTeX and laemu.sty
+% by pts@fazekas.hu at Fri Jan 24 13:26:22 CET 2003
+%
+% GraphicP is a system that provides an easy, fast and reliable method for
+% including external images into LaTeX and plain TeX documents. The
+% \includegraphics macro of GraphicP is a drop-in replacement of the same
+% command of LaTeX graphics.sty and graphicx.sty, but with many enhancements.
+% Input images are ususally in EPS or PDF format. Drivers for xdvi, dvips,
+% pdftex and dvipdfm are included. Perl scripts are provided for
+% faster bounding box manipulations.
+%
+% This is version 0.12.
+%
+% Features over LaTeX `\usepackage{graphicx}':
+%
+% -- both plain TeX and LaTeX support
+% -- specified width=... and height=... are strictly enforced, without rounding
+% -- image scaling calculations are much more accurate
+% -- works with `dvips -E' bounding-box calculations, even with buggy dvips
+% 5.86e
+% -- doesn't have to open the .eps file for reading the bbox
+% -- xdvi doesn't forcibly crop (clip) the image to the bbox
+% -- Below feature: allows the image descend below the baseline
+% (supports depth, not only width and height)
+% -- drop dependency on Perl, parse Adobe DSC comments in EPS files
+% -- non-standard, quick, DSC-like parsing for special PDF files
+% -- an enhanced `epstopdf' utility
+% -- the `img_bbox.pl' utility
+% -- the `pdfboxes.pl' utility
+% -- voluntary clipping (cropping)
+% -- all 8 mirror and rotate transformation (must be a multipe of 90 degrees)
+% -- does not rely on the filename to determine the FileFormat
+% -- embeds each image file only once with pdfTeX and dvipdfm
+% -- imtrix: unified PSTricks/PSFrag support for EPS and PDF
+%
+% Q1. Can I use the Below feaure with dvipdfm+EPS?
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+% Use the epstopdf untility shipped with graphicP instead of the default one
+% shipped with teTeX.
+% To do it, please update /etc/texmf/dvipdfm/config first with the line:
+%
+% D "zcat -f %i | ./epstopdf --below --hires --outfile=%o -"
+%
+% Substitute the `./epstopdf' with the real, absolute path to our epstopdf.
+%
+% Don't forget to specify \includegraphics[...,below]{...}
+%
+% Which characters can I have in the filename?
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+% For dvips, xdvi and dvipdfm:
+% -- You must avoid the double quote ("), because it is the filename terminator
+% of the PSFile \special.
+% For pdftex:
+% -- You must also avoid the dollar sign
+% ($), because kpsewhich interprets it as a variable substitution, and
+% pdftex calls KPSE to look up image file names.
+% For old pdftex 0.12 shipped with Debian Slink (pdftex >=0.14 is OK):
+% -- You must avoid space, because stupid \pdfimage cannot parse it.
+% For xdvi and dvipdfm:
+% -- You must also avoid the
+% backslash (\), because xdvi removes it from the filename (dvips doesn't).
+%
+% All other characters can be used, but you have to quote some of them to
+% avoid wrong category codes and/or expansion:
+%
+% All characters [\000-\037\177-\377] should be input as hex: \expandafter\@secondoftwo\string\^^HL
+% All characters [\040-\176] can be written as-is, except for:
+% $ is OK
+% & is OK
+% _ is OK
+% a space should be input as '\iftrue\space\fi '; # won't collapse two spaces into one
+% \ { } % # ^ ~ ` " should be input as \expandafter\@secondoftwo\string\\ etc.
+%
+% Note that `\noexpand"' is not good enough for `"', because `\noexpand"e'
+% would expand to an accented letter if expanded twice under
+% \usepackage[german]{babel}.
+%
+% I've verified these characters on the file name
+%
+% ugly_"$&_ \}%#^^aáéb{%#^~`
+%
+% which was input as
+%
+% ugly_"$&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`
+%
+% Can I embed MetaPost output?
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+% Yes, \includegraphics{ajobname.1} works fine with all drivers. (ajobname.1
+% is the output file of MetaPost when ajobname.mp contains `beginfig(1)'.)
+%
+% How do I specify an output filename for MetaPost?
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+% Basicly you invoke MetaPost as `mpost ajobname.mp', where ajobname.mp is
+% the MetaPost source file. MetaPost writes the log file ajobname.log. If
+% you say `beginfig(42)' in ajobname.mp, the output EPS file `ajobname.42'
+% will be created. If you say `beginfig(-1)' (or any negative number),
+% `ajobname.ps' will be created. You cannot force any other filename --
+% these are hard-wired to the MetaPost executable.
+%
+% How do I make MetaPost emit a HiResBoundingBox?
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+% Just add
+%
+% extra_endfig := extra_endfig
+% & "special ("
+% & ditto & "%%HiResBoundingBox: " & ditto
+% & "&decimal xpart llcorner currentpicture &" & ditto & " " & ditto
+% & "&decimal ypart llcorner currentpicture &" & ditto & " " & ditto
+% & "&decimal xpart urcorner currentpicture &" & ditto & " " & ditto
+% & "&decimal ypart urcorner currentpicture );";
+%
+% to the beginning of ajobname.mp. context/mp-tool.mp does this already.
+% You cannot force it before %%EndProlog or %%Page:. This is an inherent
+% limitation of the MetaPost executable.
+%
+% ---
+%
+% Dat: dvipdfm crops EPS images below y==0; it doesn't crop PDF images. See
+% FAQ answer Q1 to overcome it.
+% Dat: works with `dvips', `dvipdfm', `xdvi' and `pdftex'
+% Dat: works with pdftex 3.14159-0.12r (Slink), 0.14 (Potato), 1.00a (Woody)
+% OK : use bbox cache by img_bbox.pl
+% OK : verify slink -- potato -- woody
+% OK : sam2p Below feature
+% OK : verify and document various filename chars
+% OK : bbox read directly from image
+% OK : respect best of BoundingBox, HiResBoundingBox and ExactBoundingBox
+% OK : pdfboxes.pl: Perl script to inject PDF bbox near beginning
+% OK : guess extension if unspecified, automatic filename.ext
+% OK : pts_bbox.sty handles PDF, EPS, MPS
+% OK : pts_bbox.sty handles TIFF, JPEG and PNG -- only with pdfTeX
+% OK : pts_img.sty handles JPEG and PNG for pdfTeX and dvipdfm, TIFF for pdfTeX
+% OK : MetaPost EPS is recognised properly by the pdftex driver (dvipdfm already did it right)
+% OK : warning if FileFormat not supported by driver
+% OK : \usepackage[nopdftexmpost]{graphicp} disables loading of ConTeXt supp-pdf.tex
+% OK : \usepackage[forceunknown]{graphicp}. If an unknown FileFormat is not
+% forced, an \errmessage is displayed, and the reference point is moved
+% without drawing the image.
+% OK : \includegraphics[raise=20]{...} or lower=-20 specifies raising in image
+% dimensions (pixels)
+% OK : \includegraphics[lower=0] disables autobelow
+% OK : needed sam2p "Q endstream", because we say \pdfliteral{ Q}, so
+% the embedding bug pdfTeX Version 3.14159-0.12r won't manifest.
+% In sam2p-0.42 /Length+=1 on the content stream fixed the problem.
+% OK : dvipdfm usexobj
+% OK : sam2p 0.43 pre-/MediaBox feature (object reordering)
+% OK : move reference point for \convertMPtoPDF in Debian Slink
+% OK : below option is not default since Sun Feb 9 22:27:23 CET 2003
+% OK : proven not to work: PDF XObject on old pdftexs (Potato, Slink)
+% OK : frame, namedframe, invisible and blackbox drivers, only show the bboxes and the filename
+% Imp: documentation .tex
+% Imp: use pdfTeX to read the bounding box (non-negative below feature)
+% Imp: better \usepackage{graphicx} compatibility: clip=, bb=, totalheight=,
+% keepaspectratio=, type=, ext=, read=, viewport=, clip=, `gunzip
+% Imp: allow user select from BoundingBox, HiResBoundingBox and ExactBoundingBox
+% Imp: add clipping support
+% Imp: add rotation + mirroring support
+% Imp: advanced \textascii for driver=namedframe
+% Imp: imtrix ?
+
+\expandafter\ifx\csname ifLaTeX\endcsname\relax\input laemu.sty\relax\fi%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{graphicp}[2003/01/24 v0.0 graphics.sty replacement]
+\RequirePackage{keyvalx}
+\RequirePackage{pts_bbox}
+
+%\errmessage{O(\csname opt@graphicp.sty\endcsname)}%
+%\errmessage{D(\@declaredoptions)}%
+%\errmessage{C(\@curroptions)}%
+%\errmessage{C(\@unprocessedoptions)}%
+%\expandafter\def\csname opt@graphicp.sty\endcsname{}%
+%\def\@declaredoptions{}%
+%\expandafter\let\csname ds@alma\endcsname\relax%
+%\show\@unprocessedoptions
+%\let\@unprocessedoptions\relax
+%\AtEndOfPackage{\def\@unprocessedoptions{}}%
+
+%** \def's #1 to 1 if #2 contains a true boolean value; 0 otherwise. A true
+%** value is a value beginning with `t', `y' or `1'.
+\def\@@gp@boolpon#1#2{%
+ \expandafter\@@gp@boolpon@low#2f\\#1%
+ %\message{ponated(#1)}%
+}%
+\def\@@gp@boolpon@low#1#2\\#3{%
+ \edef#3{%
+ \if\noexpand#1t1% true
+ \else\if\noexpand#1y1% yes
+ \else\if\noexpand#111% 1
+ \else0\fi\fi\fi%
+ }%
+}%
+%** Similar to \@@gp@boolpon, but inverts the condition
+\def\@@gp@boolneg#1#2{%
+ \@@gp@boolpon{#1}{#2}%
+ \edef#1{\if#101\else0\fi}%
+}%
+
+%\LaemuProcessOptions\errmessage
+\define@key{graphicp}{driver}{\edef\@@gp@driver{#1}}%
+\define@key{graphicp}{pdftex}{\edef\@@gp@driver{pdftex}}%
+\define@key{graphicp}{dvi}{\edef\@@gp@driver{dvi}}%
+\define@key{graphicp}{dvips}{\edef\@@gp@driver{dvips}}%
+\define@key{graphicp}{dvipdfm}{\edef\@@gp@driver{dvipdfm}}%
+\define@key{graphicp}{pdftexmpost}[true]{\@@gp@boolpon\@@gp@pdftexmpost{#1}}%
+\define@key{graphicp}{nopdftexmpost}[true]{\@@gp@boolneg\@@gp@pdftexmpost{#1}}%
+%\define@key{graphicp}{forceunknown}[true]{\@@gp@boolpon\@@gp@forceunknown{#1}}%
+\define@key{graphicp}{forceunknown}[2]{\def\@@gp@forceunknown{#1}}%
+\define@key{graphicp}{forceunknown}[true]{\@@gp@boolneg\@@gp@forceunknown{#1}}%
+\def\@@gp@pdftexmpost{1}%
+\def\@@gp@driver{}%
+\def\@@gp@forceunknown{0}%
+\LaemuProcessOptions{\setkeys{graphicp}}%
+
+\if0\@@gp@pdftexmpost \def\graphicPnopdftexmpost{}\fi%
+\if1\@@gp@forceunknown \def\@@img@forceunknown{1}\fi%
+\let\@@gp@pdftexmpost\relax%
+\RequirePackage{pts_img}% uses \graphicPnopdftexmpost
+\@@img@setdriver{\@@gp@driver}%
+\let\@@gp@driver\relax%
+%\let\@@gp@forceunknown\relax%
+
+% --- Mon Feb 3 18:12:46 CET 2003
+
+%** Expands to the filename extension of #1, e.g 'ePs' for `a.b/cd.ePs'
+\def\@@gp@getext#1{%
+ \@@gp@getexta#1/\@empty%
+}%
+
+\def\@@gp@getexta#1/#2{%
+ \ifx#2\@empty% \@empty itself or a macro with empty expansion
+ \@@gp@getextb#1.\@empty%
+ %\expandafter\@gobble% needed unless \@empty is the delimiter
+ \else%
+ \expandafter\@@gp@getexta
+ \fi%
+ #2%
+}%
+\def\@@gp@getextb#1.#2{%
+ \ifx#2\@empty%
+ % Extension not found, expand to nothing
+ %\expandafter\@gobble% needed unless \@empty is the delimiter
+ \else%
+ %:#2%\@@gp@getextc#2\\%
+ \expandafter\@@gp@getextc%
+ \fi%
+ #2%
+}%
+\def\@@gp@getextc#1.#2{%
+ \ifx#2\@empty%
+ #1% found extension
+ %\expandafter\@gobble% needed unless \@empty is the delimiter
+ \else%
+ \expandafter\@@gp@getextc
+ \fi%
+ #2%
+}%
+
+%** Adds extension #1 to filename #2, unless #2 already has an extension.
+%** Example: `\@@gp@addext{eps}{my.document/myfigure}' expands to
+%** `my.document/myfigure.eps'
+\def\@@gp@addext#1#2{%
+ #2\if.\@@gp@getext{#2}..#1\fi%
+ % ^^^ we use the fact that the first unexpandable token of the expansion of
+ % \@@gp@getext is either nonexistent, or it is a char other than `.'
+}
+
+% ---
+
+%** Doesn't work if the 1st token of #1 is expandable or it is a control
+%** sequence.
+%\def\@@gp@isempty#1{%
+% \if\noexpand\noexpand\noexpand#1\noexpand%
+% empty%
+% \else%
+% not%
+% \fi%
+%}%
+
+%** Expands #1 iff #2 is empty.
+%** @param #2 may not contain an extra (unbalanced) \else
+\def\@@gp@isempty#1#2{%
+ \@@gp@isemptyi{#1}#2\else\fi%
+}%
+%** Same as \@@gp@isempty{#2}{#1}
+\def\@@gp@isemptyr#1#2{%
+ \message{(\noexpand#1:#2)}%
+ \@@gp@isemptyi{#2}#1\else\fi%
+}%
+\def\@@gp@isemptyi#1#2{\iffalse#2#1}%
+
+% Regression test:
+%\message{g(\@@gp@getext{hello})}
+%%\tracingmacros=1
+%\message{g(\@@gp@getext{hel.lo/barna})}
+%\message{g(\@@gp@getext{hel.lo/you/barna.ePs})}
+%\message{g(\@@gp@getext{hel.lo/you/barna.ePs.gz})}
+%\message{e(\@@gp@isempty{empty}{})}%
+%\message{e(\@@gp@isempty{empty}{foo})}%
+%\message{e(\@@gp@isempty{empty}{,alma})}%
+%\message{e(\@@gp@isempty{empty}{\relax,korte})}%
+%\message{e(\@@gp@isempty{empty}{\iftrue\else\fi})}%
+%\message{a(\@@gp@addext{alma}{kor.te})}
+%\message{a(\@@gp@addext{alma}{korte})}
+%\message{a(\@@gp@addext{eps}{my.document/myfigure})}
+%\@@gp@addext{alma}{korte}
+
+% --- GraphicP implementation begins
+
+\def\@@gp@setbbox#1#2#3#4{%
+ %\message{bb:(#1)(#2)(#3)(#4).}%
+ \def\@@gp@llx{#1}%
+ \def\@@gp@lly{#2}%
+ \def\@@gp@urx{#3}%
+ \def\@@gp@ury{#4}%
+}%
+\def\@@gp@question{?}%
+\def\@@gp@PDF{PDF}%
+\def\@@gp@setfbbox#1#2#3#4#5{%
+ %\message{(ff=#1)(#2)(#3)(#4)(#5).}%
+ \def\@@gp@format{#2}% assign temporarily
+ \ifx\@@gp@format\@@gp@question\else
+ % ^^^ assign only other than `?', so \@@GetBBox can override @@gp@format
+ \def\@@gp@llx{#2}%
+ \def\@@gp@lly{#3}%
+ \def\@@gp@urx{#4}%
+ \def\@@gp@ury{#5}%
+ \fi%
+ \edef\@@gp@format{#1}% FileFormat
+}%
+
+%** Must be bbox={{0bp}{0bp}{72bp}{72bp}}
+\define@key{incgP}{bbox}{\@@gp@setbbox#1}%
+%** Must be fbbox={{TIFF}{0bp}{0bp}{72bp}{72bp}}
+\define@key{incgP}{fbbox}{\@@gp@setfbbox#1}%
+\define@key{incgP}{format}{\def\@@gp@format{#1}}%
+\define@key{incgP}{width}{\def\@@gp@width{#1}}%
+\define@key{incgP}{height}{\def\@@gp@height{#1}}%
+\define@key{incgP}{raise}{\def\@@gp@raise{#1}}%
+\define@key{incgP}{lower}{\def\@@gp@raise{-#1}}%
+\define@key{incgP}{below}[]{\def\@@gp@raise{-#1}}%
+\define@key{incgP}{clip}[true]{\csname if#1\endcsname\let\@@dp@clip1\else\let\@@dp@clip0\fi}%
+\define@key{incgP}{noclip}[true]{\csname if#1\endcsname\let\@@dp@clip0\else\let\@@dp@clip1\fi}%
+\define@key{incgP}{forceunknown}[2]{\def\@@gp@forceunknown{#1}}%
+
+\def\@@gp@checkbbox{%
+ \edef\@@gp@havebbox{%
+ \ifx\@@gp@llx\@@gp@question\else%
+ \ifx\@@gp@lly\@@gp@question\else%
+ \ifx\@@gp@urx\@@gp@question\else%
+ \ifx\@@gp@ury\@@gp@question\else%
+ 1\fi\fi\fi\fi%
+ }%
+}%
+
+\def\@@gp@runpdfboxes{\MessageBreak Run pdfboxes.pl to fix the file.}%
+
+\def\includegraphicP{\@ifnextchar[\@@gp@includegraphics{\@@gp@includegraphics[]}}%
+\let\includegraphics\includegraphicP
+\def\@@gp@includegraphics[#1]#2{%
+ % Imp: change space tokens to `\space' in the filename
+ \begingroup
+ %\def\@@gp@bbox{{invalid}{}{}{}}%
+ %\def\@@gp@raise{}% dimension to raise above the baseline -- or empty
+ \def\@@gp@raise{0bp}% \usepackage{graphicx} compatibility
+ \def\@@gp@llx{?}% source image bbox and size
+ \def\@@gp@lly{?}%
+ \def\@@gp@urx{?}%
+ \def\@@gp@ury{?}%
+ \def\@@gp@format{?}%
+ \def\@@gp@width{0pt}%
+ \def\@@gp@height{0pt}% desired target width+height
+ \def\@@gp@clip{0}%
+ %\def\space{\noexpand\space}%expandafter\string\csname space \endcsname}%
+ \chardef\space0 % \space will expand to `\space '
+ \edef\@@gp@filename{\@@gp@addext{\@@img@defext}{#2}}% add default extension
+ %\message{fn(\@@gp@filename)}%
+ \def\space{ }% change it back
+ \setkeys{incgP}{#1}%
+ \@@gp@checkbbox%
+ \ifx\@@gp@havebbox\@empty% bbox not specified as arg
+ \@@GetBBox\@@gp@setfbbox{\@@gp@filename}% load bbox from file
+ %\errmessage{z}%
+ \else%
+ \ifx\@@gp@format\@@gp@question%
+ \@@GetBBox\@@gp@setfbbox{\@@gp@filename}% determine FileFormat from file, possibly override with real bbox
+ \fi%
+ \fi%
+ \@@gp@checkbbox%
+ %\message{fn=(#2) havebbox=(\@@gp@havebbox) bbox=(\@@gp@llx)}%
+ \ifx\@@gp@havebbox\@empty% failed to determine bbox
+ \ifx\@@gp@format\@@gp@PDF \let\@@gp@err\@@gp@runpdfboxes
+ \else \let\@@gp@err\@empty\fi
+ \PackageError{graphicP}{Cannot get BoundingBox of image file `#2'\@@gp@err}\@ehc%
+ \@@gp@setbbox{0}{0}{72bp}{72bp}% fallback if the user continues
+ \fi%
+ %\expandafter\@@PutImage\@@gp@bbox%
+ \chardef\space0 % \space will expand to `\space '
+ \edef\@tempa{\noexpand\@@PutImage%
+ {\@@gp@raise}{\@@gp@forceunknown}.%
+ {{\@@gp@llx}{\@@gp@lly}{\@@gp@urx}{\@@gp@ury}}%
+ {\@@gp@width}{\@@gp@height}{\@@gp@clip}{\@@gp@filename}{\@@gp@format}}%
+ \def\space{ }% change it back
+ \expandafter\endgroup\@tempa % so \@@PutImage can change global variables
+}%
+
+%\zzzzzzzz
diff --git a/macros/latex/exptl/graphicp/graphicpdoc.pdf b/macros/latex/exptl/graphicp/graphicpdoc.pdf
new file mode 100644
index 0000000000..944635ed93
--- /dev/null
+++ b/macros/latex/exptl/graphicp/graphicpdoc.pdf
Binary files differ
diff --git a/macros/latex/exptl/graphicp/graphicpdoc.tex b/macros/latex/exptl/graphicp/graphicpdoc.tex
new file mode 100644
index 0000000000..86cc3b9135
--- /dev/null
+++ b/macros/latex/exptl/graphicp/graphicpdoc.tex
@@ -0,0 +1,146 @@
+%
+% graphicpdoc.tex: documentation of GraphicP, a LaTeX source file
+% by pts@fazekas.hu at Mon Feb 10 00:07:07 CET 2003
+%
+
+\documentclass[a4paper]{article}
+ \usepackage[latin2]{inputenc}
+ %\usepackage[magyar]{babel}% for testing the active `
+ \usepackage[english]{babel}
+ %\usepackage{ascii}
+ %\usepackage{pts_cs}
+ %\usepackage{t1enc}
+
+ \paperheight=297mm \paperwidth=210mm
+ \expandafter\ifx\csname pdfoutput\endcsname\relax%
+ \special{papersize=595bp,842bp}%
+ \else%
+ \pdfoutput=1%
+ \pdfcompresslevel=9%
+ \pdfpagewidth=595bp \pdfpageheight=842bp%
+ \pdfpageattr={/CropBox [0 0 595 842]}%
+ \fi%
+
+ \hoffset=2cm \voffset=2cm
+ \textheight=\paperheight \advance\textheight by -2\voffset
+ \textwidth =\paperwidth \advance\textwidth by -2\hoffset
+ \advance\hoffset by -1in
+ \advance\voffset by -1in
+ \topmargin=0cm%
+ \headheight=0cm%
+ \headsep=0cm%
+ \marginparsep=0cm%
+ \marginparwidth=0cm%
+ \oddsidemargin=0cm%
+ \evensidemargin=0cm% csak páratlan oldalak E twoside nélkül
+ \footskip=15pt% a sorszám basline-ja a szöveg alsó bl-jától
+ \relax%
+
+\def\product/{\textsf{GraphicP}}
+\def\tokenfbox#1{{\fboxrule=0.2pt \fboxsep=1pt \fbox{\textex{#1}}}}
+\def\aproduct#1{\textsf{#1}}
+\makeatletter
+%** Example: \bchar\\
+\def\bchar#1{\expandafter\@gobble\string#1}%
+
+\title{Documentation of \product/}
+\author{Szab\'o P\'eter\\\texttt{<pts@fazekas.hu>}}
+
+\begin{document}
+
+\makeatletter
+ \def\@listi{% \begin{document} után kell!
+ \leftmargin=\leftmargini%
+ \topsep=5pt plus3pt minus1pt%
+ %\partopsep=0pt%
+ \parsep=0.5pt plus0.5pt minus0.5pt%
+ \itemsep=3pt plus3pt minus1pt%
+ %\parsep=0pt \itemsep=0pt % works fine
+ }%
+
+\maketitle
+\begin{abstract}
+ This is the documentation of \product/, a system that provides an easy, fast and reliable method for
+ including external images into {\LaTeX} and plain {\TeX} documents. The
+ \texttt{\bchar\\includegraphics} macro of \product/ is a drop-in
+ replacement of the same
+ command of {\LaTeX} \texttt{graphics.sty} and \texttt{graphicx.sty}, but with
+ many enhancements.
+ Input images are ususally in EPS or PDF format. Drivers for \aproduct{xdvi},
+ \aproduct{dvips}, \aproduct{pdftex} and \aproduct{dvipdfm} are included.
+ Perl scripts are provided for
+ faster bounding box manipulations.
+\end{abstract}
+
+\section{Availability and usage}
+
+You can download \product/ from
+\texttt{http://www.inf.bme.hu/\textasciitilde pts/graphicp-latest.tar.gz}.
+
+Load \product/ with \texttt{\bchar\\usepackage\bchar\{graphicp\bchar\}}
+instead of
+\texttt{\bchar\\usepackage\bchar\{graphicx\bchar\}}. Use the
+\texttt{\bchar\\includegra\allowbreak phics} macro as usual, but beware of the
+differences.
+
+\section{Quick feature list}
+
+Features over {\LaTeX} \texttt{\bchar\\usepackage\bchar\{graphicx\bchar\}}:
+
+\begin{itemize}
+
+\item both plain TeX and LaTeX support
+\item specified width=... and height=... are strictly enforced, without rounding
+\item image scaling calculations are much more accurate
+\item works with \textit{dvips -E} bounding-box calculations, even with buggy dvips
+ 5.86e
+\item doesn't have to open the .eps file for reading the bbox
+\item xdvi doesn't forcibly crop (clip) the image to the bbox
+\item Below feature: allows the image descend below the baseline
+ (supports depth, not only width and height)
+\item drop dependency on Perl, parse Adobe DSC comments in EPS files
+\item non-standard, quick, DSC-like parsing for special PDF files
+\item an enhanced \aproduct{epstopdf} utility
+\item the \aproduct{img\textunderscore bbox.pl} utility
+\item the \aproduct{pdfboxes.pl} utility
+\item voluntary clipping (cropping)
+\item all 8 mirror and rotate transformation (must be a multipe of 90 degrees)
+\item does not rely on the filename to determine the FileFormat
+\item embeds each image file only once with pdfTeX and dvipdfm
+\item {}[long term plan] imtrix: unified PSTricks/PSFrag support for EPS and PDF
+
+\end{itemize}
+
+\section{Further reading}
+
+The full documentation hasn't been written yet. See the file
+\texttt{graphicp.sty} for more information.
+
+To see samples, try the following compilation procedures:
+
+\begin{verbatim}
+ tex laltest # or: latex laltest
+ xdvi laltest
+ dvips -o laltest.ps laltest
+ dvipdfm -v laltest
+ xpdf laltest.pdf
+\end{verbatim}
+
+\begin{verbatim}
+ pdftex laltest # or: pdflatex laltest
+ xpdf laltest.pdf
+\end{verbatim}
+
+\begin{verbatim}
+ latex '\def\graphicPdriver{dvips}\input laltest'
+ xdvi laltest
+ dvips -o laltest.ps laltest
+\end{verbatim}
+
+\begin{verbatim}
+ tex '\def\graphicPdriver{dvipdfm}\input laltest'
+ dvipdfm -v laltest
+ xpdf laltest.pdf
+\end{verbatim}
+
+\end{document}
diff --git a/macros/latex/exptl/graphicp/img_bbox.pl b/macros/latex/exptl/graphicp/img_bbox.pl
new file mode 100755
index 0000000000..12c1b951c7
--- /dev/null
+++ b/macros/latex/exptl/graphicp/img_bbox.pl
@@ -0,0 +1,2079 @@
+#! /bin/sh
+eval '(exit $?0)' && eval 'PERL_BADLANG=x;export PERL_BADLANG;: \
+;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;
+eval 'setenv PERL_BADLANG x;exec perl -x -S -- "$0" $argv:q;#'.q+
+#!perl -w
+package Htex::img_bbox; $0=~/(.*)/s;unshift@INC,'.';do($1);die$@if$@;__END__+if !1;
+# This Perl script was generated by JustLib2 at Sun Feb 9 23:57:24 2003.
+# Don't touch/remove any lines above; http://www.inf.bme.hu/~pts/justlib
+package just; BEGIN{$INC{'just.pm'}='just.pm'}
+BEGIN{ $just::VERSION=2 }
+sub end(){1}
+sub main(){}
+
+BEGIN{$ INC{'integer.pm'}='integer.pm'} {
+package integer;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+sub import { $^H |= 1 }
+sub unimport { $^H &= ~1 }
+just::end}
+
+BEGIN{$ INC{'strict.pm'}='strict.pm'} {
+package strict;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+require 5.002;
+sub bits {
+ (grep{'refs'eq$_}@_ && 2)|
+ (grep{'subs'eq$_}@_ && 0x200)|
+ (grep{'vars'eq$_}@_ && 0x400)|
+ ($@ || 0x602)
+}
+sub import { shift; $^H |= bits @_ }
+sub unimport { shift; $^H &= ~ bits @_ }
+just::end}
+
+BEGIN{$ INC{'Pts/string.pm'}='Pts/string.pm'} {
+package Pts::string;
+# by pts@fazekas.hu at Sat Dec 21 21:32:18 CET 2002
+use just;
+use integer;
+use strict;
+
+#** @param $_[0] a string
+#** @param $_[1] index of first bit to return. Bit 128 of byte 0 is index 0.
+#** @param $_[2] number of bits to return (<=32)
+#** @return an integer (negative on overflow), bit at $_[1] is its MSB
+sub get_bits_msb($$$) {
+ # assume: use integer;
+ my $loop=$_[1];
+ my $count=$_[2];
+ my $ret=0;
+ ($ret+=$ret+(1&(vec($_[0],$loop>>3,8)>>(7-($loop&7)))), $loop++) while $count--!=0;
+ $ret
+}
+
+#** @param $_[0] a string
+#** @return value if $_[0] represents a floating point numeric constant
+#** in the C language (without the LU etc. modifiers) -- or undef. Returns
+#** undef for integer constants
+sub c_floatval($) {
+ my $S=$_[0];
+ no integer; # very important; has local scope
+ return 0.0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+|[0-9]+\.])(?:[eE][+-]?[0-9]+)?\Z(?!\n)/;
+ undef
+}
+
+#** @param $_[0] a string
+#** @return value if $_[0] represents a floating point or integer numeric
+#** constant in the C language (without the LU etc. modifiers) -- or undef
+sub c_numval($) {
+ my $S=$_[0];
+ no integer; # very important; has local scope
+ return 0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+\.?)\Z(?!\n)/;
+ undef
+}
+
+#** @param $_[0] a string
+#** @return the integer value of $_[0] in C -- or undef
+sub c_intval($) {
+ my $S=$_[0];
+ my $neg=1;
+ $neg=-1 if $S=~s@\A([+-])@@ and '-'eq$1;
+ return $neg*hex $1 if $S=~/\A0[xX]([0-9a-fA-F]+)\Z(?!\n)/;
+ return $neg*oct $1 if $S=~/\A0([0-7]+)\Z(?!\n)/;
+ return $neg*$1 if $S=~/\A([0-9]+)\Z(?!\n)/;
+ undef
+}
+
+sub import {
+ no strict 'refs';
+ my $package = (caller())[0];
+ shift; # my package
+ for my $p (@_ ? @_ : qw{get_bits_msb c_floatval c_numval c_intval}) { *{$package."::$p"}=\&{$p} }
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/dimen.pm'}='Htex/dimen.pm'} {
+package Htex::dimen;
+# by pts@fazekas.hu at Sat Dec 21 21:26:15 CET 2002
+use just;
+use integer;
+use strict;
+use Pts::string qw(c_numval);
+
+my %bp_mul;
+{ no integer; %bp_mul=(
+ 'bp'=>1, # 1 bp = 1 bp (big point)
+ 'in'=>72, # 1 in = 72 bp (inch)
+ 'pt'=>72/72.27, # 1 pt = 72/72.27 bp (point)
+ 'pc'=>12*72/72.27, # 1 pc = 12*72/72.27 bp (pica)
+ 'dd'=>1238/1157*72/72.27, # 1 dd = 1238/1157*72/72.27 bp (didot point) [about 1.06601110141206 bp]
+ 'cc'=>12*1238/1157*72/72.27, # 1 cc = 12*1238/1157*72/72.27 bp (cicero)
+ 'sp'=>72/72.27/65536, # 1 sp = 72/72.27/65536 bp (scaled point)
+ 'cm'=>72/2.54, # 1 cm = 72/2.54 bp (centimeter)
+ 'mm'=>7.2/2.54, # 1 mm = 7.2/2.54 bp (millimeter)
+) }
+
+#** @param $_[0] a (real or integer) number, optionally postfixed by a
+#** TeX dimension specifier (default=bp)
+#** @return the number in bp, or undef
+sub dimen2bp($) {
+ no integer;
+ my $S=$_[0];
+ my $mul;
+ $mul=$bp_mul{$1} if $S=~s/\s*([a-z][a-z0-9]+)\Z(?!\n)// and exists $bp_mul{$1};
+ my $val=c_numval($S);
+ $val*=$mul if defined $val and defined $mul;
+ $val
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/ImgBBox.pm'}='Htex/ImgBBox.pm'} {
+package Htex::ImgBBox;
+#
+# ImgBBox -- extract file format and size from image files
+# by pts@fazekas.hu at Sat Dec 7 21:31:01 CET 2002
+# JustLib2 at Sat Dec 21 21:29:21 CET 2002
+#
+# Dat: we know most of xloadimage-1.16, most of of file(1)-debian-potato,
+# all of sam2p-0.40, all of xv-3.10
+# Dat: only in xloadimage: g3Ident, g3Load, "G3 FAX Image", (hard to identify file format)
+# Dat: only in xloadimage: macIdent, macLoad, "MacPaint Image", (stupid, black-white)
+# Imp: multiple paper sizes
+#
+use just;
+use integer;
+use strict;
+use Htex::dimen;
+use Pts::string;
+# use Data::Dumper;
+
+# Dat: BBoxInfo is a hashref:
+# Dat: Info.* keys has FileFormat-dependent meaning (thus Info.depth may have
+# different meanings for different FileFormats)
+# { 'FileFormat' => 'TIFF' # ...
+# 'SubFormat' => 'PPM'
+# 'Error' => 0
+# 'LLX' => ... # lower left x (usually 0)
+# 'LLY' => ... # lower left y (usually 0)
+# 'URX' => ... # upper right x (usually width)
+# 'URY' => ... # upper right y (usually height)
+# }
+
+# Dat: \usepackage[hiresbb]{graphicx}
+# Dat: pdfTeX graphicx.sty doesn't respect PDF CropBox. For
+# /MediaBox[a b c d], \ht=d, \wd=c, and no overwrite below (a,b)
+
+# ---
+
+#** import will set them
+my $have_pdf;
+my $have_paper;
+
+#** May moves the file offset, but only relatively (SEEK_CUR).
+#** @param $_[0] \*FILE
+#** @return BBoxInfo
+sub calc($) {
+ my $F=$_[0];
+ my $dummy;
+ my @L;
+ my $head;
+ #** BBoxInfo to return
+ my $bbi={
+ # 'FileFormat' => '.IO.error',
+ 'FileFormat' => 'unknown',
+ 'LLX' => 0, 'LLY' => 0, # may be float; in `bp'
+ # 'URX' => 0, 'URY' => 0 # default: missing; may be float; in `bp'
+ };
+ binmode $F;
+ if (0>read $F, $head, 256) { IOerr: $bbi->{Error}="IO: $!"; goto done }
+ if (length($head)==0) { $bbi->{FileFormat}='Empty'; return $bbi }
+ if ($head=~m@\A\s*/[*]\s+XPM\s+[*]/@) { # XPM
+ $bbi->{FileFormat}='XPM';
+ goto IOerr if !seek $F, -length($head), 1;
+ select($F); $/='"'; select(STDOUT); <$F>;
+ $head=<$F>;
+ if ($head!~/\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*"\Z(?!\n)/s) { SYerr: $bbi->{Error}='syntax'; goto done }
+ # width, height, length(palette), length(pixelchar)
+ $bbi->{URX}=0+$1;
+ $bbi->{URY}=0+$2;
+ } elsif ($head=~m@\A\s*\/\*\s*Format_version=\S*\s+@i) {
+ $bbi->{FileFormat}='XBM1'; # ??
+ goto IOerr if 0>read $F, $head, 256-length($head), length($head);
+ $head=~s@\*\/.*@@s; # keep only header
+ goto SYerr if $head!~m@\s+Width=(\d+)@i;
+ $bbi->{URX}=0+$1;
+ goto SYerr if $head!~m@\s+Height=(\d+)@i;
+ $bbi->{URY}=0+$1;
+ } elsif ($head=~m@\A(?:/[*].*?[*]/)?\s*#define\s+.*?_width\s+(\d+)\s*#define\s+.*?_height\s+(\d+)\s*@) { # XBM (1)
+ # Dat: this `if' must be after checking XPM
+ # Imp: recognise a longer comment (that does not fit into $head)
+ $bbi->{FileFormat}='XBM';
+ $bbi->{URX}=0+$1;
+ $bbi->{URY}=0+$2;
+ } elsif ($head=~m@\A(?:/[*].*?[*]/)?\s*#define\s+.*?_height\s+(\d+)\s*#define\s+.*?_width\s+(\d+)\s*@) { # XBM (2)
+ $bbi->{FileFormat}='XBM';
+ $bbi->{URX}=0+$2;
+ $bbi->{URY}=0+$1;
+ } elsif ($head=~m@\AP([1-6])[\s#]@) { # PNM
+ $bbi->{FileFormat}='PNM';
+ my @subformats=qw{- PBM.text PGM.text PPM.text PBM.raw PGM.raw PPM.raw};
+ $bbi->{SubFormat}=$subformats[0+$1];
+ goto IOerr if 0>read $F, $head, 1024-length($head), length($head);
+ $head=~s@#.*@@g; # remove comments
+ goto SYerr if ($head!~/\AP[1-6]\s+(\d+)\s+(\d+)\s/);
+ $bbi->{URX}=0+$1; $bbi->{URY}=0+$2;
+ } elsif (substr($head, 0, 4) eq "MM\000\052" or substr($head, 0, 4) eq "II\052\000") {
+ $bbi->{FileFormat}='TIFF';
+ my $LONG="N";
+ my $SHORT="n";
+ if (substr($head, 0, 1) eq "I") {
+ $bbi->{SubFormat}='LSBfirst';
+ $LONG="V"; $SHORT="v";
+ } else {
+ $bbi->{SubFormat}='MSBfirst';
+ }
+ my($dummy,$ifd_ofs)=unpack $LONG.$LONG, $head;
+ goto IOerr if !seek $F, $ifd_ofs-length($head), 1;
+ my $ifd_len;
+ goto IOerr if 2!=read $F, $ifd_len, 2;
+ $ifd_len=unpack($SHORT,$ifd_len);
+ while ($ifd_len--!=0) {
+ my($entry,$tag,$type,$count,$value);
+ goto IOerr if 12!=read $F, $entry, 12;
+ ($tag,$type,$count)=unpack($SHORT.$SHORT.$LONG, $entry);
+ # vvv Dat: we discard tags with $value longer than 4 bytes
+ # Unfortunately BitsPerSample may be such a tag for RGB
+ if ($type==3) { $value=unpack($SHORT,substr($entry,8,2)) }
+ elsif ($type==4) { $value=unpack($LONG, substr($entry,8,4)) }
+ else { $value=vec($entry,8,8); }
+ if ($tag==256 and $count==1) { $bbi->{URX}=$value } # ImageWidth
+ elsif ($tag==257 and $count==1) { $bbi->{URY}=$value } # ImageLength
+ elsif ($tag==258 and $count<=2) { $bbi->{BitsPerSample}=$value }
+ elsif ($tag==259) { $bbi->{"Info.Compression"}=$value }
+ elsif ($tag==254) { $bbi->{"Info.NewSubfileType"}=$value }
+ elsif ($tag==255) { $bbi->{"Info.SubfileType"}=$value }
+ elsif ($tag==262) { $bbi->{"Info.PhotometricInterpretation"}=$value }
+ elsif ($tag==263) { $bbi->{"Info.Thresholding"}=$value }
+ elsif ($tag==264) { $bbi->{"Info.CellWidth"}=$value }
+ elsif ($tag==265) { $bbi->{"Info.CellLength"}=$value }
+ elsif ($tag==266) { $bbi->{"Info.FillOrder"}=$value }
+ elsif ($tag==274) { $bbi->{"Info.Orientation"}=$value }
+ elsif ($tag==277) { $bbi->{SamplesPerPixel}=$value }
+ elsif ($tag==278) { $bbi->{"Info.RowsPerStrip"}=$value }
+ elsif ($tag==280) { $bbi->{"Info.MinSampleValue"}=$value }
+ elsif ($tag==281) { $bbi->{"Info.MaxSampleValue"}=$value }
+ elsif ($tag==284) { $bbi->{"Info.PlanarConfiguration"}=$value }
+ elsif ($tag==290) { $bbi->{"Info.GrayResponseUnit"}=$value }
+ elsif ($tag==296) { $bbi->{"Info.ResolutionUnit"}=$value }
+ elsif ($tag==338 and $count<=2) { $bbi->{"Info.ExtraSamples"}=$value }
+ }
+ } elsif ($head=~/\A\12[\0-\005]\001[\001-\10]/) {
+ $bbi->{FileFormat}='PCX'; # PC Paintbrush image
+ ($dummy,$bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=unpack("A4vvvv",$head);
+ $bbi->{URX}++; $bbi->{URY}++;
+ # pinfo->w = 1+ (hdr[PCX_XMAXL] + ((int) hdr[PCX_XMAXH]<<8)) - (hdr[PCX_XMINL] + ((int) hdr[PCX_XMINH]<<8));
+ # pinfo->h = 1+ (hdr[PCX_YMAXL] + ((int) hdr[PCX_YMAXH]<<8)) - (hdr[PCX_YMINL] + ((int) hdr[PCX_YMINH]<<8));
+ } elsif ($head=~/\AGIF(8[79]a)/) {
+ $bbi->{FileFormat}='GIF';
+ $bbi->{SubFormat}=$1;
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A6vv",$head);
+ } elsif ($head=~/\A(\377+\330)\377/g) {
+ $bbi->{FileFormat}='JPEG';
+ die if !seek $F, length($1)-length($head), 1;
+ my $id_rgb=0;
+ my $had_jfif=0;
+ my $cpp;
+ my $colortransform=-1; # as defined by the Adobe APP14 marker
+ my $tag;
+ my $w;
+ while (1) {
+ goto IOerr if !defined($tag=getc($F)) or ord($tag)!=255;
+ 1 while defined($tag=getc($F)) and 255==($tag=ord($tag));
+ goto IOerr if !defined($tag);
+ if ($tag==0xC0) { # SOF0 marker: Baseline JPEG file
+ $bbi->{SubFormat}='Baseline';
+ goto IOerr if 2!=read $F, $w, 2;
+ $dummy=unpack('n',$w)-2; # length includes itself
+ goto IOerr if $dummy<9 or $dummy!=read($F, $w, $dummy);
+ $bbi->{BitsPerSample}=vec($w,0,8);
+ $bbi->{URY}=(vec($w,1,8)<<8)|vec($w,2,8);
+ $bbi->{URX}=(vec($w,3,8)<<8)|vec($w,4,8);
+ $cpp=vec($w,5,8);
+ goto SYerr if ($dummy-=6)!=3*$cpp or $cpp>6 or $cpp<1;
+ $bbi->{'Info.hvs'}=vec($w,7,8); # HVSamples ?
+ $id_rgb=1 if $cpp==3 and $w=~/\A......R..G..B/s;
+ } elsif (0xC1<=$tag and $tag<=0xCF and $tag!=0xC4 and $tag!=0xC8) { # SOFn
+ $bbi->{Subformat}="SOF".($tag-0xC0);
+ last
+ } elsif ($tag==0xD9 or $tag==0xDA) { # EOI or SOS marker; we're almost done
+ if (!defined $cpp) {
+ } elsif ($cpp==1) {
+ $bbi->{'ColorSpace'}='Gray';
+ } elsif ($cpp==3) {
+ $bbi->{'ColorSpace'}='YCbCr';
+ if ($had_jfif!=0 or $colortransform==1) {}
+ elsif ($colortransform==0 or $id_rgb) { $bbi->{'ColorSpace'}='RGB' }
+ } elsif ($cpp==4) {
+ $bbi->{'ColorSpace'}='CMYK';
+ if ($colortransform==2) { $bbi->{'ColorSpace'}='YCCK' }
+ }
+ last
+ } else {
+ # skip over a variable-length block; assumes proper length marker
+ # ($tag==0xE0) # APP0: JFIF application-specific marker
+ # ($tag==0xEE) # APP14: Adobe application-specific marker
+ goto IOerr if 2!=read $F, $w, 2;
+ $dummy=unpack('n',$w)-2; # length includes itself
+ goto IOerr if $dummy!=read $F, $w, $dummy;
+ $colortransform=ord($1) if
+ $tag==0xEE and $dummy==12 and $w=~/\AAdobe[\001-\377].....(.)/s;
+ $had_jfif=1 if
+ $tag==0xE0 and $dummy==14 and $w=~/\AJFIF\0/;
+ } ## IF
+ } ## WHILE
+ $bbi->{'Info.id_rgb'}=$id_rgb;
+ $bbi->{'Info.had_jfif'}=$had_jfif;
+ $bbi->{'Info.ColorTransform'}=$colortransform;
+ $bbi->{SamplesPerPixel}=$cpp;
+ } elsif (substr($head,0,8) eq "\211PNG\r\n\032\n") {
+ $bbi->{FileFormat}='PNG';
+ goto SYerr if $head!~/\A........\0\0\0[\15-\77]IHDR/s;
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A16NN",$head);
+ } elsif (substr($head,0,5) eq "%PDF-") {
+ $bbi->{FileFormat}='PDF'; # Adobe Portable Document Format
+ # Dat: this routine cannot read encrypted PDF files
+ # Dat: example $bbi return: {
+ # 'URY' => 792, 'LLX' => '0', 'LLY' => '0', 'URX' => 612
+ # 'FileFormat' => 'PDF', 'SubFormat' => '1.2', 'Info.linearized' => 1, 'Info.binary' => 'Binary',
+ # 'Info.MediaBox' => [ 0, 0, 612, 792 ],
+ # 'Info.CropBox' => [ 41, 63, 572, 729 ],
+ # };
+ # Dat: $bbi->{'Info.num_pages'} is not reported for Linearized PDF.
+ # Imp: report much more specific error messages
+ # Imp: better distinguish between IOerr and SYerr
+ $bbi->{SubFormat}=$1 if $head=~/\A%PDF-([\d.]+)/;
+ $bbi->{'Info.binary'}=($head=~/\A[^\r\n]+[\r\n]+[ -~]*[^\n\r -~]/) ? 'Binary' : 'Clean7Bit';
+ # die $have_pdf;
+ goto done if !$have_pdf;
+ # if ($head=~m@\A(?:%[^\r\n]*[\r\n])*.{0,40}/Linearized@s and $head=~m@\A(?:%[^\r\n]*[\r\n])*.{0,200}/O\s+(\d+)@s) {
+ my $had_pdfboxes=($head=~m@/Type\s*/pdfboxes%@); # `%' is important
+ $head=pdf_rewrite($head,1);
+ my $page1obj;
+ $bbi->{'Info.linearized'}=0;
+ $bbi->{'Info.pdfboxes'}=0;
+ if (defined $head) {
+ $head=~s@\bendobj.*@@s;
+ if ($had_pdfboxes) {
+ # a hint of very strict format, by
+ $head="";
+ goto IOerr if !seek($F, 0, 0) or 20>read($F, $head, 2048);
+ goto SYerr unless $head=~/\d\s+\d+\s+obj\s*(.*?)\bendobj/s;
+ $head=$1; goto SYerr unless $head=~m@/Type\s*/pdfboxes%@;
+ while ($head=~m@^\s*/(\w+Box)\s*\[\s*(-?[\d.]+)\s+(-?[\d.]+)\s+(-?[\d.]+)\s+(-?[\d.]+)\s*\]@gm) {
+ ## print "($1) ($2) ($3) ($4) ($5)\n";
+ ($bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=($2,$3,$4,$5) if $1 eq 'MediaBox';
+ $bbi->{"Info.$1"}=[$2,$3,$4,$5];
+ }
+ $bbi->{'Info.pdfboxes'}=1;
+ goto done;
+ } elsif ($head=~m@/Linearized\s+@ and $head=~m@/O\s+(\d+)@) {
+ $bbi->{'Info.linearized'}=1;
+ $page1obj=$bbi->{'Info.page1obj'}=$1+0;
+ }
+ }
+ goto IOerr if !seek $F, -1024, 2 and !seek $F, 0, 0;
+ goto IOerr if 1>read $F, $head, 1024;
+ goto SYerr if $head!~/startxref\s+(\d+)\s*%%EOF\s*\Z(?!\n)/
+ and $head!~/startxref\s+(\d+)\s*%%EOF/;
+ # ^^^ Dat: some PDF files contain binary junk at the end
+ my $xref_ofs=$1+0;
+ goto IOerr if !seek $F, $xref_ofs, 0;
+ # die pdf_read_obj($F);
+ my $xref=[];
+ my $trailer=pdf_read_xref($F,$xref);
+ goto SYerr if !defined $trailer;
+
+ my $pages;
+ my $type;
+ if (!defined $page1obj) { do_pdf_slow:
+ ## die $trailer;
+ ## die pdf_ref($F,$xref,37550,0);
+ ## die pdf_get($F,$xref,$trailer,'/ID');
+ ## die pdf_get($F,$xref,$trailer,'/Root');
+ ## die pdf_get($F,$xref,$trailer,'/Size');
+ ## die pdf_get($F,$xref,$trailer,'/Sizez');
+
+ my $root=pdf_get($F,$xref,$trailer,'/Root');
+ goto IOerr if !defined $root; goto SYerr if !length $root;
+ $type=pdf_get($F,$xref,$root,'/Type');
+ goto IOerr if !defined $type; goto SYerr if $type ne ' /Catalog';
+ # die $root;
+ # vvv Dat: reading xref for /Pages in a linearized PDF is quite slow
+ $pages=pdf_get($F,$xref,$root,'/Pages');
+ goto IOerr if !defined $pages; goto SYerr if !length $pages;
+ ## die $pages;
+ my $kids;
+
+ while (1) {
+ $type=pdf_get($F,$xref,$pages,'/Type');
+ goto IOerr if !defined $type;
+ last if $type ne ' /Pages';
+ pdf_get_boxes($F, $xref, $pages, $bbi);
+ $kids=pdf_get($F,$xref,$pages,'/Kids');
+ goto IOerr if !defined $kids; goto SYerr if !length $kids;
+ ## die $kids;
+ $pages=pdf_get($F,$xref,$kids,0);
+ ## die $pages;
+ goto IOerr if !defined $pages; goto SYerr if !length $pages;
+ }
+ goto SYerr if $type ne ' /Page';
+ # Dat: cannot set $page1obj properly here, because it might be a direct object
+ $bbi->{'Info.page1obj'}=$Htex::PDFread::pdf_last_ref0;
+ } else {
+ # die $page1obj;
+ $pages=pdf_ref($F, $xref, $page1obj, 0);
+ goto IOerr if !defined $pages;
+ $type=pdf_get($F,$xref,$pages,'/Type');
+ goto IOerr if !defined $type;
+ goto SYerr if $type ne ' /Page';
+ my $mediabox=pdf_get($F,$xref,$pages,'/MediaBox');
+ goto IOerr if !defined $mediabox;
+ goto do_pdf_slow if !length $mediabox;
+ }
+ pdf_get_boxes($F, $xref, $pages, $bbi);
+ } elsif (substr($head,0,4) eq "%!PS") {
+ # Dat: the user should not trust Val.languagelevel blindly. There are far
+ # too many PS files hanging around that do not conform to any standard.
+ $bbi->{FileFormat}=$bbi->{SubFormat}=
+ ($head=~/\A[^\n\r]*?\bEPSF-/) ? "EPS" : "PS";
+ goto SYerr if $head!~s@[^\n\r]*[\n\r]+@@;
+ # vvv Dat `+' is `or' with full boolean eval
+ until ($head=~s@[\n\r]%%EndComments.*@@s + $head=~s@[\n\r](?:[^%]|%[^%]).*@@s) {
+ goto IOerr if 0>read $F, $head, 1024, length($head);
+ }
+ my $headlen=length($head);
+ $head=~s@(?:\r\n|\n\r|[\n\r])@\n@g; # uniformize newlines
+ $head=~s@\s*\n%%[+]\s*@ @g; # unify line continuations
+ my %H;
+ my $had_hires=0; # HiresBoundingBox overrides normal
+ my $val;
+ while ($head=~/^%%([A-Za-z]+):?\s*((?:.*\S)?)/gm) {
+ next if $2 ne '(atend)';
+ # read additional ADSC comments from the last 1024 bytes of the file
+ goto IOerr if !seek $F, -1024, 2 and !seek $F, 0, 0; # Dat: seek to EOF
+ $dummy=tell $F;
+ goto IOerr if $dummy<$headlen and $headlen-$dummy!=read $F, $val, $headlen-$dummy;
+ goto IOerr if 0>read $F, $val, 1024;
+ $val=~s@(?:\r\n|\n\r|[\n\r])@\n@g; # uniformize newlines
+ $val=~s@\s*\n%%[+]\s*@ @g; # unify line continuations
+ $val=~s@^(?:[^%]|%[^%]).*\n?@@mg; # remove non-DSC lines
+ # vvv Dat: appending is schemantically correct here
+ $head.="\n$val"; last
+ }
+ while ($head=~/^%%([A-Za-z]+):?[ \t]*((?:.*\S)?)/gm) { # iterate over Adobe DSC comments
+ $dummy=lc($1); $val=$2;
+ next if $dummy eq 'enddata' or $dummy eq 'trailer' or $dummy eq 'eof';
+ $bbi->{"Val.$dummy"}=$2;
+ if ($dummy eq 'documentdata') {
+ $dummy=lc($2);
+ $bbi->{'Info.binary'}='Clean7Bit' if $dummy eq 'clean7bit';
+ $bbi->{'Info.binary'}='Clean8Bit' if $dummy eq 'clean8bit';
+ $bbi->{'Info.binary'}='Binary' if $dummy eq 'binary';
+ } elsif ($dummy eq 'creator' and $val=~/\bMetaPost\b/) {
+ $bbi->{FileFormat}='EPS';
+ $bbi->{SubFormat}='MPS'; # useful for graphicP.sty
+ } elsif ($dummy eq 'boundingbox' and $val=~/\A([+-]?\d+)\s+([+-]?\d+)\s+([+-]?\d+)\s+([+-]?\d+)\Z(?!\n)/) {
+ ($bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=($1+0,$2+0,$3+0,$4+0) if !$had_hires;
+ } elsif (($dummy eq 'hiresboundingbox' or $dummy eq 'exactboundingbox')
+ and $val=~/\A([+-]?[0-9eE.-]+)\s+([+-]?[0-9eE.-]+)\s+([+-]?[0-9eE.-]+)\s+([+-]?[0-9eE.-]+)\Z(?!\n)/
+ and defined c_numval($1) and defined c_numval($2) and defined c_numval($3) and defined c_numval($4)
+ ) {
+ # Dat: capitalized names are: HiResBoundingBox, ExactBoundingBox
+ no integer;
+ ($bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=($1+0,$2+0,$3+0,$4+0);
+ $had_hires=1;
+ }
+ }
+ } elsif ($head=~/\AFORM....ILBMBMHD/s) {
+ $bbi->{FileFormat}='LBM';
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A20nn",$head);
+ } elsif ($head=~/\AFORM....(RGB[8N])/s) { # /etc/magic
+ $bbi->{FileFormat}="IFF.$1";
+ # dimension info not available
+ } elsif ($head=~/\ABM....\0\0\0\0....[\014-\177]\0\0\0/s) { # PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu)
+ $bbi->{FileFormat}='BMP';
+ if (vec($head,14,8)==12) {
+ $bbi->{SubFormat}='OS/2 1.x';
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A18vv",$head);
+ } elsif (vec($head,14,8)==64) {
+ $bbi->{SubFormat}='OS/2 2.x';
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A18vv",$head);
+ } elsif (vec($head,14,8)==40) {
+ $bbi->{SubFormat}='Windows';
+ ($dummy,$bbi->{URX},$bbi->{URY},$dummy,$bbi->{"Info.depth"})=unpack("A18VVvv",$head);
+ } else { goto SYerrr }
+ #0 string BM PC bitmap data
+ #>14 leshort 12 \b, OS/2 1.x format
+ #>>18 leshort x \b, %d x
+ #>>20 leshort x %d
+ #>14 leshort 64 \b, OS/2 2.x format
+ #>>18 leshort x \b, %d x
+ #>>20 leshort x %d
+ #>14 leshort 40 \b, Windows 3.x format
+ #>>18 lelong x \b, %d x
+ #>>22 lelong x %d x
+ #>>28 leshort x %d
+ } elsif (substr($head,0,10) eq "\367\002\001\203\222\300\34;\0\0") { FF__DVI:
+ $bbi->{FileFormat}='DVI';
+ # read 1st page of the DVI file, look for TeX \special{papersize=21cm,29.7cm},
+ # as understood by dvips and xdvi
+ ($dummy,$bbi->{'Info.version_id'},$bbi->{'Info.numerator'},
+ $bbi->{'Info.denominator'},$bbi->{'Info.magnification'})=unpack('CCNNN',$head);
+ goto IOerr if !seek $F, 15-length($head), 1;
+ $dummy=vec($head,14,8);
+ goto IOerr if $dummy!=read $F, $bbi->{'Info.jobname'}, $dummy;
+ my($tag,$action);
+ my @actions=(0)x256; # skip that char
+ $actions[139]=15; # Bop
+ @actions[248,249,140,223]=(16,16,16,16); # stop parsing file
+ @actions[128,133,143,148,153,157,162,167,235]=(1,1,1,1,1,1,1,1,1); # read 1 extra bytes
+ @actions[129,134,144,149,154,158,163,168,236]=(2,2,2,2,2,2,2,2,2); # read 2 extra bytes
+ @actions[130,135,145,150,155,159,164,169,237]=(3,3,3,3,3,3,3,3,3); # read 2 extra bytes
+ @actions[131,136,146,151,156,160,165,170,238]=(4,4,4,4,4,4,4,4,4); # read 2 extra bytes
+ @actions[132,137]=(8,8); # read 8 extra bytes
+ @actions[243,244,245,246]=(17,18,19,20); # Fnt_def
+ @actions[239,240,241,242]=(33,34,35,26); # Special (XXX)
+ while (1) {
+ goto IOerr if !defined($tag=getc($F)); # Dat: EOF is error
+ $tag=$actions[ord($tag)];
+ if ($tag==0) {
+ } elsif ($tag==16) {
+ last
+ } elsif ($tag==15) { # Bop
+ last if exists $bbi->{'Info.page1_nr'};
+ goto IOerr if 44!=read $F, $dummy, 44;
+ $bbi->{'Info.page1_nr'}=unpack "N", $dummy;
+ } else {
+ # read number of ($tag&15) bytes in MSBfirst byte order
+ $dummy="\0\0\0\0";
+ goto IOerr if ($tag&15)!=read $F, $dummy, ($tag&15), 4;
+ $dummy=unpack("N",substr($dummy,-4));
+ if ($tag>=33) { # Special
+ goto IOerr if $dummy!=read $F, $tag, $dummy;
+ @L=split /\s*=\s*/, $tag, 2;
+ if ($#L) {
+ $bbi->{"Val.$L[0]"}=$L[1];
+ if ($L[0] eq 'papersize') {
+ @L=split /,/, $L[1], 2;
+ $bbi->{URX}=Htex::dimen::dimen2bp($L[0]);
+ $bbi->{URY}=Htex::dimen::dimen2bp($L[1]);
+ if (!defined $bbi->{URX} or !defined $bbi->{URY}) {
+ delete $bbi->{URX}; delete $bbi->{URY};
+ }
+ }
+ } else { $bbi->{'Info.special'}=$tag; }
+ } elsif ($tag>=17) { # Fnt_def
+ goto IOerr if 14!=read $F, $tag, 14;
+ $dummy=vec($tag,12,8)+vec($tag,13,8);
+ goto IOerr if $dummy!=read $F, $tag, $dummy;
+ }
+ } # IF
+ } # WHILE
+ } elsif ($head=~/\Aid=ImageMagick\r?\n/) {
+ $bbi->{FileFormat}='MIFF';
+ # goto IOerr if 0>read $F, $head, 128-length($head), length($head);
+ goto SYerr if $head!~/\bcolumns=(\d+)\s+rows=(\d+)/;
+ $bbi->{URX}=0+$1; $bbi->{URY}=0+$2;
+ } elsif (substr($head,0,3) eq 'FWS') {
+ $bbi->{FileFormat}='SWF'; # Macromedia ShockWave Flash
+ my $nbits=get_bits_msb($head, 64, 5);
+ no integer;
+ $bbi->{URX}=get_bits_msb($head, 69+ $nbits, $nbits)/20.0;
+ $bbi->{LLX}=get_bits_msb($head, 69, $nbits)/20.0;
+ $bbi->{URY}=get_bits_msb($head, 69+3*$nbits, $nbits)/20.0;
+ $bbi->{LLY}=get_bits_msb($head, 69+2*$nbits, $nbits)/20.0;
+ } elsif (substr($head,0,14) eq "gimp xcf file\0") { # GIMP XCF image data
+ $bbi->{SubFormat}='version.000';
+ do_XCF:
+ $bbi->{FileFormat}='XCF';
+ ($dummy,$bbi->{URX},$bbi->{URY},$dummy)=unpack("A14NNN", $head);
+ if ($dummy==0) { $bbi->{ColorSpace}='RGB' }
+ elsif ($dummy==1) { $bbi->{ColorSpace}='Gray' }
+ elsif ($dummy==2) { $bbi->{ColorSpace}='Indexed' }
+ } elsif ($head=~/\Agimp xcf v(\d\d\d)\0/) {
+ $bbi->{SubFormat}="version.$1";
+ goto do_XCF;
+ } elsif ($head=~/\A\0\0\001\0[\001-\50]\0/) { # Windows ICO icon
+ $bbi->{FileFormat}='ICO';
+ # An .ico file may contain multiple icons (hence [\001-50]); we report the
+ # properties of the very first one. Code based on ImageMagick.
+ # Imp: WinXP True color icons
+ ($dummy,$bbi->{URX},$bbi->{URY},$bbi->{'Info.colors'},$bbi->{'Info.reserved'},
+ $bbi->{'Info.planes'},$bbi->{BitsPerSample})=unpack("A6CCCCvv", $head);
+ # more precisely: BitsPerSample is bits per pixel;
+ # Dat: Info.reserved, BitsPerSample and Info.planes are often 0
+ } elsif (substr($head,0,4)eq"8BPS") { # PSD image data (Adobe Photoshop bitmap)
+ # based on PHP 4.2 image.c; untested
+ $bbi->{FileFormat}='PSD';
+ ($dummy,$bbi->{URY},$bbi->{URX})=unpack("A14NN",$head);
+ } elsif (substr($head,0,8) eq "\%bitmap\0") { # Fuzzy Bitmap (FBM) image; untested
+ $bbi->{FileFormat}='FBM';
+ @L=unpack("A8A8A8A8A8A8A12A12A12A12A80A80",$head); # <=256 chars OK
+ for (@L) { s@\0.*@@s } # make strings null-terminated
+ $bbi->{"Info.credits"}=pop(@L); # string
+ $bbi->{"Info.title"}=pop(@L); # string
+ goto SYerr if !defined ($bbi->{aspect}=c_numval(pop(@L)));
+ shift(@L); # magic
+ for my $item (@L) { goto SYerr if !defined($item=c_intval($item)) }
+ ( $bbi->{URX},$bbi->{URY},$bbi->{"Info.planes"},$bbi->{"Info.bits"},
+ $bbi->{"Info.physbits"},$bbi->{"Info.rowlen"},$bbi->{"Info.plnlen"},
+ $bbi->{"Info.clrlen"})=@L;
+ # char cols[8]; /* Width in pixels */
+ # char rows[8]; /* Height in pixels */
+ # char planes[8]; /* Depth (1 for B+W, 3 for RGB) */
+ # char bits[8]; /* Bits per pixel */
+ # char physbits[8]; /* Bits to store each pixel */
+ # char rowlen[12]; /* Length of a row in bytes */
+ # char plnlen[12]; /* Length of a plane in bytes */
+ # char clrlen[12]; /* Length of colormap in bytes */
+ # char aspect[12]; /* ratio of Y to X of one pixel */
+ } elsif (substr($head,0,4)eq"\x59\xa6\x6a\x95") { # Sun raster images; untested
+ $bbi->{FileFormat}='SunRaster';
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("NNN",$head);
+ #0 belong 0x59a66a95 Sun raster image data
+ #>4 belong >0 \b, %d x
+ #>8 belong >0 %d,
+ #>12 belong >0 %d-bit,
+ ##>16 belong >0 %d bytes long,
+ #>20 belong 0 old format,
+ ##>20 belong 1 standard,
+ #>20 belong 2 compressed,
+ #>20 belong 3 RGB,
+ #>20 belong 4 TIFF,
+ #>20 belong 5 IFF,
+ #>20 belong 0xffff reserved for testing,
+ #>24 belong 0 no colormap
+ #>24 belong 1 RGB colormap
+ #>24 belong 2 raw colormap
+ #>28 belong >0 colormap is %d bytes long
+ } elsif (substr($head,0,4)eq"\xf1\x00\40\xbb") {
+ $bbi->{FileFormat}='CMUWM'; # from xloadimage; untested
+ ($dummy,$bbi->{URX},$bbi->{URY},$bbi->{"Info.depth"})=unpack("NNNn",$head);
+ } elsif (substr($head,0,4) eq "\361\0\100\273") { # CMU window manager raster image data
+ # from xvl untested
+ $bbi->{FileFormat}='CMUWM';
+ ($dummy,$bbi->{URX},$bbi->{URY},$bbi->{'Info.num_bits'})=unpack("VVVV",$head);
+ } elsif (substr($head,0,2)eq"\x52\xCC") { # Utah Raster Toolkit RLE images; untested
+ $bbi->{FileFormat}='RLE'; # from xloadimage
+ ($dummy,$bbi->{URX},$bbi->{URY},$bbi->{LLX},$bbi->{LLY})=unpack("A6vvvv",$head);
+ $bbi->{BitsPerSample}=vec($head,12,8)/vec($head,11,8);
+ $bbi->{SamplesPerPixel}=vec($head,11,8);
+ #0 leshort 0xcc52 RLE image data,
+ #>6 leshort x %d x
+ #>8 leshort x %d
+ #>2 leshort >0 \b, lower left corner: %d
+ #>4 leshort >0 \b, lower right corner: %d
+ #>10 byte&0x1 =0x1 \b, clear first
+ #>10 byte&0x2 =0x2 \b, no background
+ #>10 byte&0x4 =0x4 \b, alpha channel
+ #>10 byte&0x8 =0x8 \b, comment
+ #>11 byte >0 \b, %d color channels
+ #>12 byte >0 \b, %d bits per pixel
+ #>13 byte >0 \b, %d color map channels
+ } elsif (substr($head,0,32)eq"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377") { # Kodak Photograph on CD Image
+ # derived from xloadimage; untested
+ $dummy=3587-length($head);
+ goto IOerr if $dummy=read $F, $head, $dummy, length($head);
+ goto SYerr if substr($head,2048,7) ne "PCD_IPI";
+ $bbi->{FileFormat}='PCD';
+ # vvv funny: an image format with fixed (hard-wired) image size
+ if ((vec($head,3586,8)&1)!=0) { ($bbi->{URY},$bbi->{URX})=(768,512) }
+ else { ($bbi->{UXY},$bbi->{URY})=(768,512) }
+ } elsif ($head=~/\A\0\0..\0\0\0[\001-\50]\0\0\0[\0-\002]\0\0\0([\001-\77])/s) {
+ $bbi->{FileFormat}='XWD';
+ $bbi->{SubFormat}='MSBfirst';
+ $bbi->{'Info.depth'}=ord($1);
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A16NN",$head);
+ } elsif ($head=~/\A..\0\0[\001-\50]\0\0\0[\0-\002]\0\0\0([\001-\77])\0\0\0/s) {
+ $bbi->{FileFormat}='XWD';
+ $bbi->{SubFormat}='LSBfirst';
+ $bbi->{'Info.depth'}=ord($1);
+ ($dummy,$bbi->{URX},$bbi->{URY})=unpack("A16VV",$head);
+ } elsif ($head=~/\A\0\001\0[\010-\377](?:\0.|\001\0)\0.....(?:[\001-\37].|\0[^\0]|\40\0){2}/s) { # GEM Bit image
+ # from xloadimage; untested
+ $bbi->{FileFormat}='GEM';
+ ($dummy,$bbi->{'Info.hlen'},$bbi->{'Info.colors'},$bbi->{'Info.patlen'},
+ $bbi->{URX},$bbi->{URY},$bbi->{'Info.llen'},$bbi->{'Info.lines'})=unpack("nnnnnnnn",$head);
+ } elsif ($head=~/\A....\0\0\0\004....\0\0[\0-\001].\0\0[\0-\003]./s) { # McIDAS areafile
+ # from xloadimage; untested
+ $bbi->{FileFormat}='McIDAS';
+ $bbi->{SubFormat}='MSBfirst';
+ ($dummy,$bbi->{URY},$bbi->{URX})=unpack("A32NN",$head);
+ } elsif ($head=~/\A....\004\0\0\0.....[\0-\001]\0\0.[\0-\003]\0\0/s) { # McIDAS areafile
+ # from xloadimage; untested
+ $bbi->{FileFormat}='McIDAS';
+ $bbi->{SubFormat}='LSBfirst';
+ ($dummy,$bbi->{URY},$bbi->{URX})=unpack("A32VV",$head);
+ } elsif ($head=~/\AVIEW/) {
+ # from xv; untested
+ $dummy="NNNNNN"; $bbi->{SubFormat}='MSBfirst';
+ do_PM:
+ $bbi->{FileFormat}='PM';
+ ($dummy,$bbi->{'Info.num_planes'},$bbi->{URX},$bbi->{URY},
+ $bbi->{'Info.num_bands'}, $bbi->{'Info.pixel_format'})=unpack($dummy,$head);
+ } elsif ($head=~/\AWEIV/) {
+ $dummy="VVVVVV"; $bbi->{SubFormat}='LSBfirst';
+ goto do_PM;
+ } elsif ($head=~/\A\001\332/) { # SGI 'rgb' image data
+ $bbi->{SubFormat}='MSBfirst'; $dummy="nCCnnnn";
+ do_SGI:
+ $bbi->{FileFormat}='SGI'; # from xv IRIS; untested
+ ($dummy,$bbi->{'Info.compression'},$bbi->{'Info.precision'},$bbi->{'Info.dimension'},
+ $bbi->{URX},$bbi->{URY},$bbi->{SamplesPerPixel})=unpack($dummy,$head);
+ if ($bbi->{'Info.compression'}==0) { $bbi->{'Info.compression'}='None' }
+ elsif ($bbi->{'Info.compression'}==1) { $bbi->{'Info.compression'}='RLE' }
+ $dummy=substr($head,80);
+ $bbi->{'Info.comment'}=$1 if $dummy=~m@\A([^\0])\0@s;
+ # Dat: Info.dimension is 2 or 3
+ ## See http://reality.sgi.com/grafica/sgiimage.html
+ } elsif ($head=~/\A\332\001/) { # SGI 'rgb' image data
+ $bbi->{SubFormat}='MSBfirst'; $dummy="vCCvvvvv";
+ goto do_SGI;
+ } elsif (substr($head,0,9) eq "SIMPLE =") {
+ $bbi->{FileFormat}='FITS';
+ while ($head!~/\bEND/) {
+ goto IOerr if 1>read $F, $head, 1024, length($head);
+ }
+ $bbi->{'Info.bits_per_pixel'}=$1 if $head=~/\bBITPIX\s*=\s*(\d+)/;
+ $bbi->{'Info.num_axis'}=$1 if $head=~/\bNAXIS\s*=\s*(\d+)/;
+ $bbi->{URX}=$1 if $head=~/\bNAXIS1\s*=\s*(\d+)/;
+ $bbi->{URY}=$1 if $head=~/\bNAXIS2\s*=\s*(\d+)/;
+ $bbi->{'Info.depth'}=$1 if $head=~/\bNAXIS3\s*=\s*(\d+)/;
+ $bbi->{'Info.data_max'}=$1 if $head=~/\bDATAMAX\s*=\s*(\d+)/;
+ $bbi->{'Info.data_min'}=$1 if $head=~/\bDATAMIN\s*=\s*(\d+)/;
+ # Dat: it would be quite hard to extract the dimensions...
+ ## FITS is the Flexible Image Transport System, the de facto standard for
+ ## data and image transfer, storage, etc., for the astronomical community.
+ ## (FITS floating point formats are big-endian.)
+ #0 string SIMPLE\ \ = FITS image data
+ #>109 string 8 \b, 8-bit, character or unsigned binary integer
+ #>108 string 16 \b, 16-bit, two's complement binary integer
+ #>107 string \ 32 \b, 32-bit, two's complement binary integer
+ #>107 string -32 \b, 32-bit, floating point, single precision
+ #>107 string -64 \b, 64-bit, floating point, double precision
+ } elsif ($head=~/\A(?:NJPL1I|CCSD3Z|LBLSIZE=)/) {
+ # from xv, imagemagick; untested
+ $bbi->{FileFormat}='VICAR';
+ while ($head!~/\bEND/) {
+ goto IOerr if 1>read $F, $head, 1024, length($head);
+ }
+ $bbi->{URX}=$1 if $head=~/\b(?:IMAGE_LINES|LINES|NL)\s*=\s*(\d+)/;
+ $bbi->{URY}=$1 if $head=~/\b(?:LINE_SAMPLES|NS)\s*=\s*(\d+)/;
+ ##------------------------------------------------------------------------------
+ ## vicar: file(1) magic for VICAR files.
+ ##
+ ## From: Ossama Othman <othman@astrosun.tn.cornell.edu
+ ## VICAR is JPL's in-house spacecraft image processing program
+ ## VICAR image
+ #0 string LBLSIZE= VICAR image data
+ #>32 string BYTE \b, 8 bits = VAX byte
+ #>32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2
+ #>32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4
+ #>32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4
+ #>32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8
+ #>32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8
+ ## VICAR label file
+ #43 string SFDU_LABEL VICAR label file
+ } elsif (substr($head,0,4) eq "IT01" or substr($head,0,4) eq "IT02") { # untested
+ $bbi->{FileFormat}='FIT'; # do not cunfuse FIT and FITS
+ ($dummy,$bbi->{URX},$bbi->{URY},$bbi->{'Info.num_bits'})=unpack("NNNN",$head);
+ } elsif (substr($head,0,4) eq "#FIG") {
+ $bbi->{FileFormat}='FIG';
+ $bbi->{SubFormat}=$1 if $head=~/\A....[ \t]+(\S+)/s;
+ ## FIG (Facility for Interactive Generation of figures), an object-based format
+ ## (as handled by xfig). There is no size information, fig2dev saves bounding
+ ## box as EPS
+ #0 string #FIG FIG image text
+ #>5 string x \b, version %.3s
+
+## These file formats below are known to the Debian potato file(1) command,
+## but the magic(5) file doesn't tell us how to extract size information
+##
+## NITF is defined by United States MIL-STD-2500A
+#0 string NITF National Imagery Transmission Format
+#>25 string >\0 dated %.14s
+#
+## NIFF (Navy Interchange File Format, a modification of TIFF) images
+#0 string IIN1 NIFF image data
+## ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster,
+## 1 plane, no encoding.
+## Artisan
+#0 long 1123028772 Artisan image data
+#>4 long 1 \b, rectangular 24-bit
+#>4 long 2 \b, rectangular 8-bit with colormap
+#>4 long 3 \b, rectangular 32-bit (24-bit with matte)
+#
+#
+## PHIGS
+#0 string ARF_BEGARF PHIGS clear text archive
+#0 string @(#)SunPHIGS SunPHIGS
+## version number follows, in the form m.n
+##>40 string SunBin binary
+##>32 string archive archive
+##
+## GKS (Graphics Kernel System)
+#0 string GKSM GKS Metafile
+#>24 string SunGKS \b, SunGKS
+#
+## CGM image files
+#0 string BEGMF clear text Computer Graphics Metafile
+## XXX - questionable magic
+#0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile
+#0 beshort 0x3020 character Computer Graphics Metafile
+#
+## MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
+#0 string yz MGR bitmap, modern format, 8-bit aligned
+#0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned
+#0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned
+#0 string yx MGR bitmap, modern format, squeezed
+#
+## image file format (Robert Potter, potter@cs.rochester.edu)
+#0 string Imagefile\ version- iff image data
+## this adds the whole header (inc. version number), informative but longish
+#>10 string >\0 %s
+#
+## other images
+#0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file
+#0 string \!\! Bennet Yee's "face" format
+#
+## From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
+## stuff.
+##
+#0 beshort 0x1010 PEX Binary Archive
+#
+## Visio drawings
+#03000 string Visio\ (TM)\ Drawing %s
+#
+#0 string IC PC icon data
+#0 string PI PC pointer image data
+#0 string CI PC color icon data
+#0 string CP PC color pointer image data
+
+ } elsif (substr($head,0,2) eq "\37\x9d") {
+ # .Z compress(1)ed file; may be an image (i.e pbm.Z)
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='compress';
+ } elsif (substr($head,0,2) eq "\37\x8b") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='gzip';
+ } elsif (substr($head,0,2) eq "\37\x36") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='pack';
+ } elsif ($head=~/\A(?:\377\037|\037\377)/) {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='compact';
+ } elsif (substr($head,0,3) eq "BZh") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='bzip2';
+ } elsif (substr($head,0,2) eq "BZ") { # check must be after bzip
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='bzip1';
+ } elsif (substr($head,0,2) eq "\x76\xff") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='squeeze';
+ } elsif (substr($head,0,2) eq "\x76\xfe") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='crunch';
+ } elsif (substr($head,0,2) eq "\x76\xfd") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='LZH';
+ } elsif (substr($head,0,2) eq "\037\237") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='freeze2';
+ } elsif (substr($head,0,2) eq "\037\236") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='freeze1';
+ } elsif (substr($head,0,2) eq "\037\240") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='SCO.LZH';
+ } elsif (substr($head,0,9) eq "\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a") {
+ $bbi->{FileFormat}='compress'; $bbi->{SubFormat}='lzop';
+
+ } elsif (substr($head,0,2) eq "\x60\xEA") {
+ $bbi->{FileFormat}='archive'; $bbi->{SubFormat}='ARJ';
+ } elsif ($head=~/\A..-l[hz]/s) {
+ $bbi->{FileFormat}='archive'; $bbi->{SubFormat}='LHA';
+ } elsif (substr($head,0,4) eq "Rar!") {
+ $bbi->{FileFormat}='archive'; $bbi->{SubFormat}='RAR';
+ } elsif (substr($head,0,4) eq "UC2\x1A") {
+ $bbi->{FileFormat}='archive'; $bbi->{SubFormat}='UC2';
+ } elsif (substr($head,0,4) eq "PK\003\004") {
+ $bbi->{FileFormat}='archive'; $bbi->{SubFormat}='ZIP';
+ } elsif (substr($head,0,4) eq "\xDC\xA7\xC4\xFD") {
+ $bbi->{FileFormat}='archive'; $bbi->{SubFormat}='ZOO';
+
+ } elsif ($head=~/\A.PC Research, Inc/s) {
+ $bbi->{FileFormat}='G3';
+ $bbi->{SubFormat}='Digifax';
+ # Dat: determining $bbi->{URX} and $bbi->{URY} would require a complex
+ # and full parsing of the G3 facsimile data
+ } elsif ($head=~/\A\367[\002-\005]/) {
+ # Dat: \005 is rather arbitrary here
+ goto FF__DVI;
+ } elsif ($head=~/\A[\36-\77](?:\001[\001\11]|\0[\002\12\003\13])\0\0/ and
+ vec($head, 1, 8)<=11 and (vec($head, 16, 8)<=8 or vec($head, 16, 8)==24)) { # potato magic
+ my @types=(0,'Map','RGB','Gray',0,0,0,0,0,'Map.RLE','RGB.RLE','Gray.RLE');
+ $bbi->{FileFormat}='TGA';
+ $bbi->{SubFormat}=$types[vec($head,2,8)];
+ ($dummy,$bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=unpack("A8vvvv",$head);
+ # Imp: verify LLX!=0 URX-LLX
+ } elsif (30<=vec($head, 0, 8) and vec($head, 0, 8)<=63 and
+ vec($head, 1, 8)<=11 and (vec($head, 16, 8)<=8 or vec($head, 16, 8)==24)) {
+ # ^^^ Dat: TGA doesn't have a fixed-format header, so this detection is quite
+ # weak. That's why it is the last one we perform.
+ $bbi->{FileFormat}='TGA';
+ $bbi->{SubFormat}='fallback';
+ ($dummy,$bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=unpack("A8vvvv",$head);
+ # Imp: verify LLX!=0 URX-LLX
+ } elsif ($head=~/^PicData:\s*(\d+)\s*(\d+)\s*(\d+)/m) { # grayscale Faces Project imagegrayscale Faces Project image; untested
+ # ^^^ Dat: regexp match is quite weak; perform check last
+ $bbi->{FileFormat}='Faces'; # from xloadimage
+ $bbi->{URX}=$1+0; $bbi->{URY}=$2+0; $bbi->{"Info.bitdepth"}=$3+0;
+ } elsif ($head=~/\A\001\0/s) { # really weak
+ $bbi->{FileFormat}='G3';
+ $bbi->{SubFormat}='MSBfirst.bytepad';
+ } elsif ($head=~/\A\0\001/s) { # really weak
+ $bbi->{FileFormat}='G3';
+ $bbi->{SubFormat}='LSBfirst.bytepad';
+ } elsif ($head=~/\A\24\0/s) { # really weak
+ $bbi->{FileFormat}='G3';
+ $bbi->{SubFormat}='MSBfirst.raw';
+ } elsif ($head=~/\A\0\24/s) { # really weak
+ $bbi->{FileFormat}='G3';
+ $bbi->{SubFormat}='LSBfirst.raw';
+ # Dat: determining $bbi->{URX} and $bbi->{URY} would require a complex
+ # and full parsing of the G3 facsimile data
+ } else {
+ $bbi->{Error}='unrecognised FileFormat'
+ }
+ done:
+ if ($have_paper and exists $bbi->{URX} and exists $bbi->{URY}) {
+ ($bbi->{Paper},$bbi->{PaperWidth},$bbi->{PaperHeight})=@L[0,1,2] if
+ @L=Htex::papers::valid_bp($bbi->{URX},$bbi->{URY},$bbi->{LLX},$bbi->{LLY});
+ } else {
+ delete $bbi->{LLX} if !exists $bbi->{URX};
+ delete $bbi->{LLY} if !exists $bbi->{URY};
+ }
+ $bbi
+}
+
+sub import {
+ no strict 'refs';
+ my $package=(caller())[0];
+ shift;
+ ($have_paper,$have_pdf)=(1,1);
+ for my $p (@_) {
+ if ($p eq '-PDF') { $have_pdf=0 }
+ elsif ($p eq '-paper') { $have_paper=0 }
+ else { *{$package."::$p"}=\&{$p} }
+ }
+ if ($have_pdf) { require Htex::PDFread; import Htex::PDFread }
+ if ($have_paper) { require Htex::papers; import Htex::papers }
+}
+
+just::end}
+
+BEGIN{$ INC{'vars.pm'}='vars.pm'} {
+package vars;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+require 5.002;
+sub import {
+ my $callpack = caller;
+ my ($sym, $ch, $sym9);
+ shift;
+ for $sym0 (@_) {
+ die("Can't declare another package's variables") if $sym0 =~ /::/;
+ ($ch, $sym) = unpack('a1a*', $sym0);
+ *{"${callpack}::$sym"} =
+ ( $ch eq "\$" ? \$ {"${callpack}::$sym"}
+ : $ch eq "\@" ? \@ {"${callpack}::$sym"}
+ : $ch eq "\%" ? \% {"${callpack}::$sym"}
+ : $ch eq "\*" ? \* {"${callpack}::$sym"}
+ : $ch eq "\&" ? \& {"${callpack}::$sym"}
+ : die("'$ch$sym' is not a valid variable name\n")
+ );
+ }
+}
+just::end}
+
+BEGIN{$ INC{'Htex/PDFread.pm'}='Htex/PDFread.pm'} {
+package Htex::PDFread;
+# by pts@fazekas.hu at Sat Dec 21 21:28:09 CET 2002
+use just;
+use integer;
+use strict;
+use Pts::string;
+use vars qw($pdf_last_ref0);
+
+my @pdf_classify;
+#** @param $_[0] a string in PDF source format
+#** @return a rewritten string, or "" if $_[0] is truncated, or undef if
+#** there is a parse error
+sub pdf_rewrite($;$) {
+ my $explicit_term_p=$_[1];
+ my $L=length($_[0]);
+ return "" if $L==0;
+ my $S="$_[0]\n>> "; # add sentinel
+ my $I=0;
+ my $O;
+ my $RET="";
+ if (!@pdf_classify) {
+ # Dat: PDF whitespace(0) is [\000\011\012\014\015\040]
+ # Dat: PDF separators(10) are < > { } [ ] ( ) / %
+ # Dat: PDF regular(40) character is any of [\000-\377] which is not whitespace or separator
+ @pdf_classify=(40)x256;
+ @pdf_classify[ord('<'),ord('>'),ord('{'),ord('}'),ord('['),ord(']'),
+ ord('('),ord(')'),ord('/'),ord('%')]=(10,11,12,13,14,15,16,17,18,19);
+ @pdf_classify[000,011,012,014,015,040]=(0,0,0,0,0,0);
+ }
+ while ($I<$L) {
+ $O=$pdf_classify[vec($S,$I,8)];
+ if ($O==0) { # whitespace
+ } elsif (12<=$O and $O<=15) { # one-char token
+ $RET.=" ".substr($S,$I,1);
+ } elsif ($O==18 or $O==40) { # name or /name
+ my $P=0;
+ if ($O==18) { $I++; $RET.=" /" } else { $RET.=" "; $P=1 }
+ my $T="";
+ $T.=chr($O) while $pdf_classify[$O=vec($S,$I++,8)]==40;
+ $I--;
+ ## die $I;
+ $T=~s@([^A-Za-z0-9_.-])@sprintf"#%02x",ord$1@ge; # make name safe
+ $RET.=$T;
+ return $RET if $P and ($T eq "stream" or $T eq "endobj" or $T eq "startxref");
+ next
+ } elsif ($O==11) { # `>'
+ return "" if ++$I==$L; # only `>' has arrived
+ return undef if vec($S,$I,8)!=62; # err(">> expected");
+ $RET.=" >>";
+ } elsif ($O==16) { # string
+ my $T="";
+ my $depth=1; $I++;
+ while ($I<$L) {
+ $O=vec($S,$I++,8); bcont:
+ ## print chr($O),":$depth\n";
+ if ($O==40) { $depth++ }
+ elsif ($O==41) { last unless --$depth }
+ elsif ($O==92) { # a backslash
+ $O=vec($S,$I++,8);
+ if (48<=$O && $O<=55) {
+ my $P=$O-48; $O=vec($S,$I++,8);
+ if (48<=$O && $O<=55) {
+ my $Q=$O-48; $O=vec($S,$I++,8);
+ if (48<=$O && $O<=55) { $T.=chr(255&($P<<6|$Q<<3|($O-48))) }
+ else { $T.=chr($P<<3|$Q); goto bcont }
+ } else { $T.=chr($P); goto bcont }
+ } elsif ($O==110) { $O=10 }
+ elsif ($O==114) { $O=13 }
+ elsif ($O==116) { $O=9 }
+ elsif ($O== 98) { $O=8 }
+ elsif ($O==102) { $O=12 }
+ }
+ $T.=chr($O)
+ } # WHILE
+ return "" if $depth; # err("unterminated string")
+ $T=~s@([^A-Za-z0-9_.-])@sprintf"\\%03o",ord$1@ge; # make string safe
+ $RET.=" ($T)"; next
+ } elsif ($O==10) { # hex string
+ $O=vec($S,++$I,8);
+ if ($O==60) { $RET.=" <<"; $I++; next }
+ # parse hexadecimal string
+ my $half=0x100;
+ my $T="";
+ while (1) {
+ 1 until $pdf_classify[$O=vec($S,$I++,8)]; # skip whitespace
+ if ($O==62) { $T.=chr($half&0xFF) if $half&0x1000; last } # '>'
+ return undef if $pdf_classify[$O]!=40; # err("unexpected token in hex")
+ if (65<=$O and $O<=70) { $half+=$O-55 }
+ elsif (97<=$O and $O<=102) { $half+=$O-87 }
+ elsif (48<=$O and $O<=57) { $half+=$O-48 }
+ else { return undef } # err("illegal hex digit")
+ if ($half&0x1000) { $T.=chr($half&0xFF); $half=0x100 }
+ else { $half<<=4 }
+ }
+ $T=~s@([^A-Za-z0-9_.-])@sprintf"\\%03o",ord$1@ge; # make string safe
+ $RET.=" ($T)"; next
+ } elsif ($O==19) { # single-line comment
+ $I++ while ($O=vec($S,$I,8))!=13 && $O!=10;
+ ## print STDERR "I=$I L=$L\n";
+ next
+ } else { return undef } # err("token expected") # $O==11, $O==17
+ $I++
+ } ## WHILE
+ ## print STDERR "XI=$I L=$L\n";
+ # die $explicit_term_p;
+ return "" if $explicit_term_p;
+ ($I>$L) ? "" : $RET
+}
+
+# Unit test:
+#die unless pdf_rewrite("hello \n\t world\n\t") eq " hello world";
+#die unless pdf_rewrite('(hel\)lo\n\bw(or)ld)') eq ' (hel\051lo\012\010w\050or\051ld)';
+#die unless pdf_rewrite('(hel\)lo\n\bw(orld)') eq '';
+#die unless pdf_rewrite('[ (hel\)lo\n\bw(or)ld)>>') eq ' [ (hel\051lo\012\010w\050or\051ld) >>';
+#die unless pdf_rewrite('>') eq "";
+#die unless pdf_rewrite('<') eq "";
+#die unless pdf_rewrite('< ') eq "";
+#die unless !defined pdf_rewrite('< <');
+#die unless !defined pdf_rewrite('> >');
+#die unless pdf_rewrite('[ (hel\)lo\n\bw(or)ld) <') eq "";
+#die unless pdf_rewrite("<\n3\t1\r4f5C5 >]") eq ' (1O\134P) ]';
+#die unless pdf_rewrite("<\n3\t1\r4f5C5") eq "";
+#die unless !defined pdf_rewrite("<\n3\t1\r4f5C5]>");
+#die unless pdf_rewrite("% he te\n<\n3\t1\r4f5C5 >]endobj<<") eq ' (1O\134P) ] endobj';
+#die unless pdf_rewrite("") eq "";
+#die unless pdf_rewrite("<<") eq " <<";
+#die unless pdf_rewrite('%hello') eq '';
+#die unless pdf_rewrite("alma\n%korte\n42") eq ' alma 42';
+#die unless pdf_rewrite('/Size 42') eq ' /Size 42';
+#die "OK";
+
+#** Reads a single PDF indirect object (without its stream) from a PDF file.
+#** Does some trivial transformations on it to make later regexp matching
+#** easier. Stops at `stream', `endobj' and `startxref'.
+#** @param $_[0] a filehandle (e.g \*STDIN), correctly positioned in the PDF
+#** file to the beginning of the object data (i.e just before `5 0 obj')
+#** @return string containing PDF source code, or undef on error
+sub pdf_read_obj($) {
+ my $F=$_[0]; my $L=1024; my $M; my $S=""; my $RET;
+ while (1) { # read as much data as necessary
+ return undef if 0>($M=read $F, $S, $L, length($S));
+ $RET=pdf_rewrite($S,1);
+ ## print "($S)\n";
+ return undef if !defined $RET; # parse error
+ return $RET if length $RET; # OK, found object
+ return undef if $M==0; # cannot read more, reached EOF
+ $L<<=1;
+ }
+ #$S=~m@[\000\011\012\014\015\040]*(
+ # %[^\r\n]*[\r\n]|
+ # /?[^\000\011\012\014\015\040<>{}\[\]()/%]*(?=[\000\011\012\014\015\040<>{}\[\]()/%])| # unterminated
+ # <<|>>|\{|}|\[|]|
+ # <[a-fA-F0-9\000\011\012\014\015\040]*>| # hex string
+ # \((?:[^\\()]+|\\[\000-\377])*\)| # literal string, the easy way
+ # \( # an unfinished string, needs special care
+ #)@gx
+}
+
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file, positioned
+#** just before an `xref' table
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4; will be extended
+#** @return the `trailer' section after the `xref'; or undef
+sub pdf_read_xref($$) {
+ # made much faster at Wed Dec 18 09:50:23 CET 2002
+ my $T;
+ my $E;
+ my $F=$_[0];
+ my $XREF=$_[1];
+ return undef if 8>read $F, $T, 1024;
+ return undef unless $T=~s@\A\s*xref\s+(\d+)\s+(\d+)\s+(?=\S)@@;
+ my ($first,$len,$flen);
+ while (1) {
+ ($first,$len)=($1+0,$2+0);
+ ## print " $first + $len\n";
+ $flen=($len*=20)-length($T)+20;
+ return undef unless $flen<1 or $flen==read $F, $T, $flen, length($T);
+ for (my $I=0;$I<$len;$I+=20, $first++) {
+ $E=substr($T, $I, 20);
+ return undef unless $E=~/\A(\d{10})\s(\d{5})\s([nf])\s\s/;
+ ## print "($1 $2 $3)\n";
+ $XREF->[$2+0][$first]=$1+0 if $3 eq 'n';
+ }
+ $E=substr($T, $len);
+ last if $E!~s@\A\s*(\d+)\s*(\d+)\s+(?=\S)@@; # next section
+ $T=$E;
+ }
+
+ # die(-length($T)+$len);
+ ## die tell($F);
+ return undef if length($T)!=$len and !seek $F, -length($T)+$len, 1;
+ ## die tell($F);
+ return undef unless defined($T=pdf_read_obj($F));
+ $XREF->[0][0]=undef if defined $XREF->[0];
+ $XREF->[0][0]=$1+0 if $T=~m@ /Prev (\d+)@; # remember /Prev xref table
+ return undef unless $T=~m@\A trailer( .*) startxref\Z(?!\n)@s;
+ $1
+}
+
+$pdf_last_ref0=0;
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4
+#** @param $_[2] an object number
+#** @param $_[3] a generation number
+#** @return PDF source code of the reference, or undef
+sub pdf_ref($$$$) {
+ my $F=$_[0]; my $XREF=$_[1]; my $ON=$_[2]+0; my $GN=$_[3]+0;
+ my $T;
+ $pdf_last_ref0=$ON if $GN==0;
+ ## print "REF $ON $GN;\n";
+ until (ref $XREF->[$GN] and defined ($T=$XREF->[$GN][$ON])) {
+ return undef if !ref $XREF->[0] or !defined $XREF->[0][0]; # no /Prev entry, `$ON $GN R' not found
+ return undef unless seek $F, $XREF->[0][0], 0;
+ return undef if !defined pdf_read_xref($F,$XREF);
+ }
+ ## print "REF at $T;\n";
+ return undef unless seek $F, $T, 0;
+ return undef unless defined($T=pdf_read_obj($F));
+ ## print "REF=($T);\n";
+ return undef unless $T=~s@\A (\d+) (\d+) obj\b(.*) (endobj|stream)\Z(?!\n)@$3@s;
+ $T
+}
+
+#** Gets a key from a direct dict, and resolves it if it is an indirect object
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4
+#** @param $_[2] a PDF source dict (`<< ... >>') or array
+#** @param $_[3] a key (`/...')
+sub pdf_get($$$$) {
+ my $F=$_[0]; my $XREF=$_[1]; my $S=$_[2]; my $KEY=$_[3]; my $POS=0;
+ my $DEPTH=0; my $IS_DICT; my $C=0; my $N=0;
+ ## print "\n";
+ while ($S=~/\G (\S+)/g) {
+ $C=vec($1,0,8); $POS=pos($S);
+ ## print "($1) $DEPTH $N\n";
+ if ($1 eq '>>' or $1 eq ']') {
+ return undef if 0==$DEPTH--;
+ last if !$DEPTH;
+ $N++ if 1==$DEPTH;
+ }
+ elsif ($DEPTH==1 and !$IS_DICT and $KEY==$N) { $POS=pos($S)-=length($1)+1; goto do_ret }
+ elsif ($1 eq '<<') { $IS_DICT=1 if 0==$DEPTH++ }
+ elsif ($1 eq '[') {
+ if (0==$DEPTH++) {
+ $IS_DICT=0;
+ return undef if $KEY!~/\A(\d+)\Z(?!\n)/; # err("non-numeric key in array")
+ }
+ }
+ elsif (0==$DEPTH) { return undef } # not in a composite object
+ elsif (1!=$DEPTH) { next }
+ elsif (!$IS_DICT) { $N++ }
+ elsif ($C==40) { $N++ } # `(': string or bare name
+ elsif ($C>=47 and $C<=57) { # '/': /name 0..9: number
+ ## print "TRY ($1) KEY=$KEY.\n";
+ next if ($N++&1)==1 or $1 ne $KEY;
+ do_ret:
+ ## print substr($S,pos($S)),";;\n";
+ return pdf_ref $F, $XREF, $1, $2 if $S=~/\G (\d+) (\d+) R\b/gc;
+ ## print substr($S,pos($S)),"::\n";
+ $DEPTH=0;
+ while ($S=~/\G( \S+)/g) {
+ if ($1 eq ' <<' or $1 eq ' [') { $DEPTH++ }
+ elsif ($1 eq ' >>' or $1 eq ' ]') {
+ ## die "($1)\n";
+ return undef if 0==$DEPTH--; # err("nesting")
+ return substr($S,$POS,pos($S)-$POS) if 0==$DEPTH;
+ } elsif ($DEPTH==0) { return $1 }
+ }
+ } else { $N++ } # bare name
+ }
+ return undef if $POS!=length($S); # err("invalid source dict");
+ "" # not found
+}
+
+# Unit test:
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 0) eq ' al';
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 1) eq ' makorte';
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 2) eq ' 42';
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 3) eq '';
+#die unless pdf_get(\*STDIN, 0, ' [ << >> ]', 0) eq ' << >>';
+#die unless pdf_get(\*STDIN, 0, ' [ << >> ]', 1) eq '';
+#die unless pdf_get(\*STDIN, 0, ' [ << >> [ al makorte 42 ] ]', 1) eq ' [ al makorte 42 ]';
+#die unless pdf_get(\*STDIN, 0, ' << /Alma [ 1 2 ] /Korte [ 3 4 ] >>', '/Korte') eq ' [ 3 4 ]';
+#die unless !defined pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', '/Name');
+#die unless !defined pdf_get(\*STDIN, 0, ' << al makorte 42 >>', 42);
+#die unless pdf_get(\*STDIN, 0, ' << al makorte 42 137 >>', 42) eq ' 137';
+#die unless pdf_get(\*STDIN, 0, ' << al makorte >>', 'al') eq "";
+#die "OK";
+
+#** Reported boxes: /MediaBox /CropBox /BleedBox /TrimBox /ArtBox
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4
+#** @param $_[2] a PDF source dict (`<< ... >>') of /Type/Catalog
+#** /Type/Pages or /Type/Page
+#** @param $_[3] hashref to update. $_[3]{BleedBox}[2] will be the URX corner
+#** of the BleedBox
+sub pdf_get_boxes($$$$) {
+ my $F=$_[0]; my $XREF=$_[1]; my $S=$_[2]; my $bbi=$_[3];
+ return if !defined $S;
+ for my $name (qw{MediaBox CropBox BleedBox TrimBox ArtBox}) {
+ my $box=pdf_get($F, $XREF, $S, "/$name");
+ next if !defined $box or !length $box
+ or $box!~m@ \[ ([0-9eE.-]+) ([0-9eE.-]+) ([0-9eE.-]+) ([0-9eE.-]+) \]\Z(?!\n)@
+ or !defined c_numval($1) or !defined c_numval($2) or !defined c_numval($3) or !defined c_numval($4);
+ ($bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=($1+0,$2+0,$3+0,$4+0) if $name eq 'MediaBox';
+ my $name2="Info.$name";
+ ($bbi->{$name2}[0],$bbi->{$name2}[1],$bbi->{$name2}[2],$bbi->{$name2}[3])=($1+0,$2+0,$3+0,$4+0);
+ }
+}
+
+sub import {
+ no strict 'refs';
+ my $package=(caller())[0];
+ shift;
+ for my $p (@_ ? @_ : qw{pdf_get_boxes pdf_get pdf_read_xref pdf_read_obj
+ pdf_rewrite pdf_ref}) { *{$package."::$p"}=\&{$p} }
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/papers.pm'}='Htex/papers.pm'} {
+package Htex::papers;
+# contains paper size information
+# by pts@fazekas.hu at Sun Dec 22 00:30:58 CET 2002
+use just;
+use integer;
+use strict;
+use Htex::dimen;
+
+my @papers=(
+#
+# paper.txt
+# by pts@fazekas.hu at Tue Jan 16 18:21:59 CET 2001
+# by pts@fazekas.hu at Tue Jan 16 19:13:16 CET 2001
+#
+# Examined: dvips, gs, libpaperg
+#
+# all units are measured in Big Points (bp)
+# 72 bp == 1 in
+# 2.54 cm == 1 in
+#
+# papername width height
+qw{Comm10 297 684},
+qw{Monarch 279 540},
+qw{halfexecutive 378 522},
+
+qw{Legal 612 1008},
+qw{Statement 396 612},
+qw{Tabloid 792 1224},
+qw{Ledger 1224 792},
+qw{Folio 612 936},
+qw{Quarto 610 780},
+qw{7x9 504 648},
+qw{9x11 648 792},
+qw{9x12 648 864},
+qw{10x13 720 936},
+qw{10x14 720 1008},
+qw{Executive 540 720},
+qw{ISOB0 2835 4008},
+qw{ISOB1 2004 2835},
+qw{ISOB2 1417 2004},
+qw{ISOB3 1001 1417},
+qw{ISOB4 709 1001},
+qw{ISOB5 499 709},
+qw{ISOB6 354 499},
+qw{ISOB7 249 354},
+qw{ISOB8 176 249},
+qw{ISOB9 125 176},
+qw{ISOB10 88 125},
+qw{C7 230 323},
+qw{DL 312 624},
+
+qw{a3 842 1190}, # defined by Adobe
+qw{a4 595 842}, # defined by Adobe; must precede a4small
+
+# a4small should be a4 with an ImagingBBox of [25 25 570 817].},
+qw{a4small 595 842},
+qw{letter 612 792}, # must precede lettersmall
+# lettersmall should be letter with an ImagingBBox of [25 25 587 767].
+qw{lettersmall 612 792},
+# note should be letter (or some other size) with the ImagingBBox
+# shrunk by 25 units on all 4 sides.
+qw{note 612 792},
+qw{letterLand 792 612},
+# End of Adobe-defined page sizes
+
+qw{a0 2380 3368},
+qw{a1 1684 2380},
+qw{a2 1190 1684},
+qw{a5 421 595},
+qw{a6 297 421},
+qw{a7 210 297},
+qw{a8 148 210},
+qw{a9 105 148},
+qw{a10 74 105},
+qw{b0 2836 4008},
+qw{b1 2004 2836},
+qw{b2 1418 2004},
+qw{b3 1002 1418},
+qw{b4 709 1002},
+qw{b5 501 709}, # defined by Adobe
+
+qw{a0Land 3368 2380},
+qw{a1Land 2380 1684},
+qw{a2Land 1684 1190},
+qw{a3Land 1190 842},
+qw{a4Land 842 595},
+qw{a5Land 595 421},
+qw{a6Land 421 297},
+qw{a7Land 297 210},
+qw{a8Land 210 148},
+qw{a9Land 148 105},
+qw{a10Land 105 74},
+qw{b0Land 4008 2836},
+qw{b1Land 2836 2004},
+qw{b2Land 2004 1418},
+qw{b3Land 1418 1002},
+qw{b4Land 1002 709},
+qw{b5Land 709 501},
+
+qw{c0 2600 3677},
+qw{c1 1837 2600},
+qw{c2 1298 1837},
+qw{c3 918 1298},
+qw{c4 649 918},
+qw{c5 459 649},
+qw{c6 323 459},
+
+# vvv U.S. CAD standard paper sizes
+qw{archE 2592 3456},
+qw{archD 1728 2592},
+qw{archC 1296 1728},
+qw{archB 864 1296},
+qw{archA 648 864},
+
+qw{flsa 612 936}, # U.S. foolscap
+qw{flse 612 936}, # European foolscap
+qw{halfletter 396 612},
+qw{csheet 1224 1584}, # ANSI C 17x22
+qw{dsheet 1584 2448}, # ANSI D 22x34
+qw{esheet 2448 3168}, # ANSI E 34x44
+qw{17x22 1224 1584}, # ANSI C 17x22
+qw{22x34 1584 2448}, # ANSI D 22x34
+qw{34x44 2448 3168}, # ANSI E 34x44
+);
+
+#** @param $_[0] width, in bp
+#** @param $_[1] height, in bp
+#** @return () or ("papername", width.bp, height.bp)
+sub valid_bp($$;$$) {
+ no integer;
+ my ($W1,$H1)=(defined$_[2]?$_[2]:0,defined$_[3]?$_[3]:0);
+ my ($WW,$HH)=(Htex::dimen::dimen2bp($_[0]-$W1), Htex::dimen::dimen2bp($_[1]-$H1));
+ # Dat: 1mm == 720/254bp; 3mm =~ 8.5bp
+ no integer;
+ for (my $I=0; $I<@papers; $I+=3) {
+ return @papers[$I,$I+1,$I+2] if abs($papers[$I+1]-$WW)<=8.5 and abs($papers[$I+2]-$HH)<=8.5;
+ }
+ ()
+}
+
+#** @param $_[0] "width width_unit, height, height_unit"
+#** @return () or ("papername", width.bp, height.bp)
+sub valid($) { # valid_papersize
+ my $S=lc shift;
+ $S=~/^\s*(\d+(\.\d+)?)\s*([a-z][a-z0-9]+)\s*,\s*(\d+(\.\d+)?)\s*([a-z][a-z0-9]+)\s*\Z(?!\n)/ ?
+ valid_bp("$1$3","$4$6") : ();
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/img_bbox.pm'}='Htex/img_bbox.pm'}
+
+package Htex::img_bbox;
+# img_bbox.pa -- extract file format and size from image files
+# This file contains embedded perldoc(1) POD documentation.
+# by pts@fazekas.hu at Sat Dec 7 21:31:01 CET 2002
+# JustLib2 at Sat Dec 21 21:29:21 CET 2002
+#
+# img_bbox.pl is a standalone Perl script that can extract file format,
+# width, height, bounding box and
+# other meta-information from image files. Supported vector formats are:
+# PDF, Flash SWF, EPS, PS, DVI and FIG. Supported raster image formats are:
+# GIF, JPEG, PNG, TIFF, XPM, XBM1, XBM, PNM, PBM, PGM, PPM, PCX, LBM, other
+# IFF, Windows and OS/2 BMP, MIFF, Gimp XCF, Windows ICO, Adobe PSD, FBM,
+# SunRaster, CMUWM, Utah RLE, Photo CD PCD, XWD, GEM, McIDAS, PM, SGI IRIS,
+# FITS, VICAR, PDS, FIT, Fax G3, Targa TGA and Faces.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Extracting the image size is not supported for: other IFF, FIG.
+#
+#
+use just 1;
+use integer; # important
+use strict; # not so important
+# use Htex::ImgBBox qw(calc -PDF -paper);
+use Htex::ImgBBox qw(calc);
+
+sub delete0($$) {
+ delete $_[0]{$_[1]};
+ ""
+}
+
+#** @param $_[0] $bbi hashref
+#** @return a multiline dump of all key--value pairs, sorted by key
+sub all($) {
+ my $bbi=$_[0];
+ my $RET="";
+ for my $key (sort keys %$bbi) { if (1<length $key) {
+ my $val=$bbi->{$key};
+ $RET.=" $key = ".(ref($val)eq'ARRAY' ? "[ @$val ]\n" : "$val\n");
+ } }
+ $RET
+}
+
+my %texq;
+#** @param $_[0] arbitrary binary string
+#** @return the string quoted, so it can be safely placed inside TeX
+#** \message{...} or \special{...}
+sub texq($) {
+ if (!keys %texq) {
+ $texq{' '}='\iftrue\space\fi '; # won't collapse two spaces into one
+ $texq{'\\'}='\expandafter\@secondoftwo\string\\\\';
+ $texq{'{'}='\expandafter\@secondoftwo\string\{';
+ $texq{'}'}='\expandafter\@secondoftwo\string\}';
+ $texq{'%'}='\expandafter\@secondoftwo\string\%';
+ $texq{'#'}='\expandafter\@secondoftwo\string\#';
+ $texq{'^'}='\expandafter\@secondoftwo\string\^'; # no danger of ^^
+ $texq{'~'}='\expandafter\@secondoftwo\string\~';
+ $texq{'`'}='\expandafter\@secondoftwo\string\`';
+ $texq{'"'}='\expandafter\@secondoftwo\string\"';
+ # vvv will work only if the token is expanded only once
+ #$texq{'~'}='\noexpand~';
+ #$texq{'`'}='\noexpand`';
+ #$texq{'"'}='\noexpand"';
+ }
+ my $S=$_[0];
+ $S=~s@(\W)@exists$texq{$1}?$texq{$1}:$1@ge;
+ $S=~s~([\000-\037\177-\377])~sprintf"\\expandafter\\\@secondoftwo\\string\\^^%02x",ord$1~ge;
+ $S
+}
+
+sub aq($$) {
+ $_[0] eq ":t" ? texq($_[1]) : $_[1]
+}
+
+my $t_short="%{FileName} %{FileFormat:-??} %{LLX:-??} %{LLY:-??} %{URX:-??} %{URY:-??}%{Paper?+ %{Paper}}%{Error?+ error:%{Error}}\n";
+my $t_long="%{FileName}%{FileName?0}\n%{all}";
+# my $t_tex='\graphicPmeta{%{FileName:t}%{c}{%{FileFormat:-?}%{c}{%{LLX:-?}%{c}{%{LLY:-?}%{c}{%{URX:-?}%{c}{%{URY:-?}%{c}%{n}';
+my $t_tex='\graphicPmeta{%{FileName:t}%{c}{%{FileFormat:-?}%{SubFormat?+.%{SubFormat}}%{c}{%{LLX:-?}%{c}{%{LLY:-?}%{c}{%{URX:-?}%{c}{%{URY:-?}%{c}%{n}';
+
+sub compile_template($) {
+ my $template=$_[0];
+ # convert $template to Perl code
+ $template=~s@([\\'])@\\$1@g;
+ $template=~s@([}])|[%][{]([\w.-]+)(:t)?(:-|[?][+0-]|)@
+ defined($1) ? "').'" :
+ $4 eq "" && $2 eq "all" ? "'.(all(\$bbi).'" :
+ $4 eq "" ? "'.(!defined\$bbi->{'$2'}?'':aq('".($3||"")."',\$bbi->{'$2'}).'" :
+ $4 eq "?+" ? "'.(!defined\$bbi->{'$2'}?'':'" :
+ $4 eq "?-" ? "'.(defined\$bbi->{'$2'}?'':'" :
+ $4 eq ":-" ? "'.(defined\$bbi->{'$2'}?aq('".($3||"")."',\$bbi->{'$2'}):'" :
+ $4 eq "?0" ? "'.(delete0(\$bbi,'$2').'" :
+ "[$1]($2)($4)" # should never happen
+ @ge;
+ my $sub=eval "sub { my \$bbi=\$_[0]; '$template' }";
+ die "$0: template syntax error: $@" if $@ or ref($sub) ne 'CODE';
+ $sub
+}
+
+sub work($$) {
+ my($sub,$filename)=@_;
+ my $bbi;
+ # die "$0: $filename: $!\n" unless open F, "< $filename";
+ if (open F, "< $filename") {
+ ## print STDERR "$filename\n";
+ $bbi=calc(\*F);
+ } else {
+ $bbi->{Error}="open: $!"
+ }
+ $bbi->{FileName}=$filename;
+ $bbi->{n}="\n";
+ $bbi->{p}="%";
+ $bbi->{c}="}";
+ print $sub->($bbi);
+}
+
+sub usage() {
+ die "This is img_bbox.pl by pts\@fazekas.hu, version 0.08
+This program is free software, licensed under the GNU GPL.
+This software comes with absolutely NO WARRANTY. Use at your own risk!
+
+Usage: $0 [<template>] <filename.image> [...]
+Template is one of: -- --short --long --tex --template <t>
+
+I can extract file format, width, height, bounding box and other
+meta-information from image files. Run this to get more docs:
+ perldoc '$0'\n"
+}
+
+just::main;
+
+usage if !@ARGV;
+
+my $template=$t_short;
+if ($ARGV[0] eq '--' or $ARGV[0] eq '--short') { }
+elsif ($ARGV[0] eq '--long') { $template=$t_long; shift @ARGV }
+elsif ($ARGV[0] eq '--tex') { $template=$t_tex; shift @ARGV }
+elsif ($ARGV[0] eq '--template') { usage if @ARGV<2; $template=$ARGV[1]; splice @ARGV, 0, 2 }
+elsif ($ARGV[0]=~/\A--/) { goto usage }
+
+my $sub=compile_template($template);
+for my $filename (@ARGV) { work $sub, $filename }
+
+__END__
+
+=begin man
+
+.ds pts-dev \*[.T]
+.do if '\*[.T]'ascii' .ds pts-dev tty
+.do if '\*[.T]'ascii8' .ds pts-dev tty
+.do if '\*[.T]'latin1' .ds pts-dev tty
+.do if '\*[.T]'nippon' .ds pts-dev tty
+.do if '\*[.T]'utf8' .ds pts-dev tty
+.do if '\*[.T]'cp1047' .ds pts-dev tty
+.do if '\*[pts-dev]'tty' \{\
+.ll 79
+.pl 33333v
+.nr IN 2n
+.\}
+.ad n
+
+=end
+
+=head1 NAME
+
+img_bbox.pl - Extract file format and size from image files
+
+=head1 SYNOPSIS
+
+C<B<img_bbox.pl>>
+ S<[ C<--> | C<--short>>
+ S<| C<--long>>
+ S<| C<--tex>>
+ S<| C<--template> I<template> ]>
+ S<I<filename.image>> S<[ ... ]>
+
+=head1 DESCRIPTION
+
+img_bbox.pl is a standalone Perl script that can extract file format,
+width, height, bounding box and
+other meta-information from image files. Supported vector formats are:
+PDF, Flash SWF, EPS, PS, DVI and FIG. Supported raster image formats are:
+GIF, JPEG, PNG, TIFF, XPM, XBM1, XBM, PNM, PBM, PGM, PPM, PCX, LBM, other
+IFF, Windows and OS/2 BMP, MIFF, Gimp XCF, Windows ICO, Adobe PSD, FBM,
+SunRaster, CMUWM, Utah RLE, Photo CD PCD, XWD, GEM, McIDAS, PM, SGI IRIS,
+FITS, VICAR, PDS, FIT, Fax G3, Targa TGA and Faces.
+
+img_bbox.pl writes the extracted information to STDOUT, in a format
+determined by the template specified on the command line. The default
+template is C<--short>. Templates are:
+
+=over 10
+
+=item C<--short>
+
+writes the file name, file format and the four
+bounding box coordinates (lower left x, lower left y, upper right x, upper
+right y), separated by spaces.
+
+=item C<--long>
+
+writes a multi-line entry for each file containing all key--value pairs
+that img_bbox.pl was able to extract.
+
+=item C<--tex>
+
+writes output suitable for C<\input> in TeX. The file name, file format and
+bounding box is dumped
+
+=item C<--pat>
+
+lets the user specify an individual pattern, see later.
+
+=back
+
+=head1 PATTERNS
+
+Individual patterns can be specified after C<--pat>. Built-in patterns are:
+
+ --short: %{FileName} %{FileFormat:-??} %{LLX:-??} %{LLY:-??} %{URX:-??} %{URY:-??}%{Paper?+ %{Paper}}%{Error?+ error:%{Error}}%{n}
+ --long : %{FileName}%{FileName?0}%{n}%{all}
+ --tex : \graphicPmeta{%{FileName:t}%{c}{%{FileFormat:-?}%{c}{%{LLX:-?}%{c}{%{LLY:-?}%{c}{%{URX:-?}%{c}{%{URY:-?}%{c}%{n}
+
+Expressions of the form
+ C<%{> I<key> [ I<quoting> ] I<method> I<body> C<}>
+ are substituted.
+
+I<key>s of interest will be enumerated later in this subsection.
+
+I<quoting> is one of
+
+=over 7
+
+=item (none)
+
+The string is inserted as-is.
+
+=item C<:t>
+
+Quotes all TeX and LaTeX control characters.
+
+=back
+
+The interpretation of I<body> depends on I<method>. The default action is to
+append the contents of I<body> verbatim after the substitution. I<body> is
+an empty string most of the time.
+
+I<method> is one of
+
+=over 7
+
+=item (none)
+
+Expands to the value of I<key>, or an empty string. I<body> must be empty.
+
+=item C<:->
+
+Expands to the value of I<key>, or I<body>.
+
+=item C<?0>
+
+Deletes I<key>, and expands to I<body>.
+
+=item C<?+>
+
+Expands to I<body> if I<key> exists, or an empty string.
+
+=item C<?->
+
+Expands to I<body> if I<key> is missing, or an empty string.
+
+=back
+
+I<key>s of interest are:
+
+=over 20
+
+=item n
+
+a newline
+
+=item p
+
+a percent sign
+
+=item c
+
+a close brace
+
+=item all
+
+A detailed, multi-line key--value listing of all information extracted, as
+output by the C<--long> template.
+
+=item FileName
+
+=item FileFormat
+
+=item SubFormat
+
+=item LLX
+
+Zero for most file formats.
+
+=item LLY
+
+Zero for most file formats.
+
+=item URX
+
+The width for most file formats.
+
+=item URY
+
+The height for most file formats.
+
+=item SamplesPerPixel
+
+=item BitsPerSample
+
+=item ColorSpace
+
+Gray, RGB, YCbCr, CMYK, YCCK, Indexed etc.
+
+=item Error
+
+the first I/O or other error
+
+=item Info.
+
+various file format specific keys begin with C<Info.>
+
+=item Val.
+
+various key--value pairs read from the file, beginning with C<Val.>
+
+=item Info.MediaBox
+
+PDF only
+
+=item Info.CropBox
+
+PDF only
+
+=item Info.BleedBox
+
+PDF only
+
+=item Info.TrimBox
+
+PDF only
+
+=item Info.ArtBox
+
+PDF only
+
+=item Info.Compression
+
+TIFF only
+
+=item Info.NewSubfileType
+
+TIFF only
+
+=item Info.PhotometricInterpretation
+
+TIFF only
+
+=item Info.Thresholding
+
+TIFF only
+
+=item Info.CellWidth
+
+TIFF only
+
+=item Info.CellLength
+
+TIFF only
+
+=item Info.FillOrder
+
+TIFF only
+
+=item Info.Orientation
+
+TIFF only
+
+=item Info.RowsPerStrip
+
+TIFF only
+
+=item Info.MinSampleValue
+
+TIFF only
+
+=item Info.MaxSampleValue
+
+TIFF only
+
+=item Info.PlanarConfiguration
+
+TIFF only
+
+=item Info.GrayResponseUnit
+
+TIFF only
+
+=item Info.ResolutionUnit
+
+TIFF only
+
+=item Info.ExtraSamples
+
+TIFF only
+
+=item Info.hvs
+
+JPEG only
+
+=item Info.id_rgb
+
+JPEG only
+
+=item Info.had_jfif
+
+JPEG only
+
+=item Info.ColorTransform
+
+JPEG only
+
+=item Info.binary
+
+Clean7Bit, Clean8Bit or Binary. PDF and PS only
+
+=item Info.linearized
+
+PDF only
+
+=item Info.denominator
+
+DVI only
+
+=item Info.nominator
+
+DVI only
+
+=item Info.version_id
+
+DVI only
+
+
+=item Info.maginification
+
+DVI only
+
+
+=item Info.jobname
+
+DVI only
+
+=item Info.page1_nr
+
+DVI only
+
+=item Info.special
+
+DVI only
+
+=item Info.colors
+
+ICO only
+
+=item Info.reserved
+
+ICO only
+
+
+=item Info.planes
+
+ICO only
+
+
+=item Info.credits
+
+FBM only
+
+=item Info.title
+
+FBM only
+
+=item Info.planes
+
+FBM only
+
+=item Info.bits
+
+FBM only
+
+=item Info.rowlen
+
+FBM only
+
+=item Info.plnlen
+
+FBM only
+
+=item Info.clrlen
+
+FBM only
+
+=item Info.hlen
+
+GEM only
+
+=item Info.colors
+
+GEM only
+
+=item Info.patlen
+
+GEM only
+
+=item Info.llen
+
+GEM only
+
+=item Info.lines
+
+GEM only
+
+=item Info.num_planes
+
+PM only
+
+=item Info.num_bands
+
+PM only
+
+=item Info.pixel_format
+
+PM only
+
+=item Info.compression
+
+SGI only
+
+=item Info.comment
+
+SGI only
+
+=item Info.bits_per_pixel
+
+FITS only
+
+=item Info.num_axis
+
+FITS only
+
+=item Info.depth
+
+FITS only
+
+=item Info.data_max
+
+FITS only
+
+=item Info.data_min
+
+FITS only
+
+=back
+
+=head1 LICENSE
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+=head1 AUTHOR
+
+Szabó Péter <F<pts@fazekas.hu>>
+
+=head1 SEE ALSO
+
+file(1)
diff --git a/macros/latex/exptl/graphicp/keyvalx.sty b/macros/latex/exptl/graphicp/keyvalx.sty
new file mode 100644
index 0000000000..a678a63b5a
--- /dev/null
+++ b/macros/latex/exptl/graphicp/keyvalx.sty
@@ -0,0 +1,76 @@
+%
+% keyvalx.sty
+% by pts@fazekas.hu at Fri Jan 24 12:27:05 CET 2003
+%
+% Works with laemu.sty. Based on standard LaTeX keyval.sty.
+%
+\expandafter\ifx\csname ifLaTeX\endcsname\relax\input laemu.sty\relax\fi%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{keyvalx}
+ [1999/03/16 v1.13 key=value parser (DPC)]
+\def\setkeys#1#2{%
+ \def\KV@prefix{KV@#1@}%
+ \let\@tempc\relax
+ \KV@do#2,\relax,}
+\def\KV@do#1,{%
+ \ifx\relax#1\empty\else
+ \KV@split#1==\relax
+ \expandafter\KV@do\fi}
+\def\KV@split#1=#2=#3\relax{%
+ \KV@@sp@def\@tempa{#1}%
+ \ifx\@tempa\@empty\else
+ \expandafter\let\expandafter\@tempc
+ \csname\KV@prefix\@tempa\endcsname
+ \ifx\@tempc\relax
+ \KV@errx
+ {key \@tempa\space in \KV@prefix\space undefined}%
+ \else
+ \ifx\@empty#3\@empty
+ \KV@default
+ \else
+ \KV@@sp@def\@tempb{#2}%
+ \expandafter\@tempc\expandafter{\@tempb}\relax
+ \fi
+ \fi
+ \fi}
+\def\KV@default{%
+ \expandafter\let\expandafter\@tempb
+ \csname\KV@prefix\@tempa @default\endcsname
+ \ifx\@tempb\relax
+ \KV@err{No value specified for \@tempa}%
+ \else
+ \@tempb\relax
+ \fi}
+
+%**** pts ****
+%\DeclareOption{unknownkeysallowed}{%
+% \def\KV@errx#1{\PackageInfo{keyval}{#1}}}
+%\DeclareOption{unknownkeyserror}{%
+% \def\KV@errx#1{\PackageError{keyval}{#1}\@ehc}}
+%\ExecuteOptions{unknownkeyserror}
+%\let\KV@err\KV@errx
+%\ProcessOptions
+\def\KV@errx#1{\PackageError{keyval}{#1}\@ehc}%
+\let\KV@err\KV@errx
+
+\def\@tempa#1{%
+\def\KV@@sp@def##1##2{%
+ \futurelet\KV@tempa\KV@@sp@d##2\@nil\@nil#1\@nil\relax##1}%
+\def\KV@@sp@d{%
+ \ifx\KV@tempa\@sptoken
+ \expandafter\KV@@sp@b
+ \else
+ \expandafter\KV@@sp@b\expandafter#1%
+ \fi}%
+\def\KV@@sp@b#1##1 \@nil{\KV@@sp@c##1}%
+ }
+\@tempa{ }
+\def\KV@@sp@c#1\@nil#2\relax#3{\KV@toks@{#1}\edef#3{\the\KV@toks@}}
+\newtoks\KV@toks@
+\def\define@key#1#2{%
+ \@ifnextchar[{\KV@def{#1}{#2}}{\@namedef{KV@#1@#2}####1}}
+\def\KV@def#1#2[#3]{%
+ \@namedef{KV@#1@#2@default\expandafter}\expandafter
+ {\csname KV@#1@#2\endcsname{#3}}%
+ \@namedef{KV@#1@#2}##1}
+\endinput
diff --git a/macros/latex/exptl/graphicp/laemu.sty b/macros/latex/exptl/graphicp/laemu.sty
new file mode 100644
index 0000000000..2dd8868d56
--- /dev/null
+++ b/macros/latex/exptl/graphicp/laemu.sty
@@ -0,0 +1,206 @@
+%
+% laemu.sty -- helper TeX macros and LaTeX emulation for plain TeX + LaTeX
+% by pts@fazekas.hu at Fri Jan 24 11:14:34 CET 2003
+%
+% To use this package from LaTeX, type
+%
+% \usepackage{laemu}
+%
+% To use this package from either LaTeX, plain TeX or AMSTeX, type
+%
+% \input laemu.sty
+%
+% As an alternative, the following solution will open laemu.sty only once:
+%
+% \expandafter\ifx\csname usepackage\endcsname\relax%
+% \def\usepackage#1{\input#1.sty\relax}\fi%
+% \usepackage{laemu}
+% % this ensures that laemu.sty won't be loaded twice
+%
+% Tho use further packages from any TeX formats, type
+%
+% \usepackage{...PACKAGENAME...}
+%
+
+% vvv Don't load laemu.sty more than once
+\expandafter\ifx\csname ifLaTeX\endcsname\relax\else\expandafter\endinput\fi
+
+\newif\ifWasLetter% false
+\ifnum\the\catcode`\@=\the\catcode`\a\relax\WasLettertrue\fi%
+\catcode`\@=11% early \makeatletter
+
+%** Are we running a real LaTeX?
+\newif\ifLaTeX% default to false
+%** Sets \ifLaTeX to (#1 == 'L' && #2 == 'a')
+\def\@@setlatex#1#2#3\end{%
+ \if#1L\if#2a\LaTeXtrue\else\LaTeXfalse\fi\fi%
+}%
+% Dat: \fmtname is "plain", "LaTeX2e" or "AmS-TeX"
+\expandafter\@@setlatex\fmtname\end%
+
+\ifLaTeX%
+ %\PackageError{laemu}{alma}\@ehc
+ %** Calls #1{...}, where ... is the comma-separated option list for the
+ %** current package.
+ %** Arranges that these options won't be found at \endinput
+ %** Example: \LaemuProcessOptions\errmessage
+ %** @param #1 a \cs
+ \def\LaemuProcessOptions#1{%
+ \edef\reserved@a{\noexpand#1{\@ptionlist{\@currname.\@currext}}}%
+ \reserved@a
+ \AtEndOfPackage{\def\@unprocessedoptions{}}%
+ }%
+\else%
+ \expandafter\let\csname opt@laemu.sty\endcsname\@empty% loaded ourselves
+ \long\def\@gobble#1{}%
+ \def\@ehc{No help here.}%
+ \newlinechar=`\^^J%
+ \def\on@line{ in line \the\inputlineno}% so it can be \@gobble-d
+ \def\NeedsTeXFormat#1{}% ignore
+ \def\ProvidesPackage#1#2[#3]{\makeatletter}% so `\input MYPKG.sty' works
+ % Dat: use \MessageBreak to separate error/warning/info lines
+ \def\PackageWarning#1#2{% Imp: robust
+ \def\MessageBreak{^^Jw: (#1) }%
+ % vvv Dat: line number refers to place of the \PackageWarning invocation
+ \immediate\write16{^^JPackage #1 Warning: #2\on@line.^^J}%
+ }%
+ \def\PackageInfo#1#2{% Imp: robust
+ \def\MessageBreak{^^Ji: (#1) }%
+ % vvv Dat: line number refers to place of the \PackageWarning invocation
+ \immediate\write-1{Package #1 Info: #2\on@line.}%
+ }%
+ \def\PackageError#1#2#3{\begingroup% Imp: robust
+ % Dat: real LaTeX \GenericError doesn't print stupid macro expansions
+ % after the error message. We cannot emulate it here, possibly because it
+ % this \PackageError should have been put into the format file (??)
+ \immediate\write16{}% an empty line
+ \def\MessageBreak{^^J!: (#1) }%
+ % vvv Dat: line number refers to place of the \PackageWarning invocation
+ \edef\@err@{{Package #1 Error: #2\MessageBreak#3}}%
+ \errhelp\@err@%
+ %\let\@err@\empty%
+ \errmessage{Package #1 Error: #2^^J!, See the package #1 docs for explanation}%
+ %~%
+ \endgroup}%
+ %
+ %** `\RequirePackage{package}' loads package.sty unless already loaded
+ %** `\RequirePackage[option]{package}'
+ %** `\RequirePackage[option1,option2,option3]{package}'
+ \def\RequirePackage{%
+ % Imp: allow optional arguments
+ % Imp: show a warning of loading with different arguments
+ \@ifnextchar[%]
+ {\@@RequirePackage@lowa}%
+ {\@@RequirePackage@lowa[]}%
+ }%
+ \def\@@RequirePackage@lowa[#1]#2{%
+ % Imp: add/strip ".sty" from end of #1
+ \@@RequirePackage@lowb{#2.sty}{#1}%
+ }%
+ %** {current.sty}{lower.sty}....%
+ \def\@@laemu@packagestack{.}% Imp: save \catcode64
+ %** \def#1{...}, where ... is the current package filename
+ \def\@@laemu@packagetop#1{%
+ %\message{T(\@@laemu@packagestack)}%
+ \expandafter\@@laemu@packagetop@low\@@laemu@packagestack#1%
+ }%
+ \def\@@laemu@packagetop@low#1#2.#3{%
+ % Dat: #2 is invalid now (braces may be stripped), don't use it
+ \def#3{#1}%
+ }%
+ \def\@@laemu@packagepop{% Imp: error on underflow
+ %\message{P(\@@laemu@packagestack)}%
+ \global\edef\@@laemu@packagestack{\expandafter\@gobble\@@laemu@packagestack}%
+ %\expandafter\@@laemu@packagepop@low\@@laemu@packagestack% doesn't work well
+ }%
+ %\def\@@laemu@packagepop@low#1#2.{% SUXX: removes brace from {y} in {x}{y}.
+ % \message{Q(#1,#2)}%
+ % \global\edef\@@laemu@packagestack{#2.}%
+ % \message{R(\@@laemu@packagestack)}%
+ %}%
+ \def\@@laemu@packagepush#1{%
+ \global\edef\@@laemu@packagestack{{#1}\@@laemu@packagestack}%
+ %\message{E(\@@laemu@packagestack)}%
+ }%
+ %** @param #1 filename with `.sty'
+ %** @param #2 options
+ \def\@@RequirePackage@lowb#1#2{%
+ \expandafter\ifx\csname opt@#1\endcsname\relax%
+ \expandafter\def\csname opt@#1\endcsname{#2}%
+ %\ifcat \noexpand @\noexpand a%
+ \@@laemu@packagepush{#1}%
+ \ifnum\the\catcode`\@=\the\catcode`\a\relax% Dat: \ifcat is wrong, because we need the _current_ value (at the time of execution)
+ \input#1\relax%
+ \else%
+ \makeatletter%
+ \input#1\relax%
+ \makeatother%
+ \fi%
+ \@@laemu@packagepop%
+ \else% package already loaded -- verify options
+ \def\reserved@a{#2}%
+ % Imp: allow \usepackage[a,b]{c} and \usepackage[b,a]{c}
+ % Dat: LaTeX \def's comma-separated-values to \csname opt@graphic.p.sty\endcsname
+ \expandafter\ifx\csname opt@#1\endcsname\reserved@a\else%
+ \PackageError{laemu}{Option clash for package file `#1'}{%
+ Old options: \csname opt@#1\endcsname\MessageBreak%
+ New options: \reserved@a
+ }%
+ \fi%
+ \let\reserved@a\@empty
+ \fi%
+ }%
+ \let\usepackage\RequirePackage%
+ % vvv see full comment above
+ \def\LaemuProcessOptions#1{%
+ \@@laemu@packagetop\reserved@a%
+ \edef\reserved@a{\noexpand#1{\csname opt@\reserved@a\endcsname}}%
+ \reserved@a
+ }%
+ %
+ \def\makeatletter{\catcode`\@11\relax}%
+ \def\makeatother{\catcode`\@12\relax}%
+ \def\@empty{}% not needed for LaTeX, needed for plain TeX
+ \long\def\@secondoftwo#1#2{#2}%
+ \def\@namedef#1{\expandafter\def\csname #1\endcsname}%
+ \def\@nameuse#1{\csname #1\endcsname}%
+ \expandafter\ifx\csname @ne\endcsname\relax \chardef\@ne=1\fi%
+ %
+ \long\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+ \def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+ \def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+ \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch}%
+ \expandafter\ifx\csname @inputcheck\endcsname\relax%
+ \newread\@inputcheck%
+ \fi%
+\fi%
+
+%** \input's a file if it exists
+%** @param #1 filename
+\def\LaemuInputQuiet#1{%
+ \openin\@inputcheck#1 %
+ \ifeof\@inputcheck\else%
+ \closein\@inputcheck%
+ \input#1 %
+ \fi
+}%
+
+%\PackageWarning{laemu}{alma\MessageBreak korte}
+%\PackageInfo{laemu}{ialma\MessageBreak korte}
+%\PackageError{laemu}{ialma\MessageBreak korte}\@ehc
+
+\ifWasLetter\else\makeatother\fi%
diff --git a/macros/latex/exptl/graphicp/laltest.tex b/macros/latex/exptl/graphicp/laltest.tex
new file mode 100644
index 0000000000..01013f602a
--- /dev/null
+++ b/macros/latex/exptl/graphicp/laltest.tex
@@ -0,0 +1,166 @@
+%
+% latest.tex -- both plain TeX and LaTeX
+% by pts@fazekas.hu at Fri Jan 24 11:24:28 CET 2003
+% at Mon Feb 3 16:21:04 CET 2003
+%
+
+\input laemu.sty
+
+\ifLaTeX
+ \documentclass{article}
+ \usepackage[magyar]{babel}
+ %\usepackage[german]{babel}
+ \usepackage[latin2]{inputenc}
+\fi
+
+%\expandafter\ifx\csname usepackage\endcsname\relax%
+% \def\usepackage#1{\input#1.sty\relax}\fi%
+%\usepackage{laemu}
+%\usepackage{pts_img}
+
+%\usepackage[nopdftexmpost]{graphicp}
+\usepackage{graphicp}
+%\usepackage[alma,korte]{graphicp}
+
+\ifLaTeX
+ \begin{document}
+\fi
+
+\makeatletter
+
+\ifLaTeX
+ Hello, LaTeX!
+\else
+ Hello, other.
+\fi
+
+%\@@muldivletposdim{\dimen3}{-2.99998pt}{2.83466pt}{1pt}% Imp: precision!! should be 8.50392
+% \immediate\write16{t9(-8.50394):\the\dimen3}% Division is not that exact...
+
+% \message{\@@divhundred{345.6}}%
+% \@@letdimcount{\count0}{0.5pt} \showthe\count0%
+
+%\@@gobbleend almakorte\end szilva
+
+%\expandafter\ifx\csname graphicPdriver
+%\@@setdriver{dvips}
+%\@@setdriver{pdftex}
+%\@@setdriver{dvipdfm}
+%\@@setdriver{}
+%\@@setdriver{}
+%
+%
+\setbox0=\vbox{\hsize=9cm
+\hrule width 5cm
+\noindent
+Hello,%
+\@@PutImage{}{}.{{3bp}{-10bp}{23bp}{20bp}}{0pt}{0pt}{0}{f2cletter.\@@img@defext}{}%
+%\unskip%
+World!
+
+\par\noindent
+2Hello,%
+\@@PutImage{}{}.{{3bp}{-10bp}{23bp}{20bp}}{3cm}{0pt}{0}{f2cletter.\@@img@defext}{}%
+World!
+\hrule width 4cm
+
+\par\noindent
+Hello,%
+\@@PutImage{}{}.{{3bp}{-10bp}{23bp}{20bp}}{0pt}{3cm}{0}{f2cletter.\@@img@defext}{}%
+World!
+
+\par\noindent
+Hello,%
+\@@PutImage{}{}.{{3bp}{-10bp}{23bp}{20bp}}{2cm}{3cm}{0}{f2cletter.\@@img@defext}{}%
+World!
+
+\par\noindent
+Hello,%
+%\includegraphics[width=2cm,height=3cm,noclip]{f2cletter.\@@img@defext}%
+\includegraphics[width=2cm,height=3cm,noclip]{f2mletter}%
+ZWorld!
+\par
+\hrule
+
+\noindent
+Hello,%
+%\includegraphics[bbox={{0}{0}{20bp}{30bp}},width=20bp,height=30bp,noclip]{ficletter.png}% only in pdfTeX and dvipdfm
+%\includegraphics[bbox={{0}{0}{20bp}{30bp}},width=2cm,height=3cm,noclip]{ficletter.eps}% only in pdfTeX and dvipdfm
+%\includegraphics[bbox={{0}{0}{20bp}{30bp}},width=2cm,height=3cm,noclip]{ficletter.pdf}% only in pdfTeX and dvipdfm
+%\includegraphics[width=2cm,height=3cm,noclip]{fromp.eps}%
+\includegraphics[width=2cm,height=3cm,noclip,below]{descend.1}%
+%\includegraphics[format=TIFF,bbox={{0}{0}{72bp}{72bp}},width=2cm,height=3cm,noclip]{ficletter.tiff}%
+%\includegraphics[width=2cm,height=3cm,noclip]{ficletter.tiff}%
+%\includegraphics[width=2cm,height=3cm,noclip]{ficletter.png}% only in pdfTeX
+%\ifnum\pdftexversion>0
+\iftrue%
+\includegraphics[forceunknown=1,bbox={{0}{0}{20bp}{30bp}},width=2cm,height=3cm,noclip,below]{ficletter.png}% only in pdfTeX and dvipdfm
+\includegraphics[forceunknown=1,bbox={{0}{0}{20bp}{30bp}},lower=10,width=2cm,height=3cm,noclip]{ficletter.png}% only in pdfTeX and dvipdfm
+\fi
+MetaPost!
+
+%\def\secondofthree#1#2#3{#2}%
+%\def\thirdofthree#1#2#3{#2}%
+
+\message{%
+ %\noexpand{\iffalse}\fi%
+ E%
+ %\iffalse{\fi%
+ %\iffalse}\fi%
+ %\expandafter\expandafter\expandafter\secondofthree%
+ %\expandafter\string\csname{}\endcsname%
+ \expandafter\@secondoftwo\string\\%
+ F%
+}%
+
+%\message{AAA%
+% \expandafter\expandafter\expandafter\@firstoftwo
+% \expandafter\string\csname v\endcsname BBB}
+
+%\def\xgobble{\let\next}%
+
+\input laxtest.bbx
+
+\par\noindent
+Hello,%
+%\iftrue % stress test on special characters in filename
+\iffalse\iffalse
+%\ifnum\pdftexversion>0\ifnum\pdftexversion>12 %
+%\includegraphics[bbox={{3bp}{-10bp}{23bp}{20bp}},width=1cm,height=1cm,noclip]{%
+\includegraphics[width=1cm,height=1cm,noclip,below]{%
+ %\noexpand{%\expandafter\@gobble\n
+ %\expandafter\expandafter\expandafter\xgobble%
+ %\expandafter\noexpand}%
+ %\iffalse}\fi%
+ %\expandafter\@secondoftwo\string\^%
+ %\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^40%
+ %\noexpand`tty%
+ %\noexpand"a%
+ %õ%
+ %\ %
+ % Dat: kpsewhich: $
+% ugly_&_\space \space \space \expandafter\@secondoftwo\string\\%
+% \expandafter\@secondoftwo\string\}%
+% \expandafter\@secondoftwo\string\%%
+% \expandafter\@secondoftwo\string\#%
+% \expandafter\@secondoftwo\string\^%
+% \expandafter\@secondoftwo\string\^a%
+% \expandafter\@secondoftwo\string\^e1%
+% \expandafter\@secondoftwo\string\^e9b%
+% \expandafter\@secondoftwo\string\{%
+% \expandafter\@secondoftwo\string\%%
+% \expandafter\@secondoftwo\string\#%
+% \expandafter\@secondoftwo\string\^%
+% \expandafter\@secondoftwo\string\~%
+ %\noexpand~%
+% \noexpand`tty.
+ ugly_&_\space \space \space \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.\@@img@defext%
+% ugly_&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.\@@img@defext%
+}%
+\fi\fi
+Q.
+
+}%
+\shipout\box0
+
+\end{document}
diff --git a/macros/latex/exptl/graphicp/laxtest.bbx b/macros/latex/exptl/graphicp/laxtest.bbx
new file mode 100644
index 0000000000..d35d44992c
--- /dev/null
+++ b/macros/latex/exptl/graphicp/laxtest.bbx
@@ -0,0 +1,18 @@
+\graphicPmeta{f2cletter.eps}{EPS}{3}{-10}{23}{20}
+\graphicPmeta{tl.eps}{EPS}{0}{0}{1280}{1024}
+\graphicPmeta{ts.eps}{EPS}{0}{0}{1280}{1024}
+\graphicPmeta{ugly_$&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.eps}{EPS}{3}{-10}{23}{20}
+\graphicPmeta{ugly_&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.eps}{EPS}{3}{-10}{23}{20}
+\graphicPmeta{ugly_&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.eps}{EPS}{3}{-10}{23}{20}
+\graphicPmeta{f2cletter.pdf}{PDF}{3}{-10}{23}{20}
+\graphicPmeta{f3cletter.pdf}{PDF}{0}{-10}{20}{20}
+\graphicPmeta{ficletter.pdf}{PDF}{0}{0}{20}{30}
+\graphicPmeta{laltest.pdf}{PDF}{0}{0}{595}{842}
+\graphicPmeta{pdfbbox.pdf}{PDF}{0}{0}{612}{792}
+\graphicPmeta{pts_img.pdf}{PDF}{0}{0}{595}{841}
+\graphicPmeta{t.pdf}{PDF}{0}{0}{20}{30}
+\graphicPmeta{ts.pdf}{PDF}{0}{0}{1280}{1024}
+\graphicPmeta{tt.pdf}{PDF}{?}{?}{?}{?}
+\graphicPmeta{ugly_$&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.pdf}{PDF}{3}{-10}{23}{20}
+\graphicPmeta{ugly_&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.pdf}{PDF}{3}{-10}{23}{20}
+\graphicPmeta{ugly_&_\iftrue\space\fi \iftrue\space\fi \iftrue\space\fi \expandafter\@secondoftwo\string\\\expandafter\@secondoftwo\string\}\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\^a\expandafter\@secondoftwo\string\^^e1\expandafter\@secondoftwo\string\^^e9b\expandafter\@secondoftwo\string\{\expandafter\@secondoftwo\string\%\expandafter\@secondoftwo\string\#\expandafter\@secondoftwo\string\^\expandafter\@secondoftwo\string\~\expandafter\@secondoftwo\string\`.pdf}{PDF}{3}{-10}{23}{20}
diff --git a/macros/latex/exptl/graphicp/pdfboxes.pl b/macros/latex/exptl/graphicp/pdfboxes.pl
new file mode 100755
index 0000000000..361817cff1
--- /dev/null
+++ b/macros/latex/exptl/graphicp/pdfboxes.pl
@@ -0,0 +1,863 @@
+#! /bin/sh
+eval '(exit $?0)' && eval 'PERL_BADLANG=x;export PERL_BADLANG;: \
+;exec perl -x -S -- "$0" ${1+"$@"};#'if 0;
+eval 'setenv PERL_BADLANG x;exec perl -x -S -- "$0" $argv:q;#'.q+
+#!perl -w
+package Htex::pdfboxes; $0=~/(.*)/s;unshift@INC,'.';do($1);die$@if$@;__END__+if !1;
+# This Perl script was generated by JustLib2 at Sun Feb 9 23:57:15 2003.
+# Don't touch/remove any lines above; http://www.inf.bme.hu/~pts/justlib
+package just; BEGIN{$INC{'just.pm'}='just.pm'}
+BEGIN{ $just::VERSION=2 }
+sub end(){1}
+sub main(){}
+
+BEGIN{$ INC{'strict.pm'}='strict.pm'} {
+package strict;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+require 5.002;
+sub bits {
+ (grep{'refs'eq$_}@_ && 2)|
+ (grep{'subs'eq$_}@_ && 0x200)|
+ (grep{'vars'eq$_}@_ && 0x400)|
+ ($@ || 0x602)
+}
+sub import { shift; $^H |= bits @_ }
+sub unimport { shift; $^H &= ~ bits @_ }
+just::end}
+
+BEGIN{$ INC{'integer.pm'}='integer.pm'} {
+package integer;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+sub import { $^H |= 1 }
+sub unimport { $^H &= ~1 }
+just::end}
+
+BEGIN{$ INC{'Pts/string.pm'}='Pts/string.pm'} {
+package Pts::string;
+# by pts@fazekas.hu at Sat Dec 21 21:32:18 CET 2002
+use just;
+use integer;
+use strict;
+
+#** @param $_[0] a string
+#** @param $_[1] index of first bit to return. Bit 128 of byte 0 is index 0.
+#** @param $_[2] number of bits to return (<=32)
+#** @return an integer (negative on overflow), bit at $_[1] is its MSB
+sub get_bits_msb($$$) {
+ # assume: use integer;
+ my $loop=$_[1];
+ my $count=$_[2];
+ my $ret=0;
+ ($ret+=$ret+(1&(vec($_[0],$loop>>3,8)>>(7-($loop&7)))), $loop++) while $count--!=0;
+ $ret
+}
+
+#** @param $_[0] a string
+#** @return value if $_[0] represents a floating point numeric constant
+#** in the C language (without the LU etc. modifiers) -- or undef. Returns
+#** undef for integer constants
+sub c_floatval($) {
+ my $S=$_[0];
+ no integer; # very important; has local scope
+ return 0.0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+|[0-9]+\.])(?:[eE][+-]?[0-9]+)?\Z(?!\n)/;
+ undef
+}
+
+#** @param $_[0] a string
+#** @return value if $_[0] represents a floating point or integer numeric
+#** constant in the C language (without the LU etc. modifiers) -- or undef
+sub c_numval($) {
+ my $S=$_[0];
+ no integer; # very important; has local scope
+ return 0+$S if $S=~/\A[+-]?(?:[0-9]*\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+\.?)\Z(?!\n)/;
+ undef
+}
+
+#** @param $_[0] a string
+#** @return the integer value of $_[0] in C -- or undef
+sub c_intval($) {
+ my $S=$_[0];
+ my $neg=1;
+ $neg=-1 if $S=~s@\A([+-])@@ and '-'eq$1;
+ return $neg*hex $1 if $S=~/\A0[xX]([0-9a-fA-F]+)\Z(?!\n)/;
+ return $neg*oct $1 if $S=~/\A0([0-7]+)\Z(?!\n)/;
+ return $neg*$1 if $S=~/\A([0-9]+)\Z(?!\n)/;
+ undef
+}
+
+sub import {
+ no strict 'refs';
+ my $package = (caller())[0];
+ shift; # my package
+ for my $p (@_ ? @_ : qw{get_bits_msb c_floatval c_numval c_intval}) { *{$package."::$p"}=\&{$p} }
+}
+
+just::end}
+
+BEGIN{$ INC{'vars.pm'}='vars.pm'} {
+package vars;
+use just;
+# by pts@fazekas.hu at Wed Jan 10 12:42:08 CET 2001
+require 5.002;
+sub import {
+ my $callpack = caller;
+ my ($sym, $ch, $sym9);
+ shift;
+ for $sym0 (@_) {
+ die("Can't declare another package's variables") if $sym0 =~ /::/;
+ ($ch, $sym) = unpack('a1a*', $sym0);
+ *{"${callpack}::$sym"} =
+ ( $ch eq "\$" ? \$ {"${callpack}::$sym"}
+ : $ch eq "\@" ? \@ {"${callpack}::$sym"}
+ : $ch eq "\%" ? \% {"${callpack}::$sym"}
+ : $ch eq "\*" ? \* {"${callpack}::$sym"}
+ : $ch eq "\&" ? \& {"${callpack}::$sym"}
+ : die("'$ch$sym' is not a valid variable name\n")
+ );
+ }
+}
+just::end}
+
+BEGIN{$ INC{'Htex/PDFread.pm'}='Htex/PDFread.pm'} {
+package Htex::PDFread;
+# by pts@fazekas.hu at Sat Dec 21 21:28:09 CET 2002
+use just;
+use integer;
+use strict;
+use Pts::string;
+use vars qw($pdf_last_ref0);
+
+my @pdf_classify;
+#** @param $_[0] a string in PDF source format
+#** @return a rewritten string, or "" if $_[0] is truncated, or undef if
+#** there is a parse error
+sub pdf_rewrite($;$) {
+ my $explicit_term_p=$_[1];
+ my $L=length($_[0]);
+ return "" if $L==0;
+ my $S="$_[0]\n>> "; # add sentinel
+ my $I=0;
+ my $O;
+ my $RET="";
+ if (!@pdf_classify) {
+ # Dat: PDF whitespace(0) is [\000\011\012\014\015\040]
+ # Dat: PDF separators(10) are < > { } [ ] ( ) / %
+ # Dat: PDF regular(40) character is any of [\000-\377] which is not whitespace or separator
+ @pdf_classify=(40)x256;
+ @pdf_classify[ord('<'),ord('>'),ord('{'),ord('}'),ord('['),ord(']'),
+ ord('('),ord(')'),ord('/'),ord('%')]=(10,11,12,13,14,15,16,17,18,19);
+ @pdf_classify[000,011,012,014,015,040]=(0,0,0,0,0,0);
+ }
+ while ($I<$L) {
+ $O=$pdf_classify[vec($S,$I,8)];
+ if ($O==0) { # whitespace
+ } elsif (12<=$O and $O<=15) { # one-char token
+ $RET.=" ".substr($S,$I,1);
+ } elsif ($O==18 or $O==40) { # name or /name
+ my $P=0;
+ if ($O==18) { $I++; $RET.=" /" } else { $RET.=" "; $P=1 }
+ my $T="";
+ $T.=chr($O) while $pdf_classify[$O=vec($S,$I++,8)]==40;
+ $I--;
+ ## die $I;
+ $T=~s@([^A-Za-z0-9_.-])@sprintf"#%02x",ord$1@ge; # make name safe
+ $RET.=$T;
+ return $RET if $P and ($T eq "stream" or $T eq "endobj" or $T eq "startxref");
+ next
+ } elsif ($O==11) { # `>'
+ return "" if ++$I==$L; # only `>' has arrived
+ return undef if vec($S,$I,8)!=62; # err(">> expected");
+ $RET.=" >>";
+ } elsif ($O==16) { # string
+ my $T="";
+ my $depth=1; $I++;
+ while ($I<$L) {
+ $O=vec($S,$I++,8); bcont:
+ ## print chr($O),":$depth\n";
+ if ($O==40) { $depth++ }
+ elsif ($O==41) { last unless --$depth }
+ elsif ($O==92) { # a backslash
+ $O=vec($S,$I++,8);
+ if (48<=$O && $O<=55) {
+ my $P=$O-48; $O=vec($S,$I++,8);
+ if (48<=$O && $O<=55) {
+ my $Q=$O-48; $O=vec($S,$I++,8);
+ if (48<=$O && $O<=55) { $T.=chr(255&($P<<6|$Q<<3|($O-48))) }
+ else { $T.=chr($P<<3|$Q); goto bcont }
+ } else { $T.=chr($P); goto bcont }
+ } elsif ($O==110) { $O=10 }
+ elsif ($O==114) { $O=13 }
+ elsif ($O==116) { $O=9 }
+ elsif ($O== 98) { $O=8 }
+ elsif ($O==102) { $O=12 }
+ }
+ $T.=chr($O)
+ } # WHILE
+ return "" if $depth; # err("unterminated string")
+ $T=~s@([^A-Za-z0-9_.-])@sprintf"\\%03o",ord$1@ge; # make string safe
+ $RET.=" ($T)"; next
+ } elsif ($O==10) { # hex string
+ $O=vec($S,++$I,8);
+ if ($O==60) { $RET.=" <<"; $I++; next }
+ # parse hexadecimal string
+ my $half=0x100;
+ my $T="";
+ while (1) {
+ 1 until $pdf_classify[$O=vec($S,$I++,8)]; # skip whitespace
+ if ($O==62) { $T.=chr($half&0xFF) if $half&0x1000; last } # '>'
+ return undef if $pdf_classify[$O]!=40; # err("unexpected token in hex")
+ if (65<=$O and $O<=70) { $half+=$O-55 }
+ elsif (97<=$O and $O<=102) { $half+=$O-87 }
+ elsif (48<=$O and $O<=57) { $half+=$O-48 }
+ else { return undef } # err("illegal hex digit")
+ if ($half&0x1000) { $T.=chr($half&0xFF); $half=0x100 }
+ else { $half<<=4 }
+ }
+ $T=~s@([^A-Za-z0-9_.-])@sprintf"\\%03o",ord$1@ge; # make string safe
+ $RET.=" ($T)"; next
+ } elsif ($O==19) { # single-line comment
+ $I++ while ($O=vec($S,$I,8))!=13 && $O!=10;
+ ## print STDERR "I=$I L=$L\n";
+ next
+ } else { return undef } # err("token expected") # $O==11, $O==17
+ $I++
+ } ## WHILE
+ ## print STDERR "XI=$I L=$L\n";
+ # die $explicit_term_p;
+ return "" if $explicit_term_p;
+ ($I>$L) ? "" : $RET
+}
+
+# Unit test:
+#die unless pdf_rewrite("hello \n\t world\n\t") eq " hello world";
+#die unless pdf_rewrite('(hel\)lo\n\bw(or)ld)') eq ' (hel\051lo\012\010w\050or\051ld)';
+#die unless pdf_rewrite('(hel\)lo\n\bw(orld)') eq '';
+#die unless pdf_rewrite('[ (hel\)lo\n\bw(or)ld)>>') eq ' [ (hel\051lo\012\010w\050or\051ld) >>';
+#die unless pdf_rewrite('>') eq "";
+#die unless pdf_rewrite('<') eq "";
+#die unless pdf_rewrite('< ') eq "";
+#die unless !defined pdf_rewrite('< <');
+#die unless !defined pdf_rewrite('> >');
+#die unless pdf_rewrite('[ (hel\)lo\n\bw(or)ld) <') eq "";
+#die unless pdf_rewrite("<\n3\t1\r4f5C5 >]") eq ' (1O\134P) ]';
+#die unless pdf_rewrite("<\n3\t1\r4f5C5") eq "";
+#die unless !defined pdf_rewrite("<\n3\t1\r4f5C5]>");
+#die unless pdf_rewrite("% he te\n<\n3\t1\r4f5C5 >]endobj<<") eq ' (1O\134P) ] endobj';
+#die unless pdf_rewrite("") eq "";
+#die unless pdf_rewrite("<<") eq " <<";
+#die unless pdf_rewrite('%hello') eq '';
+#die unless pdf_rewrite("alma\n%korte\n42") eq ' alma 42';
+#die unless pdf_rewrite('/Size 42') eq ' /Size 42';
+#die "OK";
+
+#** Reads a single PDF indirect object (without its stream) from a PDF file.
+#** Does some trivial transformations on it to make later regexp matching
+#** easier. Stops at `stream', `endobj' and `startxref'.
+#** @param $_[0] a filehandle (e.g \*STDIN), correctly positioned in the PDF
+#** file to the beginning of the object data (i.e just before `5 0 obj')
+#** @return string containing PDF source code, or undef on error
+sub pdf_read_obj($) {
+ my $F=$_[0]; my $L=1024; my $M; my $S=""; my $RET;
+ while (1) { # read as much data as necessary
+ return undef if 0>($M=read $F, $S, $L, length($S));
+ $RET=pdf_rewrite($S,1);
+ ## print "($S)\n";
+ return undef if !defined $RET; # parse error
+ return $RET if length $RET; # OK, found object
+ return undef if $M==0; # cannot read more, reached EOF
+ $L<<=1;
+ }
+ #$S=~m@[\000\011\012\014\015\040]*(
+ # %[^\r\n]*[\r\n]|
+ # /?[^\000\011\012\014\015\040<>{}\[\]()/%]*(?=[\000\011\012\014\015\040<>{}\[\]()/%])| # unterminated
+ # <<|>>|\{|}|\[|]|
+ # <[a-fA-F0-9\000\011\012\014\015\040]*>| # hex string
+ # \((?:[^\\()]+|\\[\000-\377])*\)| # literal string, the easy way
+ # \( # an unfinished string, needs special care
+ #)@gx
+}
+
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file, positioned
+#** just before an `xref' table
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4; will be extended
+#** @return the `trailer' section after the `xref'; or undef
+sub pdf_read_xref($$) {
+ # made much faster at Wed Dec 18 09:50:23 CET 2002
+ my $T;
+ my $E;
+ my $F=$_[0];
+ my $XREF=$_[1];
+ return undef if 8>read $F, $T, 1024;
+ return undef unless $T=~s@\A\s*xref\s+(\d+)\s+(\d+)\s+(?=\S)@@;
+ my ($first,$len,$flen);
+ while (1) {
+ ($first,$len)=($1+0,$2+0);
+ ## print " $first + $len\n";
+ $flen=($len*=20)-length($T)+20;
+ return undef unless $flen<1 or $flen==read $F, $T, $flen, length($T);
+ for (my $I=0;$I<$len;$I+=20, $first++) {
+ $E=substr($T, $I, 20);
+ return undef unless $E=~/\A(\d{10})\s(\d{5})\s([nf])\s\s/;
+ ## print "($1 $2 $3)\n";
+ $XREF->[$2+0][$first]=$1+0 if $3 eq 'n';
+ }
+ $E=substr($T, $len);
+ last if $E!~s@\A\s*(\d+)\s*(\d+)\s+(?=\S)@@; # next section
+ $T=$E;
+ }
+
+ # die(-length($T)+$len);
+ ## die tell($F);
+ return undef if length($T)!=$len and !seek $F, -length($T)+$len, 1;
+ ## die tell($F);
+ return undef unless defined($T=pdf_read_obj($F));
+ $XREF->[0][0]=undef if defined $XREF->[0];
+ $XREF->[0][0]=$1+0 if $T=~m@ /Prev (\d+)@; # remember /Prev xref table
+ return undef unless $T=~m@\A trailer( .*) startxref\Z(?!\n)@s;
+ $1
+}
+
+$pdf_last_ref0=0;
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4
+#** @param $_[2] an object number
+#** @param $_[3] a generation number
+#** @return PDF source code of the reference, or undef
+sub pdf_ref($$$$) {
+ my $F=$_[0]; my $XREF=$_[1]; my $ON=$_[2]+0; my $GN=$_[3]+0;
+ my $T;
+ $pdf_last_ref0=$ON if $GN==0;
+ ## print "REF $ON $GN;\n";
+ until (ref $XREF->[$GN] and defined ($T=$XREF->[$GN][$ON])) {
+ return undef if !ref $XREF->[0] or !defined $XREF->[0][0]; # no /Prev entry, `$ON $GN R' not found
+ return undef unless seek $F, $XREF->[0][0], 0;
+ return undef if !defined pdf_read_xref($F,$XREF);
+ }
+ ## print "REF at $T;\n";
+ return undef unless seek $F, $T, 0;
+ return undef unless defined($T=pdf_read_obj($F));
+ ## print "REF=($T);\n";
+ return undef unless $T=~s@\A (\d+) (\d+) obj\b(.*) (endobj|stream)\Z(?!\n)@$3@s;
+ $T
+}
+
+#** Gets a key from a direct dict, and resolves it if it is an indirect object
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4
+#** @param $_[2] a PDF source dict (`<< ... >>') or array
+#** @param $_[3] a key (`/...')
+sub pdf_get($$$$) {
+ my $F=$_[0]; my $XREF=$_[1]; my $S=$_[2]; my $KEY=$_[3]; my $POS=0;
+ my $DEPTH=0; my $IS_DICT; my $C=0; my $N=0;
+ ## print "\n";
+ while ($S=~/\G (\S+)/g) {
+ $C=vec($1,0,8); $POS=pos($S);
+ ## print "($1) $DEPTH $N\n";
+ if ($1 eq '>>' or $1 eq ']') {
+ return undef if 0==$DEPTH--;
+ last if !$DEPTH;
+ $N++ if 1==$DEPTH;
+ }
+ elsif ($DEPTH==1 and !$IS_DICT and $KEY==$N) { $POS=pos($S)-=length($1)+1; goto do_ret }
+ elsif ($1 eq '<<') { $IS_DICT=1 if 0==$DEPTH++ }
+ elsif ($1 eq '[') {
+ if (0==$DEPTH++) {
+ $IS_DICT=0;
+ return undef if $KEY!~/\A(\d+)\Z(?!\n)/; # err("non-numeric key in array")
+ }
+ }
+ elsif (0==$DEPTH) { return undef } # not in a composite object
+ elsif (1!=$DEPTH) { next }
+ elsif (!$IS_DICT) { $N++ }
+ elsif ($C==40) { $N++ } # `(': string or bare name
+ elsif ($C>=47 and $C<=57) { # '/': /name 0..9: number
+ ## print "TRY ($1) KEY=$KEY.\n";
+ next if ($N++&1)==1 or $1 ne $KEY;
+ do_ret:
+ ## print substr($S,pos($S)),";;\n";
+ return pdf_ref $F, $XREF, $1, $2 if $S=~/\G (\d+) (\d+) R\b/gc;
+ ## print substr($S,pos($S)),"::\n";
+ $DEPTH=0;
+ while ($S=~/\G( \S+)/g) {
+ if ($1 eq ' <<' or $1 eq ' [') { $DEPTH++ }
+ elsif ($1 eq ' >>' or $1 eq ' ]') {
+ ## die "($1)\n";
+ return undef if 0==$DEPTH--; # err("nesting")
+ return substr($S,$POS,pos($S)-$POS) if 0==$DEPTH;
+ } elsif ($DEPTH==0) { return $1 }
+ }
+ } else { $N++ } # bare name
+ }
+ return undef if $POS!=length($S); # err("invalid source dict");
+ "" # not found
+}
+
+# Unit test:
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 0) eq ' al';
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 1) eq ' makorte';
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 2) eq ' 42';
+#die unless pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', 3) eq '';
+#die unless pdf_get(\*STDIN, 0, ' [ << >> ]', 0) eq ' << >>';
+#die unless pdf_get(\*STDIN, 0, ' [ << >> ]', 1) eq '';
+#die unless pdf_get(\*STDIN, 0, ' [ << >> [ al makorte 42 ] ]', 1) eq ' [ al makorte 42 ]';
+#die unless pdf_get(\*STDIN, 0, ' << /Alma [ 1 2 ] /Korte [ 3 4 ] >>', '/Korte') eq ' [ 3 4 ]';
+#die unless !defined pdf_get(\*STDIN, 0, ' [ al makorte 42 ]', '/Name');
+#die unless !defined pdf_get(\*STDIN, 0, ' << al makorte 42 >>', 42);
+#die unless pdf_get(\*STDIN, 0, ' << al makorte 42 137 >>', 42) eq ' 137';
+#die unless pdf_get(\*STDIN, 0, ' << al makorte >>', 'al') eq "";
+#die "OK";
+
+#** Reported boxes: /MediaBox /CropBox /BleedBox /TrimBox /ArtBox
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file
+#** @param $_[1] an xref table: $_[1][4][56] is the file offset of object 56
+#** from generation 4
+#** @param $_[2] a PDF source dict (`<< ... >>') of /Type/Catalog
+#** /Type/Pages or /Type/Page
+#** @param $_[3] hashref to update. $_[3]{BleedBox}[2] will be the URX corner
+#** of the BleedBox
+sub pdf_get_boxes($$$$) {
+ my $F=$_[0]; my $XREF=$_[1]; my $S=$_[2]; my $bbi=$_[3];
+ return if !defined $S;
+ for my $name (qw{MediaBox CropBox BleedBox TrimBox ArtBox}) {
+ my $box=pdf_get($F, $XREF, $S, "/$name");
+ next if !defined $box or !length $box
+ or $box!~m@ \[ ([0-9eE.-]+) ([0-9eE.-]+) ([0-9eE.-]+) ([0-9eE.-]+) \]\Z(?!\n)@
+ or !defined c_numval($1) or !defined c_numval($2) or !defined c_numval($3) or !defined c_numval($4);
+ ($bbi->{LLX},$bbi->{LLY},$bbi->{URX},$bbi->{URY})=($1+0,$2+0,$3+0,$4+0) if $name eq 'MediaBox';
+ my $name2="Info.$name";
+ ($bbi->{$name2}[0],$bbi->{$name2}[1],$bbi->{$name2}[2],$bbi->{$name2}[3])=($1+0,$2+0,$3+0,$4+0);
+ }
+}
+
+sub import {
+ no strict 'refs';
+ my $package=(caller())[0];
+ shift;
+ for my $p (@_ ? @_ : qw{pdf_get_boxes pdf_get pdf_read_xref pdf_read_obj
+ pdf_rewrite pdf_ref}) { *{$package."::$p"}=\&{$p} }
+}
+
+just::end}
+
+BEGIN{$ INC{'Htex/pdfboxes.pm'}='Htex/pdfboxes.pm'}
+
+package Htex::pdfboxes;
+# pdfboxes.pl -- extract bounding box information from PDFs and update them
+# see perldoc(1) POD documentation later
+# by pts@fazekas.hu at Sat Jan 25 14:26:26 2003
+# docs at Tue Jan 28 11:29:55 CET 2003
+#
+
+use just +1;
+use strict;
+use integer;
+use Htex::PDFread;
+BEGIN { $Htex::pdfboxes::VERSION=0.05 }
+
+#** Derived from pdf_read_xref()
+#** @param $_[0] a filehandle (e.g \*STDIN), containing a PDF file, positioned
+#** just before an `xref' table
+#** @param $_[1] a file offset
+#** @param $_[2] number to add to /Size
+#** @param $_[3] arrayref containing xref20 intervals
+#** @param $_[4] retval for original trailer length
+#** @param $_[5] retval for original trailer offset
+#** -param $_[6] arrayref, trailer offsets (not the topmost) will be pushed to
+#** @return the `trailer' section after the `xref'; or undef
+sub my_read_xref($$$$$$) {
+ # made much faster at Wed Dec 18 09:50:23 CET 2002
+ my $T;
+ my $E;
+ my($F,$fofs,$addsize,$xrefs)=@_;
+ my($first,$len,$flen);
+ my $ret_trailer;
+ prev_xref:
+ return undef unless seek $F, $fofs, 0;
+ return undef if 8>read $F, $T, 1024;
+ $fofs+=length($T);
+ return undef unless $T=~s@\A\s*xref\s+(\d+)\s+(\d+)\s+(?=\S)@@;
+ $fofs-=length($T);
+ while (1) {
+ ($first,$len)=($1+0,$2+0);
+ # Now: ($fofs ... $fofs+20*$len) contains xref enties
+ push @$xrefs, $fofs, $fofs+20*$len;
+ ## print " $first + $len\n";
+ $flen=($len*=20)-length($T)+20; # +20: two-number header of next section
+ return undef unless $flen<1 or $flen==read $F, $T, $flen, length($T);
+ for (my $I=0;$I<$len;$I+=20, $first++) {
+ $E=substr($T, $I, 20);
+ return undef unless $E=~/\A(\d{10})\s(\d{5})\s([nf])\s\s/;
+ ## print "($1 $2 $3)\n";
+ # $XREF->[$2+0][$first]=$1+0 if $3 eq 'n';
+ }
+ $E=substr($T, $len);
+ $fofs+=length($T);
+ last if $E!~s@\A\s*(\d+)\s*(\d+)\s+(?=\S)@@; # next section
+ $fofs-=length($E);
+ $T=$E;
+ }
+ return undef if length($T)!=$len and !seek $F, -length($T)+$len, 1;
+ $fofs+=$len-length($T);
+ return undef if 20>read $F, $T, 2048; # read trailer
+ $T=~s@%.*@ @g; # assume there are no strings
+ return undef unless $T=~s@(\s*>>\s*).*@@s;
+ ($_[4],$_[5])=(length($T)+length($1),$fofs) if !defined $ret_trailer;
+ # push @{$_[6]}, $fofs+length($1), $fofs+length($1)+length($2)
+ push @$xrefs, $fofs+length($1), -($fofs+length($1)+length($2))
+ if defined($ret_trailer)
+ and $T=~m@\A(\s*trailer\s*<<.*?)(\s*/Prev\s+\d+[\000\011\012\014\015\040]*[<>{}\[\]()/]?)@s;
+ return undef if $T!~s/\A\s*trailer\s*<<\s*//;
+ if (!defined $ret_trailer) {
+ return undef if $T!~s@/Size\s+(\d+)@"/Size ".($1+$addsize)@e;
+ ## $T=~y/\r/\n/; die "$T";
+ $ret_trailer=$T;
+ }
+ if ($T=~m@/Prev\s+(\d+)@) { $fofs=$1+0; goto prev_xref }
+ $ret_trailer
+}
+
+#** Modifies the /Prev value in a PDF trailer, tries not to increase length
+#** of $_[0].
+#** @param $_[0] string containing a PDF trailer /Prev entry
+#** @param $_[1] coderef to calculate modification
+#** @return the modified string, or undef
+sub modify_prev($$) {
+ my($S,$N)=@_;
+ my $lenS=length($S);
+ my $T=$S;
+ return $T unless $T=~s@(/Prev\s+)(\d+)@$1.$N->($2)@e; # preserve spaces
+ if (length($T)>$lenS) { # Imp: test this
+ $T=$S;
+ die unless $T=~s@\s*/Prev\s+(\d+)[\000\011\012\014\015\040]*([<>{}\[\]()/]?)@
+ "/Prev ".$N->($1).(length$2 ? $2 : " ")
+ @;
+ # ^^^ don't check for comments: $T=~s@\s*/Prev\s+(\d+)\s*(?:%.*)*
+ }
+ die unless length($T)>=$lenS or $T=~s@(/Prev\s+\d+)@$1.(" "x(length($T)-$lenS))@e;
+ # Now: length($T)>=$lenS
+ $T
+}
+
+#** @param $_[0] $bbi hashref
+#** @return a multiline dump of all key--value pairs, sorted by key
+sub all2($) {
+ my $bbi=$_[0];
+ my $RET="";
+ for my $key (sort keys %$bbi) { if ($key=~/\AInfo[.](\w+Box)\Z(?!\n)/) { #1<length $key
+ my $val=$bbi->{$key};
+ $RET.="/$1 ".(ref($val)eq'ARRAY' ? "[@$val]\n" : "$val\n");
+ } }
+ $RET
+}
+
+sub usage() {
+ die "This is pdfboxes.pl by pts\@fazekas.hu, version $Htex::pdfboxes::VERSION
+This program is free software, licensed under the GNU GPL.
+This software comes with absolutely NO WARRANTY. Use at your own risk!
+
+I can extract /MediaBox, /CropBox and other bounding box information from PDF
+files, and write back this information to the begininning of the PDF. Run this
+to get more docs:
+ perldoc '$0'
+
+Usage: $0 [<action>] <input.pdf> [<output.pdf>]\n
+Action is one of: -- --show\n"
+}
+
+just::main;
+
+my $outfilename;
+my $infilename;
+my $show_p=0;
+usage if !@ARGV;
+if (@ARGV==1) {
+ $show_p=1;
+} else {
+ if ($ARGV[0] eq '--') { shift @ARGV; }
+ elsif ($ARGV[0] eq '--show') { $show_p=1; shift @ARGV; }
+ elsif ($ARGV[0]=~/\A-/) { print STDERR "$0: unknown option: $ARGV[0]"; usage }
+}
+($infilename,$outfilename)=@ARGV; # $outfilename possibly undef
+
+# Dat: reading PDF from STDIN not supported, because it is probably unseekable
+die "$0: open $infilename: $!\n" if !open F, "< $infilename";
+die unless binmode F;
+
+my $head;
+# vvv 2048: file header + max length(/Type/pdfboxes)
+if (32>read F, $head, 2048) {
+ IOerr: die "$0: I/O error in $infilename: $!\n"
+}
+if ($head!~/\A(%PDF-[!-~]+)/) {
+ SYerr: die "$0: syntax error in $infilename. Not a PDF?\n";
+}
+my $firstline=$1;
+
+my $binary_p=($head=~/\A[^\r\n]+[\r\n]+[ -~]*[^\n\r -~]/) ? 'Binary' : 'Clean7Bit';
+#$head=pdf_rewrite($head,1);
+$head=~s@\A(.*?)(\bendobj\s*).*@$1@s; # The first obj decides whether it is linearized
+my $headprelen=length($1)+length($2);
+goto SYerr if $head!~/[\n\r](\d+\s+\d+\s+obj)/g;
+my $obj1ofs=pos($head)-length($1);
+$head=substr($head,$obj1ofs);
+my $page1obj;
+my $linearized_p=0;
+my $was_pdfboxes=0; # the obj # of the pdfboxes.pl already applied
+#if ($head=~s@\A((\d+)\s+\d+\s+obj\s*<<.*?/Type\s*/pdfboxes\b.*?\bendobj\s*)@@s) {
+if ($head=~m@\A(\d+)\s+\d+\s+obj\s*<<.*?/Type\s*/pdfboxes\b@s) {
+ goto SYerr if !defined $headprelen;
+ $obj1ofs=$headprelen; $head="";
+ # ^^^ remove previous instance of /pdfboxes
+ # ^^^ might not be a real obj at $obj1ofs
+ $was_pdfboxes=$1+0;
+} elsif ($head=~m@/Linearized\b@ and $head=~m@/O\s+(\d+)@) {
+ $linearized_p=1;
+ $page1obj=$1+0;
+}
+goto IOerr if !seek F, -1024, 2 and !seek F, 0, 0;
+my $tailofs=tell F;
+goto IOerr if 1>read F, $head, 1024;
+goto SYerr if $head!~/startxref\s+(\d+)\s*%%EOF\s*\Z(?!\n)/
+ and $head!~/startxref\s+(\d+)\s*%%EOF/;
+# ^^^ Dat: some PDF files contain binary junk at the end
+
+my $xref_ofs=$1+0;
+my $xrefs=[];
+my $oldtrailerlen;
+my $oldtrailerofs;
+# my @trailersofs;
+my $trailerx=my_read_xref(\*F, $xref_ofs, $was_pdfboxes==0, $xrefs, $oldtrailerlen, $oldtrailerofs); # , \@trailersofs);
+## print "(@trailersofs)\n";
+goto SYerr if !defined $trailerx;
+goto SYerr if $trailerx!~m@/Size\s+(\d+)@;
+my $oldSize=$1-1;
+
+# Imp: remove code duplication with package Htex::ImgBBox
+goto IOerr if !seek \*F, $xref_ofs, 0;
+my $xref=[];
+my $trailer=pdf_read_xref(\*F,$xref);
+goto SYerr if !defined $trailer;
+my $pages;
+my $type;
+my $bbi={};
+if (!defined $page1obj) { do_pdf_slow:
+ my $root=pdf_get(\*F,$xref,$trailer,'/Root');
+ goto IOerr if !defined $root; goto SYerr if !length $root;
+ $type=pdf_get(\*F,$xref,$root,'/Type');
+ goto IOerr if !defined $type; goto SYerr if $type ne ' /Catalog';
+ # die $root;
+ # vvv Dat: reading xref for /Pages in a linearized PDF is quite slow
+ $pages=pdf_get(\*F,$xref,$root,'/Pages');
+ goto IOerr if !defined $pages; goto SYerr if !length $pages;
+ ## die $pages;
+ my $kids;
+ while (1) {
+ $type=pdf_get(\*F,$xref,$pages,'/Type');
+ goto IOerr if !defined $type;
+ last if $type ne ' /Pages';
+ pdf_get_boxes(\*F, $xref, $pages, $bbi);
+ $kids=pdf_get(\*F,$xref,$pages,'/Kids');
+ goto IOerr if !defined $kids; goto SYerr if !length $kids;
+ ## die $kids;
+ $pages=pdf_get(\*F,$xref,$kids,0);
+ ## die $pages;
+ goto IOerr if !defined $pages; goto SYerr if !length $pages;
+ }
+ goto SYerr if $type ne ' /Page';
+ # Dat: cannot set $page1obj properly here, because it might be a direct object
+ $bbi->{'Info.page1obj'}=$Htex::PDFread::pdf_last_ref0;
+} else {
+ # die $page1obj;
+ $pages=pdf_ref(\*F, $xref, $page1obj, 0);
+ goto IOerr if !defined $pages;
+ $type=pdf_get(\*F,$xref,$pages,'/Type');
+ goto IOerr if !defined $type;
+ goto SYerr if $type ne ' /Page';
+ my $mediabox=pdf_get(\*F,$xref,$pages,'/MediaBox');
+ goto IOerr if !defined $mediabox;
+ goto do_pdf_slow if !length $mediabox;
+}
+pdf_get_boxes(\*F, $xref, $pages, $bbi);
+print all2($bbi) if $show_p;
+
+# -- write it back
+
+my @tmpfiles;
+END { unlink @tmpfiles }
+
+if (defined $outfilename) {
+ my $inplace_p=0;
+
+ if ($outfilename eq $infilename) {
+ # die "$0: cannot modify file in place: $outfilename\n"
+ $inplace_p=1;
+ do { $outfilename.=".tmp.$$" } while -e $outfilename;
+ push @tmpfiles, $outfilename;
+ }
+ if ($outfilename eq '-') {
+ die unless open O, ">&STDOUT";
+ } else {
+ die "$0: open_w $outfilename: $!\n" if !open O, "> $outfilename";
+ }
+ die unless binmode O;
+ # Dat: $newobj destroys the /Linearized property, but never mind.
+ # my $newobj="$oldSize 0 obj\n<</Type/pdfboxes\n/Kis (".scalar(localtime).")>>\nendobj\n";
+ my $newobj="$oldSize 0 obj\n<</Type/pdfboxes%\n".all2($bbi).">>\nendobj\n";
+
+ my $outhead="$firstline\n";
+ $outhead.="%\307\354\217\242\n" if $binary_p;
+ my $delta=length($outhead)+length($newobj)-$obj1ofs;
+ my $newxrefentry=sprintf"%d 1\n%010d 00000 n \n",
+ $oldSize, length($outhead);
+ my $newtrailer="trailer\n<<\n$trailerx\n>>\n";
+ my $newtrailerlen;
+ my $trailerdelta;
+
+ do { # iterate until lengths are right
+ $newtrailerlen=length($newtrailer);
+ $trailerdelta=length($newxrefentry)+$newtrailerlen-$oldtrailerlen;
+ $newtrailer=modify_prev($newtrailer, sub { $_[0]+$delta+($_[0]>$xref_ofs ? $trailerdelta : 0) } );
+ } until length($newtrailer)==$newtrailerlen;
+
+ if (!print O $outhead, $newobj) {
+ OOerr: die "$0: write $outfilename: $!\n"
+ }
+
+ # die unless seek F, $obj1ofs, 0;
+ my %xrefs=@$xrefs;
+ ## print STDERR "@$xrefs\n";
+ #** F has been dumped 0...$doneofs
+ my $doneofs=$obj1ofs;
+ goto IOerr unless seek F, $doneofs, 0;
+ for my $from (sort {$a<=>$b} keys %xrefs) {
+ ## print STDERR "xrefs $from $xrefs{$from} ($doneofs)\n";
+ my $to=$xrefs{$from};
+
+ # Copy
+ die "$0: inconsistent offsets: $doneofs > $from" if $doneofs>$from;
+ my $O=$from-4096;
+ my $S;
+ while ($doneofs<$O) {
+ goto IOerr unless 4096==read F, $S, 4096;
+ goto OOerr unless print O $S;
+ $doneofs+=4096;
+ }
+ if ($doneofs<$from) {
+ goto IOerr unless $from-$doneofs==read F, $S, $from-$doneofs;
+ goto OOerr unless print O $S;
+ $doneofs=$from;
+ }
+ if ($to<0) { # /Prev correction for the 2nd, 3rd etc. /Prevs
+ # Example file: examples/lm2.pdf
+ ## print STDERR "/Prev correction $from ... $to ($doneofs)\n";
+ goto IOerr unless -$to-$doneofs==read F, $S, -$to-$doneofs;
+ $S=modify_prev($S, sub { $_[0]+$delta+($_[0]>$xref_ofs ? $trailerdelta : 0) } );
+ die "$0: modified /Prev too long\n" if length($S)!=-$to-$doneofs;
+ goto OOerr unless print O $S;
+ $doneofs=-$to;
+ } else { # xref offset correction
+ die "$0: inconsistent xref interval: $from > $to " if $from>$to or 0!=($to-$from)%20;
+ while ($doneofs<$to) { # Imp: speed up with larger read bursts?
+ goto IOerr unless 20==read F, $S, 20;
+ goto SYerr unless $S=~/\A\d{10} \d{5} [nf]\s\s/;
+ if ($was_pdfboxes and $doneofs==$oldtrailerofs-20) {
+ $S=substr($newxrefentry,-20);
+ } else {
+ my $ofs=0+substr($S,0,10);
+ $ofs+=$trailerdelta if $ofs>$xref_ofs;
+ substr($S,0,10)=sprintf("%010d",$ofs+$delta);
+ }
+ goto OOerr unless print O $S;
+ $doneofs+=20;
+ }
+ if ($doneofs==$oldtrailerofs) { # the xref entry we modify the trailer of
+ ## print "$doneofs -> $oldtrailerofs\n";
+ goto IOerr unless seek F, $oldtrailerlen, 1;
+ $doneofs+=$oldtrailerlen;
+ goto OOerr unless print O ($was_pdfboxes==0 ? $newxrefentry : ""), $newtrailer;
+ }
+ }
+ }
+
+ my $extra_trailer="trailer\n<<\n>>\n";
+ $extra_trailer="" if $doneofs==$oldtrailerofs+$oldtrailerlen;
+ { my $O=$tailofs-4096;
+ my $S;
+ while ($doneofs<$O) {
+ goto IOerr unless 4096==read F, $S, 4096;
+ goto OOerr unless print O $S;
+ $doneofs+=4096;
+ }
+ if ($doneofs<$tailofs) {
+ goto IOerr unless $tailofs-$doneofs==read F, $S, $tailofs-$doneofs;
+ goto OOerr unless print O $S;
+ $doneofs=$tailofs;
+ }
+ goto IOerr if 16>read(F, $S, 1025) or length($S)>1024;
+ # ^^^ $tailofs is at most 1024 bytes before EOF
+ goto SYerr unless $S=~s@
+ ((?:\btrailer\s*<<.*?>>\s*)?) startxref\s+(\d+)\s*%%EOF
+ ( \s*\Z(?!\n) | )
+ @@sx;
+ # @length($1)?($extra_trailer=""):""@sex;
+ goto OOerr unless print O $S;
+ }
+
+ die unless printf O "${extra_trailer}startxref\n%d\n%%%%EOF\n", $xref_ofs+$delta;
+ die unless close O;
+ if ($inplace_p) {
+ die "$0: rename $outfilename -> $infilename: $!\n" if !rename $outfilename, $infilename;
+ }
+}
+
+just::end __END__
+
+=begin man
+
+.ds pts-dev \*[.T]
+.do if '\*[.T]'ascii' .ds pts-dev tty
+.do if '\*[.T]'ascii8' .ds pts-dev tty
+.do if '\*[.T]'latin1' .ds pts-dev tty
+.do if '\*[.T]'nippon' .ds pts-dev tty
+.do if '\*[.T]'utf8' .ds pts-dev tty
+.do if '\*[.T]'cp1047' .ds pts-dev tty
+.do if '\*[pts-dev]'tty' \{\
+.ll 79
+.pl 33333v
+.nr IN 2n
+.\}
+.ad n
+
+=end
+
+=head1 NAME
+
+pdfboxes.pl - extract bounding box information from PDFs and update them
+
+=head1 SYNOPSIS
+
+C<B<pdfboxes.pl>>
+ S<[ C<-->>
+ S<| C<--show> ]>
+ S<I<input.pdf> I<output.pdf>>
+
+=head1 DESCRIPTION
+
+pdfboxes.pl is a standalone Perl script that can extract /MediaBox,
+/CropBox and other bounding box information from PDF files, and
+write back this information to the begininning of the PDF, so other programs,
+such as pdftex.def of the graphicx package of LaTeX can read the bounding
+box by simply reading the first few lines of the PDF output of pdfboxes.pl.
+
+To get the bounding box from other file formats, use img_bbox.pl from the same
+author.
+
+=head1 COMMENTS
+
+Breaks a linearized PDF (as defined by Appendix F of PDFRef.pdf) into a
+non-linearized one.
diff --git a/macros/latex/exptl/graphicp/pts_bbox.sty b/macros/latex/exptl/graphicp/pts_bbox.sty
new file mode 100644
index 0000000000..d4f5a1a548
--- /dev/null
+++ b/macros/latex/exptl/graphicp/pts_bbox.sty
@@ -0,0 +1,418 @@
+%
+% pts_bbox.sty -- open an image and read BoundingBox info
+% modified by pts@fazekas.hu at Sun Feb 2 17:07:43 CET 2003
+%
+
+\expandafter\ifx\csname ifLaTeX\endcsname\relax\input laemu.sty\relax\fi%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pts_bbox}[2003/02/02 v0.2 determine BoundingBox]
+
+\def\@@imgread@sPS{PS}%
+\def\@@imgread@sEPS{EPS}%
+\def\@@imgread@sMetaPost{MetaPost}%
+
+\def\@tempa{}%
+\def\@tempb{}%
+
+%** `\@@imgread@stripps FF..\\' set \@tempa to `FF' with `EPS.' and `PS.'
+%** stripped from the beginning. FF is a FileFormat such as `TIFF' or
+%** `EPS.MPS'.
+\def\@@imgread@stripps#1.#2.#3\\{%
+ \def\@tempa{#1}%
+ \def\@tempb{#2}%
+ \ifx\@tempb\@empty\else%
+ \ifx\@tempa\@@imgread@sPS \def\@tempa{#2}%
+ \else\ifx\@tempa\@@imgread@sEPS \def\@tempa{#2}%
+ \else \def\@tempa{#1.#2}\fi\fi%
+ \fi%
+}%
+
+%%** `\@@imgread@strpqbp#\\' expands to `#' if `#' begins with `?'; else
+%%** it expands to `#bp'
+%\def\@@imgread@stripqbp#1#2\\{%
+% \if\noexpand#1?%
+% #1#2%
+% \else
+% #1#2bp%
+% \fi
+%}%
+
+%** Process output of external command `img_bbox.pl --tex'. Strips EPS.*
+%** -> * and PS.* -> *.
+%** Example: \graphicPmeta{f2cletter.pdf}{PDF}{3}{-10}{23}{20}
+\def\graphicPmeta#1#2#3#4#5#6{%
+ %\message{meta{#1}{#2}{#3}{#4}{#5}{#6};}%
+ \begingroup%
+ \@@imgread@stripps#2..\\% returns \@tempa, ruins \@tempb
+ \edef\@tempa{%
+ \noexpand\def%
+ \expandafter\noexpand\csname @@xb@#1\endcsname%
+ %{{\@tempa}{\@@imgread@stripqbp#3\\}{\@@imgread@stripqbp#4\\}%
+ % {\@@imgread@stripqbp#5\\}{\@@imgread@stripqbp#6\\}}%
+ {{\@tempa}{#3}{#4}{#5}{#6}}%
+ }%
+ \expandafter\endgroup\@tempa%
+ %\expandafter\edef\csname @@xb@#1\endcsname{{\@tempa}{#3bp}{#4bp}{#5bp}{#6bp}}%
+}%
+
+%\graphicPmeta{a}{PS.MPS}{3}{4}{5}{6}\message{<\@@xb@a>}\end
+
+%** Opens the external image file, reads the bounding box information, and
+%** calls #1{LLX}{LLY}{URX}{URY}. Failure is indicated by setting any of
+%** LLX, LLY, URX or URY to ?.
+%** @param #1 a \cs#1#2#3#4 that records the bounding box information
+%** @param #2 a filename
+\def\@@GetBBox#1#2{%
+ % Imp: unset temporary variables (@@gp@xb)
+ \edef\@@gp@xb{@@xb@#2}% \ @@xb@foo.eps
+ \expandafter\ifx\csname\@@gp@xb\endcsname\relax% no cached value yet
+ %\PackageError{pts_img}{BBox read unimplemented}\@ehc%
+ \@@imgread@afile\graphicPmeta{#2}%
+ \fi%
+ \edef\@@gp@xc{\csname\@@gp@xb\endcsname}% full expansion of cached value
+ %\message{;\@@gp@xc;}%
+ %\expandafter\expandafter\expandafter#1\expandafter\@gobble\@@gp@xc% gobble FileFormat
+ \expandafter#1\@@gp@xc% report FileFormat and bbox
+}%
+
+\expandafter\ifx\csname @tempcnta\endcsname\relax%
+ \newcount\@tempcnta
+\fi
+%\def\@makeother#1{\catcode`#1=12\relax}
+%\chardef\@inputcheck0
+% Dat: uses \newread\@inputcheck
+
+\newif\if@@imgread@
+%\def\@latex@error{\errmessage{#1}}
+%\message{\@@imgread@BBox}%
+%*** The DOS EPSF header
+\edef\@@imgread@DOSEPSF{%
+ % Imp: specify shorter
+ \expandafter\@secondoftwo\string\^^c5%
+ \expandafter\@secondoftwo\string\^^d0%
+ \expandafter\@secondoftwo\string\^^d3%
+ \expandafter\@secondoftwo\string\^^c6%
+}%
+%** A dot, and the first 3 bytes of a JPEG file
+\edef\@@imgread@JPEG{%
+ % Imp: specify shorter
+ .%
+ \expandafter\@secondoftwo\string\^^ff%
+ \expandafter\@secondoftwo\string\^^d8%
+ \expandafter\@secondoftwo\string\^^ff%
+}%
+\edef\@@imgread@PNG{\expandafter\@secondoftwo\string\^^89PNG}%
+\edef\@@imgread@TIFFMM{MM..}% MSB first TIFF header is "MM\0*"
+\edef\@@imgread@TIFFII{II*.}% LSB first TIFF header is "II*\0"
+\def\@@imgread@atend{atend}
+\edef\@@imgread@PDF{\expandafter\@secondoftwo\string\%PDF}
+\edef\@@imgread@EPS{\expandafter\@secondoftwo\string\%!PS}
+%\def\@@img@sPDF{PDF}%
+%\def\@@img@sEPS{EPS}%
+%\def\@@img@sQ{?}%
+
+%** \@@imgread@setfour\cs...\\ \def's \cs to be the first four tokens of
+%** `...'. `...' must have at least 4 tokens
+\long\def\@@imgread@setfour#1#2#3#4#5#6\\{%
+ \def#1{#2#3#4#5}%
+}%
+% vvv also defined in other files
+{\catcode`p=12\catcode`t=12\gdef\@@mkb#1pt{#1}}% no p,t in @@mkb
+
+%** Find and process %%BoundingBox ADSC comment in an EPS file, or the first
+%** occurence of `/Mediabox [' (at BOL) in a PDF file. The PDF case is not
+%** perfect, but cannot be, since TeX is unable to read binary files
+%** properly; preprocess the PDF file with pdfboxes.pl to make sure.
+%** @param #1 a \cs. calls #1{FileName}{Fileformat}{LLX}{LLY}{URX}{URY}
+%** @param #2 filename
+\def\@@imgread@afile#1#2{%
+ % Dat: EPS with DOS-style binary preview is not supported
+ \begingroup
+ \@tempcnta0
+ % 0 Escape character (|\| in this manual)
+ % 1 Beginning of group (|{| in this manual)
+ % 2 End of group (|}| in this manual)
+ % 3 Math shift (|$| in this manual)
+ % 4 Alignment tab (| | in this manual)
+ % 5 End of line (\<return> in this manual)
+ % 6 Parameter (|#| in this manual)
+ % 7 Superscript (|^| in this manual)
+ % 8 Subscript (|_| in this manual)
+ % 9 Ignored character (\<null> in this manual)
+ %10 Space (\] in this manual)
+ %11 Letter (|A|, \dots, |Z| and |a|, \dots, |z|)
+ %12 Other character (none of the above or below)
+ %13 Active character (|~| in this manual)
+ %14 Comment character (|%| in this manual)
+ %15 Invalid character (\<delete> in this manual)
+ %
+ % (by pts@fazekas.hu at Sun Feb 2 18:27:56 CET 2003)
+ % The TeX \read primitive works like this: low-level line separators are
+ % "\012", "\015" and "\015\012". \read reads a single line, as ended by
+ % a single low-level line-separator. Two extra separators are assumed to be
+ % at EOF. Space tokens (10) at the beginning of the line are ignored. A
+ % series of empty lines are read as \par + space. The first end-of-line (5)
+ % token is converted to a space, and the rest is ignored. The first
+ % command (14) character and the rest is ignored.
+ % \ifeof is true between \openin and the first \read iff \open failed.
+ % Thus, we set all unprintable characters to ignored (9). We set both
+ % '\012' and '\015' to be comment (14), so no space would be appended at
+ % EOLs. Space and tab will be set to space (10). Thus real spaces won't be
+ % ignored at the beginning of the lines, and \par will never be read.
+ % It is impossible to read the %!PS header of some DOS EPSF files,
+ % because it might be before the first low-level line separator, but
+ % ignored because of how we read the EPSF header.
+ %
+ \@tempcnta0
+ \loop\ifnum\@tempcnta<32 %
+ \catcode\@tempcnta9 % ignored
+ \advance\@tempcnta\@ne
+ \repeat
+ \@tempcnta127
+ \loop\ifnum\@tempcnta<256%
+ \catcode\@tempcnta9 % ignored
+ \advance\@tempcnta\@ne
+ \repeat
+ \catcode`\\12% other
+ \catcode`\{12% other
+ \catcode`\}12% other
+ \catcode`\}12% other
+ \catcode`\$12% other
+ \catcode`\&12% other
+ \catcode`\#12% other
+ \catcode`\^12% other
+ \catcode`\_12% other
+ \catcode`\%12% other
+ \catcode`\~12% other
+ \catcode`\:12% other
+ \catcode`\-12% other
+ \catcode32=10% ' ': space, ignored at BOL
+ \catcode9=10% '\t': space, ignored at BOL
+ \catcode`\]10% ']': space, so we can parse /MediaBox correctly
+ \catcode\endlinechar14% '\015': end-of-line
+ \catcode10=14%
+ \catcode13=14%
+ \catcode0=14% important for tiff
+ \catcode198=12% last byte of DOS EPSF header
+ \catcode211=12% third byte of DOS EPSF header
+ \catcode208=12% second byte of DOS EPSF header
+ \catcode197=12% first byte of DOS EPSF header
+ \catcode137=12% first byte of PNG header
+ \catcode255=12% JPEG marker-header
+ \catcode216=12% JPEG SOI marker
+ %\endlinechar=-1%
+ \immediate\openin\@inputcheck#2 %
+ \def\@@imgread@fmt{?}%
+ \def\@@imgread@bbox{}% not found yet
+ \ifeof\@inputcheck
+ %\@latex@error%
+ \PackageError{bbox}{Image file `#2' not found}\@ehc
+ \else
+ \read\@inputcheck to\@tempa% first line
+ \catcode137=9 % first byte of PNG header
+ \catcode255=9 % JPEG marker-header
+ \catcode216=9 % JPEG SOI marker
+ \expandafter\@@imgread@setfour\expandafter\@tempb\@tempa....\\%
+ \expandafter\@@imgread@setfour\expandafter\@tempa\expandafter.\@tempb\\% \@tempb == ABCD -> @tempa = .ABC
+ % Now \@tempb contains the first 4 chars, and \@tempa is the first line
+ %\message{[\@tempb]}%
+ \let\@@imgread@test@end\@@imgread@test@yesend
+ \ifx\@tempb\@@imgread@PNG%
+ \def\@@imgread@fmt{PNG}%
+ \@@imgread@pdftexgetwh{#2}%
+ \else\ifx\@tempb\@@imgread@TIFFII%
+ \def\@@imgread@fmt{TIFF}%
+ \@@imgread@pdftexgetwh{#2}%
+ \else\ifx\@tempb\@@imgread@TIFFMM%
+ \def\@@imgread@fmt{TIFF}%
+ \@@imgread@pdftexgetwh{#2}%
+ \else\ifx\@tempb\@@imgread@DOSEPSF%
+ % Emit a warning, since these DOS EPSF files cannot be embedded
+ % properly by dvips, and even reading the bounding box is quite
+ % unstable.
+ \PackageWarning{pts_img}{DOS EPSF header in file `#2'\@gobble}%
+ \let\@tempb\@@imgread@EPS%
+ \let\@@imgread@test@end\@@imgread@test@noend
+ \def\@@imgread@fmt{EPS}% or PS
+ \else\ifx\@tempb\@@imgread@EPS%
+ \else\ifx\@tempb\@@imgread@PDF%
+ \else\ifx\@tempa\@@imgread@JPEG% \@tempa
+ \def\@@imgread@fmt{JPEG}%
+ \@@imgread@pdftexgetwh{#2}%
+ %\else% unknown image format
+ \fi\fi\fi\fi\fi\fi\fi%
+ \ifx\@tempb\@@imgread@EPS%
+ \def\@@imgread@fmt{EPS}% or PS
+ \edef\@percentchar{\expandafter\@secondoftwo\string\%}% LaTeX has it
+ \edef\@@imgread@BBox{\@percentchar\@percentchar BoundingBox}%
+ \edef\@@imgread@BBoh{\@percentchar\@percentchar HiResBoundingBox}%
+ \edef\@@imgread@BBoe{\@percentchar\@percentchar ExactBoundingBox}%
+ \edef\@@imgread@BBoc{\@percentchar\@percentchar Creator}%
+ \let\@@imgread@find@bb\@@imgread@find@eps%
+ \@@imgread@lines%
+ \else\ifx\@tempb\@@imgread@PDF%
+ \def\@@imgread@fmt{PDF}%
+ \edef\@@imgread@BBox{/MediaBox}% `/MediaBox [' or `/MediaBox['
+ \let\@@imgread@find@bb\@@imgread@find@pdf%
+ \@@imgread@lines%
+ \else% unknown
+ \fi\fi%
+ %\message{format:\@@imgread@fmt.}%
+ \immediate\closein\@inputcheck%
+ \fi% \ifeof\@inputcheck
+ \edef\@tempa{\noexpand#1{#2}{\@@imgread@fmt}\@tempa}%
+ \expandafter\endgroup\@tempa% end the group and call output command
+}
+
+%** Use pdfTeX to define \@tempa to be a bounding box of the image.
+%** @param #1 filename
+\def\@@imgread@pdftexgetwh#1{% !! Imp: use pdfTeX (if present) to get BBox
+ \def\@tempa{{?}{?}{?}{?}}% not pdfTeX. Cannot read binary files. Give up.
+ \expandafter\ifx\csname pdfoutput\endcsname\relax%
+ \else\ifnum0<\pdftexversion%
+ % Newer versions of pdfTeX can embed PNG, JPEG and TIFF images directly.
+ % Just load the image into a \hbox, and measure its dimensions.
+ \begingroup\setbox0=\hbox{%
+ \expandafter\ifx\csname pdfximage\endcsname\relax
+ \ifnum\pdftexversion<13% older, Debian Slink
+ \pdfimage#1\noexpand\noexpand\noexpand\@empty \relax% #1 may start with `width'
+ \else
+ \pdfimage{#1}%
+ \fi
+ \else% quite new pdfTeX
+ %\immediate\pdfximage would include the image file unnecessarily.
+ % Without \immediate, only a single PDF xref entry is occupied per
+ % image. This call to \pdfximage doesn't make the bug in
+ % pdftex_bug.tex manifest. What a luck.
+ \pdfximage{#1}%
+ \pdfrefximage\pdflastximage
+ \fi
+ }%
+ % Now \ht0 etc. have the width in bp. We convert it to pt first, and
+ % then remove the `pt' unit. The orinal dimension (in bp) was an integer,
+ % so we round to the nearest integer to compensate errors of fixed point
+ % arithmetic.
+ \dp0=-.99626400996264\dp0% *-72/72.27
+ \wd0=.99626400996264\wd0%
+ \ht0=.99626400996264\ht0%
+ \count0=\dp0\advance\count0 32768\divide\count0 65536%
+ \count1=\wd0\advance\count1 32768\divide\count1 65536%
+ \count2=\ht0\advance\count2 32768\divide\count2 65536%
+ %\message{pdfbbox=(0,\the\count0,\the\count1,\the\count2)}%
+ \edef\@tempa{\noexpand\def\noexpand\@tempa{{0}{\the\count0}{\the\count1}{\the\count2}}}%
+ \expandafter\endgroup\@tempa
+ \fi\fi%
+}
+
+%** Read the file line-by-line, stop at the first line containing BBox info.
+\def\@@imgread@lines{%
+ \@@imgread@true
+ \let\@tempb\@@imgread@false
+ \loop
+ %\endlinechar=65 \relax% doesn't work, a space will be appended
+ %\catcode13=9 % doesn't work, a space will be appended
+ \read\@inputcheck to\@tempa
+ \ifeof\@inputcheck
+ \@@imgread@false
+ \else
+ %\message{t(\@tempa)}%
+ \expandafter\@@imgread@find@bb\@tempa:[.\\%
+ \fi
+ \if@@imgread@\repeat
+ \ifx\@@imgread@bbox\@empty
+ \def\@tempa{{?}{?}{?}{?}}%
+ \else% found BBox -- maybe not syntactically correct
+ %\message{///\@tempa***}%
+ \expandafter\@@imgread@parse@bb\@@imgread@bbox\\%
+ \fi%
+}
+\def\@@imgread@find@eps#1:#2#3\\{%
+ \def\@tempa{#1}%
+ %\message{find(\@tempa)}%
+ \@@imgread@test@end#1.....\\% modifies \@tempa
+ \ifx\@tempa\@@imgread@BBox%
+ \@@imgread@test@atend#2#3()\\%
+ \else\ifx\@tempa\@@imgread@BBoh%
+ \@@imgread@test@atend#2#3()\\%
+ \ifx\@@imgread@bbox\@empty\else%
+ \def\@@imgread@BBox{:}% don't recognise subsequent %%BoundingBox after %%HiResBoundingBox
+ \fi%
+ \else\ifx\@tempa\@@imgread@BBoe%
+ \@@imgread@test@atend#2#3()\\%
+ \ifx\@@imgread@bbox\@empty\else%
+ \def\@@imgread@BBox{:}% don't recognise subsequent %%BoundingBox after %%HiResBoundingBox
+ \def\@@imgread@BBoh{:}% don't recognise subsequent %%HiResBoundingBox after %%ExactBoundingBox
+ \fi%
+ \else\ifx\@tempa\@@imgread@BBoc%
+ \@@imgread@test@creator#2#3\\%
+ \fi\fi\fi\fi%
+}
+%** In normal mode. Runs \@tempb if about to end
+%** @param #1..#5 single chararacter tokens
+\def\@@imgread@test@yesend#1#2#3#4#5#6\\{%
+ %\message{end(#1#2#3#4#5)}%
+ \if\noexpand#1\@percentchar%
+ \if\noexpand#2\@percentchar%
+ \if\noexpand#3E%
+ \if\noexpand#4n%
+ \if\noexpand#5d%
+ \@tempb%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \@tempb%
+ \fi%
+ \else%
+ \@tempb%
+ \fi%
+}%
+%** In MetaPost mode. Runs \@tempb if about to end.
+%** The %%HiResBoundingBox comment emitted by ConTeXt is usually after
+%** %%EndProlog. So we stop at the first line not beginning with `%'
+%** @param #1..#5 single chararacter tokens
+\def\@@imgread@test@mpend#1#2#3#4#5#6\\{%
+ \if\noexpand#1\@percentchar%
+ \else%
+ \@tempb%
+ \fi%
+}%
+%** Used as \@@imgread@test@end when reading a DOS EPSF file
+\def\@@imgread@test@noend#1\\{}%
+
+\def\@@imgread@find@pdf#1[#2#3\\{%
+ \def\@tempa{#1}%
+ %\message{find(\@tempa)}%
+ \ifx\@tempa\@@imgread@BBox \@@imgread@test@atend#2#3()\\\fi%
+}
+%** Recognise the ``%%Creator: MetaPost'' ADSC comment. Ruins @tempa
+\def\@@imgread@test@creator#1:#2\\{%
+ %\message{cr(#1)}%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@@imgread@sMetaPost%
+ \def\@@imgread@fmt{MPS}%
+ \let\@@imgread@test@end\@@imgread@test@mpend% find late %%HiresBoundingBox
+ \fi%
+}%
+\def\@@imgread@test@atend#1(#2)#3\\{%
+ %\message{atend(#2)}%
+ \ifx\@tempb\relax\else% don't allow early ending for (atend)
+ \let\@@imgread@test@end\@@imgread@test@yesend
+ \fi%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@@imgread@atend
+ \@@imgread@true
+ \let\@tempb\relax% read till EOF
+ \else
+ %\message{gotit(#1)}%
+ \def\@@imgread@bbox{#1}%
+ % Don't do \@@imgread@false, because better %%BoundingBox may come before %%End
+ \fi%
+}
+%** Sets \@tempa to the BBox info, ruins \dimen[1234]
+\def\@@imgread@parse@bb#1 #2 #3 #4:#5\\{%
+ \dimen1=#1pt \dimen2=#2pt \dimen3=#3pt \dimen4=#4pt% simplify and pre-round
+ % ^^^ important to remove spaces after #4
+ \edef\@tempa{{\expandafter\@@mkb\the\dimen1}{\expandafter\@@mkb\the\dimen2}{\expandafter\@@mkb\the\dimen3}{\expandafter\@@mkb\the\dimen4}}%
+ %\message{bbox(#1)(#2)(#3)(#4)[\@tempa]}%
+}%
diff --git a/macros/latex/exptl/graphicp/pts_img.sty b/macros/latex/exptl/graphicp/pts_img.sty
new file mode 100644
index 0000000000..75d123cc6a
--- /dev/null
+++ b/macros/latex/exptl/graphicp/pts_img.sty
@@ -0,0 +1,801 @@
+%
+% pts_img.sty -- better include image files (EPS or PDF) into TeX documents
+% by pts@fazekas.hu at Wed Jan 8 16:12:53 CET 2003
+%
+% pdftex at Fri Jan 10 02:21:17 CET 2003
+% laemu.sty at Fri Jan 24 13:19:59 CET 2003
+% at Sun Jan 26 20:44:09 CET 2003
+%
+% The routines in this file don't need the image to be present.
+%
+
+\expandafter\ifx\csname ifLaTeX\endcsname\relax\input laemu.sty\relax\fi%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pts_img}[2003/01/24 v0.0 include images]
+\RequirePackage{div16b}
+%\input div16b.tex
+%\catcode`\@=11 % \makeatletter
+
+% --- utilities
+
+% by pts@fazekas.hu at Fri Jan 10 00:38:14 CET 2003
+%
+%** Places a box of width #1, height #2, depth #3. A rectangular dot of size
+%** `1sp' will be placed to the llx and ury corners. The reference point is
+%** not moved. The dots will have white color.
+%** Don't pass \dimen0 as arguments!
+\def\@@spbox#1#2#3{\hbox to0sp{%
+ \@@img@push@white%\special{color push White}%
+ \dimen0=#3 \relax\dimen0-\dimen0\advance\dimen0 1sp%
+ \vrule width1sp height\dimen0 depth#3%
+ \kern#1 \kern-2sp%
+ \dimen0=#2 \relax\dimen0-\dimen0\advance\dimen0 2sp%
+ \vrule width1sp height#2 depth\dimen0%
+ \@@img@pop%\special{color pop}%
+ \hss%
+}}%
+
+% \def\@empty{}% not needed for LaTeX, needed for plain TeX
+
+\def\@@one{1}% must be a macro
+
+{\catcode`p=12\catcode`t=12\gdef\@@mkb#1pt{#1}}% no p,t in @@mkb
+{\catcode`p=12\catcode`t=12\gdef\@@mkbi#1.#2pt{#1}}% no p,t in @@mkb
+
+%** by pts@fazekas.hu at Fri Jan 10 01:14:31 CET 2003
+%** Expands to the result of the division #1/100.
+%** @param #1 a possibly negative decimal integer (-12) or real number
+%** (34.56), or a possibly negated \count register specification (-\count5)
+\def\@@divhundred#1{%
+ \expandafter\@@divhundred@c\number#1..\end%
+}%
+\def\@@divhundred@c#1{%
+ % Dat: \number will gobble extra leading zeroes after expansion
+ \if#1-%
+ -\number\expandafter\@@divhundred@d%
+ \else%
+ \number\expandafter\@@divhundred@e%
+ \fi%
+ #1%
+}%
+\def\@@divhundred@d#1{\@@divhundred@a00}%
+\def\@@divhundred@e{\@@divhundred@a00}%
+\def\@@divhundred@a#1#2#3{%
+ \if#3.%
+ .#1#2\expandafter\@@divhundred@b%
+ \else%
+ #1\expandafter\@@divhundred@a%
+ \fi%
+ #2#3%
+}%
+\def\@@divhundred@b#1#2#3.#4\end{#3}% Dat: gobble #1 and #2
+
+% Regression test:
+%\count0=42
+%\count1=-7
+%%\@@divhundred\alma{123}%
+%\message{\@@divhundred{1.45}}%
+%\message{\@@divhundred{12.45}}%
+%\message{\@@divhundred{123.45}}%
+%\message{\@@divhundred{1234.5}}%
+%\message{\@@divhundred{12345.}}%
+%\message{\@@divhundred{-\count0}}%
+%\message{\@@divhundred{-0137}}%
+%\message{\@@divhundred{-\count1}}%
+%\message{\@@divhundred{100}}% 1.00
+
+%** `\@@img@pdfsq#\@empty' expands to #, but `\' changed to `\\', `\(' changed
+%** to `\(' and `)' changed to '\)'. This is suitable for encoding something
+%** inside a PDF string. Discards space tokens, so the user should call
+%** \@@quotespace first.
+\def\@@img@pdfsq#1{%
+ \ifx\@empty#1%
+ \else
+ %\ifx\space#1\noexpand\space\else% would preserve \space
+ \if(\noexpand#1\@@img@pdfsq@bs\fi
+ \if)\noexpand#1\@@img@pdfsq@bs\fi
+ \if\@@img@pdfsq@bs\noexpand#1\@@img@pdfsq@bs\fi
+ #1%
+ %\fi
+ \expandafter\@@img@pdfsq
+ \fi
+}%
+\edef\@@img@pdfsq@bs{\expandafter\@gobble\string\\}% a backslash
+
+%** Expands to #1, but all space tokens are replaced by the `\space' control
+%** sequence.
+%** Doesn't work if the space is inside curly braces, but this condition can
+%** never happen, because beginning-of-group tokens are prohibited in #1.
+%** @param #1 must not contain characters of category beginning-of-group,
+%** end-of-group, active-chararacter or control-sequence (not even \space)
+\def\@@quotespace#1{%
+ \@@quotespace@lowa#1 \hsize\@gobble: %
+ % ^^^ \hsize is an arbitrary non-character token for which \ifx\hsize\hsize is true
+}%
+\def\@@quotespace@lowa#1 {%
+ \ifx\hsize#1\@empty%
+ \else%
+ #1% gobble the very first space (to balance the extra space added to the end by \@@quotespace)
+ \expandafter\@@quotespace@lowb
+ \fi
+}%
+\def\@@quotespace@lowb#1 {%
+ \ifx\hsize#1\@empty%
+ % ^^^ doesn't matter if #1 is more than one token unless \ifx is true
+ % ^^^ \@empty is there in case #1 is empty, so `\ifx\hsize\@empty' will be called
+ \else%
+ \noexpand\space#1%
+ \expandafter\@@quotespace@lowb
+ \fi
+}%
+
+% Regression test:
+%\message{s[\@@quotespace{}]}% s[]
+%\message{s[\@@quotespace{ }]}% s[\space ]
+%\message{s[\@@quotespace{a }]}% s[a\space ] % Note that ` ' is a single space token!
+%\message{s[\@@quotespace{ b}]}% s[\space b]
+%\message{s[\@@quotespace{\space b}]}% s[ b] % arument of \@@quotespace must not contain any control sequence
+%\message{s[\@@quotespace{aa bb}]}% s[aa\space bb]
+%\edef\@tempa{{a\space\space bc }}%
+%\message{s[\expandafter\@@quotespace\@tempa]}% s[a\space \space bc\space ]
+
+
+%\message{(\@@img@pdfsq a)l(ma\\;}%
+
+%** \edef#1{} if #1 == expand(#2)
+%** @param #1 must not be \@tempa
+\def\@@img@supportsit#1#2{%
+ \begingroup%
+ \edef\@tempa{#2}%
+ \ifx#1\@tempa%
+ \edef\@tempa{\noexpand\def\noexpand#1{}}%
+ \expandafter\endgroup\@tempa
+ \else
+ \endgroup
+ \fi
+}%
+%\def\@tempb{EPS}%
+%\@@img@supportsit\@tempb{EPST}
+%\message{(\@tempb)}
+
+% --- driver selection
+
+\def\@@img@driver{}%
+
+\expandafter\ifx\csname pdfoutput\endcsname\relax \chardef\pdfoutput=0 \fi
+\expandafter\ifx\csname pdftexversion\endcsname\relax \chardef\pdftexversion=0 \fi
+
+%** @param #1 desired driver name; examples:
+\def\@@img@setdriver#1{%
+ %\message{setdriver}%
+ \ifx\@@img@driver\@empty%
+ \edef\@@img@driver{#1}%
+ \ifx\@@img@driver\@empty% empty arg
+ \expandafter\ifx\csname graphicPdriver\endcsname\relax% guess the driver
+ \def\@@img@driver{dvi}% compatible with dvipdfm, dvips and xdvi
+ % \expandafter\ifx\csname pdfoutput\endcsname\relax\else% we have already defined it
+ \ifnum\pdfoutput>0 %
+ \def\@@img@driver{pdftex}%
+ \fi%
+ \else% Example: latex '\def\graphicPdriver{dvipdfm}\input laltest.tex'
+ \edef\@@img@driver{\graphicPdriver}%
+ \fi%
+ \fi%
+ %\errmessage{\@@img@driver}%
+ % vvv do driver intitializations
+ % vvv Imp: meaningful error if not found
+ \expandafter\ifx\csname @@imgdriver@\@@img@driver\endcsname\relax%
+ %\errmessage{img driver unknown: "#1"}%
+ \@@img@warnerr0{driver unknown: `\@@img@driver'}\@ehc%
+ \def\@@img@driver{dvi}% fallback
+ \fi
+ \csname @@imgdriver@\@@img@driver\endcsname% c@r@y@p@t@i@c, eh?
+ \else%
+ \edef\@tempa{#1}%
+ \ifx\@tempa\@@img@driver\else
+ \errmessage{cannot override img driver: `\@@img@driver' -> `#1'}%
+ \fi
+ \fi%
+}%
+
+%
+% The Driver interface expects the following macros from the driver:
+%
+%** Divides by 65536
+%** @param #1 \cs to be defined
+%** @param #2 number to be divided
+%\def\@@img@divword#1#2{...}
+%\def\@@img@div#1#2#3{...}
+%** Obsolete.
+%\def\@@img@mul#1#2#3{...}
+%** @deprecated
+%** @param #1 key
+%** @param #2 value
+%\def\@@img@kv#1#2{...}
+%** @param #1 expands to filename
+%** @param #2 xscale (number in percent, 100 == no scale)
+%** @param #3 yscale (number in percent, 100 == no scale)
+%** @param #4 expands to FileFormat (not in \@@img@ff)
+%\def\@@img@special#1#2#3{...}#4
+%** \edef#1{} iff the FileFormat specified in the contents of #1 is supported
+%** by the driver.
+%** @param #1 a macro \cs
+%\def\@@img@supported##1
+%** "eps", "pdf" etc.
+%\def\@@img@defext{...}
+%** Does the driver translate the image automatically as if bbox.llx==0 &&
+%** bbox.lly=0? "1" or "0"
+%\def\@@img@zeroll{...}
+
+% --- Implementations of the Driver interface
+
+\def\@@imgdriver@dvips{% dvips, xdvi
+ \def\@@img@supported##1{%
+ \@@img@supportsit##1{EPS}%
+ \@@img@supportsit##1{MPS}%
+ }%
+ \def\@@img@zeroll{0}%
+ \def\@@img@defext{eps}%
+ \def\@@img@push@white{\special{color push White}}%
+ \def\@@img@pop{\special{color pop}}%
+ \def\@@img@divword##1##2{%
+ \edef##1{##2\space 65536 div}%
+ }%
+ \def\@@img@div##1##2##3{%
+ \edef\@@img@tmp{##3}%
+ \ifx\@@img@tmp\@@one% do not divide by 1
+ \edef##1{##2}%
+ \else%
+ \edef##1{##2\space ##3\space div}%
+ \fi%
+ }%
+ %\def\@@img@kv##1##2{##2\space @##1}%
+ \def\@@img@special##1##2##3##4{{%
+ \def\@@tmp@c{100}%
+ \edef\@@tmp@x{##2}%
+ \edef\@@tmp@y{##3}%
+ \special{ps: @beginspecial %
+ \ifx\@@tmp@c\@@tmp@x\else##2 @hscale \fi% Imp: cmp w/o limits
+ \ifx\@@tmp@c\@@tmp@y\else##3 @vscale \fi% Imp: cmp w/o limits
+ @setspecial%
+ }%
+ \special{ps: plotfile "##1"}%
+ \special{ps: @endspecial}%
+ }}%
+}% </driver dvips}
+
+\def\@@imgdriver@dvipdfm{%
+ \def\@@img@MPS{MPS}% helper for \ifx
+ \def\@@img@EPS{EPS}% helper for \ifx
+ \def\@@img@PDF{PDF}% helper for \ifx
+ \def\@@img@supported##1{% v0.13.2b
+ \@@img@supportsit##1{EPS}% via the command in -D in dvipdfm/config
+ \@@img@supportsit##1{MPS}% natively (without HiReSB*), even with .ps extension
+ \@@img@supportsit##1{PDF}%
+ \@@img@supportsit##1{JPEG}%
+ \@@img@supportsit##1{PNG}%
+ }%
+ \def\@@img@zeroll{0}%
+ \def\@@img@defext{pdf}%
+ \def\@@img@push@white{\special{color push White}}%
+ \def\@@img@pop{\special{color pop}}%
+ \def\@@img@divword##1##2{{%
+ \dimen0 ##2 sp%
+ \edef##1{\expandafter\@@mkb\the\dimen0}%
+ \@@keepdefaftergroup##1%
+ }}%
+ %\def\@@img@kv##1##2{##1=##2}%
+ \def\@@img@suppCount{0}%
+ \def\@@img@special##1##2##3##4{{%
+ % This could be easy, but we do the hard way because
+ % -- PNG and JPEG images have to be scaled up by a factor of 100/72. This
+ % seems to be an intentional misfeature of dvipdfm, because the ebb(1)
+ % utility outputs bounding boxes scaled down by 72/100.
+ % -- for PNG and JPEG images \special{pdf: usexobj @N} doesn't work
+ % properly if N represents an Image XObject. (it outputs a
+ % scaled-down, square-shaped image) So we create a Form XObject.
+ % -- a Form XObject crops the negative left sidebearing of its contents,
+ % so we must not use it for MPS, EPS and PDF images. We use an Image
+ % XObject then.
+ % -- MPS seems to work fine, nothing is cropped by PSfile=... (it is
+ % obviously not an Image XObject, as defined by PDFRef.pdf)
+ \def\@@tmp@c{1.00}% 100 --\@@divhundred--> 1.00
+ \edef\@@tmp@x{\@@divhundred##2}%
+ \edef\@@tmp@y{\@@divhundred##3}%
+ \edef\@@tmp@ff{##4}%
+ \edef\@@tmp@ff{%
+ \ifx\@@tmp@ff\@@img@MPS 1\else%
+ \ifx\@@tmp@ff\@@img@EPS 1\else%
+ \ifx\@@tmp@ff\@@img@PDF 1\else%
+ \ifx\@@tmp@ff\@empty 1\else%
+ 0\fi\fi\fi\fi
+ }%
+ % vvv need additional scaling for non-MPS, non-EPS, non-PDF images
+ \if0\@@tmp@ff% not a scalable format (PNG or JPEG)
+ % stupid dvipdfm 0.13.2b: PNG and JPEG images must be upscaled 100/72
+ % Do an equivalent of \special{pdf: bt scale 1.38888888}
+ \begingroup
+ \dimen0=\@@tmp@x pt \dimen0=1.3888888\dimen0 % Imp: more accurate??
+ \dimen1=\@@tmp@y pt \dimen1=1.3888888\dimen1 %
+ %\message{##4;}%
+ \edef\@@tmp@x{\noexpand\def\noexpand\@@tmp@x{\expandafter\@@mkb\the\dimen0}%
+ \noexpand\def\noexpand\@@tmp@y{\expandafter\@@mkb\the\dimen1}}%
+ \expandafter\endgroup\@@tmp@x
+ \def\@@tmp@c{1.0}% 1 --\the--> 1.0pt
+ \fi%
+ % vvv define \special{pdf: bt ...} and \special{pdf: et}
+ \edef\@@tmp@xy{%
+ \ifx\@@tmp@c\@@tmp@x\else\space xscale \@@tmp@x\fi%
+ \ifx\@@tmp@c\@@tmp@y\else\space yscale \@@tmp@y\fi%
+ }%
+ \ifx\@@tmp@xy\@empty%
+ \let\@@tmp@xy\@empty
+ \let\@@tmp@et\@empty
+ \else
+ \edef\@@tmp@xy{\noexpand\special{pdf: bt\@@tmp@xy}}%
+ \def\@@tmp@et{\special{pdf: et}}%
+ \fi
+ %\message{[\@@tmp@xy]}%
+ %
+ \edef\@@img@cs{@@xi@##1}% remember only the filename, because of the bug
+ \@@tmp@xy
+ \expandafter\ifx\csname\@@img@cs\endcsname\relax%
+ \count0=\@@img@suppCount\relax%
+ %\message{tc0=\the\count0;\@@img@suppCount}%
+ \advance\count0 1%
+ %\edef\@@img@suppCount{\noexpand\def\noexpand\@@img@suppCount{\the\count0}}%
+ \global\edef\@@img@suppCount{\the\count0}%
+ \global\expandafter\edef\csname\@@img@cs\endcsname{\@@img@suppCount}%
+ %\message{alloced(\csname\@@img@cs\endcsname)}%
+ \if0\@@tmp@ff% not a scalable format (PNG or JPEG)
+ % vvv crops if bbox.llx is negative
+ \special{pdf: bxobj @p_i\@@img@suppCount\space width 16383pt height 16383pt depth 16383pt}%
+ \special{PSfile="##1"}% safely omit \@@img@pdfsq
+ \special{pdf: exobj}%
+ \special{pdf: uxobj @p_i\csname\@@img@cs\endcsname}%
+ \else
+ %\edef\@@tmp@ff{\expandafter\string\csname\@@img@cs\endcsname}% do the expansion before \@@img@pdfsq
+ %\chardef\space=0 %
+ \edef\@@tmp@ff{##1}% must be fully expanded before \@@tmp@ff. Imp: \string
+ \edef\@@tmp@ff{\expandafter\@@quotespace\expandafter{\@@tmp@ff}}% do the expansion before \@@img@pdfsq
+ %\def\space{ }%
+ %\show\@@tmp@ff%
+ %\message{pdf: image @p_i\@@img@suppCount(\expandafter\@@img@pdfsq\@@tmp@ff\@empty)}%
+ \special{pdf: image @p_i\@@img@suppCount(\expandafter\@@img@pdfsq\@@tmp@ff\@empty)}%
+ \fi
+ \else%
+ \special{pdf: uxobj @p_i\csname\@@img@cs\endcsname}%
+ \fi%
+ \@@tmp@et
+ %\if0\@@tmp@ff% not a scalable format (PNG or JPEG)
+ % \special{pdf: et}%
+ %\fi
+ }}%
+}% </driver dvipdfm>
+
+\def\@@imgdriver@dvi{%
+ \@@imgdriver@dvipdfm%
+ \def\@@img@defext{eps}%
+ \def\@@img@supported##1{% v0.13.2b
+ \@@img@supportsit##1{EPS}%
+ \@@img@supportsit##1{MPS}%
+ }%
+ \def\@@img@special##1##2##3##4{{% works for both dvips and dvipdfm
+ \def\@@tmp@c{100}%
+ \edef\@@tmp@x{##2}%
+ \edef\@@tmp@y{##3}%
+ \edef\@@tmp@ff{##4}%
+ \special{PSfile="##1"%
+ \ifx\@@tmp@c\@@tmp@x\else\space hscale=##2\fi% Imp: cmp w/o limits
+ \ifx\@@tmp@c\@@tmp@y\else\space vscale=##3\fi% Imp: cmp w/o limits
+ }%
+ }}%
+}%
+\def\@@imgdriver@invisible{%
+ \def\@@img@push@white{}%
+ \def\@@img@pop{}%
+ \def\@@img@divword##1##2{{%
+ \dimen0 ##2 sp%
+ \edef##1{\expandafter\@@mkb\the\dimen0}%
+ \@@keepdefaftergroup##1%
+ }}%
+ \def\@@img@zeroll{1}%
+ \def\@@img@defext{eps}%
+ \def\@@img@supported##1{%
+ \let##1\@empty% supports all file formats
+ }%
+ \def\@@img@special##1##2##3##4{}% works for all dvips, dvipdfm and pdftex :-)
+}%
+\def\@@imgdriver@blackbox{%
+ \@@imgdriver@invisible% inherit
+ \def\@@img@special##1##2##3##4{% works for all dvips, dvipdfm and pdftex :-)
+ %\vrule width\DW sp height\URY sp depth\DP sp % if not lowered
+ \vrule width\DW sp height\DH sp % if already lowered
+ }
+}%
+\def\@@imgdriver@frame{%
+ \@@imgdriver@invisible% inherit
+ \def\@@img@special##1##2##3##4{% works for all dvips, dvipdfm and pdftex :-)
+ %\vrule width\DW sp height\URY sp depth\DP sp % if not lowered
+ \hbox to0sp{\vrule height\@@img@framewidth width\DW sp\hss}% bottom
+ \raise\DH sp\hbox to0sp{\vrule height0sp depth\@@img@framewidth width\DW sp\hss}% top
+ \hbox to\DW sp{%
+ \vrule height\DH sp width\@@img@framewidth \hss% left
+ \vrule height\DH sp width\@@img@framewidth% right
+ }%
+ %\vrule width\DW sp height\DH sp % if already lowered
+ }
+}%
+\def\@@imgdriver@namedframe{%
+ \@@imgdriver@invisible% inherit
+ \def\@@img@special##1##2##3##4{% works for all dvips, dvipdfm and pdftex :-)
+ %\vrule width\DW sp height\URY sp depth\DP sp % if not lowered
+ \hbox to0sp{\vrule height\@@img@framewidth width\DW sp\hss}% bottom
+ \raise\DH sp\hbox to0sp{\vrule height0sp depth\@@img@framewidth width\DW sp\hss}% top
+ \hbox to\DW sp{%
+ \vrule height\DH sp width\@@img@framewidth \hss% left
+ \vrule height\DH sp width\@@img@framewidth% right
+ }%
+ \kern-\DW sp%
+ % vvv Imp: use \textascii to typeset \textbar etc. in the filename
+ \setbox0=\hbox{\@@img@framefont\raise1ex\hbox{\expandafter\expandafter\expandafter\@gobble\expandafter\string\csname##1\endcsname}}%
+ \wd0=0sp \ht0=0sp \dp0=0sp \copy0%
+ %\vrule width\DW sp height\DH sp % if already lowered
+ }
+}%
+\def\@@img@framewidth{.4pt}% used by the frameonly and namedframe drivers
+\def\@@img@framefont{\ttfamily\space}% Dat: \space: don't overwrite the frame
+
+\def\@@imgdriver@pdftex{%
+ \expandafter\ifx\csname graphicPnopdftexmpost\endcsname\relax%
+ % Don't load \convertMPtoPDF support in ConTeXt supp-pdf.tex if
+ % \usepackage[nopdftexmpost]{graphicP} was specified, because supp-pdf
+ % uses plenty of TeX resources.
+ \edef\@tempa{% Imp: allow user not load this
+ \catcode`\noexpand\!\the\catcode`\!
+ \catcode`\noexpand\@\the\catcode`\@
+ \catcode`\noexpand\?\the\catcode`\?
+ \catcode`\noexpand\`\the\catcode`\`
+ \catcode`\noexpand\"\the\catcode`\"
+ }%
+ % Dat: \unprotect is the macro that fails without \catcode96=12
+ \catcode96=12% ` is active in Babel magyar.ldf; does many harm on supp-pdf
+ \catcode34=12% " is active in Babel germanb.ldf; no harm on supp-pdf, but play it safe
+ \LaemuInputQuiet{supp-pdf}%
+ \@tempa%
+ \fi%
+ \@@imgdriver@@pdftexlow
+ % ^^^ must be a separate macro, otherwise supp-pdf won't load (limit exceeded)
+}%
+
+\def\@@imgdriver@@pdftexlow{%
+ \def\@@img@MPS{MPS}% helper for \ifx
+ \expandafter\ifx\csname convertMPtoPDF\endcsname\relax%
+ \def\@@img@suppMPS##1{}%
+ \else
+ \def\@@img@suppMPS##1{%
+ \ifx##1\@@img@MPS%
+ \def\@@img@zeroll{1}% \convertMPtoPDF assumes it, overrides when \pdftexversion<13
+ \let##1\@empty%
+ \fi%
+ }%
+ \fi
+ \def\@@img@supported##1{%
+ \@@img@supportsit##1{PDF}%
+ \@@img@supportsit##1{PNG}%
+ \@@img@supportsit##1{TIFF}%
+ \@@img@supportsit##1{JPEG}%
+ \@@img@suppMPS##1%
+ }%
+ \def\@@img@zeroll{1}%
+ \def\@@img@defext{pdf}%
+ % Imp: implement a real color _stack_
+ \def\@@img@@curcolor{0 g}% Dat: pdftex.def sets `0 g 0 G'
+ \def\@@img@push@white{\pdfliteral {1 g}}%
+ \def\@@img@pop{\pdfliteral {\@@img@@curcolor}}%
+ \def\@@img@divword##1##2{{%
+ \dimen0 ##2 sp%
+ \edef##1{\expandafter\@@mkb\the\dimen0}%
+ \@@keepdefaftergroup##1%
+ }}%
+ %\def\@@img@tobp##1##2{{%
+ % \dimen0 ##2 sp%
+ % \dimen0 0.996264\dimen0% pt -> bp
+ % \edef##1{\expandafter\@@mkb\the\dimen0}%
+ % \@@keepdefaftergroup##1%
+ %}}%
+ \def\@@img@kv##1##2{##1=##2}%
+ \def\@@img@special##1##2##3##4{{%
+ \def\@@tmp@c{1.00}%
+ \edef\@@tmp@x{\@@divhundred##2}%
+ \edef\@@tmp@y{\@@divhundred##3}%
+ \edef\@@tmp@ff{##4}%
+ %\message{\@@tmp@x*\@@tmp@y}%
+ \ifx\@@tmp@ff\@@img@MPS%
+ %\errmessage{embedding MetaPost to PDF}%
+ % vvv Use ConTeXt supp-pdf.tex
+ \convertMPtoPDF{##1}{\@@tmp@x}{\@@tmp@y}% Dat: fine, does --below margins right
+ \else%
+ \pdfliteral{ q \@@tmp@x\space 0 0 \@@tmp@y\space 0 0 cm}%
+ \hbox to0sp{%
+ \@@pdfimagecompat{}{##1}%
+ \hss}%
+ %\pdfliteral direct{q h 0 0 m 0 1 l h W* Q}% SUXX: cannot set clipping path :-(
+ \pdfliteral{ Q}%
+ \fi%
+ %\special{PSfile="##1"%
+ % \ifx\@@tmp@c\@@tmp@x\else\space hscale=##2\fi% Imp: cmp w/o limits
+ % \ifx\@@tmp@c\@@tmp@y\else\space vscale=##3\fi% Imp: cmp w/o limits
+ %}%
+ }}%
+ %
+ % This is how pdftex.def detects pdftex version:
+ %\ifx\pdftexversion\@undefined
+ % \def\@@pdftex@release{1}%
+ %\else
+ % \ifnum\pdftexversion<12
+ % \def\@@pdftex@release{2}%
+ % \else
+ % \ifnum\pdftexversion<13
+ % \ifnum \expandafter `\pdftexrevision < `n
+ % \def\@@pdftex@release{3}%
+ % \else
+ % \def\@@pdftex@release{4}%
+ % \fi
+ % \else
+ % \ifnum\pdftexversion=13
+ % \def\@@pdftex@release{5}%
+ % \else
+ % \ifnum\pdftexversion=14
+ % \def\@@pdftex@release{6}%
+ % \else
+ % \def\@@pdftex@release{7}%
+ % \fi
+ % \fi
+ % \fi
+ % \fi
+ %\fi
+ %
+ %\ifnum\pdftexversion<13% older, Debian Slink
+ %\else\ifnum\pdftexversion<15% newer, SuSE 6.2 and Debian Potato
+ %\else\ifnum\pdftexversion>99% newest, Debian Woody
+ %
+ % vvv before Sun Feb 9 20:06:01 CET 2003
+ %\ifnum\pdftexversion<13% older, Debian Slink
+ % \def\@@img@zeroll{0}%
+ % \def\@@pdfimagecompat##1##2{\pdfimage##1\noexpand\noexpand\noexpand\@empty ##2 \relax}%
+ % % Note the magic in front of the file name after \pdfimage, to
+ % % prevent it fouling up with file names starting with "depth".
+ %\else%
+ % \ifnum\pdftexversion<15% newer, SuSE 6.2 and Debian Potato
+ % \def\@@pdfimagecompat##1##2{\pdfimage##1 {##2}}%
+ % \else% newest, Debian Woody
+ % \def\@@pdfimagecompat##1##2{%
+ % \edef\@@img@cs{@@xi@##2}% remember only the filename, because of the bug
+ % \expandafter\ifx\csname\@@img@cs\endcsname\relax%
+ % \immediate\pdfximage##1{##2}% Dat: \immediate\pdfteximage solved a bug in pdftex_bug.tex
+ % \global\expandafter\edef\csname\@@img@cs\endcsname{\the\pdflastximage}%
+ % \fi%
+ % %\expandafter\expandafter\expandafter\pdfrefximage%
+ % \expandafter\pdfrefximage\csname\@@img@cs\endcsname%
+ % }%
+ % \fi%
+ %\fi%
+ % I have evaluated the use of \pdfxform / \pdfform instead of \pdfximage
+ % on older pdfTeXes (Debian Slink), and I got terrible results. pdfTeX
+ % insists on cropping the image to the size of the \hbox, and there are
+ % also other strange, excess cropping effects (especially on
+ % f2mletter.pdf), so I gave up and reverted to \pdfimage. Currently I
+ % don't know of any solution that uses \pdfxform, and doesn't embed the
+ % same image multiple times.
+ \expandafter\ifx\csname pdfximage\endcsname\relax
+ \expandafter\ifx\csname pdfimage\endcsname\relax
+ \@@img@warnerr0{Need either \string\pdfximage or \string\pdfimage.}\@ehc
+ \fi
+ \ifnum\pdftexversion<13% older, Debian Slink
+ \def\@@img@zeroll{0}%
+ \def\@@pdfimagecompat##1##2{\pdfimage##1\noexpand\noexpand\noexpand\@empty ##2 \relax}%
+ \else
+ \def\@@pdfimagecompat##1##2{\pdfimage##1 {##2}}%
+ \fi
+ \else
+ %** param ##1 attrs "width ... height ... depth ..."
+ %** param ##2 expands to filename
+ \def\@@pdfimagecompat##1##2{%
+ % pdfTeX, Version 3.14159-1.00a-pretest-20011114-ojmw (Web2C 7.3.7)
+ % has a bug that prevents including the same image with different
+ % /XObject numbers. (Actually, \immediate\pdfximage also solves the
+ % problem.
+ % So we cache /XObject numbers already allocated.
+ % Caching is a good idea anyway, so the output PDF file will be
+ % smaller.
+ \edef\@@img@cs{@@xi@##2}% remember only the filename, because of the bug
+ \expandafter\ifx\csname\@@img@cs\endcsname\relax%
+ \immediate\pdfximage##1{##2}% Dat: \immediate\pdfteximage solved a bug in pdftex_bug.tex
+ \global\expandafter\edef\csname\@@img@cs\endcsname{\the\pdflastximage}%
+ \fi%
+ %\expandafter\expandafter\expandafter\pdfrefximage%
+ \expandafter\pdfrefximage\csname\@@img@cs\endcsname%
+ }%
+ \fi
+}% </driver pdftex>
+
+% ---- main PutImage code
+
+\expandafter\ifx\csname @@img@forceunknown\endcsname\relax
+ %** What to do if the FileFormat is unknown/unsupported by the driver?
+ %** 0: PackageError, skip
+ %** 1: PackageWarning, skip
+ %** 2: PackageWarning, include the image
+ \def\@@img@forceunknown{0}% \let and \chardef are not good (both \if and \ifnum)
+\fi
+
+%** @param #1 error if 0; warning otherwise
+\def\@@img@warnerr#1#2#3{%
+ \if0#1%
+ \PackageError{pts_img}{#2}{#3}%
+ \else
+ \PackageWarning{pts_img}{#2}%
+ \fi
+}%
+
+%** @param #1..#4 \count register spec
+%** @param #5..#8 dimensions
+\def\@@img@letbbox#1#2#3#4#5#6#7#8{%
+ \@@letdimcountany{#1}{#5}{bp}%
+ \@@letdimcountany{#2}{#6}{bp}%
+ \@@letdimcountany{#3}{#7}{bp}%
+ \@@letdimcountany{#4}{#8}{bp}%
+}%
+
+%\def\@@gobblecomma#1,#2\end{}%
+\def\@@img@minus{-}%
+
+%** Puts a \hbox containing the specified image. Doesn't open the image file.
+%** New arguments may be added in subsequent versions
+%** @param #1 dimension (in image pixels or image bp) to raise above the
+%** baseline. May contain a double minus sign. Default metric unit is `bp'.
+%** If omitted, then negative bbox.lly will be converted to a lowering.
+%** @param #2 empty or overrides \@@img@forceunknown
+%** @param #3 ignored
+%** @param #4 {llx}{lly}{urx}{ury}
+%** @param #5 desired width, or 0pt
+%** @param #6 desired height+depth, or 0pt
+%** @param #7 0 if noclip, 1 if clip [ignored]
+%** @param #8 filename
+%** @param #9 FileFormat
+\def\@@PutImage#1#2#3#4#5#6#7#8#9{%
+ \ifx\@@img@driver\@empty%
+ \@@img@setdriver{}% guess a resonable default
+ \fi%
+ {%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty\else \edef\@@img@forceunknown{#2}\fi%
+ \countdef\LLX1 \countdef\LLY2 \countdef\URX3 \countdef\URY4 %
+ \@@img@letbbox\LLX\LLY\URX\URY#4%
+ %\countdef\LLX1 \@@letdimcount\LLX{#1}% old default: sp
+ \countdef\DW 5 \@@letdimcount\DW {#5}%
+ \countdef\DH 6 \@@letdimcount\DH {#6}%
+ \countdef\WD 7 \WD\URX \advance\WD-\LLX%
+ % Imp: check for \ifnum\WD<0, the same for height
+ \countdef\UP 8 \UP0%
+ \edef\@tempa{#1}%
+ \ifx\@tempa\@@img@minus \let\@tempa\@empty\fi
+ \ifx\@tempa\@empty% calculate lowering from the image
+ \ifnum0<\LLY \UP-\LLY \advance\URY-\LLY \LLY0 \fi
+ % ^^^ Dat: LLY<0 and LLY>=0 are treated quite differently
+ % ^^^ -\LLY BUGFIX at Sun Feb 9 21:50:23 CET 2003
+ \else
+ \UP-\LLY \advance\URY-\LLY %
+ \@@letdimcountany\LLY{#1}{bp}%
+ \advance\URY\LLY%
+ \advance\UP\LLY%
+ \fi
+ \countdef\DP 9 \DP-\LLY%
+ \countdef\MLX10 \MLX-\LLX%
+ \countdef\TC 11% temporary count register
+ \countdef\TH 12 \TH\URY \advance\TH\DP% total height+depth
+ \countdef\SW 13 % width scale facter
+ \countdef\SH 14 % height scale factor
+ % Now: LLY=-depth URY=height
+ \def\DOhscale{100}% horizontal scale
+ \def\DOvscale{100}% vertical scale
+ \ifnum0>\DW
+ \PackageError{pts_img}{Desired width must be positive}\@ehc
+ \DW0%
+ \fi%
+ \ifnum0>\DH
+ \PackageError{pts_img}{Desired height must be positive}\@ehc
+ \DH0%
+ \fi%
+ \ifnum\DH>0%
+ \@@muldivletposdim\SH{100pt}\DH\TH%
+ \ifnum\DW>0% both \DW and \DH are given
+ \@@muldivletposdim\SW{100pt}\DW\WD%
+ %\message{100pt*\the\DH/\the\TH=\the\SH;100pt*\the\DW/\the\WD:\the\SW}%
+ % ^^^ 100*5594039/1973452=18577140;100*3729359/1315635:18577134
+ % I've verified that \@@muldivletposdim works accurately, but the input
+ % values are inaccurate!
+ \@@muldivletposdim\MLX\MLX\DW\WD%
+ \else% \DH given, calculate \DW from it
+ \@@muldivletposdim\DW\DH\WD\TH%
+ % if initially DW==0: TC:=(DH*WD/TH)/WD; should be: TC:=DH/TH
+ \SW\SH%
+ \@@muldivletposdim\MLX\MLX\DH\TH%
+ \fi%
+ \@@muldivletposdim\UP\UP\DH\TH%
+ \ifnum\DP=0% \DP=0 <=> \URY=\TH
+ \URY=\DH%
+ \else%
+ \@@muldivletposdim\URY\URY\DH\TH%
+ \@@muldivletposdim\DP\DP\DH\TH%
+ \fi%
+ \else%
+ \ifnum\DW>0% \DW given, calculate \DH from it
+ \@@muldivletposdim\SW{100pt}\DW\WD%
+ \SH\SW%
+ \@@muldivletposdim\DH\TH\DW\WD%
+ \@@muldivletposdim\UP\UP\DW\WD%
+ \ifnum\DP=0% \DP=0 <=> \URY=\TH
+ \URY=\DW%
+ \else%
+ \@@muldivletposdim\URY\URY\DW\WD%
+ \@@muldivletposdim\DP\DP\DW\WD%
+ \fi%
+ \@@muldivletposdim\MLX\MLX\DH\TH%
+ \else% \DW and \DH are not given
+ \DW=\WD \DH=\TH%
+ \fi%
+ \fi%
+ %
+ \ifnum\DW=\WD\else% vvv scale width
+ \@@img@divword\DOhscale{\the\SW}%
+ %\edef\DOhscale{\@@img@kv{hscale}{\DOhscale} }%
+ \fi%
+ \ifnum\DH=\TH\else% vvv scale height
+ \@@img@divword\DOvscale{\the\SH}%
+ %\edef\DOvscale{\@@img@kv{vscale}{\DOvscale} }%
+ \fi%
+ % Dat: we replace `@beginspecial @hoffset' with \raise...\hbox{\kern...}',
+ % because dvipdfm version 0.13.2b ignores @hoffset and @voffset
+ %\ifnum\MLX=0\else%
+ % %\@@img@div\TMP{\the\MLX}{65781.76}% Dat: 65781.76 == 65536/72*72.27
+ % % Dat: dvipdfm doesn't support @hoffset
+ %\fi%
+ %\ifnum\UP=0\else% Imp: create test case
+ %\fi%
+ %
+ % vvv aid `dvips -E' bbox calculation
+ \@@spbox{\DW sp}{\URY sp}{\DP sp}%
+ % vvv Dat: \special{PSfile=...} calculates bbox incorrectly with
+ % dvips 5.86e, and xdvi the bbox even if it shouldn't. So I decided to
+ % use \special{ps: plotfile}, which is understood by both dvips and
+ % xdvi.
+ % ^^^ is this still true? (test it!) (how is a bbox calculated)
+ \edef\@@img@ff{#9}% FileFormat
+ \@@img@supported\@@img@ff% driver sets it to empty if supported
+ %\message{ffsupp=(\@@img@ff)}%
+ \ifx\@@img@ff\@empty\else%
+ % Only a warning, because further implementations may support it in fact.
+ %\message{\@@img@forceunknown!}%
+ \@@img@warnerr\@@img@forceunknown{Unsupported FileFormat `#9' for driver `\@@img@driver'\MessageBreak in image file `#8'}\@ehc%
+ \expandafter\ifnum\@@img@forceunknown>1 \let\@@img@ff\@empty\fi
+ \fi%
+ \ifx\@@img@ff\@empty% include the image only if FileFormat is known
+ %\edef\@@img@ff{#9}%
+ \ifnum\@@img@zeroll=1 %
+ \vrule width0pt % leave vertical mode
+ \lower\DP sp\hbox to0pt{\@@img@special{#8}\DOhscale\DOvscale{#9}\hss}%
+ \else%
+ %\message{#8:::\the\UP;;; }%
+ \setbox1=\hbox{\raise\UP sp\hbox to0pt{\kern\MLX sp
+ \@@img@special{#8}\DOhscale\DOvscale{#9}%
+ \hss}}%
+ \dp1=0sp \ht1=0sp \copy1% TeX overestimates box size because of \raise
+ \fi%
+ \fi
+ % vvv Really put the \hbox there
+ \hbox to\DW sp{\vrule width0sp height\URY sp depth\DP sp\hss}%
+}}%
+
+%\@@imgdriver@pdftex
diff --git a/macros/latex/exptl/mem/Mtp/allmtp.py b/macros/latex/exptl/mem/Mtp/allmtp.py
new file mode 100755
index 0000000000..af8f2ea2ad
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/allmtp.py
@@ -0,0 +1,27 @@
+# This little script is for personal use.
+# Creates ocp files and moves them to the
+# parent directory.
+# 2004. Javier Bezos. Public domain.
+
+import glob, os
+
+def mtptoocp(i):
+ os.system('python ..\\Tools\\mtp2ocp.py %s' % i[:-4])
+ print ' -> done'
+ try: os.remove('..\\%s.ocp' % i[:-4])
+ except: pass
+ os.rename(i[:-4] + '.ocp', '..\\%s.ocp' % i[:-4])
+#end
+
+for i in glob.glob('*.mtp'):
+ print 'Creating ', i,
+ if os.path.exists('..\\%s.ocp' % i[:-4]):
+ if os.path.getmtime(i) > os.path.getmtime('..\\%s.ocp' % i[:-4]):
+ mtptoocp(i)
+ else:
+ print i, ' -> skipped'
+ #end
+ else:
+ mtptoocp(i)
+ #end
+
diff --git a/macros/latex/exptl/mem/Mtp/ellintex.mtp b/macros/latex/exptl/mem/Mtp/ellintex.mtp
new file mode 100644
index 0000000000..8e5a42298d
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ellintex.mtp
@@ -0,0 +1,249 @@
+% Based on grpo2uni
+
+input: 2;
+output: 2;
+
+expressions:
+
+`<'`''`a'`|' => [GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+`<'`''`h'`|' => [GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+`<'`''`w'`|' => [GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+`<'`='`a'`|' => [GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+`<'`='`h'`|' => [GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+`<'`='`w'`|' => [GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+`<'``'`a'`|' => [GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+`<'``'`h'`|' => [GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+`<'``'`w'`|' => [GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+`>'`''`a'`|' => [GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+`>'`''`h'`|' => [GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+`>'`''`w'`|' => [GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+`>'`='`a'`|' => [GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+`>'`='`h'`|' => [GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+`>'`='`w'`|' => [GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+`>'``'`a'`|' => [GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+`>'``'`h'`|' => [GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+`>'``'`w'`|' => [GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+`"'`''`i' => [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA] ;
+`"'`''`u' => [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA] ;
+`"'`='`i' => [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI] ;
+`"'`='`u' => [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI] ;
+`"'``'`i' => [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA] ;
+`"'``'`u' => [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA] ;
+`''`a'`|' => [GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI] ;
+`''`h'`|' => [GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI] ;
+`''`w'`|' => [GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI] ;
+`<'`''`a' => [GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA] ;
+`<'`''`e' => [GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA] ;
+`<'`''`h' => [GREEK SMALL LETTER ETA WITH DASIA AND OXIA] ;
+`<'`''`i' => [GREEK SMALL LETTER IOTA WITH DASIA AND OXIA] ;
+`<'`''`o' => [GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA] ;
+`<'`''`u' => [GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA] ;
+`<'`''`w' => [GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA] ;
+`<'`='`a' => [GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI] ;
+`<'`='`e' => [GREEK SMALL LETTER EPSILON WITH DASIA][COMBINING TILDE] ;
+`<'`='`h' => [GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI] ;
+`<'`='`i' => [GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI] ;
+`<'`='`o' => [GREEK SMALL LETTER OMICRON WITH DASIA][COMBINING TILDE] ;
+`<'`='`u' => [GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI] ;
+`<'`='`w' => [GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI] ;
+`<'``'`a' => [GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA] ;
+`<'``'`e' => [GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA] ;
+`<'``'`h' => [GREEK SMALL LETTER ETA WITH DASIA AND VARIA] ;
+`<'``'`i' => [GREEK SMALL LETTER IOTA WITH DASIA AND VARIA] ;
+`<'``'`o' => [GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA] ;
+`<'``'`u' => [GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA] ;
+`<'``'`w' => [GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA] ;
+`<'`a'`|' => [GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI] ;
+`<'`h'`|' => [GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI] ;
+`<'`w'`|' => [GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI] ;
+`='`a'`|' => [GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+`='`h'`|' => [GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+`='`w'`|' => [GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+`>'`''`a' => [GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA] ;
+`>'`''`e' => [GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA] ;
+`>'`''`h' => [GREEK SMALL LETTER ETA WITH PSILI AND OXIA] ;
+`>'`''`i' => [GREEK SMALL LETTER IOTA WITH PSILI AND OXIA] ;
+`>'`''`o' => [GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA] ;
+`>'`''`u' => [GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA] ;
+`>'`''`w' => [GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA] ;
+`>'`='`a' => [GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI] ;
+`>'`='`e' => [GREEK SMALL LETTER EPSILON WITH PSILI][COMBINING TILDE] ;
+`>'`='`h' => [GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI] ;
+`>'`='`i' => [GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI] ;
+`>'`='`o' => [GREEK SMALL LETTER OMICRON WITH PSILI][COMBINING TILDE] ;
+`>'`='`u' => [GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI] ;
+`>'`='`w' => [GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI] ;
+`>'``'`a' => [GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA] ;
+`>'``'`e' => [GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA] ;
+`>'``'`h' => [GREEK SMALL LETTER ETA WITH PSILI AND VARIA] ;
+`>'``'`i' => [GREEK SMALL LETTER IOTA WITH PSILI AND VARIA] ;
+`>'``'`o' => [GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA] ;
+`>'``'`u' => [GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA] ;
+`>'``'`w' => [GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA] ;
+`>'`a'`|' => [GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI] ;
+`>'`h'`|' => [GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI] ;
+`>'`w'`|' => [GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI] ;
+``'`a'`|' => [GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI] ;
+``'`h'`|' => [GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI] ;
+``'`w'`|' => [GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI] ;
+`"'`I' => [GREEK CAPITAL LETTER IOTA WITH DIALYTIKA] ;
+`"'`U' => [GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA] ;
+`"'`i' => [GREEK SMALL LETTER IOTA WITH DIALYTIKA] ;
+`"'`u' => [GREEK SMALL LETTER UPSILON WITH DIALYTIKA] ;
+`''`a' => [GREEK SMALL LETTER ALPHA WITH OXIA] ;
+`''`e' => [GREEK SMALL LETTER EPSILON WITH OXIA] ;
+`''`h' => [GREEK SMALL LETTER ETA WITH OXIA] ;
+`''`i' => [GREEK SMALL LETTER IOTA WITH OXIA] ;
+`''`o' => [GREEK SMALL LETTER OMICRON WITH OXIA] ;
+`''`u' => [GREEK SMALL LETTER UPSILON WITH OXIA] ;
+`''`w' => [GREEK SMALL LETTER OMEGA WITH OXIA] ;
+`<'`'' => [GREEK DASIA AND OXIA] ;
+`<'`<' => [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] ;
+`<'`=' => [GREEK DASIA AND PERISPOMENI] ;
+`<'``' => [GREEK DASIA AND VARIA] ;
+`<'`a' => [GREEK SMALL LETTER ALPHA WITH DASIA] ;
+`<'`e' => [GREEK SMALL LETTER EPSILON WITH DASIA] ;
+`<'`h' => [GREEK SMALL LETTER ETA WITH DASIA] ;
+`<'`i' => [GREEK SMALL LETTER IOTA WITH DASIA] ;
+`<'`o' => [GREEK SMALL LETTER OMICRON WITH DASIA] ;
+`<'`r' => [GREEK SMALL LETTER RHO WITH DASIA] ;
+`<'`u' => [GREEK SMALL LETTER UPSILON WITH DASIA] ;
+`<'`w' => [GREEK SMALL LETTER OMEGA WITH DASIA] ;
+`='`P' => [GREEK LETTER SAMPI] ;
+`='`Q' => [GREEK LETTER KOPPA] ;
+`='`S' => [GREEK LETTER STIGMA] ;
+`='`a' => [GREEK SMALL LETTER ALPHA WITH PERISPOMENI] ;
+`='`e' => [GREEK SMALL LETTER EPSILON][COMBINING TILDE] ;
+`='`h' => [GREEK SMALL LETTER ETA WITH PERISPOMENI] ;
+`='`i' => [GREEK SMALL LETTER IOTA WITH PERISPOMENI] ;
+`='`o' => [GREEK SMALL LETTER OMICRON][COMBINING TILDE] ;
+`='`p' => [GREEK SMALL LETTER SAMPI] ;
+`='`q' => [GREEK SMALL LETTER KOPPA] ;
+`='`s' => [GREEK SMALL LETTER STIGMA] ;
+`='`u' => [GREEK SMALL LETTER UPSILON WITH PERISPOMENI] ;
+`='`w' => [GREEK SMALL LETTER OMEGA WITH PERISPOMENI] ;
+`>'`'' => [GREEK PSILI AND OXIA] ;
+`>'`=' => [GREEK PSILI AND PERISPOMENI] ;
+`>'`>' => [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] ;
+`>'``' => [GREEK PSILI AND VARIA] ;
+`>'`a' => [GREEK SMALL LETTER ALPHA WITH PSILI] ;
+`>'`e' => [GREEK SMALL LETTER EPSILON WITH PSILI] ;
+`>'`h' => [GREEK SMALL LETTER ETA WITH PSILI] ;
+`>'`i' => [GREEK SMALL LETTER IOTA WITH PSILI] ;
+`>'`o' => [GREEK SMALL LETTER OMICRON WITH PSILI] ;
+`>'`r' => [GREEK SMALL LETTER RHO WITH PSILI] ;
+`>'`u' => [GREEK SMALL LETTER UPSILON WITH PSILI] ;
+`>'`w' => [GREEK SMALL LETTER OMEGA WITH PSILI] ;
+`^'`A' => [GREEK CAPITAL LETTER ALPHA WITH VRACHY] ;
+`^'`E' => [GREEK CAPITAL LETTER EPSILON][COMBINING BREVE] ;
+`^'`H' => [GREEK CAPITAL LETTER ETA][COMBINING BREVE] ;
+`^'`I' => [GREEK CAPITAL LETTER IOTA WITH VRACHY] ;
+`^'`O' => [GREEK CAPITAL LETTER OMICRON][COMBINING BREVE] ;
+`^'`U' => [GREEK CAPITAL LETTER UPSILON WITH VRACHY] ;
+`^'`W' => [GREEK CAPITAL LETTER OMEGA][COMBINING BREVE] ;
+`^'`a' => [GREEK SMALL LETTER ALPHA WITH VRACHY] ;
+`^'`e' => [GREEK SMALL LETTER EPSILON][COMBINING BREVE] ;
+`^'`h' => [GREEK SMALL LETTER ETA][COMBINING BREVE] ;
+`^'`i' => [GREEK SMALL LETTER IOTA WITH VRACHY] ;
+`^'`o' => [GREEK SMALL LETTER OMICRON][COMBINING BREVE] ;
+`^'`u' => [GREEK SMALL LETTER UPSILON WITH VRACHY] ;
+`^'`w' => [GREEK SMALL LETTER OMEGA][COMBINING BREVE] ;
+`_'`A' => [GREEK CAPITAL LETTER ALPHA WITH MACRON] ;
+`_'`E' => [GREEK CAPITAL LETTER EPSILON][COMBINING MACRON] ;
+`_'`H' => [GREEK CAPITAL LETTER ETA][COMBINING MACRON] ;
+`_'`I' => [GREEK CAPITAL LETTER IOTA WITH MACRON] ;
+`_'`O' => [GREEK CAPITAL LETTER OMICRON][COMBINING MACRON] ;
+`_'`U' => [GREEK CAPITAL LETTER UPSILON WITH MACRON] ;
+`_'`W' => [GREEK CAPITAL LETTER OMEGA][COMBINING MACRON] ;
+`_'`a' => [GREEK SMALL LETTER ALPHA WITH MACRON] ;
+`_'`e' => [GREEK SMALL LETTER EPSILON][COMBINING MACRON] ;
+`_'`h' => [GREEK SMALL LETTER ETA][COMBINING MACRON] ;
+`_'`i' => [GREEK SMALL LETTER IOTA WITH MACRON] ;
+`_'`o' => [GREEK SMALL LETTER OMICRON][COMBINING MACRON] ;
+`_'`u' => [GREEK SMALL LETTER UPSILON WITH MACRON] ;
+`_'`w' => [GREEK SMALL LETTER OMEGA][COMBINING MACRON] ;
+``'`a' => [GREEK SMALL LETTER ALPHA WITH VARIA] ;
+``'`e' => [GREEK SMALL LETTER EPSILON WITH VARIA] ;
+``'`h' => [GREEK SMALL LETTER ETA WITH VARIA] ;
+``'`i' => [GREEK SMALL LETTER IOTA WITH VARIA] ;
+``'`o' => [GREEK SMALL LETTER OMICRON WITH VARIA] ;
+``'`u' => [GREEK SMALL LETTER UPSILON WITH VARIA] ;
+``'`w' => [GREEK SMALL LETTER OMEGA WITH VARIA] ;
+`|'`|' => [GREEK LUNATE EPSILON SYMBOL] ;
+`a'`|' => [GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI] ;
+`h'`|' => [GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI] ;
+`w'`|' => [GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI] ;
+`;' => [GREEK ANO TELEIA] ;
+`<'`<' => [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] ;
+`<' => [GREEK DASIA] ;
+`>'`>' => [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] ;
+`>' => [GREEK PSILI] ;
+`?' => [GREEK QUESTION MARK] ;
+`A' => [GREEK CAPITAL LETTER ALPHA] ;
+`B' => [GREEK CAPITAL LETTER BETA] ;
+`D' => [GREEK CAPITAL LETTER DELTA] ;
+`E' => [GREEK CAPITAL LETTER EPSILON] ;
+`F' => [GREEK CAPITAL LETTER PHI] ;
+`G' => [GREEK CAPITAL LETTER GAMMA] ;
+`H' => [GREEK CAPITAL LETTER ETA] ;
+`I' => [GREEK CAPITAL LETTER IOTA] ;
+`J' => [GREEK CAPITAL LETTER THETA] ;
+`K' => [GREEK CAPITAL LETTER KAPPA] ;
+`L' => [GREEK CAPITAL LETTER LAMDA] ;
+`M' => [GREEK CAPITAL LETTER MU] ;
+`N' => [GREEK CAPITAL LETTER NU] ;
+`O' => [GREEK CAPITAL LETTER OMICRON] ;
+`P' => [GREEK CAPITAL LETTER PI] ;
+`Q' => [GREEK CAPITAL LETTER CHI] ;
+`R' => [GREEK CAPITAL LETTER RHO] ;
+`S' => [GREEK CAPITAL LETTER SIGMA] ;
+`T' => [GREEK CAPITAL LETTER TAU] ;
+`U' => [GREEK CAPITAL LETTER UPSILON] ;
+`V' => [GREEK LETTER DIGAMMA] ;
+`W' => [GREEK CAPITAL LETTER OMEGA] ;
+`X' => [GREEK CAPITAL LETTER XI] ;
+`Y' => [GREEK CAPITAL LETTER PSI] ;
+`Z' => [GREEK CAPITAL LETTER ZETA] ;
+`^' => [COMBINING BREVE] ;
+`_' => [COMBINING MACRON] ;
+`a' => [GREEK SMALL LETTER ALPHA] ;
+`b' => [GREEK SMALL LETTER BETA] ;
+`c' => [GREEK SMALL LETTER FINAL SIGMA] ;
+`d' => [GREEK SMALL LETTER DELTA] ;
+`e' => [GREEK SMALL LETTER EPSILON] ;
+`f' => [GREEK SMALL LETTER PHI] ;
+`g' => [GREEK SMALL LETTER GAMMA] ;
+`h' => [GREEK SMALL LETTER ETA] ;
+`i' => [GREEK SMALL LETTER IOTA] ;
+`j' => [GREEK SMALL LETTER THETA] ;
+`k' => [GREEK SMALL LETTER KAPPA] ;
+`l' => [GREEK SMALL LETTER LAMDA] ;
+`m' => [GREEK SMALL LETTER MU] ;
+`n' => [GREEK SMALL LETTER NU] ;
+`o' => [GREEK SMALL LETTER OMICRON] ;
+`p' => [GREEK SMALL LETTER PI] ;
+`q' => [GREEK SMALL LETTER CHI] ;
+`r' => [GREEK SMALL LETTER RHO] ;
+`s' => [GREEK SMALL LETTER SIGMA] ;
+`t' => [GREEK SMALL LETTER TAU] ;
+`u' => [GREEK SMALL LETTER UPSILON] ;
+`v' => [GREEK SMALL LETTER DIGAMMA] ;
+`w' => [GREEK SMALL LETTER OMEGA] ;
+`x' => [GREEK SMALL LETTER XI] ;
+`y' => [GREEK SMALL LETTER PSI] ;
+`z' => [GREEK SMALL LETTER ZETA] ;
+`_' => [COMBINING MACRON] ;
+`^' => [COMBINING BREVE] ;
+`|' => [GREEK PROSGEGRAMMENI] ;
+
+`?' => [GREEK QUESTION MARK] ;
+`;' => [GREEK ANO TELEIA] ;
+`-'`-'`-' => [EM DASH] ;
+`-'`-' => [EN DASH] ;
+``'``' => [DOUBLE HIGH-REVERSED-9 QUOTATION MARK] ;
+``' => [SINGLE HIGH-REVERSED-9 QUOTATION MARK] ;
+`''`'' => [RIGHT DOUBLE QUOTATION MARK] ;
+`'' => [RIGHT SINGLE QUOTATION MARK] ;
+`<'`<' => [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] ;
+`>'`>' => [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] ;
+
diff --git a/macros/latex/exptl/mem/Mtp/ellinviu.mtp b/macros/latex/exptl/mem/Mtp/ellinviu.mtp
new file mode 100644
index 0000000000..3f5b2ecbeb
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ellinviu.mtp
@@ -0,0 +1,15 @@
+input: 2;
+output: 2;
+
+expressions:
+
+% Note the following contains font dependent
+% assignments, since the meaning in LOM and
+% Unicode of @"03F5-@"03F6 is different.
+
+`.' [GREEK SMALL LETTER IOTA] => @"03F5 ; % Inverted i
+`.' [GREEK CAPITAL LETTER IOTA] => @"03F4 ; % Inverted I
+`.' [GREEK SMALL LETTER UPSILON] => @"03F7 ; % Inverted u
+`.' [GREEK CAPITAL LETTER UPSILON] => @"03F6 ; % Inverted U
+
+. => \1;
diff --git a/macros/latex/exptl/mem/Mtp/ellmedb.mtp b/macros/latex/exptl/mem/Mtp/ellmedb.mtp
new file mode 100644
index 0000000000..07ac9394db
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ellmedb.mtp
@@ -0,0 +1,13 @@
+input: 2;
+output: 2;
+
+aliases:
+
+LETTER = ([GREEK SMALL LETTER ALPHA WITH TONOS]-[GREEK THETA SYMBOL] | [GREEK PHI SYMBOL] | [GREEK PI SYMBOL] | [GREEK KAPPA SYMBOL]-[GREEK LETTER YOT] | [GREEK SMALL LETTER ALPHA WITH PSILI]-@"1FFF) ;
+
+expressions:
+
+{LETTER}[GREEK SMALL LETTER BETA][GREEK SMALL LETTER BETA] => \1 [GREEK BETA SYMBOL] [GREEK BETA SYMBOL] ;
+{LETTER}[GREEK SMALL LETTER BETA] => \1 [GREEK BETA SYMBOL] ;
+
+. => \1;
diff --git a/macros/latex/exptl/mem/Mtp/ellpsili.mtp b/macros/latex/exptl/mem/Mtp/ellpsili.mtp
new file mode 100644
index 0000000000..98529f5976
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ellpsili.mtp
@@ -0,0 +1,15 @@
+input: 2;
+output: 2;
+
+aliases:
+
+LETTER = ([GREEK CAPITAL LETTER ALPHA WITH TONOS]-[GREEK LETTER YOT] | [GREEK SMALL LETTER ALPHA WITH VARIA]-[GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI]) ;
+
+expressions:
+
+{LETTER}`'' => \1 [GREEK PSILI] ;
+`''{LETTER} => [GREEK PSILI] \1 ;
+{LETTER}[RIGHT SINGLE QUOTATION MARK] => \1 [GREEK PSILI] ;
+[RIGHT SINGLE QUOTATION MARK]{LETTER} => [GREEK PSILI] \1 ;
+
+. => \1;
diff --git a/macros/latex/exptl/mem/Mtp/fratext.mtp b/macros/latex/exptl/mem/Mtp/fratext.mtp
new file mode 100644
index 0000000000..a7ed66de32
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/fratext.mtp
@@ -0,0 +1,16 @@
+input: 2;
+output: 2;
+
+expressions:
+
+[LEFT DOUBLE QUOTATION MARK] => "\LeftDoubleQuotationMark{}";
+[RIGHT DOUBLE QUOTATION MARK] => "\RightDoubleQuotationMark{}";
+`;' => "\Semicolon{}";
+`:' => "\Colon{}";
+`?' => "\QuestionMark{}";
+`!' => "\ExclamationMark{}";
+[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]` ' => "\LeftPointingDoubleAngleQuotationMark{}";
+[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] => "\LeftPointingDoubleAngleQuotationMark{}";
+[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] => "\RightPointingDoubleAngleQuotationMark{}";
+` '[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] => "\RightPointingDoubleAngleQuotationMark{}";
+
diff --git a/macros/latex/exptl/mem/Mtp/inputtex.mtp b/macros/latex/exptl/mem/Mtp/inputtex.mtp
new file mode 100644
index 0000000000..45125e2d44
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/inputtex.mtp
@@ -0,0 +1,16 @@
+input: 2;
+output: 2;
+
+expressions:
+
+`-'`-'`-' => [EM DASH];
+`-'`-' => [EN DASH];
+%`-' => [HYPHEN];
+``'``' => [LEFT DOUBLE QUOTATION MARK];
+``' => [LEFT SINGLE QUOTATION MARK];
+`''`'' => [RIGHT DOUBLE QUOTATION MARK];
+`'' => [RIGHT SINGLE QUOTATION MARK];
+`,'`,' => [DOUBLE LOW-9 QUOTATION MARK];
+`<'`<' => [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK];
+`>'`>' => [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK];
+
diff --git a/macros/latex/exptl/mem/Mtp/lat2ru.mtp b/macros/latex/exptl/mem/Mtp/lat2ru.mtp
new file mode 100644
index 0000000000..f89a287c30
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/lat2ru.mtp
@@ -0,0 +1,113 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+(`A'-`Z')`"' => <= \1 [CYRILLIC CAPITAL LETTER HARD SIGN];
+(`A'-`Z')`'' => <= \1 [CYRILLIC CAPITAL LETTER SOFT SIGN];
+(`a'-`z')`"' => <= \1 [CYRILLIC SMALL LETTER HARD SIGN];
+(`a'-`z')`'' => <= \1 [CYRILLIC SMALL LETTER SOFT SIGN];
+
+@"E9 => [CYRILLIC SMALL LETTER E]; % é
+@"C9 => [CYRILLIC CAPITAL LETTER E]; % É
+
+`Z'`H' => [CYRILLIC CAPITAL LETTER ZHE];
+`Z' => [CYRILLIC CAPITAL LETTER ZE];
+`Y' => [CYRILLIC CAPITAL LETTER YERU];
+`X' => [CYRILLIC CAPITAL LETTER HA];
+`V' => [CYRILLIC CAPITAL LETTER VE];
+`U' => [CYRILLIC CAPITAL LETTER U];
+`T' => [CYRILLIC CAPITAL LETTER TE];
+`S'`H'`C'`H' => [CYRILLIC CAPITAL LETTER SHCHA];
+`S'`H'=> [CYRILLIC CAPITAL LETTER SHA];
+`S'=> [CYRILLIC CAPITAL LETTER ES];
+`R' => [CYRILLIC CAPITAL LETTER ER];
+`P' => [CYRILLIC CAPITAL LETTER PE];
+`O' => [CYRILLIC CAPITAL LETTER O];
+`N' => [CYRILLIC CAPITAL LETTER EN];
+`M' => [CYRILLIC CAPITAL LETTER EM];
+`L' => [CYRILLIC CAPITAL LETTER EL];
+`K' => [CYRILLIC CAPITAL LETTER KA];
+`J'`U'=> [CYRILLIC CAPITAL LETTER YU];
+`J'`O' => [CYRILLIC CAPITAL LETTER IO];
+`J'`A'=> [CYRILLIC CAPITAL LETTER YA];
+`J' => [CYRILLIC CAPITAL LETTER SHORT I];
+`I' => [CYRILLIC CAPITAL LETTER I];
+`G' => [CYRILLIC CAPITAL LETTER GHE];
+`F' => [CYRILLIC CAPITAL LETTER EF];
+`E' => [CYRILLIC CAPITAL LETTER IE];
+`D' => [CYRILLIC CAPITAL LETTER DE];
+`C'`H' => [CYRILLIC CAPITAL LETTER CHE];
+`C' => [CYRILLIC CAPITAL LETTER TSE];
+`B' => [CYRILLIC CAPITAL LETTER BE];
+`A' => [CYRILLIC CAPITAL LETTER A];
+
+%`T'`S'`H' => [CYRILLIC CAPITAL LETTER TSHE];
+%`N'`J' => [CYRILLIC CAPITAL LETTER NJE];
+%`L'`J' => [CYRILLIC CAPITAL LETTER LJE];
+%`K'`J' => [CYRILLIC CAPITAL LETTER KJE];
+%`J'`I' => [CYRILLIC CAPITAL LETTER YI];
+%`J'`E' => [CYRILLIC CAPITAL LETTER UKRAINIAN IE];
+%`G'`J' => [CYRILLIC CAPITAL LETTER GJE];
+%`D'`Z'`H' => [CYRILLIC CAPITAL LETTER DZHE];
+%`D'`Z' => [CYRILLIC CAPITAL LETTER DZE];
+%`D'`J' => [CYRILLIC CAPITAL LETTER DJE];
+
+`z'`h' => [CYRILLIC SMALL LETTER ZHE];
+`z' => [CYRILLIC SMALL LETTER ZE];
+`y' => [CYRILLIC SMALL LETTER YERU];
+`x' => [CYRILLIC SMALL LETTER HA];
+`v' => [CYRILLIC SMALL LETTER VE];
+`u' => [CYRILLIC SMALL LETTER U];
+`t' => [CYRILLIC SMALL LETTER TE];
+`s'`h'`c'`h' => [CYRILLIC SMALL LETTER SHCHA];
+`s'`h'=> [CYRILLIC SMALL LETTER SHA];
+`s'=> [CYRILLIC SMALL LETTER ES];
+`r' => [CYRILLIC SMALL LETTER ER];
+`p' => [CYRILLIC SMALL LETTER PE];
+`o' => [CYRILLIC SMALL LETTER O];
+`n' => [CYRILLIC SMALL LETTER EN];
+`m' => [CYRILLIC SMALL LETTER EM];
+`l' => [CYRILLIC SMALL LETTER EL];
+`k' => [CYRILLIC SMALL LETTER KA];
+`j'`u'=> [CYRILLIC SMALL LETTER YU];
+`j'`o' => [CYRILLIC SMALL LETTER IO];
+`j'`a'=> [CYRILLIC SMALL LETTER YA];
+`j' => [CYRILLIC SMALL LETTER SHORT I];
+`i' => [CYRILLIC SMALL LETTER I];
+`g' => [CYRILLIC SMALL LETTER GHE];
+`f' => [CYRILLIC SMALL LETTER EF];
+`e' => [CYRILLIC SMALL LETTER IE];
+`d' => [CYRILLIC SMALL LETTER DE];
+`c'`h' => [CYRILLIC SMALL LETTER CHE];
+`c' => [CYRILLIC SMALL LETTER TSE];
+`b' => [CYRILLIC SMALL LETTER BE];
+`a' => [CYRILLIC SMALL LETTER A];
+
+%`t'`s'`h' => [CYRILLIC SMALL LETTER TSHE];
+%`n'`j' => [CYRILLIC SMALL LETTER NJE];
+%`l'`j' => [CYRILLIC SMALL LETTER LJE];
+%`k'`j' => [CYRILLIC SMALL LETTER KJE];
+%`j'`i' => [CYRILLIC SMALL LETTER YI];
+%`j'`e' => [CYRILLIC SMALL LETTER UKRAINIAN IE];
+%`g'`j' => [CYRILLIC SMALL LETTER GJE];
+%`d'`z'`h' => [CYRILLIC SMALL LETTER DZHE];
+%`d'`z' => [CYRILLIC SMALL LETTER DZE];
+%`d'`j' => [CYRILLIC SMALL LETTER DJE];
+
+%`' => [CYRILLIC CAPITAL LETTER SHORT U];
+%`' => [CYRILLIC CAPITAL LETTER HARD SIGN];
+%`' => [CYRILLIC CAPITAL LETTER SOFT SIGN];
+%`I' => [CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I];
+%`J' => [CYRILLIC CAPITAL LETTER JE];
+%`È' => [CYRILLIC CAPITAL LETTER IE WITH GRAVE];
+%`ì' => [CYRILLIC CAPITAL LETTER I WITH GRAVE];
+%`' => [CYRILLIC SMALL LETTER HARD SIGN];
+%`' => [CYRILLIC SMALL LETTER SOFT SIGN];
+%`' => [CYRILLIC SMALL LETTER SHORT U];
+%`i' => [CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I];
+%`j' => [CYRILLIC SMALL LETTER JE];
+%`è' => [CYRILLIC SMALL LETTER IE WITH GRAVE];
+%`ì' => [CYRILLIC SMALL LETTER I WITH GRAVE];
diff --git a/macros/latex/exptl/mem/Mtp/lgr-com.mtp b/macros/latex/exptl/mem/Mtp/lgr-com.mtp
new file mode 100644
index 0000000000..dca3f3a75e
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/lgr-com.mtp
@@ -0,0 +1,67 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+. [COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT] => ">'" \1;
+. [COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT] => ">`" \1;
+. [COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI] => ">=" \1;
+
+. [COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT] => "<'" \1;
+. [COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT] => "<`" \1;
+. [COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI] => @"40 \1;
+
+. [COMBINING COMMA ABOVE]=> ">" \1;
+. [COMBINING REVERSED COMMA ABOVE] => "<" \1;
+
+. [COMBINING ACUTE ACCENT] => "'" \1;
+. [COMBINING GRAVE ACCENT] => "`" \1;
+. [COMBINING GREEK PERISPOMENI] => "=" \1;
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{34}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{34}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{b}{20}";
+<acc>[COMBINING INVERTED BREVE BELOW] => "\UseMemAccent{b}{1}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"0021|@"0025|@"0028-@"003A|@"005B|@"005D) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/lgr-dec.mtp b/macros/latex/exptl/mem/Mtp/lgr-dec.mtp
new file mode 100644
index 0000000000..98bc6bf825
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/lgr-dec.mtp
@@ -0,0 +1,539 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK NUMERAL SIGN]
+ => <= [MODIFIER LETTER PRIME];
+[GREEK QUESTION MARK]
+ => <= [SEMICOLON];
+[GREEK DIALYTIKA TONOS]
+ => <= [DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK ANO TELEIA]
+ => <= [MIDDLE DOT];
+[GREEK CAPITAL LETTER EPSILON WITH TONOS]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH TONOS]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH TONOS]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH DIALYTIKA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING DIAERESIS];
+[GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING DIAERESIS];
+[GREEK SMALL LETTER ALPHA WITH TONOS]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH TONOS]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH TONOS]
+ => <= [GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH TONOS]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS];
+[GREEK SMALL LETTER OMICRON WITH TONOS]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH TONOS]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH TONOS]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK UPSILON WITH ACUTE AND HOOK SYMBOL]
+ => <= [GREEK UPSILON WITH HOOK SYMBOL][COMBINING ACUTE ACCENT];
+[GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL]
+ => <= [GREEK UPSILON WITH HOOK SYMBOL][COMBINING DIAERESIS];
+[GREEK SMALL LETTER ALPHA WITH PSILI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER ALPHA WITH DASIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER EPSILON WITH PSILI]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER EPSILON WITH DASIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH PSILI]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER EPSILON WITH DASIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH PSILI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER ETA WITH DASIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER ETA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH PSILI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER IOTA WITH DASIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER IOTA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER IOTA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER IOTA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMICRON WITH PSILI]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER OMICRON WITH DASIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH PSILI]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER OMICRON WITH DASIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH PSILI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER UPSILON WITH DASIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER OMEGA WITH DASIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ALPHA WITH VARIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH OXIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH VARIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH OXIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH VARIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ETA WITH OXIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH OXIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH VARIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH OXIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH OXIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH VARIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH OXIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH VRACHY]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING BREVE];
+[GREEK SMALL LETTER ALPHA WITH MACRON]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING MACRON];
+[GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH VRACHY]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING BREVE];
+[GREEK CAPITAL LETTER ALPHA WITH MACRON]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING MACRON];
+[GREEK CAPITAL LETTER ALPHA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK PROSGEGRAMMENI]
+ => <= [GREEK SMALL LETTER IOTA];
+[GREEK DIALYTIKA AND PERISPOMENI]
+ => <= [DIAERESIS][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER EPSILON WITH VARIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH OXIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK PSILI AND VARIA]
+ => <= [GREEK PSILI][COMBINING GRAVE ACCENT];
+[GREEK PSILI AND OXIA]
+ => <= [GREEK PSILI][COMBINING ACUTE ACCENT];
+[GREEK PSILI AND PERISPOMENI]
+ => <= [GREEK PSILI][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH VRACHY]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING BREVE];
+[GREEK SMALL LETTER IOTA WITH MACRON]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING MACRON];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA]
+ => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER IOTA WITH VRACHY]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING BREVE];
+[GREEK CAPITAL LETTER IOTA WITH MACRON]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING MACRON];
+[GREEK CAPITAL LETTER IOTA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK DASIA AND VARIA]
+ => <= [GREEK DASIA][COMBINING GRAVE ACCENT];
+[GREEK DASIA AND OXIA]
+ => <= [GREEK DASIA][COMBINING ACUTE ACCENT];
+[GREEK DASIA AND PERISPOMENI]
+ => <= [GREEK DASIA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER UPSILON WITH VRACHY]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING BREVE];
+[GREEK SMALL LETTER UPSILON WITH MACRON]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING MACRON];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA]
+ => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER RHO WITH PSILI]
+ => <= [GREEK SMALL LETTER RHO][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER RHO WITH DASIA]
+ => <= [GREEK SMALL LETTER RHO][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER UPSILON WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER UPSILON WITH VRACHY]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING BREVE];
+[GREEK CAPITAL LETTER UPSILON WITH MACRON]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING MACRON];
+[GREEK CAPITAL LETTER UPSILON WITH VARIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH OXIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER RHO WITH DASIA]
+ => <= [GREEK CAPITAL LETTER RHO][COMBINING REVERSED COMMA ABOVE];
+[GREEK DIALYTIKA AND VARIA]
+ => <= [DIAERESIS][COMBINING GRAVE ACCENT];
+[GREEK DIALYTIKA AND OXIA]
+ => <= [DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK VARIA]
+ => <= [GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMICRON WITH VARIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH OXIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK OXIA]
+ => <= [ACUTE ACCENT];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
+[OHM SIGN]
+ => <= [GREEK CAPITAL LETTER OMEGA];
+[LEFT-POINTING ANGLE BRACKET]
+ => <= [LEFT ANGLE BRACKET];
+[RIGHT-POINTING ANGLE BRACKET]
+ => <= [RIGHT ANGLE BRACKET];
diff --git a/macros/latex/exptl/mem/Mtp/lgr-rec.mtp b/macros/latex/exptl/mem/Mtp/lgr-rec.mtp
new file mode 100644
index 0000000000..f54c9ac82c
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/lgr-rec.mtp
@@ -0,0 +1,459 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+[DIAERESIS][COMBINING ACUTE ACCENT] => <= [GREEK DIALYTIKA TONOS] ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING DIAERESIS] => <= [GREEK CAPITAL LETTER IOTA WITH DIALYTIKA] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING DIAERESIS] => <= [GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA] ;
+[GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH TONOS] ;
+[GREEK SMALL LETTER EPSILON][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH TONOS] ;
+[GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ETA WITH TONOS] ;
+[GREEK SMALL LETTER IOTA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH TONOS] ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS] ;
+[GREEK SMALL LETTER IOTA][COMBINING DIAERESIS] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA] ;
+[GREEK SMALL LETTER OMICRON][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH TONOS] ;
+[GREEK SMALL LETTER UPSILON][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH TONOS] ;
+[GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH TONOS] ;
+[GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER ALPHA WITH PSILI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER ALPHA WITH DASIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER EPSILON WITH PSILI] ;
+[GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER EPSILON WITH DASIA] ;
+[GREEK SMALL LETTER EPSILON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER EPSILON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER EPSILON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER EPSILON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER ETA WITH PSILI] ;
+[GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER ETA WITH DASIA] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ETA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ETA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ETA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ETA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER IOTA WITH PSILI] ;
+[GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER IOTA WITH DASIA] ;
+[GREEK SMALL LETTER IOTA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER IOTA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER IOTA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER IOTA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER IOTA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER OMICRON WITH PSILI] ;
+[GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER OMICRON WITH DASIA] ;
+[GREEK SMALL LETTER OMICRON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER OMICRON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER OMICRON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER OMICRON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER UPSILON WITH PSILI] ;
+[GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER UPSILON WITH DASIA] ;
+[GREEK SMALL LETTER UPSILON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER UPSILON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER UPSILON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER UPSILON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER UPSILON WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER UPSILON WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER OMEGA WITH PSILI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER OMEGA WITH DASIA] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH VARIA] ;
+[GREEK SMALL LETTER EPSILON][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH VARIA] ;
+[GREEK SMALL LETTER ETA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ETA WITH VARIA] ;
+[GREEK SMALL LETTER IOTA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH VARIA] ;
+[GREEK SMALL LETTER OMICRON][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH VARIA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH VARIA] ;
+[GREEK SMALL LETTER OMEGA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH VARIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH TONOS][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ALPHA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+[DIAERESIS][COMBINING GREEK PERISPOMENI] => <= [GREEK DIALYTIKA AND PERISPOMENI] ;
+[GREEK SMALL LETTER ETA WITH VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH TONOS][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ETA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER ETA WITH PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK PSILI][COMBINING GRAVE ACCENT] => <= [GREEK PSILI AND VARIA] ;
+[GREEK PSILI][COMBINING ACUTE ACCENT] => <= [GREEK PSILI AND OXIA] ;
+[GREEK PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA] ;
+[GREEK SMALL LETTER IOTA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI] ;
+[GREEK DASIA][COMBINING GRAVE ACCENT] => <= [GREEK DASIA AND VARIA] ;
+[GREEK DASIA][COMBINING ACUTE ACCENT] => <= [GREEK DASIA AND OXIA] ;
+[GREEK DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA] ;
+[GREEK SMALL LETTER RHO][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER RHO WITH PSILI] ;
+[GREEK SMALL LETTER RHO][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER RHO WITH DASIA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH PERISPOMENI] ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI] ;
+[DIAERESIS][COMBINING GRAVE ACCENT] => <= [GREEK DIALYTIKA AND VARIA] ;
+[GREEK SMALL LETTER OMEGA WITH VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH TONOS][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER OMEGA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+
+
+% Unicode to main font, except those below
+
+
+[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] => @"007B ;
+[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] => @"007D ;
+[COMBINING GREEK YPOGEGRAMMENI] => @"007C ;
+[MODIFIER LETTER PRIME] => @"00FE ;
+[GREEK LOWER NUMERAL SIGN] => @"00FF ;
+[SEMICOLON] => @"003F ;
+[GREEK TONOS] => @"0027 ;
+[GREEK DIALYTIKA TONOS] => @"23 ;
+[MIDDLE DOT] => @"003B ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS] => @"F2 ;
+[GREEK CAPITAL LETTER ALPHA] => @"0041 ;
+[GREEK CAPITAL LETTER BETA] => @"0042 ;
+[GREEK CAPITAL LETTER GAMMA] => @"0047 ;
+[GREEK CAPITAL LETTER DELTA] => @"0044 ;
+[GREEK CAPITAL LETTER EPSILON] => @"0045 ;
+[GREEK CAPITAL LETTER ZETA] => @"005A ;
+[GREEK CAPITAL LETTER ETA] => @"0048 ;
+[GREEK CAPITAL LETTER THETA] => @"004A ;
+[GREEK CAPITAL LETTER IOTA] => @"0049 ;
+[GREEK CAPITAL LETTER KAPPA] => @"004B ;
+[GREEK CAPITAL LETTER LAMDA] => @"004C ;
+[GREEK CAPITAL LETTER MU] => @"004D ;
+[GREEK CAPITAL LETTER NU] => @"004E ;
+[GREEK CAPITAL LETTER XI] => @"0058 ;
+[GREEK CAPITAL LETTER OMICRON] => @"004F ;
+[GREEK CAPITAL LETTER PI] => @"0050 ;
+[GREEK CAPITAL LETTER RHO] => @"0052 ;
+[GREEK CAPITAL LETTER SIGMA] => @"0053 ;
+[GREEK CAPITAL LETTER TAU] => @"0054 ;
+[GREEK CAPITAL LETTER UPSILON] => @"0055 ;
+[GREEK CAPITAL LETTER PHI] => @"0046 ;
+[GREEK CAPITAL LETTER CHI] => @"0051 ;
+[GREEK CAPITAL LETTER PSI] => @"0059 ;
+[GREEK CAPITAL LETTER OMEGA] => @"0057 ;
+[GREEK CAPITAL LETTER IOTA WITH DIALYTIKA] => @"DB ;
+[GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA] => @"DF ;
+[GREEK SMALL LETTER ALPHA WITH TONOS] => @"88 ;
+[GREEK SMALL LETTER EPSILON WITH TONOS] => @"E8 ;
+[GREEK SMALL LETTER ETA WITH TONOS] => @"A0 ;
+[GREEK SMALL LETTER IOTA WITH TONOS] => @"D0 ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS] => @"F6 ;
+[GREEK SMALL LETTER ALPHA] => @"0061 ;
+[GREEK SMALL LETTER BETA] => @"0062 ;
+[GREEK SMALL LETTER GAMMA] => @"0067 ;
+[GREEK SMALL LETTER DELTA] => @"0064 ;
+[GREEK SMALL LETTER EPSILON] => @"0065 ;
+[GREEK SMALL LETTER ZETA] => @"007A ;
+[GREEK SMALL LETTER ETA] => @"0068 ;
+[GREEK SMALL LETTER THETA] => @"006A ;
+[GREEK SMALL LETTER IOTA] => @"0069 ;
+[GREEK SMALL LETTER KAPPA] => @"006B ;
+[GREEK SMALL LETTER LAMDA] => @"006C ;
+[GREEK SMALL LETTER MU] => @"006D ;
+[GREEK SMALL LETTER NU] => @"006E ;
+[GREEK SMALL LETTER XI] => @"0078 ;
+[GREEK SMALL LETTER OMICRON] => @"006F ;
+[GREEK SMALL LETTER PI] => @"0070 ;
+[GREEK SMALL LETTER RHO] => @"0072 ;
+[GREEK SMALL LETTER FINAL SIGMA] => @"0063 ;
+[GREEK SMALL LETTER SIGMA] => @"0073 ;
+[GREEK SMALL LETTER TAU] => @"0074 ;
+[GREEK SMALL LETTER UPSILON] => @"0075 ;
+[GREEK SMALL LETTER PHI] => @"0066 ;
+[GREEK SMALL LETTER CHI] => @"0071 ;
+[GREEK SMALL LETTER PSI] => @"0079 ;
+[GREEK SMALL LETTER OMEGA] => @"0077 ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA] => @"F0 ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA] => @"F4 ;
+[GREEK SMALL LETTER OMICRON WITH TONOS] => @"EC ;
+[GREEK SMALL LETTER UPSILON WITH TONOS] => @"D4 ;
+[GREEK SMALL LETTER OMEGA WITH TONOS] => @"B8 ;
+[GREEK BETA SYMBOL] => @"0062 ;
+[GREEK THETA SYMBOL] => @"006A ;
+[GREEK PHI SYMBOL] => @"0066 ;
+[GREEK PI SYMBOL] => @"0070 ;
+[GREEK LETTER ARCHAIC KOPPA] => @"E115 ;
+[GREEK SMALL LETTER ARCHAIC KOPPA] => @"E113 ;
+[GREEK LETTER STIGMA] => @"E116 ;
+[GREEK SMALL LETTER STIGMA] => @"E106 ;
+[GREEK LETTER DIGAMMA] => @"00C3 ;
+[GREEK SMALL LETTER DIGAMMA] => @"0093 ;
+[GREEK SMALL LETTER KOPPA] => @"E112 ;
+[GREEK LETTER SAMPI] => @"E117 ;
+[GREEK SMALL LETTER SAMPI] => @"E11B ;
+[GREEK KAPPA SYMBOL] => @"006B ;
+[GREEK RHO SYMBOL] => @"0072 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI] => @"82 ;
+[GREEK SMALL LETTER ALPHA WITH DASIA] => @"81 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA] => @"8B ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA] => @"83 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA] => @"8A ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA] => @"89 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI] => @"92 ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI] => @"91 ;
+[GREEK SMALL LETTER EPSILON WITH PSILI] => @"E2 ;
+[GREEK SMALL LETTER EPSILON WITH DASIA] => @"E1 ;
+[GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA] => @"EB ;
+[GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA] => @"E3 ;
+[GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA] => @"EA ;
+[GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA] => @"E9 ;
+[GREEK SMALL LETTER ETA WITH PSILI] => @"9A ;
+[GREEK SMALL LETTER ETA WITH DASIA] => @"99 ;
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA] => @"AB ;
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA] => @"A3 ;
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA] => @"A2 ;
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA] => @"A1 ;
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI] => @"AA ;
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI] => @"A9 ;
+[GREEK SMALL LETTER IOTA WITH PSILI] => @"CA ;
+[GREEK SMALL LETTER IOTA WITH DASIA] => @"C9 ;
+[GREEK SMALL LETTER IOTA WITH PSILI AND VARIA] => @"D3 ;
+[GREEK SMALL LETTER IOTA WITH DASIA AND VARIA] => @"CB ;
+[GREEK SMALL LETTER IOTA WITH PSILI AND OXIA] => @"D2 ;
+[GREEK SMALL LETTER IOTA WITH DASIA AND OXIA] => @"D1 ;
+[GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI] => @"DA ;
+[GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI] => @"D9 ;
+[GREEK SMALL LETTER OMICRON WITH PSILI] => @"E6 ;
+[GREEK SMALL LETTER OMICRON WITH DASIA] => @"E5 ;
+[GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA] => @"EF ;
+[GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA] => @"E7 ;
+[GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA] => @"EE ;
+[GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA] => @"ED ;
+[GREEK SMALL LETTER UPSILON WITH PSILI] => @"CE ;
+[GREEK SMALL LETTER UPSILON WITH DASIA] => @"CD ;
+[GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA] => @"D7 ;
+[GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA] => @"CF ;
+[GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA] => @"D6 ;
+[GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA] => @"D5 ;
+[GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI] => @"DE ;
+[GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI] => @"DD ;
+[GREEK SMALL LETTER OMEGA WITH PSILI] => @"B2 ;
+[GREEK SMALL LETTER OMEGA WITH DASIA] => @"B1 ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA] => @"BB ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA] => @"B3 ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA] => @"BA ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA] => @"B9 ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI] => @"C2 ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI] => @"C1 ;
+[GREEK SMALL LETTER ALPHA WITH VARIA] => @"80 ;
+[GREEK SMALL LETTER ALPHA WITH TONOS] => @"0088 ;
+[GREEK SMALL LETTER EPSILON WITH VARIA] => @"E0 ;
+[GREEK SMALL LETTER EPSILON WITH TONOS] => @"00E8 ;
+[GREEK SMALL LETTER ETA WITH VARIA] => @"98 ;
+[GREEK SMALL LETTER ETA WITH TONOS] => @"00A0 ;
+[GREEK SMALL LETTER IOTA WITH VARIA] => @"C8 ;
+[GREEK SMALL LETTER IOTA WITH TONOS] => @"00D0 ;
+[GREEK SMALL LETTER OMICRON WITH VARIA] => @"E4 ;
+[GREEK SMALL LETTER OMICRON WITH TONOS] => @"00EC ;
+[GREEK SMALL LETTER UPSILON WITH VARIA] => @"CC ;
+[GREEK SMALL LETTER UPSILON WITH TONOS] => @"00D4 ;
+[GREEK SMALL LETTER OMEGA WITH VARIA] => @"B0 ;
+[GREEK SMALL LETTER OMEGA WITH TONOS] => @"00B8 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI] => @"86 ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI] => @"85 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI] => @"8F ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI] => @"87 ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI] => @"8E ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI] => @"8D ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] => @"96 ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] => @"95 ;
+[GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI] => @"9E ;
+[GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI] => @"9D ;
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI] => @"AF ;
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI] => @"A7 ;
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI] => @"A6 ;
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI] => @"A5 ;
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] => @"AE ;
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] => @"AD ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI] => @"B6 ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI] => @"B5 ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI] => @"BF ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI] => @"B7 ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI] => @"BE ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI] => @"BD ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] => @"C6 ;
+[GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI] => @"84 ;
+[GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI] => @"F8 ;
+[GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI] => @"8C ;
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI] => @"90 ;
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI] => @"94 ;
+[GREEK PSILI] => @"003E ;
+[GREEK PERISPOMENI] => @"007E ;
+[GREEK DIALYTIKA AND PERISPOMENI] => @"20 ;
+[GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI] => @"9C ;
+[GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI] => @"F9 ;
+[GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI] => @"A4 ;
+[GREEK SMALL LETTER ETA WITH PERISPOMENI] => @"A8 ;
+[GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI] => @"AC ;
+[GREEK PSILI AND VARIA] => @"5F ;
+[GREEK PSILI AND OXIA] => @"5E ;
+[GREEK PSILI AND PERISPOMENI] => @"5C ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA] => @"F1 ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS] => @"00F2 ;
+[GREEK SMALL LETTER IOTA WITH PERISPOMENI] => @"D8 ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI] => @"F3 ;
+[GREEK DASIA AND VARIA] => @"43 ;
+[GREEK DASIA AND OXIA] => @"56 ;
+[GREEK DASIA AND PERISPOMENI] => @"40 ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA] => @"F5 ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS] => @"00F6 ;
+[GREEK SMALL LETTER RHO WITH PSILI] => @"FC ;
+[GREEK SMALL LETTER RHO WITH DASIA] => @"FB ;
+[GREEK SMALL LETTER UPSILON WITH PERISPOMENI] => @"DC ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI] => @"F7 ;
+[GREEK DIALYTIKA AND VARIA] => @"24 ;
+[GREEK DIALYTIKA TONOS] => @"0023 ;
+[GRAVE ACCENT] => @"0060 ;
+[GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI] => @"B4 ;
+[GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI] => @"FA ;
+[GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI] => @"BC ;
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI] => @"C0 ;
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI] => @"C4 ;
+[ACUTE ACCENT] => @"0027 ;
+[GREEK DASIA] => @"003C ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+[DOLLAR SIGN] => "\UseMemTextSymbol{TS1}{36}";
+[APOSTROPHE] => "\UseMemTextSymbol{TS1}{39}";
+[CENT SIGN] => "\UseMemTextSymbol{TS1}{162}";
+[POUND SIGN] => "\UseMemTextSymbol{TS1}{163}";
+[CURRENCY SIGN] => "\UseMemTextSymbol{TS1}{164}";
+[YEN SIGN] => "\UseMemTextSymbol{TS1}{165}";
+[BROKEN BAR] => "\UseMemTextSymbol{TS1}{166}";
+[SECTION SIGN] => "\UseMemTextSymbol{TS1}{167}";
+[COPYRIGHT SIGN] => "\UseMemTextSymbol{TS1}{169}";
+[FEMININE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{170}";
+[NOT SIGN] => "\UseMemTextSymbol{TS1}{172}";
+[REGISTERED SIGN] => "\UseMemTextSymbol{TS1}{174}";
+[DEGREE SIGN] => "\UseMemTextSymbol{TS1}{176}";
+[PLUS-MINUS SIGN] => "\UseMemTextSymbol{TS1}{177}";
+[SUPERSCRIPT TWO] => "\UseMemTextSymbol{TS1}{178}";
+[SUPERSCRIPT THREE] => "\UseMemTextSymbol{TS1}{179}";
+[MICRO SIGN] => "\UseMemTextSymbol{TS1}{181}";
+[PILCROW SIGN] => "\UseMemTextSymbol{TS1}{182}";
+[MIDDLE DOT] => "\UseMemTextSymbol{TS1}{183}";
+[SUPERSCRIPT ONE] => "\UseMemTextSymbol{TS1}{185}";
+[MASCULINE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{186}";
+[VULGAR FRACTION ONE QUARTER] => "\UseMemTextSymbol{TS1}{188}";
+[VULGAR FRACTION ONE HALF] => "\UseMemTextSymbol{TS1}{189}";
+[VULGAR FRACTION THREE QUARTERS] => "\UseMemTextSymbol{TS1}{190}";
+[MULTIPLICATION SIGN] => "\UseMemTextSymbol{TS1}{215}";
+[DIVISION SIGN] => "\UseMemTextSymbol{TS1}{247}";
+[LATIN SMALL LETTER F WITH HOOK] => "\UseMemTextSymbol{TS1}{140}";
+[COMBINING CEDILLA] => "\UseMemTextSymbol{TS1}{11}";
+[COMBINING OGONEK] => "\UseMemTextSymbol{TS1}{12}";
+[DAGGER] => "\UseMemTextSymbol{TS1}{132}";
+[DOUBLE DAGGER] => "\UseMemTextSymbol{TS1}{133}";
+[BULLET] => "\UseMemTextSymbol{TS1}{136}";
+[PER MILLE SIGN] => "\UseMemTextSymbol{TS1}{135}";
+[FRACTION SLASH] => "\UseMemTextSymbol{TS1}{47}";
+[COLON SIGN] => "\UseMemTextSymbol{TS1}{141}";
+[LIRA SIGN] => "\UseMemTextSymbol{TS1}{146}";
+[DONG SIGN] => "\UseMemTextSymbol{TS1}{150}";
+[EURO SIGN] => "\UseMemTextSymbol{TS1}{191}";
+[NUMERO SIGN] => "\UseMemTextSymbol{TS1}{155}";
+[TRADE MARK SIGN] => "\UseMemTextSymbol{TS1}{151}";
+[OHM SIGN] => "\UseMemTextSymbol{TS1}{87}";
+[ESTIMATED SYMBOL] => "\UseMemTextSymbol{TS1}{157}";
+[LEFTWARDS ARROW] => "\UseMemTextSymbol{TS1}{24}";
+[UPWARDS ARROW] => "\UseMemTextSymbol{TS1}{94}";
+[RIGHTWARDS ARROW] => "\UseMemTextSymbol{TS1}{25}";
+[DOWNWARDS ARROW] => "\UseMemTextSymbol{TS1}{95}";
+[MINUS SIGN] => "\UseMemTextSymbol{TS1}{61}";
+[ASTERISK OPERATOR] => "\UseMemTextSymbol{TS1}{42}";
+[SQUARE ROOT] => "\UseMemTextSymbol{TS1}{187}";
+[LEFT-POINTING ANGLE BRACKET] => "\UseMemTextSymbol{TS1}{60}";
+[RIGHT-POINTING ANGLE BRACKET] => "\UseMemTextSymbol{TS1}{62}";
+[WHITE CIRCLE] => "\UseMemTextSymbol{TS1}{79}";
+[WHITE BULLET] => "\UseMemTextSymbol{TS1}{158}";
+[EIGHTH NOTE] => "\UseMemTextSymbol{TS1}{110}";
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"0021|@"0025|@"0028-@"003A|@"005B|@"005D|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/ot1-com.mtp b/macros/latex/exptl/mem/Mtp/ot1-com.mtp
new file mode 100644
index 0000000000..7939225e70
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ot1-com.mtp
@@ -0,0 +1,70 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING GRAVE ACCENT] => "\UseMemAccent{t}{18}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{u}{18}";
+<acc>[COMBINING ACUTE ACCENT] => "\UseMemAccent{t}{19}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{u}{19}";
+<acc>[COMBINING CIRCUMFLEX ACCENT] => "\UseMemAccent{t}{94}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{u}{94}";
+<acc>[COMBINING TILDE] => "\UseMemAccent{t}{126}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{u}{126}";
+<acc>[COMBINING MACRON] => "\UseMemAccent{t}{22}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{u}{22}";
+<acc>[COMBINING BREVE] => "\UseMemAccent{t}{21}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{u}{21}";
+<acc>[COMBINING DOT ABOVE] => "\UseMemAccent{t}{95}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{u}{95}";
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{127}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{127}";
+<acc>[COMBINING RING ABOVE] => "\UseMemAccent{t}{23}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{u}{23}";
+<acc>[COMBINING DOUBLE ACUTE ACCENT] => "\UseMemAccent{t}{125}";
+<acc>[COMBINING CARON] => "\UseMemAccent{t}{20}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{u}{20}";
+<acc>[COMBINING CEDILLA] => "\UseMemAccent{c}{24}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"0021|@"0023-@"0026|@"0028-@"003B|@"003D|@"003F-@"005B|@"005D|@"0061-@"007A) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/ot1-dec.mtp b/macros/latex/exptl/mem/Mtp/ot1-dec.mtp
new file mode 100644
index 0000000000..8dc0ec59e1
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ot1-dec.mtp
@@ -0,0 +1,1023 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[LATIN CAPITAL LETTER A WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER A WITH TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER A WITH RING ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING ABOVE];
+[LATIN CAPITAL LETTER C WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER E WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER E WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER I WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER I WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER I][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER N WITH TILDE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER O WITH TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER U WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER U WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Y WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER A WITH TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER A][COMBINING DIAERESIS];
+[LATIN SMALL LETTER A WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING RING ABOVE];
+[LATIN SMALL LETTER C WITH CEDILLA]
+ => <= [LATIN SMALL LETTER C][COMBINING CEDILLA];
+[LATIN SMALL LETTER E WITH GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER E WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER E][COMBINING DIAERESIS];
+[LATIN SMALL LETTER I WITH GRAVE]
+ => <= [LATIN SMALL LETTER I][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER I WITH ACUTE]
+ => <= [LATIN SMALL LETTER I][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER I WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER I][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER I WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER I][COMBINING DIAERESIS];
+[LATIN SMALL LETTER N WITH TILDE]
+ => <= [LATIN SMALL LETTER N][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER O WITH TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER O][COMBINING DIAERESIS];
+[LATIN SMALL LETTER U WITH GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS];
+[LATIN SMALL LETTER Y WITH ACUTE]
+ => <= [LATIN SMALL LETTER Y][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER Y WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER Y][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER A WITH MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING MACRON];
+[LATIN CAPITAL LETTER A WITH BREVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE];
+[LATIN SMALL LETTER A WITH BREVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE];
+[LATIN CAPITAL LETTER A WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER A][COMBINING OGONEK];
+[LATIN SMALL LETTER A WITH OGONEK]
+ => <= [LATIN SMALL LETTER A][COMBINING OGONEK];
+[LATIN CAPITAL LETTER C WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER C WITH ACUTE]
+ => <= [LATIN SMALL LETTER C][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER C WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER C][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER C WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER C WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER C][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER C WITH CARON]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CARON];
+[LATIN SMALL LETTER C WITH CARON]
+ => <= [LATIN SMALL LETTER C][COMBINING CARON];
+[LATIN CAPITAL LETTER D WITH CARON]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CARON];
+[LATIN SMALL LETTER D WITH CARON]
+ => <= [LATIN SMALL LETTER D][COMBINING CARON];
+[LATIN CAPITAL LETTER E WITH MACRON]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON];
+[LATIN SMALL LETTER E WITH MACRON]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON];
+[LATIN CAPITAL LETTER E WITH BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING BREVE];
+[LATIN SMALL LETTER E WITH BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING BREVE];
+[LATIN CAPITAL LETTER E WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER E WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER E WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER E][COMBINING OGONEK];
+[LATIN SMALL LETTER E WITH OGONEK]
+ => <= [LATIN SMALL LETTER E][COMBINING OGONEK];
+[LATIN CAPITAL LETTER E WITH CARON]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CARON];
+[LATIN SMALL LETTER E WITH CARON]
+ => <= [LATIN SMALL LETTER E][COMBINING CARON];
+[LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER G WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER G][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER G WITH BREVE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING BREVE];
+[LATIN SMALL LETTER G WITH BREVE]
+ => <= [LATIN SMALL LETTER G][COMBINING BREVE];
+[LATIN CAPITAL LETTER G WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER G WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER G][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER G WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CEDILLA];
+[LATIN SMALL LETTER G WITH CEDILLA]
+ => <= [LATIN SMALL LETTER G][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER H WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER H][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH TILDE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING TILDE];
+[LATIN SMALL LETTER I WITH TILDE]
+ => <= [LATIN SMALL LETTER I][COMBINING TILDE];
+[LATIN CAPITAL LETTER I WITH MACRON]
+ => <= [LATIN CAPITAL LETTER I][COMBINING MACRON];
+[LATIN SMALL LETTER I WITH MACRON]
+ => <= [LATIN SMALL LETTER I][COMBINING MACRON];
+[LATIN CAPITAL LETTER I WITH BREVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING BREVE];
+[LATIN SMALL LETTER I WITH BREVE]
+ => <= [LATIN SMALL LETTER I][COMBINING BREVE];
+[LATIN CAPITAL LETTER I WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER I][COMBINING OGONEK];
+[LATIN SMALL LETTER I WITH OGONEK]
+ => <= [LATIN SMALL LETTER I][COMBINING OGONEK];
+[LATIN CAPITAL LETTER I WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER J][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER J WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER J][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER K WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER K][COMBINING CEDILLA];
+[LATIN SMALL LETTER K WITH CEDILLA]
+ => <= [LATIN SMALL LETTER K][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER L WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER L][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER L WITH ACUTE]
+ => <= [LATIN SMALL LETTER L][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER L WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CEDILLA];
+[LATIN SMALL LETTER L WITH CEDILLA]
+ => <= [LATIN SMALL LETTER L][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER L WITH CARON]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CARON];
+[LATIN SMALL LETTER L WITH CARON]
+ => <= [LATIN SMALL LETTER L][COMBINING CARON];
+[LATIN CAPITAL LETTER N WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER N WITH ACUTE]
+ => <= [LATIN SMALL LETTER N][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER N WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CEDILLA];
+[LATIN SMALL LETTER N WITH CEDILLA]
+ => <= [LATIN SMALL LETTER N][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER N WITH CARON]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CARON];
+[LATIN SMALL LETTER N WITH CARON]
+ => <= [LATIN SMALL LETTER N][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH BREVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING BREVE];
+[LATIN SMALL LETTER O WITH BREVE]
+ => <= [LATIN SMALL LETTER O][COMBINING BREVE];
+[LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN CAPITAL LETTER R WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER R WITH ACUTE]
+ => <= [LATIN SMALL LETTER R][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER R WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER R][COMBINING CEDILLA];
+[LATIN SMALL LETTER R WITH CEDILLA]
+ => <= [LATIN SMALL LETTER R][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER R WITH CARON]
+ => <= [LATIN CAPITAL LETTER R][COMBINING CARON];
+[LATIN SMALL LETTER R WITH CARON]
+ => <= [LATIN SMALL LETTER R][COMBINING CARON];
+[LATIN CAPITAL LETTER S WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER S WITH ACUTE]
+ => <= [LATIN SMALL LETTER S][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER S WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER S][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER S WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CEDILLA];
+[LATIN SMALL LETTER S WITH CEDILLA]
+ => <= [LATIN SMALL LETTER S][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER S WITH CARON]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CARON];
+[LATIN SMALL LETTER S WITH CARON]
+ => <= [LATIN SMALL LETTER S][COMBINING CARON];
+[LATIN CAPITAL LETTER T WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CEDILLA];
+[LATIN SMALL LETTER T WITH CEDILLA]
+ => <= [LATIN SMALL LETTER T][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER T WITH CARON]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CARON];
+[LATIN SMALL LETTER T WITH CARON]
+ => <= [LATIN SMALL LETTER T][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH TILDE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE];
+[LATIN SMALL LETTER U WITH TILDE]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE];
+[LATIN CAPITAL LETTER U WITH MACRON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING MACRON];
+[LATIN SMALL LETTER U WITH MACRON]
+ => <= [LATIN SMALL LETTER U][COMBINING MACRON];
+[LATIN CAPITAL LETTER U WITH BREVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING BREVE];
+[LATIN SMALL LETTER U WITH BREVE]
+ => <= [LATIN SMALL LETTER U][COMBINING BREVE];
+[LATIN CAPITAL LETTER U WITH RING ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING RING ABOVE];
+[LATIN SMALL LETTER U WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING RING ABOVE];
+[LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER U][COMBINING OGONEK];
+[LATIN SMALL LETTER U WITH OGONEK]
+ => <= [LATIN SMALL LETTER U][COMBINING OGONEK];
+[LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER W][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER W WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER W][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER Y][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Y WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Z WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER Z WITH ACUTE]
+ => <= [LATIN SMALL LETTER Z][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER Z WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER Z][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER Z WITH CARON]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING CARON];
+[LATIN SMALL LETTER Z WITH CARON]
+ => <= [LATIN SMALL LETTER Z][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH HORN]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN];
+[LATIN SMALL LETTER O WITH HORN]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN];
+[LATIN CAPITAL LETTER U WITH HORN]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN];
+[LATIN SMALL LETTER U WITH HORN]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN];
+[LATIN CAPITAL LETTER A WITH CARON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CARON];
+[LATIN SMALL LETTER A WITH CARON]
+ => <= [LATIN SMALL LETTER A][COMBINING CARON];
+[LATIN CAPITAL LETTER I WITH CARON]
+ => <= [LATIN CAPITAL LETTER I][COMBINING CARON];
+[LATIN SMALL LETTER I WITH CARON]
+ => <= [LATIN SMALL LETTER I][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH CARON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CARON];
+[LATIN SMALL LETTER O WITH CARON]
+ => <= [LATIN SMALL LETTER O][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH CARON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CARON];
+[LATIN SMALL LETTER U WITH CARON]
+ => <= [LATIN SMALL LETTER U][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING CARON];
+[LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN CAPITAL LETTER AE WITH MACRON]
+ => <= [LATIN CAPITAL LETTER AE][COMBINING MACRON];
+[LATIN SMALL LETTER AE WITH MACRON]
+ => <= [LATIN SMALL LETTER AE][COMBINING MACRON];
+[LATIN CAPITAL LETTER G WITH CARON]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CARON];
+[LATIN SMALL LETTER G WITH CARON]
+ => <= [LATIN SMALL LETTER G][COMBINING CARON];
+[LATIN CAPITAL LETTER K WITH CARON]
+ => <= [LATIN CAPITAL LETTER K][COMBINING CARON];
+[LATIN SMALL LETTER K WITH CARON]
+ => <= [LATIN SMALL LETTER K][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER O][COMBINING OGONEK];
+[LATIN SMALL LETTER O WITH OGONEK]
+ => <= [LATIN SMALL LETTER O][COMBINING OGONEK];
+[LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING OGONEK][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING OGONEK][COMBINING MACRON];
+[LATIN CAPITAL LETTER EZH WITH CARON]
+ => <= [LATIN CAPITAL LETTER EZH][COMBINING CARON];
+[LATIN SMALL LETTER EZH WITH CARON]
+ => <= [LATIN SMALL LETTER EZH][COMBINING CARON];
+[LATIN SMALL LETTER J WITH CARON]
+ => <= [LATIN SMALL LETTER J][COMBINING CARON];
+[LATIN CAPITAL LETTER G WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER G WITH ACUTE]
+ => <= [LATIN SMALL LETTER G][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER N WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER N WITH GRAVE]
+ => <= [LATIN SMALL LETTER N][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING ABOVE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING RING ABOVE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER AE WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER AE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER AE WITH ACUTE]
+ => <= [LATIN SMALL LETTER AE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O WITH STROKE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+ => <= [LATIN SMALL LETTER O WITH STROKE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER A WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER A][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER E WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER I][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER I WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER I][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER O WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER O][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER R][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER R WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER R][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER U WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER U][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER S WITH COMMA BELOW]
+ => <= [LATIN CAPITAL LETTER S][COMBINING COMMA BELOW];
+[LATIN SMALL LETTER S WITH COMMA BELOW]
+ => <= [LATIN SMALL LETTER S][COMBINING COMMA BELOW];
+[LATIN CAPITAL LETTER T WITH COMMA BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING COMMA BELOW];
+[LATIN SMALL LETTER T WITH COMMA BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING COMMA BELOW];
+[LATIN CAPITAL LETTER H WITH CARON]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CARON];
+[LATIN SMALL LETTER H WITH CARON]
+ => <= [LATIN SMALL LETTER H][COMBINING CARON];
+[LATIN CAPITAL LETTER A WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER A WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER E WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CEDILLA];
+[LATIN SMALL LETTER E WITH CEDILLA]
+ => <= [LATIN SMALL LETTER E][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH TILDE AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER O WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN CAPITAL LETTER Y WITH MACRON]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING MACRON];
+[LATIN SMALL LETTER Y WITH MACRON]
+ => <= [LATIN SMALL LETTER Y][COMBINING MACRON];
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH RING BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING BELOW];
+[LATIN SMALL LETTER A WITH RING BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING RING BELOW];
+[LATIN CAPITAL LETTER B WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER B][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER B WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER B][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER B WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER B][COMBINING DOT BELOW];
+[LATIN SMALL LETTER B WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER B][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER B WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER B][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER B WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER B][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CEDILLA][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+ => <= [LATIN SMALL LETTER C][COMBINING CEDILLA][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER D WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER D][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER D WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER D][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER D WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING DOT BELOW];
+[LATIN SMALL LETTER D WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER D WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER D WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER D WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CEDILLA];
+[LATIN SMALL LETTER D WITH CEDILLA]
+ => <= [LATIN SMALL LETTER D][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER E WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER E WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CEDILLA][COMBINING BREVE];
+[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CEDILLA][COMBINING BREVE];
+[LATIN CAPITAL LETTER F WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER F][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER F WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER F][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER G WITH MACRON]
+ => <= [LATIN CAPITAL LETTER G][COMBINING MACRON];
+[LATIN SMALL LETTER G WITH MACRON]
+ => <= [LATIN SMALL LETTER G][COMBINING MACRON];
+[LATIN CAPITAL LETTER H WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER H WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER H][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER H WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DOT BELOW];
+[LATIN SMALL LETTER H WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER H WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DIAERESIS];
+[LATIN SMALL LETTER H WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER H][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER H WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CEDILLA];
+[LATIN SMALL LETTER H WITH CEDILLA]
+ => <= [LATIN SMALL LETTER H][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER H WITH BREVE BELOW]
+ => <= [LATIN CAPITAL LETTER H][COMBINING BREVE BELOW];
+[LATIN SMALL LETTER H WITH BREVE BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING BREVE BELOW];
+[LATIN CAPITAL LETTER I WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER I][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER I WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER I][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+ => <= [LATIN SMALL LETTER I][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER K WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER K][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER K WITH ACUTE]
+ => <= [LATIN SMALL LETTER K][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER K WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER K][COMBINING DOT BELOW];
+[LATIN SMALL LETTER K WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER K][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER K WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER K][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER K WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER K][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER L WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING DOT BELOW];
+[LATIN SMALL LETTER L WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+ => <= [LATIN CAPITAL LETTER L][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+ => <= [LATIN SMALL LETTER L][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN CAPITAL LETTER L WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER L WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER M WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER M][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER M WITH ACUTE]
+ => <= [LATIN SMALL LETTER M][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER M WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER M][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER M WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER M][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER M WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER M][COMBINING DOT BELOW];
+[LATIN SMALL LETTER M WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER M][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER N WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER N WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER N][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER N WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING DOT BELOW];
+[LATIN SMALL LETTER N WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER N WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER N WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING DIAERESIS];
+[LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER P WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER P][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER P WITH ACUTE]
+ => <= [LATIN SMALL LETTER P][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER P WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER P][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER P WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER P][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER R WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER R WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER R WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT BELOW];
+[LATIN SMALL LETTER R WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN CAPITAL LETTER R WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER R][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER R WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER R][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER S WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT BELOW];
+[LATIN SMALL LETTER S WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING ACUTE ACCENT][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CARON][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING CARON][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT BELOW][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT BELOW][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER T WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER T][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER T WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER T][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER T WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING DOT BELOW];
+[LATIN SMALL LETTER T WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER T WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER T WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS BELOW];
+[LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS BELOW];
+[LATIN CAPITAL LETTER U WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER U WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+ => <= [LATIN CAPITAL LETTER U][COMBINING MACRON][COMBINING DIAERESIS];
+[LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+ => <= [LATIN SMALL LETTER U][COMBINING MACRON][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER V WITH TILDE]
+ => <= [LATIN CAPITAL LETTER V][COMBINING TILDE];
+[LATIN SMALL LETTER V WITH TILDE]
+ => <= [LATIN SMALL LETTER V][COMBINING TILDE];
+[LATIN CAPITAL LETTER V WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER V][COMBINING DOT BELOW];
+[LATIN SMALL LETTER V WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER V][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER W WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER W WITH GRAVE]
+ => <= [LATIN SMALL LETTER W][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER W WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER W WITH ACUTE]
+ => <= [LATIN SMALL LETTER W][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER W WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DIAERESIS];
+[LATIN SMALL LETTER W WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER W][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER W WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER W WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER W][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER W WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DOT BELOW];
+[LATIN SMALL LETTER W WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER W][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER X WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER X][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER X WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER X][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER X WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER X][COMBINING DIAERESIS];
+[LATIN SMALL LETTER X WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER X][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER Y WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER Z][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Z WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING DOT BELOW];
+[LATIN SMALL LETTER Z WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER Z][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Z WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER Z WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER Z][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER H WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER T WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER T][COMBINING DIAERESIS];
+[LATIN SMALL LETTER W WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER W][COMBINING RING ABOVE];
+[LATIN SMALL LETTER Y WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING RING ABOVE];
+[LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER LONG S][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER A WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW];
+[LATIN SMALL LETTER A WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH BREVE AND TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW][COMBINING BREVE];
+[LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW][COMBINING BREVE];
+[LATIN CAPITAL LETTER E WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT BELOW];
+[LATIN SMALL LETTER E WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER E WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER E WITH TILDE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING TILDE];
+[LATIN SMALL LETTER E WITH TILDE]
+ => <= [LATIN SMALL LETTER E][COMBINING TILDE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER I WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER I][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER I WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOT BELOW];
+[LATIN SMALL LETTER I WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER I][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER O WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT BELOW];
+[LATIN SMALL LETTER O WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH HORN AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH HORN AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH HORN AND TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER U WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOT BELOW];
+[LATIN SMALL LETTER U WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER U WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH HORN AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH HORN AND GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING TILDE];
+[LATIN SMALL LETTER U WITH HORN AND TILDE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING TILDE];
+[LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Y WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER Y WITH GRAVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER Y WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DOT BELOW];
+[LATIN SMALL LETTER Y WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER Y][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER Y WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER Y WITH TILDE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING TILDE];
+[LATIN SMALL LETTER Y WITH TILDE]
+ => <= [LATIN SMALL LETTER Y][COMBINING TILDE];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
+[OHM SIGN]
+ => <= [GREEK CAPITAL LETTER OMEGA];
+[LEFT-POINTING ANGLE BRACKET]
+ => <= [LEFT ANGLE BRACKET];
+[RIGHT-POINTING ANGLE BRACKET]
+ => <= [RIGHT ANGLE BRACKET];
diff --git a/macros/latex/exptl/mem/Mtp/ot1-rec.mtp b/macros/latex/exptl/mem/Mtp/ot1-rec.mtp
new file mode 100644
index 0000000000..02140eda14
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ot1-rec.mtp
@@ -0,0 +1,149 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+
+
+% Unicode to main font, except those below
+
+
+[INVERTED EXCLAMATION MARK] => @"003C ;
+[INVERTED QUESTION MARK] => @"003E ;
+[LATIN CAPITAL LETTER AE] => @"E11D ;
+[LATIN CAPITAL LETTER O WITH STROKE] => @"E11F ;
+[LATIN SMALL LETTER SHARP S] => @"E119 ;
+[LATIN SMALL LETTER AE] => @"E11A ;
+[LATIN SMALL LETTER O WITH STROKE] => @"E11C ;
+[LATIN SMALL LETTER DOTLESS I] => @"E110 ;
+[LATIN CAPITAL LIGATURE OE] => @"E11E ;
+[LATIN SMALL LIGATURE OE] => @"E11B ;
+@"0237 => @"E111 ;
+[GREEK CAPITAL LETTER GAMMA] => @"E100 ;
+[GREEK CAPITAL LETTER DELTA] => @"E101 ;
+[GREEK CAPITAL LETTER THETA] => @"E102 ;
+[GREEK CAPITAL LETTER LAMDA] => @"E103 ;
+[GREEK CAPITAL LETTER XI] => @"E104 ;
+[GREEK CAPITAL LETTER PI] => @"E105 ;
+[GREEK CAPITAL LETTER SIGMA] => @"E106 ;
+[GREEK CAPITAL LETTER UPSILON] => @"E107 ;
+[GREEK CAPITAL LETTER PHI] => @"E108 ;
+[GREEK CAPITAL LETTER PSI] => @"E109 ;
+[GREEK CAPITAL LETTER OMEGA] => @"E10A ;
+[EN DASH] => @"007B ;
+[EM DASH] => @"007C ;
+[LEFT SINGLE QUOTATION MARK] => @"0060 ;
+[RIGHT SINGLE QUOTATION MARK] => @"0027 ;
+[LEFT DOUBLE QUOTATION MARK] => @"005C ;
+[RIGHT DOUBLE QUOTATION MARK] => @"0022 ;
+[LATIN SMALL LIGATURE FF] => @"E10B ;
+[LATIN SMALL LIGATURE FI] => @"E10C ;
+[LATIN SMALL LIGATURE FL] => @"E10D ;
+[LATIN SMALL LIGATURE FFI] => @"E10E ;
+[LATIN SMALL LIGATURE FFL] => @"E10F ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+[APOSTROPHE] => "\UseMemTextSymbol{TS1}{39}";
+[CENT SIGN] => "\UseMemTextSymbol{TS1}{162}";
+[POUND SIGN] => "\UseMemTextSymbol{TS1}{163}";
+[CURRENCY SIGN] => "\UseMemTextSymbol{TS1}{164}";
+[YEN SIGN] => "\UseMemTextSymbol{TS1}{165}";
+[BROKEN BAR] => "\UseMemTextSymbol{TS1}{166}";
+[SECTION SIGN] => "\UseMemTextSymbol{TS1}{167}";
+[COPYRIGHT SIGN] => "\UseMemTextSymbol{TS1}{169}";
+[FEMININE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{170}";
+[NOT SIGN] => "\UseMemTextSymbol{TS1}{172}";
+[REGISTERED SIGN] => "\UseMemTextSymbol{TS1}{174}";
+[DEGREE SIGN] => "\UseMemTextSymbol{TS1}{176}";
+[PLUS-MINUS SIGN] => "\UseMemTextSymbol{TS1}{177}";
+[SUPERSCRIPT TWO] => "\UseMemTextSymbol{TS1}{178}";
+[SUPERSCRIPT THREE] => "\UseMemTextSymbol{TS1}{179}";
+[MICRO SIGN] => "\UseMemTextSymbol{TS1}{181}";
+[PILCROW SIGN] => "\UseMemTextSymbol{TS1}{182}";
+[MIDDLE DOT] => "\UseMemTextSymbol{TS1}{183}";
+[SUPERSCRIPT ONE] => "\UseMemTextSymbol{TS1}{185}";
+[MASCULINE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{186}";
+[VULGAR FRACTION ONE QUARTER] => "\UseMemTextSymbol{TS1}{188}";
+[VULGAR FRACTION ONE HALF] => "\UseMemTextSymbol{TS1}{189}";
+[VULGAR FRACTION THREE QUARTERS] => "\UseMemTextSymbol{TS1}{190}";
+[MULTIPLICATION SIGN] => "\UseMemTextSymbol{TS1}{215}";
+[DIVISION SIGN] => "\UseMemTextSymbol{TS1}{247}";
+[LATIN SMALL LETTER F WITH HOOK] => "\UseMemTextSymbol{TS1}{140}";
+[COMBINING OGONEK] => "\UseMemTextSymbol{TS1}{12}";
+[DAGGER] => "\UseMemTextSymbol{TS1}{132}";
+[DOUBLE DAGGER] => "\UseMemTextSymbol{TS1}{133}";
+[BULLET] => "\UseMemTextSymbol{TS1}{136}";
+[PER MILLE SIGN] => "\UseMemTextSymbol{TS1}{135}";
+[FRACTION SLASH] => "\UseMemTextSymbol{TS1}{47}";
+[COLON SIGN] => "\UseMemTextSymbol{TS1}{141}";
+[LIRA SIGN] => "\UseMemTextSymbol{TS1}{146}";
+[DONG SIGN] => "\UseMemTextSymbol{TS1}{150}";
+[EURO SIGN] => "\UseMemTextSymbol{TS1}{191}";
+[NUMERO SIGN] => "\UseMemTextSymbol{TS1}{155}";
+[TRADE MARK SIGN] => "\UseMemTextSymbol{TS1}{151}";
+[OHM SIGN] => "\UseMemTextSymbol{TS1}{87}";
+[ESTIMATED SYMBOL] => "\UseMemTextSymbol{TS1}{157}";
+[LEFTWARDS ARROW] => "\UseMemTextSymbol{TS1}{24}";
+[UPWARDS ARROW] => "\UseMemTextSymbol{TS1}{94}";
+[RIGHTWARDS ARROW] => "\UseMemTextSymbol{TS1}{25}";
+[DOWNWARDS ARROW] => "\UseMemTextSymbol{TS1}{95}";
+[MINUS SIGN] => "\UseMemTextSymbol{TS1}{61}";
+[ASTERISK OPERATOR] => "\UseMemTextSymbol{TS1}{42}";
+[SQUARE ROOT] => "\UseMemTextSymbol{TS1}{187}";
+[LEFT-POINTING ANGLE BRACKET] => "\UseMemTextSymbol{TS1}{60}";
+[RIGHT-POINTING ANGLE BRACKET] => "\UseMemTextSymbol{TS1}{62}";
+[WHITE CIRCLE] => "\UseMemTextSymbol{TS1}{79}";
+[WHITE BULLET] => "\UseMemTextSymbol{TS1}{158}";
+[EIGHTH NOTE] => "\UseMemTextSymbol{TS1}{110}";
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"0021|@"0023-@"0026|@"0028-@"003B|@"003D|@"003F-@"005B|@"005D|@"0061-@"007A|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/spguill.mtp b/macros/latex/exptl/mem/Mtp/spguill.mtp
new file mode 100644
index 0000000000..eb66f24a9f
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/spguill.mtp
@@ -0,0 +1,9 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] => [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] "\SpguillGuillemetSpace{}";
+[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] => "\SpguillGuillemetSpace{}" [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/sppcent.mtp b/macros/latex/exptl/mem/Mtp/sppcent.mtp
new file mode 100644
index 0000000000..144fe19805
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/sppcent.mtp
@@ -0,0 +1,8 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+(`0'-`9')@"E125 => \1 "\kern.25em " \2; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/t1-com.mtp b/macros/latex/exptl/mem/Mtp/t1-com.mtp
new file mode 100644
index 0000000000..a808ee5bc2
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/t1-com.mtp
@@ -0,0 +1,71 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING GRAVE ACCENT] => "\UseMemAccent{t}{0}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{u}{0}";
+<acc>[COMBINING ACUTE ACCENT] => "\UseMemAccent{t}{1}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{u}{1}";
+<acc>[COMBINING CIRCUMFLEX ACCENT] => "\UseMemAccent{t}{2}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{u}{2}";
+<acc>[COMBINING TILDE] => "\UseMemAccent{t}{3}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{u}{3}";
+<acc>[COMBINING MACRON] => "\UseMemAccent{t}{9}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{u}{9}";
+<acc>[COMBINING BREVE] => "\UseMemAccent{t}{8}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{u}{8}";
+<acc>[COMBINING DOT ABOVE] => "\UseMemAccent{t}{10}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{u}{10}";
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{4}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{4}";
+<acc>[COMBINING RING ABOVE] => "\UseMemAccent{t}{6}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{u}{6}";
+<acc>[COMBINING DOUBLE ACUTE ACCENT] => "\UseMemAccent{t}{5}";
+<acc>[COMBINING CARON] => "\UseMemAccent{t}{7}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{u}{7}";
+<acc>[COMBINING CEDILLA] => "\UseMemAccent{c}{11}";
+<acc>[COMBINING OGONEK] => "\UseMemAccent{k}{12}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"0026|@"0028-@"005F|@"0061-@"007E|@"00C0-@"00D6|@"00D8-@"00DE|@"00E0-@"00F6|@"00F8-@"00FE) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/t1-dec.mtp b/macros/latex/exptl/mem/Mtp/t1-dec.mtp
new file mode 100644
index 0000000000..8dc0ec59e1
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/t1-dec.mtp
@@ -0,0 +1,1023 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[LATIN CAPITAL LETTER A WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER A WITH TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER A WITH RING ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING ABOVE];
+[LATIN CAPITAL LETTER C WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER E WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER E WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER I WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER I WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER I][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER N WITH TILDE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER O WITH TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER U WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER U WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Y WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER A WITH TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER A][COMBINING DIAERESIS];
+[LATIN SMALL LETTER A WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING RING ABOVE];
+[LATIN SMALL LETTER C WITH CEDILLA]
+ => <= [LATIN SMALL LETTER C][COMBINING CEDILLA];
+[LATIN SMALL LETTER E WITH GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER E WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER E][COMBINING DIAERESIS];
+[LATIN SMALL LETTER I WITH GRAVE]
+ => <= [LATIN SMALL LETTER I][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER I WITH ACUTE]
+ => <= [LATIN SMALL LETTER I][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER I WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER I][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER I WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER I][COMBINING DIAERESIS];
+[LATIN SMALL LETTER N WITH TILDE]
+ => <= [LATIN SMALL LETTER N][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER O WITH TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER O][COMBINING DIAERESIS];
+[LATIN SMALL LETTER U WITH GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS];
+[LATIN SMALL LETTER Y WITH ACUTE]
+ => <= [LATIN SMALL LETTER Y][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER Y WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER Y][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER A WITH MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING MACRON];
+[LATIN CAPITAL LETTER A WITH BREVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE];
+[LATIN SMALL LETTER A WITH BREVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE];
+[LATIN CAPITAL LETTER A WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER A][COMBINING OGONEK];
+[LATIN SMALL LETTER A WITH OGONEK]
+ => <= [LATIN SMALL LETTER A][COMBINING OGONEK];
+[LATIN CAPITAL LETTER C WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER C WITH ACUTE]
+ => <= [LATIN SMALL LETTER C][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER C WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER C][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER C WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER C WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER C][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER C WITH CARON]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CARON];
+[LATIN SMALL LETTER C WITH CARON]
+ => <= [LATIN SMALL LETTER C][COMBINING CARON];
+[LATIN CAPITAL LETTER D WITH CARON]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CARON];
+[LATIN SMALL LETTER D WITH CARON]
+ => <= [LATIN SMALL LETTER D][COMBINING CARON];
+[LATIN CAPITAL LETTER E WITH MACRON]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON];
+[LATIN SMALL LETTER E WITH MACRON]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON];
+[LATIN CAPITAL LETTER E WITH BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING BREVE];
+[LATIN SMALL LETTER E WITH BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING BREVE];
+[LATIN CAPITAL LETTER E WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER E WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER E WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER E][COMBINING OGONEK];
+[LATIN SMALL LETTER E WITH OGONEK]
+ => <= [LATIN SMALL LETTER E][COMBINING OGONEK];
+[LATIN CAPITAL LETTER E WITH CARON]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CARON];
+[LATIN SMALL LETTER E WITH CARON]
+ => <= [LATIN SMALL LETTER E][COMBINING CARON];
+[LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER G WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER G][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER G WITH BREVE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING BREVE];
+[LATIN SMALL LETTER G WITH BREVE]
+ => <= [LATIN SMALL LETTER G][COMBINING BREVE];
+[LATIN CAPITAL LETTER G WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER G WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER G][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER G WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CEDILLA];
+[LATIN SMALL LETTER G WITH CEDILLA]
+ => <= [LATIN SMALL LETTER G][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER H WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER H][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH TILDE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING TILDE];
+[LATIN SMALL LETTER I WITH TILDE]
+ => <= [LATIN SMALL LETTER I][COMBINING TILDE];
+[LATIN CAPITAL LETTER I WITH MACRON]
+ => <= [LATIN CAPITAL LETTER I][COMBINING MACRON];
+[LATIN SMALL LETTER I WITH MACRON]
+ => <= [LATIN SMALL LETTER I][COMBINING MACRON];
+[LATIN CAPITAL LETTER I WITH BREVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING BREVE];
+[LATIN SMALL LETTER I WITH BREVE]
+ => <= [LATIN SMALL LETTER I][COMBINING BREVE];
+[LATIN CAPITAL LETTER I WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER I][COMBINING OGONEK];
+[LATIN SMALL LETTER I WITH OGONEK]
+ => <= [LATIN SMALL LETTER I][COMBINING OGONEK];
+[LATIN CAPITAL LETTER I WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER J][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER J WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER J][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER K WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER K][COMBINING CEDILLA];
+[LATIN SMALL LETTER K WITH CEDILLA]
+ => <= [LATIN SMALL LETTER K][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER L WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER L][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER L WITH ACUTE]
+ => <= [LATIN SMALL LETTER L][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER L WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CEDILLA];
+[LATIN SMALL LETTER L WITH CEDILLA]
+ => <= [LATIN SMALL LETTER L][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER L WITH CARON]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CARON];
+[LATIN SMALL LETTER L WITH CARON]
+ => <= [LATIN SMALL LETTER L][COMBINING CARON];
+[LATIN CAPITAL LETTER N WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER N WITH ACUTE]
+ => <= [LATIN SMALL LETTER N][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER N WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CEDILLA];
+[LATIN SMALL LETTER N WITH CEDILLA]
+ => <= [LATIN SMALL LETTER N][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER N WITH CARON]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CARON];
+[LATIN SMALL LETTER N WITH CARON]
+ => <= [LATIN SMALL LETTER N][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH BREVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING BREVE];
+[LATIN SMALL LETTER O WITH BREVE]
+ => <= [LATIN SMALL LETTER O][COMBINING BREVE];
+[LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN CAPITAL LETTER R WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER R WITH ACUTE]
+ => <= [LATIN SMALL LETTER R][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER R WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER R][COMBINING CEDILLA];
+[LATIN SMALL LETTER R WITH CEDILLA]
+ => <= [LATIN SMALL LETTER R][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER R WITH CARON]
+ => <= [LATIN CAPITAL LETTER R][COMBINING CARON];
+[LATIN SMALL LETTER R WITH CARON]
+ => <= [LATIN SMALL LETTER R][COMBINING CARON];
+[LATIN CAPITAL LETTER S WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER S WITH ACUTE]
+ => <= [LATIN SMALL LETTER S][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER S WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER S][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER S WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CEDILLA];
+[LATIN SMALL LETTER S WITH CEDILLA]
+ => <= [LATIN SMALL LETTER S][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER S WITH CARON]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CARON];
+[LATIN SMALL LETTER S WITH CARON]
+ => <= [LATIN SMALL LETTER S][COMBINING CARON];
+[LATIN CAPITAL LETTER T WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CEDILLA];
+[LATIN SMALL LETTER T WITH CEDILLA]
+ => <= [LATIN SMALL LETTER T][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER T WITH CARON]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CARON];
+[LATIN SMALL LETTER T WITH CARON]
+ => <= [LATIN SMALL LETTER T][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH TILDE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE];
+[LATIN SMALL LETTER U WITH TILDE]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE];
+[LATIN CAPITAL LETTER U WITH MACRON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING MACRON];
+[LATIN SMALL LETTER U WITH MACRON]
+ => <= [LATIN SMALL LETTER U][COMBINING MACRON];
+[LATIN CAPITAL LETTER U WITH BREVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING BREVE];
+[LATIN SMALL LETTER U WITH BREVE]
+ => <= [LATIN SMALL LETTER U][COMBINING BREVE];
+[LATIN CAPITAL LETTER U WITH RING ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING RING ABOVE];
+[LATIN SMALL LETTER U WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING RING ABOVE];
+[LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER U][COMBINING OGONEK];
+[LATIN SMALL LETTER U WITH OGONEK]
+ => <= [LATIN SMALL LETTER U][COMBINING OGONEK];
+[LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER W][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER W WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER W][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER Y][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Y WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Z WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER Z WITH ACUTE]
+ => <= [LATIN SMALL LETTER Z][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER Z WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER Z][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER Z WITH CARON]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING CARON];
+[LATIN SMALL LETTER Z WITH CARON]
+ => <= [LATIN SMALL LETTER Z][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH HORN]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN];
+[LATIN SMALL LETTER O WITH HORN]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN];
+[LATIN CAPITAL LETTER U WITH HORN]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN];
+[LATIN SMALL LETTER U WITH HORN]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN];
+[LATIN CAPITAL LETTER A WITH CARON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CARON];
+[LATIN SMALL LETTER A WITH CARON]
+ => <= [LATIN SMALL LETTER A][COMBINING CARON];
+[LATIN CAPITAL LETTER I WITH CARON]
+ => <= [LATIN CAPITAL LETTER I][COMBINING CARON];
+[LATIN SMALL LETTER I WITH CARON]
+ => <= [LATIN SMALL LETTER I][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH CARON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CARON];
+[LATIN SMALL LETTER O WITH CARON]
+ => <= [LATIN SMALL LETTER O][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH CARON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CARON];
+[LATIN SMALL LETTER U WITH CARON]
+ => <= [LATIN SMALL LETTER U][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING CARON];
+[LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN CAPITAL LETTER AE WITH MACRON]
+ => <= [LATIN CAPITAL LETTER AE][COMBINING MACRON];
+[LATIN SMALL LETTER AE WITH MACRON]
+ => <= [LATIN SMALL LETTER AE][COMBINING MACRON];
+[LATIN CAPITAL LETTER G WITH CARON]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CARON];
+[LATIN SMALL LETTER G WITH CARON]
+ => <= [LATIN SMALL LETTER G][COMBINING CARON];
+[LATIN CAPITAL LETTER K WITH CARON]
+ => <= [LATIN CAPITAL LETTER K][COMBINING CARON];
+[LATIN SMALL LETTER K WITH CARON]
+ => <= [LATIN SMALL LETTER K][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER O][COMBINING OGONEK];
+[LATIN SMALL LETTER O WITH OGONEK]
+ => <= [LATIN SMALL LETTER O][COMBINING OGONEK];
+[LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING OGONEK][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING OGONEK][COMBINING MACRON];
+[LATIN CAPITAL LETTER EZH WITH CARON]
+ => <= [LATIN CAPITAL LETTER EZH][COMBINING CARON];
+[LATIN SMALL LETTER EZH WITH CARON]
+ => <= [LATIN SMALL LETTER EZH][COMBINING CARON];
+[LATIN SMALL LETTER J WITH CARON]
+ => <= [LATIN SMALL LETTER J][COMBINING CARON];
+[LATIN CAPITAL LETTER G WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER G WITH ACUTE]
+ => <= [LATIN SMALL LETTER G][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER N WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER N WITH GRAVE]
+ => <= [LATIN SMALL LETTER N][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING ABOVE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING RING ABOVE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER AE WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER AE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER AE WITH ACUTE]
+ => <= [LATIN SMALL LETTER AE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O WITH STROKE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+ => <= [LATIN SMALL LETTER O WITH STROKE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER A WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER A][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER E WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER I][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER I WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER I][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER O WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER O][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER R][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER R WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER R][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER U WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER U][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER S WITH COMMA BELOW]
+ => <= [LATIN CAPITAL LETTER S][COMBINING COMMA BELOW];
+[LATIN SMALL LETTER S WITH COMMA BELOW]
+ => <= [LATIN SMALL LETTER S][COMBINING COMMA BELOW];
+[LATIN CAPITAL LETTER T WITH COMMA BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING COMMA BELOW];
+[LATIN SMALL LETTER T WITH COMMA BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING COMMA BELOW];
+[LATIN CAPITAL LETTER H WITH CARON]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CARON];
+[LATIN SMALL LETTER H WITH CARON]
+ => <= [LATIN SMALL LETTER H][COMBINING CARON];
+[LATIN CAPITAL LETTER A WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER A WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER E WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CEDILLA];
+[LATIN SMALL LETTER E WITH CEDILLA]
+ => <= [LATIN SMALL LETTER E][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH TILDE AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER O WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN CAPITAL LETTER Y WITH MACRON]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING MACRON];
+[LATIN SMALL LETTER Y WITH MACRON]
+ => <= [LATIN SMALL LETTER Y][COMBINING MACRON];
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH RING BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING BELOW];
+[LATIN SMALL LETTER A WITH RING BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING RING BELOW];
+[LATIN CAPITAL LETTER B WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER B][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER B WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER B][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER B WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER B][COMBINING DOT BELOW];
+[LATIN SMALL LETTER B WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER B][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER B WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER B][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER B WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER B][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CEDILLA][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+ => <= [LATIN SMALL LETTER C][COMBINING CEDILLA][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER D WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER D][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER D WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER D][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER D WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING DOT BELOW];
+[LATIN SMALL LETTER D WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER D WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER D WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER D WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CEDILLA];
+[LATIN SMALL LETTER D WITH CEDILLA]
+ => <= [LATIN SMALL LETTER D][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER E WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER E WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CEDILLA][COMBINING BREVE];
+[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CEDILLA][COMBINING BREVE];
+[LATIN CAPITAL LETTER F WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER F][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER F WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER F][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER G WITH MACRON]
+ => <= [LATIN CAPITAL LETTER G][COMBINING MACRON];
+[LATIN SMALL LETTER G WITH MACRON]
+ => <= [LATIN SMALL LETTER G][COMBINING MACRON];
+[LATIN CAPITAL LETTER H WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER H WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER H][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER H WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DOT BELOW];
+[LATIN SMALL LETTER H WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER H WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DIAERESIS];
+[LATIN SMALL LETTER H WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER H][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER H WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CEDILLA];
+[LATIN SMALL LETTER H WITH CEDILLA]
+ => <= [LATIN SMALL LETTER H][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER H WITH BREVE BELOW]
+ => <= [LATIN CAPITAL LETTER H][COMBINING BREVE BELOW];
+[LATIN SMALL LETTER H WITH BREVE BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING BREVE BELOW];
+[LATIN CAPITAL LETTER I WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER I][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER I WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER I][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+ => <= [LATIN SMALL LETTER I][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER K WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER K][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER K WITH ACUTE]
+ => <= [LATIN SMALL LETTER K][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER K WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER K][COMBINING DOT BELOW];
+[LATIN SMALL LETTER K WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER K][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER K WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER K][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER K WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER K][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER L WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING DOT BELOW];
+[LATIN SMALL LETTER L WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+ => <= [LATIN CAPITAL LETTER L][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+ => <= [LATIN SMALL LETTER L][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN CAPITAL LETTER L WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER L WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER M WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER M][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER M WITH ACUTE]
+ => <= [LATIN SMALL LETTER M][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER M WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER M][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER M WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER M][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER M WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER M][COMBINING DOT BELOW];
+[LATIN SMALL LETTER M WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER M][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER N WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER N WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER N][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER N WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING DOT BELOW];
+[LATIN SMALL LETTER N WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER N WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER N WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING DIAERESIS];
+[LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER P WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER P][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER P WITH ACUTE]
+ => <= [LATIN SMALL LETTER P][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER P WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER P][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER P WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER P][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER R WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER R WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER R WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT BELOW];
+[LATIN SMALL LETTER R WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN CAPITAL LETTER R WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER R][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER R WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER R][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER S WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT BELOW];
+[LATIN SMALL LETTER S WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING ACUTE ACCENT][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CARON][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING CARON][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT BELOW][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT BELOW][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER T WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER T][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER T WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER T][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER T WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING DOT BELOW];
+[LATIN SMALL LETTER T WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER T WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER T WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS BELOW];
+[LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS BELOW];
+[LATIN CAPITAL LETTER U WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER U WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+ => <= [LATIN CAPITAL LETTER U][COMBINING MACRON][COMBINING DIAERESIS];
+[LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+ => <= [LATIN SMALL LETTER U][COMBINING MACRON][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER V WITH TILDE]
+ => <= [LATIN CAPITAL LETTER V][COMBINING TILDE];
+[LATIN SMALL LETTER V WITH TILDE]
+ => <= [LATIN SMALL LETTER V][COMBINING TILDE];
+[LATIN CAPITAL LETTER V WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER V][COMBINING DOT BELOW];
+[LATIN SMALL LETTER V WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER V][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER W WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER W WITH GRAVE]
+ => <= [LATIN SMALL LETTER W][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER W WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER W WITH ACUTE]
+ => <= [LATIN SMALL LETTER W][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER W WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DIAERESIS];
+[LATIN SMALL LETTER W WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER W][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER W WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER W WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER W][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER W WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DOT BELOW];
+[LATIN SMALL LETTER W WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER W][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER X WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER X][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER X WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER X][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER X WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER X][COMBINING DIAERESIS];
+[LATIN SMALL LETTER X WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER X][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER Y WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER Z][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Z WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING DOT BELOW];
+[LATIN SMALL LETTER Z WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER Z][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Z WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER Z WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER Z][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER H WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER T WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER T][COMBINING DIAERESIS];
+[LATIN SMALL LETTER W WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER W][COMBINING RING ABOVE];
+[LATIN SMALL LETTER Y WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING RING ABOVE];
+[LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER LONG S][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER A WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW];
+[LATIN SMALL LETTER A WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH BREVE AND TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW][COMBINING BREVE];
+[LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW][COMBINING BREVE];
+[LATIN CAPITAL LETTER E WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT BELOW];
+[LATIN SMALL LETTER E WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER E WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER E WITH TILDE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING TILDE];
+[LATIN SMALL LETTER E WITH TILDE]
+ => <= [LATIN SMALL LETTER E][COMBINING TILDE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER I WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER I][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER I WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOT BELOW];
+[LATIN SMALL LETTER I WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER I][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER O WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT BELOW];
+[LATIN SMALL LETTER O WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH HORN AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH HORN AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH HORN AND TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER U WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOT BELOW];
+[LATIN SMALL LETTER U WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER U WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH HORN AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH HORN AND GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING TILDE];
+[LATIN SMALL LETTER U WITH HORN AND TILDE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING TILDE];
+[LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Y WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER Y WITH GRAVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER Y WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DOT BELOW];
+[LATIN SMALL LETTER Y WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER Y][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER Y WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER Y WITH TILDE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING TILDE];
+[LATIN SMALL LETTER Y WITH TILDE]
+ => <= [LATIN SMALL LETTER Y][COMBINING TILDE];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
+[OHM SIGN]
+ => <= [GREEK CAPITAL LETTER OMEGA];
+[LEFT-POINTING ANGLE BRACKET]
+ => <= [LEFT ANGLE BRACKET];
+[RIGHT-POINTING ANGLE BRACKET]
+ => <= [RIGHT ANGLE BRACKET];
diff --git a/macros/latex/exptl/mem/Mtp/t1-rec.mtp b/macros/latex/exptl/mem/Mtp/t1-rec.mtp
new file mode 100644
index 0000000000..159bac1090
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/t1-rec.mtp
@@ -0,0 +1,303 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+[LATIN CAPITAL LETTER A][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER A WITH GRAVE] ;
+[LATIN CAPITAL LETTER A][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER A WITH ACUTE] ;
+[LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER A][COMBINING TILDE] => <= [LATIN CAPITAL LETTER A WITH TILDE] ;
+[LATIN CAPITAL LETTER A][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER A WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER A][COMBINING RING ABOVE] => <= [LATIN CAPITAL LETTER A WITH RING ABOVE] ;
+[LATIN CAPITAL LETTER C][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER C WITH CEDILLA] ;
+[LATIN CAPITAL LETTER E][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER E WITH GRAVE] ;
+[LATIN CAPITAL LETTER E][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER E WITH ACUTE] ;
+[LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER E][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER E WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER I][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER I WITH GRAVE] ;
+[LATIN CAPITAL LETTER I][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER I WITH ACUTE] ;
+[LATIN CAPITAL LETTER I][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER I WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER I][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER I WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER N][COMBINING TILDE] => <= [LATIN CAPITAL LETTER N WITH TILDE] ;
+[LATIN CAPITAL LETTER O][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER O WITH GRAVE] ;
+[LATIN CAPITAL LETTER O][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH ACUTE] ;
+[LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER O][COMBINING TILDE] => <= [LATIN CAPITAL LETTER O WITH TILDE] ;
+[LATIN CAPITAL LETTER O][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER O WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER U][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER U WITH GRAVE] ;
+[LATIN CAPITAL LETTER U][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH ACUTE] ;
+[LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER U WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER U][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER Y][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER Y WITH ACUTE] ;
+[LATIN SMALL LETTER A][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER A WITH GRAVE] ;
+[LATIN SMALL LETTER A][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER A WITH ACUTE] ;
+[LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER A][COMBINING TILDE] => <= [LATIN SMALL LETTER A WITH TILDE] ;
+[LATIN SMALL LETTER A][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER A WITH DIAERESIS] ;
+[LATIN SMALL LETTER A][COMBINING RING ABOVE] => <= [LATIN SMALL LETTER A WITH RING ABOVE] ;
+[LATIN SMALL LETTER C][COMBINING CEDILLA] => <= [LATIN SMALL LETTER C WITH CEDILLA] ;
+[LATIN SMALL LETTER E][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER E WITH GRAVE] ;
+[LATIN SMALL LETTER E][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER E WITH ACUTE] ;
+[LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER E][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER E WITH DIAERESIS] ;
+[LATIN SMALL LETTER I][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER I WITH GRAVE] ;
+[LATIN SMALL LETTER I][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER I WITH ACUTE] ;
+[LATIN SMALL LETTER I][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER I WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER I][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER I WITH DIAERESIS] ;
+[LATIN SMALL LETTER N][COMBINING TILDE] => <= [LATIN SMALL LETTER N WITH TILDE] ;
+[LATIN SMALL LETTER O][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER O WITH GRAVE] ;
+[LATIN SMALL LETTER O][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH ACUTE] ;
+[LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER O][COMBINING TILDE] => <= [LATIN SMALL LETTER O WITH TILDE] ;
+[LATIN SMALL LETTER O][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER O WITH DIAERESIS] ;
+[LATIN SMALL LETTER U][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER U WITH GRAVE] ;
+[LATIN SMALL LETTER U][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH ACUTE] ;
+[LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER U WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER U][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER U WITH DIAERESIS] ;
+[LATIN SMALL LETTER Y][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER Y WITH ACUTE] ;
+[LATIN SMALL LETTER Y][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER Y WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER A][COMBINING BREVE] => <= [LATIN CAPITAL LETTER A WITH BREVE] ;
+[LATIN SMALL LETTER A][COMBINING BREVE] => <= [LATIN SMALL LETTER A WITH BREVE] ;
+[LATIN CAPITAL LETTER A][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER A WITH OGONEK] ;
+[LATIN SMALL LETTER A][COMBINING OGONEK] => <= [LATIN SMALL LETTER A WITH OGONEK] ;
+[LATIN CAPITAL LETTER C][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER C WITH ACUTE] ;
+[LATIN SMALL LETTER C][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER C WITH ACUTE] ;
+[LATIN CAPITAL LETTER C][COMBINING CARON] => <= [LATIN CAPITAL LETTER C WITH CARON] ;
+[LATIN SMALL LETTER C][COMBINING CARON] => <= [LATIN SMALL LETTER C WITH CARON] ;
+[LATIN CAPITAL LETTER D][COMBINING CARON] => <= [LATIN CAPITAL LETTER D WITH CARON] ;
+[LATIN SMALL LETTER D][COMBINING CARON] => <= [LATIN SMALL LETTER D WITH CARON] ;
+[LATIN CAPITAL LETTER E][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER E WITH OGONEK] ;
+[LATIN SMALL LETTER E][COMBINING OGONEK] => <= [LATIN SMALL LETTER E WITH OGONEK] ;
+[LATIN CAPITAL LETTER E][COMBINING CARON] => <= [LATIN CAPITAL LETTER E WITH CARON] ;
+[LATIN SMALL LETTER E][COMBINING CARON] => <= [LATIN SMALL LETTER E WITH CARON] ;
+[LATIN CAPITAL LETTER G][COMBINING BREVE] => <= [LATIN CAPITAL LETTER G WITH BREVE] ;
+[LATIN SMALL LETTER G][COMBINING BREVE] => <= [LATIN SMALL LETTER G WITH BREVE] ;
+[LATIN CAPITAL LETTER I][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER I WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER L][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER L WITH ACUTE] ;
+[LATIN SMALL LETTER L][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER L WITH ACUTE] ;
+[LATIN CAPITAL LETTER L][COMBINING CARON] => <= [LATIN CAPITAL LETTER L WITH CARON] ;
+[LATIN SMALL LETTER L][COMBINING CARON] => <= [LATIN SMALL LETTER L WITH CARON] ;
+[LATIN CAPITAL LETTER N][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER N WITH ACUTE] ;
+[LATIN SMALL LETTER N][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER N WITH ACUTE] ;
+[LATIN CAPITAL LETTER N][COMBINING CARON] => <= [LATIN CAPITAL LETTER N WITH CARON] ;
+[LATIN SMALL LETTER N][COMBINING CARON] => <= [LATIN SMALL LETTER N WITH CARON] ;
+[LATIN CAPITAL LETTER O][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE] ;
+[LATIN SMALL LETTER O][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH DOUBLE ACUTE] ;
+[LATIN CAPITAL LETTER R][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER R WITH ACUTE] ;
+[LATIN SMALL LETTER R][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER R WITH ACUTE] ;
+[LATIN CAPITAL LETTER R][COMBINING CARON] => <= [LATIN CAPITAL LETTER R WITH CARON] ;
+[LATIN SMALL LETTER R][COMBINING CARON] => <= [LATIN SMALL LETTER R WITH CARON] ;
+[LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER S WITH ACUTE] ;
+[LATIN SMALL LETTER S][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER S WITH ACUTE] ;
+[LATIN CAPITAL LETTER S][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER S WITH CEDILLA] ;
+[LATIN SMALL LETTER S][COMBINING CEDILLA] => <= [LATIN SMALL LETTER S WITH CEDILLA] ;
+[LATIN CAPITAL LETTER S][COMBINING CARON] => <= [LATIN CAPITAL LETTER S WITH CARON] ;
+[LATIN SMALL LETTER S][COMBINING CARON] => <= [LATIN SMALL LETTER S WITH CARON] ;
+[LATIN CAPITAL LETTER T][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER T WITH CEDILLA] ;
+[LATIN SMALL LETTER T][COMBINING CEDILLA] => <= [LATIN SMALL LETTER T WITH CEDILLA] ;
+[LATIN CAPITAL LETTER T][COMBINING CARON] => <= [LATIN CAPITAL LETTER T WITH CARON] ;
+[LATIN CAPITAL LETTER U][COMBINING RING ABOVE] => <= [LATIN CAPITAL LETTER U WITH RING ABOVE] ;
+[LATIN SMALL LETTER U][COMBINING RING ABOVE] => <= [LATIN SMALL LETTER U WITH RING ABOVE] ;
+[LATIN CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE] ;
+[LATIN SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH DOUBLE ACUTE] ;
+[LATIN CAPITAL LETTER Y][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER Y WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER Z][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER Z WITH ACUTE] ;
+[LATIN SMALL LETTER Z][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER Z WITH ACUTE] ;
+[LATIN CAPITAL LETTER Z][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER Z WITH DOT ABOVE] ;
+[LATIN SMALL LETTER Z][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER Z WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER Z][COMBINING CARON] => <= [LATIN CAPITAL LETTER Z WITH CARON] ;
+[LATIN SMALL LETTER Z][COMBINING CARON] => <= [LATIN SMALL LETTER Z WITH CARON] ;
+
+
+% Unicode to main font, except those below
+
+
+[INVERTED EXCLAMATION MARK] => @"00BD ;
+[POUND SIGN] => @"00BF ;
+[SECTION SIGN] => @"009F ;
+[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] => @"E113 ;
+[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] => @"E114 ;
+[INVERTED QUESTION MARK] => @"00BE ;
+[LATIN SMALL LETTER SHARP S] => @"00FF ;
+[LATIN SMALL LETTER Y WITH DIAERESIS] => @"B8 ;
+[LATIN CAPITAL LETTER A WITH BREVE] => @"80 ;
+[LATIN SMALL LETTER A WITH BREVE] => @"A0 ;
+[LATIN CAPITAL LETTER A WITH OGONEK] => @"81 ;
+[LATIN SMALL LETTER A WITH OGONEK] => @"A1 ;
+[LATIN CAPITAL LETTER C WITH ACUTE] => @"82 ;
+[LATIN SMALL LETTER C WITH ACUTE] => @"A2 ;
+[LATIN CAPITAL LETTER C WITH CARON] => @"83 ;
+[LATIN SMALL LETTER C WITH CARON] => @"A3 ;
+[LATIN CAPITAL LETTER D WITH CARON] => @"84 ;
+[LATIN SMALL LETTER D WITH CARON] => @"A4 ;
+[LATIN CAPITAL LETTER E WITH OGONEK] => @"86 ;
+[LATIN SMALL LETTER E WITH OGONEK] => @"A6 ;
+[LATIN CAPITAL LETTER E WITH CARON] => @"85 ;
+[LATIN SMALL LETTER E WITH CARON] => @"A5 ;
+[LATIN CAPITAL LETTER G WITH BREVE] => @"87 ;
+[LATIN SMALL LETTER G WITH BREVE] => @"A7 ;
+[LATIN CAPITAL LETTER I WITH DOT ABOVE] => @"9D ;
+[LATIN SMALL LETTER DOTLESS I] => @"E119 ;
+[LATIN CAPITAL LIGATURE IJ] => @"009C ;
+[LATIN SMALL LIGATURE IJ] => @"00BC ;
+[LATIN CAPITAL LETTER L WITH ACUTE] => @"88 ;
+[LATIN SMALL LETTER L WITH ACUTE] => @"A8 ;
+[LATIN CAPITAL LETTER L WITH CARON] => @"89 ;
+[LATIN SMALL LETTER L WITH CARON] => @"A9 ;
+[LATIN CAPITAL LETTER L WITH STROKE] => @"008A ;
+[LATIN SMALL LETTER L WITH STROKE] => @"00AA ;
+[LATIN CAPITAL LETTER N WITH ACUTE] => @"8B ;
+[LATIN SMALL LETTER N WITH ACUTE] => @"AB ;
+[LATIN CAPITAL LETTER N WITH CARON] => @"8C ;
+[LATIN SMALL LETTER N WITH CARON] => @"AC ;
+[LATIN CAPITAL LETTER ENG] => @"008D ;
+[LATIN SMALL LETTER ENG] => @"00AD ;
+[LATIN CAPITAL LETTER O WITH DOUBLE ACUTE] => @"8E ;
+[LATIN SMALL LETTER O WITH DOUBLE ACUTE] => @"AE ;
+[LATIN CAPITAL LIGATURE OE] => @"00D7 ;
+[LATIN SMALL LIGATURE OE] => @"00F7 ;
+[LATIN CAPITAL LETTER R WITH ACUTE] => @"8F ;
+[LATIN SMALL LETTER R WITH ACUTE] => @"AF ;
+[LATIN CAPITAL LETTER R WITH CARON] => @"90 ;
+[LATIN SMALL LETTER R WITH CARON] => @"B0 ;
+[LATIN CAPITAL LETTER S WITH ACUTE] => @"91 ;
+[LATIN SMALL LETTER S WITH ACUTE] => @"B1 ;
+[LATIN CAPITAL LETTER S WITH CEDILLA] => @"93 ;
+[LATIN SMALL LETTER S WITH CEDILLA] => @"B3 ;
+[LATIN CAPITAL LETTER S WITH CARON] => @"92 ;
+[LATIN SMALL LETTER S WITH CARON] => @"B2 ;
+[LATIN CAPITAL LETTER T WITH CEDILLA] => @"95 ;
+[LATIN SMALL LETTER T WITH CEDILLA] => @"B5 ;
+[LATIN CAPITAL LETTER T WITH CARON] => @"94 ;
+[LATIN CAPITAL LETTER U WITH RING ABOVE] => @"97 ;
+[LATIN SMALL LETTER U WITH RING ABOVE] => @"B7 ;
+[LATIN CAPITAL LETTER U WITH DOUBLE ACUTE] => @"96 ;
+[LATIN SMALL LETTER U WITH DOUBLE ACUTE] => @"B6 ;
+[LATIN CAPITAL LETTER Y WITH DIAERESIS] => @"98 ;
+[LATIN CAPITAL LETTER Z WITH ACUTE] => @"99 ;
+[LATIN SMALL LETTER Z WITH ACUTE] => @"B9 ;
+[LATIN CAPITAL LETTER Z WITH DOT ABOVE] => @"9B ;
+[LATIN SMALL LETTER Z WITH DOT ABOVE] => @"BB ;
+[LATIN CAPITAL LETTER Z WITH CARON] => @"9A ;
+[LATIN SMALL LETTER Z WITH CARON] => @"BA ;
+@"0237 => @"E11A ;
+[HYPHEN] => @"007F ;
+[EN DASH] => @"E115 ;
+[EM DASH] => @"E116 ;
+[LEFT SINGLE QUOTATION MARK] => @"0060 ;
+[RIGHT SINGLE QUOTATION MARK] => @"0027 ;
+[SINGLE LOW-9 QUOTATION MARK] => @"E10D ;
+[LEFT DOUBLE QUOTATION MARK] => @"E110 ;
+[RIGHT DOUBLE QUOTATION MARK] => @"E111 ;
+[DOUBLE LOW-9 QUOTATION MARK] => @"E112 ;
+[SINGLE LEFT-POINTING ANGLE QUOTATION MARK] => @"E10E ;
+[SINGLE RIGHT-POINTING ANGLE QUOTATION MARK] => @"E10F ;
+[OPEN BOX] => @"0020 ;
+[LATIN SMALL LIGATURE FF] => @"E11B ;
+[LATIN SMALL LIGATURE FI] => @"E11C ;
+[LATIN SMALL LIGATURE FL] => @"E11D ;
+[LATIN SMALL LIGATURE FFI] => @"E11E ;
+[LATIN SMALL LIGATURE FFL] => @"E11F ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+[APOSTROPHE] => "\UseMemTextSymbol{TS1}{39}";
+[CENT SIGN] => "\UseMemTextSymbol{TS1}{162}";
+[CURRENCY SIGN] => "\UseMemTextSymbol{TS1}{164}";
+[YEN SIGN] => "\UseMemTextSymbol{TS1}{165}";
+[BROKEN BAR] => "\UseMemTextSymbol{TS1}{166}";
+[COPYRIGHT SIGN] => "\UseMemTextSymbol{TS1}{169}";
+[FEMININE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{170}";
+[NOT SIGN] => "\UseMemTextSymbol{TS1}{172}";
+[REGISTERED SIGN] => "\UseMemTextSymbol{TS1}{174}";
+[DEGREE SIGN] => "\UseMemTextSymbol{TS1}{176}";
+[PLUS-MINUS SIGN] => "\UseMemTextSymbol{TS1}{177}";
+[SUPERSCRIPT TWO] => "\UseMemTextSymbol{TS1}{178}";
+[SUPERSCRIPT THREE] => "\UseMemTextSymbol{TS1}{179}";
+[MICRO SIGN] => "\UseMemTextSymbol{TS1}{181}";
+[PILCROW SIGN] => "\UseMemTextSymbol{TS1}{182}";
+[MIDDLE DOT] => "\UseMemTextSymbol{TS1}{183}";
+[SUPERSCRIPT ONE] => "\UseMemTextSymbol{TS1}{185}";
+[MASCULINE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{186}";
+[VULGAR FRACTION ONE QUARTER] => "\UseMemTextSymbol{TS1}{188}";
+[VULGAR FRACTION ONE HALF] => "\UseMemTextSymbol{TS1}{189}";
+[VULGAR FRACTION THREE QUARTERS] => "\UseMemTextSymbol{TS1}{190}";
+[MULTIPLICATION SIGN] => "\UseMemTextSymbol{TS1}{215}";
+[DIVISION SIGN] => "\UseMemTextSymbol{TS1}{247}";
+[LATIN SMALL LETTER F WITH HOOK] => "\UseMemTextSymbol{TS1}{140}";
+[DAGGER] => "\UseMemTextSymbol{TS1}{132}";
+[DOUBLE DAGGER] => "\UseMemTextSymbol{TS1}{133}";
+[BULLET] => "\UseMemTextSymbol{TS1}{136}";
+[PER MILLE SIGN] => "\UseMemTextSymbol{TS1}{135}";
+[FRACTION SLASH] => "\UseMemTextSymbol{TS1}{47}";
+[COLON SIGN] => "\UseMemTextSymbol{TS1}{141}";
+[LIRA SIGN] => "\UseMemTextSymbol{TS1}{146}";
+[DONG SIGN] => "\UseMemTextSymbol{TS1}{150}";
+[EURO SIGN] => "\UseMemTextSymbol{TS1}{191}";
+[NUMERO SIGN] => "\UseMemTextSymbol{TS1}{155}";
+[TRADE MARK SIGN] => "\UseMemTextSymbol{TS1}{151}";
+[OHM SIGN] => "\UseMemTextSymbol{TS1}{87}";
+[ESTIMATED SYMBOL] => "\UseMemTextSymbol{TS1}{157}";
+[LEFTWARDS ARROW] => "\UseMemTextSymbol{TS1}{24}";
+[UPWARDS ARROW] => "\UseMemTextSymbol{TS1}{94}";
+[RIGHTWARDS ARROW] => "\UseMemTextSymbol{TS1}{25}";
+[DOWNWARDS ARROW] => "\UseMemTextSymbol{TS1}{95}";
+[MINUS SIGN] => "\UseMemTextSymbol{TS1}{61}";
+[ASTERISK OPERATOR] => "\UseMemTextSymbol{TS1}{42}";
+[SQUARE ROOT] => "\UseMemTextSymbol{TS1}{187}";
+[LEFT-POINTING ANGLE BRACKET] => "\UseMemTextSymbol{TS1}{60}";
+[RIGHT-POINTING ANGLE BRACKET] => "\UseMemTextSymbol{TS1}{62}";
+[WHITE CIRCLE] => "\UseMemTextSymbol{TS1}{79}";
+[WHITE BULLET] => "\UseMemTextSymbol{TS1}{158}";
+[EIGHTH NOTE] => "\UseMemTextSymbol{TS1}{110}";
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"0026|@"0028-@"005F|@"0061-@"007E|@"00C0-@"00D6|@"00D8-@"00DE|@"00E0-@"00F6|@"00F8-@"00FE|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/t2a-com.mtp b/macros/latex/exptl/mem/Mtp/t2a-com.mtp
new file mode 100644
index 0000000000..1be9be92d3
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/t2a-com.mtp
@@ -0,0 +1,71 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING GRAVE ACCENT] => "\UseMemAccent{t}{0}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{u}{0}";
+<acc>[COMBINING ACUTE ACCENT] => "\UseMemAccent{t}{1}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{u}{1}";
+<acc>[COMBINING CIRCUMFLEX ACCENT] => "\UseMemAccent{t}{2}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{u}{2}";
+<acc>[COMBINING TILDE] => "\UseMemAccent{t}{3}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{u}{3}";
+<acc>[COMBINING MACRON] => "\UseMemAccent{t}{9}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{u}{9}";
+<acc>[COMBINING BREVE] => "\UseMemAccent{t}{8}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{u}{8}";
+<acc>[COMBINING DOT ABOVE] => "\UseMemAccent{t}{10}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{u}{10}";
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{4}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{4}";
+<acc>[COMBINING RING ABOVE] => "\UseMemAccent{t}{6}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{u}{6}";
+<acc>[COMBINING DOUBLE ACUTE ACCENT] => "\UseMemAccent{t}{5}";
+<acc>[COMBINING CARON] => "\UseMemAccent{t}{7}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{u}{7}";
+<acc>[COMBINING CEDILLA] => "\UseMemAccent{c}{11}";
+<acc>[COMBINING OGONEK] => "\UseMemAccent{k}{12}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"0026|@"0028-@"005F|@"0061-@"007E) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/t2a-dec.mtp b/macros/latex/exptl/mem/Mtp/t2a-dec.mtp
new file mode 100644
index 0000000000..bf49df799e
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/t2a-dec.mtp
@@ -0,0 +1,133 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER IE WITH GRAVE]
+ => <= [CYRILLIC CAPITAL LETTER IE][COMBINING GRAVE ACCENT];
+[CYRILLIC CAPITAL LETTER IO]
+ => <= [CYRILLIC CAPITAL LETTER IE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER GJE]
+ => <= [CYRILLIC CAPITAL LETTER GHE][COMBINING ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER YI]
+ => <= [CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER KJE]
+ => <= [CYRILLIC CAPITAL LETTER KA][COMBINING ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER I WITH GRAVE]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING GRAVE ACCENT];
+[CYRILLIC CAPITAL LETTER SHORT U]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER SHORT I]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING BREVE];
+[CYRILLIC SMALL LETTER SHORT I]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING BREVE];
+[CYRILLIC SMALL LETTER IE WITH GRAVE]
+ => <= [CYRILLIC SMALL LETTER IE][COMBINING GRAVE ACCENT];
+[CYRILLIC SMALL LETTER IO]
+ => <= [CYRILLIC SMALL LETTER IE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER GJE]
+ => <= [CYRILLIC SMALL LETTER GHE][COMBINING ACUTE ACCENT];
+[CYRILLIC SMALL LETTER YI]
+ => <= [CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER KJE]
+ => <= [CYRILLIC SMALL LETTER KA][COMBINING ACUTE ACCENT];
+[CYRILLIC SMALL LETTER I WITH GRAVE]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING GRAVE ACCENT];
+[CYRILLIC SMALL LETTER SHORT U]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT]
+ => <= [CYRILLIC CAPITAL LETTER IZHITSA][COMBINING DOUBLE GRAVE ACCENT];
+[CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT]
+ => <= [CYRILLIC SMALL LETTER IZHITSA][COMBINING DOUBLE GRAVE ACCENT];
+[CYRILLIC CAPITAL LETTER ZHE WITH BREVE]
+ => <= [CYRILLIC CAPITAL LETTER ZHE][COMBINING BREVE];
+[CYRILLIC SMALL LETTER ZHE WITH BREVE]
+ => <= [CYRILLIC SMALL LETTER ZHE][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER A WITH BREVE]
+ => <= [CYRILLIC CAPITAL LETTER A][COMBINING BREVE];
+[CYRILLIC SMALL LETTER A WITH BREVE]
+ => <= [CYRILLIC SMALL LETTER A][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER A WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER A][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER A WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER A][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER IE WITH BREVE]
+ => <= [CYRILLIC CAPITAL LETTER IE][COMBINING BREVE];
+[CYRILLIC SMALL LETTER IE WITH BREVE]
+ => <= [CYRILLIC SMALL LETTER IE][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER SCHWA][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER SCHWA][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER ZHE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER ZHE WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER ZHE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER ZE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER ZE WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER ZE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER I WITH MACRON]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING MACRON];
+[CYRILLIC SMALL LETTER I WITH MACRON]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING MACRON];
+[CYRILLIC CAPITAL LETTER I WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER I WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER O WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER O][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER O WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER O][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER BARRED O][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER BARRED O][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER E WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER E][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER E WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER E][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER U WITH MACRON]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING MACRON];
+[CYRILLIC SMALL LETTER U WITH MACRON]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING MACRON];
+[CYRILLIC CAPITAL LETTER U WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER U WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER CHE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER CHE WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER CHE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER YERU][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER YERU WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER YERU][COMBINING DIAERESIS];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
+[OHM SIGN]
+ => <= [GREEK CAPITAL LETTER OMEGA];
+[LEFT-POINTING ANGLE BRACKET]
+ => <= [LEFT ANGLE BRACKET];
+[RIGHT-POINTING ANGLE BRACKET]
+ => <= [RIGHT ANGLE BRACKET];
diff --git a/macros/latex/exptl/mem/Mtp/t2a-rec.mtp b/macros/latex/exptl/mem/Mtp/t2a-rec.mtp
new file mode 100644
index 0000000000..22fdd0b3c5
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/t2a-rec.mtp
@@ -0,0 +1,226 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+[CYRILLIC CAPITAL LETTER IE][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER IO] ;
+[CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER YI] ;
+[CYRILLIC CAPITAL LETTER U][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER SHORT U] ;
+[CYRILLIC CAPITAL LETTER I][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER SHORT I] ;
+[CYRILLIC SMALL LETTER I][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER SHORT I] ;
+[CYRILLIC SMALL LETTER IE][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER IO] ;
+[CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER YI] ;
+[CYRILLIC SMALL LETTER U][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER SHORT U] ;
+
+
+% Unicode to main font, except those below
+
+
+[CURRENCY SIGN] => @"009E ;
+[SECTION SIGN] => @"009F ;
+[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] => @"00BE ;
+[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] => @"00BF ;
+[LATIN SMALL LETTER DOTLESS I] => @"E119 ;
+[CYRILLIC CAPITAL LETTER IO] => @"9C ;
+[CYRILLIC CAPITAL LETTER DJE] => @"0082 ;
+[CYRILLIC CAPITAL LETTER UKRAINIAN IE] => @"0099 ;
+[CYRILLIC CAPITAL LETTER DZE] => @"008F ;
+[CYRILLIC CAPITAL LETTER YI] => @"88 ;
+[CYRILLIC CAPITAL LETTER LJE] => @"0087 ;
+[CYRILLIC CAPITAL LETTER NJE] => @"009B ;
+[CYRILLIC CAPITAL LETTER TSHE] => @"0083 ;
+[CYRILLIC CAPITAL LETTER SHORT U] => @"92 ;
+[CYRILLIC CAPITAL LETTER DZHE] => @"0096 ;
+[CYRILLIC CAPITAL LETTER A] => @"00C0 ;
+[CYRILLIC CAPITAL LETTER BE] => @"00C1 ;
+[CYRILLIC CAPITAL LETTER VE] => @"00C2 ;
+[CYRILLIC CAPITAL LETTER GHE] => @"00C3 ;
+[CYRILLIC CAPITAL LETTER DE] => @"00C4 ;
+[CYRILLIC CAPITAL LETTER IE] => @"00C5 ;
+[CYRILLIC CAPITAL LETTER ZHE] => @"00C6 ;
+[CYRILLIC CAPITAL LETTER ZE] => @"00C7 ;
+[CYRILLIC CAPITAL LETTER I] => @"00C8 ;
+[CYRILLIC CAPITAL LETTER SHORT I] => @"C9 ;
+[CYRILLIC CAPITAL LETTER KA] => @"00CA ;
+[CYRILLIC CAPITAL LETTER EL] => @"00CB ;
+[CYRILLIC CAPITAL LETTER EM] => @"00CC ;
+[CYRILLIC CAPITAL LETTER EN] => @"00CD ;
+[CYRILLIC CAPITAL LETTER O] => @"00CE ;
+[CYRILLIC CAPITAL LETTER PE] => @"00CF ;
+[CYRILLIC CAPITAL LETTER ER] => @"00D0 ;
+[CYRILLIC CAPITAL LETTER ES] => @"00D1 ;
+[CYRILLIC CAPITAL LETTER TE] => @"00D2 ;
+[CYRILLIC CAPITAL LETTER U] => @"00D3 ;
+[CYRILLIC CAPITAL LETTER EF] => @"00D4 ;
+[CYRILLIC CAPITAL LETTER HA] => @"00D5 ;
+[CYRILLIC CAPITAL LETTER TSE] => @"00D6 ;
+[CYRILLIC CAPITAL LETTER CHE] => @"00D7 ;
+[CYRILLIC CAPITAL LETTER SHA] => @"00D8 ;
+[CYRILLIC CAPITAL LETTER SHCHA] => @"00D9 ;
+[CYRILLIC CAPITAL LETTER HARD SIGN] => @"00DA ;
+[CYRILLIC CAPITAL LETTER YERU] => @"00DB ;
+[CYRILLIC CAPITAL LETTER SOFT SIGN] => @"00DC ;
+[CYRILLIC CAPITAL LETTER E] => @"00DD ;
+[CYRILLIC CAPITAL LETTER YU] => @"00DE ;
+[CYRILLIC CAPITAL LETTER YA] => @"00DF ;
+[CYRILLIC SMALL LETTER A] => @"00E0 ;
+[CYRILLIC SMALL LETTER BE] => @"00E1 ;
+[CYRILLIC SMALL LETTER VE] => @"00E2 ;
+[CYRILLIC SMALL LETTER GHE] => @"00E3 ;
+[CYRILLIC SMALL LETTER DE] => @"00E4 ;
+[CYRILLIC SMALL LETTER IE] => @"00E5 ;
+[CYRILLIC SMALL LETTER ZHE] => @"00E6 ;
+[CYRILLIC SMALL LETTER ZE] => @"00E7 ;
+[CYRILLIC SMALL LETTER I] => @"00E8 ;
+[CYRILLIC SMALL LETTER SHORT I] => @"E9 ;
+[CYRILLIC SMALL LETTER KA] => @"00EA ;
+[CYRILLIC SMALL LETTER EL] => @"00EB ;
+[CYRILLIC SMALL LETTER EM] => @"00EC ;
+[CYRILLIC SMALL LETTER EN] => @"00ED ;
+[CYRILLIC SMALL LETTER O] => @"00EE ;
+[CYRILLIC SMALL LETTER PE] => @"00EF ;
+[CYRILLIC SMALL LETTER ER] => @"00F0 ;
+[CYRILLIC SMALL LETTER ES] => @"00F1 ;
+[CYRILLIC SMALL LETTER TE] => @"00F2 ;
+[CYRILLIC SMALL LETTER U] => @"00F3 ;
+[CYRILLIC SMALL LETTER EF] => @"00F4 ;
+[CYRILLIC SMALL LETTER HA] => @"00F5 ;
+[CYRILLIC SMALL LETTER TSE] => @"00F6 ;
+[CYRILLIC SMALL LETTER CHE] => @"00F7 ;
+[CYRILLIC SMALL LETTER SHA] => @"00F8 ;
+[CYRILLIC SMALL LETTER SHCHA] => @"00F9 ;
+[CYRILLIC SMALL LETTER HARD SIGN] => @"00FA ;
+[CYRILLIC SMALL LETTER YERU] => @"00FB ;
+[CYRILLIC SMALL LETTER SOFT SIGN] => @"00FC ;
+[CYRILLIC SMALL LETTER E] => @"00FD ;
+[CYRILLIC SMALL LETTER YU] => @"00FE ;
+[CYRILLIC SMALL LETTER YA] => @"00FF ;
+[CYRILLIC SMALL LETTER IO] => @"BC ;
+[CYRILLIC SMALL LETTER DJE] => @"00A2 ;
+[CYRILLIC SMALL LETTER UKRAINIAN IE] => @"00B9 ;
+[CYRILLIC SMALL LETTER DZE] => @"00AF ;
+[CYRILLIC SMALL LETTER YI] => @"A8 ;
+[CYRILLIC SMALL LETTER LJE] => @"00A7 ;
+[CYRILLIC SMALL LETTER NJE] => @"00BB ;
+[CYRILLIC SMALL LETTER TSHE] => @"00A3 ;
+[CYRILLIC SMALL LETTER SHORT U] => @"B2 ;
+[CYRILLIC SMALL LETTER DZHE] => @"00B6 ;
+[CYRILLIC CAPITAL LETTER GHE WITH UPTURN] => @"0080 ;
+[CYRILLIC SMALL LETTER GHE WITH UPTURN] => @"00A0 ;
+[CYRILLIC SMALL LETTER SCHWA] => @"00BA ;
+[HYPHEN] => @"007F ;
+[EN DASH] => @"E115 ;
+[EM DASH] => @"E116 ;
+[LEFT SINGLE QUOTATION MARK] => @"0060 ;
+[RIGHT SINGLE QUOTATION MARK] => @"0027 ;
+[LEFT DOUBLE QUOTATION MARK] => @"E110 ;
+[RIGHT DOUBLE QUOTATION MARK] => @"E111 ;
+[DOUBLE LOW-9 QUOTATION MARK] => @"00BD ;
+[NUMERO SIGN] => @"009D ;
+[LEFT ANGLE BRACKET] => @"E10E ;
+[RIGHT ANGLE BRACKET] => @"E10F ;
+[LATIN SMALL LIGATURE FF] => @"E11B ;
+[LATIN SMALL LIGATURE FI] => @"E11C ;
+[LATIN SMALL LIGATURE FL] => @"E11D ;
+[LATIN SMALL LIGATURE FFI] => @"E11E ;
+[LATIN SMALL LIGATURE FFL] => @"E11F ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+[APOSTROPHE] => "\UseMemTextSymbol{TS1}{39}";
+[CENT SIGN] => "\UseMemTextSymbol{TS1}{162}";
+[POUND SIGN] => "\UseMemTextSymbol{TS1}{163}";
+[YEN SIGN] => "\UseMemTextSymbol{TS1}{165}";
+[BROKEN BAR] => "\UseMemTextSymbol{TS1}{166}";
+[COPYRIGHT SIGN] => "\UseMemTextSymbol{TS1}{169}";
+[FEMININE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{170}";
+[NOT SIGN] => "\UseMemTextSymbol{TS1}{172}";
+[REGISTERED SIGN] => "\UseMemTextSymbol{TS1}{174}";
+[DEGREE SIGN] => "\UseMemTextSymbol{TS1}{176}";
+[PLUS-MINUS SIGN] => "\UseMemTextSymbol{TS1}{177}";
+[SUPERSCRIPT TWO] => "\UseMemTextSymbol{TS1}{178}";
+[SUPERSCRIPT THREE] => "\UseMemTextSymbol{TS1}{179}";
+[MICRO SIGN] => "\UseMemTextSymbol{TS1}{181}";
+[PILCROW SIGN] => "\UseMemTextSymbol{TS1}{182}";
+[MIDDLE DOT] => "\UseMemTextSymbol{TS1}{183}";
+[SUPERSCRIPT ONE] => "\UseMemTextSymbol{TS1}{185}";
+[MASCULINE ORDINAL INDICATOR] => "\UseMemTextSymbol{TS1}{186}";
+[VULGAR FRACTION ONE QUARTER] => "\UseMemTextSymbol{TS1}{188}";
+[VULGAR FRACTION ONE HALF] => "\UseMemTextSymbol{TS1}{189}";
+[VULGAR FRACTION THREE QUARTERS] => "\UseMemTextSymbol{TS1}{190}";
+[MULTIPLICATION SIGN] => "\UseMemTextSymbol{TS1}{215}";
+[DIVISION SIGN] => "\UseMemTextSymbol{TS1}{247}";
+[LATIN SMALL LETTER F WITH HOOK] => "\UseMemTextSymbol{TS1}{140}";
+[DAGGER] => "\UseMemTextSymbol{TS1}{132}";
+[DOUBLE DAGGER] => "\UseMemTextSymbol{TS1}{133}";
+[BULLET] => "\UseMemTextSymbol{TS1}{136}";
+[PER MILLE SIGN] => "\UseMemTextSymbol{TS1}{135}";
+[FRACTION SLASH] => "\UseMemTextSymbol{TS1}{47}";
+[COLON SIGN] => "\UseMemTextSymbol{TS1}{141}";
+[LIRA SIGN] => "\UseMemTextSymbol{TS1}{146}";
+[DONG SIGN] => "\UseMemTextSymbol{TS1}{150}";
+[EURO SIGN] => "\UseMemTextSymbol{TS1}{191}";
+[TRADE MARK SIGN] => "\UseMemTextSymbol{TS1}{151}";
+[OHM SIGN] => "\UseMemTextSymbol{TS1}{87}";
+[ESTIMATED SYMBOL] => "\UseMemTextSymbol{TS1}{157}";
+[LEFTWARDS ARROW] => "\UseMemTextSymbol{TS1}{24}";
+[UPWARDS ARROW] => "\UseMemTextSymbol{TS1}{94}";
+[RIGHTWARDS ARROW] => "\UseMemTextSymbol{TS1}{25}";
+[DOWNWARDS ARROW] => "\UseMemTextSymbol{TS1}{95}";
+[MINUS SIGN] => "\UseMemTextSymbol{TS1}{61}";
+[ASTERISK OPERATOR] => "\UseMemTextSymbol{TS1}{42}";
+[SQUARE ROOT] => "\UseMemTextSymbol{TS1}{187}";
+[WHITE CIRCLE] => "\UseMemTextSymbol{TS1}{79}";
+[WHITE BULLET] => "\UseMemTextSymbol{TS1}{158}";
+[EIGHTH NOTE] => "\UseMemTextSymbol{TS1}{110}";
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"0026|@"0028-@"005F|@"0061-@"007E|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/ucnoacc.mtp b/macros/latex/exptl/mem/Mtp/ucnoacc.mtp
new file mode 100644
index 0000000000..b30b52d470
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ucnoacc.mtp
@@ -0,0 +1,254 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file belongs to an alpha-release of Omega-Babel,
+% which is part of the
+%
+% #### # # ###### #### ##
+% # # ## ## # # # # #
+% # # # ## # ##### # # #
+% # # # # # # ### ######
+% # # # # # # # # #
+% #### # # ###### #### # # Project,
+%
+% (c) John Plaice and Yannis Haralambous, 1994-95
+%
+% plaice@ift.ulaval.ca
+% haralambous@univ-lille1.fr, http://www.ens.fr/~yannis
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Date of the release: 1995-11-27
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+input: 2;
+
+output: 2;
+
+expressions:
+
+% Latin
+
+@"0020 - @"0060 => \1 ;
+@"0061 - @"007a => #(\1 - 32) ;
+@"007b - @"00de => \1 ;
+
+@"00c0-@"00c5 => "A" ;
+@"00c8-@"00cb => "E" ;
+@"00cc-@"00cf => "I" ;
+@"00d0 => "D" ;
+@"00d1 => "N" ;
+@"00d2-@"00d6 => "O" ;
+@"00d9-@"00dc => "U" ;
+@"00dd => "Y" ;
+@"00df => "SS" ; %uppercase German sz
+
+@"00e0-@"00e5 => "A" ;
+@"00e6 => @"00c6 ;
+@"00e8-@"00eb => "E" ;
+@"00ec-@"00ef => "I" ;
+@"00f0 => "D" ;
+@"00f1 => "N" ;
+@"00f2-@"00f6 => "O" ;
+@"00f8 => @"00d8 ;
+@"00f9-@"00fc => "U" ;
+@"00fd => "Y" ;
+@"00ff => "Y" ;
+
+@"0081 => "SZ" ; %special German sz
+@"0082 => @"0130 ; %Turkish i with dot
+@"0087 => "J" ; %dotless j
+@"0100 - @"012f => #(\1 - (\1 mod: 2)) ;
+@"0130 => \1 ;
+@"0131 => "I" ; %uppercase Turkish dotless i
+@"0132 - @"0137 => #(\1 - (\1 mod: 2)) ;
+@"0138 => "K" ; %uppercase kra
+@"0139 - @"0148 => #(\1 - 1 + (\1 mod: 2)) ;
+@"0149 => "'N" ; %uppercase Afrikaans 'n
+@"014a - @"0177 => #(\1 - (\1 mod: 2)) ;
+@"0178 => \1 ; %\"Y
+@"0179 - @"017e => #(\1 - 1 + (\1 mod: 2)) ;
+@"017f => "S" ; %uppercase long s
+@"0180 - @"01c3 => \1 ; %to be treated later on (African stuff)
+@"01c4 - @"01c6 => @"01c4 ;
+@"01c7 - @"01c9 => @"01c7 ;
+@"01ca - @"01cc => @"01ca ;
+@"01cd - @"01dc => #(\1 - 1 + (\1 mod: 2)) ;
+@"01dd => @"018e ;
+@"01de - @"01ef => #(\1 - (\1 mod: 2)) ;
+@"01f0 => @"e18f ;
+@"01f1 - @"01f3 => @"01f1 ;
+@"01f4 - @"0217 => #(\1 - (\1 mod: 2)) ;
+@"0250 - @"0385 => \1 ; %Phonetic and other stuff
+
+% Greek!
+
+@"0386 => @"0391 ;
+@"0388 => @"0395 ;
+@"0389 => @"0397 ;
+@"038a => @"0399 ;
+@"038c => @"039f ;
+@"038e => @"03a5 ;
+@"038f => @"03a9 ;
+@"0390 => @"03aa ; %kefalaio iota me dialutika kai toniko shmeio
+@"0391 - @"03ab => \1 ;
+@"03ac @"03b9 => @"0391 @"03aa ; % 'ai -> A"I
+@"03ac @"03c5 => @"0391 @"03ab ; % 'au -> A"U
+@"1f71 @"03b9 => @"0391 @"03aa ; % 'ai -> A"I
+@"1f71 @"03c5 => @"0391 @"03ab ; % 'au -> A"U
+@"03ac => @"0391 ;
+@"03ad @"03b9 => @"0395 @"03aa ; % 'ei -> E"I
+@"03ad @"03c5 => @"0395 @"03ab ; % 'eu -> E"U
+@"1f73 @"03b9 => @"0395 @"03aa ; % 'ei -> E"I
+@"1f73 @"03c5 => @"0395 @"03ab ; % 'eu -> E"U
+@"03ad => @"0395 ;
+@"03ae @"03c5 => @"0397 @"03ab ; % 'hu -> H"U
+@"1f75 @"03c5 => @"0397 @"03ab ; % 'hu -> H"U
+@"03ae => @"0397 ;
+@"03af => @"0399 ;
+@"03b0 => @"03ab ; %kefalaio uyilon me dialutika kai toniko shmeio
+@"03b1 - @"03c1 => #(\1 - 32) ;
+@"03c2 => @"03a3 ; %kefalaio teliko sigma
+@"03c3 - @"03cb => #(\1 - 32) ;
+@"03cc @"03b9 => @"039f @"03aa ; % 'oi -> O"I
+@"03cc @"03c5 => @"039f @"03ab ; % 'ou -> O"U
+@"1f79 @"03b9 => @"039f @"03aa ; % 'oi -> O"I
+@"1f79 @"03c5 => @"039f @"03ab ; % 'ou -> O"U
+@"03cc => @"039f ;
+@"03cd => @"03a5 ;
+@"03ce => @"03a9 ;
+@"03d0 => @"0392 ; %kefalaio arqiko bhta
+@"03d1 => @"0398 ; %kefalaio anoikto jhta
+@"03d2 => @"03d2 ;
+@"03d3 => @"03d3 ;
+@"03d4 => @"03d4 ;
+@"03d5 => @"03a6 ; %kefalaio anoikto fi
+@"03d6 => @"03a0 ; %kefalaio stroggulo pi (opws to majainame sto dhmotiko)
+@"03d7 => @"039a @"0391 @"0399 ; %kai
+@"03da - @"03ef => #(\1 - (\1 mod: 2)) ;
+@"03f0 => @"039a ; %kefalaio kalligrafiko kappa
+@"03f1 => @"03a1 ; %kefalaio ro me kampulh oura
+@"03f2 => "C" ; %kefalaio sigma pou moiazei me c
+@"03f3 => "J" ; %kefalaio jot
+
+% Cyrillic!
+
+@"0401 - @"042f => \1 ;
+@"0430 - @"044f => #(\1 - 32) ;
+@"0451 - @"045f => #(\1 - 80) ;
+@"0460 - @"04bf => #(\1 - (\1 mod: 2)) ;
+@"04c0 => \1 ;
+@"04c1 - @"04cc => #(\1 - 1 + (\1 mod: 2)) ;
+@"04d0 - @"04f9 => #(\1 - (\1 mod: 2)) ;
+
+% Armenian!
+
+@"0531 - @"0556 => \1 ;
+@"0561 - @"0586 => #(\1 - 48) ;
+@"0587 => @"e1cb ; %uppercase ligature ech yiwn
+
+% Additional Latin
+
+@"1e00 - @"1e95 => #(\1 - (\1 mod: 2)) ;
+@"1e96 - @"1e9a => #(\1 + @"c1f2) ;
+@"1ea0 - @"1ef9 => #(\1 - (\1 mod: 2)) ;
+
+% Real Greek! (the one with accents and spirits)
+
+@"1f00 - @"1f0f => @"0391 ;
+@"1f10 - @"1f1f => @"0395 ;
+@"1f20 - @"1f2f => @"0397 ;
+@"1f30 - @"1f3f => @"0399 ;
+@"1f40 - @"1f4f => @"039f ;
+@"1f50 - @"1f5f => @"03a5 ;
+@"1f60 - @"1f6f => @"03a9 ;
+@"1f70 => @"0391 ;
+@"1f71 => @"0391 ;
+@"1f72 => @"0395 ;
+@"1f73 => @"0395 ;
+@"1f74 => @"0397 ;
+@"1f75 => @"0397 ;
+@"1f76 => @"0399 ;
+@"1f77 => @"0399 ;
+@"1f78 => @"039f ;
+@"1f79 => @"039f ;
+@"1f7a => @"03a5 ;
+@"1f7b => @"03a5 ;
+@"1f7c => @"03a9 ;
+@"1f7d => @"03a9 ;
+@"1f80 - @"1f8f => @"0391 ;
+@"1f90 - @"1f9f => @"0397 ;
+@"1fa0 - @"1faf => @"03a9 ;
+@"1fb0 => @"1fb8 ;
+@"1fb1 => @"1fb9 ;
+@"1fb2 - @"1fb4 => @"0391 ;
+@"1fba - @"1fbc => @"0391 ;
+@"1fc2 - @"1fc7 => @"0397 ;
+@"1fc8 => @"0395 ;
+@"1fc9 => @"0395 ;
+@"1fca - @"1fcc => @"0397 ;
+@"1fd0 => @"1fd8 ;
+@"1fd1 => @"1fd9 ;
+@"1fd2 => @"03aa ;
+@"1fd3 => @"03aa ;
+@"1fd6 => @"0399 ;
+@"1fd7 => @"03aa ;
+@"1fda => @"0399 ;
+@"1fdb => @"0399 ;
+@"1fe0 => @"1fe8 ;
+@"1fe1 => @"1fe9 ;
+@"1fe2 => @"03ab ;
+@"1fe3 => @"03ab ;
+@"1fe4 => @"03a1 ;
+@"1fe5 => @"03a1 ;
+@"1fe6 => @"03a5 ;
+@"1fe7 => @"03ab ;
+@"1fea => @"03a5 ;
+@"1feb => @"03a5 ;
+@"1fec => @"03a1 ;
+@"1ff2 - @"1ff7 => @"03a9 ;
+@"1ff8 => @"039f ;
+@"1ff9 => @"039f ;
+@"1ffa - @"1ffc => @"03a9 ;
+
+% Roman numerals
+
+@"2170 - @"217f => #(\1 - 16) ;
+
+% Private zone
+
+@"e200 => "FF" ;
+@"e201 => "FI" ;
+@"e202 => "FL" ;
+@"e203 => "FFI" ;
+@"e204 => "FFL" ;
+@"e205 => "F" @"012e ;
+@"e206 => "FF" @"012e ;
+@"e207 => "F" @"0141 ;
+@"e208 => "FF" @"0141 ;
+@"e209 => "FJ" ;
+@"e20a => "FFJ" ;
+@"e20b => "F" @"0132 ;
+@"e20c => "FF" @"0132 ;
+@"e20d => "SS" ;
+@"e20e => "SI" ;
+@"e20f => "SL" ;
+@"e210 => "SSI" ;
+@"e211 => "SSL" ;
+@"e212 => "ST" ;
+@"e213 => "CT" ;
+@"e214 => @"00c4 ;
+@"e215 => @"00cb ;
+@"e216 => @"00cf ;
+@"e217 => @"00d6 ;
+@"e218 => @"00dc ;
+@"e219 => @"0178 ;
+@"e21a => \1 ;
+@"e21b => \1 ;
+@"e21c => \1 ;
+@"e21d => \1 ;
+@"e21e => \1 ;
+@"e21f => \1 ;
+
+% All others (wow, they are many of them!)
+
+. => \1 ;
diff --git a/macros/latex/exptl/mem/Mtp/ucy-com.mtp b/macros/latex/exptl/mem/Mtp/ucy-com.mtp
new file mode 100644
index 0000000000..68f2fbcf57
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ucy-com.mtp
@@ -0,0 +1,141 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING GRAVE ACCENT] => "\UseMemAccent{t}{768}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{u}{768}";
+<acc>[COMBINING ACUTE ACCENT] => "\UseMemAccent{t}{769}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{u}{769}";
+<acc>[COMBINING CIRCUMFLEX ACCENT] => "\UseMemAccent{t}{770}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{u}{770}";
+<acc>[COMBINING TILDE] => "\UseMemAccent{t}{771}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{u}{771}";
+<acc>[COMBINING MACRON] => "\UseMemAccent{t}{772}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{u}{772}";
+<acc>[COMBINING OVERLINE] => "\UseMemAccent{t}{773}";
+<acc>[COMBINING BREVE] => "\UseMemAccent{t}{774}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{u}{774}";
+<acc>[COMBINING DOT ABOVE] => "\UseMemAccent{t}{775}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{u}{775}";
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{776}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{776}";
+<acc>[COMBINING HOOK ABOVE] => "\UseMemAccent{t}{777}";
+<acc>[COMBINING RING ABOVE] => "\UseMemAccent{t}{778}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{u}{778}";
+<acc>[COMBINING DOUBLE ACUTE ACCENT] => "\UseMemAccent{t}{779}";
+<acc>[COMBINING CARON] => "\UseMemAccent{t}{780}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{u}{780}";
+<acc>[COMBINING VERTICAL LINE ABOVE] => "\UseMemAccent{t}{781}";
+<acc>[COMBINING DOUBLE VERTICAL LINE ABOVE] => "\UseMemAccent{t}{782}";
+<acc>[COMBINING DOUBLE GRAVE ACCENT] => "\UseMemAccent{t}{783}";
+<acc>[COMBINING CANDRABINDU] => "\UseMemAccent{t}{784}";
+<acc>[COMBINING INVERTED BREVE] => "\UseMemAccent{t}{785}";
+<acc>[COMBINING TURNED COMMA ABOVE] => "\UseMemAccent{t}{786}";
+<acc>[COMBINING COMMA ABOVE] => "\UseMemAccent{t}{787}";
+<acc>[COMBINING REVERSED COMMA ABOVE] => "\UseMemAccent{t}{788}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{b}{790}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{b}{791}";
+<acc>[COMBINING LEFT TACK BELOW] => "\UseMemAccent{b}{792}";
+<acc>[COMBINING RIGHT TACK BELOW] => "\UseMemAccent{b}{793}";
+<acc>[COMBINING LEFT HALF RING BELOW] => "\UseMemAccent{b}{796}";
+<acc>[COMBINING UP TACK BELOW] => "\UseMemAccent{b}{797}";
+<acc>[COMBINING DOWN TACK BELOW] => "\UseMemAccent{b}{798}";
+<acc>[COMBINING PLUS SIGN BELOW] => "\UseMemAccent{b}{799}";
+<acc>[COMBINING MINUS SIGN BELOW] => "\UseMemAccent{b}{800}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{b}{803}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{b}{804}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{b}{805}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{b}{806}";
+<acc>[COMBINING CEDILLA] => "\UseMemAccent{c}{807}";
+<acc>[COMBINING OGONEK] => "\UseMemAccent{k}{808}";
+<acc>[COMBINING VERTICAL LINE BELOW] => "\UseMemAccent{b}{809}";
+<acc>[COMBINING BRIDGE BELOW] => "\UseMemAccent{b}{810}";
+<acc>[COMBINING INVERTED DOUBLE ARCH BELOW] => "\UseMemAccent{b}{811}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{b}{812}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{b}{813}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{b}{814}";
+<acc>[COMBINING INVERTED BREVE BELOW] => "\UseMemAccent{b}{815}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{b}{816}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{b}{817}";
+<acc>[COMBINING LOW LINE] => "\UseMemAccent{b}{818}";
+<acc>[COMBINING DOUBLE LOW LINE] => "\UseMemAccent{b}{819}";
+<acc>[COMBINING RIGHT HALF RING BELOW] => "\UseMemAccent{b}{825}";
+<acc>[COMBINING INVERTED BRIDGE BELOW] => "\UseMemAccent{b}{826}";
+<acc>[COMBINING SQUARE BELOW] => "\UseMemAccent{b}{827}";
+<acc>[COMBINING SEAGULL BELOW] => "\UseMemAccent{b}{828}";
+<acc>[COMBINING X ABOVE] => "\UseMemAccent{t}{829}";
+<acc>[COMBINING VERTICAL TILDE] => "\UseMemAccent{t}{830}";
+<acc>[COMBINING DOUBLE OVERLINE] => "\UseMemAccent{t}{831}";
+<acc>[COMBINING GRAVE TONE MARK] => "\UseMemAccent{t}{832}";
+<acc>[COMBINING ACUTE TONE MARK] => "\UseMemAccent{t}{833}";
+<acc>[COMBINING GREEK PERISPOMENI] => "\UseMemAccent{t}{834}";
+<acc>[COMBINING GREEK KORONIS] => "\UseMemAccent{t}{835}";
+<acc>[COMBINING GREEK DIALYTIKA TONOS] => "\UseMemAccent{t}{836}";
+<acc>[COMBINING BRIDGE ABOVE] => "\UseMemAccent{t}{838}";
+<acc>[COMBINING EQUALS SIGN BELOW] => "\UseMemAccent{b}{839}";
+<acc>[COMBINING DOUBLE VERTICAL LINE BELOW] => "\UseMemAccent{b}{840}";
+<acc>[COMBINING LEFT ANGLE BELOW] => "\UseMemAccent{b}{841}";
+<acc>[COMBINING NOT TILDE ABOVE] => "\UseMemAccent{t}{842}";
+<acc>[COMBINING HOMOTHETIC ABOVE] => "\UseMemAccent{t}{843}";
+<acc>[COMBINING ALMOST EQUAL TO ABOVE] => "\UseMemAccent{t}{844}";
+<acc>[COMBINING LEFT RIGHT ARROW BELOW] => "\UseMemAccent{b}{845}";
+<acc>[COMBINING UPWARDS ARROW BELOW] => "\UseMemAccent{b}{846}";
+<acc>[COMBINING LATIN SMALL LETTER A] => "\UseMemAccent{t}{867}";
+<acc>[COMBINING LATIN SMALL LETTER E] => "\UseMemAccent{t}{868}";
+<acc>[COMBINING LATIN SMALL LETTER I] => "\UseMemAccent{t}{869}";
+<acc>[COMBINING LATIN SMALL LETTER O] => "\UseMemAccent{t}{870}";
+<acc>[COMBINING LATIN SMALL LETTER U] => "\UseMemAccent{t}{871}";
+<acc>[COMBINING LATIN SMALL LETTER C] => "\UseMemAccent{t}{872}";
+<acc>[COMBINING LATIN SMALL LETTER D] => "\UseMemAccent{t}{873}";
+<acc>[COMBINING LATIN SMALL LETTER H] => "\UseMemAccent{t}{874}";
+<acc>[COMBINING LATIN SMALL LETTER M] => "\UseMemAccent{t}{875}";
+<acc>[COMBINING LATIN SMALL LETTER R] => "\UseMemAccent{t}{876}";
+<acc>[COMBINING LATIN SMALL LETTER T] => "\UseMemAccent{t}{877}";
+<acc>[COMBINING CYRILLIC TITLO] => "\UseMemAccent{t}{1155}";
+<acc>[COMBINING CYRILLIC PALATALIZATION] => "\UseMemAccent{t}{1156}";
+<acc>[COMBINING CYRILLIC DASIA PNEUMATA] => "\UseMemAccent{t}{1157}";
+<acc>[COMBINING CYRILLIC PSILI PNEUMATA] => "\UseMemAccent{t}{1158}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"007D|@"00A1-@"00BD|@"034F-@"035F|@"0400-@"0482|@"0487-@"052D|@"2000-@"206D) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/ucy-dec.mtp b/macros/latex/exptl/mem/Mtp/ucy-dec.mtp
new file mode 100644
index 0000000000..1e396edd54
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ucy-dec.mtp
@@ -0,0 +1,127 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER IE WITH GRAVE]
+ => <= [CYRILLIC CAPITAL LETTER IE][COMBINING GRAVE ACCENT];
+[CYRILLIC CAPITAL LETTER IO]
+ => <= [CYRILLIC CAPITAL LETTER IE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER GJE]
+ => <= [CYRILLIC CAPITAL LETTER GHE][COMBINING ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER YI]
+ => <= [CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER KJE]
+ => <= [CYRILLIC CAPITAL LETTER KA][COMBINING ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER I WITH GRAVE]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING GRAVE ACCENT];
+[CYRILLIC CAPITAL LETTER SHORT U]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER SHORT I]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING BREVE];
+[CYRILLIC SMALL LETTER SHORT I]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING BREVE];
+[CYRILLIC SMALL LETTER IE WITH GRAVE]
+ => <= [CYRILLIC SMALL LETTER IE][COMBINING GRAVE ACCENT];
+[CYRILLIC SMALL LETTER IO]
+ => <= [CYRILLIC SMALL LETTER IE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER GJE]
+ => <= [CYRILLIC SMALL LETTER GHE][COMBINING ACUTE ACCENT];
+[CYRILLIC SMALL LETTER YI]
+ => <= [CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER KJE]
+ => <= [CYRILLIC SMALL LETTER KA][COMBINING ACUTE ACCENT];
+[CYRILLIC SMALL LETTER I WITH GRAVE]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING GRAVE ACCENT];
+[CYRILLIC SMALL LETTER SHORT U]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT]
+ => <= [CYRILLIC CAPITAL LETTER IZHITSA][COMBINING DOUBLE GRAVE ACCENT];
+[CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT]
+ => <= [CYRILLIC SMALL LETTER IZHITSA][COMBINING DOUBLE GRAVE ACCENT];
+[CYRILLIC CAPITAL LETTER ZHE WITH BREVE]
+ => <= [CYRILLIC CAPITAL LETTER ZHE][COMBINING BREVE];
+[CYRILLIC SMALL LETTER ZHE WITH BREVE]
+ => <= [CYRILLIC SMALL LETTER ZHE][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER A WITH BREVE]
+ => <= [CYRILLIC CAPITAL LETTER A][COMBINING BREVE];
+[CYRILLIC SMALL LETTER A WITH BREVE]
+ => <= [CYRILLIC SMALL LETTER A][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER A WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER A][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER A WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER A][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER IE WITH BREVE]
+ => <= [CYRILLIC CAPITAL LETTER IE][COMBINING BREVE];
+[CYRILLIC SMALL LETTER IE WITH BREVE]
+ => <= [CYRILLIC SMALL LETTER IE][COMBINING BREVE];
+[CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER SCHWA][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER SCHWA][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER ZHE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER ZHE WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER ZHE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER ZE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER ZE WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER ZE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER I WITH MACRON]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING MACRON];
+[CYRILLIC SMALL LETTER I WITH MACRON]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING MACRON];
+[CYRILLIC CAPITAL LETTER I WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER I][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER I WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER I][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER O WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER O][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER O WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER O][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER BARRED O][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER BARRED O][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER E WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER E][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER E WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER E][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER U WITH MACRON]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING MACRON];
+[CYRILLIC SMALL LETTER U WITH MACRON]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING MACRON];
+[CYRILLIC CAPITAL LETTER U WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER U WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE]
+ => <= [CYRILLIC CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE]
+ => <= [CYRILLIC SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER CHE][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER CHE WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER CHE][COMBINING DIAERESIS];
+[CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS]
+ => <= [CYRILLIC CAPITAL LETTER YERU][COMBINING DIAERESIS];
+[CYRILLIC SMALL LETTER YERU WITH DIAERESIS]
+ => <= [CYRILLIC SMALL LETTER YERU][COMBINING DIAERESIS];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
diff --git a/macros/latex/exptl/mem/Mtp/ucy-rec.mtp b/macros/latex/exptl/mem/Mtp/ucy-rec.mtp
new file mode 100644
index 0000000000..fbe02e7197
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ucy-rec.mtp
@@ -0,0 +1,128 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+[CYRILLIC CAPITAL LETTER IE][COMBINING GRAVE ACCENT] => <= [CYRILLIC CAPITAL LETTER IE WITH GRAVE] ;
+[CYRILLIC CAPITAL LETTER IE][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER IO] ;
+[CYRILLIC CAPITAL LETTER GHE][COMBINING ACUTE ACCENT] => <= [CYRILLIC CAPITAL LETTER GJE] ;
+[CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER YI] ;
+[CYRILLIC CAPITAL LETTER KA][COMBINING ACUTE ACCENT] => <= [CYRILLIC CAPITAL LETTER KJE] ;
+[CYRILLIC CAPITAL LETTER I][COMBINING GRAVE ACCENT] => <= [CYRILLIC CAPITAL LETTER I WITH GRAVE] ;
+[CYRILLIC CAPITAL LETTER U][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER SHORT U] ;
+[CYRILLIC CAPITAL LETTER I][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER SHORT I] ;
+[CYRILLIC SMALL LETTER I][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER SHORT I] ;
+[CYRILLIC SMALL LETTER IE][COMBINING GRAVE ACCENT] => <= [CYRILLIC SMALL LETTER IE WITH GRAVE] ;
+[CYRILLIC SMALL LETTER IE][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER IO] ;
+[CYRILLIC SMALL LETTER GHE][COMBINING ACUTE ACCENT] => <= [CYRILLIC SMALL LETTER GJE] ;
+[CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER YI] ;
+[CYRILLIC SMALL LETTER KA][COMBINING ACUTE ACCENT] => <= [CYRILLIC SMALL LETTER KJE] ;
+[CYRILLIC SMALL LETTER I][COMBINING GRAVE ACCENT] => <= [CYRILLIC SMALL LETTER I WITH GRAVE] ;
+[CYRILLIC SMALL LETTER U][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER SHORT U] ;
+[CYRILLIC CAPITAL LETTER IZHITSA][COMBINING DOUBLE GRAVE ACCENT] => <= [CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT] ;
+[CYRILLIC SMALL LETTER IZHITSA][COMBINING DOUBLE GRAVE ACCENT] => <= [CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT] ;
+[CYRILLIC CAPITAL LETTER ZHE][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER ZHE WITH BREVE] ;
+[CYRILLIC SMALL LETTER ZHE][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER ZHE WITH BREVE] ;
+[CYRILLIC CAPITAL LETTER A][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER A WITH BREVE] ;
+[CYRILLIC SMALL LETTER A][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER A WITH BREVE] ;
+[CYRILLIC CAPITAL LETTER A][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER A WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER A][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER A WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER IE][COMBINING BREVE] => <= [CYRILLIC CAPITAL LETTER IE WITH BREVE] ;
+[CYRILLIC SMALL LETTER IE][COMBINING BREVE] => <= [CYRILLIC SMALL LETTER IE WITH BREVE] ;
+[CYRILLIC CAPITAL LETTER SCHWA][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER SCHWA][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER ZHE][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER ZHE][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER ZHE WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER ZE][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER ZE][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER ZE WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER I][COMBINING MACRON] => <= [CYRILLIC CAPITAL LETTER I WITH MACRON] ;
+[CYRILLIC SMALL LETTER I][COMBINING MACRON] => <= [CYRILLIC SMALL LETTER I WITH MACRON] ;
+[CYRILLIC CAPITAL LETTER I][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER I WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER I][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER I WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER O][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER O WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER O][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER O WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER BARRED O][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER BARRED O][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER E][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER E WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER E][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER E WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER U][COMBINING MACRON] => <= [CYRILLIC CAPITAL LETTER U WITH MACRON] ;
+[CYRILLIC SMALL LETTER U][COMBINING MACRON] => <= [CYRILLIC SMALL LETTER U WITH MACRON] ;
+[CYRILLIC CAPITAL LETTER U][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER U WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER U][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER U WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT] => <= [CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE] ;
+[CYRILLIC SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT] => <= [CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE] ;
+[CYRILLIC CAPITAL LETTER CHE][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER CHE][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER CHE WITH DIAERESIS] ;
+[CYRILLIC CAPITAL LETTER YERU][COMBINING DIAERESIS] => <= [CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS] ;
+[CYRILLIC SMALL LETTER YERU][COMBINING DIAERESIS] => <= [CYRILLIC SMALL LETTER YERU WITH DIAERESIS] ;
+
+
+% Unicode to main font, except those below
+
+
+[COMBINING COMMA ABOVE RIGHT] => @"0315 ;
+[COMBINING LEFT ANGLE ABOVE] => @"031A ;
+[COMBINING HORN] => @"031B ;
+[COMBINING TILDE OVERLAY] => @"0334 ;
+[COMBINING SHORT STROKE OVERLAY] => @"0335 ;
+[COMBINING LONG STROKE OVERLAY] => @"0336 ;
+[COMBINING SHORT SOLIDUS OVERLAY] => @"0337 ;
+[COMBINING LONG SOLIDUS OVERLAY] => @"0338 ;
+[COMBINING GREEK YPOGEGRAMMENI] => @"0345 ;
+[COMBINING DOUBLE TILDE] => @"0360 ;
+[COMBINING DOUBLE INVERTED BREVE] => @"0361 ;
+[COMBINING DOUBLE RIGHTWARDS ARROW BELOW] => @"0362 ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"007D|@"00A1-@"00BD|@"034F-@"035F|@"0400-@"0482|@"0487-@"052D|@"2000-@"206D|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/uel-com.mtp b/macros/latex/exptl/mem/Mtp/uel-com.mtp
new file mode 100644
index 0000000000..3e24377cd8
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/uel-com.mtp
@@ -0,0 +1,137 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING GRAVE ACCENT] => "\UseMemAccent{t}{768}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{u}{768}";
+<acc>[COMBINING ACUTE ACCENT] => "\UseMemAccent{t}{769}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{u}{769}";
+<acc>[COMBINING CIRCUMFLEX ACCENT] => "\UseMemAccent{t}{770}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{u}{770}";
+<acc>[COMBINING TILDE] => "\UseMemAccent{t}{771}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{u}{771}";
+<acc>[COMBINING MACRON] => "\UseMemAccent{t}{772}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{u}{772}";
+<acc>[COMBINING OVERLINE] => "\UseMemAccent{t}{773}";
+<acc>[COMBINING BREVE] => "\UseMemAccent{t}{774}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{u}{774}";
+<acc>[COMBINING DOT ABOVE] => "\UseMemAccent{t}{775}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{u}{775}";
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{776}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{776}";
+<acc>[COMBINING HOOK ABOVE] => "\UseMemAccent{t}{777}";
+<acc>[COMBINING RING ABOVE] => "\UseMemAccent{t}{778}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{u}{778}";
+<acc>[COMBINING DOUBLE ACUTE ACCENT] => "\UseMemAccent{t}{779}";
+<acc>[COMBINING CARON] => "\UseMemAccent{t}{780}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{u}{780}";
+<acc>[COMBINING VERTICAL LINE ABOVE] => "\UseMemAccent{t}{781}";
+<acc>[COMBINING DOUBLE VERTICAL LINE ABOVE] => "\UseMemAccent{t}{782}";
+<acc>[COMBINING DOUBLE GRAVE ACCENT] => "\UseMemAccent{t}{783}";
+<acc>[COMBINING CANDRABINDU] => "\UseMemAccent{t}{784}";
+<acc>[COMBINING INVERTED BREVE] => "\UseMemAccent{t}{785}";
+<acc>[COMBINING TURNED COMMA ABOVE] => "\UseMemAccent{t}{786}";
+<acc>[COMBINING COMMA ABOVE] => "\UseMemAccent{t}{787}";
+<acc>[COMBINING REVERSED COMMA ABOVE] => "\UseMemAccent{t}{788}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{b}{790}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{b}{791}";
+<acc>[COMBINING LEFT TACK BELOW] => "\UseMemAccent{b}{792}";
+<acc>[COMBINING RIGHT TACK BELOW] => "\UseMemAccent{b}{793}";
+<acc>[COMBINING LEFT HALF RING BELOW] => "\UseMemAccent{b}{796}";
+<acc>[COMBINING UP TACK BELOW] => "\UseMemAccent{b}{797}";
+<acc>[COMBINING DOWN TACK BELOW] => "\UseMemAccent{b}{798}";
+<acc>[COMBINING PLUS SIGN BELOW] => "\UseMemAccent{b}{799}";
+<acc>[COMBINING MINUS SIGN BELOW] => "\UseMemAccent{b}{800}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{b}{803}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{b}{804}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{b}{805}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{b}{806}";
+<acc>[COMBINING CEDILLA] => "\UseMemAccent{c}{807}";
+<acc>[COMBINING OGONEK] => "\UseMemAccent{k}{808}";
+<acc>[COMBINING VERTICAL LINE BELOW] => "\UseMemAccent{b}{809}";
+<acc>[COMBINING BRIDGE BELOW] => "\UseMemAccent{b}{810}";
+<acc>[COMBINING INVERTED DOUBLE ARCH BELOW] => "\UseMemAccent{b}{811}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{b}{812}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{b}{813}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{b}{814}";
+<acc>[COMBINING INVERTED BREVE BELOW] => "\UseMemAccent{b}{815}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{b}{816}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{b}{817}";
+<acc>[COMBINING LOW LINE] => "\UseMemAccent{b}{818}";
+<acc>[COMBINING DOUBLE LOW LINE] => "\UseMemAccent{b}{819}";
+<acc>[COMBINING RIGHT HALF RING BELOW] => "\UseMemAccent{b}{825}";
+<acc>[COMBINING INVERTED BRIDGE BELOW] => "\UseMemAccent{b}{826}";
+<acc>[COMBINING SQUARE BELOW] => "\UseMemAccent{b}{827}";
+<acc>[COMBINING SEAGULL BELOW] => "\UseMemAccent{b}{828}";
+<acc>[COMBINING X ABOVE] => "\UseMemAccent{t}{829}";
+<acc>[COMBINING VERTICAL TILDE] => "\UseMemAccent{t}{830}";
+<acc>[COMBINING DOUBLE OVERLINE] => "\UseMemAccent{t}{831}";
+<acc>[COMBINING GRAVE TONE MARK] => "\UseMemAccent{t}{832}";
+<acc>[COMBINING ACUTE TONE MARK] => "\UseMemAccent{t}{833}";
+<acc>[COMBINING GREEK PERISPOMENI] => "\UseMemAccent{t}{834}";
+<acc>[COMBINING GREEK KORONIS] => "\UseMemAccent{t}{835}";
+<acc>[COMBINING GREEK DIALYTIKA TONOS] => "\UseMemAccent{t}{836}";
+<acc>[COMBINING BRIDGE ABOVE] => "\UseMemAccent{t}{838}";
+<acc>[COMBINING EQUALS SIGN BELOW] => "\UseMemAccent{b}{839}";
+<acc>[COMBINING DOUBLE VERTICAL LINE BELOW] => "\UseMemAccent{b}{840}";
+<acc>[COMBINING LEFT ANGLE BELOW] => "\UseMemAccent{b}{841}";
+<acc>[COMBINING NOT TILDE ABOVE] => "\UseMemAccent{t}{842}";
+<acc>[COMBINING HOMOTHETIC ABOVE] => "\UseMemAccent{t}{843}";
+<acc>[COMBINING ALMOST EQUAL TO ABOVE] => "\UseMemAccent{t}{844}";
+<acc>[COMBINING LEFT RIGHT ARROW BELOW] => "\UseMemAccent{b}{845}";
+<acc>[COMBINING UPWARDS ARROW BELOW] => "\UseMemAccent{b}{846}";
+<acc>[COMBINING LATIN SMALL LETTER A] => "\UseMemAccent{t}{867}";
+<acc>[COMBINING LATIN SMALL LETTER E] => "\UseMemAccent{t}{868}";
+<acc>[COMBINING LATIN SMALL LETTER I] => "\UseMemAccent{t}{869}";
+<acc>[COMBINING LATIN SMALL LETTER O] => "\UseMemAccent{t}{870}";
+<acc>[COMBINING LATIN SMALL LETTER U] => "\UseMemAccent{t}{871}";
+<acc>[COMBINING LATIN SMALL LETTER C] => "\UseMemAccent{t}{872}";
+<acc>[COMBINING LATIN SMALL LETTER D] => "\UseMemAccent{t}{873}";
+<acc>[COMBINING LATIN SMALL LETTER H] => "\UseMemAccent{t}{874}";
+<acc>[COMBINING LATIN SMALL LETTER M] => "\UseMemAccent{t}{875}";
+<acc>[COMBINING LATIN SMALL LETTER R] => "\UseMemAccent{t}{876}";
+<acc>[COMBINING LATIN SMALL LETTER T] => "\UseMemAccent{t}{877}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"007D|@"00A1-@"00BD|@"034F-@"035F|@"0370-@"03FD|@"1F00-@"1FFD|@"2000-@"206D) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/uel-dec.mtp b/macros/latex/exptl/mem/Mtp/uel-dec.mtp
new file mode 100644
index 0000000000..12e1867f11
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/uel-dec.mtp
@@ -0,0 +1,533 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK NUMERAL SIGN]
+ => <= [MODIFIER LETTER PRIME];
+[GREEK QUESTION MARK]
+ => <= [SEMICOLON];
+[GREEK DIALYTIKA TONOS]
+ => <= [DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK ANO TELEIA]
+ => <= [MIDDLE DOT];
+[GREEK CAPITAL LETTER EPSILON WITH TONOS]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH TONOS]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH TONOS]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH TONOS]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH DIALYTIKA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING DIAERESIS];
+[GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING DIAERESIS];
+[GREEK SMALL LETTER ALPHA WITH TONOS]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH TONOS]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH TONOS]
+ => <= [GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH TONOS]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS];
+[GREEK SMALL LETTER OMICRON WITH TONOS]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH TONOS]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH TONOS]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK UPSILON WITH ACUTE AND HOOK SYMBOL]
+ => <= [GREEK UPSILON WITH HOOK SYMBOL][COMBINING ACUTE ACCENT];
+[GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL]
+ => <= [GREEK UPSILON WITH HOOK SYMBOL][COMBINING DIAERESIS];
+[GREEK SMALL LETTER ALPHA WITH PSILI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER ALPHA WITH DASIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER EPSILON WITH PSILI]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER EPSILON WITH DASIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH PSILI]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER EPSILON WITH DASIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH PSILI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER ETA WITH DASIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER ETA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH PSILI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER IOTA WITH DASIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER IOTA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER IOTA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER IOTA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMICRON WITH PSILI]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER OMICRON WITH DASIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH PSILI]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER OMICRON WITH DASIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH PSILI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER UPSILON WITH DASIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER OMEGA WITH DASIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ALPHA WITH VARIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH OXIA]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH VARIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER EPSILON WITH OXIA]
+ => <= [GREEK SMALL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ETA WITH VARIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER ETA WITH OXIA]
+ => <= [GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH OXIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH VARIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMICRON WITH OXIA]
+ => <= [GREEK SMALL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH OXIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH VARIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH OXIA]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH VRACHY]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING BREVE];
+[GREEK SMALL LETTER ALPHA WITH MACRON]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING MACRON];
+[GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ALPHA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER ALPHA WITH VRACHY]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING BREVE];
+[GREEK CAPITAL LETTER ALPHA WITH MACRON]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING MACRON];
+[GREEK CAPITAL LETTER ALPHA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK PROSGEGRAMMENI]
+ => <= [GREEK SMALL LETTER IOTA];
+[GREEK DIALYTIKA AND PERISPOMENI]
+ => <= [DIAERESIS][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER ETA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER ETA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER EPSILON WITH VARIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER EPSILON WITH OXIA]
+ => <= [GREEK CAPITAL LETTER EPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK PSILI AND VARIA]
+ => <= [GREEK PSILI][COMBINING GRAVE ACCENT];
+[GREEK PSILI AND OXIA]
+ => <= [GREEK PSILI][COMBINING ACUTE ACCENT];
+[GREEK PSILI AND PERISPOMENI]
+ => <= [GREEK PSILI][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH VRACHY]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING BREVE];
+[GREEK SMALL LETTER IOTA WITH MACRON]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING MACRON];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA]
+ => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER IOTA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER IOTA][COMBINING DIAERESIS][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER IOTA WITH VRACHY]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING BREVE];
+[GREEK CAPITAL LETTER IOTA WITH MACRON]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING MACRON];
+[GREEK CAPITAL LETTER IOTA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER IOTA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER IOTA][COMBINING ACUTE ACCENT];
+[GREEK DASIA AND VARIA]
+ => <= [GREEK DASIA][COMBINING GRAVE ACCENT];
+[GREEK DASIA AND OXIA]
+ => <= [GREEK DASIA][COMBINING ACUTE ACCENT];
+[GREEK DASIA AND PERISPOMENI]
+ => <= [GREEK DASIA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER UPSILON WITH VRACHY]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING BREVE];
+[GREEK SMALL LETTER UPSILON WITH MACRON]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING MACRON];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA]
+ => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING ACUTE ACCENT];
+[GREEK SMALL LETTER RHO WITH PSILI]
+ => <= [GREEK SMALL LETTER RHO][COMBINING COMMA ABOVE];
+[GREEK SMALL LETTER RHO WITH DASIA]
+ => <= [GREEK SMALL LETTER RHO][COMBINING REVERSED COMMA ABOVE];
+[GREEK SMALL LETTER UPSILON WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI]
+ => <= [GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS][COMBINING GREEK PERISPOMENI];
+[GREEK CAPITAL LETTER UPSILON WITH VRACHY]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING BREVE];
+[GREEK CAPITAL LETTER UPSILON WITH MACRON]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING MACRON];
+[GREEK CAPITAL LETTER UPSILON WITH VARIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER UPSILON WITH OXIA]
+ => <= [GREEK CAPITAL LETTER UPSILON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER RHO WITH DASIA]
+ => <= [GREEK CAPITAL LETTER RHO][COMBINING REVERSED COMMA ABOVE];
+[GREEK DIALYTIKA AND VARIA]
+ => <= [DIAERESIS][COMBINING GRAVE ACCENT];
+[GREEK DIALYTIKA AND OXIA]
+ => <= [DIAERESIS][COMBINING ACUTE ACCENT];
+[GREEK VARIA]
+ => <= [GRAVE ACCENT];
+[GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GRAVE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GREEK PERISPOMENI];
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI]
+ => <= [GREEK SMALL LETTER OMEGA][COMBINING GREEK PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK CAPITAL LETTER OMICRON WITH VARIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMICRON WITH OXIA]
+ => <= [GREEK CAPITAL LETTER OMICRON][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH VARIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING GRAVE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH OXIA]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING ACUTE ACCENT];
+[GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI]
+ => <= [GREEK CAPITAL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI];
+[GREEK OXIA]
+ => <= [ACUTE ACCENT];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
diff --git a/macros/latex/exptl/mem/Mtp/uel-rec.mtp b/macros/latex/exptl/mem/Mtp/uel-rec.mtp
new file mode 100644
index 0000000000..78834c38d6
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/uel-rec.mtp
@@ -0,0 +1,308 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+[DIAERESIS][COMBINING ACUTE ACCENT] => <= [GREEK DIALYTIKA TONOS] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER ALPHA WITH TONOS] ;
+[GREEK CAPITAL LETTER EPSILON][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER EPSILON WITH TONOS] ;
+[GREEK CAPITAL LETTER ETA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER ETA WITH TONOS] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER IOTA WITH TONOS] ;
+[GREEK CAPITAL LETTER OMICRON][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER OMICRON WITH TONOS] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER UPSILON WITH TONOS] ;
+[GREEK CAPITAL LETTER OMEGA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER OMEGA WITH TONOS] ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING DIAERESIS] => <= [GREEK CAPITAL LETTER IOTA WITH DIALYTIKA] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING DIAERESIS] => <= [GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA] ;
+[GREEK SMALL LETTER ALPHA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH TONOS] ;
+[GREEK SMALL LETTER EPSILON][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH TONOS] ;
+[GREEK SMALL LETTER ETA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ETA WITH TONOS] ;
+[GREEK SMALL LETTER IOTA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH TONOS] ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS] ;
+[GREEK SMALL LETTER IOTA][COMBINING DIAERESIS] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING DIAERESIS] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA] ;
+[GREEK SMALL LETTER OMICRON][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH TONOS] ;
+[GREEK SMALL LETTER UPSILON][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH TONOS] ;
+[GREEK SMALL LETTER OMEGA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH TONOS] ;
+[GREEK UPSILON WITH HOOK SYMBOL][COMBINING ACUTE ACCENT] => <= [GREEK UPSILON WITH ACUTE AND HOOK SYMBOL] ;
+[GREEK UPSILON WITH HOOK SYMBOL][COMBINING DIAERESIS] => <= [GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL] ;
+[GREEK SMALL LETTER ALPHA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER ALPHA WITH PSILI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER ALPHA WITH DASIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING COMMA ABOVE] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER EPSILON][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER EPSILON WITH PSILI] ;
+[GREEK SMALL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER EPSILON WITH DASIA] ;
+[GREEK SMALL LETTER EPSILON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER EPSILON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER EPSILON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER EPSILON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER EPSILON][COMBINING COMMA ABOVE] => <= [GREEK CAPITAL LETTER EPSILON WITH PSILI] ;
+[GREEK CAPITAL LETTER EPSILON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER EPSILON WITH DASIA] ;
+[GREEK CAPITAL LETTER EPSILON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA] ;
+[GREEK CAPITAL LETTER EPSILON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER EPSILON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA] ;
+[GREEK CAPITAL LETTER EPSILON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER ETA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER ETA WITH PSILI] ;
+[GREEK SMALL LETTER ETA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER ETA WITH DASIA] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ETA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ETA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ETA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER ETA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER ETA][COMBINING COMMA ABOVE] => <= [GREEK CAPITAL LETTER ETA WITH PSILI] ;
+[GREEK CAPITAL LETTER ETA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER ETA WITH DASIA] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER IOTA WITH PSILI] ;
+[GREEK SMALL LETTER IOTA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER IOTA WITH DASIA] ;
+[GREEK SMALL LETTER IOTA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER IOTA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER IOTA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER IOTA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER IOTA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING COMMA ABOVE] => <= [GREEK CAPITAL LETTER IOTA WITH PSILI] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER IOTA WITH DASIA] ;
+[GREEK CAPITAL LETTER IOTA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA] ;
+[GREEK CAPITAL LETTER IOTA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER IOTA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA] ;
+[GREEK CAPITAL LETTER IOTA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER IOTA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER IOTA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER OMICRON][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER OMICRON WITH PSILI] ;
+[GREEK SMALL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER OMICRON WITH DASIA] ;
+[GREEK SMALL LETTER OMICRON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER OMICRON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER OMICRON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER OMICRON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER OMICRON][COMBINING COMMA ABOVE] => <= [GREEK CAPITAL LETTER OMICRON WITH PSILI] ;
+[GREEK CAPITAL LETTER OMICRON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER OMICRON WITH DASIA] ;
+[GREEK CAPITAL LETTER OMICRON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA] ;
+[GREEK CAPITAL LETTER OMICRON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER OMICRON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA] ;
+[GREEK CAPITAL LETTER OMICRON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER UPSILON WITH PSILI] ;
+[GREEK SMALL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER UPSILON WITH DASIA] ;
+[GREEK SMALL LETTER UPSILON WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER UPSILON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER UPSILON WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER UPSILON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER UPSILON WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER UPSILON WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER UPSILON WITH DASIA] ;
+[GREEK CAPITAL LETTER UPSILON WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER UPSILON WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER UPSILON WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER OMEGA WITH PSILI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER OMEGA WITH DASIA] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER OMEGA][COMBINING COMMA ABOVE] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI] ;
+[GREEK CAPITAL LETTER OMEGA][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING ACUTE ACCENT] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ALPHA WITH VARIA] ;
+[GREEK SMALL LETTER EPSILON][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER EPSILON WITH VARIA] ;
+[GREEK SMALL LETTER ETA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER ETA WITH VARIA] ;
+[GREEK SMALL LETTER IOTA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH VARIA] ;
+[GREEK SMALL LETTER OMICRON][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMICRON WITH VARIA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH VARIA] ;
+[GREEK SMALL LETTER OMEGA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER OMEGA WITH VARIA] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING BREVE] => <= [GREEK SMALL LETTER ALPHA WITH VRACHY] ;
+[GREEK SMALL LETTER ALPHA][COMBINING MACRON] => <= [GREEK SMALL LETTER ALPHA WITH MACRON] ;
+[GREEK SMALL LETTER ALPHA WITH VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA WITH TONOS][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ALPHA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ALPHA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER ALPHA WITH PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING BREVE] => <= [GREEK CAPITAL LETTER ALPHA WITH VRACHY] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING MACRON] => <= [GREEK CAPITAL LETTER ALPHA WITH MACRON] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER ALPHA WITH VARIA] ;
+[GREEK CAPITAL LETTER ALPHA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI] ;
+[DIAERESIS][COMBINING GREEK PERISPOMENI] => <= [GREEK DIALYTIKA AND PERISPOMENI] ;
+[GREEK SMALL LETTER ETA WITH VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA WITH TONOS][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER ETA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER ETA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER ETA WITH PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK CAPITAL LETTER EPSILON][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER EPSILON WITH VARIA] ;
+[GREEK CAPITAL LETTER ETA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER ETA WITH VARIA] ;
+[GREEK CAPITAL LETTER ETA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI] ;
+[GREEK PSILI][COMBINING GRAVE ACCENT] => <= [GREEK PSILI AND VARIA] ;
+[GREEK PSILI][COMBINING ACUTE ACCENT] => <= [GREEK PSILI AND OXIA] ;
+[GREEK PSILI][COMBINING GREEK PERISPOMENI] => <= [GREEK PSILI AND PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA][COMBINING BREVE] => <= [GREEK SMALL LETTER IOTA WITH VRACHY] ;
+[GREEK SMALL LETTER IOTA][COMBINING MACRON] => <= [GREEK SMALL LETTER IOTA WITH MACRON] ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA] ;
+[GREEK SMALL LETTER IOTA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER IOTA WITH DIALYTIKA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING BREVE] => <= [GREEK CAPITAL LETTER IOTA WITH VRACHY] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING MACRON] => <= [GREEK CAPITAL LETTER IOTA WITH MACRON] ;
+[GREEK CAPITAL LETTER IOTA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER IOTA WITH VARIA] ;
+[GREEK DASIA][COMBINING GRAVE ACCENT] => <= [GREEK DASIA AND VARIA] ;
+[GREEK DASIA][COMBINING ACUTE ACCENT] => <= [GREEK DASIA AND OXIA] ;
+[GREEK DASIA][COMBINING GREEK PERISPOMENI] => <= [GREEK DASIA AND PERISPOMENI] ;
+[GREEK SMALL LETTER UPSILON][COMBINING BREVE] => <= [GREEK SMALL LETTER UPSILON WITH VRACHY] ;
+[GREEK SMALL LETTER UPSILON][COMBINING MACRON] => <= [GREEK SMALL LETTER UPSILON WITH MACRON] ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING GRAVE ACCENT] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA] ;
+[GREEK SMALL LETTER RHO][COMBINING COMMA ABOVE] => <= [GREEK SMALL LETTER RHO WITH PSILI] ;
+[GREEK SMALL LETTER RHO][COMBINING REVERSED COMMA ABOVE] => <= [GREEK SMALL LETTER RHO WITH DASIA] ;
+[GREEK SMALL LETTER UPSILON][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH PERISPOMENI] ;
+[GREEK SMALL LETTER UPSILON WITH DIALYTIKA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING BREVE] => <= [GREEK CAPITAL LETTER UPSILON WITH VRACHY] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING MACRON] => <= [GREEK CAPITAL LETTER UPSILON WITH MACRON] ;
+[GREEK CAPITAL LETTER UPSILON][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER UPSILON WITH VARIA] ;
+[GREEK CAPITAL LETTER RHO][COMBINING REVERSED COMMA ABOVE] => <= [GREEK CAPITAL LETTER RHO WITH DASIA] ;
+[DIAERESIS][COMBINING GRAVE ACCENT] => <= [GREEK DIALYTIKA AND VARIA] ;
+[GREEK SMALL LETTER OMEGA WITH VARIA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA WITH TONOS][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI] ;
+[GREEK SMALL LETTER OMEGA][COMBINING GREEK PERISPOMENI] => <= [GREEK SMALL LETTER OMEGA WITH PERISPOMENI] ;
+[GREEK SMALL LETTER OMEGA WITH PERISPOMENI][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI] ;
+[GREEK CAPITAL LETTER OMICRON][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER OMICRON WITH VARIA] ;
+[GREEK CAPITAL LETTER OMEGA][COMBINING GRAVE ACCENT] => <= [GREEK CAPITAL LETTER OMEGA WITH VARIA] ;
+[GREEK CAPITAL LETTER OMEGA][COMBINING GREEK YPOGEGRAMMENI] => <= [GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI] ;
+
+
+% Unicode to main font, except those below
+
+
+[COMBINING COMMA ABOVE RIGHT] => @"0315 ;
+[COMBINING LEFT ANGLE ABOVE] => @"031A ;
+[COMBINING HORN] => @"031B ;
+[COMBINING TILDE OVERLAY] => @"0334 ;
+[COMBINING SHORT STROKE OVERLAY] => @"0335 ;
+[COMBINING LONG STROKE OVERLAY] => @"0336 ;
+[COMBINING SHORT SOLIDUS OVERLAY] => @"0337 ;
+[COMBINING LONG SOLIDUS OVERLAY] => @"0338 ;
+[COMBINING GREEK YPOGEGRAMMENI] => @"0345 ;
+[COMBINING DOUBLE TILDE] => @"0360 ;
+[COMBINING DOUBLE INVERTED BREVE] => @"0361 ;
+[COMBINING DOUBLE RIGHTWARDS ARROW BELOW] => @"0362 ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"007D|@"00A1-@"00BD|@"034F-@"035F|@"0370-@"03FD|@"1F00-@"1FFD|@"2000-@"206D|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/ula-com.mtp b/macros/latex/exptl/mem/Mtp/ula-com.mtp
new file mode 100644
index 0000000000..d18ce54225
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ula-com.mtp
@@ -0,0 +1,137 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 1;
+
+states: acc, end;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Combine if composed form not in main font
+
+^({accent}) {topaccent} {topaccent} {accent} => <=
+ \4 "c{" \3 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {botaccent} {topaccent} => <=
+ \3 "c{" \4 "c{" \2 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} {topaccent} => <=
+ \2 "c{" \4 "c{" \3 "l{" \1 "}}}" @"1B <push: acc>;
+^({accent}) {topaccent} {accent} => <=
+ \3 "c{" \2 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {botaccent} {topaccent} => <=
+ \2 "c{" \3 "l{" \1 "}}" @"1B <push: acc>;
+^({accent}) {accent} => <=
+ \2 "l{" \1 "}" @"1B <push: acc>;
+
+<acc> @"1B => <pop:>;
+<acc>[COMBINING GRAVE ACCENT] => "\UseMemAccent{t}{768}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{u}{768}";
+<acc>[COMBINING ACUTE ACCENT] => "\UseMemAccent{t}{769}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{u}{769}";
+<acc>[COMBINING CIRCUMFLEX ACCENT] => "\UseMemAccent{t}{770}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{u}{770}";
+<acc>[COMBINING TILDE] => "\UseMemAccent{t}{771}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{u}{771}";
+<acc>[COMBINING MACRON] => "\UseMemAccent{t}{772}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{u}{772}";
+<acc>[COMBINING OVERLINE] => "\UseMemAccent{t}{773}";
+<acc>[COMBINING BREVE] => "\UseMemAccent{t}{774}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{u}{774}";
+<acc>[COMBINING DOT ABOVE] => "\UseMemAccent{t}{775}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{u}{775}";
+<acc>[COMBINING DIAERESIS] => "\UseMemAccent{t}{776}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{u}{776}";
+<acc>[COMBINING HOOK ABOVE] => "\UseMemAccent{t}{777}";
+<acc>[COMBINING RING ABOVE] => "\UseMemAccent{t}{778}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{u}{778}";
+<acc>[COMBINING DOUBLE ACUTE ACCENT] => "\UseMemAccent{t}{779}";
+<acc>[COMBINING CARON] => "\UseMemAccent{t}{780}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{u}{780}";
+<acc>[COMBINING VERTICAL LINE ABOVE] => "\UseMemAccent{t}{781}";
+<acc>[COMBINING DOUBLE VERTICAL LINE ABOVE] => "\UseMemAccent{t}{782}";
+<acc>[COMBINING DOUBLE GRAVE ACCENT] => "\UseMemAccent{t}{783}";
+<acc>[COMBINING CANDRABINDU] => "\UseMemAccent{t}{784}";
+<acc>[COMBINING INVERTED BREVE] => "\UseMemAccent{t}{785}";
+<acc>[COMBINING TURNED COMMA ABOVE] => "\UseMemAccent{t}{786}";
+<acc>[COMBINING COMMA ABOVE] => "\UseMemAccent{t}{787}";
+<acc>[COMBINING REVERSED COMMA ABOVE] => "\UseMemAccent{t}{788}";
+<acc>[COMBINING GRAVE ACCENT BELOW] => "\UseMemAccent{b}{790}";
+<acc>[COMBINING ACUTE ACCENT BELOW] => "\UseMemAccent{b}{791}";
+<acc>[COMBINING LEFT TACK BELOW] => "\UseMemAccent{b}{792}";
+<acc>[COMBINING RIGHT TACK BELOW] => "\UseMemAccent{b}{793}";
+<acc>[COMBINING LEFT HALF RING BELOW] => "\UseMemAccent{b}{796}";
+<acc>[COMBINING UP TACK BELOW] => "\UseMemAccent{b}{797}";
+<acc>[COMBINING DOWN TACK BELOW] => "\UseMemAccent{b}{798}";
+<acc>[COMBINING PLUS SIGN BELOW] => "\UseMemAccent{b}{799}";
+<acc>[COMBINING MINUS SIGN BELOW] => "\UseMemAccent{b}{800}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{b}{803}";
+<acc>[COMBINING DIAERESIS BELOW] => "\UseMemAccent{b}{804}";
+<acc>[COMBINING RING BELOW] => "\UseMemAccent{b}{805}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{b}{806}";
+<acc>[COMBINING CEDILLA] => "\UseMemAccent{c}{807}";
+<acc>[COMBINING OGONEK] => "\UseMemAccent{k}{808}";
+<acc>[COMBINING VERTICAL LINE BELOW] => "\UseMemAccent{b}{809}";
+<acc>[COMBINING BRIDGE BELOW] => "\UseMemAccent{b}{810}";
+<acc>[COMBINING INVERTED DOUBLE ARCH BELOW] => "\UseMemAccent{b}{811}";
+<acc>[COMBINING CARON BELOW] => "\UseMemAccent{b}{812}";
+<acc>[COMBINING CIRCUMFLEX ACCENT BELOW] => "\UseMemAccent{b}{813}";
+<acc>[COMBINING BREVE BELOW] => "\UseMemAccent{b}{814}";
+<acc>[COMBINING INVERTED BREVE BELOW] => "\UseMemAccent{b}{815}";
+<acc>[COMBINING TILDE BELOW] => "\UseMemAccent{b}{816}";
+<acc>[COMBINING MACRON BELOW] => "\UseMemAccent{b}{817}";
+<acc>[COMBINING LOW LINE] => "\UseMemAccent{b}{818}";
+<acc>[COMBINING DOUBLE LOW LINE] => "\UseMemAccent{b}{819}";
+<acc>[COMBINING RIGHT HALF RING BELOW] => "\UseMemAccent{b}{825}";
+<acc>[COMBINING INVERTED BRIDGE BELOW] => "\UseMemAccent{b}{826}";
+<acc>[COMBINING SQUARE BELOW] => "\UseMemAccent{b}{827}";
+<acc>[COMBINING SEAGULL BELOW] => "\UseMemAccent{b}{828}";
+<acc>[COMBINING X ABOVE] => "\UseMemAccent{t}{829}";
+<acc>[COMBINING VERTICAL TILDE] => "\UseMemAccent{t}{830}";
+<acc>[COMBINING DOUBLE OVERLINE] => "\UseMemAccent{t}{831}";
+<acc>[COMBINING GRAVE TONE MARK] => "\UseMemAccent{t}{832}";
+<acc>[COMBINING ACUTE TONE MARK] => "\UseMemAccent{t}{833}";
+<acc>[COMBINING GREEK PERISPOMENI] => "\UseMemAccent{t}{834}";
+<acc>[COMBINING GREEK KORONIS] => "\UseMemAccent{t}{835}";
+<acc>[COMBINING GREEK DIALYTIKA TONOS] => "\UseMemAccent{t}{836}";
+<acc>[COMBINING BRIDGE ABOVE] => "\UseMemAccent{t}{838}";
+<acc>[COMBINING EQUALS SIGN BELOW] => "\UseMemAccent{b}{839}";
+<acc>[COMBINING DOUBLE VERTICAL LINE BELOW] => "\UseMemAccent{b}{840}";
+<acc>[COMBINING LEFT ANGLE BELOW] => "\UseMemAccent{b}{841}";
+<acc>[COMBINING NOT TILDE ABOVE] => "\UseMemAccent{t}{842}";
+<acc>[COMBINING HOMOTHETIC ABOVE] => "\UseMemAccent{t}{843}";
+<acc>[COMBINING ALMOST EQUAL TO ABOVE] => "\UseMemAccent{t}{844}";
+<acc>[COMBINING LEFT RIGHT ARROW BELOW] => "\UseMemAccent{b}{845}";
+<acc>[COMBINING UPWARDS ARROW BELOW] => "\UseMemAccent{b}{846}";
+<acc>[COMBINING LATIN SMALL LETTER A] => "\UseMemAccent{t}{867}";
+<acc>[COMBINING LATIN SMALL LETTER E] => "\UseMemAccent{t}{868}";
+<acc>[COMBINING LATIN SMALL LETTER I] => "\UseMemAccent{t}{869}";
+<acc>[COMBINING LATIN SMALL LETTER O] => "\UseMemAccent{t}{870}";
+<acc>[COMBINING LATIN SMALL LETTER U] => "\UseMemAccent{t}{871}";
+<acc>[COMBINING LATIN SMALL LETTER C] => "\UseMemAccent{t}{872}";
+<acc>[COMBINING LATIN SMALL LETTER D] => "\UseMemAccent{t}{873}";
+<acc>[COMBINING LATIN SMALL LETTER H] => "\UseMemAccent{t}{874}";
+<acc>[COMBINING LATIN SMALL LETTER M] => "\UseMemAccent{t}{875}";
+<acc>[COMBINING LATIN SMALL LETTER R] => "\UseMemAccent{t}{876}";
+<acc>[COMBINING LATIN SMALL LETTER T] => "\UseMemAccent{t}{877}";
+<acc>[COMBINING COMMA BELOW] => "\UseMemAccent{p}{,}";
+<acc>[COMBINING DOT BELOW] => "\UseMemAccent{p}{.}";
+
+
+% PUA -> ASCII
+
+@"E125 => "\MemMoveOtherChar\%"; % as a special case (37).
+(@"E100-@"E17F) => "\MemMoveOtherChar\" #(\1 - @"E100);
+
+
+
+% Glyphs in main font with same value as Unicode characters
+
+(@"0020-@"02FD|@"034F-@"035F|@"1E00-@"1EFD|@"2000-@"206D) => \1; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/ula-dec.mtp b/macros/latex/exptl/mem/Mtp/ula-dec.mtp
new file mode 100644
index 0000000000..9a239110e9
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ula-dec.mtp
@@ -0,0 +1,1017 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+expressions:
+
+
+
+% Decompose
+
+[LATIN CAPITAL LETTER A WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER A WITH TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER A WITH RING ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING ABOVE];
+[LATIN CAPITAL LETTER C WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER E WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER E WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER I WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER I WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER I][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER N WITH TILDE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER O WITH TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER U WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER U WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Y WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER A WITH TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER A][COMBINING DIAERESIS];
+[LATIN SMALL LETTER A WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING RING ABOVE];
+[LATIN SMALL LETTER C WITH CEDILLA]
+ => <= [LATIN SMALL LETTER C][COMBINING CEDILLA];
+[LATIN SMALL LETTER E WITH GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER E WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER E][COMBINING DIAERESIS];
+[LATIN SMALL LETTER I WITH GRAVE]
+ => <= [LATIN SMALL LETTER I][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER I WITH ACUTE]
+ => <= [LATIN SMALL LETTER I][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER I WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER I][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER I WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER I][COMBINING DIAERESIS];
+[LATIN SMALL LETTER N WITH TILDE]
+ => <= [LATIN SMALL LETTER N][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER O WITH TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER O][COMBINING DIAERESIS];
+[LATIN SMALL LETTER U WITH GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS];
+[LATIN SMALL LETTER Y WITH ACUTE]
+ => <= [LATIN SMALL LETTER Y][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER Y WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER Y][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER A WITH MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING MACRON];
+[LATIN CAPITAL LETTER A WITH BREVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE];
+[LATIN SMALL LETTER A WITH BREVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE];
+[LATIN CAPITAL LETTER A WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER A][COMBINING OGONEK];
+[LATIN SMALL LETTER A WITH OGONEK]
+ => <= [LATIN SMALL LETTER A][COMBINING OGONEK];
+[LATIN CAPITAL LETTER C WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER C WITH ACUTE]
+ => <= [LATIN SMALL LETTER C][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER C WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER C][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER C WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER C WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER C][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER C WITH CARON]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CARON];
+[LATIN SMALL LETTER C WITH CARON]
+ => <= [LATIN SMALL LETTER C][COMBINING CARON];
+[LATIN CAPITAL LETTER D WITH CARON]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CARON];
+[LATIN SMALL LETTER D WITH CARON]
+ => <= [LATIN SMALL LETTER D][COMBINING CARON];
+[LATIN CAPITAL LETTER E WITH MACRON]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON];
+[LATIN SMALL LETTER E WITH MACRON]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON];
+[LATIN CAPITAL LETTER E WITH BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING BREVE];
+[LATIN SMALL LETTER E WITH BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING BREVE];
+[LATIN CAPITAL LETTER E WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER E WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER E WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER E][COMBINING OGONEK];
+[LATIN SMALL LETTER E WITH OGONEK]
+ => <= [LATIN SMALL LETTER E][COMBINING OGONEK];
+[LATIN CAPITAL LETTER E WITH CARON]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CARON];
+[LATIN SMALL LETTER E WITH CARON]
+ => <= [LATIN SMALL LETTER E][COMBINING CARON];
+[LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER G WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER G][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER G WITH BREVE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING BREVE];
+[LATIN SMALL LETTER G WITH BREVE]
+ => <= [LATIN SMALL LETTER G][COMBINING BREVE];
+[LATIN CAPITAL LETTER G WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER G WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER G][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER G WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CEDILLA];
+[LATIN SMALL LETTER G WITH CEDILLA]
+ => <= [LATIN SMALL LETTER G][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER H WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER H][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH TILDE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING TILDE];
+[LATIN SMALL LETTER I WITH TILDE]
+ => <= [LATIN SMALL LETTER I][COMBINING TILDE];
+[LATIN CAPITAL LETTER I WITH MACRON]
+ => <= [LATIN CAPITAL LETTER I][COMBINING MACRON];
+[LATIN SMALL LETTER I WITH MACRON]
+ => <= [LATIN SMALL LETTER I][COMBINING MACRON];
+[LATIN CAPITAL LETTER I WITH BREVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING BREVE];
+[LATIN SMALL LETTER I WITH BREVE]
+ => <= [LATIN SMALL LETTER I][COMBINING BREVE];
+[LATIN CAPITAL LETTER I WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER I][COMBINING OGONEK];
+[LATIN SMALL LETTER I WITH OGONEK]
+ => <= [LATIN SMALL LETTER I][COMBINING OGONEK];
+[LATIN CAPITAL LETTER I WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER J][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER J WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER J][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER K WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER K][COMBINING CEDILLA];
+[LATIN SMALL LETTER K WITH CEDILLA]
+ => <= [LATIN SMALL LETTER K][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER L WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER L][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER L WITH ACUTE]
+ => <= [LATIN SMALL LETTER L][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER L WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CEDILLA];
+[LATIN SMALL LETTER L WITH CEDILLA]
+ => <= [LATIN SMALL LETTER L][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER L WITH CARON]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CARON];
+[LATIN SMALL LETTER L WITH CARON]
+ => <= [LATIN SMALL LETTER L][COMBINING CARON];
+[LATIN CAPITAL LETTER N WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER N WITH ACUTE]
+ => <= [LATIN SMALL LETTER N][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER N WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CEDILLA];
+[LATIN SMALL LETTER N WITH CEDILLA]
+ => <= [LATIN SMALL LETTER N][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER N WITH CARON]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CARON];
+[LATIN SMALL LETTER N WITH CARON]
+ => <= [LATIN SMALL LETTER N][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH BREVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING BREVE];
+[LATIN SMALL LETTER O WITH BREVE]
+ => <= [LATIN SMALL LETTER O][COMBINING BREVE];
+[LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH DOUBLE ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN CAPITAL LETTER R WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER R WITH ACUTE]
+ => <= [LATIN SMALL LETTER R][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER R WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER R][COMBINING CEDILLA];
+[LATIN SMALL LETTER R WITH CEDILLA]
+ => <= [LATIN SMALL LETTER R][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER R WITH CARON]
+ => <= [LATIN CAPITAL LETTER R][COMBINING CARON];
+[LATIN SMALL LETTER R WITH CARON]
+ => <= [LATIN SMALL LETTER R][COMBINING CARON];
+[LATIN CAPITAL LETTER S WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER S WITH ACUTE]
+ => <= [LATIN SMALL LETTER S][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER S WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER S][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER S WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CEDILLA];
+[LATIN SMALL LETTER S WITH CEDILLA]
+ => <= [LATIN SMALL LETTER S][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER S WITH CARON]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CARON];
+[LATIN SMALL LETTER S WITH CARON]
+ => <= [LATIN SMALL LETTER S][COMBINING CARON];
+[LATIN CAPITAL LETTER T WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CEDILLA];
+[LATIN SMALL LETTER T WITH CEDILLA]
+ => <= [LATIN SMALL LETTER T][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER T WITH CARON]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CARON];
+[LATIN SMALL LETTER T WITH CARON]
+ => <= [LATIN SMALL LETTER T][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH TILDE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE];
+[LATIN SMALL LETTER U WITH TILDE]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE];
+[LATIN CAPITAL LETTER U WITH MACRON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING MACRON];
+[LATIN SMALL LETTER U WITH MACRON]
+ => <= [LATIN SMALL LETTER U][COMBINING MACRON];
+[LATIN CAPITAL LETTER U WITH BREVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING BREVE];
+[LATIN SMALL LETTER U WITH BREVE]
+ => <= [LATIN SMALL LETTER U][COMBINING BREVE];
+[LATIN CAPITAL LETTER U WITH RING ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING RING ABOVE];
+[LATIN SMALL LETTER U WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING RING ABOVE];
+[LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH DOUBLE ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER U][COMBINING OGONEK];
+[LATIN SMALL LETTER U WITH OGONEK]
+ => <= [LATIN SMALL LETTER U][COMBINING OGONEK];
+[LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER W][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER W WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER W][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER Y WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER Y][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Y WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Z WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER Z WITH ACUTE]
+ => <= [LATIN SMALL LETTER Z][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER Z WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER Z WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER Z][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER Z WITH CARON]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING CARON];
+[LATIN SMALL LETTER Z WITH CARON]
+ => <= [LATIN SMALL LETTER Z][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH HORN]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN];
+[LATIN SMALL LETTER O WITH HORN]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN];
+[LATIN CAPITAL LETTER U WITH HORN]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN];
+[LATIN SMALL LETTER U WITH HORN]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN];
+[LATIN CAPITAL LETTER A WITH CARON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CARON];
+[LATIN SMALL LETTER A WITH CARON]
+ => <= [LATIN SMALL LETTER A][COMBINING CARON];
+[LATIN CAPITAL LETTER I WITH CARON]
+ => <= [LATIN CAPITAL LETTER I][COMBINING CARON];
+[LATIN SMALL LETTER I WITH CARON]
+ => <= [LATIN SMALL LETTER I][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH CARON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CARON];
+[LATIN SMALL LETTER O WITH CARON]
+ => <= [LATIN SMALL LETTER O][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH CARON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CARON];
+[LATIN SMALL LETTER U WITH CARON]
+ => <= [LATIN SMALL LETTER U][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING CARON];
+[LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING CARON];
+[LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN CAPITAL LETTER AE WITH MACRON]
+ => <= [LATIN CAPITAL LETTER AE][COMBINING MACRON];
+[LATIN SMALL LETTER AE WITH MACRON]
+ => <= [LATIN SMALL LETTER AE][COMBINING MACRON];
+[LATIN CAPITAL LETTER G WITH CARON]
+ => <= [LATIN CAPITAL LETTER G][COMBINING CARON];
+[LATIN SMALL LETTER G WITH CARON]
+ => <= [LATIN SMALL LETTER G][COMBINING CARON];
+[LATIN CAPITAL LETTER K WITH CARON]
+ => <= [LATIN CAPITAL LETTER K][COMBINING CARON];
+[LATIN SMALL LETTER K WITH CARON]
+ => <= [LATIN SMALL LETTER K][COMBINING CARON];
+[LATIN CAPITAL LETTER O WITH OGONEK]
+ => <= [LATIN CAPITAL LETTER O][COMBINING OGONEK];
+[LATIN SMALL LETTER O WITH OGONEK]
+ => <= [LATIN SMALL LETTER O][COMBINING OGONEK];
+[LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING OGONEK][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH OGONEK AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING OGONEK][COMBINING MACRON];
+[LATIN CAPITAL LETTER EZH WITH CARON]
+ => <= [LATIN CAPITAL LETTER EZH][COMBINING CARON];
+[LATIN SMALL LETTER EZH WITH CARON]
+ => <= [LATIN SMALL LETTER EZH][COMBINING CARON];
+[LATIN SMALL LETTER J WITH CARON]
+ => <= [LATIN SMALL LETTER J][COMBINING CARON];
+[LATIN CAPITAL LETTER G WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER G][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER G WITH ACUTE]
+ => <= [LATIN SMALL LETTER G][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER N WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER N WITH GRAVE]
+ => <= [LATIN SMALL LETTER N][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING ABOVE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING RING ABOVE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER AE WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER AE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER AE WITH ACUTE]
+ => <= [LATIN SMALL LETTER AE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O WITH STROKE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH STROKE AND ACUTE]
+ => <= [LATIN SMALL LETTER O WITH STROKE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER A WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER A][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER E WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER I][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER I WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER I][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER O WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER O][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER R WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER R][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER R WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER R WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER R][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH DOUBLE GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING DOUBLE GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH INVERTED BREVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING INVERTED BREVE];
+[LATIN SMALL LETTER U WITH INVERTED BREVE]
+ => <= [LATIN SMALL LETTER U][COMBINING INVERTED BREVE];
+[LATIN CAPITAL LETTER S WITH COMMA BELOW]
+ => <= [LATIN CAPITAL LETTER S][COMBINING COMMA BELOW];
+[LATIN SMALL LETTER S WITH COMMA BELOW]
+ => <= [LATIN SMALL LETTER S][COMBINING COMMA BELOW];
+[LATIN CAPITAL LETTER T WITH COMMA BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING COMMA BELOW];
+[LATIN SMALL LETTER T WITH COMMA BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING COMMA BELOW];
+[LATIN CAPITAL LETTER H WITH CARON]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CARON];
+[LATIN SMALL LETTER H WITH CARON]
+ => <= [LATIN SMALL LETTER H][COMBINING CARON];
+[LATIN CAPITAL LETTER A WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER A WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER E WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CEDILLA];
+[LATIN SMALL LETTER E WITH CEDILLA]
+ => <= [LATIN SMALL LETTER E][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING DIAERESIS][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH TILDE AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING MACRON];
+[LATIN CAPITAL LETTER O WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER O WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT ABOVE][COMBINING MACRON];
+[LATIN CAPITAL LETTER Y WITH MACRON]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING MACRON];
+[LATIN SMALL LETTER Y WITH MACRON]
+ => <= [LATIN SMALL LETTER Y][COMBINING MACRON];
+[COMBINING GRAVE TONE MARK]
+ => <= [COMBINING GRAVE ACCENT];
+[COMBINING ACUTE TONE MARK]
+ => <= [COMBINING ACUTE ACCENT];
+[COMBINING GREEK KORONIS]
+ => <= [COMBINING COMMA ABOVE];
+[COMBINING GREEK DIALYTIKA TONOS]
+ => <= [COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH RING BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING RING BELOW];
+[LATIN SMALL LETTER A WITH RING BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING RING BELOW];
+[LATIN CAPITAL LETTER B WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER B][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER B WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER B][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER B WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER B][COMBINING DOT BELOW];
+[LATIN SMALL LETTER B WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER B][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER B WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER B][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER B WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER B][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+ => <= [LATIN CAPITAL LETTER C][COMBINING CEDILLA][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+ => <= [LATIN SMALL LETTER C][COMBINING CEDILLA][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER D WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER D][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER D WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER D][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER D WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING DOT BELOW];
+[LATIN SMALL LETTER D WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER D WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER D WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER D WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CEDILLA];
+[LATIN SMALL LETTER D WITH CEDILLA]
+ => <= [LATIN SMALL LETTER D][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER E WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER E WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CEDILLA][COMBINING BREVE];
+[LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CEDILLA][COMBINING BREVE];
+[LATIN CAPITAL LETTER F WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER F][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER F WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER F][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER G WITH MACRON]
+ => <= [LATIN CAPITAL LETTER G][COMBINING MACRON];
+[LATIN SMALL LETTER G WITH MACRON]
+ => <= [LATIN SMALL LETTER G][COMBINING MACRON];
+[LATIN CAPITAL LETTER H WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER H WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER H][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER H WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DOT BELOW];
+[LATIN SMALL LETTER H WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER H WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER H][COMBINING DIAERESIS];
+[LATIN SMALL LETTER H WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER H][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER H WITH CEDILLA]
+ => <= [LATIN CAPITAL LETTER H][COMBINING CEDILLA];
+[LATIN SMALL LETTER H WITH CEDILLA]
+ => <= [LATIN SMALL LETTER H][COMBINING CEDILLA];
+[LATIN CAPITAL LETTER H WITH BREVE BELOW]
+ => <= [LATIN CAPITAL LETTER H][COMBINING BREVE BELOW];
+[LATIN SMALL LETTER H WITH BREVE BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING BREVE BELOW];
+[LATIN CAPITAL LETTER I WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER I][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER I WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER I][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+ => <= [LATIN SMALL LETTER I][COMBINING DIAERESIS][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER K WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER K][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER K WITH ACUTE]
+ => <= [LATIN SMALL LETTER K][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER K WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER K][COMBINING DOT BELOW];
+[LATIN SMALL LETTER K WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER K][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER K WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER K][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER K WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER K][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER L WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING DOT BELOW];
+[LATIN SMALL LETTER L WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+ => <= [LATIN CAPITAL LETTER L][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+ => <= [LATIN SMALL LETTER L][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN CAPITAL LETTER L WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER L WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER M WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER M][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER M WITH ACUTE]
+ => <= [LATIN SMALL LETTER M][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER M WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER M][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER M WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER M][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER M WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER M][COMBINING DOT BELOW];
+[LATIN SMALL LETTER M WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER M][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER N WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER N][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER N WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER N][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER N WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING DOT BELOW];
+[LATIN SMALL LETTER N WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER N WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER N WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH TILDE AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
+ => <= [LATIN CAPITAL LETTER O][COMBINING TILDE][COMBINING DIAERESIS];
+[LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
+ => <= [LATIN SMALL LETTER O][COMBINING TILDE][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH MACRON AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH MACRON AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING MACRON][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER P WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER P][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER P WITH ACUTE]
+ => <= [LATIN SMALL LETTER P][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER P WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER P][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER P WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER P][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER R WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER R WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER R WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT BELOW];
+[LATIN SMALL LETTER R WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
+ => <= [LATIN CAPITAL LETTER R][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
+ => <= [LATIN SMALL LETTER R][COMBINING DOT BELOW][COMBINING MACRON];
+[LATIN CAPITAL LETTER R WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER R][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER R WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER R][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER S WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT BELOW];
+[LATIN SMALL LETTER S WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING ACUTE ACCENT][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING CARON][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING CARON][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER S][COMBINING DOT BELOW][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
+ => <= [LATIN SMALL LETTER S][COMBINING DOT BELOW][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER T WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER T][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER T WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER T][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER T WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING DOT BELOW];
+[LATIN SMALL LETTER T WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER T WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER T WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING MACRON BELOW];
+[LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DIAERESIS BELOW];
+[LATIN SMALL LETTER U WITH DIAERESIS BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING DIAERESIS BELOW];
+[LATIN CAPITAL LETTER U WITH TILDE BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE BELOW];
+[LATIN SMALL LETTER U WITH TILDE BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE BELOW];
+[LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW];
+[LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH TILDE AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING TILDE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
+ => <= [LATIN CAPITAL LETTER U][COMBINING MACRON][COMBINING DIAERESIS];
+[LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
+ => <= [LATIN SMALL LETTER U][COMBINING MACRON][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER V WITH TILDE]
+ => <= [LATIN CAPITAL LETTER V][COMBINING TILDE];
+[LATIN SMALL LETTER V WITH TILDE]
+ => <= [LATIN SMALL LETTER V][COMBINING TILDE];
+[LATIN CAPITAL LETTER V WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER V][COMBINING DOT BELOW];
+[LATIN SMALL LETTER V WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER V][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER W WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER W WITH GRAVE]
+ => <= [LATIN SMALL LETTER W][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER W WITH ACUTE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER W WITH ACUTE]
+ => <= [LATIN SMALL LETTER W][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER W WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DIAERESIS];
+[LATIN SMALL LETTER W WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER W][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER W WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER W WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER W][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER W WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER W][COMBINING DOT BELOW];
+[LATIN SMALL LETTER W WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER W][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER X WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER X][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER X WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER X][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER X WITH DIAERESIS]
+ => <= [LATIN CAPITAL LETTER X][COMBINING DIAERESIS];
+[LATIN SMALL LETTER X WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER X][COMBINING DIAERESIS];
+[LATIN CAPITAL LETTER Y WITH DOT ABOVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DOT ABOVE];
+[LATIN SMALL LETTER Y WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER Z WITH CIRCUMFLEX]
+ => <= [LATIN SMALL LETTER Z][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER Z WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING DOT BELOW];
+[LATIN SMALL LETTER Z WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER Z][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Z WITH LINE BELOW]
+ => <= [LATIN CAPITAL LETTER Z][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER Z WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER Z][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER H WITH LINE BELOW]
+ => <= [LATIN SMALL LETTER H][COMBINING MACRON BELOW];
+[LATIN SMALL LETTER T WITH DIAERESIS]
+ => <= [LATIN SMALL LETTER T][COMBINING DIAERESIS];
+[LATIN SMALL LETTER W WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER W][COMBINING RING ABOVE];
+[LATIN SMALL LETTER Y WITH RING ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING RING ABOVE];
+[LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+ => <= [LATIN SMALL LETTER LONG S][COMBINING DOT ABOVE];
+[LATIN CAPITAL LETTER A WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW];
+[LATIN SMALL LETTER A WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+ => <= [LATIN CAPITAL LETTER A][COMBINING BREVE][COMBINING TILDE];
+[LATIN SMALL LETTER A WITH BREVE AND TILDE]
+ => <= [LATIN SMALL LETTER A][COMBINING BREVE][COMBINING TILDE];
+[LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER A][COMBINING DOT BELOW][COMBINING BREVE];
+[LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+ => <= [LATIN SMALL LETTER A][COMBINING DOT BELOW][COMBINING BREVE];
+[LATIN CAPITAL LETTER E WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT BELOW];
+[LATIN SMALL LETTER E WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER E WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER E WITH TILDE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING TILDE];
+[LATIN SMALL LETTER E WITH TILDE]
+ => <= [LATIN SMALL LETTER E][COMBINING TILDE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER E][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER E][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER I][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER I WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER I][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER I WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER I][COMBINING DOT BELOW];
+[LATIN SMALL LETTER I WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER I][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER O WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT BELOW];
+[LATIN SMALL LETTER O WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER O WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING DOT BELOW][COMBINING CIRCUMFLEX ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER O WITH HORN AND ACUTE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER O WITH HORN AND GRAVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER O WITH HORN AND TILDE]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING TILDE];
+[LATIN SMALL LETTER O WITH HORN AND TILDE]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING TILDE];
+[LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER O][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
+ => <= [LATIN SMALL LETTER O][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER U WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING DOT BELOW];
+[LATIN SMALL LETTER U WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER U WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER U WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN SMALL LETTER U WITH HORN AND ACUTE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING ACUTE ACCENT];
+[LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER U WITH HORN AND GRAVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER U WITH HORN AND TILDE]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING TILDE];
+[LATIN SMALL LETTER U WITH HORN AND TILDE]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING TILDE];
+[LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
+ => <= [LATIN CAPITAL LETTER U][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
+ => <= [LATIN SMALL LETTER U][COMBINING HORN][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Y WITH GRAVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING GRAVE ACCENT];
+[LATIN SMALL LETTER Y WITH GRAVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING GRAVE ACCENT];
+[LATIN CAPITAL LETTER Y WITH DOT BELOW]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING DOT BELOW];
+[LATIN SMALL LETTER Y WITH DOT BELOW]
+ => <= [LATIN SMALL LETTER Y][COMBINING DOT BELOW];
+[LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING HOOK ABOVE];
+[LATIN SMALL LETTER Y WITH HOOK ABOVE]
+ => <= [LATIN SMALL LETTER Y][COMBINING HOOK ABOVE];
+[LATIN CAPITAL LETTER Y WITH TILDE]
+ => <= [LATIN CAPITAL LETTER Y][COMBINING TILDE];
+[LATIN SMALL LETTER Y WITH TILDE]
+ => <= [LATIN SMALL LETTER Y][COMBINING TILDE];
+[EN QUAD]
+ => <= [EN SPACE];
+[EM QUAD]
+ => <= [EM SPACE];
diff --git a/macros/latex/exptl/mem/Mtp/ula-rec.mtp b/macros/latex/exptl/mem/Mtp/ula-rec.mtp
new file mode 100644
index 0000000000..c86a02e159
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/ula-rec.mtp
@@ -0,0 +1,573 @@
+% (c) 2001-2004 Javier Bezos
+
+input: 2;
+output: 2;
+
+states: acc;
+
+aliases:
+
+topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);
+botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);
+overaccent = (@"0334-@"0338);
+accent = (@"0300-@"0345);
+
+expressions:
+
+
+
+% Recompose available symbols
+
+[LATIN CAPITAL LETTER A][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER A WITH GRAVE] ;
+[LATIN CAPITAL LETTER A][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER A WITH ACUTE] ;
+[LATIN CAPITAL LETTER A][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER A][COMBINING TILDE] => <= [LATIN CAPITAL LETTER A WITH TILDE] ;
+[LATIN CAPITAL LETTER A][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER A WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER A][COMBINING RING ABOVE] => <= [LATIN CAPITAL LETTER A WITH RING ABOVE] ;
+[LATIN CAPITAL LETTER C][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER C WITH CEDILLA] ;
+[LATIN CAPITAL LETTER E][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER E WITH GRAVE] ;
+[LATIN CAPITAL LETTER E][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER E WITH ACUTE] ;
+[LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER E][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER E WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER I][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER I WITH GRAVE] ;
+[LATIN CAPITAL LETTER I][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER I WITH ACUTE] ;
+[LATIN CAPITAL LETTER I][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER I WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER I][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER I WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER N][COMBINING TILDE] => <= [LATIN CAPITAL LETTER N WITH TILDE] ;
+[LATIN CAPITAL LETTER O][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER O WITH GRAVE] ;
+[LATIN CAPITAL LETTER O][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH ACUTE] ;
+[LATIN CAPITAL LETTER O][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER O][COMBINING TILDE] => <= [LATIN CAPITAL LETTER O WITH TILDE] ;
+[LATIN CAPITAL LETTER O][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER O WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER U][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER U WITH GRAVE] ;
+[LATIN CAPITAL LETTER U][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH ACUTE] ;
+[LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER U WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER U][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER Y][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER Y WITH ACUTE] ;
+[LATIN SMALL LETTER A][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER A WITH GRAVE] ;
+[LATIN SMALL LETTER A][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER A WITH ACUTE] ;
+[LATIN SMALL LETTER A][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER A][COMBINING TILDE] => <= [LATIN SMALL LETTER A WITH TILDE] ;
+[LATIN SMALL LETTER A][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER A WITH DIAERESIS] ;
+[LATIN SMALL LETTER A][COMBINING RING ABOVE] => <= [LATIN SMALL LETTER A WITH RING ABOVE] ;
+[LATIN SMALL LETTER C][COMBINING CEDILLA] => <= [LATIN SMALL LETTER C WITH CEDILLA] ;
+[LATIN SMALL LETTER E][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER E WITH GRAVE] ;
+[LATIN SMALL LETTER E][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER E WITH ACUTE] ;
+[LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER E][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER E WITH DIAERESIS] ;
+[LATIN SMALL LETTER I][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER I WITH GRAVE] ;
+[LATIN SMALL LETTER I][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER I WITH ACUTE] ;
+[LATIN SMALL LETTER I][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER I WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER I][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER I WITH DIAERESIS] ;
+[LATIN SMALL LETTER N][COMBINING TILDE] => <= [LATIN SMALL LETTER N WITH TILDE] ;
+[LATIN SMALL LETTER O][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER O WITH GRAVE] ;
+[LATIN SMALL LETTER O][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH ACUTE] ;
+[LATIN SMALL LETTER O][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER O][COMBINING TILDE] => <= [LATIN SMALL LETTER O WITH TILDE] ;
+[LATIN SMALL LETTER O][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER O WITH DIAERESIS] ;
+[LATIN SMALL LETTER U][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER U WITH GRAVE] ;
+[LATIN SMALL LETTER U][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH ACUTE] ;
+[LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER U WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER U][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER U WITH DIAERESIS] ;
+[LATIN SMALL LETTER Y][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER Y WITH ACUTE] ;
+[LATIN SMALL LETTER Y][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER Y WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER A][COMBINING MACRON] => <= [LATIN CAPITAL LETTER A WITH MACRON] ;
+[LATIN SMALL LETTER A][COMBINING MACRON] => <= [LATIN SMALL LETTER A WITH MACRON] ;
+[LATIN CAPITAL LETTER A][COMBINING BREVE] => <= [LATIN CAPITAL LETTER A WITH BREVE] ;
+[LATIN SMALL LETTER A][COMBINING BREVE] => <= [LATIN SMALL LETTER A WITH BREVE] ;
+[LATIN CAPITAL LETTER A][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER A WITH OGONEK] ;
+[LATIN SMALL LETTER A][COMBINING OGONEK] => <= [LATIN SMALL LETTER A WITH OGONEK] ;
+[LATIN CAPITAL LETTER C][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER C WITH ACUTE] ;
+[LATIN SMALL LETTER C][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER C WITH ACUTE] ;
+[LATIN CAPITAL LETTER C][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER C WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER C][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER C WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER C][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER C WITH DOT ABOVE] ;
+[LATIN SMALL LETTER C][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER C WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER C][COMBINING CARON] => <= [LATIN CAPITAL LETTER C WITH CARON] ;
+[LATIN SMALL LETTER C][COMBINING CARON] => <= [LATIN SMALL LETTER C WITH CARON] ;
+[LATIN CAPITAL LETTER D][COMBINING CARON] => <= [LATIN CAPITAL LETTER D WITH CARON] ;
+[LATIN SMALL LETTER D][COMBINING CARON] => <= [LATIN SMALL LETTER D WITH CARON] ;
+[LATIN CAPITAL LETTER E][COMBINING MACRON] => <= [LATIN CAPITAL LETTER E WITH MACRON] ;
+[LATIN SMALL LETTER E][COMBINING MACRON] => <= [LATIN SMALL LETTER E WITH MACRON] ;
+[LATIN CAPITAL LETTER E][COMBINING BREVE] => <= [LATIN CAPITAL LETTER E WITH BREVE] ;
+[LATIN SMALL LETTER E][COMBINING BREVE] => <= [LATIN SMALL LETTER E WITH BREVE] ;
+[LATIN CAPITAL LETTER E][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER E WITH DOT ABOVE] ;
+[LATIN SMALL LETTER E][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER E WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER E][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER E WITH OGONEK] ;
+[LATIN SMALL LETTER E][COMBINING OGONEK] => <= [LATIN SMALL LETTER E WITH OGONEK] ;
+[LATIN CAPITAL LETTER E][COMBINING CARON] => <= [LATIN CAPITAL LETTER E WITH CARON] ;
+[LATIN SMALL LETTER E][COMBINING CARON] => <= [LATIN SMALL LETTER E WITH CARON] ;
+[LATIN CAPITAL LETTER G][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER G WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER G][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER G WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER G][COMBINING BREVE] => <= [LATIN CAPITAL LETTER G WITH BREVE] ;
+[LATIN SMALL LETTER G][COMBINING BREVE] => <= [LATIN SMALL LETTER G WITH BREVE] ;
+[LATIN CAPITAL LETTER G][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER G WITH DOT ABOVE] ;
+[LATIN SMALL LETTER G][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER G WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER G][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER G WITH CEDILLA] ;
+[LATIN SMALL LETTER G][COMBINING CEDILLA] => <= [LATIN SMALL LETTER G WITH CEDILLA] ;
+[LATIN CAPITAL LETTER H][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER H WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER H][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER H WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER I][COMBINING TILDE] => <= [LATIN CAPITAL LETTER I WITH TILDE] ;
+[LATIN SMALL LETTER I][COMBINING TILDE] => <= [LATIN SMALL LETTER I WITH TILDE] ;
+[LATIN CAPITAL LETTER I][COMBINING MACRON] => <= [LATIN CAPITAL LETTER I WITH MACRON] ;
+[LATIN SMALL LETTER I][COMBINING MACRON] => <= [LATIN SMALL LETTER I WITH MACRON] ;
+[LATIN CAPITAL LETTER I][COMBINING BREVE] => <= [LATIN CAPITAL LETTER I WITH BREVE] ;
+[LATIN SMALL LETTER I][COMBINING BREVE] => <= [LATIN SMALL LETTER I WITH BREVE] ;
+[LATIN CAPITAL LETTER I][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER I WITH OGONEK] ;
+[LATIN SMALL LETTER I][COMBINING OGONEK] => <= [LATIN SMALL LETTER I WITH OGONEK] ;
+[LATIN CAPITAL LETTER I][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER I WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER J][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER J WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER J][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER J WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER K][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER K WITH CEDILLA] ;
+[LATIN SMALL LETTER K][COMBINING CEDILLA] => <= [LATIN SMALL LETTER K WITH CEDILLA] ;
+[LATIN CAPITAL LETTER L][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER L WITH ACUTE] ;
+[LATIN SMALL LETTER L][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER L WITH ACUTE] ;
+[LATIN CAPITAL LETTER L][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER L WITH CEDILLA] ;
+[LATIN SMALL LETTER L][COMBINING CEDILLA] => <= [LATIN SMALL LETTER L WITH CEDILLA] ;
+[LATIN CAPITAL LETTER L][COMBINING CARON] => <= [LATIN CAPITAL LETTER L WITH CARON] ;
+[LATIN SMALL LETTER L][COMBINING CARON] => <= [LATIN SMALL LETTER L WITH CARON] ;
+[LATIN CAPITAL LETTER N][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER N WITH ACUTE] ;
+[LATIN SMALL LETTER N][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER N WITH ACUTE] ;
+[LATIN CAPITAL LETTER N][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER N WITH CEDILLA] ;
+[LATIN SMALL LETTER N][COMBINING CEDILLA] => <= [LATIN SMALL LETTER N WITH CEDILLA] ;
+[LATIN CAPITAL LETTER N][COMBINING CARON] => <= [LATIN CAPITAL LETTER N WITH CARON] ;
+[LATIN SMALL LETTER N][COMBINING CARON] => <= [LATIN SMALL LETTER N WITH CARON] ;
+[LATIN CAPITAL LETTER O][COMBINING MACRON] => <= [LATIN CAPITAL LETTER O WITH MACRON] ;
+[LATIN SMALL LETTER O][COMBINING MACRON] => <= [LATIN SMALL LETTER O WITH MACRON] ;
+[LATIN CAPITAL LETTER O][COMBINING BREVE] => <= [LATIN CAPITAL LETTER O WITH BREVE] ;
+[LATIN SMALL LETTER O][COMBINING BREVE] => <= [LATIN SMALL LETTER O WITH BREVE] ;
+[LATIN CAPITAL LETTER O][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE] ;
+[LATIN SMALL LETTER O][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH DOUBLE ACUTE] ;
+[LATIN CAPITAL LETTER R][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER R WITH ACUTE] ;
+[LATIN SMALL LETTER R][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER R WITH ACUTE] ;
+[LATIN CAPITAL LETTER R][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER R WITH CEDILLA] ;
+[LATIN SMALL LETTER R][COMBINING CEDILLA] => <= [LATIN SMALL LETTER R WITH CEDILLA] ;
+[LATIN CAPITAL LETTER R][COMBINING CARON] => <= [LATIN CAPITAL LETTER R WITH CARON] ;
+[LATIN SMALL LETTER R][COMBINING CARON] => <= [LATIN SMALL LETTER R WITH CARON] ;
+[LATIN CAPITAL LETTER S][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER S WITH ACUTE] ;
+[LATIN SMALL LETTER S][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER S WITH ACUTE] ;
+[LATIN CAPITAL LETTER S][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER S WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER S][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER S WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER S][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER S WITH CEDILLA] ;
+[LATIN SMALL LETTER S][COMBINING CEDILLA] => <= [LATIN SMALL LETTER S WITH CEDILLA] ;
+[LATIN CAPITAL LETTER S][COMBINING CARON] => <= [LATIN CAPITAL LETTER S WITH CARON] ;
+[LATIN SMALL LETTER S][COMBINING CARON] => <= [LATIN SMALL LETTER S WITH CARON] ;
+[LATIN CAPITAL LETTER T][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER T WITH CEDILLA] ;
+[LATIN SMALL LETTER T][COMBINING CEDILLA] => <= [LATIN SMALL LETTER T WITH CEDILLA] ;
+[LATIN CAPITAL LETTER T][COMBINING CARON] => <= [LATIN CAPITAL LETTER T WITH CARON] ;
+[LATIN SMALL LETTER T][COMBINING CARON] => <= [LATIN SMALL LETTER T WITH CARON] ;
+[LATIN CAPITAL LETTER U][COMBINING TILDE] => <= [LATIN CAPITAL LETTER U WITH TILDE] ;
+[LATIN SMALL LETTER U][COMBINING TILDE] => <= [LATIN SMALL LETTER U WITH TILDE] ;
+[LATIN CAPITAL LETTER U][COMBINING MACRON] => <= [LATIN CAPITAL LETTER U WITH MACRON] ;
+[LATIN SMALL LETTER U][COMBINING MACRON] => <= [LATIN SMALL LETTER U WITH MACRON] ;
+[LATIN CAPITAL LETTER U][COMBINING BREVE] => <= [LATIN CAPITAL LETTER U WITH BREVE] ;
+[LATIN SMALL LETTER U][COMBINING BREVE] => <= [LATIN SMALL LETTER U WITH BREVE] ;
+[LATIN CAPITAL LETTER U][COMBINING RING ABOVE] => <= [LATIN CAPITAL LETTER U WITH RING ABOVE] ;
+[LATIN SMALL LETTER U][COMBINING RING ABOVE] => <= [LATIN SMALL LETTER U WITH RING ABOVE] ;
+[LATIN CAPITAL LETTER U][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE] ;
+[LATIN SMALL LETTER U][COMBINING DOUBLE ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH DOUBLE ACUTE] ;
+[LATIN CAPITAL LETTER U][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER U WITH OGONEK] ;
+[LATIN SMALL LETTER U][COMBINING OGONEK] => <= [LATIN SMALL LETTER U WITH OGONEK] ;
+[LATIN CAPITAL LETTER W][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER W WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER W][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER W WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER Y][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER Y][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER Y WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER Y][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER Y WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER Z][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER Z WITH ACUTE] ;
+[LATIN SMALL LETTER Z][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER Z WITH ACUTE] ;
+[LATIN CAPITAL LETTER Z][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER Z WITH DOT ABOVE] ;
+[LATIN SMALL LETTER Z][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER Z WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER Z][COMBINING CARON] => <= [LATIN CAPITAL LETTER Z WITH CARON] ;
+[LATIN SMALL LETTER Z][COMBINING CARON] => <= [LATIN SMALL LETTER Z WITH CARON] ;
+[LATIN CAPITAL LETTER O][COMBINING HORN] => <= [LATIN CAPITAL LETTER O WITH HORN] ;
+[LATIN SMALL LETTER O][COMBINING HORN] => <= [LATIN SMALL LETTER O WITH HORN] ;
+[LATIN CAPITAL LETTER U][COMBINING HORN] => <= [LATIN CAPITAL LETTER U WITH HORN] ;
+[LATIN SMALL LETTER U][COMBINING HORN] => <= [LATIN SMALL LETTER U WITH HORN] ;
+[LATIN CAPITAL LETTER A][COMBINING CARON] => <= [LATIN CAPITAL LETTER A WITH CARON] ;
+[LATIN SMALL LETTER A][COMBINING CARON] => <= [LATIN SMALL LETTER A WITH CARON] ;
+[LATIN CAPITAL LETTER I][COMBINING CARON] => <= [LATIN CAPITAL LETTER I WITH CARON] ;
+[LATIN SMALL LETTER I][COMBINING CARON] => <= [LATIN SMALL LETTER I WITH CARON] ;
+[LATIN CAPITAL LETTER O][COMBINING CARON] => <= [LATIN CAPITAL LETTER O WITH CARON] ;
+[LATIN SMALL LETTER O][COMBINING CARON] => <= [LATIN SMALL LETTER O WITH CARON] ;
+[LATIN CAPITAL LETTER U][COMBINING CARON] => <= [LATIN CAPITAL LETTER U WITH CARON] ;
+[LATIN SMALL LETTER U][COMBINING CARON] => <= [LATIN SMALL LETTER U WITH CARON] ;
+[LATIN CAPITAL LETTER U WITH DIAERESIS][COMBINING MACRON] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON] ;
+[LATIN SMALL LETTER U WITH DIAERESIS][COMBINING MACRON] => <= [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON] ;
+[LATIN CAPITAL LETTER U WITH DIAERESIS][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE] ;
+[LATIN SMALL LETTER U WITH DIAERESIS][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE] ;
+[LATIN CAPITAL LETTER U WITH DIAERESIS][COMBINING CARON] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON] ;
+[LATIN SMALL LETTER U WITH DIAERESIS][COMBINING CARON] => <= [LATIN SMALL LETTER U WITH DIAERESIS AND CARON] ;
+[LATIN CAPITAL LETTER U WITH DIAERESIS][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE] ;
+[LATIN SMALL LETTER U WITH DIAERESIS][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE] ;
+[LATIN CAPITAL LETTER A WITH DIAERESIS][COMBINING MACRON] => <= [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON] ;
+[LATIN SMALL LETTER A WITH DIAERESIS][COMBINING MACRON] => <= [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON] ;
+[LATIN CAPITAL LETTER A WITH DOT ABOVE][COMBINING MACRON] => <= [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON] ;
+[LATIN SMALL LETTER A WITH DOT ABOVE][COMBINING MACRON] => <= [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON] ;
+[LATIN CAPITAL LETTER AE][COMBINING MACRON] => <= [LATIN CAPITAL LETTER AE WITH MACRON] ;
+[LATIN SMALL LETTER AE][COMBINING MACRON] => <= [LATIN SMALL LETTER AE WITH MACRON] ;
+[LATIN CAPITAL LETTER G][COMBINING CARON] => <= [LATIN CAPITAL LETTER G WITH CARON] ;
+[LATIN SMALL LETTER G][COMBINING CARON] => <= [LATIN SMALL LETTER G WITH CARON] ;
+[LATIN CAPITAL LETTER K][COMBINING CARON] => <= [LATIN CAPITAL LETTER K WITH CARON] ;
+[LATIN SMALL LETTER K][COMBINING CARON] => <= [LATIN SMALL LETTER K WITH CARON] ;
+[LATIN CAPITAL LETTER O][COMBINING OGONEK] => <= [LATIN CAPITAL LETTER O WITH OGONEK] ;
+[LATIN SMALL LETTER O][COMBINING OGONEK] => <= [LATIN SMALL LETTER O WITH OGONEK] ;
+[LATIN CAPITAL LETTER O WITH OGONEK][COMBINING MACRON] => <= [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON] ;
+[LATIN SMALL LETTER O WITH OGONEK][COMBINING MACRON] => <= [LATIN SMALL LETTER O WITH OGONEK AND MACRON] ;
+[LATIN CAPITAL LETTER EZH][COMBINING CARON] => <= [LATIN CAPITAL LETTER EZH WITH CARON] ;
+[LATIN SMALL LETTER EZH][COMBINING CARON] => <= [LATIN SMALL LETTER EZH WITH CARON] ;
+[LATIN SMALL LETTER J][COMBINING CARON] => <= [LATIN SMALL LETTER J WITH CARON] ;
+[LATIN CAPITAL LETTER G][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER G WITH ACUTE] ;
+[LATIN SMALL LETTER G][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER G WITH ACUTE] ;
+[LATIN CAPITAL LETTER N][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER N WITH GRAVE] ;
+[LATIN SMALL LETTER N][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER N WITH GRAVE] ;
+[LATIN CAPITAL LETTER A WITH RING ABOVE][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE] ;
+[LATIN SMALL LETTER A WITH RING ABOVE][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE] ;
+[LATIN CAPITAL LETTER AE][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER AE WITH ACUTE] ;
+[LATIN SMALL LETTER AE][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER AE WITH ACUTE] ;
+[LATIN CAPITAL LETTER O WITH STROKE][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE] ;
+[LATIN SMALL LETTER O WITH STROKE][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH STROKE AND ACUTE] ;
+[LATIN CAPITAL LETTER A][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE] ;
+[LATIN SMALL LETTER A][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN SMALL LETTER A WITH DOUBLE GRAVE] ;
+[LATIN CAPITAL LETTER A][COMBINING INVERTED BREVE] => <= [LATIN CAPITAL LETTER A WITH INVERTED BREVE] ;
+[LATIN SMALL LETTER A][COMBINING INVERTED BREVE] => <= [LATIN SMALL LETTER A WITH INVERTED BREVE] ;
+[LATIN CAPITAL LETTER E][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE] ;
+[LATIN SMALL LETTER E][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN SMALL LETTER E WITH DOUBLE GRAVE] ;
+[LATIN CAPITAL LETTER E][COMBINING INVERTED BREVE] => <= [LATIN CAPITAL LETTER E WITH INVERTED BREVE] ;
+[LATIN SMALL LETTER E][COMBINING INVERTED BREVE] => <= [LATIN SMALL LETTER E WITH INVERTED BREVE] ;
+[LATIN CAPITAL LETTER I][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE] ;
+[LATIN SMALL LETTER I][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN SMALL LETTER I WITH DOUBLE GRAVE] ;
+[LATIN CAPITAL LETTER I][COMBINING INVERTED BREVE] => <= [LATIN CAPITAL LETTER I WITH INVERTED BREVE] ;
+[LATIN SMALL LETTER I][COMBINING INVERTED BREVE] => <= [LATIN SMALL LETTER I WITH INVERTED BREVE] ;
+[LATIN CAPITAL LETTER O][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE] ;
+[LATIN SMALL LETTER O][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN SMALL LETTER O WITH DOUBLE GRAVE] ;
+[LATIN CAPITAL LETTER O][COMBINING INVERTED BREVE] => <= [LATIN CAPITAL LETTER O WITH INVERTED BREVE] ;
+[LATIN SMALL LETTER O][COMBINING INVERTED BREVE] => <= [LATIN SMALL LETTER O WITH INVERTED BREVE] ;
+[LATIN CAPITAL LETTER R][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE] ;
+[LATIN SMALL LETTER R][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN SMALL LETTER R WITH DOUBLE GRAVE] ;
+[LATIN CAPITAL LETTER R][COMBINING INVERTED BREVE] => <= [LATIN CAPITAL LETTER R WITH INVERTED BREVE] ;
+[LATIN SMALL LETTER R][COMBINING INVERTED BREVE] => <= [LATIN SMALL LETTER R WITH INVERTED BREVE] ;
+[LATIN CAPITAL LETTER U][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE] ;
+[LATIN SMALL LETTER U][COMBINING DOUBLE GRAVE ACCENT] => <= [LATIN SMALL LETTER U WITH DOUBLE GRAVE] ;
+[LATIN CAPITAL LETTER U][COMBINING INVERTED BREVE] => <= [LATIN CAPITAL LETTER U WITH INVERTED BREVE] ;
+[LATIN SMALL LETTER U][COMBINING INVERTED BREVE] => <= [LATIN SMALL LETTER U WITH INVERTED BREVE] ;
+[LATIN CAPITAL LETTER S][COMBINING COMMA BELOW] => <= [LATIN CAPITAL LETTER S WITH COMMA BELOW] ;
+[LATIN SMALL LETTER S][COMBINING COMMA BELOW] => <= [LATIN SMALL LETTER S WITH COMMA BELOW] ;
+[LATIN CAPITAL LETTER T][COMBINING COMMA BELOW] => <= [LATIN CAPITAL LETTER T WITH COMMA BELOW] ;
+[LATIN SMALL LETTER T][COMBINING COMMA BELOW] => <= [LATIN SMALL LETTER T WITH COMMA BELOW] ;
+[LATIN CAPITAL LETTER H][COMBINING CARON] => <= [LATIN CAPITAL LETTER H WITH CARON] ;
+[LATIN SMALL LETTER H][COMBINING CARON] => <= [LATIN SMALL LETTER H WITH CARON] ;
+[LATIN CAPITAL LETTER A][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER A WITH DOT ABOVE] ;
+[LATIN SMALL LETTER A][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER A WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER E][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER E WITH CEDILLA] ;
+[LATIN SMALL LETTER E][COMBINING CEDILLA] => <= [LATIN SMALL LETTER E WITH CEDILLA] ;
+[LATIN CAPITAL LETTER O WITH DIAERESIS][COMBINING MACRON] => <= [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON] ;
+[LATIN SMALL LETTER O WITH DIAERESIS][COMBINING MACRON] => <= [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON] ;
+[LATIN CAPITAL LETTER O WITH TILDE][COMBINING MACRON] => <= [LATIN CAPITAL LETTER O WITH TILDE AND MACRON] ;
+[LATIN SMALL LETTER O WITH TILDE][COMBINING MACRON] => <= [LATIN SMALL LETTER O WITH TILDE AND MACRON] ;
+[LATIN CAPITAL LETTER O][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER O WITH DOT ABOVE] ;
+[LATIN SMALL LETTER O][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER O WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER O WITH DOT ABOVE][COMBINING MACRON] => <= [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON] ;
+[LATIN SMALL LETTER O WITH DOT ABOVE][COMBINING MACRON] => <= [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON] ;
+[LATIN CAPITAL LETTER Y][COMBINING MACRON] => <= [LATIN CAPITAL LETTER Y WITH MACRON] ;
+[LATIN SMALL LETTER Y][COMBINING MACRON] => <= [LATIN SMALL LETTER Y WITH MACRON] ;
+[LATIN CAPITAL LETTER A][COMBINING RING BELOW] => <= [LATIN CAPITAL LETTER A WITH RING BELOW] ;
+[LATIN SMALL LETTER A][COMBINING RING BELOW] => <= [LATIN SMALL LETTER A WITH RING BELOW] ;
+[LATIN CAPITAL LETTER B][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER B WITH DOT ABOVE] ;
+[LATIN SMALL LETTER B][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER B WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER B][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER B WITH DOT BELOW] ;
+[LATIN SMALL LETTER B][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER B WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER B][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER B WITH LINE BELOW] ;
+[LATIN SMALL LETTER B][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER B WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER C WITH CEDILLA][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE] ;
+[LATIN SMALL LETTER C WITH CEDILLA][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE] ;
+[LATIN CAPITAL LETTER D][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER D WITH DOT ABOVE] ;
+[LATIN SMALL LETTER D][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER D WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER D][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER D WITH DOT BELOW] ;
+[LATIN SMALL LETTER D][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER D WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER D][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER D WITH LINE BELOW] ;
+[LATIN SMALL LETTER D][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER D WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER D][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER D WITH CEDILLA] ;
+[LATIN SMALL LETTER D][COMBINING CEDILLA] => <= [LATIN SMALL LETTER D WITH CEDILLA] ;
+[LATIN CAPITAL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW] ;
+[LATIN SMALL LETTER D][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW] ;
+[LATIN CAPITAL LETTER E WITH MACRON][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE] ;
+[LATIN SMALL LETTER E WITH MACRON][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER E WITH MACRON AND GRAVE] ;
+[LATIN CAPITAL LETTER E WITH MACRON][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE] ;
+[LATIN SMALL LETTER E WITH MACRON][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER E WITH MACRON AND ACUTE] ;
+[LATIN CAPITAL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW] ;
+[LATIN SMALL LETTER E][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW] ;
+[LATIN CAPITAL LETTER E][COMBINING TILDE BELOW] => <= [LATIN CAPITAL LETTER E WITH TILDE BELOW] ;
+[LATIN SMALL LETTER E][COMBINING TILDE BELOW] => <= [LATIN SMALL LETTER E WITH TILDE BELOW] ;
+[LATIN CAPITAL LETTER E WITH CEDILLA][COMBINING BREVE] => <= [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE] ;
+[LATIN SMALL LETTER E WITH CEDILLA][COMBINING BREVE] => <= [LATIN SMALL LETTER E WITH CEDILLA AND BREVE] ;
+[LATIN CAPITAL LETTER F][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER F WITH DOT ABOVE] ;
+[LATIN SMALL LETTER F][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER F WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER G][COMBINING MACRON] => <= [LATIN CAPITAL LETTER G WITH MACRON] ;
+[LATIN SMALL LETTER G][COMBINING MACRON] => <= [LATIN SMALL LETTER G WITH MACRON] ;
+[LATIN CAPITAL LETTER H][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER H WITH DOT ABOVE] ;
+[LATIN SMALL LETTER H][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER H WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER H][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER H WITH DOT BELOW] ;
+[LATIN SMALL LETTER H][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER H WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER H][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER H WITH DIAERESIS] ;
+[LATIN SMALL LETTER H][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER H WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER H][COMBINING CEDILLA] => <= [LATIN CAPITAL LETTER H WITH CEDILLA] ;
+[LATIN SMALL LETTER H][COMBINING CEDILLA] => <= [LATIN SMALL LETTER H WITH CEDILLA] ;
+[LATIN CAPITAL LETTER H][COMBINING BREVE BELOW] => <= [LATIN CAPITAL LETTER H WITH BREVE BELOW] ;
+[LATIN SMALL LETTER H][COMBINING BREVE BELOW] => <= [LATIN SMALL LETTER H WITH BREVE BELOW] ;
+[LATIN CAPITAL LETTER I][COMBINING TILDE BELOW] => <= [LATIN CAPITAL LETTER I WITH TILDE BELOW] ;
+[LATIN SMALL LETTER I][COMBINING TILDE BELOW] => <= [LATIN SMALL LETTER I WITH TILDE BELOW] ;
+[LATIN CAPITAL LETTER I WITH DIAERESIS][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE] ;
+[LATIN SMALL LETTER I WITH DIAERESIS][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE] ;
+[LATIN CAPITAL LETTER K][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER K WITH ACUTE] ;
+[LATIN SMALL LETTER K][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER K WITH ACUTE] ;
+[LATIN CAPITAL LETTER K][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER K WITH DOT BELOW] ;
+[LATIN SMALL LETTER K][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER K WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER K][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER K WITH LINE BELOW] ;
+[LATIN SMALL LETTER K][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER K WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER L][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER L WITH DOT BELOW] ;
+[LATIN SMALL LETTER L][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER L WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER L WITH DOT BELOW][COMBINING MACRON] => <= [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON] ;
+[LATIN SMALL LETTER L WITH DOT BELOW][COMBINING MACRON] => <= [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON] ;
+[LATIN CAPITAL LETTER L][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER L WITH LINE BELOW] ;
+[LATIN SMALL LETTER L][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER L WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW] ;
+[LATIN SMALL LETTER L][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW] ;
+[LATIN CAPITAL LETTER M][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER M WITH ACUTE] ;
+[LATIN SMALL LETTER M][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER M WITH ACUTE] ;
+[LATIN CAPITAL LETTER M][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER M WITH DOT ABOVE] ;
+[LATIN SMALL LETTER M][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER M WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER M][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER M WITH DOT BELOW] ;
+[LATIN SMALL LETTER M][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER M WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER N][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER N WITH DOT ABOVE] ;
+[LATIN SMALL LETTER N][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER N WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER N][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER N WITH DOT BELOW] ;
+[LATIN SMALL LETTER N][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER N WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER N][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER N WITH LINE BELOW] ;
+[LATIN SMALL LETTER N][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER N WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW] ;
+[LATIN SMALL LETTER N][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW] ;
+[LATIN CAPITAL LETTER O WITH TILDE][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE] ;
+[LATIN SMALL LETTER O WITH TILDE][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH TILDE AND ACUTE] ;
+[LATIN CAPITAL LETTER O WITH TILDE][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS] ;
+[LATIN SMALL LETTER O WITH TILDE][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS] ;
+[LATIN CAPITAL LETTER O WITH MACRON][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE] ;
+[LATIN SMALL LETTER O WITH MACRON][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER O WITH MACRON AND GRAVE] ;
+[LATIN CAPITAL LETTER O WITH MACRON][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE] ;
+[LATIN SMALL LETTER O WITH MACRON][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH MACRON AND ACUTE] ;
+[LATIN CAPITAL LETTER P][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER P WITH ACUTE] ;
+[LATIN SMALL LETTER P][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER P WITH ACUTE] ;
+[LATIN CAPITAL LETTER P][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER P WITH DOT ABOVE] ;
+[LATIN SMALL LETTER P][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER P WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER R][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER R WITH DOT ABOVE] ;
+[LATIN SMALL LETTER R][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER R WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER R][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER R WITH DOT BELOW] ;
+[LATIN SMALL LETTER R][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER R WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER R WITH DOT BELOW][COMBINING MACRON] => <= [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON] ;
+[LATIN SMALL LETTER R WITH DOT BELOW][COMBINING MACRON] => <= [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON] ;
+[LATIN CAPITAL LETTER R][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER R WITH LINE BELOW] ;
+[LATIN SMALL LETTER R][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER R WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER S][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER S WITH DOT ABOVE] ;
+[LATIN SMALL LETTER S][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER S WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER S][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER S WITH DOT BELOW] ;
+[LATIN SMALL LETTER S][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER S WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER S WITH ACUTE][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE] ;
+[LATIN SMALL LETTER S WITH ACUTE][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE] ;
+[LATIN CAPITAL LETTER S WITH CARON][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE] ;
+[LATIN SMALL LETTER S WITH CARON][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE] ;
+[LATIN CAPITAL LETTER S WITH DOT BELOW][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE] ;
+[LATIN SMALL LETTER S WITH DOT BELOW][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE] ;
+[LATIN CAPITAL LETTER T][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER T WITH DOT ABOVE] ;
+[LATIN SMALL LETTER T][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER T WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER T][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER T WITH DOT BELOW] ;
+[LATIN SMALL LETTER T][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER T WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER T][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER T WITH LINE BELOW] ;
+[LATIN SMALL LETTER T][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER T WITH LINE BELOW] ;
+[LATIN CAPITAL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW] ;
+[LATIN SMALL LETTER T][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW] ;
+[LATIN CAPITAL LETTER U][COMBINING DIAERESIS BELOW] => <= [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW] ;
+[LATIN SMALL LETTER U][COMBINING DIAERESIS BELOW] => <= [LATIN SMALL LETTER U WITH DIAERESIS BELOW] ;
+[LATIN CAPITAL LETTER U][COMBINING TILDE BELOW] => <= [LATIN CAPITAL LETTER U WITH TILDE BELOW] ;
+[LATIN SMALL LETTER U][COMBINING TILDE BELOW] => <= [LATIN SMALL LETTER U WITH TILDE BELOW] ;
+[LATIN CAPITAL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW] ;
+[LATIN SMALL LETTER U][COMBINING CIRCUMFLEX ACCENT BELOW] => <= [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW] ;
+[LATIN CAPITAL LETTER U WITH TILDE][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE] ;
+[LATIN SMALL LETTER U WITH TILDE][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH TILDE AND ACUTE] ;
+[LATIN CAPITAL LETTER U WITH MACRON][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS] ;
+[LATIN SMALL LETTER U WITH MACRON][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS] ;
+[LATIN CAPITAL LETTER V][COMBINING TILDE] => <= [LATIN CAPITAL LETTER V WITH TILDE] ;
+[LATIN SMALL LETTER V][COMBINING TILDE] => <= [LATIN SMALL LETTER V WITH TILDE] ;
+[LATIN CAPITAL LETTER V][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER V WITH DOT BELOW] ;
+[LATIN SMALL LETTER V][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER V WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER W][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER W WITH GRAVE] ;
+[LATIN SMALL LETTER W][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER W WITH GRAVE] ;
+[LATIN CAPITAL LETTER W][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER W WITH ACUTE] ;
+[LATIN SMALL LETTER W][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER W WITH ACUTE] ;
+[LATIN CAPITAL LETTER W][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER W WITH DIAERESIS] ;
+[LATIN SMALL LETTER W][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER W WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER W][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER W WITH DOT ABOVE] ;
+[LATIN SMALL LETTER W][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER W WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER W][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER W WITH DOT BELOW] ;
+[LATIN SMALL LETTER W][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER W WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER X][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER X WITH DOT ABOVE] ;
+[LATIN SMALL LETTER X][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER X WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER X][COMBINING DIAERESIS] => <= [LATIN CAPITAL LETTER X WITH DIAERESIS] ;
+[LATIN SMALL LETTER X][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER X WITH DIAERESIS] ;
+[LATIN CAPITAL LETTER Y][COMBINING DOT ABOVE] => <= [LATIN CAPITAL LETTER Y WITH DOT ABOVE] ;
+[LATIN SMALL LETTER Y][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER Y WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER Z][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX] ;
+[LATIN SMALL LETTER Z][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER Z WITH CIRCUMFLEX] ;
+[LATIN CAPITAL LETTER Z][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER Z WITH DOT BELOW] ;
+[LATIN SMALL LETTER Z][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER Z WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER Z][COMBINING MACRON BELOW] => <= [LATIN CAPITAL LETTER Z WITH LINE BELOW] ;
+[LATIN SMALL LETTER Z][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER Z WITH LINE BELOW] ;
+[LATIN SMALL LETTER H][COMBINING MACRON BELOW] => <= [LATIN SMALL LETTER H WITH LINE BELOW] ;
+[LATIN SMALL LETTER T][COMBINING DIAERESIS] => <= [LATIN SMALL LETTER T WITH DIAERESIS] ;
+[LATIN SMALL LETTER W][COMBINING RING ABOVE] => <= [LATIN SMALL LETTER W WITH RING ABOVE] ;
+[LATIN SMALL LETTER Y][COMBINING RING ABOVE] => <= [LATIN SMALL LETTER Y WITH RING ABOVE] ;
+[LATIN SMALL LETTER LONG S][COMBINING DOT ABOVE] => <= [LATIN SMALL LETTER LONG S WITH DOT ABOVE] ;
+[LATIN CAPITAL LETTER A][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER A WITH DOT BELOW] ;
+[LATIN SMALL LETTER A][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER A WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER A][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER A WITH HOOK ABOVE] ;
+[LATIN SMALL LETTER A][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER A WITH HOOK ABOVE] ;
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE] ;
+[LATIN SMALL LETTER A WITH CIRCUMFLEX][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE] ;
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE] ;
+[LATIN SMALL LETTER A WITH CIRCUMFLEX][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE] ;
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] ;
+[LATIN SMALL LETTER A WITH CIRCUMFLEX][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] ;
+[LATIN CAPITAL LETTER A WITH CIRCUMFLEX][COMBINING TILDE] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE] ;
+[LATIN SMALL LETTER A WITH CIRCUMFLEX][COMBINING TILDE] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE] ;
+[LATIN CAPITAL LETTER A WITH DOT BELOW][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW] ;
+[LATIN SMALL LETTER A WITH DOT BELOW][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW] ;
+[LATIN CAPITAL LETTER A WITH BREVE][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE] ;
+[LATIN SMALL LETTER A WITH BREVE][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER A WITH BREVE AND ACUTE] ;
+[LATIN CAPITAL LETTER A WITH BREVE][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE] ;
+[LATIN SMALL LETTER A WITH BREVE][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER A WITH BREVE AND GRAVE] ;
+[LATIN CAPITAL LETTER A WITH BREVE][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE] ;
+[LATIN SMALL LETTER A WITH BREVE][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE] ;
+[LATIN CAPITAL LETTER A WITH BREVE][COMBINING TILDE] => <= [LATIN CAPITAL LETTER A WITH BREVE AND TILDE] ;
+[LATIN SMALL LETTER A WITH BREVE][COMBINING TILDE] => <= [LATIN SMALL LETTER A WITH BREVE AND TILDE] ;
+[LATIN CAPITAL LETTER A WITH DOT BELOW][COMBINING BREVE] => <= [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW] ;
+[LATIN SMALL LETTER A WITH DOT BELOW][COMBINING BREVE] => <= [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW] ;
+[LATIN CAPITAL LETTER E][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER E WITH DOT BELOW] ;
+[LATIN SMALL LETTER E][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER E WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER E][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER E WITH HOOK ABOVE] ;
+[LATIN SMALL LETTER E][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER E WITH HOOK ABOVE] ;
+[LATIN CAPITAL LETTER E][COMBINING TILDE] => <= [LATIN CAPITAL LETTER E WITH TILDE] ;
+[LATIN SMALL LETTER E][COMBINING TILDE] => <= [LATIN SMALL LETTER E WITH TILDE] ;
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE] ;
+[LATIN SMALL LETTER E WITH CIRCUMFLEX][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE] ;
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE] ;
+[LATIN SMALL LETTER E WITH CIRCUMFLEX][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE] ;
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] ;
+[LATIN SMALL LETTER E WITH CIRCUMFLEX][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] ;
+[LATIN CAPITAL LETTER E WITH CIRCUMFLEX][COMBINING TILDE] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE] ;
+[LATIN SMALL LETTER E WITH CIRCUMFLEX][COMBINING TILDE] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE] ;
+[LATIN CAPITAL LETTER E WITH DOT BELOW][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW] ;
+[LATIN SMALL LETTER E WITH DOT BELOW][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW] ;
+[LATIN CAPITAL LETTER I][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER I WITH HOOK ABOVE] ;
+[LATIN SMALL LETTER I][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER I WITH HOOK ABOVE] ;
+[LATIN CAPITAL LETTER I][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER I WITH DOT BELOW] ;
+[LATIN SMALL LETTER I][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER I WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER O][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER O WITH DOT BELOW] ;
+[LATIN SMALL LETTER O][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER O WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER O][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER O WITH HOOK ABOVE] ;
+[LATIN SMALL LETTER O][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER O WITH HOOK ABOVE] ;
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE] ;
+[LATIN SMALL LETTER O WITH CIRCUMFLEX][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE] ;
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE] ;
+[LATIN SMALL LETTER O WITH CIRCUMFLEX][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE] ;
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] ;
+[LATIN SMALL LETTER O WITH CIRCUMFLEX][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] ;
+[LATIN CAPITAL LETTER O WITH CIRCUMFLEX][COMBINING TILDE] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE] ;
+[LATIN SMALL LETTER O WITH CIRCUMFLEX][COMBINING TILDE] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE] ;
+[LATIN CAPITAL LETTER O WITH DOT BELOW][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW] ;
+[LATIN SMALL LETTER O WITH DOT BELOW][COMBINING CIRCUMFLEX ACCENT] => <= [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW] ;
+[LATIN CAPITAL LETTER O WITH HORN][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER O WITH HORN AND ACUTE] ;
+[LATIN SMALL LETTER O WITH HORN][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER O WITH HORN AND ACUTE] ;
+[LATIN CAPITAL LETTER O WITH HORN][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER O WITH HORN AND GRAVE] ;
+[LATIN SMALL LETTER O WITH HORN][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER O WITH HORN AND GRAVE] ;
+[LATIN CAPITAL LETTER O WITH HORN][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE] ;
+[LATIN SMALL LETTER O WITH HORN][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE] ;
+[LATIN CAPITAL LETTER O WITH HORN][COMBINING TILDE] => <= [LATIN CAPITAL LETTER O WITH HORN AND TILDE] ;
+[LATIN SMALL LETTER O WITH HORN][COMBINING TILDE] => <= [LATIN SMALL LETTER O WITH HORN AND TILDE] ;
+[LATIN CAPITAL LETTER O WITH HORN][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW] ;
+[LATIN SMALL LETTER O WITH HORN][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER O WITH HORN AND DOT BELOW] ;
+[LATIN CAPITAL LETTER U][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER U WITH DOT BELOW] ;
+[LATIN SMALL LETTER U][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER U WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER U][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER U WITH HOOK ABOVE] ;
+[LATIN SMALL LETTER U][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER U WITH HOOK ABOVE] ;
+[LATIN CAPITAL LETTER U WITH HORN][COMBINING ACUTE ACCENT] => <= [LATIN CAPITAL LETTER U WITH HORN AND ACUTE] ;
+[LATIN SMALL LETTER U WITH HORN][COMBINING ACUTE ACCENT] => <= [LATIN SMALL LETTER U WITH HORN AND ACUTE] ;
+[LATIN CAPITAL LETTER U WITH HORN][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER U WITH HORN AND GRAVE] ;
+[LATIN SMALL LETTER U WITH HORN][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER U WITH HORN AND GRAVE] ;
+[LATIN CAPITAL LETTER U WITH HORN][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE] ;
+[LATIN SMALL LETTER U WITH HORN][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE] ;
+[LATIN CAPITAL LETTER U WITH HORN][COMBINING TILDE] => <= [LATIN CAPITAL LETTER U WITH HORN AND TILDE] ;
+[LATIN SMALL LETTER U WITH HORN][COMBINING TILDE] => <= [LATIN SMALL LETTER U WITH HORN AND TILDE] ;
+[LATIN CAPITAL LETTER U WITH HORN][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW] ;
+[LATIN SMALL LETTER U WITH HORN][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER U WITH HORN AND DOT BELOW] ;
+[LATIN CAPITAL LETTER Y][COMBINING GRAVE ACCENT] => <= [LATIN CAPITAL LETTER Y WITH GRAVE] ;
+[LATIN SMALL LETTER Y][COMBINING GRAVE ACCENT] => <= [LATIN SMALL LETTER Y WITH GRAVE] ;
+[LATIN CAPITAL LETTER Y][COMBINING DOT BELOW] => <= [LATIN CAPITAL LETTER Y WITH DOT BELOW] ;
+[LATIN SMALL LETTER Y][COMBINING DOT BELOW] => <= [LATIN SMALL LETTER Y WITH DOT BELOW] ;
+[LATIN CAPITAL LETTER Y][COMBINING HOOK ABOVE] => <= [LATIN CAPITAL LETTER Y WITH HOOK ABOVE] ;
+[LATIN SMALL LETTER Y][COMBINING HOOK ABOVE] => <= [LATIN SMALL LETTER Y WITH HOOK ABOVE] ;
+[LATIN CAPITAL LETTER Y][COMBINING TILDE] => <= [LATIN CAPITAL LETTER Y WITH TILDE] ;
+[LATIN SMALL LETTER Y][COMBINING TILDE] => <= [LATIN SMALL LETTER Y WITH TILDE] ;
+
+
+% Unicode to main font, except those below
+
+
+[COMBINING COMMA ABOVE RIGHT] => @"0315 ;
+[COMBINING LEFT ANGLE ABOVE] => @"031A ;
+[COMBINING HORN] => @"031B ;
+[COMBINING TILDE OVERLAY] => @"0334 ;
+[COMBINING SHORT STROKE OVERLAY] => @"0335 ;
+[COMBINING LONG STROKE OVERLAY] => @"0336 ;
+[COMBINING SHORT SOLIDUS OVERLAY] => @"0337 ;
+[COMBINING LONG SOLIDUS OVERLAY] => @"0338 ;
+[COMBINING GREEK YPOGEGRAMMENI] => @"0345 ;
+[COMBINING DOUBLE TILDE] => @"0360 ;
+[COMBINING DOUBLE INVERTED BREVE] => @"0361 ;
+[COMBINING DOUBLE RIGHTWARDS ARROW BELOW] => @"0362 ;
+
+
+% Symbols not in main font. Use Symbol fonts
+
+
+
+% Spaces and control symbols
+
+[NO-BREAK SPACE] => "\nobreakspace ";
+[SOFT HYPHEN] => "\-";
+[EN QUAD] => "\enskip ";
+[EM QUAD] => "\quad ";
+[EN SPACE] => "\enspace ";
+[EM SPACE] => "\quad ";
+[THREE-PER-EM SPACE] => "\kern.333em ";
+[FOUR-PER-EM SPACE] => "\kern.25em ";
+[SIX-PER-EM SPACE] => "\thinspace ";
+[FIGURE SPACE] => "\kern\fontcharwd\font`0 ";
+[PUNCTUATION SPACE] => "\kern\fontcharwd\font`. ";
+[THIN SPACE] => "\kern.2em ";
+[HAIR SPACE] => "\kern1pt ";
+[ZERO WIDTH SPACE] => "\kern0pt plus\fontdimen3\font minus \fontdimen4\font ";
+[LINE SEPARATOR] => "\\";
+[PARAGRAPH SEPARATOR] => "\par ";
+
+
+% Accents are passed to the nest step
+
+
+
+{accent} => \1;
+
+% Glyphs in main font with same value as Unicode characters
+% and PUA
+(@"0020-@"02FD|@"034F-@"035F|@"1E00-@"1EFD|@"2000-@"206D|@"E100-@"E17F) => \1;
+
+% Other characters, raise error
+
+. => "\MemUnknownCharacter{" \1 "}"; \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Mtp/utf8.mtp b/macros/latex/exptl/mem/Mtp/utf8.mtp
new file mode 100644
index 0000000000..392636498b
--- /dev/null
+++ b/macros/latex/exptl/mem/Mtp/utf8.mtp
@@ -0,0 +1,14 @@
+input: 1;
+output: 2;
+
+expressions:
+
+@"1B @"00 ^(@"1B)<1,> @"1B => "\UseMemUnichar{" \(*+2-1) "}";
+
+@"00-@"7F => \1;
+(@"C0-@"DF)(@"80-@"BF)
+ => #(((\1-@"C0)*@"40) + (\2-@"80));
+(@"E0-@"EF)(@"80-@"BF)(@"80-@"BF)
+ => #(((\1-@"E0)*@"1000) + ((\2-@"80)*@"40) + (\3-@"80));
+
+. => @"FFFD;
diff --git a/macros/latex/exptl/mem/Tools/charset2otp.py b/macros/latex/exptl/mem/Tools/charset2otp.py
new file mode 100755
index 0000000000..517babdc88
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/charset2otp.py
@@ -0,0 +1,99 @@
+# This file es charset2otp.py
+#
+# (c) 2004. Javier Bezos. License: LPPL.
+#
+# This file creates otp/ocp files for the charset
+# mechanism of the Mem package.
+
+import sys, os
+
+def writeenc(enc, name=None, begin=None, end=None):
+
+ if name == None: name = enc
+ if begin == None: begin = 0x80
+ if end == None: end = 0xFF
+ s = ''
+
+ print 'Creating', name
+
+ for i in range(begin, end + 1):
+ x = unicode(chr(i), enc, 'replace')
+ if not (i % 8): s = s.rstrip() + '\n'
+ s += '@"%04X, ' % ord(x)
+ #end
+
+ of = open('%s.mtp' % name, 'w')
+
+ of.write('%% This file is %s.mtp\n'
+ '%%\n'
+ '%% (c) 2004 Javier Bezos. License: LPPL\n'
+ '%% Please, send bug reports and comments to:\n'
+ '%% jbezos at wanadoo dot es\n'
+ '%%\n'
+ '%% It has been generated with the script charset2otp.py\n'
+ '%% and the built-in Unicode data in Python version:\n'
+ '%% %s\n\n'
+ % (name, sys.version))
+
+ of.write('input: 1;\n'
+ 'output: 2;\n\n')
+
+ if end != 0:
+ of.write('tables:\n\n'
+ '%s[@"%X] = {%s};\n\n' % (name, end-begin+1, s[:-2]))
+ #end
+
+ of.write('states: utf8;\n\n'
+ 'expressions:\n\n'
+ '%% Built-in utf-8 parsing, so that we can escape to it,\n'
+ '%% as described below.\n\n'
+ '<utf8> @"1B => <pop:>;\n'
+ '<utf8> @"00-@"7F => \\1;\n'
+ '<utf8> (@"C0-@"DF)(@"80-@"BF)\n'
+ ' => #(((\\1-@"C0)*@"40) + (\\2-@"80));\n'
+ '<utf8> (@"E0-@"EF)(@"80-@"BF)(@"80-@"BF)\n'
+ ' => #(((\\1-@"E0)*@"1000) + ((\\2-@"80)*@"40) + (\\3-@"80));\n'
+ '<utf8> . => @"FFFD;\n\n'
+ '%% Use <esc> ("1B) to mark the beginning of a Unicode text\n'
+ '%% thus escaping from the current encoding. 00 means a\n'
+ '%% uft-16 code, 01 a utf-16 text, 02 a utf-8 text. <esc>\n'
+ '%% ends the block, too. Note we can be sure "1B is not\n'
+ '%% present in a utf-8 string, but that does not hold for\n'
+ '%% utf-16.\n\n'
+ '@"1B @"00 ^(@"1B)<1,> @"1B => "\\UseMemUnichar{" \\(*+2-1) "}";\n'
+ '@"1B @"01 ^(@"1B)<1,> @"1B => \\(*+2-1);\n'
+ '@"1B @"02 => <push: utf8>;\n\n')
+ if end != 0:
+ of.write('@"%X-@"%X => #(%s[\\1 - @"%X]);\n'
+ % (begin, end, name, begin))
+ #end
+
+ of.write('. => \\1;\n')
+
+ of.close()
+
+ os.system('python ./mtp2ocp.py %s' % name)
+ #os.remove('@%s.otp' % name)
+#end
+
+##### MAL cuando end = FF
+
+writeenc('cp1251')
+writeenc('cp1252', end = 0x9F)
+writeenc('cp1253')
+writeenc('cp1256')
+writeenc('cp1257')
+writeenc('mac_roman', name = 'macstd')
+writeenc('iso8859_1', name = 'isolat1', end = 0)
+writeenc('iso8859_2', name = 'isolat2', begin = 0xA0)
+# writeenc('iso8859_3', name = 'isolat3', begin = 0xA0) # Deprecated
+writeenc('iso8859_4', name = 'isolat4', begin = 0xA0)
+writeenc('iso8859_5', name = 'isocyr', begin = 0xA0)
+writeenc('iso8859_6', name = 'isoara', begin = 0xA0)
+writeenc('iso8859_7', name = 'isoell', begin = 0xA0)
+writeenc('koi8_r', name = 'koi8ru', begin = 0xA0)
+writeenc('koi8_u', name = 'koi8uk', begin = 0xA0)
+# writeenc('ascii') # Special case
+# writeenc('asmo') # Not available in Python
+
+
diff --git a/macros/latex/exptl/mem/Tools/fontenc2mtp.py b/macros/latex/exptl/mem/Tools/fontenc2mtp.py
new file mode 100755
index 0000000000..7ce27e9fda
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/fontenc2mtp.py
@@ -0,0 +1,433 @@
+# This file es fontenc2mtp.py
+#
+# (c) 2004. Javier Bezos. License: LPPL.
+#
+# This file creates mtp files for several
+# font encodings.
+#
+# Very, very quich and dirty, because currently
+# I'm not still sure how to carry out the Unicode
+# to font transformation. Due to an otp2ocp error,
+# {botaccent}<0,> is removed and therefore complex
+# composite caracter are not recomposed properly.
+
+
+
+import unicodedata
+
+class Unichar:
+ def __init__(self, char):
+ if type(char) == type(u''):
+ self.code = ord(char)
+ else:
+ self.code = char
+ #end
+
+ self.char = unichr(self.code)
+ try: self.name = unicodedata.name(self.char)
+ except: pass
+
+ # To be done with a recursive function:
+ tempa = unicodedata.decomposition(unichr(self.code))
+ if '<' in tempa:
+ tempa = ''
+ else:
+ tempa = tempa.split()
+ #end
+ tempa = [int(x, 16) for x in tempa]
+ self.dec = []
+ for i in tempa:
+ tempb = unicodedata.decomposition(unichr(i))
+ if '<' in tempb:
+ tempb = ''
+ else:
+ tempb = tempb.split()
+ #end
+ # if
+ if tempb:
+ tempb = [int(x, 16) for x in tempb]
+ #print tempb
+ self.dec += tempb
+ else:
+ self.dec += [i]
+ #end
+ #end
+ #end
+
+
+ # def decompose(self, char):
+ #end
+
+ def decList(self):
+ return [unicodedata.name(unichr(x)) for x in self.dec]
+ #end
+
+ def decString(self):
+ return '[%s]' % ']['.join(self.decList())
+ #end
+
+ def recList(self):
+ if len(self.dec) == 1: return []
+ return [unicodedata.name(unichr(x)) for x in self.dec]
+ #end
+
+ def recString(self):
+ tempa = self.decList()
+ if tempa == []: return ''
+ return '[%s]' % ']['.join(tempa)
+ #end
+
+ # isAbove, isBottom,
+#end
+
+def printchr(u, botaccent=0):
+ result = ''
+ c = int(u, 16)
+ if botaccent:
+ if unicodedata.combining(unichr(c)) == 230:
+ result = '{botaccent}<0,>'
+ #end
+ #end
+ result += '[%s]' % unicodedata.name(unichr(c))
+ return result
+#end
+
+def decnames(i):
+ dec = unicodedata.decomposition(unichr(i))
+ if '<' in dec: dec = ''
+ return ''.join([printchr(x) for x in dec.split()])
+#end
+
+# underaccents
+# COMBINING x -> COMBINING x BELOW
+#
+ua = ['GRAVE ACCENT',
+ 'ACUTE ACCENT',
+ 'MACRON',
+ 'DIAERESIS',
+ 'CARON',
+ 'CIRCUMFLEX ACCENT',
+ 'BREVE',
+ 'TILDE']
+
+# COMBINING x ABOVE -> COMBINING x BELOW
+
+uax = ['DOT',
+ 'RING']
+
+# undersigns
+# COMBINING x BELOW => \UseMemAccent{u}{x}
+ug = {'COMMA' : ',',
+ 'DOT' : '.'}
+
+# special
+us = {'CEDILLA' : 'c',
+ 'OGONEK' : 'k'}
+
+
+def makemtp(infile, outfile, scriptranges, gx = ''):
+ sym = {}
+ map = {}
+
+ recout = ''
+ mapout = ''
+ accout = ''
+ symout = ''
+ decout = ''
+ cmbout = ''
+ sameout = ''
+
+ scriptranges += [[0xA1, 0xBF], [0x300, 0x36F], [0x2000, 0x206F]]
+
+ if infile == None:
+
+ for b, e in scriptranges:
+ for i in range(b, e-1):
+ map[i] = i
+ sym[i] = ''
+ #end
+ #end
+
+ else:
+
+ ts1 = open('ts1.mmap')
+ infile = open('%s.mmap' % infile)
+
+ for l in ts1.readlines():
+ try:
+ enc, uni, dummy = l.split(None, 2)
+ map[eval(uni)] = eval(enc)
+ sym[eval(uni)] = 'ts1'
+ except: pass
+ #end
+
+ for l in infile.readlines():
+ try:
+ enc, uni, dummy = l.split(None, 2)
+ map[eval(uni)] = eval(enc)
+ sym[eval(uni)] = ''
+ except: pass
+ #end
+
+ ts1.close()
+ infile.close()
+
+ #end
+
+ sameout = ''
+ rb = re = 0x20
+
+ for i in range(0, 65535):
+ if [1 for j, k in scriptranges if j <= i <= k] or i in map:
+ thechar = Unichar(i)
+ try:
+ n = '[%s]' % unicodedata.name(unichr(i))
+ except:
+ n = '@"%04X' % i
+ #end
+ iscomp = 0
+ d = unicodedata.decomposition(unichr(i))
+ if '<' in d: d = ''
+ d = ''.join([printchr(x) for x in d.split()])
+ if d and '[' in d[1:]: iscomp = 1
+ if not d: d = n
+ #if i in map and map[i] == i and not d and not sym[i] and not unicodedata.combining(unichr(i)):
+ if i in map and map[i] == i and not sym[i] and not unicodedata.combining(unichr(i)):
+ if re == i - 1:
+ re = i
+ else:
+ if rb == re:
+ sameout += '|@"%04X' % rb
+ else:
+ sameout += '|@"%04X-@"%04X' % (rb, re)
+ #end
+ rb = re = i
+ #end
+ if len(d) > 40:
+ tmp = d + ' ' #+ ' ' * 40
+ else:
+ tmp = d.ljust(40)
+ #end
+ if iscomp:
+ recout += '%s => <= %s %s ;\n' % (tmp, n, ('<' in d) and '\\(*+1-1)' or '')
+ #end
+ elif i in map:
+ if sym[i]:
+ n = '[%s]' % unicodedata.name(unichr(i))
+ symout += '%s => "\UseMemTextSymbol{%s}{%d}";\n' % (n.ljust(30), sym[i].upper(), map[i])
+ else:
+ cc = unicodedata.combining(unichr(i))
+ if cc == 230:
+ cmbout += '<acc>%s => "\\UseMemAccent{t}{%d}";\n' % (n, map[i])
+ for uae in ua:
+ if n == '[COMBINING %s]' % uae:
+ cmbout += '<acc>%s => "\\UseMemAccent{u}{%d}";\n' \
+ % ('[COMBINING %s BELOW]' % uae, map[i])
+ #end
+ #end
+ for uaxe in uax:
+ if n == '[COMBINING %s ABOVE]' % uaxe:
+ cmbout += '<acc>%s => "\\UseMemAccent{u}{%d}";\n' \
+ % ('[COMBINING %s BELOW]' % uaxe, map[i])
+ #end
+ #end
+ elif cc == 220:
+ cmbout += '<acc>%s => "\\UseMemAccent{b}{%d}";\n' % (n, map[i])
+ elif cc == 202:
+ for use, ust in us.items():
+ if n == '[COMBINING %s]' % use:
+ cmbout += '<acc>%s => "\\UseMemAccent{%s}{%d}";\n' % (n, ust, map[i])
+ #end
+ #end
+ else:
+ if len(d) > 40:
+ tmp = d + ' ' #+ ' ' * 40
+ else:
+ tmp = d.ljust(40)
+ #end
+ if iscomp:
+ recout += '%s => <= %s %s ;\n' % (tmp, n, ('<' in d) and '\\(*+1-1)' or '')
+ if i != map[i]:
+ mapout += '%s => @"%02X ;\n' % (n, map[i])
+ #end
+ else:
+ # Characters below 20 are very often active, ignored or
+ # invalid. However, as a ocp font is concerned they are
+ # valid. We move them to the second page of the PUA and
+ # they will be restored in the _last_ step with \char.
+ if map[i] < 0x20:
+ mapout += '%s => @"%04X ;\n' % (tmp, map[i]+0xe100)
+ else:
+ mapout += '%s => @"%04X ;\n' % (tmp, map[i])
+ #end
+ #end
+ #end
+ #end
+ d = unicodedata.decomposition(unichr(i))
+ if '<' in d: d = ''
+ if d:
+ #d = ''.join(['[%s]' % unicodedata.name(unichr(int(x, 16))) for x in d.split()])
+ #decout += '%s\n => <= %s;\n' % (n, d)
+ decout += '%s\n => <= %s;\n' % (n, thechar.decString())
+ #end
+ #end
+ #end
+
+ if rb == re:
+ sameout += '|@"%04X' % rb
+ else:
+ sameout += '|@"%04X-@"%04X' % (rb, re)
+ #end
+
+ for uge, ugt in ug.items():
+ cmbout += '<acc>%s => "\\UseMemAccent{p}{%s}";\n' \
+ % ('[COMBINING %s BELOW]' % uge, ugt)
+ #end
+
+
+ fo = open('%s-com.mtp' % outfile, 'w')
+
+ fo.write('% (c) 2001-2004 Javier Bezos\n\n'
+ 'input: 2;\n'
+ 'output: 1;\n\n'
+ 'states: acc, end;\n\n'
+ 'aliases:\n\n'
+ 'topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);\n'
+ 'botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);\n'
+ 'overaccent = (@"0334-@"0338);\n'
+ 'accent = (@"0300-@"0345);\n\n'
+ 'expressions:\n\n')
+
+ if gx: fo.write(gx)
+ fo.write('\n\n% Combine if composed form not in main font\n\n')
+ fo.write('^({accent}) {topaccent} {topaccent} {accent} => <=\n'
+ ' \\4 "c{" \\3 "c{" \\2 "l{" \\1 "}}}" @"1B <push: acc>;\n'
+ '^({accent}) {topaccent} {botaccent} {topaccent} => <=\n'
+ ' \\3 "c{" \\4 "c{" \\2 "l{" \\1 "}}}" @"1B <push: acc>;\n'
+ '^({accent}) {botaccent} {topaccent} {topaccent} => <=\n'
+ ' \\2 "c{" \\4 "c{" \\3 "l{" \\1 "}}}" @"1B <push: acc>;\n'
+ '^({accent}) {topaccent} {accent} => <=\n'
+ ' \\3 "c{" \\2 "l{" \\1 "}}" @"1B <push: acc>;\n'
+ '^({accent}) {botaccent} {topaccent} => <=\n'
+ ' \\2 "c{" \\3 "l{" \\1 "}}" @"1B <push: acc>;\n'
+ '^({accent}) {accent} => <=\n'
+ ' \\2 "l{" \\1 "}" @"1B <push: acc>;\n\n'
+ '<acc> @"1B => <pop:>;\n')
+ fo.write(cmbout)
+
+ #fo.write('\n\n% Decompose\n\n')
+ #fo.write(decout)
+
+
+ fo.write('\n\n% PUA -> ASCII\n\n'
+ '@"E125 => "\\MemMoveOtherChar\\%"; % as a special case (37).\n'
+ '(@"E100-@"E17F) => "\\MemMoveOtherChar\\" #(\\1 - @"E100);\n\n')
+
+ fo.write('\n\n% Glyphs in main font with same value as Unicode characters\n\n')
+ fo.write('(%s) => \\1;' % sameout[1:])
+
+ fo.close()
+
+
+ fo = open('%s-rec.mtp' % outfile, 'w')
+
+ fo.write('% (c) 2001-2004 Javier Bezos\n\n'
+ 'input: 2;\n'
+ 'output: 2;\n\n'
+ 'states: acc;\n\n'
+ 'aliases:\n\n'
+ 'topaccent = (@"0300-@"0315 | @"031A-@"031B | @"033D-@"0344);\n'
+ 'botaccent = (@"0316-@"0319 | @"031C-@"0333 | @"0339-@"033C | @"0345);\n'
+ 'overaccent = (@"0334-@"0338);\n'
+ 'accent = (@"0300-@"0345);\n\n'
+ 'expressions:\n\n')
+
+ fo.write('\n\n% Recompose available symbols\n\n')
+ if not (recout + cmbout): recout = '. => \\1 ;'
+ fo.write(recout)
+
+ fo.write('\n\n% Unicode to main font, except those below\n\n')
+ fo.write(accout + '\n')
+ fo.write(mapout)
+
+ fo.write('\n\n% Symbols not in main font. Use Symbol fonts\n\n')
+ fo.write(symout)
+
+
+ fo.write('\n\n% Spaces and control symbols\n\n')
+ fo.write('[NO-BREAK SPACE] => "\\nobreakspace ";\n'
+ '[SOFT HYPHEN] => "\\-";\n'
+ '[EN QUAD] => "\\enskip ";\n'
+ '[EM QUAD] => "\\quad ";\n'
+ '[EN SPACE] => "\\enspace ";\n'
+ '[EM SPACE] => "\\quad ";\n'
+ '[THREE-PER-EM SPACE] => "\\kern.333em ";\n'
+ '[FOUR-PER-EM SPACE] => "\\kern.25em ";\n'
+ '[SIX-PER-EM SPACE] => "\\thinspace ";\n'
+ '[FIGURE SPACE] => "\\kern\\fontcharwd\\font`0 ";\n'
+ '[PUNCTUATION SPACE] => "\\kern\\fontcharwd\\font`. ";\n'
+ '[THIN SPACE] => "\\kern.2em ";\n'
+ '[HAIR SPACE] => "\\kern1pt ";\n'
+ '[ZERO WIDTH SPACE] => "\\kern0pt plus\\fontdimen3\\font minus \\fontdimen4\\font ";\n'
+ '[LINE SEPARATOR] => "\\\\";\n'
+ '[PARAGRAPH SEPARATOR] => "\\par ";\n')
+
+ fo.write('\n\n% Accents are passed to the nest step\n\n')
+ fo.write('\n\n{accent} => \\1;')
+
+ fo.write('\n\n% Glyphs in main font with same value as Unicode characters\n'
+ '% and PUA\n')
+ fo.write('(%s|@"E100-@"E17F) => \\1;' % sameout[1:])
+
+ fo.write('\n\n% Other characters, raise error\n\n')
+ fo.write('. => "\\MemUnknownCharacter{" \\1 "}";')
+
+ fo.close()
+
+ fo = open('%s-dec.mtp' % outfile, 'w')
+
+ fo.write('% (c) 2001-2004 Javier Bezos\n\n'
+ 'input: 2;\n'
+ 'output: 2;\n\n'
+ 'expressions:\n\n')
+
+ fo.write('\n\n% Decompose\n\n')
+ fo.write(decout)
+
+ fo.close()
+
+
+#def createmtp(enc, ranges):
+# encfile = open('%s.mmap' % enc)
+# scriptranges = ranges
+
+makemtp('t1', 't1', [[0x21, 0x2FF], [0x1E00, 0x1EFF]])
+makemtp('ot1', 'ot1', [[0x21, 0x2FF], [0x1E00, 0x1EFF]])
+makemtp('t2a', 't2a', [[0x400, 0x52F]])
+
+tmp = r"""
+. [COMBINING COMMA ABOVE][COMBINING ACUTE ACCENT] => ">'" \1;
+. [COMBINING COMMA ABOVE][COMBINING GRAVE ACCENT] => ">`" \1;
+. [COMBINING COMMA ABOVE][COMBINING GREEK PERISPOMENI] => ">=" \1;
+
+. [COMBINING REVERSED COMMA ABOVE][COMBINING ACUTE ACCENT] => "<'" \1;
+. [COMBINING REVERSED COMMA ABOVE][COMBINING GRAVE ACCENT] => "<`" \1;
+. [COMBINING REVERSED COMMA ABOVE][COMBINING GREEK PERISPOMENI] => @"40 \1;
+
+. [COMBINING COMMA ABOVE]=> ">" \1;
+. [COMBINING REVERSED COMMA ABOVE] => "<" \1;
+
+. [COMBINING ACUTE ACCENT] => "'" \1;
+. [COMBINING GRAVE ACCENT] => "`" \1;
+. [COMBINING GREEK PERISPOMENI] => "=" \1;
+"""
+
+makemtp('lgr', 'lgr', [[0x370, 0x3FF], [0x1F00, 0x1FFF]], gx = tmp)
+
+makemtp(None, 'ula', [[0x21, 0x2FF], [0x1E00, 0x1EFF]])
+makemtp(None, 'ucy', [[0x21, 0x7F], [0x400, 0x52F]])
+makemtp(None, 'uel', [[0x21, 0x7F], [0x370, 0x3FF], [0x1F00, 0x1FFF]])
+
+
+
+
diff --git a/macros/latex/exptl/mem/Tools/lgr.mmap b/macros/latex/exptl/mem/Tools/lgr.mmap
new file mode 100644
index 0000000000..dc93570221
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/lgr.mmap
@@ -0,0 +1,245 @@
+# (c) 2004 Javier Bezos
+# mmap files will be used to generate .mtp files
+# This file lgr.mmap is still unfinished
+
+
+0x01 0x032F #
+0x06 0x03DB # GREEK SMALL LETTER STIGMA
+0x12 0x03DF # GREEK SMALL LETTER KOPPA
+0x13 0x03D9 # GREEK SMALL LETTER ARCHAIC KOPPA
+0x14 0x032E #
+0x15 0x03D8 # GREEK LETTER ARCHAIC KOPPA
+0x16 0x03DA # GREEK LETTER STIGMA
+0x17 0x03E0 # GREEK LETTER SAMPI
+0x1B 0x03E1 # GREEK SMALL LETTER SAMPI
+0x20 0x1FC1 # GREEK DIALYTIKA AND PERISPOMENI
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0308 # COMBINING DIAERESIS
+0x23 0x0385 # GREEK DIALYTIKA TONOS
+0x23 0x1FEE # GREEK DIALYTIKA AND OXIA
+0x24 0x1FED # GREEK DIALYTIKA AND VARIA
+0x25 0x0025 # PERCENT SIGN
+0x27 0x0384 # GREEK TONOS
+0x27 0x1FFD # GREEK OXIA
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x0387 # GREEK ANO TELEIA
+0x3C 0x1FFE # GREEK DASIA
+0x3E 0x1FBF # GREEK PSILI
+0x3F 0x037E # GREEK QUESTION MARK
+0x40 0x1FDF # GREEK DASIA AND PERISPOMENI
+0x41 0x0391 # GREEK CAPITAL LETTER ALPHA
+0x42 0x0392 # GREEK CAPITAL LETTER BETA
+0x43 0x1FDD # GREEK CAPITAL LETTER VARIA
+0x44 0x0394 # GREEK CAPITAL LETTER DELTA
+0x45 0x0395 # GREEK CAPITAL LETTER EPSILON
+0x46 0x03A6 # GREEK CAPITAL LETTER PHI
+0x47 0x0393 # GREEK CAPITAL LETTER GAMMA
+0x48 0x0397 # GREEK CAPITAL LETTER ETA
+0x49 0x0399 # GREEK CAPITAL LETTER IOTA
+0x4A 0x0398 # GREEK CAPITAL LETTER THETA
+0x4B 0x039A # GREEK CAPITAL LETTER KAPPA
+0x4C 0x039B # GREEK CAPITAL LETTER LAMDA
+0x4D 0x039C # GREEK CAPITAL LETTER MU
+0x4E 0x039D # GREEK CAPITAL LETTER NU
+0x4F 0x039F # GREEK CAPITAL LETTER OMICRON
+0x50 0x03A0 # GREEK CAPITAL LETTER PI
+0x51 0x03A7 # GREEK CAPITAL LETTER CHI
+0x52 0x03A1 # GREEK CAPITAL LETTER RHO
+0x53 0x03A3 # GREEK CAPITAL LETTER SIGMA
+0x54 0x03A4 # GREEK CAPITAL LETTER TAU
+0x55 0x03A5 # GREEK CAPITAL LETTER UPSILON
+0x56 0x1FDE # GREEK DASIA AND OXIA
+0x57 0x03A9 # GREEK CAPITAL LETTER OMEGA
+0x58 0x039E # GREEK CAPITAL LETTER XI
+0x59 0x03A8 # GREEK CAPITAL LETTER PSI
+0x5A 0x0396 # GREEK CAPITAL LETTER ZETA
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x1FCF # GREEK PSILI AND PERISPOMENI
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x1FCE # GREEK PSILI AND OXIA
+0x5F 0x1FCD # GREEK PSILI AND VARIA
+0x60 0x1FEF # GREEK VARIA
+0x61 0x03B1 # GREEK SMALL LETTER ALPHA
+0x62 0x03B2 # GREEK SMALL LETTER BETA
+0x62 0x03D0 # GREEK BETA SYMBOL
+0x63 0x03C2 # GREEK SMALL LETTER FINAL SIGMA
+0x64 0x03B4 # GREEK SMALL LETTER DELTA
+0x65 0x03B5 # GREEK SMALL LETTER EPSILON
+0x66 0x03C6 # GREEK SMALL LETTER PHI
+0x66 0x03D5 # GREEK PHI SYMBOL
+0x67 0x03B3 # GREEK SMALL LETTER GAMMA
+0x68 0x03B7 # GREEK SMALL LETTER ETA
+0x69 0x03B9 # GREEK SMALL LETTER IOTA
+0x6A 0x03B8 # GREEK SMALL LETTER THETA
+0x6A 0x03D1 # GREEK THETA SYMBOL
+0x6B 0x03BA # GREEK SMALL LETTER KAPPA
+0x6B 0x03F0 # GREEK KAPPA SYMBOL
+0x6C 0x03BB # GREEK SMALL LETTER LAMDA
+0x6D 0x03BC # GREEK SMALL LETTER MU
+0x6E 0x03BD # GREEK SMALL LETTER NU
+0x6F 0x03BF # GREEK SMALL LETTER OMICRON
+0x70 0x03C0 # GREEK SMALL LETTER PI
+0x70 0x03D6 # GREEK PI SYMBOL
+0x71 0x03C7 # GREEK SMALL LETTER CHI
+0x72 0x03C1 # GREEK SMALL LETTER RHO
+0x72 0x03F1 # GREEK RHO SYMBOL
+0x73 0x03C3 # GREEK SMALL LETTER SIGMA
+0x74 0x03C4 # GREEK SMALL LETTER TAU
+0x75 0x03C5 # GREEK SMALL LETTER UPSILON
+0x77 0x03C9 # GREEK SMALL LETTER OMEGA
+0x78 0x03BE # GREEK SMALL LETTER XI
+0x79 0x03C8 # GREEK SMALL LETTER PSI
+0x7A 0x03B6 # GREEK SMALL LETTER ZETA
+0x7B 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x7C 0x0345 # GREEK YPOGEGRAMMENI
+0x7D 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x7E 0x1FC0 # GREEK PERISPOMENI
+0x80 0x1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
+0x81 0x1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
+0x82 0x1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
+0x83 0x1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+0x84 0x1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+0x85 0x1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+0x86 0x1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+0x87 0x1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+0x88 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS
+0x88 0x1F71 # GREEK SMALL LETTER ALPHA WITH OXIA
+0x89 0x1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+0x8A 0x1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+0x8B 0x1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+0x8C 0x1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+0x8D 0x1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+0x8E 0x1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+0x8F 0x1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+0x90 0x1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+0x91 0x1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+0x92 0x1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+0x93 0x03DD # GREEK SMALL LETTER DIGAMMA
+0x94 0x1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+0x95 0x1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+0x96 0x1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+0x98 0x1F74 # GREEK SMALL LETTER ETA WITH VARIA
+0x99 0x1F21 # GREEK SMALL LETTER ETA WITH DASIA
+0x9A 0x1F20 # GREEK SMALL LETTER ETA WITH PSILI
+0x9C 0x1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+0x9D 0x1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+0x9E 0x1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+0xA0 0x03AE # GREEK SMALL LETTER ETA WITH TONOS
+0xA0 0x1F75 # GREEK SMALL LETTER ETA WITH OXIA
+0xA1 0x1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+0xA2 0x1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+0xA3 0x1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+0xA4 0x1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+0xA5 0x1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+0xA6 0x1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+0xA7 0x1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+0xA8 0x1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
+0xA9 0x1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+0xAA 0x1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+0xAB 0x1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+0xAC 0x1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+0xAD 0x1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+0xAE 0x1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+0xAF 0x1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+0xB0 0x1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
+0xB1 0x1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
+0xB2 0x1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
+0xB3 0x1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+0xB4 0x1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+0xB5 0x1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+0xB6 0x1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+0xB7 0x1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+0xB8 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS
+0xB8 0x1F7D # GREEK SMALL LETTER OMEGA WITH OXIA
+0xB9 0x1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+0xBA 0x1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+0xBB 0x1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+0xBC 0x1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+0xBD 0x1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+0xBE 0x1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+0xBF 0x1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+0xC0 0x1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+0xC1 0x1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+0xC2 0x1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+0xC3 0x03DC # GREEK LETTER DIGAMMA
+0xC4 0x1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+0xC6 0x1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+0xC8 0x1F76 # GREEK SMALL LETTER IOTA WITH VARIA
+0xC9 0x1F31 # GREEK SMALL LETTER IOTA WITH DASIA
+0xCA 0x1F30 # GREEK SMALL LETTER IOTA WITH PSILI
+0xCB 0x1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+0xCC 0x1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
+0xCD 0x1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
+0xCE 0x1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
+0xCF 0x1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+0xD0 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS
+0xD0 0x1F77 # GREEK SMALL LETTER IOTA WITH OXIA
+0xD1 0x1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+0xD2 0x1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+0xD3 0x1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+0xD4 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS
+0xD4 0x1F7B # GREEK SMALL LETTER UPSILON WITH OXIA
+0xD5 0x1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+0xD6 0x1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+0xD7 0x1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+0xD8 0x1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+0xD9 0x1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+0xDA 0x1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+0xDB 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+0xDC 0x1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+0xDD 0x1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+0xDE 0x1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+0xDF 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+0xE0 0x1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
+0xE1 0x1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
+0xE2 0x1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
+0xE3 0x1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+0xE4 0x1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
+0xE5 0x1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
+0xE6 0x1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
+0xE7 0x1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+0xE8 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS
+0xE8 0x1F73 # GREEK SMALL LETTER EPSILON WITH OXIA
+0xE9 0x1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+0xEA 0x1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+0xEB 0x1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+0xEC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS
+0xEC 0x1F79 # GREEK SMALL LETTER OMICRON WITH OXIA
+0xED 0x1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+0xEE 0x1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+0xEF 0x1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+0xF0 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+0xF1 0x1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+0xF2 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0xF2 0x1FD3 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+0xF3 0x1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+0xF4 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+0xF5 0x1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+0xF6 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+0xF6 0x1FE3 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+0xF7 0x1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+0xF8 0x1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+0xF9 0x1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+0xFA 0x1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+0xFB 0x1FE5 # GREEK SMALL LETTER RHO WITH DASIA
+0xFC 0x1FE4 # GREEK SMALL LETTER RHO WITH PSILI
+0xFE 0x0374 # GREEK NUMERAL SIGN
+0xFF 0x0375 # GREEK LOWER NUMERAL SIGN \ No newline at end of file
diff --git a/macros/latex/exptl/mem/Tools/mtp2ocp.py b/macros/latex/exptl/mem/Tools/mtp2ocp.py
new file mode 100755
index 0000000000..7a6a9457a5
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/mtp2ocp.py
@@ -0,0 +1,53 @@
+# This file es votp2ocp.py
+#
+# (c) 2004. Javier Bezos. License: LPPL.
+#
+# This file creates otp/ocp files with special
+# characters like \, {, }, replaced by characters
+# in the PUA area with fixed catcodes. This
+# way, verbatim can be used.
+#
+# The implemtentation is somewhat naive, but it
+# works with the Mem otp files.
+
+import unicodedata, re, sys, os
+
+name = sys.argv[1]
+
+def namechar(m):
+ result = '@"%04X' % ord(unicodedata.lookup(m.group(1)))
+ return result
+#end
+
+def repl(m): # ^ must be the first
+ s = m.group(2).replace('^', '" @"E007 "')\
+ .replace('\\', '" @"E000 "')\
+ .replace('{', '" @"E001 "')\
+ .replace('}', '" @"E002 "')\
+ .replace('$', '" @"E003 "')\
+ .replace('&', '" @"E004 "')\
+ .replace('#', '" @"E006 "')\
+ .replace('_', '" @"E008 "')
+ s = '%s"%s"' % (m.group(1), s)
+ s = s.replace(' ""', ' ')
+ return s
+#end
+
+txt = open(name + '.mtp').read()
+
+res = re.sub('([^@`])"([^"]+)"', repl, txt)
+res = re.sub('\[([A-Z][\dA-Z \-]*)\]', namechar, res)
+
+# Hacer una abrevitura de LATIN LETTER, ARABIC LETTER, para
+# que se anadan si no esta definido.
+
+open(name + '.otp', 'w').write(res)
+
+os.system('otp2ocp ' + name)
+
+try:
+ os.remove('%s.otp' % name)
+except:
+ pass
+
+
diff --git a/macros/latex/exptl/mem/Tools/ot1.mmap b/macros/latex/exptl/mem/Tools/ot1.mmap
new file mode 100644
index 0000000000..7f5a569498
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/ot1.mmap
@@ -0,0 +1,130 @@
+# (c) 2004 Javier Bezos
+# mmap files will be used to generate .mtp files
+
+0x00 0x0393 # GREEK CAPITAL LETTER GAMMA
+0x01 0x0394 # GREEK CAPITAL LETTER DELTA
+0x02 0x0398 # GREEK CAPITAL LETTER THETA
+0x03 0x039B # GREEK CAPITAL LETTER LAMDA
+0x04 0x039E # GREEK CAPITAL LETTER XI
+0x05 0x03A0 # GREEK CAPITAL LETTER PI
+0x06 0x03A3 # GREEK CAPITAL LETTER SIGMA
+0x07 0x03A5 # GREEK CAPITAL LETTER UPSILON
+0x08 0x03A6 # GREEK CAPITAL LETTER PHI
+0x09 0x03A8 # GREEK CAPITAL LETTER PSI
+0x0A 0x03A9 # GREEK CAPITAL LETTER OMEGA
+0x0B 0xFB00 # LATIN SMALL LIGATURE FF
+0x0C 0xFB01 # LATIN SMALL LIGATURE FI
+0x0D 0xFB02 # LATIN SMALL LIGATURE FL
+0x0E 0xFB03 # LATIN SMALL LIGATURE FFI
+0x0F 0xFB04 # LATIN SMALL LIGATURE FFL
+0x10 0x0131 # LATIN SMALL LETTER DOTLESS I
+0x11 0x0237 #
+0x12 0x0300 # COMBINING GRAVE ACCENT
+0x13 0x0301 # COMBINING ACUTE ACCENT
+0x14 0x030C # COMBINING CARON
+0x15 0x0306 # COMBINING BREVE
+0x16 0x0304 # COMBINING MACRON
+0x17 0x030A # COMBINING RING ABOVE
+0x18 0x0327 # COMBINING CEDILLA
+0x19 0x00DF # LATIN SMALL LETTER SHARP S
+0x1A 0x00E6 # LATIN SMALL LETTER AE
+0x1B 0x0153 # LATIN SMALL LIGATURE OE
+0x1C 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0x1D 0x00C6 # LATIN CAPITAL LETTER AE
+0x1E 0x0152 # LATIN CAPITAL LIGATURE OE
+0x1F 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x201D # RIGHT DOUBLE QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x2019 # RIGHT SINGLE QUOTATION MARK
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x00A1 # INVERTED EXCLAMATION MARK
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x00BF # INVERTED QUESTION MARK
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x201C # LEFT DOUBLE QUOTATION MARK
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x0302 # COMBINING CIRCUMFLEX ACCENT
+0x5F 0x0307 # COMBINING DOT ABOVE
+0x60 0x2018 # LEFT SINGLE QUOTATION MARK
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x2013 # EN DASH
+0x7C 0x2014 # EM DASH
+0x7D 0x030B # COMBINING DOUBLE ACUTE ACCENT
+0x7E 0x0303 # COMBINING TILDE
+0x7F 0x0308 # COMBINING DIAERESIS
diff --git a/macros/latex/exptl/mem/Tools/t1.mmap b/macros/latex/exptl/mem/Tools/t1.mmap
new file mode 100644
index 0000000000..ebfb8bb54d
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/t1.mmap
@@ -0,0 +1,254 @@
+# (c) 2004 Javier Bezos
+# mmap files will be used to generate .mtp files
+
+0x00 0x0300 # COMBINING GRAVE ACCENT
+0x01 0x0301 # COMBINING ACUTE ACCENT
+0x02 0x0302 # COMBINING CIRCUMFLEX ACCENT
+0x03 0x0303 # COMBINING TILDE
+0x04 0x0308 # COMBINING DIAERESIS
+0x05 0x030B # COMBINING DOUBLE ACUTE ACCENT
+0x06 0x030A # COMBINING RING ABOVE
+0x07 0x030C # COMBINING CARON
+0x08 0x0306 # COMBINING BREVE
+0x09 0x0304 # COMBINING MACRON
+0x0A 0x0307 # COMBINING DOT ABOVE
+0x0B 0x0327 # COMBINING CEDILLA
+0x0C 0x0328 # COMBINING OGONEK
+0x0D 0x201A # SINGLE LOW-9 QUOTATION MARK
+0x0E 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x0F 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x10 0x201C # LEFT DOUBLE QUOTATION MARK
+0x11 0x201D # RIGHT DOUBLE QUOTATION MARK
+0x12 0x201E # DOUBLE LOW-9 QUOTATION MARK
+0x13 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x14 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0x15 0x2013 # EN DASH
+0x16 0x2014 # EM DASH
+0x19 0x0131 # LATIN SMALL LETTER DOTLESS I
+0x1A 0x0237 #
+0x1B 0xFB00 # LATIN SMALL LIGATURE FF
+0x1C 0xFB01 # LATIN SMALL LIGATURE FI
+0x1D 0xFB02 # LATIN SMALL LIGATURE FL
+0x1E 0xFB03 # LATIN SMALL LIGATURE FFI
+0x1F 0xFB04 # LATIN SMALL LIGATURE FFL
+0x20 0x2423 # OPEN BOX
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x2019 # RIGHT SINGLE QUOTATION MARK
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x2018 # LEFT SINGLE QUOTATION MARK
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x2010 # HYPHEN
+0x80 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
+0x81 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
+0x82 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
+0x83 0x010C # LATIN CAPITAL LETTER C WITH CARON
+0x84 0x010E # LATIN CAPITAL LETTER D WITH CARON
+0x85 0x011A # LATIN CAPITAL LETTER E WITH CARON
+0x86 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
+0x87 0x011E # LATIN CAPITAL LETTER G WITH BREVE
+0x88 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE
+0x89 0x013D # LATIN CAPITAL LETTER L WITH CARON
+0x8A 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
+0x8B 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
+0x8C 0x0147 # LATIN CAPITAL LETTER N WITH CARON
+0x8D 0x014A # LATIN CAPITAL LETTER ENG
+0x8E 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0x8F 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE
+0x90 0x0158 # LATIN CAPITAL LETTER R WITH CARON
+0x91 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
+0x92 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0x93 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0x94 0x0164 # LATIN CAPITAL LETTER T WITH CARON
+0x95 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA
+0x96 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0x97 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE
+0x98 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0x99 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+0x9A 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0x9B 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0x9C 0x0132 # LATIN CAPITAL LIGATURE IJ
+0x9D 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0x9F 0x00A7 # SECTION SIGN
+0xA0 0x0103 # LATIN SMALL LETTER A WITH BREVE
+0xA1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
+0xA2 0x0107 # LATIN SMALL LETTER C WITH ACUTE
+0xA3 0x010D # LATIN SMALL LETTER C WITH CARON
+0xA4 0x010F # LATIN SMALL LETTER D WITH CARON
+0xA5 0x011B # LATIN SMALL LETTER E WITH CARON
+0xA6 0x0119 # LATIN SMALL LETTER E WITH OGONEK
+0xA7 0x011F # LATIN SMALL LETTER G WITH BREVE
+0xA8 0x013A # LATIN SMALL LETTER L WITH ACUTE
+0xA9 0x013E # LATIN SMALL LETTER L WITH CARON
+0xAA 0x0142 # LATIN SMALL LETTER L WITH STROKE
+0xAB 0x0144 # LATIN SMALL LETTER N WITH ACUTE
+0xAC 0x0148 # LATIN SMALL LETTER N WITH CARON
+0xAD 0x014B # LATIN SMALL LETTER ENG
+0xAE 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0xAF 0x0155 # LATIN SMALL LETTER R WITH ACUTE
+0xB0 0x0159 # LATIN SMALL LETTER R WITH CARON
+0xB1 0x015B # LATIN SMALL LETTER S WITH ACUTE
+0xB2 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xB3 0x015F # LATIN SMALL LETTER S WITH CEDILLA
+0xB5 0x0163 # LATIN SMALL LETTER T WITH CEDILLA
+0xB6 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0xB7 0x016F # LATIN SMALL LETTER U WITH RING ABOVE
+0xB8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+0xB9 0x017A # LATIN SMALL LETTER Z WITH ACUTE
+0xBA 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xBB 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+0xBC 0x0133 # LATIN SMALL LIGATURE IJ
+0xBD 0x00A1 # INVERTED EXCLAMATION MARK
+0xBE 0x00BF # INVERTED QUESTION MARK
+0xBF 0x00A3 # POUND SIGN
+0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6 0x00C6 # LATIN CAPITAL LETTER AE
+0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
+0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
+0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0 0x00D0 # LATIN CAPITAL LETTER ETH
+0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
+0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
+0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7 0x0152 # LATIN CAPITAL LIGATURE OE
+0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
+0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
+0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE 0x00DE # LATIN CAPITAL LETTER THORN
+0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
+0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
+0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+0xE6 0x00E6 # LATIN SMALL LETTER AE
+0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
+0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
+0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
+0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
+0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
+0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
+0xF0 0x00F0 # LATIN SMALL LETTER ETH
+0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
+0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
+0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
+0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+0xF7 0x0153 # LATIN SMALL LIGATURE OE
+0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
+0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
+0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
+0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
+0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
+0xFE 0x00FE # LATIN SMALL LETTER THORN
+0xFF 0x00DF # LATIN SMALL LETTER SHARP S
diff --git a/macros/latex/exptl/mem/Tools/t2a.mmap b/macros/latex/exptl/mem/Tools/t2a.mmap
new file mode 100644
index 0000000000..172e52e992
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/t2a.mmap
@@ -0,0 +1,216 @@
+# (c) 2004 Javier Bezos
+# mmap files will be used to generate .mtp files
+
+0x00 0x0300 # COMBINING GRAVE ACCENT
+0x01 0x0301 # COMBINING ACUTE ACCENT
+0x02 0x0302 # COMBINING CIRCUMFLEX ACCENT
+0x03 0x0303 # COMBINING TILDE
+0x04 0x0308 # COMBINING DIAERESIS
+0x05 0x030B # COMBINING DOUBLE ACUTE ACCENT
+0x06 0x030A # COMBINING RING ABOVE
+0x07 0x030C # COMBINING CARON
+0x08 0x0306 # COMBINING BREVE
+0x09 0x0304 # COMBINING MACRON
+0x0A 0x0307 # COMBINING DOT ABOVE
+0x0B 0x0327 # COMBINING CEDILLA
+0x0C 0x0328 # COMBINING OGONEK
+0x0E 0x2329 # LEFT-POINTING ANGLE BRACKET
+0x0F 0x232A # RIGHT-POINTING ANGLE BRACKET
+0x10 0x201C # LEFT DOUBLE QUOTATION MARK
+0x11 0x201D # RIGHT DOUBLE QUOTATION MARK
+0x15 0x2013 # EN DASH
+0x16 0x2014 # EM DASH
+0x19 0x0131 # LATIN SMALL LETTER DOTLESS I
+0x1B 0xFB00 # LATIN SMALL LIGATURE FF
+0x1C 0xFB01 # LATIN SMALL LIGATURE FI
+0x1D 0xFB02 # LATIN SMALL LIGATURE FL
+0x1E 0xFB03 # LATIN SMALL LIGATURE FFI
+0x1F 0xFB04 # LATIN SMALL LIGATURE FFL
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x2019 # RIGHT SINGLE QUOTATION MARK
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # REVERSE SOLIDUS
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x2018 # LEFT SINGLE QUOTATION MARK
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x2010 # HYPHEN
+0x80 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0x82 0x0402 # CYRILLIC CAPITAL LETTER DJE
+0x83 0x040B # CYRILLIC CAPITAL LETTER TSHE
+0x87 0x0409 # CYRILLIC CAPITAL LETTER LJE
+0x88 0x0407 # CYRILLIC CAPITAL LETTER YI
+0x8F 0x0405 # CYRILLIC CAPITAL LETTER DZE
+0x92 0x040E # CYRILLIC CAPITAL LETTER SHORT U
+0x96 0x040F # CYRILLIC CAPITAL LETTER DZHE
+0x99 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0x9B 0x040A # CYRILLIC CAPITAL LETTER NJE
+0x9C 0x0401 # CYRILLIC CAPITAL LETTER IO
+0x9D 0x2116 # NUMERO SIGN
+0x9E 0x00A4 # CURRENCY SIGN
+0x9F 0x00A7 # SECTION SIGN
+0xA0 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0xA2 0x0452 # CYRILLIC SMALL LETTER DJE
+0xA3 0x045B # CYRILLIC SMALL LETTER TSHE
+0xA7 0x0459 # CYRILLIC SMALL LETTER LJE
+0xA8 0x0457 # CYRILLIC SMALL LETTER YI
+0xAF 0x0455 # CYRILLIC SMALL LETTER DZE
+0xB2 0x045E # CYRILLIC SMALL LETTER SHORT U
+0xB6 0x045F # CYRILLIC SMALL LETTER DZHE
+0xB9 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
+0xBA 0x04D9 # CYRILLIC SMALL LETTER SCHWA
+0xBB 0x045A # CYRILLIC SMALL LETTER NJE
+0xBC 0x0451 # CYRILLIC SMALL LETTER IO
+0xBD 0x201E # DOUBLE LOW-9 QUOTATION MARK
+0xBE 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBF 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xC0 0x0410 # CYRILLIC CAPITAL LETTER A
+0xC1 0x0411 # CYRILLIC CAPITAL LETTER BE
+0xC2 0x0412 # CYRILLIC CAPITAL LETTER VE
+0xC3 0x0413 # CYRILLIC CAPITAL LETTER GHE
+0xC4 0x0414 # CYRILLIC CAPITAL LETTER DE
+0xC5 0x0415 # CYRILLIC CAPITAL LETTER IE
+0xC6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
+0xC7 0x0417 # CYRILLIC CAPITAL LETTER ZE
+0xC8 0x0418 # CYRILLIC CAPITAL LETTER I
+0xC9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
+0xCA 0x041A # CYRILLIC CAPITAL LETTER KA
+0xCB 0x041B # CYRILLIC CAPITAL LETTER EL
+0xCC 0x041C # CYRILLIC CAPITAL LETTER EM
+0xCD 0x041D # CYRILLIC CAPITAL LETTER EN
+0xCE 0x041E # CYRILLIC CAPITAL LETTER O
+0xCF 0x041F # CYRILLIC CAPITAL LETTER PE
+0xD0 0x0420 # CYRILLIC CAPITAL LETTER ER
+0xD1 0x0421 # CYRILLIC CAPITAL LETTER ES
+0xD2 0x0422 # CYRILLIC CAPITAL LETTER TE
+0xD3 0x0423 # CYRILLIC CAPITAL LETTER U
+0xD4 0x0424 # CYRILLIC CAPITAL LETTER EF
+0xD5 0x0425 # CYRILLIC CAPITAL LETTER HA
+0xD6 0x0426 # CYRILLIC CAPITAL LETTER TSE
+0xD7 0x0427 # CYRILLIC CAPITAL LETTER CHE
+0xD8 0x0428 # CYRILLIC CAPITAL LETTER SHA
+0xD9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
+0xDA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
+0xDB 0x042B # CYRILLIC CAPITAL LETTER YERU
+0xDC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
+0xDD 0x042D # CYRILLIC CAPITAL LETTER E
+0xDE 0x042E # CYRILLIC CAPITAL LETTER YU
+0xDF 0x042F # CYRILLIC CAPITAL LETTER YA
+0xE0 0x0430 # CYRILLIC SMALL LETTER A
+0xE1 0x0431 # CYRILLIC SMALL LETTER BE
+0xE2 0x0432 # CYRILLIC SMALL LETTER VE
+0xE3 0x0433 # CYRILLIC SMALL LETTER GHE
+0xE4 0x0434 # CYRILLIC SMALL LETTER DE
+0xE5 0x0435 # CYRILLIC SMALL LETTER IE
+0xE6 0x0436 # CYRILLIC SMALL LETTER ZHE
+0xE7 0x0437 # CYRILLIC SMALL LETTER ZE
+0xE8 0x0438 # CYRILLIC SMALL LETTER I
+0xE9 0x0439 # CYRILLIC SMALL LETTER SHORT I
+0xEA 0x043A # CYRILLIC SMALL LETTER KA
+0xEB 0x043B # CYRILLIC SMALL LETTER EL
+0xEC 0x043C # CYRILLIC SMALL LETTER EM
+0xED 0x043D # CYRILLIC SMALL LETTER EN
+0xEE 0x043E # CYRILLIC SMALL LETTER O
+0xEF 0x043F # CYRILLIC SMALL LETTER PE
+0xF0 0x0440 # CYRILLIC SMALL LETTER ER
+0xF1 0x0441 # CYRILLIC SMALL LETTER ES
+0xF2 0x0442 # CYRILLIC SMALL LETTER TE
+0xF3 0x0443 # CYRILLIC SMALL LETTER U
+0xF4 0x0444 # CYRILLIC SMALL LETTER EF
+0xF5 0x0445 # CYRILLIC SMALL LETTER HA
+0xF6 0x0446 # CYRILLIC SMALL LETTER TSE
+0xF7 0x0447 # CYRILLIC SMALL LETTER CHE
+0xF8 0x0448 # CYRILLIC SMALL LETTER SHA
+0xF9 0x0449 # CYRILLIC SMALL LETTER SHCHA
+0xFA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
+0xFB 0x044B # CYRILLIC SMALL LETTER YERU
+0xFC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
+0xFD 0x044D # CYRILLIC SMALL LETTER E
+0xFE 0x044E # CYRILLIC SMALL LETTER YU
+0xFF 0x044F # CYRILLIC SMALL LETTER YA
diff --git a/macros/latex/exptl/mem/Tools/ts1.mmap b/macros/latex/exptl/mem/Tools/ts1.mmap
new file mode 100644
index 0000000000..eefd29845b
--- /dev/null
+++ b/macros/latex/exptl/mem/Tools/ts1.mmap
@@ -0,0 +1,59 @@
+# (c) 2004 Javier Bezos
+# mmap files will be used to generate .mtp files
+
+0x0B 0x0327 # COMBINING CEDILLA
+0x0C 0x0328 # COMBINING OGONEK
+0x18 0x2190 # LEFTWARDS ARROW
+0x19 0x2192 # RIGHTWARDS ARROW
+0x24 0x0024 # DOLLAR SIGN
+0x27 0x0027 # APOSTROPHE
+0x2A 0x2217 # ASTERISK OPERATOR
+0x2C 0x002C # COMMA
+0x2E 0x002E # FULL STOP
+0x2F 0x2044 # FRACTION SLASH
+0x3C 0x2329 # LEFT-POINTING ANGLE BRACKET
+0x3D 0x2212 # MINUS SIGN
+0x3E 0x232A # RIGHT-POINTING ANGLE BRACKET
+0x4F 0x25CB # WHITE CIRCLE
+0x57 0x2126 # OHM SIGN
+0x5E 0x2191 # UPWARDS ARROW
+0x5F 0x2193 # DOWNWARDS ARROW
+0x6E 0x266A # EIGHTH NOTE
+0x84 0x2020 # DAGGER
+0x85 0x2021 # DOUBLE DAGGER
+0x87 0x2030 # PER MILLE SIGN
+0x88 0x2022 # BULLET
+0x8C 0x0192 # LATIN SMALL LETTER F WITH HOOK
+0x8D 0x20A1 # COLON SIGN
+0x92 0x20A4 # LIRA SIGN
+0x96 0x20AB # DONG SIGN
+0x97 0x2122 # TRADE MARK SIGN
+0x9B 0x2116 # NUMERO SIGN
+0x9D 0x212E # ESTIMATED SYMBOL
+0x9E 0x25E6 # WHITE BULLET
+0xA2 0x00A2 # CENT SIGN
+0xA3 0x00A3 # POUND SIGN
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x00A5 # YEN SIGN
+0xA6 0x00A6 # BROKEN BAR
+0xA7 0x00A7 # SECTION SIGN
+0xA9 0x00A9 # COPYRIGHT SIGN
+0xAA 0x00AA # FEMININE ORDINAL INDICATOR
+0xAC 0x00AC # NOT SIGN
+0xAE 0x00AE # REGISTERED SIGN
+0xB0 0x00B0 # DEGREE SIGN
+0xB1 0x00B1 # PLUS-MINUS SIGN
+0xB2 0x00B2 # SUPERSCRIPT TWO
+0xB3 0x00B3 # SUPERSCRIPT THREE
+0xB5 0x00B5 # MICRO SIGN
+0xB6 0x00B6 # PILCROW SIGN
+0xB7 0x00B7 # MIDDLE DOT
+0xB9 0x00B9 # SUPERSCRIPT ONE
+0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
+0xBB 0x221A # SQUARE ROOT
+0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
+0xBF 0x20AC # EURO SIGN
+0xD7 0x00D7 # MULTIPLICATION SIGN
+0xF7 0x00F7 # DIVISION SIGN
diff --git a/macros/latex/exptl/mem/ar.sd b/macros/latex/exptl/mem/ar.sd
new file mode 100644
index 0000000000..b5d0086925
--- /dev/null
+++ b/macros/latex/exptl/mem/ar.sd
@@ -0,0 +1,5 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{ar.sd}
+\DeclareScript{Ar}
+\SetScriptDirection{TRT}
+\input{shared.sd} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/ara.ld b/macros/latex/exptl/mem/ara.ld
new file mode 100644
index 0000000000..359fe9716b
--- /dev/null
+++ b/macros/latex/exptl/mem/ara.ld
@@ -0,0 +1,17 @@
+\DeclareLanguage{arabic}
+
+\SetLanguageScript{Ar}
+
+\DeclareLanguageProperty{input = latin}
+ {\def\ara@input{7arb2uni}}
+
+\def\ara@input{}
+
+\AddLanguageProcess{transcript}{\ara@input}
+
+\AddLanguageProcess{text}{uni2cuni}
+
+% \DeclareLanguageCommand{\@hangfrom}{tools}[1]{%
+% \setbox\@tempboxa\hbox dir TRT{{#1}}%
+% \hangindent-\wd\@tempboxa
+% \noindent\box\@tempboxa}
diff --git a/macros/latex/exptl/mem/arabic.pdf b/macros/latex/exptl/mem/arabic.pdf
new file mode 100644
index 0000000000..704213bfbe
--- /dev/null
+++ b/macros/latex/exptl/mem/arabic.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/arabic.tex b/macros/latex/exptl/mem/arabic.tex
new file mode 100644
index 0000000000..ccb1b000e7
--- /dev/null
+++ b/macros/latex/exptl/mem/arabic.tex
@@ -0,0 +1,98 @@
+%$Lamed
+\documentclass[12pt]{article}
+
+\pagestyle{headings}
+
+%\tracingmacros2
+
+\usepackage[charset=isoara, english, arabic]{mem}
+
+\languageproperties{arabic}{rmfamily=omarb}
+\languageproperties{english}{rmfamily=ptm}
+
+% Quick and dirty fix
+
+ \let\origshipout\shipout
+ \def\shipout#1{\origshipout#1 dir TLT}
+
+\begin{document}
+
+
+\begin{quote}
+\begin{english}
+This sample shows a mixture of Arabic and English. Arabic is
+the main script. There are running heads, too.
+
+\verb|\bodydir| apparently can be used only in the preamble
+of the document. {\tracingmacros2 \tracingcommands2 \verb|\textdir|
+should} reverse
+\verb|\hbox|es with TLT,
+but for some reason in Aleph does not work (Omega reverses
+hboxes correctly). This is important in lists and sections.
+Currently, the \verb|\bodydir| is that of the main language
+(the last one in the package options), which means the
+document has a fixed TLT layout.
+\end{english}
+\end{quote}
+
+% Cannot be used in the middle of a document??
+
+ ÈÓå Çääç ÇäÑÍåæ ÇäÑÍêå ÇäÇèñä ÇäèÌèÏ ÇäÍâ è çè ÇÍÏê ÇäÐÇÊ
+ \englishtext{Hello} äÇêåãæ áêç ÊÕèñÑ ãËÑÉ Çè ÊÙÏñÏ Çè ÇÎÊäÇá áê ÇäÐÇÊ
+ Çè ÇäÇÍèÇä ÈåÇ êÒÇÏ ÓÈâ Çè ÇæÊâÇä äÇ áê æáÓ ÇäÇåÑ è äÇ áê ÇäáÑÖ è
+ ÇäÇåãÇæ è ÇäÇÙÊÈÇÑ è äÇ áê ÇäÙÈÇÑÉ è ÇäÇÔÇÑÉ Èä çè Èãä ÇÙÊÈÇÑ ÇÍÏê
+ ÇäåÙæê åÈÑñÁ Ùæ ãäñ åÇ Óèê ÐÇÊç å×äâÇ è çè Çääñç ÓÈÍÇæç è ÊÙÇäê è äêÓ
+ Ôê Á ÈÍâêâÉ ÇäÔêÆêÉ ÓèÇç.
+
+\englishtext{A list, with random item breaks:}
+\begin{enumerate}
+\item%[\rlap{ÈÓå}]
+ ÈÓå Çääç ÇäÑÍåæ ÇäÑÍêå ÇäÇèñä ÇäèÌèÏ ÇäÍâ è çè ÇÍÏê ÇäÐÇÊ
+ \englishtext{Hello} äÇêåãæ áêç ÊÕèñÑ ãËÑÉ Çè ÊÙÏñÏ Çè ÇÎÊäÇá áê ÇäÐÇÊ
+
+\item[Çè)]
+Çè ÇäÇÍèÇä ÈåÇ êÒÇÏ ÓÈâ Çè ÇæÊâÇä äÇ áê æáÓ ÇäÇåÑ è äÇ áê ÇäáÑÖ è
+ ÇäÇåãÇæ è ÇäÇÙÊÈÇÑ è äÇ áê ÇäÙÈÇÑÉ è ÇäÇÔÇÑÉ Èä çè Èãä ÇÙÊÈÇÑ ÇÍÏê
+
+\item[\englishtext{Third})]
+ ÇäåÙæê åÈÑñÁ Ùæ ãäñ åÇ Óèê ÐÇÊç å×äâÇ è çè Çääñç ÓÈÍÇæç è ÊÙÇäê è äêÓ
+ Ôê Á ÈÍâêâÉ ÇäÔêÆêÉ ÓèÇç.
+\end{enumerate}
+
+\englishtext{A section follows:}
+
+\section{ÈÓå Çääç ÇäÑÍåæ ÇäÑÍêå ÇäÇèñä ÇäèÌèÏ ÇäÍâ è çè ÇÍÏê ÇäÐÇÊ}
+
+ \englishtext{Blah. English \textit{text} in an arabic context. Note
+ it is indented still at the right, as it must be.}
+
+\section{ÈÓå Çääç ÇäÑÍåæ ÇäÑÍêå ÇäÇèñä ÇäèÌèÏ ÇäÍâ}
+
+\begin{languageset}{english}
+
+Now an English paragraph. Arabic paragraph as a quote:
+\begin{quote}
+\begin{languageset}{arabic}
+ÈÓå Çääç ÇäÑÍåæ ÇäÑÍêå ÇäÇèñä ÇäèÌèÏ ÇäÍâ è çè ÇÍÏê ÇäÐÇÊ
+ \englishtext{Hello} äÇêåãæ áêç ÊÕèñÑ ãËÑÉ Çè ÊÙÏñÏ Çè ÇÎÊäÇá áê ÇäÐÇÊ
+ Çè ÇäÇÍèÇä ÈåÇ êÒÇÏ ÓÈâ Çè ÇæÊâÇä äÇ áê æáÓ ÇäÇåÑ è äÇ áê ÇäáÑÖ è
+ ÇäÇåãÇæ è ÇäÇÙÊÈÇÑ è äÇ áê ÇäÙÈÇÑÉ è ÇäÇÔÇÑÉ Èä çè Èãä ÇÙÊÈÇÑ ÇÍÏê
+ ÇäåÙæê åÈÑñÁ Ùæ ãäñ åÇ Óèê ÐÇÊç å×äâÇ è çè Çääñç ÓÈÍÇæç è ÊÙÇäê è äêÓ
+ Ôê Á ÈÍâêâÉ ÇäÔêÆêÉ ÓèÇç.
+\end{languageset}
+\end{quote}
+
+ \section{A title in the English part to see what happens and if the
+ format es correct}
+
+By the way, page numbers are more or less correct (but still to be
+improved). Note the section in latin script has a wrong format.
+
+Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah.
+Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah.
+Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah.
+
+
+\end{languageset}
+
+\end{document}
diff --git a/macros/latex/exptl/mem/bugs.txt b/macros/latex/exptl/mem/bugs.txt
new file mode 100644
index 0000000000..e5ed2c699f
--- /dev/null
+++ b/macros/latex/exptl/mem/bugs.txt
@@ -0,0 +1,35 @@
+I'm rewrinting font encodings from scratch, so there
+are many new bugs.
+
+A few ones I've discovered in a quick look (as of
+2004/12/14):
+
+greek.tex
+- Several composite characters vanish with UEL (LGR fares a
+ bit better). It seems ocp's have problems to recursively
+ decompose characters with => <= (for some reason, they
+ unsort the chars in the buffer). Fixed with a full
+ decomposition.
+
+yatest.tex
+- A few symbols are replaced by black boxes
+
+testmisc.tex
+- A few glyphs (quotes) vanish.
+
+verbatim.tex
+- perhaps the worst, but after all verbatim is still
+ under study.
+- em-dashes and en-dashes vanish
+
+2006/01/01
+~~~~~~~~~~~
+
+testmisc
+- The combination ---? does not work in French.
+
+verbatim.tex
+- it seems to work now (but this is the simplest
+case...).
+
+Javier \ No newline at end of file
diff --git a/macros/latex/exptl/mem/cp1251.ocp b/macros/latex/exptl/mem/cp1251.ocp
new file mode 100644
index 0000000000..2904a16a8a
--- /dev/null
+++ b/macros/latex/exptl/mem/cp1251.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/cp1252.ocp b/macros/latex/exptl/mem/cp1252.ocp
new file mode 100644
index 0000000000..c0f42b3118
--- /dev/null
+++ b/macros/latex/exptl/mem/cp1252.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/cp1253.ocp b/macros/latex/exptl/mem/cp1253.ocp
new file mode 100644
index 0000000000..5559c094a8
--- /dev/null
+++ b/macros/latex/exptl/mem/cp1253.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/cp1256.ocp b/macros/latex/exptl/mem/cp1256.ocp
new file mode 100644
index 0000000000..fbbf849bff
--- /dev/null
+++ b/macros/latex/exptl/mem/cp1256.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/cp1257.ocp b/macros/latex/exptl/mem/cp1257.ocp
new file mode 100644
index 0000000000..e958f9edef
--- /dev/null
+++ b/macros/latex/exptl/mem/cp1257.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/cy.sd b/macros/latex/exptl/mem/cy.sd
new file mode 100644
index 0000000000..3964ad0b77
--- /dev/null
+++ b/macros/latex/exptl/mem/cy.sd
@@ -0,0 +1,37 @@
+% (c) 2001-2004 Javier Bezos
+
+\ProvidesFile{cy.sd}
+
+\DeclareScript{Cy}
+
+%\SetScriptEncodings{T2A,LOM}%
+
+\SetScriptDirection{TLT}
+
+\DeclareScriptCommand\`[1]{#1\unichar{"0300}}
+\DeclareScriptCommand\'[1]{#1\unichar{"0301}}
+\DeclareScriptCommand\^[1]{#1\unichar{"0342}}
+\DeclareScriptCommand\~[1]{#1\unichar{"0342}}
+\DeclareScriptCommand\=[1]{#1\unichar{"0304}}
+\DeclareScriptCommand\"[1]{#1\unichar{"0308}}
+\DeclareScriptCommand\.[1]{#1\unichar{"0307}}
+\DeclareScriptCommand\b[1]{#1\unichar{"0331}}
+\DeclareScriptCommand\d[1]{#1\unichar{"0323}}
+
+\DeclareMemProcessGroup{1000}{case}
+\AddMemProcess{case}{case}
+\SetMemProcess{case}{}
+
+\DeclareRobustCommand{\MakeUppercase}{\mem@uppercase}
+\DeclareRobustCommand{\MakeLowercase}{\mem@lowercase}
+
+\providecommand\mem@uppercase[1]{%
+ {\SetMemProcess{case}{uppercase}\SelectProcesses#1}}
+\providecommand\mem@lowercase[1]{%
+ {\SetMemProcess{case}{lowercase}\SelectProcesses#1}}
+
+\input{shared.sd}
+
+% \endinput
+% %%
+% %% End of file `el.sd'.
diff --git a/macros/latex/exptl/mem/el.sd b/macros/latex/exptl/mem/el.sd
new file mode 100644
index 0000000000..db24e25951
--- /dev/null
+++ b/macros/latex/exptl/mem/el.sd
@@ -0,0 +1,39 @@
+% (c) 2001-2004 Javier Bezos
+
+\ProvidesFile{el.sd}
+
+\DeclareScript{El}
+
+%\SetScriptEncodings{LOM}%
+
+\SetScriptDirection{TLT}
+
+\DeclareScriptCommand\`[1]{#1\unichar{"0300}}
+\DeclareScriptCommand\'[1]{#1\unichar{"0301}}
+%\DeclareScriptCommand\^[1]{#1\unichar{"0342}}
+%\DeclareScriptCommand\~[1]{#1\unichar{"0342}}
+\DeclareScriptCommand\=[1]{#1\unichar{"0304}}
+\DeclareScriptCommand\"[1]{#1\unichar{"0308}}
+\DeclareScriptCommand\.[1]{#1\unichar{"0307}}
+\DeclareScriptCommand\b[1]{#1\unichar{"0331}}
+\DeclareScriptCommand\d[1]{#1\unichar{"0323}}
+
+\DeclareScriptSymbol{\i}{"0345}
+
+\DeclareMemProcessGroup{1000}{case}
+\AddMemProcess{case}{case}
+\SetMemProcess{case}{}
+
+\DeclareRobustCommand{\MakeUppercase}{\mem@uppercase}
+\DeclareRobustCommand{\MakeLowercase}{\mem@lowercase}
+
+\providecommand\mem@uppercase[1]{%
+ {\SetMemProcess{case}{uppercase}\SelectProcesses#1}}
+\providecommand\mem@lowercase[1]{%
+ {\SetMemProcess{case}{lowercase}\SelectProcesses#1}}
+
+\input{shared.sd}
+
+% \endinput
+% %%
+% %% End of file `el.sd'.
diff --git a/macros/latex/exptl/mem/ell.ld b/macros/latex/exptl/mem/ell.ld
new file mode 100644
index 0000000000..15c9a4ba1f
--- /dev/null
+++ b/macros/latex/exptl/mem/ell.ld
@@ -0,0 +1,210 @@
+%(encoding:utf-8)
+\DeclareLanguage{greek}
+\DeclareDialect{katharevousa}
+
+\SetLanguageScript{El}
+
+% Properties.
+
+\AddLanguageProcess{text}
+ {beta,sigma,invertediota,apostrophe}
+
+\DeclareLanguageProperty{sigma = lunate}
+ {\SetLanguageProcess{sigma}{elllunates}}
+\DeclareLanguageProperty{sigma = twoform}
+ {\SetLanguageProcess{sigma}{}}
+\SetLanguageProcess{sigma}{}
+
+% Just an example for a non valued property:
+
+\DeclareLanguageProperty{invertediota}
+ {\SetLanguageProcess{invertediota}{ellinviu}}
+\DeclareLanguageProperty{noinvertediota}
+ {\SetLanguageProcess{invertediota}{}}
+\SetLanguageProcess{invertediota}{}
+
+\DeclareLanguageProperty{beta = oneform}
+ {\SetLanguageProcess{beta}{}}
+\DeclareLanguageProperty{beta = twoform}
+ {\SetLanguageProcess{beta}{ellmedb}}
+\SetLanguageProcess{beta}{ellmedb}
+
+\DeclareLanguageProperty{apostrophe = latin}
+ {\SetLanguageProcess{apostrophe}{}}
+\DeclareLanguageProperty{apostrophe = different}
+ {\SetLanguageProcess{apostrophe}{ellpsili}} % Should not be an input convention?
+\SetLanguageProcess{apostrophe}{ellpsili}
+
+\DeclareLanguageProperty{numbersix = stigma}
+ {\def\gr@smallstigma{^^^^03db}% Not used through ocp's.
+ \def\gr@stigma{^^^^03da}} % must be \unichar. To be fixed
+\DeclareLanguageProperty{numbersix = oldstigma}
+ {\def\gr@smallstigma{^^^^03db}%
+ \def\gr@stigma{^^^^03fd}}
+\DeclareLanguageProperty{numbersix = sigmatau}
+ {\def\gr@smallstigma{στ}%
+ \def\gr@stigma{ΣΤ}}
+\def\gr@smallstigma{στ}%
+\def\gr@stigma{ΣΤ}
+
+\AddLanguageProcess{transcript}{trans}
+\SetLanguageProcess{trans}{}
+
+\DeclareLanguageProperty{input = tex}
+ {\SetLanguageProcess{trans}{ellintex}}
+\DeclareLanguageProperty{input = textilde}
+ {\SetLanguageProcess{trans}{grpotilde2uni}}
+
+\DeclareLanguageProperty{accents = monotonic}
+ {\let\gr@accents\@firstoftwo
+ \def\gr@x{}}
+\DeclareLanguageProperty{accents = polytonic}
+ {\let\gr@accents\@secondofoftwo
+ \def\gr@x{>}}
+\let\gr@accents\@secondofoftwo
+\def\gr@x{>}
+
+\DeclareLanguageCommand*{\bibname}{names}
+ {ΒιβλιογÏαφία}%
+\DeclareLanguageCommand*{\prefacename}{names}
+ {ΠÏόλογος}%
+\DeclareLanguageCommand*{\appendixname}{names}
+ {ΠαÏάÏτημα}%
+\DeclareLanguageCommand*{\listfigurename}{names}
+ {Κατάλογος σχημάτων}%
+\DeclareLanguageCommand*{\listtablename}{names}
+ {Κατάλογος πινάκων}%
+\DeclareLanguageCommand*{\partname}{names}
+ {ΜέÏος}%
+\DeclareLanguageCommand*{\enclname}{names}
+ {Συνημμένα}%
+
+\SetDialect{greek}
+
+\DeclareLanguageCommand*{\refname}{names}
+ {\gr@accents{ΑναφοÏές}{>ΑναφοÏ`ες}}%
+\DeclareLanguageCommand*{\abstractname}{names}
+ {ΠεÏίληψη}%
+\DeclareLanguageCommand*{\chaptername}{names}
+ {Κεφάλαιο}%
+\DeclareLanguageCommand*{\contentsname}{names}
+ {ΠεÏιεχόμενα}%
+\DeclareLanguageCommand*{\indexname}{names}
+ {Ε\gr@x Ï…ÏετήÏιο}%
+\DeclareLanguageCommand*{\figurename}{names}
+ {\gr@accents{Σχήμα}{Σχ=ημα}}%
+\DeclareLanguageCommand*{\tablename}{names}
+ {Πίνακας}%
+\DeclareLanguageCommand*{\pagename}{names}
+ {Σελίδα}%
+\DeclareLanguageCommand*{\seename}{names}
+ {\gr@accents{βλέπε}{βλέπετ}}%
+\DeclareLanguageCommand*{\alsoname}{names}
+ {βλέπε \gr@x επίσης}%
+\DeclareLanguageCommand*{\ccname}{names}
+ {Κοινοποίηση}%
+\DeclareLanguageCommand*{\headtoname}{names}
+ {\gr@accents{ΠÏος}{ΠÏ`ος}}%
+\DeclareLanguageCommand*{\proofname}{names}
+ {\gr@x Απόδειξη}% for AMS-\LaTeX
+
+\DeclareDateFunction{mmmm}{%
+ \ifcase\month\or
+ \gr@x ΙανουαÏίου\or ΦεβÏουαÏίου\or ΜαÏτίου\or \gr@x ΑπÏιλίου\or
+ ΜαÎου\or \gr@x Ιουνίου\or \gr@x Ιουλίου\or Α\gr@x υγοÏστου\or
+ ΣεπτεμβÏίου\or \gr@x ΟκτωβÏίου\or ÎοεμβÏίου\or ΔεκεμβÏίου\fi}
+
+\SetDialect{katharevousa}
+
+\DeclareLanguageCommand*{\refname}{names}
+ {>ΑναφοÏα`ι}%
+\DeclareLanguageCommand*{\abstractname}{names}
+ {ΠεÏίληψις}%
+\DeclareLanguageCommand*{\chaptername}{names}
+ {Κεφάλαιον}%
+\DeclareLanguageCommand*{\contentsname}{names}
+ {ΠεÏιεχόμενα}%
+\DeclareLanguageCommand*{\indexname}{names}
+ {Ε>Ï…ÏετήÏιον}%
+\DeclareLanguageCommand*{\figurename}{names}
+ {Σχ=ημα}%
+\DeclareLanguageCommand*{\tablename}{names}
+ {Πίναξ}%
+\DeclareLanguageCommand*{\pagename}{names}
+ {Σελ`ις}%
+\DeclareLanguageCommand*{\seename}{names}
+ {<ÏŒÏα}%
+\DeclareLanguageCommand*{\alsoname}{names}
+ {<ÏŒÏα >επίσης}%
+\DeclareLanguageCommand*{\ccname}{names}
+ {Κοινοποίησις}%
+\DeclareLanguageCommand*{\headtoname}{names}
+ {ΠÏ`ος}%
+\DeclareLanguageCommand*{\proofname}{names}
+ {>Απόδειξις}% for AMS-\LaTeX
+
+\DeclareDateFunction{mmmm}{%
+ \ifcase\month\or
+ >ΙανουαÏίου\or ΦεβÏουαÏίου\or ΜαÏτίου\or >ΑπÏιλίου\or
+ ΜαÎου\or >Ιουνίου\or >Ιουλίου\or Α>υγοÏστου\or
+ ΣεπτεμβÏίου\or >ΟκτωβÏίου\or ÎοεμβÏίου\or ΔεκεμβÏίου\fi}
+
+\SetLanguage{greek}
+
+\DeclareDateCommand{\today}{<d> <mmmm> <yyyy>}
+
+\DeclareLanguageCommand{\@alph}{layout}[1]{\greeknumber{#1}}
+\DeclareLanguageCommand{\@Alph}{layout}[1]{\uppercase{\greeknumber{#1}}}
+\DeclareLanguageCommand{\labelitemi}{layout}{--}%
+\DeclareLanguageCommand{\labelitemii}{layout}{--}%
+\DeclareLanguageCommand{\labelitemiii}{layout}{--}%
+\DeclareLanguageCommand{\labelitemiv}{layout}{--}
+
+\newcounter{hundredmillions}
+\newcounter{tenmillions}
+\newcounter{millions}
+\newcounter{hundredthousands}
+\newcounter{tenthousands}
+\newcounter{thousands}
+\newcounter{hundreds}
+\newcounter{tens}
+\newcounter{units}
+\newcounter{belowhundred}
+\newcounter{grnumber}
+\def\numbersix{^^^^03db}
+\def\grnumbertmp#1#2#3{\ifcase\value{#1}\or Ï\or σ\or Ï„\or Ï…\or φ\or χ\or ψ\or ω\or =Ï€\else rien\fi%
+\ifcase\value{#2}\or ι\or κ\or λ\or μ\or ν\or ξ\or ο\or π\or =χ\else rien\fi%
+\ifcase\value{#3}\or α\or \/β\/\or γ\or δ\or ε\or \numbersix\or ζ\or η\or θ\else rien\fi}
+\def\greeknumber#1{%
+\setcounter{grnumber}{#1}%
+\ifthenelse{\value{grnumber} > 999999999}{\typeout{Number too big!}}{%
+\ifthenelse{\value{grnumber} > 999999}{^^^^0375^^^^0375\kern.5pt}{\ifthenelse{\value{grnumber} > 999}{^^^^0375\kern.5pt}{}}%
+\setcounter{hundredmillions}{\value{grnumber}/100000000}%
+\addtocounter{grnumber}{-100000000*\value{hundredmillions}}%
+\setcounter{tenmillions}{\value{grnumber}/10000000}%
+\addtocounter{grnumber}{-10000000*\value{tenmillions}}%
+\setcounter{millions}{\value{grnumber}/1000000}%
+\addtocounter{grnumber}{-1000000*\value{millions}}%
+\setcounter{hundredthousands}{\value{grnumber}/100000}%
+\addtocounter{grnumber}{-100000*\value{hundredthousands}}%
+\setcounter{tenthousands}{\value{grnumber}/10000}%
+\addtocounter{grnumber}{-10000*\value{tenthousands}}%
+\setcounter{thousands}{\value{grnumber}/1000}%
+\addtocounter{grnumber}{-1000*\value{thousands}}%
+\setcounter{hundreds}{\value{grnumber}/100}%
+\addtocounter{grnumber}{-100*\value{hundreds}}%
+\setcounter{tens}{\value{grnumber}/10}%
+\addtocounter{grnumber}{-10*\value{tens}}%
+\setcounter{units}{\value{grnumber}}%
+\grnumbertmp{hundredmillions}{tenmillions}{millions}\grnumbertmp{hundredthousands}{tenthousands}{thousands}\grnumbertmp{hundreds}{tens}{units}%
+\setcounter{belowhundred}{\value{hundreds}+\value{tens}+\value{units}}%
+\ifthenelse{\value{belowhundred}>0}{^^^^0374}{}}}
+
+\DeclareDateFunction{gyyyy}{\greeknumber{\number\year}}
+\DeclareDateFunction{gd}{\greeknumber{\number\day}}
+
+\DeclareDateCommand{\greektoday}{<gd> <mmmm> <gyyyy>}
+
+%\AtEndComponent{text}{\greeklccodes\greekmarks}
+
+\endinput
diff --git a/macros/latex/exptl/mem/ellintex.ocp b/macros/latex/exptl/mem/ellintex.ocp
new file mode 100644
index 0000000000..a526d40559
--- /dev/null
+++ b/macros/latex/exptl/mem/ellintex.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ellinviu.ocp b/macros/latex/exptl/mem/ellinviu.ocp
new file mode 100644
index 0000000000..2c831d50bc
--- /dev/null
+++ b/macros/latex/exptl/mem/ellinviu.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ellmedb.ocp b/macros/latex/exptl/mem/ellmedb.ocp
new file mode 100644
index 0000000000..d16f3c9613
--- /dev/null
+++ b/macros/latex/exptl/mem/ellmedb.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ellpsili.ocp b/macros/latex/exptl/mem/ellpsili.ocp
new file mode 100644
index 0000000000..ee3750a022
--- /dev/null
+++ b/macros/latex/exptl/mem/ellpsili.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/eng.ld b/macros/latex/exptl/mem/eng.ld
new file mode 100644
index 0000000000..3597b08351
--- /dev/null
+++ b/macros/latex/exptl/mem/eng.ld
@@ -0,0 +1,98 @@
+\DeclareLanguage{english}
+\DeclareDialect{usenglish}
+
+\SetLanguageScript{La}
+
+\AddLanguageProcess{input}{inputtex}
+
+\DeclareLanguageCommand*{\partname}{names}
+ {Part}
+\DeclareLanguageCommand*{\contentsname}{names}
+ {Contents}
+\DeclareLanguageCommand*{\listfigurename}{names}
+ {List of Figures}
+\DeclareLanguageCommand*{\listtablename}{names}
+ {List of Tables}
+\DeclareLanguageCommand*{\bibname}{names}
+ {Bibliography}
+\DeclareLanguageCommand*{\indexname}{names}
+ {Index}
+\DeclareLanguageCommand*{\figurename}{names}
+ {Figure}
+\DeclareLanguageCommand*{\tablename}{names}
+ {Table}
+\DeclareLanguageCommand*{\refname}{names}
+ {References}
+\DeclareLanguageCommand*{\abstractname}{names}
+ {Abstract}
+\DeclareLanguageCommand*{\chaptername}{names}
+ {Chapter}
+\DeclareLanguageCommand*{\appendixname}{names}
+ {Appendix}
+\DeclareLanguageCommand*{\enclname}{names}
+ {encl}
+\DeclareLanguageCommand*{\ccname}{names}
+ {cc}
+\DeclareLanguageCommand*{\pagename}{names}
+ {Page}
+\DeclareLanguageCommand*{\headtoname}{names}
+ {To}
+\DeclareLanguageCommand*{\seename}{names}
+ {see}
+
+% date
+% ~~~~
+
+\DeclareDateFunction{ddd}{\eng@arabicth\c@day}
+
+\DeclareDateFunction{mmm}{\ifcase\month\or Jan.\or Feb.\or
+ Mar.\or Abr.\or May\or Jun.\or Jul.\or Aug.\or Sep.\or Oct.\or
+ Nov.\or Dic.\fi\@}
+
+\DeclareDateFunction{mmmm}{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi}%
+
+\DeclareDateFunction{www}{\ifcase\month\or Sun.\or Mon.\or
+ Tue.\or Wes.\or Thu.\or Fri.\or Sat.\fi\@}
+
+\DeclareDateFunction{wwww}{\ifcase\month\or Sunday\or Monday\or
+ Tuesday\or Wesnesday\or Thursday\or Friday\or Saturday\fi}
+
+% Continued below
+
+% ordinal numbers
+% ~~~~~~~~~~~~~~~
+
+\DeclareLanguageCommand{\arabicth}{tools}
+ [1]{\expandafter\eng@arabicth\csname c@#1\endcsname}%
+
+\def\eng@arabicth#1{%
+ \number#1\expandafter\eng@@arabicth\expandafter0\number#1 \@empty}
+
+\def\eng@@arabicth#1#2#3{%
+ \ifx#3\@empty
+ \expandafter\eng@@@@arabicth
+ \else
+ \expandafter\eng@@@arabicth
+ \fi
+ #1#2#3}
+
+\def\eng@@@arabicth#1#2#3{\eng@@arabicth#2#3}
+
+\def\eng@@@@arabicth#1#2#3{%
+ \if#11%
+ th%
+ \else
+ \ifcase#2 th\or st\or nd\or rd\else th\fi
+ \fi}
+
+\SetDialect{english}
+
+\DeclareDateCommand{\today}{<ddd> <mmmm> <yyyy>}
+
+\SetDialect{usenglish}
+
+\DeclareDateCommand{\today}{<mmmm> <d>, <yyyy>}
+
+\endinput
diff --git a/macros/latex/exptl/mem/esp.ld b/macros/latex/exptl/mem/esp.ld
new file mode 100644
index 0000000000..61717951be
--- /dev/null
+++ b/macros/latex/exptl/mem/esp.ld
@@ -0,0 +1,51 @@
+\DeclareLanguage{spanish}
+
+\SetLanguageScript{La}
+
+\AddLanguageProcess{input}{inputtex}
+
+\DeclareLanguageCommand*{\partname}{names}{Parte}
+\DeclareLanguageCommand*{\contentsname}{names}{Ãndice}
+\DeclareLanguageCommand*{\listfigurename}{names}
+ {Ãndice de figuras}
+\DeclareLanguageCommand*{\listtablename}{names}
+ {Ãndice de cuadros}
+\DeclareLanguageCommand*{\bibname}{names}{Bibliografía}
+\DeclareLanguageCommand*{\indexname}{names}
+ {Ãndice alfabético}
+\DeclareLanguageCommand*{\figurename}{names}{Figura}
+\DeclareLanguageCommand*{\tablename}{names}{Cuadro}
+\DeclareLanguageCommand*{\refname}{names}
+ {Referencias}
+\DeclareLanguageCommand*{\abstractname}{names}{Resumen}
+\DeclareLanguageCommand*{\chaptername}{names}{Capítulo}
+\DeclareLanguageCommand*{\appendixname}{names}{Apéndice}
+\DeclareLanguageCommand*{\enclname}{names}{Adjunto}
+\DeclareLanguageCommand*{\ccname}{names}{Copia a}
+\DeclareLanguageCommand*{\pagename}{names}{Página}
+\DeclareLanguageCommand*{\headtoname}{names}{A}
+\DeclareLanguageCommand*{\subjectname}{names}{Asunto}
+\DeclareLanguageCommand*{\seename}{names}{véase}
+
+\DeclareDateFunction{www}{%
+ \ifcase\weekday\or lun.\or mart.\or mcles.\or jves.\or
+ vnes.\or sáb.\or dom.\fi\@}
+
+\DeclareDateFunction{wwww}{%
+ \ifcase\weekday\or lunes\or martes\or miércoles\or jueves\or
+ viernes\or sábado\or domingo\fi}
+
+\DeclareDateFunction{mmm}{%
+ \ifcase\month\or en.\or feb.\or mzo.\or abr.\or
+ mayo\or jun.\or jul.\or ag.\or sept.\or oct.\or nov.\or dic.\fi\@}
+
+\DeclareDateFunction{mmmm}{\ifcase\month\or enero\or febrero\or
+ marzo\or abril\or mayo\or junio\or julio\or agosto\or septiembre\or
+ octubre\or noviembre\or diciembre\fi}
+
+\DeclareDateFunction{de}{%
+ de\ifnum\year>1999l\fi}
+
+\DeclareDateCommand{\today}{<d> de <mmmm> <de> <yyyy>}
+
+\endinput
diff --git a/macros/latex/exptl/mem/espisolat1.id b/macros/latex/exptl/mem/espisolat1.id
new file mode 100644
index 0000000000..4f0ec3be3b
--- /dev/null
+++ b/macros/latex/exptl/mem/espisolat1.id
@@ -0,0 +1,10 @@
+\def\ini{\begin}
+\def\fin{\end}
+\def\sección{\section}
+\def\capítulo{\chapter}
+\def\índicegeneral{\tableofcontents}
+\def\hoy{\today}
+\def\documento{\document}
+\def\enddocumento{\enddocument}
+\def\cuadratín{\quad}
+\def\dcuadratín{\qquad} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/fra.ld b/macros/latex/exptl/mem/fra.ld
new file mode 100644
index 0000000000..939b2f0dde
--- /dev/null
+++ b/macros/latex/exptl/mem/fra.ld
@@ -0,0 +1,129 @@
+%(encoding:utf-8)
+\DeclareLanguage{french}
+
+\SetLanguageScript{La}
+
+\AddLanguageProcess{input}{inputtex}
+\AddLanguageProcess{text}{fratext}
+
+\DeclareLanguageCommand\LeftPointingDoubleAngleQuotationMark
+ {processes}{\fr@lguillemets}
+\DeclareLanguageCommand\RightPointingDoubleAngleQuotationMark
+ {processes}{\fr@rguillemets}
+% \DeclareLanguageCommand{\mem@uppercase}
+% {processes}[1]{{\SetMemProcess{case}{\fr@uc}\SelectProcesses#1}}
+
+\DeclareLanguageProperty{uppercase = unaccented}
+ {\DeclareLanguageProcess{uppercase}{ucnoacc}}
+\DeclareLanguageProperty{uppercase = accented}
+ {\DeclareLanguageProcess{uppercase}{uppercase}}
+
+\newcounter{niveauguillemets}[paragraph]
+
+% When fr@guillemets is expanded, the current internal
+% mem representation is already Unicode.
+
+\DeclareLanguageProperty{guillemets = line}
+ {\def\fr@lguillemets{%
+ ^^^^00ab\kern.1667em%
+ \ifthenelse{\value{niveauguillemets} = 1}%
+ {\everypar={}\localleftbox{^^^^00ab\kern.1667em}}%
+ {\everypar={{\popocplist^^^^00ab}\kern.1667em}%
+ \setcounter{niveauguillemets}{1}}}%
+ \def\fr@rguillemets{%
+ \unskip\kern.1667em%
+ ^^^^00bb%
+ \everypar={}\localleftbox{}%
+ \ifthenelse{\value{niveauguillemets} = 1}
+ {\everypar={{\popocplist^^^^00ab}\kern.1667em}%
+ \setcounter{niveauguillemets}{0}}{}}}
+
+\DeclareLanguageProperty{guillemets = paragraph}
+ {\def\fr@lguillemets{%
+ ^^^^00ab\kern.1667em
+ \everypar={^^^^00ab \kern.1667em}}%
+ \def\fr@rguillemets{%
+ \unskip\kern.1667em^^^^00bb%
+ \everypar={}}}
+
+\DeclareLanguageProperty{guillemets = normal}
+ {\def\fr@lguillemets{^^^^00ab\kern.1667em}%
+ \def\fr@rguillemets{\unskip\kern.1667em^^^^00bb}}
+\def\fr@lguillemets{^^^^00ab\kern.1667em}
+\def\fr@rguillemets{\unskip\kern.1667em^^^^00bb}
+
+\DeclareLanguageCommand\LeftDoubleQuotationMark
+ {processes}{^^^^201c}
+\DeclareLanguageCommand\RightDoubleQuotationMark
+ {processes}{^^^^201d}
+\DeclareLanguageCommand\QuestionMark
+ {processes}{\unskip\kern.1667em?}
+\DeclareLanguageCommand\ExclamationMark
+ {processes}{\unskip\kern.1667em!}
+\DeclareLanguageCommand\Semicolon
+ {processes}{\unskip\kern.1667em;}
+\DeclareLanguageCommand\Colon
+ {processes}{\unskip~:}
+
+\DeclareLanguageCommand*\refname
+ {names}{Références}%
+\DeclareLanguageCommand*\abstractname
+ {names}{Résumé}%
+\DeclareLanguageCommand*\bibname
+ {names}{Bibliographie}%
+\DeclareLanguageCommand*\prefacename
+ {names}{Préface}%
+\DeclareLanguageCommand*\chaptername
+ {names}{Chapitre}%
+\DeclareLanguageCommand*\appendixname
+ {names}{Annexe}%
+\DeclareLanguageCommand*\contentsname
+ {names}{Table des matières}%
+\DeclareLanguageCommand*\listfigurename
+ {names}{Table des figures}%
+\DeclareLanguageCommand*\listtablename
+ {names}{Liste des tableaux}%
+\DeclareLanguageCommand*\indexname
+ {names}{Index}%
+\DeclareLanguageCommand*\figurename
+ {names}{{\scshape Fig.}}%
+\DeclareLanguageCommand*\tablename
+ {names}{{\scshape Tab.}}%
+\DeclareLanguageCommand*\partname
+ {names}{\protect\@Fpt partie}%
+\def\@Fpt{{\ifcase\value{part}\or Première\or Deuxième\or
+ Troisième\or Quatrième\or Cinquième\or Sixième\or
+ Septième\or Huitième\or Neuvième\or Dixième\or Onzième\or
+ Douzième\or Treizième\or Quatorzième\or Quinzième\or
+ Seizième\or Dix-septième\or Dix-huitième\or Dix-neuvième\or
+ Vingtième\fi}\space\def\thepart{}}%
+\DeclareLanguageCommand*\pagename
+ {names}{page}%
+\DeclareLanguageCommand*\seename
+ {names}{{\emph{voir}}}%
+\DeclareLanguageCommand*\alsoname
+ {names}{{\emph{voir aussi}}}%
+\DeclareLanguageCommand*\enclname
+ {names}{P.~J. }%
+\DeclareLanguageCommand*\ccname
+ {names}{Copie à }%
+\DeclareLanguageCommand*\headtoname
+ {names}{}%
+\DeclareLanguageCommand*\proofname
+ {names}{Démonstration}% for AMS-\LaTeX
+
+\DeclareDateFunction{wwww}{%
+ \ifcase\weekday\or dimanche\or lundi\or mardi\or
+ mercredi\or jeudi\or vendredi\or samedi\fi}
+
+\DeclareDateFunction{mmmm}{%
+ \ifcase\month\or janvier\or février\or mars\or avril\or
+ mai\or juin\or juillet\or ao\^ut\or septembre\or octobre\or
+ novembre\or décembre\fi}
+
+\DeclareDateFunction{ddd}{%
+ \the\day\ifnum\day=\@ne\ier\fi}
+
+\DeclareDateCommand{\today}{<ddd> <mmmm> <yyyy>}
+
+\endinput
diff --git a/macros/latex/exptl/mem/fratext.ocp b/macros/latex/exptl/mem/fratext.ocp
new file mode 100644
index 0000000000..a24cea8e39
--- /dev/null
+++ b/macros/latex/exptl/mem/fratext.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/greek.pdf b/macros/latex/exptl/mem/greek.pdf
new file mode 100644
index 0000000000..509a22e626
--- /dev/null
+++ b/macros/latex/exptl/mem/greek.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/greek.tex b/macros/latex/exptl/mem/greek.tex
new file mode 100644
index 0000000000..d87831b041
--- /dev/null
+++ b/macros/latex/exptl/mem/greek.tex
@@ -0,0 +1,307 @@
+%$Lamed
+\documentclass{book}
+
+% Añadir los controles como A0 = no break space.
+
+%\tracingcommands2
+%\tracingmacros2
+%\ocptracelevel=3
+\errorcontextlines20
+
+
+%\def\rmdefault{omlgc}
+
+\usepackage[charset=isoell,english,spanish,french,greek]{mem}
+
+\languageunset
+\makeatletter
+\def\memh@verbatim{0}%
+\def\mem@b{verbatim}%
+\DeclareLanguage{verbatim}
+\mem@setencs{verbatim}{T1,ULA,OT1,UEL,LGR,T2A,UCY,LWN,LCY,OT2}
+\makeatother
+\languagereset
+
+\sloppy
+
+% For some reason grmo font doesn't work for me (task, see
+% why):
+\def\sldefault{it}
+
+%%%%%%%%%%%%%%%%%% Revisar esto:
+
+\scriptproperties{La}{rmfamily=pbk}
+
+\languageproperties{spanish}{charset = isolat1}
+
+\languageproperties{french}{
+ charset = isolat1,
+ uppercase = unaccented}
+
+\languageproperties{greek}{fontencs=LGR,rmfamily =cmr}
+
+% Surprise, surprise: omlgc does not have the Extended Greek page
+% thus meaning it cannot be considered a UEL font :-(. It has these
+% characters, but at non standard places, so a new enconding should
+% be added (LOG, Local Omega Greek).
+
+%\languageproperties{greek}{rmfamily= omlgc}
+
+\raggedright
+\parindent1.5pc
+
+% Verbatim with a different script to be fixed
+
+\makeatletter
+\mem@after\verbatim@font{\languageset{english}}
+\makeatother
+
+\begin{document}
+
+\tableofcontents
+
+\chapter{Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX}
+
+\englishtext{What a black box means is that character is not available
+in the current enconding. It happens the LGR encoding has not Latin
+letters. The log file will have lines similar to: \texttt{Package Mem
+Warning: Unknown character 88 on input line 194.}}
+
+\section{Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX}
+
+\frenchtext{With ascii input (Omega conventions):}
+{\languagetext[input=tex]{greek}{<'ahy opr'e `o =w 'a| >h|}}
+\frenchtext{{\ttfamily <'ahy opr'e `o =w 'a| >h|} A few letters with utf-8
+input:} \languagetext[charset=utf8]{greek}{ἅὦἷἯ} \frenchtext{Note
+LGR contains \textit{no} Latin letter. Below is an extended sample in
+polytonic Greek.}
+
+.e.{\tracingmacros2 á\unitext{^^^^0301}.\^{á}}.
+
+Ï \textit{Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX (Þ ÅÖÔ ãéá
+óõíôïìßá) áðïôåëåß ôçí åðßóçìç ÔïðéêÞ ÏìÜäá ôïõ TeX Þ Åëëçíéêü LUG
+(Local Users Group).} Ï ÅÖÔ áðïóêïðåß óôçí äéÜäïóç ôïõ
+TeX
+ãéá ôçí óôïé÷åéïèåóßá åëëçíéêþí óôçí ÅëëÜäá êáé óôï åîùôåñéêü.
+Åðßóçò ðñüêåéôáé
+íá óõíäñÜìåé óôçí âåëôßùóç êáé åöáñìïãÞ óôá åëëçíéêÜ äåäïìÝíá ôùí
+åñãáëåßùí
+ôïõ óõóôÞìáôïò TeX êáé óôçí äçìéïõñãßá íÝùí åñãáëåßùí
+(ð.÷. ôïõ ãá)
+ðïõ èá äéåõêïëýíïõí ôçí ðáñáãùãÞ åíôýðùí óôçí
+åëëçíéêÞ ãëþóóá (áñ÷áßá êáé íÝá). \frenchtext{Ça va, ça va très
+bien. Tiens! qu'est-ce qu'ils peuvent regarder, ces jeunes gens?}
+ ÔÝëïò, ðñüèåóç ìáò åßíáé åðßóçò ç ìåëÝôç, äéáôÞñçóç êáé åöáñìïãÞ
+ôùí áîéþí ôçò ðáñáäïóéáêÞò åëëçíéêÞò ôõðïãñáößáò óôçí åðï÷Þ ôùí Ç/Õ.
+
+\section{ÏðïéóäÞðïôå çëéêßáò}
+
+ÏðïéóäÞðïôå çëéêßáò 18 êáé Üíù êáé óýìöùíïò ìå ôï
+êáôáóôáôéêü 
+ôïõ óõëëüãïõ ìðïñåß íá ãßíåé ìÝëïò ôïõ óõëëüãïõ. Èá ðñÝðåé ãé' áõôü íá
+óôåßëåé óôïí ðñüåäñï ôïõ óõëëüãïõ
+åíõðüãñáöç åðéóôïëÞ óôçí ïðïßá íá äçëþíåé üôé åðéèõìåß íá ãßíåé ìÝëïò êáé
+üôé åêðëçñåß ôéò ðáñáðÜíù ðñïûðïèÝóåéò. Åðßóçò ç åðéóôïëÞ áõôÞ ðñÝðåé íá
+ðåñéÝ÷åé ôï ïíïìáôåðþíõìï, ôï üíïìá ðáôÝñá, ôçí äéåýèõíóç,
+ôïí áñéèìü ôçëåöþíïõ Þ ôçí çëåêôñïíéêÞ
+äéåýèõíóç ôïõ/ôçò åíäéáöåñïìÝíïõ/íçò. Ôá áðïäåêôÜ ìÝëç ðëçñþíïõí ôÝëç åããñáöÞò
+ðïõ áíÝñ÷ïíôáé óôï ðïóü ôùí 5000 äñá÷ìþí (Þ 20 äïëëáñßùí ÇÐÁ). ¼ëá ôá ìÝëç
+ðëçñþíïõí åîáìçíéáßá óõíäñïìÞ 2000 äñá÷ìþí (Þ 8 äïëëáñßùí ÇÐÁ). (Ðëçñïöïñßåò
+ãéá ôïõò äéáöüñïõò ôñüðïõò ðëçñùìÞò
+ìðïñåßôå íá âñÞôå óôçí áíôßóôïé÷ç åíüôçôá áõôþí ôùí óåëßäùí.)
+
+\begin{french}
+
+\section{Ça va très bien (inside an environment)}
+
+\end{french}
+
+\section{Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX}
+
+Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX (Þ ÅÖÔ ãéá
+óõíôïìßá) áðïôåëåß ôçí åðßóçìç ÔïðéêÞ ÏìÜäá ôïõ TeX Þ Åëëçíéêü LUG
+(Local Users Group). Ï ÅÖÔ áðïóêïðåß óôçí äéÜäïóç ôïõ
+TeX
+ãéá ôçí óôïé÷åéïèåóßá åëëçíéêþí óôçí ÅëëÜäá êáé óôï åîùôåñéêü.
+Åðßóçò ðñüêåéôáé
+íá óõíäñÜìåé óôçí âåëôßùóç êáé åöáñìïãÞ óôá åëëçíéêÜ äåäïìÝíá ôùí
+åñãáëåßùí
+ôïõ óõóôÞìáôïò TeX êáé óôçí äçìéïõñãßá íÝùí åñãáëåßùí
+(ð.÷. ôïõ ãá)
+ðïõ èá äéåõêïëýíïõí ôçí ðáñáãùãÞ åíôýðùí óôçí
+åëëçíéêÞ ãëþóóá (áñ÷áßá \frenchtext{Ça va, ça va très bien}
+êáé íÝá). ÔÝëïò, ðñüèåóç ìáò åßíáé åðßóçò ç ìåëÝôç, äéáôÞñçóç êáé åöáñìïãÞ
+ôùí áîéþí ôçò ðáñáäïóéáêÞò åëëçíéêÞò ôõðïãñáößáò óôçí åðï÷Þ ôùí Ç/Õ.
+
+\section{ÏðïéóäÞðïôå çëéêßáò}
+
+ÏðïéóäÞðïôå çëéêßáò 18 êáé Üíù êáé óýìöùíïò ìå ôï
+êáôáóôáôéêü 
+ôïõ óõëëüãïõ ìðïñåß íá ãßíåé ìÝëïò ôïõ óõëëüãïõ. Èá ðñÝðåé ãé' áõôü íá
+óôåßëåé óôïí ðñüåäñï ôïõ óõëëüãïõ
+åíõðüãñáöç åðéóôïëÞ óôçí ïðïßá íá äçëþíåé üôé åðéèõìåß íá ãßíåé ìÝëïò êáé
+üôé åêðëçñåß ôéò ðáñáðÜíù ðñïûðïèÝóåéò. Åðßóçò ç åðéóôïëÞ áõôÞ ðñÝðåé íá
+ðåñéÝ÷åé ôï ïíïìáôåðþíõìï, ôï üíïìá ðáôÝñá, ôçí äéåýèõíóç,
+ôïí áñéèìü ôçëåöþíïõ Þ ôçí çëåêôñïíéêÞ
+äéåýèõíóç ôïõ/ôçò åíäéáöåñïìÝíïõ/íçò. Ôá áðïäåêôÜ ìÝëç ðëçñþíïõí ôÝëç åããñáöÞò
+ðïõ áíÝñ÷ïíôáé óôï ðïóü ôùí 5000 äñá÷ìþí (Þ 20 äïëëáñßùí ÇÐÁ). ¼ëá ôá ìÝëç
+ðëçñþíïõí åîáìçíéáßá óõíäñïìÞ 2000 äñá÷ìþí (Þ 8 äïëëáñßùí ÇÐÁ). (Ðëçñïöïñßåò
+ãéá ôïõò äéáöüñïõò ôñüðïõò ðëçñùìÞò
+ìðïñåßôå íá âñÞôå óôçí áíôßóôïé÷ç åíüôçôá áõôþí ôùí óåëßäùí.)
+
+\section{Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX}
+
+Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX (Þ ÅÖÔ ãéá
+óõíôïìßá) áðïôåëåß ôçí åðßóçìç ÔïðéêÞ ÏìÜäá ôïõ TeX Þ Åëëçíéêü LUG
+(Local Users Group). Ï ÅÖÔ áðïóêïðåß óôçí äéÜäïóç ôïõ
+TeX
+ãéá ôçí óôïé÷åéïèåóßá åëëçíéêþí óôçí ÅëëÜäá êáé óôï åîùôåñéêü.
+Åðßóçò ðñüêåéôáé
+íá óõíäñÜìåé óôçí âåëôßùóç êáé åöáñìïãÞ óôá åëëçíéêÜ äåäïìÝíá ôùí
+åñãáëåßùí
+ôïõ óõóôÞìáôïò TeX êáé óôçí äçìéïõñãßá íÝùí åñãáëåßùí
+(ð.÷. ôïõ ãá)
+ðïõ èá äéåõêïëýíïõí ôçí ðáñáãùãÞ åíôýðùí óôçí
+åëëçíéêÞ ãëþóóá (áñ÷áßá \frenchtext{Ça va, ça va très bien}
+êáé íÝá). ÔÝëïò, ðñüèåóç ìáò åßíáé åðßóçò ç ìåëÝôç, äéáôÞñçóç êáé åöáñìïãÞ
+ôùí áîéþí ôçò ðáñáäïóéáêÞò åëëçíéêÞò ôõðïãñáößáò óôçí åðï÷Þ ôùí Ç/Õ.
+
+\section{ÏðïéóäÞðïôå çëéêßáò}
+
+ÏðïéóäÞðïôå çëéêßáò 18 êáé Üíù êáé óýìöùíïò ìå ôï
+êáôáóôáôéêü 
+ôïõ óõëëüãïõ ìðïñåß íá ãßíåé ìÝëïò ôïõ óõëëüãïõ. Èá ðñÝðåé ãé' áõôü íá
+óôåßëåé óôïí ðñüåäñï ôïõ óõëëüãïõ
+åíõðüãñáöç åðéóôïëÞ óôçí ïðïßá íá äçëþíåé üôé åðéèõìåß íá ãßíåé ìÝëïò êáé
+üôé åêðëçñåß ôéò ðáñáðÜíù ðñïûðïèÝóåéò. Åðßóçò ç åðéóôïëÞ áõôÞ ðñÝðåé íá
+ðåñéÝ÷åé ôï ïíïìáôåðþíõìï, ôï üíïìá ðáôÝñá, ôçí äéåýèõíóç,
+ôïí áñéèìü ôçëåöþíïõ Þ ôçí çëåêôñïíéêÞ
+äéåýèõíóç ôïõ/ôçò åíäéáöåñïìÝíïõ/íçò. Ôá áðïäåêôÜ ìÝëç ðëçñþíïõí ôÝëç åããñáöÞò
+ðïõ áíÝñ÷ïíôáé óôï ðïóü ôùí 5000 äñá÷ìþí (Þ 20 äïëëáñßùí ÇÐÁ). ¼ëá ôá ìÝëç
+ðëçñþíïõí åîáìçíéáßá óõíäñïìÞ 2000 äñá÷ìþí (Þ 8 äïëëáñßùí ÇÐÁ). (Ðëçñïöïñßåò
+ãéá ôïõò äéáöüñïõò ôñüðïõò ðëçñùìÞò
+ìðïñåßôå íá âñÞôå óôçí áíôßóôïé÷ç åíüôçôá áõôþí ôùí óåëßäùí.)
+
+%\begin{french}
+
+\section{\frenchtext{Ça va très bien (changed in argument)}}
+
+%\end{french}
+
+\section{Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX}
+
+Ï Óýëëïãïò ÅëëÞíùí Ößëùí ôïõ TeX (Þ ÅÖÔ ãéá
+óõíôïìßá) áðïôåëåß ôçí åðßóçìç ÔïðéêÞ ÏìÜäá ôïõ TeX Þ Åëëçíéêü LUG
+(Local Users Group). Ï ÅÖÔ áðïóêïðåß óôçí äéÜäïóç ôïõ
+TeX
+ãéá ôçí óôïé÷åéïèåóßá åëëçíéêþí óôçí ÅëëÜäá êáé óôï åîùôåñéêü.
+Åðßóçò ðñüêåéôáé
+íá óõíäñÜìåé óôçí âåëôßùóç êáé åöáñìïãÞ óôá åëëçíéêÜ äåäïìÝíá ôùí
+åñãáëåßùí
+ôïõ óõóôÞìáôïò TeX êáé óôçí äçìéïõñãßá íÝùí åñãáëåßùí
+(ð.÷. ôïõ ãá)
+ðïõ èá äéåõêïëýíïõí ôçí ðáñáãùãÞ åíôýðùí óôçí
+åëëçíéêÞ ãëþóóá (áñ÷áßá \frenchtext{Ça va, ça va très bien}
+êáé íÝá). ÔÝëïò, ðñüèåóç ìáò åßíáé åðßóçò ç ìåëÝôç, äéáôÞñçóç êáé åöáñìïãÞ
+ôùí áîéþí ôçò ðáñáäïóéáêÞò åëëçíéêÞò ôõðïãñáößáò óôçí åðï÷Þ ôùí Ç/Õ.
+
+\section{ÏðïéóäÞðïôå çëéêßáò}
+
+ÏðïéóäÞðïôå çëéêßáò 18 êáé Üíù êáé óýìöùíïò ìå ôï
+êáôáóôáôéêü 
+ôïõ óõëëüãïõ ìðïñåß íá ãßíåé ìÝëïò ôïõ óõëëüãïõ. Èá ðñÝðåé ãé' áõôü íá
+óôåßëåé óôïí ðñüåäñï ôïõ óõëëüãïõ
+åíõðüãñáöç åðéóôïëÞ óôçí ïðïßá íá äçëþíåé üôé åðéèõìåß íá ãßíåé ìÝëïò êáé
+üôé åêðëçñåß ôéò ðáñáðÜíù ðñïûðïèÝóåéò. Åðßóçò ç åðéóôïëÞ áõôÞ ðñÝðåé íá
+ðåñéÝ÷åé ôï ïíïìáôåðþíõìï, ôï üíïìá ðáôÝñá, ôçí äéåýèõíóç,
+ôïí áñéèìü ôçëåöþíïõ Þ ôçí çëåêôñïíéêÞ
+äéåýèõíóç ôïõ/ôçò åíäéáöåñïìÝíïõ/íçò. Ôá áðïäåêôÜ ìÝëç ðëçñþíïõí ôÝëç åããñáöÞò
+ðïõ áíÝñ÷ïíôáé óôï ðïóü ôùí 5000 äñá÷ìþí (Þ 20 äïëëáñßùí ÇÐÁ). ¼ëá ôá ìÝëç
+ðëçñþíïõí åîáìçíéáßá óõíäñïìÞ 2000 äñá÷ìþí (Þ 8 äïëëáñßùí ÇÐÁ). (Ðëçñïöïñßåò
+ãéá ôïõò äéáöüñïõò ôñüðïõò ðëçñùìÞò
+ìðïñåßôå íá âñÞôå óôçí áíôßóôïé÷ç åíüôçôá áõôþí ôùí óåëßäùí.)
+
+\newpage
+
+\frenchtext{Latin traslit:}
+
+\begin{languageset}[input=tex]{greek}
+ka`i E>ust'ajioc m`en <o >Antioqe'iac
+>ep'iskopoc dias'urei t`on Pamf'ilou E>us'ebion <wc t`hn >en Nika'ia|
+p'istin paraqar'attonta, d`e t`hn m`en >en Nika'ia| p'istin o>'u fhsi
+paraba'inein, diab'allei d`e t`on E>ust'ajion <wc t`hn Sabell'iou
+d'oxan e>is'agonta. di`a ta=uta <'ekastoi <wc kat`a antip'alwn to`uc
+l'ogouc sun'egrafon, >amf'otero'i te l'egontec >enup'ostat'on te ka`i
+sunup'arqonta t`on u<i`on e>=inai to=u jeo=u, <'ena te je`on >en
+tris`in <upost'asesin e>=inai <omologo=untec, >all'hloic o>uk o>=id'
+<'opwc, sumfwn=hsai o>uk >'isquon, ka`i di`a ta=uta <hsuq'azein
+o>uden`i tr'opw| >hne'iqonto. <'A
+
+\begin{verbatim}
+ka`i E>ust'ajioc m`en <o >Antioqe'iac
+>ep'iskopoc dias'urei t`on Pamf'ilou E>us'ebion <wc t`hn >en Nika'ia|
+p'istin paraqar'attonta, d`e t`hn m`en >en Nika'ia| p'istin o>'u fhsi
+paraba'inein, diab'allei d`e t`on E>ust'ajion <wc t`hn Sabell'iou
+d'oxan e>is'agonta. di`a ta=uta <'ekastoi <wc kat`a antip'alwn to`uc
+l'ogouc sun'egrafon, >amf'otero'i te l'egontec >enup'ostat'on te ka`i
+sunup'arqonta t`on u<i`on e>=inai to=u jeo=u, <'ena te je`on >en
+tris`in <upost'asesin e>=inai <omologo=untec, >all'hloic o>uk o>=id'
+<'opwc, sumfwn=hsai o>uk >'isquon, ka`i di`a ta=uta <hsuq'azein
+o>uden`i tr'opw| >hne'iqonto. <'A
+\end{verbatim}
+\end{languageset}
+
+\frenchtext{UTF-8:}
+
+\begin{languageset}[charset=utf8]{greek}
+οἱ δὲ Φοίνικες
+οὗτοι οἱ σὺν Κάδμῳ ἀπικόμενοι, τῶν
+ἦσαν οἱ ΓεφυÏαῖοι, ἄλλα τε πολλὰ
+οἰκήσαντες ταύτην τὴν χώÏην
+á¼Ïƒá½µÎ³Î±Î³Î¿Î½ διδασκάλια á¼Ï‚ τοὺς
+á¼Î»Î»Î·Î½Î±Ï‚ καὶ δὴ καὶ γÏάμματα, οá½Îº
+á¼á½¹Î½Ï„α Ï€Ïὶν á¼Î»Î»Î·ÏƒÎ¹ ὡς á¼Î¼Î¿á½¶ δοκέειν,
+Ï€Ïῶτα μὲν τοῖσι καὶ ἅπαντες
+χÏέωνται Φοίνικες· μετὰ δὲ χÏόνου
+Ï€Ïοβαίνοντος ἅμα τῇ φωνῇ μετέβαλον
+καὶ τὸν ῥυθμὸν τῶν γÏαμμάτων.
+πεÏιοίκεον δὲ σφεας Ï„á½° πολλὰ τῶν
+χώÏων τοῦτον τὸν χÏόνον Ἑλλήνων
+Ἴωνες· οἳ παÏαλαβόντες διδαχῇ παÏá½°
+τῶν Φοινίκων Ï„á½° γÏάμματα,
+μεταÏÏυθμίσαντές σφεων ὀλίγα
+á¼Ï‡Ïέωντο, χÏεώμενοι δὲ á¼Ï†á½±Ï„ισαν,
+á½¥ÏƒÏ€ÎµÏ ÎºÎ±á½¶ τὸ δίκαιον ἔφεÏε,
+á¼ÏƒÎ±Î³Î±Î³á½¹Î½Ï„ων Φοινίκων á¼Ï‚ τὴν
+Ἑλλάδα, Φοινικήια κεκλῆσθαι. καὶ
+Ï„á½°Ï‚ βύβλους διφθέÏας καλέουσι ἀπὸ
+τοῦ παλαιοῦ οἱ Ἴωνες, ὅτι κοτὲ á¼Î½
+σπάνι βύβλων á¼Ï‡Ïέωντο διφθέÏῃσι
+αἰγέῃσί τε καὶ οἰέῃσι· ἔτι δὲ
+καὶ τὸ κατ' á¼Î¼á½² πολλοὶ τῶν βαÏβάÏων
+á¼Ï‚ τοιαύτας διφθέÏας γÏάφουσι.
+
+[59] εἶδον δὲ καὶ αá½Ï„ὸς Καδμήια
+γÏάμματα á¼Î½ Ï„á¿· á¼±Ïá¿· τοῦ Ἀπόλλωνος
+τοῦ Ἰσμηνίου á¼Î½ Θήβῃσι τῇσι
+Βοιωτῶν á¼Ï€á½¶ Ï„Ïίποσι Ï„Ïισὶ
+á¼Î³ÎºÎµÎºÎ¿Î»Î±Î¼Î¼á½³Î½Î±, Ï„á½° πολλὰ ὅμοια
+á¼á½¹Î½Ï„α τοῖσι Ἰωνικοῖσι. ὠμὲν δὴ
+εἷς τῶν Ï„Ïιπόδων á¼Ï€á½·Î³Ïαμμα ἔχει·
+
+ἈμφιτÏύων μ' ἀνέθηκεν á¼á½¼Î½ ἀπὸ
+Τηλεβοάων.
+
+ταῦτα ἡλικίην εἴη ἂν κατὰ Λάιον
+τὸν Λαβδάκου τοῦ ολυδώÏου τοῦ
+Κάδμου. \frenchtext{(Herodot, Buch V, 58f.)}
+\end{languageset}
+
+\section{\frenchtext{Ça va très bien. Nested spanish: \spanishtext{Más allá}}}
+
+\englishtext{Test uppercase in headlines.}
+
+\newpage
+
+xxx
+\end{document}
diff --git a/macros/latex/exptl/mem/inputtex.ocp b/macros/latex/exptl/mem/inputtex.ocp
new file mode 100644
index 0000000000..c30c4e3bee
--- /dev/null
+++ b/macros/latex/exptl/mem/inputtex.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/isoara.ocp b/macros/latex/exptl/mem/isoara.ocp
new file mode 100644
index 0000000000..8408b7e1e2
--- /dev/null
+++ b/macros/latex/exptl/mem/isoara.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/isocyr.ocp b/macros/latex/exptl/mem/isocyr.ocp
new file mode 100644
index 0000000000..b91a01af10
--- /dev/null
+++ b/macros/latex/exptl/mem/isocyr.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/isoell.ocp b/macros/latex/exptl/mem/isoell.ocp
new file mode 100644
index 0000000000..ca4fbd6df9
--- /dev/null
+++ b/macros/latex/exptl/mem/isoell.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/isolat1.ocp b/macros/latex/exptl/mem/isolat1.ocp
new file mode 100644
index 0000000000..de53354bfb
--- /dev/null
+++ b/macros/latex/exptl/mem/isolat1.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/isolat2.ocp b/macros/latex/exptl/mem/isolat2.ocp
new file mode 100644
index 0000000000..047ae11266
--- /dev/null
+++ b/macros/latex/exptl/mem/isolat2.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/isolat4.ocp b/macros/latex/exptl/mem/isolat4.ocp
new file mode 100644
index 0000000000..a9e5eaa3a6
--- /dev/null
+++ b/macros/latex/exptl/mem/isolat4.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/koi8ru.ocp b/macros/latex/exptl/mem/koi8ru.ocp
new file mode 100644
index 0000000000..f714235120
--- /dev/null
+++ b/macros/latex/exptl/mem/koi8ru.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/koi8uk.ocp b/macros/latex/exptl/mem/koi8uk.ocp
new file mode 100644
index 0000000000..d8fe3ea0a7
--- /dev/null
+++ b/macros/latex/exptl/mem/koi8uk.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/la.sd b/macros/latex/exptl/mem/la.sd
new file mode 100644
index 0000000000..604da7c771
--- /dev/null
+++ b/macros/latex/exptl/mem/la.sd
@@ -0,0 +1,67 @@
+% (c) 2001-2004 Javier Bezos
+
+\ProvidesFile{la.sd}
+
+\DeclareScript{La}
+
+%\SetScriptEncodings{LOM,T1,OT1}%
+
+% Split LOM into LLA, LEL, LCY??
+
+\SetScriptDirection{TLT}
+
+\DeclareScriptCommand\`[1]{#1\unichar{"0300}}
+\DeclareScriptCommand\'[1]{#1\unichar{"0301}}
+\DeclareScriptCommand\^[1]{#1\unichar{"0302}}
+\DeclareScriptCommand\~[1]{#1\unichar{"0303}}
+\DeclareScriptCommand\=[1]{#1\unichar{"0304}}
+\DeclareScriptCommand\"[1]{#1\unichar{"0308}}
+\DeclareScriptCommand\H[1]{#1\unichar{"030B}}
+\DeclareScriptCommand\r[1]{#1\unichar{"030A}}
+\DeclareScriptCommand\v[1]{#1\unichar{"030C}}
+\DeclareScriptCommand\u[1]{#1\unichar{"0306}}
+\DeclareScriptCommand\.[1]{#1\unichar{"0307}}
+\DeclareScriptCommand\b[1]{#1\unichar{"0331}}
+\DeclareScriptCommand\c[1]{#1\unichar{"0327}}
+\DeclareScriptCommand\d[1]{#1\unichar{"0323}}
+\DeclareScriptCommand\k[1]{#1\unichar{"0328}}
+
+\DeclareScriptSymbol{\i}{"0131}
+\DeclareScriptSymbol{\AE}{"00C6}
+\DeclareScriptSymbol{\DH}{"00D0}
+\DeclareScriptSymbol{\DJ}{"0110}
+\DeclareScriptSymbol{\L}{"0141}
+\DeclareScriptSymbol{\NG}{"014A}
+\DeclareScriptSymbol{\OE}{"0152}
+\DeclareScriptSymbol{\O}{"00D8}
+\DeclareScriptCommand{\SS}{SS}
+\DeclareScriptSymbol{\TH}{"00FE}
+\DeclareScriptSymbol{\ae}{"00E6}
+\DeclareScriptSymbol{\dh}{"00F0}
+\DeclareScriptSymbol{\dj}{"0111}
+\DeclareScriptSymbol{\j}{??}
+\DeclareScriptSymbol{\l}{"0142}
+\DeclareScriptSymbol{\ng}{"014B}
+\DeclareScriptSymbol{\oe}{"0153}
+\DeclareScriptSymbol{\o}{"00F8}
+\DeclareScriptSymbol{\ss}{"00DF}
+\DeclareScriptSymbol{\th}{"00FE}
+
+\DeclareMemProcessGroup{1000}{case}
+\AddMemProcess{case}{case}
+\SetMemProcess{case}{}
+
+\DeclareRobustCommand{\MakeUppercase}{\mem@uppercase}
+\DeclareRobustCommand{\MakeLowercase}{\mem@lowercase}
+
+\providecommand\mem@uppercase[1]{%
+ {\SetMemProcess{case}{uppercase}\SelectProcesses#1}}
+\providecommand\mem@lowercase[1]{%
+ {\SetMemProcess{case}{lowercase}\SelectProcesses#1}}
+
+\input{shared.sd}
+
+
+\endinput
+%%
+%% End of file `la.sd'.
diff --git a/macros/latex/exptl/mem/lat2ru.ocp b/macros/latex/exptl/mem/lat2ru.ocp
new file mode 100644
index 0000000000..e9297e38ed
--- /dev/null
+++ b/macros/latex/exptl/mem/lat2ru.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/lgr-com.ocp b/macros/latex/exptl/mem/lgr-com.ocp
new file mode 100644
index 0000000000..56ebb45dca
--- /dev/null
+++ b/macros/latex/exptl/mem/lgr-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/lgr-dec.ocp b/macros/latex/exptl/mem/lgr-dec.ocp
new file mode 100644
index 0000000000..22c11487b5
--- /dev/null
+++ b/macros/latex/exptl/mem/lgr-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/lgr-rec.ocp b/macros/latex/exptl/mem/lgr-rec.ocp
new file mode 100644
index 0000000000..e7ec89a0cf
--- /dev/null
+++ b/macros/latex/exptl/mem/lgr-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/lgr.ed b/macros/latex/exptl/mem/lgr.ed
new file mode 100644
index 0000000000..0e305f9389
--- /dev/null
+++ b/macros/latex/exptl/mem/lgr.ed
@@ -0,0 +1,6 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{uel.ed}
+\SetEncodingScript{El}
+% Provisionally:
+\SetEncodingProcess{lgr}{lgr-dec,lgr-rec,lgr-com}
+\SetSymbolEncodings{TS1} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/macstd.ocp b/macros/latex/exptl/mem/macstd.ocp
new file mode 100644
index 0000000000..c53fbff6f1
--- /dev/null
+++ b/macros/latex/exptl/mem/macstd.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/mem-comm.sty b/macros/latex/exptl/mem/mem-comm.sty
new file mode 100644
index 0000000000..6bc3c8deaa
--- /dev/null
+++ b/macros/latex/exptl/mem/mem-comm.sty
@@ -0,0 +1,112 @@
+% (c) 2001-2005 Javier Bezos
+
+\def\mem@protected#1#2#3{%
+ \ifx\thepage\relax
+ \string#2{#3}%
+ \else\ifx\protect\@unexpandable@protect
+ \noexpand#2{#3}%
+ \else
+ #1%
+ \fi\fi}
+
+% \mem@foreach{list}{code}:
+% for each element in the comma separated list,
+% do code with ##1 being the current item.
+% Cannot be nested.
+
+\def\mem@foreach#1#2{%
+ \def\mem@forcmd##1{#2}%
+ \mem@fornext#1,\@nil}
+
+\def\mem@fornext#1,#2{%
+ \mem@forcmd{#1}%
+ \ifx#2\@nil
+ \expandafter\@gobble
+ \else
+ \expandafter\mem@fornext
+ \fi
+ #2}
+
+% \mem@lastfor makes the following elements
+% in the list to be ignored.
+
+\def\mem@lastfor{\let\mem@forcmd\@gobble}
+
+% mem@eforeach is like mem@foreach but list
+% is expanded first. That means that a list
+% item cannot be a macro name as such
+% (except if unexpandable). mem@forcmd is used
+% as a temporary macro.
+
+\def\mem@eforeach#1{%
+ \edef\mem@forcmd{#1}%
+ \expandafter\mem@foreach\expandafter{\mem@forcmd}}
+
+\def\mem@error#1{\PackageError{mem}{#1}%
+ {See mem documentation for explanation}}
+\def\mem@bug#1{\mem@error{Bug found (#1)}}
+
+% \mem@after\macro{code}:
+% Adds code at the end of macro, without expansion.
+
+\def\mem@after#1#2{%
+ \toks@\expandafter{#1}%
+ \@temptokena{#2}%
+ \edef#1{\the\toks@\the\@temptokena}}
+
+% \mem@eafter\macro{code}:
+% As above, but expands code before adding it to \macro
+% (whose previous code is not expanded).
+
+\def\mem@eafter#1#2{%
+ \toks@\expandafter{#1}%
+ \edef#1{\the\toks@#2}}
+
+% \mem@lafter\macro\eltmacro{list}
+% Yet another variant. This time {list} is a comma
+% separated list which is converted first to
+% \eltmacro{elem}\eltmacro{elem}... Empty items are
+% ignored.
+
+\def\mem@lafter#1#2#3{%
+ \def\mem@a{\noexpand#2}%
+ \mem@eafter#1{\mem@lafterget#3,\@nil,}}
+
+\def\mem@lafterget#1,{%
+ \ifx\@nil#1\@empty\else % if #1=\@nil, #1 can be {}
+ \ifx\\#1\\\else\mem@a{#1}\fi % if #1={}
+ \expandafter\mem@lafterget
+ \fi}
+
+% Macros to show info for debugging
+
+\newcounter{memdebuglevel}
+\c@memdebuglevel\@ne
+
+\def\mem@debug#1#2{%
+ \ifnum\c@memdebuglevel=\@ne
+ \typeout{(Mem) #2}%
+ \fi}
+
+% \mem@setcsvar\macro
+% If \macro is undefined, define it as empty
+
+\def\mem@setcsvar#1{%
+ \@ifundefined{#1}%
+ {\mem@ecs\let{#1}\@empty}%
+ {}}
+
+% \mem@ecs\macro{name}
+% A convenient shorthand -- the same as \macro\name.
+
+\def\mem@ecs#1#2{%
+ \expandafter#1%
+ \csname#2\endcsname}
+
+%%% \mem@csuse
+%%% Like \csname\mem@use{prefix}{suffix}\endcsname
+%%% ny implemented
+
+\endinput
+%%
+%% End of file `mem-comm.sty'.
diff --git a/macros/latex/exptl/mem/mem.cfg b/macros/latex/exptl/mem/mem.cfg
new file mode 100644
index 0000000000..e9c5138bad
--- /dev/null
+++ b/macros/latex/exptl/mem/mem.cfg
@@ -0,0 +1,17 @@
+% (c) 2004 Javier Bezos
+
+\SetPatterns{default}{0}
+
+% mem name file hyphens encodings
+
+
+\LoadLanguage {french} {fra} {default} {T1,ULA,OT1}
+\LoadLanguage {greek} {ell} {default} {UEL,LGR}
+\LoadLanguage {russian} {rus} {default} {T2A,UCY,LWN,LCY,OT2}
+\LoadLanguage {arabic} {ara} {default} {UAR}
+\LoadLanguage {spanish} {esp} {default} {T1,ULA,OT1}
+\LoadLanguage {english} {eng} {default} {T1,ULA,OT1}
+\LoadLanguage {usenglish} {eng} {default} {T1,ULA,OT1}
+
+% Not yet implemented (?) O tal vez español=spa en opciones??
+%\LoadLanguage [username] {russian} {rus} {default} {T2A,WCy} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/mem.pdf b/macros/latex/exptl/mem/mem.pdf
new file mode 100644
index 0000000000..4b26757b9f
--- /dev/null
+++ b/macros/latex/exptl/mem/mem.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/mem.sty b/macros/latex/exptl/mem/mem.sty
new file mode 100644
index 0000000000..a541aeb20c
--- /dev/null
+++ b/macros/latex/exptl/mem/mem.sty
@@ -0,0 +1,1439 @@
+% (c) 2001-2005 Javier Bezos
+
+\def\fileversion{0.0004 pre-alpha}
+
+\iffalse % ==========================
+To do:
+
+- verbatim
+ - scripts
+ Some settings (eg. names) should be done in two steps:
+ \chaptername = \<french>chaptername or maybe not?
+- AtBeginLanguage
+- AtEndLanguage
+- Hacer que al cargar una escritura rm/sf/ttfamily se ajusten
+ para esa escritura? Así si se vuelve se conservan.
+- Idea? platform + language => charset, eg, [unix, czech]
+ is the same as [charset=isolat2]
+- Most of definitions in .sd files should be moved to
+ font encoding files. If a language requires another
+ definition (Greek \~) then set it with
+ \DeclareLanguageCommand.
+- En lugar de mem.cfg, hacer eg spanish.mem which llama
+ a spa.ld, ajusta las codificaciones, los patrones, etc.
+ (?)
+
+\fi %========================
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{mem}
+ [2004/08/22 Multilingual LaTeX support for Lamed/Lambda]
+
+\DeclareOption{loadonly}{\let\mem@sel@opt\relax}
+
+% Now, a buggy setup in TeXLive 2003 is fixed. The
+% best solution is to remove the file:
+% \texmf\omega\lambda\omegabook\ltpatch.ltx
+% Only restored if uctt, perhaps a package has
+% customized fonts
+
+\def\mem@a{uctt}
+\ifx\ttdefault\mem@a
+ \def\ttdefault{cmtt}
+\fi
+
+%\def\sfdefault{cmss}
+
+\newcount\mem@count
+
+\def\mem@@{mem-}
+\def\mem@@trpr{mem-trpr-}
+\def\mem@@prop{mem-prop-}
+\def\mem@@flag{mem-flag-}
+\def\mem@csflag#1{\csname mem-flag-#1\endcsname}
+
+\def\mem@last{{}{}}
+
+\input{mem-comm.sty}
+
+% \mem@cmd{prefix}{<language>}{suffix} searchs the
+% following definitions in an expandable way:
+%
+% \mem-prefix<language>-suffix -> dialect
+% \mem-prefix!<language>-suffix -> language
+% \mem-prefix?-suffix -> global
+%
+% and uses the first one found. Must be used
+% inside \csname.
+%
+% Is it possible to extend it to script?
+% 2005-12-08 Add \@empty after #3 in case it's {}.
+
+\long\def\mem@cmd#1#2#3{%
+ \mem@@#1%
+ \expandafter
+ \ifx\csname\mem@@#1#2-\string#3\@empty\endcsname\relax % if not language
+ \expandafter\ifx\csname\mem@@?#2\endcsname\relax % if not language
+ ?%
+ \else%
+ \expandafter % if not !language
+ \ifx\csname\mem@@#1\csname\mem@@?#2\endcsname-\string#3\@empty\endcsname\relax
+ ?%
+ \else % if !language
+ \csname\mem@@?#2\endcsname
+ \fi
+ \fi
+ \else % if language
+ #2%
+ \fi-\string#3\@empty}
+
+% \mem@use is a shorthand. If fact \mem@cmd is used directly
+% only once
+
+\long\def\mem@use#1#2{\mem@cmd{#1}\languagename{#2}}
+
+\def\mem@ifno#1#2#3#4{%
+ \if#1n\if#2o#3\else\@firstoftwo\fi\else#4\fi}
+
+% \def\mem@ifup#1#2#3#4{%
+% \if#1u\if#2p#3\else\@firstoftwo\fi\else#4\fi}
+
+\def\AtEndComponent#1{%
+ \@ifundefined{\mem@@flag#1}%
+ {\mem@error{Unknown component}}
+ {\@ifundefined{mem@no#1}%
+ {\@ifundefined{\mem@@\languagename-#1}%
+ {\expandafter\let\csname\mem@@\languagename-#1\endcsname\@empty}%
+ \@empty
+ \expandafter\mem@after
+ \csname\mem@@\languagename-#1\expandafter\endcsname}\@gobble}}
+
+\def\mem@eadd#1{%
+ \@ifundefined{\mem@@flag#1}%
+ {\mem@error{Unknown module}}
+ {\@ifundefined{mem@no#1}%
+ {\@ifundefined{\mem@@\languagename-#1}%
+ {\expandafter\let\csname\mem@@\languagename-#1\endcsname\@empty}%
+ \@empty
+ \expandafter\mem@eafter
+ \csname\mem@@\languagename-#1\expandafter\endcsname}\@gobble}}
+
+\def\DeclareLanguage#1{%
+ \def\languagename{!#1}%
+ \def\mem@main{!#1}%
+ \DeclareDialect{#1}}
+
+\def\DeclareDialect#1{%
+ \expandafter\let\csname\mem@@?#1\endcsname\mem@main
+ \expandafter
+ \@namedef{#1text}{\languagetext{#1}}%
+ \@ifundefined{#1}%
+ {\newenvironment{#1}{\languageset{#1}}{}}%
+ {\PackageWarning{mem}{Skipping declaration of #1
+ environment.\MessageBreak This name already exists.}}}
+
+\@onlypreamble\DeclareLanguage
+\@onlypreamble\DeclareDialect
+
+\def\SetLanguage#1{%
+ \@ifundefined{\mem@@?#1}%
+ {\mem@bug@err4}%
+ {\edef\languagename{!#1}}}
+
+\def\SetDialect#1{
+ \@ifundefined{\mem@@?#1}%
+ {\mem@bug@err4}%
+ {\edef\languagename{#1}}}
+
+\@onlypreamble\SetLanguage
+\@onlypreamble\SetDialect
+
+\def\mem@ifcomponent#1{\@ifundefined{\mem@@flag#1}%
+ {\mem@bug@err1\@gobble}}
+
+% Components
+% ~~~~~~~~~~
+
+\def\DeclareLanguageComponent{%
+ \@ifstar{\mem@newcomponent\mem@c}%
+ {\mem@newcomponent\mem@text@components}}
+
+\def\mem@newcomponent#1#2{%
+ \def\mem@a##1##2##3\mem@a{%
+ \mem@ifno##1##2}%
+ \mem@a#2\mem@a
+ {\mem@bug@err2}%
+ {\@ifundefined{\mem@@flag#2}%
+ {\mem@eafter\mem@components{% Note the flag expands to \relax
+ \noexpand\mem@elt\mem@csflag{#2}{#2}}%
+ \mem@eafter#1{%
+ \noexpand\mem@elt\mem@csflag{#2}{#2}}%
+ \expandafter\edef
+ \csname\mem@@prop?-#2\endcsname{%
+ \noexpand\mem@flagon{\mem@csflag{#2}}%
+ \noexpand\@tempswafalse}%
+ \expandafter\edef
+ \csname\mem@@prop?-no#2\endcsname{%
+ \noexpand\mem@flagoff{\mem@csflag{#2}}%
+ \noexpand\@tempswafalse}%
+ \expandafter\newcount\csname\mem@@flag#2\endcsname}%
+ {\PackageInfo{mem}%
+ {Ignoring component declaration: #2.^^J%
+ Already declared\@gobble}}}}
+
+\@onlypreamble\DeclareLanguageComponent
+\@onlypreamble\mem@newcomponent
+
+\let\mem@components\@empty
+\let\mem@text@components\@empty
+\let\mem@c\@empty
+
+\DeclareLanguageComponent*{names}
+\DeclareLanguageComponent*{layout}
+
+\DeclareLanguageComponent{date}
+\DeclareLanguageComponent{processes}
+\DeclareLanguageComponent{tools}
+
+\expandafter\let\csname\mem@@prop?-text\endcsname\relax
+\expandafter\let\csname\mem@@prop?-notext\endcsname\relax
+
+\def\mem@enable{% Implicit #1
+ \let\mem@ifenabling\@firstoftwo
+ \mem@switch}
+
+\def\mem@disable{% Implicit #1
+ \let\mem@ifenabling\@secondoftwo
+ \mem@switch}
+
+\def\mem@switch#1{% !language
+ \@nameuse{\mem@@\@nameuse{\mem@@?\languagename}-#1}% -!language-
+ \@nameuse{\mem@@\languagename-#1}} % -dialect-
+
+\def\mem@switch@cmd#1#2{%
+ \let\mem@c=#1%
+ \let#1=#2%
+ \let#2=\mem@c}
+
+\def\mem@disablesub#1#2{%
+ \ifcase#1\or\or
+ \@gobble\or\mem@disable{#2}%
+ \else
+ \advance#1-\tw@
+ \fi}
+
+\def\mem@enablesub#1#2{%
+ \ifcase#1\or\or
+ \@gobble\or\mem@enable{#2}%
+ \fi}
+
+\def\mem@submain#1#2{%
+ #1=\ifcase#1\z@\or
+ \@ne\or
+ \z@\or
+ \@ne\mem@enable{#2}\or
+ \tw@\or
+ \thr@@\mem@disable{#2}\or
+ \tw@\or
+ \thr@@\or
+ 4 \or
+ 5 \mem@disable{#2}\or
+ 4 \or
+ 5 \fi\relax}
+
+\def\mem@disablemain#1#2{%
+ \ifcase#1\or\mem@disable{#2}\fi}
+
+\def\mem@enablemain#1#2{% Considerar la marca -\@m
+ #1=\ifnum#1<\z@\z@\else\@ne\mem@enable{#2}\fi}
+
+\def\mem@step#1{\let\mem@elt#1\mem@components}
+
+%%% 2005-12-08 Added grouping for languageset
+
+\def\languageset{%
+ \@ifstar{\mem@sel@i\@ne}{\mem@sel@i\z@}}
+
+% Task: Replacing the text for empty
+\def\mem@sel@i#1{%
+% To be used later. If \...text, then \mem@pardir = \@empty
+ \def\mem@pardir{\pardir\csname\mem@@\mem@script-dir\endcsname}%
+ \@ifnextchar[{\mem@sel@ii#1}{\mem@sel@ii#1[]}}
+
+\def\mem@sel@ii#1[#2]#3{%
+ \edef\mem@b{\zap@space#2 \@empty}%
+ \ifcase#1%
+ \edef\mem@a{{\expandafter\@firstoftwo\mem@last}{[\mem@b]{#3}}}%
+ \else
+ \def\mem@a{{[#2]{#3}}{}}%
+ \fi
+ \ifx\mem@a\mem@last\else
+ \let\mem@last\mem@a
+ \aftergroup\mem@fileends
+ \mem@filesetup#1{#2}{#3}%
+ \expandafter\mem@sel@iii\expandafter[\mem@b]{#3}#1%
+ \fi}
+
+\def\mem@sel@iii[#1]#2#3{%
+ \@ifundefined{l@#2}%
+ {\@ifundefined{memh@#2}%
+ {\mem@error{Unknown language}\language\z@}%
+ {\language\csname memh@#2\endcsname}}%
+ {\language\csname l@#2\endcsname}%
+ \let\mem@b\mem@script
+ \mem@step\mem@disablesub
+ \edef\languagename{#2}%
+ \ifcase#3% if local
+ \def\mem@flagon##1{\advance##14\relax}%
+ \def\mem@flagoff##1{\advance##18\relax}%
+ \@tempswatrue
+ \ExecuteLanguageProperties{#1}%
+ \if@tempswa % if there was not <component> or <nocomponent>
+ \def\mem@elt##1##2{\mem@flagon{##1}}%
+ \mem@text@components
+ \fi
+ \mem@csflag{processes}=5
+ \let\languagename\mem@main
+ \mem@step\mem@submain
+ \edef\languagename{#2}%
+ \mem@step\mem@enablesub
+ \else % if global
+ \mem@step\mem@disablemain
+ \def\mem@flagon##1{\Error}%
+ \def\mem@flagoff##1{##1-\@m}% Just a mark
+ \@tempswatrue
+ \ExecuteLanguageProperties{#1}%
+ %\if@tempswa
+ % % to be used if syntax changes
+ %\fi
+ %\mem@csflag{processes}=\@ne
+ \edef\mem@main{#2}%
+ \edef\languagename{#2}%
+ \mem@step\mem@enablemain
+ \fi
+ \ifx\mem@b\mem@script\else\mem@switchfont\fi % mem@b saved above
+ \edef\mem@charset{\csname\mem@use{}{cset}\endcsname}%
+ \textdir\csname\mem@@\mem@script-dir\endcsname
+ %\ifvmode
+ \mem@pardir
+ %\bodydir\csname\mem@@\mem@script-dir\endcsname
+ %\fi
+ \let\mem@pardir\@empty
+ \SetLanguageProcess{charenc}{\mem@charset}%
+ \SelectProcesses}
+
+\def\mem@switchfont{%
+ \mem@eforeach{\mem@fontfamilies}{%
+ \@ifundefined{\mem@@ font-\languagename-##1}%
+ {\@ifundefined{\mem@@ font-\mem@script-##1}{}%
+ {\edef\rmdefault{%
+ \csname\mem@@ font-\mem@script-##1\endcsname}}}%
+ {\edef\rmdefault{%
+ \csname\mem@@ font-\languagename-##1\endcsname}}}%
+ \mem@family} % To be expanded and fine-tuned
+
+\def\mem@fontfamilies{rmfamily}%,sffamily,ttfamily}
+
+\DeclareRobustCommand\languagetext{\@ifnextchar[{\mem@text}{\mem@text[]}}
+
+% The following contains a trick to avoid passing the text as
+% argument. The text is actually inside a group.
+
+\def\mem@text[#1]#2{%
+ \bgroup
+ \mem@sel@ii\z@[#1]{#2}%
+ \@ifnextchar\bgroup
+ {\let\mem@a}% Gobbles the opening {
+ {\mem@text@x}}% No braces--only a token
+
+\def\mem@text@x#1{#1\egroup}
+
+\def\languageunset{%
+ \@ifstar
+ {\languageset[]{\mem@main}}%
+ {\mem@unsel@i\mem@unsel@ii}}
+
+\def\mem@unsel@i{%
+ \c@mem@depth\z@
+ \mem@fileends
+ \def\mem@elt##1{%
+ \expandafter\let\csname\mem@@slot##1\endcsname\@empty}%
+ \mem@elt{}% or \@empty??
+ \mem@streams}
+
+\def\mem@unsel@ii{%
+ \edef\languagereset{%
+ \let\noexpand\languagereset\relax
+ \noexpand\mem@ensure\mem@last}%
+ \language\z@
+ \mem@step\mem@disablesub
+ \mem@step\mem@disablemain
+ \def\mem@elt##1##2{\mem@csflag{##2}\z@}%
+ \mem@components
+ \let\languagename\@empty
+ %\SelectProcesses
+ %\let\mem@main\@empty %% 2004/08/04 Commented out
+ %\let\mem@trprlist\nullocplist
+ \def\mem@last{{}{}}}
+
+% Automatic switching of languages
+
+\def\UpdateScript#1{}
+
+% Synchonization with auxiliary files
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+\AtBeginDocument{%
+ \if@filesw\else
+ \def\mem@filesetup#1#2#3{}%
+ \let\mem@filewrite\@gobble
+ \let\mem@fileends\relax
+ \fi}
+
+\AtEndDocument{%
+ \let\mem@newpage\newpage
+ \def\newpage{%
+ \let\newpage\mem@newpage
+ \newpage
+ \let\mem@immediate\immediate
+ \languageunset}}
+
+\let\mem@immediate\relax
+
+\def\mem@@slot{mem@slot@}
+
+\def\mem@filesetup#1#2#3{%
+ \advance\c@mem@depth\@ne
+ \def\mem@elt##1{%
+ \expandafter\mem@after\csname\mem@@slot##1\endcsname
+ {\addtocounter{\mem@@slot\the\mem@count}\@ne
+ \mem@immediate\write\mem@count
+ {\mem@begin
+ \noexpand\languageset\ifcase#1\or*\fi[#2]{#3}}}}%
+ \mem@elt\@empty
+ \mem@streams}
+
+\def\mem@filewrite#1{%
+ \mem@count=#1\relax
+ \@ifundefined{c@\mem@@slot\the\mem@count}%
+ {\newcounter{\mem@@slot\the\mem@count}%
+ \mem@slot@
+ \let\mem@elt\relax
+ \xdef\mem@streams{\mem@streams\mem@elt{\the\mem@count}}}{}%
+ {\@nameuse{\mem@@slot\the\mem@count}}%
+ \expandafter\gdef\csname\mem@@slot\the\mem@count\endcsname{}}
+
+\def\mem@fileends{%
+ \def\mem@elt##1%
+ {\ifnum\value{\mem@@slot##1}>\c@mem@depth
+ \mem@immediate\write##1{\mem@end}%
+ \addtocounter{\mem@@slot##1}\m@ne
+ \expandafter\mem@elt
+ \else
+ \expandafter\@gobble
+ \fi{##1}}%
+ \mem@streams
+ \let\mem@elt\relax}%
+
+\let\mem@streams\@empty
+\let\mem@slot@\@empty % <<?????
+
+\let\mem@begin\begingroup
+\let\mem@end\endgroup
+
+\newcounter{mem@depth}
+
+\long\def\protected@write#1#2#3{%
+ \mem@filewrite{#1}%
+ \begingroup
+ \let\thepage\relax
+ #2%
+ \let\protect\@unexpandable@protect
+ \edef\reserved@a{\write#1{#3}}%
+ \reserved@a
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi}
+
+\long\def\@writefile#1#2{%
+ \@ifundefined{tf@#1}\relax
+ {\mem@filewrite{\csname tf@#1\endcsname}%
+ \@temptokena{#2}%
+ \mem@immediate\write\csname tf@#1\endcsname{\the\@temptokena}}}
+
+% Dangerous. We should consider packages modifying that:
+% Actually, is it necessary at all?
+
+\def\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]%
+ \if@filesw
+ \protected@write\@auxout{}%
+ {\string\bibcite{#2}{\protect\mem@ensure\mem@last#1}}%
+ \fi\ignorespaces}
+
+% Declaring language stuff
+% ~~~~~~~~~~~~~~~~~~~~~~~~
+
+\def\DeclareLanguageCommand{%
+ \@ifstar{\mem@command@s}% Full \newcommand syntax not allowed
+ {\mem@command@x}}% with star. To be fixed.
+
+\def\mem@command@s#1#2#3{%
+ \@ifundefined{\mem@use{}{#1}}%
+ {\mem@eadd{#2}{%
+ \noexpand\mem@switch@cmd
+ \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+ \noexpand#1}%
+ \expandafter\newcommand
+ \csname\mem@@\languagename-\string#1\endcsname
+ {\utftext{#3}}}%
+ {\mem@bug@err3}}
+
+\def\mem@command@x#1#2{%
+ \@ifundefined{\mem@use{}{#1}}%
+ {\mem@eadd{#2}{%
+ \noexpand\mem@switch@cmd
+ \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+ \noexpand#1}%
+ \expandafter\newcommand
+ \csname\mem@@\languagename-\string#1\endcsname}%
+ {\mem@bug@err3}}
+
+\def\DeclareLanguageRobustCommand#1#2{%
+ \@ifundefined{\mem@use{}{#1}}%
+ {\mem@eadd{#2}{%
+ \noexpand\mem@switch@robustcmd
+ \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+ \noexpand#1%
+ \expandafter\noexpand\csname\mem@@\languagename--\string#1\endcsname}%
+ \expandafter\newcommand
+ \csname\mem@@\languagename-\string#1\endcsname}%
+ {\mem@bug@err3}}
+
+\def\SetLanguageVariable#1#2{%
+ \@ifundefined{\mem@use{}{#1}}%
+ {\mem@eadd{#2}{
+ \noexpand\mem@switch@var
+ \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+ \noexpand#1}%
+ \@namedef{\mem@@\languagename-\string#1}}%
+ {\mem@bug3}}
+
+\@onlypreamble\SetLanguageVariable
+\@onlypreamble\DeclareLanguageCommand
+
+\def\mem@enable{% Implicit #1
+ \let\mem@ifenabling\@firstoftwo
+ \mem@switch}
+
+\def\mem@disable{% Implicit #1
+ \let\mem@ifenabling\@secondoftwo
+ \mem@switch}
+
+\def\mem@switch#1{% !language
+ \@nameuse{\mem@@\@nameuse{\mem@@?\languagename}-#1}% -!language-
+ \@nameuse{\mem@@\languagename-#1}} % -dialect-
+
+\def\mem@switch@cmd#1#2{%
+ \let\mem@c=#1%
+ \let#1=#2%
+ \let#2=\mem@c}
+
+\def\mem@switch@robustcmd#1#2#3{%
+ \mem@ifenabling
+ {\expandafter\let\expandafter#3%
+ \csname\expandafter\@gobble\string#2 \endcsname
+ \expandafter\let\csname\expandafter\@gobble\string#2 \endcsname=#1%
+ \let#1=#2%
+ \edef\reserved@a{\string#2}%
+ \def\reserved@b{#2}%
+ \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}%
+ \edef#2{%
+ \ifx\reserved@a\reserved@b
+ \noexpand\x@protect
+ \noexpand#1%
+ \fi
+ \noexpand\protect
+ \expandafter\noexpand\csname
+ \expandafter\@gobble\string#2 \endcsname}}%
+ {\let#2=#1%
+ \expandafter\let\expandafter#1%
+ \csname\expandafter\@gobble\string#2 \endcsname
+ \expandafter\let\csname\expandafter\@gobble\string#2 \endcsname=#3}}
+
+\def\mem@switch@var#1#2{%
+ \edef\mem@c{\the#1}%
+ #1=#2\relax
+ \edef#2{\mem@c}}
+
+\def\SetLanguageCode#1#2#3#4{%
+ \mem@count=#3\relax
+ \edef\mem@a{%
+ \noexpand\SetLanguageVariable{\noexpand#1\the\mem@count}}%
+ \mem@a{#2}{#4}%
+ \def\mem@a{#2}% We must be sure that the language name
+ \begingroup % remains untouched with \lowercase
+ \lccode`~=`#1
+ \lccode`#1=`#1
+ \lowercase{%
+ \endgroup
+ \AtEndComponent\mem@a{\UpdateSpecial{#1}}}}
+
+\@onlypreamble\SetLanguageCode
+
+% Dates
+% ~~~~~
+
+\def\DeclareDateFunctionDefault#1{%
+ \expandafter\providecommand\csname\mem@@ DF-#1\endcsname}
+
+\def\DeclareDateFunction#1{%
+ \expandafter\DeclareLanguageCommand
+ \csname\mem@@ DF-#1\endcsname{date}}
+
+\@onlypreamble\DeclareDateFunctionDefault
+\@onlypreamble\DeclareDateFunction
+
+\begingroup
+\catcode`<=\active
+\gdef\DeclareDateCommand#1{%
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \catcode`<=\active
+ \def<##1>{\expandafter\noexpand\csname\mem@@ DF-##1\endcsname}%
+ \def\mem@a{%
+ \edef\mem@b{\endgroup%
+ \noexpand\DeclareLanguageCommand*{\noexpand#1}{date}{\mem@c}}
+ \mem@b}%
+ \afterassignment\mem@a\def\mem@c}
+\endgroup
+
+\@onlypreamble\DeclareDateCommand
+
+\newcount\weekday
+
+\let\c@day\day
+\let\c@weekday\weekday
+\let\c@month\month
+\let\c@year\year
+
+\def\SetWeekDay{\mem@count=\year\divide\mem@count4
+ \weekday=\mem@count
+ \multiply\mem@count4
+ \advance\mem@count-\year
+ \ifnum\mem@count=\z@
+ \ifnum\month<\thr@@\advance\weekday -1\fi\fi
+ \advance\weekday\year
+ \advance\weekday-1899
+ \advance\weekday\ifcase\month\or0 \or31 \or59 \or90 \or120
+ \or151 \or181 \or212 \or243 \or293 \or304 \or334 \fi
+ \advance\weekday\day
+ \mem@count=\weekday
+ \divide\mem@count7
+ \multiply\mem@count7
+ \advance\weekday-\mem@count
+ \advance\weekday\@ne}
+
+\SetWeekDay
+
+\DeclareDateFunctionDefault{d}{\the\day}
+\DeclareDateFunctionDefault{dd}{\ifnum\day<10 0\fi\the\day}
+
+\DeclareDateFunctionDefault{m}{\the\month}
+\DeclareDateFunctionDefault{mm}{\ifnum\month<10 0\fi\the\month}
+
+\DeclareDateFunctionDefault{yy}{\expandafter\@gobbletwo\the\year}
+\DeclareDateFunctionDefault{yyyy}{\the\year}
+
+\def\UpdateSpecial#1{%
+ \expandafter\mem@updatespecial\csname\string#1\endcsname}
+
+\def\mem@updatespecial#1{%
+ \def\mem@b##1##2{%
+ \ifnum`#1=`##2 \else
+ \noexpand##1\noexpand##2%
+ \fi}%
+ \def\mem@c##1##2{%
+ \ifnum\catcode`##2<\active
+ \ifnum\catcode`##2>10 \else\@firstoftwo\fi
+ \else
+ \noexpand##1\noexpand##2%
+ \fi}%
+ \def\do{\mem@b\do}%
+ \def\@makeother{\mem@b\@makeother}%
+ \edef\dospecials{\dospecials\mem@c\do#1}%
+ \edef\@sanitize{\@sanitize\mem@c\@makeother#1}%
+ \let\do\relax
+ \def\@makeother##1{\catcode`##1=12\relax}}
+
+\def\languageensure{%
+ \ifx\glossary\relax
+ \protect\mem@ensure\mem@last
+ \fi}
+
+\def\mem@ensure#1#2{%
+ \def\mem@a{{#1}{#2}}%
+ \ifx\mem@a\mem@last\else
+ \def\mem@a{#1}%
+ \ifx\mem@a\@empty
+ \def\mem@c{\mem@unsel@ii}%
+ \else
+ \def\mem@c{\mem@sel@iii#1\@ne}%
+ \fi
+ \def\mem@a{#2}%
+ \ifx\mem@a\@empty\else
+ \def\mem@a{#1}\edef\mem@b{\expandafter\@firstoftwo\mem@last}%
+ \ifx\mem@b\mem@a
+ \expandafter\def\else\expandafter\mem@after
+ \fi
+ \mem@c{\mem@sel@iii#2\z@}%
+ \fi
+ \expandafter\mem@c
+ \fi}
+
+% A recent change in LaTeX: now marks *are not* expanded 2004/08/05
+
+\def\markboth#1#2{%
+ \begingroup
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \protected@edef\mem@a##1##2{%
+ \noexpand\unrestored@protected@xdef
+ \noexpand\@themark
+ {{\languageensure##1}{\languageensure##2}}}%
+ \mem@a{#1}{#2}%
+ \@temptokena \expandafter{\@themark}%
+ \mark{\the\@temptokena}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi}
+
+\def\@markright#1#2#3{%
+ \@temptokena{#1}%
+ \protected@edef\mem@a##1##2{%
+ \noexpand\unrestored@protected@xdef
+ \noexpand\@themark{{##1}{\languageensure##2}}}%
+ \mem@a{\the\@temptokena}{#3}}
+
+%======
+
+%\DeclareProcess{T1}{t1-a, t2-a}
+
+%\DeclareLanguageProcessGroup
+%\DeclareMemProcessGroup
+
+% Puesto quien decide si un grupo es language o mem es
+% lo primero, se puede reducir a una forma:
+
+%\AddMemProcess{font}{fontenc}
+%\AddLanguageProcess{text}{sigma,otro,otro} % Logical
+
+%\SetMemProcess{fontenc}{T1}
+%\SetLanguageProcess{fontenc}{T1}
+
+%\SelectProcesses % Ambos
+
+\def\DeclareLanguageProcessGroup{\mem@declproc\languagename}
+\def\DeclareMemProcessGroup{\mem@declproc?}
+
+\let\mem@procgroups\@empty
+
+% Añadir debug: Que muestre las definiciones, activaciones y
+% estados actuales.
+
+% The first version sorted the groups by numerical order, but
+% as the ocp mechanism already uses the number to sort them
+% (this is one of its features), I don't think this is
+% is necessary. The previous version is:
+%
+% \def\mem@declproc#1#2#3{%
+% \let\mem@a\@empty
+% \@tempswatrue
+% \def\mem@pg##1##2##3{%
+% \if@tempswa
+% \ifnum##2=#2\relax
+% \Error
+% \else\ifnum##2>#2
+% \mem@after\mem@a{%
+% \mem@pg{#1}{#2}{#3}\mem@pg{##1}{##2}{##3}}%
+% \@tempswafalse
+% \else
+% \mem@after\mem@a{\mem@pg{##1}{##2}{##3}}%
+% \fi\fi
+% \else
+% \mem@after\mem@a{\mem@pg{##1}{##2}{##3}}%
+% \fi}%
+% \mem@procgroups
+% \if@tempswa
+% \mem@after\mem@a{\mem@pg{#1}{#2}{#3}}
+% \fi
+% \let\mem@procgroups\mem@a}
+%
+% This version would have to be expanded in order to check
+% multiple declarations.
+%
+% The new one is:
+
+\def\mem@declproc#1#2#3{%
+ % Multiple declarations are allowed provided they are
+ % consistent:
+ \@tempswatrue % true if to be added
+ \def\mem@pg##1##2##3{%
+ \ifnum#2=##2
+ \def\mem@a{#1{}#3}\def\mem@b{##1{}##3}%
+ \ifx\mem@a\mem@b
+ \@tempswafalse
+ \else
+ \Error
+ \fi
+ \fi
+ \def\mem@a{#3}\def\mem@b{##3}%
+ \ifx\mem@a\mem@b
+ \def\mem@a{\number#2{}#1}\def\mem@b{\number##2{}##1}%
+ \ifx\mem@a\mem@b
+ \@tempswafalse
+ \else
+ \Error
+ \fi
+ \fi}%
+ \mem@procgroups
+ \if@tempswa
+ \mem@after\mem@procgroups{\mem@pg{#1}{#2}{#3}}%
+ \fi}
+
+
+\DeclareLanguageProcessGroup{200}{charset}
+\DeclareLanguageProcessGroup{400}{unicode}
+\DeclareLanguageProcessGroup{600}{transcript}
+\DeclareLanguageProcessGroup{800}{input}
+% 1000: case
+\DeclareLanguageProcessGroup{1200}{text}
+\DeclareMemProcessGroup{1400}{font}
+
+\def\DeclareProcess#1#2{%
+ \mem@ecs\let{mem-tp-?-#1}\@empty
+ \mem@ecs\mem@lafter{mem-tp-?-#1}\mem@elt{#2}%
+ \global\mem@ecs\let{mem-tp-?-#1\expandafter}\csname mem-tp-?-#1\endcsname}
+
+% The following is variant to assign a different ocp for
+% a certain language - for example, a different uppercase
+% ocp for Turkish. To investigate if this is the right way,
+% which explain why the syntax is different
+
+\def\DeclareLanguageProcess#1#2{%
+ \mem@ecs\let{mem-tp-\languagename-#1}\@empty
+ \mem@ecs\mem@lafter{mem-tp-\languagename-#1}\mem@elt{#2}%
+ \global\mem@ecs
+ \let{mem-tp-\languagename-#1\expandafter}%
+ \csname mem-tp-\languagename-#1\endcsname}
+
+\def\mem@setproc#1#2#3{%
+ \mem@ecs\let{mem-pp-#1-#2}\@empty
+ \mem@ecs\mem@lafter{mem-pp-#1-#2}\mem@elttp{#3}%
+ \def\mem@elttp##1{%
+ %\expandafter\show\csname mem-tp-##1\endcsname
+ \@ifundefined{mem-tp-?-##1}%
+% Añadir aquí la posibilidad de un .mpd
+ {\DeclareProcess{##1}{##1}}%
+ {}}%
+ \@nameuse{mem-pp-#1-#2}}
+
+\def\SetMemProcess{\mem@setproc?}
+\def\SetLanguageProcess{\mem@setproc\languagename}
+
+% We must avoid duplicated entries, so that we can
+% add processes redundantly (for example, in 'case'):
+
+\def\mem@addproc#1#2#3{%
+ \mem@setcsvar{mem-lp-#1-#2}%
+ \def\mem@eltpp##1{,##1,}%
+ \mem@eforeach{#3}{%
+ \@expandtwoargs\in@{,##1,}{,\@nameuse{mem-lp-#1-#2},}%
+ \ifin@\else
+ \mem@ecs\mem@after{mem-lp-#1-#2}{\mem@eltpp{##1}}%
+ \@ifundefined{mem-pp-#1-##1}%
+ {\mem@setproc#1{##1}{##1}}%
+ {}%
+ \fi}}
+
+\def\AddMemProcess{\mem@addproc?}
+\def\AddLanguageProcess{\mem@addproc\languagename}
+
+\def\mem@selectprocs#1#2#3{%
+ % Make sure mem-lp-?-#3 is not undefined/relax
+ \mem@setcsvar{mem-lp-?-#3}%
+ \def\mem@eltpp##1{%
+ \@ifundefined{\mem@use{pp-}{##1}}%
+ {}%
+ {\csname\mem@use{pp-}{##1}\endcsname}}%
+ \def\mem@elttp##1{\csname\mem@use{tp-}{##1}\endcsname}%
+ % Build the ocplist name
+ \edef\mem@elt##1{\string/##1}%
+ \edef\mem@c{\csname\mem@use{lp-}{#3}\endcsname}%
+ \ifx\mem@c\@empty\else
+ \edef\mem@a{cpl-\csname\mem@use{lp-}{#3}\endcsname}%
+ \mem@debug\@ne{Processing OCP list \mem@c\space for group #3 (#2)}%
+ \@ifundefined{\mem@a}%
+ {\mem@debug\@ne{- Defining OCP list \mem@c}%
+ % Define ocps, if necessary
+ \def\mem@elt##1{%
+ \@ifundefined{ocp-##1}% <- Seleccionar el ocp correcto
+ {\mem@debug\@ne{-- Loading OCP ##1}%
+ \global\mem@ecs\ocp{ocp-##1}=##1\relax}%
+ {}}%
+ \csname\mem@use{lp-}{#3}\endcsname
+ % Build the ocplist body and define ocplist
+ \def\mem@elt##1{%
+ \addbeforeocplist #2 %
+ \@nameuse{ocp-##1}}%
+ \edef\mem@c{%
+ \global\mem@ecs\ocplist{\mem@a}%
+ \csname\mem@use{lp-}{#3}\endcsname
+ \nullocplist}%
+ \mem@c}%
+ {}%
+ % Build \ShowProcesses data
+ \def\mem@eltpp##1{^^J(Mem) - ##1 = \csname\mem@use{pp-}{##1}\endcsname}%
+ \def\mem@elttp##1{##1 : \csname\mem@use{tp-}{##1}\endcsname}%
+ \def\mem@elt##1{##1 }%
+ \mem@eafter\mem@toshow{^^J(Mem) #2 (#3): \csname\mem@use{lp-}{#3}\endcsname}%
+ % Push the list
+ \mem@eafter\mem@topush{\mem@ecs\pushocplist{\mem@a}}%
+ \fi}
+
+\def\SelectProcesses{%
+ \mem@debug\@ne{====================}%
+% \ifx\languagename\@empty
+% \mem@debug\@ne{Rebuilding processes for (no language)
+% on input line \the\inputlineno}%
+% \else
+ \mem@debug\@ne{Rebuilding processes for \languagename\space
+ on input line \the\inputlineno}%
+% \fi
+ \edef\mem@toshow{%
+ (Mem) ==========================================^^J%
+ (Mem) \string\ShowProcesses\space(logical = physical : ocps)}%
+ \let\mem@frompush\mem@topush
+ \let\mem@topush\@empty
+ \let\mem@pg\mem@selectprocs
+ \mem@procgroups
+ \ifx\mem@frompush\mem@topush
+ \mem@debug\@ne{Skipping - currently active}%
+ \else
+ \clearocplists
+ \mem@debug\@ne{Activating}%
+ \mem@topush
+ \fi}
+%\ShowProcesses}
+ % Ambos
+\def\ShowProcesses{\typeout{\mem@toshow}}
+
+
+
+
+% Font processing
+% ~~~~~~~~~~~~~~~
+
+% Let's modify \selectfont. Essentialy it selects a language using
+% the current font enconding and then redefines what an encoding means.
+%
+% Automatic selection of font encoding based on fd files--if there
+% is an fd file for some combination then select it (with certain
+% preferences). Hovever, it turns out that t1cmr exists but pointing to
+% _another_ font, and that ot1omlgc points to an ut1 encoded font.
+
+\expandafter\let\expandafter
+ \mem@selectfont\csname selectfont \endcsname
+
+\DeclareRobustCommand\selectfont{%
+ \let\mem@fencoding\f@encoding
+ \@ifundefined{\mem@@\languagename-\f@family-enc}%
+ {\mem@eforeach{\csname\mem@@\languagename-encs\endcsname}{%
+ \lowercase{\edef\mem@a{##1}}%
+ \IfFileExists{\mem@a\f@family.fd}%
+ {\@namedef{\mem@@\languagename-\f@family-enc}{##1}%
+ \@ifundefined{\mem@@ T@##1}%
+ {\global\@namedef{\mem@@ T@##1}{}%
+ \@ifundefined{T@##1}{\global\@namedef{T@##1}{}}{}%
+ \def\f@encoding{##1}%
+ \setbox\z@\vbox\bgroup % dummy box
+ \catcode`\\=0
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\^^M=5
+ \catcode`\ =10
+ \catcode`\^^I=10
+ \catcode`\%=14
+ \input{\mem@a.ed}%
+ \egroup}%
+ {}%
+ \fontencoding{##1}%
+ \SetMemProcess{fontenc}{\csname\mem@@##1-process\endcsname}%
+ \mem@lastfor}%
+ {}}%
+ \ifx\mem@forcmd\@gobble\else
+% \PackageError{mem}%
+% {Unable to find a proper encoding for a font
+% family \f@family}%
+% {The list of encodings for that language [...]}%
+ \fi}%
+ {\fontencoding{\csname\mem@@\languagename-\f@family-enc\endcsname}%
+ \edef\f@encoding{\csname\mem@@\languagename-\f@family-enc\endcsname}%
+ \SetMemProcess{fontenc}{\csname\mem@@\f@encoding-process\endcsname}}%
+ % Select new process only if the encoding has changed
+ \ifx\mem@fencoding\f@encoding\else
+ \SelectProcesses
+ \fi
+ \mem@selectfont
+ \begingroup % ***** An input in an ocp is ignored? <<<<<
+ % Sadly, there is a bug and it is.
+ \nfss@catcodes
+ \let\nfss@catcodes\relax
+ \@ifundefined{TS1/\f@family/m/n}%
+ {\InputIfFileExists{ts1\f@family.fd}{}{}}%
+ {}%
+ \endgroup}
+
+% \..family are modified too keep track of the
+% current family, so that if the script changes
+% the family is still the same. To be fine tuned.
+
+\DeclareRobustCommand\rmfamily
+ {\not@math@alphabet\rmfamily\mathrm
+ \let\mem@family\rmfamily
+ \fontfamily\rmdefault\selectfont}
+\DeclareRobustCommand\sffamily
+ {\not@math@alphabet\sffamily\mathsf
+ \let\mem@family\sffamily
+ \fontfamily\sfdefault\selectfont}
+\DeclareRobustCommand\ttfamily
+ {\not@math@alphabet\ttfamily\mathtt
+ \let\mem@family\ttfamily
+ \fontfamily\ttdefault\selectfont}
+
+\let\mem@family\rmfamily
+
+
+% Properties
+% ~~~~~~~~~~
+
+\def\DeclareLanguageProperty{%
+ \@ifstar{\mem@prop@s}{\mem@prop@x}}
+
+\def\mem@prop@s#1{% Implicit #2
+ \edef\mem@b{\zap@space#1 \@empty}%
+ \expandafter\def\csname\mem@@prop\languagename-\mem@b\endcsname##1}
+
+\def\mem@prop@x#1#2{%
+ \edef\mem@b{\zap@space#1 \@empty}%
+ \expandafter\def\csname\mem@@prop\languagename-\mem@b\endcsname{#2}}
+
+% There are parameters depending on both the language and the font
+% encoding. However, they may not be known when the package is
+% loaded. They are set with \languageproperties, but I think that's
+% not very rubust.
+%
+% Currently works as if it was in fact named \dialectproperties
+
+\def\languageproperties#1#2{%
+ \let\mem@savelang\languagename
+ \def\languagename{#1}%
+ \expandafter\edef\csname\mem@@#1-prlt\endcsname{\zap@space#2 \@empty}%
+ \mem@eforeach{\zap@space#2 \@empty}{%
+ \csname\mem@cmd{prop-}{#1}{##1}\endcsname}% %<<---remove???
+ \edef\mem@b{#1}%
+ \ifx\mem@savelang\languagename
+ \ExecuteLanguageProperties{\zap@space#2 \@empty}%
+ \mem@switchfont
+ \fi
+ \let\languagename\mem@savelang}
+
+\def\ExecuteLanguageProperties#1{%
+ \@ifundefined{\mem@@\languagename-prlt}%
+ {\let\mem@a\@empty}%
+ {\edef\mem@a{\csname\mem@@\languagename-prlt\endcsname,}}%
+ \mem@eforeach{\mem@a#1}{%
+ \def\mem@b{##1}%
+ \ifx\mem@b\@empty\else
+ \@ifundefined{\mem@use{prop-}{##1}}%
+ {% Raise error if there is no =
+ \expandafter\mem@executegen##1\\}% ??Lo siguiente con \edef?
+ {\csname\mem@use{prop-}{##1}\endcsname}%
+ \fi}}
+
+\def\mem@executegen#1=#2\\{%
+ \csname\mem@use{prop-}{#1}\endcsname{#2}}
+
+% Properties shared by all languages as generic tools.
+% They are assigned to the ? language in the top of the
+% tree. When executed, \languagename contains the actual
+% name of the active language.
+
+\def\languagename{?}
+
+\DeclareLanguageProperty*{charset}{%
+ \@namedef{\mem@@\languagename-cset}{#1}%
+ \SetLanguageProcess{charenc}{#1}}
+
+\DeclareLanguageProperty*{hyphenation}{%
+ \def\mem@hyphenation{#1}}
+
+\DeclareLanguageProperty*{fontencs}{%
+ \mem@setencs\languagename{#1}}
+
+\DeclareLanguageProperty*{rmfamily}{%
+ \@namedef{\mem@@ font-\languagename-rmfamily}{#1}}
+
+\DeclareLanguageProperty*{sffamily}{%
+ \@namedef{\mem@@ font-\languagename-sffamily}{#1}}
+
+\DeclareLanguageProperty*{ttfamily}{%
+ \@namedef{\mem@@ font-\languagename-ttfamily}{#1}}
+
+\AddMemProcess{font}{fontenc}
+
+\AddLanguageProcess{charset}{charenc}
+%\SetLanguageProcess{charenc}{\expandafter\noexpand\@nameuse{\mem@use{}{cset}}}
+%\SetLanguageProcess{charenc}{isolat1}
+
+% Scripts
+% ~~~~~~~
+
+\def\SetLanguageScript#1{%
+ \mem@foreach{#1}{%
+ \lowercase{\edef\mem@b{##1}}%
+ \@ifundefined{\mem@@ script-##1}{\input{\mem@b.sd}}{}%
+ \def\mem@a{##1}}% script description
+ \edef\mem@b{%
+ \noexpand\DeclareLanguageCommand{\noexpand\mem@script}{processes}{\mem@a}}%
+ \mem@b}
+
+\def\DeclareScript#1{%
+ \@namedef{\mem@@ script-#1}{}%
+ \def\mem@script{#1}%
+ \lowercase{\def\mem@b{#1}}%
+ \expandafter\let\csname\mem@@ lang-#1\endcsname\mem@b}
+
+\def\SetScriptDirection#1{%
+ \expandafter\def\csname\mem@@\mem@script-dir\endcsname{#1}}
+
+\def\mem@setencs#1#2{\@namedef{\mem@@#1-encs}{#2}}
+
+\def\DeclareScriptSymbol#1#2{%
+ \let#1\relax
+ \newcommand{#1}{\unichar{#2}}}
+
+\def\DeclareScriptCommand#1{%
+ \let#1\relax % Implicit #1#2 etc
+ \newcommand{#1}}
+
+
+\def\scriptproperties#1#2{%
+ \mem@eforeach{\zap@space#2 \@empty}{%
+ \mem@setfamily#1\\##1\\}%
+ \long\def\mem@b{#1}% \long because \mem@script is \long!!
+ \ifx\mem@b\mem@script\mem@switchfont\fi}
+
+\def\mem@setfamily#1\\#2=#3\\{%
+ \@namedef{\mem@@ font-#1-#2}{#3}}
+
+
+% ==========================
+
+\def\SetEncodingScript#1{}%
+
+% \def\SetEncodingDirection#1{%
+% \global\@namedef{\mem@@\f@encoding-dir}{#1}}
+
+\newcommand\SetEncodingProcess[2]{%
+ \DeclareProcess{#1}{#2}%
+ \SetMemProcess{fontenc}{#1}%
+ \global\@namedef{\mem@@\f@encoding-process}{#1}}
+
+\SetEncodingProcess{t1}{t1-dec,t1-rec,t1-com}
+%\SelectProcesses
+
+% Note the following does not switch the encoding name.
+% In other words, symbols are incorporated as part of
+% the main encoding and not as a separate encoding.
+% The final decision about what font to use is left
+% to the font encoding OCP.
+% To be fixed.
+
+\def\SetSymbolEncodings#1{%
+ \@ifundefined{\mem@@ T@##1}%
+ {\global\@namedef{\mem@@ T@##1}{}%
+ \@ifundefined{T@##1}{\global\@namedef{T@##1}{}}{}}
+ {}}
+
+% \let\mem@textcmd\DeclareTextCommand
+%
+% \def\DeclareEncodingSymbol#1#2{%
+% \mem@textcmd{#1}{\f@encoding}{\unichar{#2}}}
+%
+% \def\DeclareEncodingCommand#1{% Implicit #1#2 etc
+% \mem@textcmd{#1}{\f@encoding}}
+
+% =============================
+
+% Charsets
+% ~~~~~~~~
+%
+% The escape char in the ASCII/Unicode charsets is used as
+% a escape with several meanings (given by the second char).
+% It is used by charset to unicode ocp's to enter a Unicode
+% value directly without conversion.
+
+{\catcode`\^^1b=11
+\catcode`\^^00=11
+\catcode`\^^01=11
+\catcode`\^^02=11
+\gdef\unichar#1{\mem@protected{^^1b^^00#1^^1b}\unichar{#1}}
+\gdef\unitext#1{\mem@protected{^^1b^^01#1^^1b}\unitext{#1}}
+\gdef\utftext#1{\mem@protected{^^1b^^02#1^^1b}\utftext{#1}}
+\gdef\utfstring#1{\mem@protected{^^1b^^02#1^^1b}\utfstring{#1}}
+}
+
+\DeclareRobustCommand\utftext[1]{{%
+ \ExecuteLanguageProperties{charset=utf8}%
+ \SelectProcesses
+ #1}}
+
+% ====================
+
+% onfss
+
+\def\onfss@symenc{TS1}
+\DeclareFontEncoding{\onfss@symenc}{}{}
+
+\DeclareRobustCommand\UseMemTextSymbol[1]{%
+ {[[#1]]\fontencoding{\onfss@symenc}\mem@selectfont\char#1 }}
+
+\DeclareRobustCommand\UseMemTextSymbol[2]{%
+ {\fontencoding{#1}\mem@selectfont\char#2 }}
+
+% \setbox\z@\hbox{\rmfamily\UseMemTextSymbol{TS1}{167}%
+% \sffamily\UseMemTextSymbol{TS1}{167}%
+% \ttfamily\UseMemTextSymbol{TS1}{167}}
+
+%================
+
+% Package options
+
+\let\PreLoadPatterns\@gobbletwo
+
+\def\SetPatterns#1#2{%
+ \expandafter\chardef
+ \csname memh@#1\endcsname=#2\relax}
+
+\def\LoadLanguage#1#2#3#4{%
+ \DeclareOption{#1}{\mem@input{#1}{#2}{#3}{#4}}}
+
+\def\mem@input#1#2#3#4{%
+ \@ifundefined{languagelist}%
+ {\edef\languagelist{#1}}%
+ {\edef\languagelist{\languagelist,#1}}%
+ \@ifundefined{memh@#1}%
+ {\expandafter\let\csname memh@#1\expandafter\endcsname
+ \csname memh@#3\endcsname%
+ \PackageInfo{mem}%
+ {#1 with #3 patterns\@gobble}}\@empty
+ \@ifundefined{\mem@@?#1}%
+ {\lowercase{\edef\mem@b{#2}}%
+ \InputIfFileExists{#2.ld}%
+ {}%
+ {\mem@error{Missing language file}}}
+ {}% And make sure the right dialect is selected:
+ \mem@setencs{#1}{#4}%
+ \edef\languagename{#1}%
+ \mem@ecs\def{\mem@@\languagename-isocode}{#2}}
+
+\everyjob\expandafter{\the\everyjob\SetWeekDay}
+
+\def\mem@process#1=#2\mem@process{%
+ \@ifundefined{\mem@@ gopt-#1}%
+ {\mem@error{Error}}
+ {\@nameuse{\mem@@ gopt-#1}{#2}}}
+
+\@namedef{\mem@@ gopt-charset}#1{%
+ \SetMemProcess{charenc}{#1}%
+ \@namedef{\mem@@?-cset}{#1}}
+
+\SetMemProcess{charenc}{utf8}
+\@namedef{\mem@@?-cset}{utf8}
+
+\DeclareOption*{%
+ \@expandtwoargs\in@{=}{\CurrentOption}%
+ \ifin@
+ \expandafter\mem@process\CurrentOption\mem@process
+ \else
+ \mem@error{Error}%\expandafter\mem@input\CurrentOption\mem@input%
+ \fi}
+
+\input{mem.cfg}
+
+\def\mem@sel@opt{%
+ \PackageInfo{mem}%
+ {Selecting document language:\MessageBreak
+ \languagename\@gobble}%
+ \expandafter\languageset\expandafter*\expandafter
+ {\languagename}%
+ \bodydir\csname\mem@@\mem@script-dir\endcsname}
+
+\ProcessOptions*
+
+\mem@sel@opt
+
+% Select the interface
+
+\InputIfFileExists{\csname\mem@@\languagename-isocode\endcsname
+ \csname\mem@@?-cset\endcsname.id}{}{}
+
+ % Implicit #2#3
+\def\UseMemAccent#1{\csname mem@accent@#1\endcsname}
+
+% There are four kind of accents.
+%
+% t: Top accent is the usual accent, which
+% can be combined with the well known diatop macro
+% #2 is either c or l, if continues or it's the
+% last accent; used only in t-
+
+\def\mem@accent@t#1#2#3{% This is the well known diatop macro.
+ \if#2c%
+ \leavevmode
+ \begingroup
+ \setbox1=\hbox{{\accent#1{}}}%
+ \setbox2=\hbox{{#3{}}}%
+ \dimen0=\ifdim\wd1>\wd2\wd1\else\wd2\fi
+ \dimen1=\ht2\advance\dimen1by-1ex
+ \setbox1=\hbox to1\dimen0{\hss\accent#1\hss}%
+ \rlap{\raise1\dimen1\box1}%
+ \hbox to1\dimen0{\hss#3\hss}%
+ \endgroup
+ \else
+ \accent#1 #3%
+ \fi}
+
+% u: bot accent based on an accent, like \b
+
+\def\mem@accent@u#1#2#3{% 9
+ \hmode@bgroup
+ \o@lign{\relax#3\crcr\hidewidth\sh@ft{29}%
+ \vbox to.2ex{\hbox{\char#1}\vss}\hidewidth}%
+ \egroup}
+
+\let\mem@accent@a\mem@accent@u % to remove
+
+% b: bot accent with an "underaccent" like \c
+
+\def\mem@accent@b#1#2#3{% 11
+ \leavevmode
+ \setbox\z@\hbox{#3}%
+ \ifdim\ht\z@=1ex
+ \accent#1 #3%
+ \else
+ {\ooalign{\hidewidth\char#1\hidewidth
+ \crcr\unhbox\z@}}%
+ \fi}
+
+% c: bot accent with an "underaccent" like \c
+
+\let\mem@accent@c\mem@accent@b
+
+% p: bot accent with a puntuaction point, like \d
+
+\def\mem@accent@p#1#2#3{%
+ \hmode@bgroup
+ \o@lign{\relax#3\crcr\hidewidth\sh@ft{10}#1\hidewidth}%
+ \egroup}
+
+% k: an special case (task: to investigate) for \k
+
+\def\mem@accent@k#1#2#3{%
+ \oalign{\null#3\crcr\hidewidth\char#1}}
+
+\def\UseMemUnichar#1{\char#1 }
+
+% ====== Verbatim
+% The following characters are used in ocp files to ensure their
+% catcode is always the same even if in verbatim mode. See mtp2ocp
+% for further details (it replaces \, {, }, etc. by the chars below).
+
+\catcode"E000=0 % \
+\catcode"E001=1 % {
+\catcode"E002=2 % }
+\catcode"E003=3 % $
+\catcode"E004=4 % &
+\catcode"E005=5 % <ret>
+\catcode"E006=6 % #
+\catcode"E007=7 % ^
+\catcode"E008=8 % _
+
+% Special chars to the PUA. This is necessary because ocp's
+% recatcode the chars.
+
+\def\#{\unichar{"E123}}
+\def\${\unichar{"E124}}
+\def\%{\unichar{"E125}}
+\def\&{\unichar{"E126}}
+\def\_{\unichar{"E15F}}
+
+% =============== Math
+
+\def\DeclareMathSymbol#1#2#3#4{%
+ \expandafter\in@\csname sym#3\expandafter\endcsname
+ \expandafter{\group@list}%
+ \ifin@
+ \begingroup
+ \if\relax\noexpand#1% is command?
+ \edef\reserved@a{\noexpand\in@{\string\mathchar}{\meaning#1}}%
+ \reserved@a
+ \ifin@
+ \expandafter\set@mathsymbol\csname sym#3\endcsname#1#2{#4}%
+ \@font@info{Redeclaring math symbol \string#1}%
+ \else
+ \expandafter\ifx
+ \csname\expandafter\@gobble\string#1\endcsname
+ \relax
+ \expandafter\set@mathsymbol\csname sym#3\endcsname#1#2{#4}%
+ \else
+ \@latex@error{Command `\string#1' already defined}\@eha
+ \fi
+ \fi
+ \else
+ \expandafter\set@mathchar\csname sym#3\endcsname#1#2{#4}%
+ \fi
+ \endgroup
+ \else
+ \@latex@error{Symbol font `#3' is not defined}\@eha
+ \fi
+}
+
+\def\mem@setmath#1#2#3#4{%
+ \count@\mathchar@type#3
+ \multiply\count@256
+ \advance\count@#1
+ \multiply\count@65536
+ \advance\count@#4
+ \global#2\count@}
+
+\def\set@mathchar#1#2{\mem@setmath{#1}{\omathcode`#2=}}
+\def\set@mathsymbol#1#2{\mem@setmath{#1}{\omathchardef#2}}
+
+\def\MemUnknownCharacter#1{%
+ \vrule width .6em
+ \PackageWarning{Mem}{Unknown character \number`#1\space}}
+
+% The original definition of \do@noligs includes a \char and
+% \char's has been always problematic in omega. Here is a
+% redefinition which uses the actual char. 2005-12-08
+
+\def\do@noligs#1{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup
+ \def~{\leavevmode\kern\z@\expandafter\@gobble\string#1}}}
+
+\def\MemMoveOtherChar#1{\relax\expandafter\@gobble\string#1}
+
+\endinput
+%%
+%% End of file `mem.sty'.
diff --git a/macros/latex/exptl/mem/mem.tex b/macros/latex/exptl/mem/mem.tex
new file mode 100644
index 0000000000..187ac31075
--- /dev/null
+++ b/macros/latex/exptl/mem/mem.tex
@@ -0,0 +1,1197 @@
+\documentclass{article}
+
+%\usepackage[english]{mem}
+
+\addtolength{\topmargin}{-3pc}
+\addtolength{\textwidth}{6pc}
+\addtolength{\oddsidemargin}{-2pc}
+\addtolength{\textheight}{7pc}
+
+\def\lc{\texttt{\string<}}
+\def\rc{\texttt{\string>}}
+
+\DeclareRobustCommand{\cs}[1]{\texttt{\char`\\#1}}
+
+\newenvironment{cmd}%
+ {\par\addvspace{4.5ex plus 1ex}%
+ \vskip-\parskip\small
+ \renewcommand{\arraystretch}{1.2}%
+ \noindent\hspace{-\leftmargini}%
+ \begin{tabular}{|l|}\hline\ignorespaces}
+ {\\\hline\end{tabular}\nobreak\par\nobreak
+ \vspace{2.3ex}\vskip-\parskip}
+
+\newenvironment{sample}{\small\quote}{\endquote}
+
+\newcommand{\note}[1]{\textit{Note: #1}}
+
+\catcode`>=11
+\catcode`<=\active
+\def<#1>{\textit{#1}}
+\catcode`|=\active
+\gdef|{\verb|\def<{|\syntx}}
+\gdef\syntx#1>{\textit{#1}|}
+
+\raggedright
+\parindent1em
+\nofiles
+
+\begin{document}
+
+\title{Mem\\
+ A \emph{M}ultilingual \emph{e}nviron\emph{m}ent for Lamedh/Lambda}
+
+\author{Javier Bezos-L\'opez}
+
+
+\maketitle
+
+\note{This is a draft. Don't expect all things explained
+here will work, but many of them work!}
+
+\section{Introduction}
+
+The package \textsf{Mem} provides a language selection system for
+Aleph/Omega taking advantage of the features of \LaTeXe. It provides
+some utilities which make writing a language style quite easy and
+straightforward and its aims are mainly:
+\begin{itemize}
+\item to provide a set of high level macros for users and
+ developpers of language styles, which "hide" the
+ involved primitives and make them easier to use.
+
+\item to coodinate different languages so that Aleph/Omega will
+ become a true multilingual environment.
+\end{itemize}
+
+Some of the features implemented by \textsf{Mem} are:
+
+\begin{itemize}
+\item You can switch between languages freely. You have not
+to take care of neither head lines nor toc and bib
+entries---the right language is always used.\footnote{Index
+ entries follow a special syntax and
+ the current version of \textsf{mem} cannot handle that. For this
+ reason the index entries remain untouched and you may
+ use language commands only to some extent.}
+You can even get just a few commands from a language, not all.
+
+\item Dialects---small language variants---are supported. For
+instance American is a variant of English with another date
+format. Hyphenations patterns are attached to dialects and
+different rules for US and British English can be used.
+
+\item Customization is quite easy---just redefine a command of a
+language with |\renewcommand| when the language is in force. The new
+definition will be remembered, even if you switch back and forth
+between languages. This way, Mem essentially suggest while the final
+typographical decisions, which are a matter of style, are
+left to you.\note{And this idea must be further extended.}
+
+\item An unique layout can be used through the document,
+even with lots of languages. If you use a class with
+a certain layout you don't want to modify, you or the
+class can tell \textsf{mem} not to touch
+it at all.
+
+\item Mem understands Unicode composite character, at least to
+some extent. A file using decomposed characters (eg,
+a\textasciicircum{} instead of \^{a}) will be typeset as
+expected.\footnote{Actually, \texttt{\string\^} is redefined
+to create a composite character.}
+
+\item Integrated tools to type trasliterated text, so that
+yo can say \textit{dobryj den'} and it will be transliterated
+to the Cyrillic alphabet. That will allow to enter the text
+with the Unicode characters used in transliterations, too
+(eg, Shar\d{h} Ibn `Aq\={\i}l `al\'{a} Alf\={\i}yat Ibn
+M\={a}lik).
+\end{itemize}
+
+\section{Quick start}
+
+Once installed, you can use mem.
+To write a, say, German document simply state the
+|german| option in the |\documentclass| and load
+the package with |\usepackage[charset=isolat1]{mem}|
+(if you are using the latin1 encoding; if the document
+uses the Unicode encoding this setting is not necessary).
+That's all. If you are happy with
+that you need not go further; but if you are
+interested in advanced features (how to insert a
+Spanish date, for instance) just continue.
+
+\section{User Interface}
+
+\subsection{Components}
+
+A language has a series of commands and variables (counters and lengths)
+stored in several components. These components are:
+\begin{description}
+\item[names] Translation of commands for titles, etc., following
+the international \LaTeX{} conventions.
+\item[layout] Commands and variables for the general layout of the
+document (|enumerate|, |itemize|, etc.)
+\item[date] Logically, commands concerning dates.
+\item[tools] Supplementary command definitions.
+\end{description}
+
+These components belong to two categories: names and layout are
+considered \emph{document} components, since they are intended for
+formatting the document; date and tools are considered
+\emph{text} components, since you will want to use them temporarily
+for a short text (or may be not so short)
+in some language. There is a further component which
+is hidden to users: processes, which contains macros used by
+traslation processes dealing with text typographical conventions
+and transformations.
+
+\subsection{Selecting a Language}
+
+You must load languages with |\usepackage|:
+\begin{sample}
+|\usepackage[english,spanish]{mem}|
+\end{sample}
+
+Global options (those of |\documentclass|) will be recognized as usual.
+You can cancel this automatic
+selection with the package option |loadonly|:
+\begin{sample}
+|\usepackage[german,spanish,loadonly]{mem}|
+\end{sample}
+
+\begin{cmd}
+|\languageset*[<no-components>,<properties>]{<language>}|
+\end{cmd}
+
+Selects all components from <language>, except if there is the optional
+argument. <no-components> is a list of components \emph{not} to be selected, in the
+form |no<component>,no<component>,...|. For instance, if you dislike
+using tools:
+\begin{sample}
+|\languageset*[notools]{french}|
+\end{sample}
+\note{perhaps this syntax based on <no-components> should be changed}
+This command also sets defaults to be used by the
+unstarred version (see below). Properties change the behaviour
+of some features of the language.
+
+\begin{cmd}
+|\begin{<language>} ... \end{<language>}|\\
+|\begin{languageset}[<components>,<properties>]{<language>} ... \end{languageset}|
+\end{cmd}
+
+Where <components> is a list of <component>s and/or |no<component>|s.
+
+The simplest way to use a language locally is the environment
+above. The second one provides a more flexible approach.
+
+There are three posibilities:
+\begin{itemize}
+\item When a component is cited in the form <component>
+(e.g., |date| or |names|), this component is selected
+for the current language, i.e., that of the current
+|\languageset|.
+
+\item When a component is cited in the form |no<component>|
+(e.g., |nodate| or |nonames|), this component is cancelled.
+
+\item When a component is not cited, then the default, i.e., that
+set by the |\languageset*| in force, is used; it can be
+a |no|-form, and then the component will be disabled if
+necessary. If there is
+no a previous starred selection, the |no|-form will be
+presumed in all of components.
+\end{itemize}
+If no optional argument is given, then |text,tools,date| are
+presumed. Thus, at most two languages are selected at the same time; this
+point should be stressed, because it means that you cannot use
+at the same time features belonging to three or more languages. While at
+first glance this behaviour may seem very limiting... \note{to be filled}
+\note{to repeat, perhaps the way components are selected should be changed,
+but I have not found a simpler syntax.}
+
+Here is an example:
+\begin{sample}
+|\languageset*[notools]{spanish}|\\
+Now we have Spanish |names|, |date|, and |layout|,\\
+but no |tools| at all.\\
+|\languageset[names,nodate]{french}|\\
+Now we have Spanish |layout|, French |names|,\\
+but no |tools|.\\
+|\languageset[tools]{german}|\\
+Now we have Spanish |names|, |date|, |layout|,\\
+and German |tools|.\\
+\end{sample}
+
+Selection is always local. There is also the possibility
+to use |languageset| as command and |\languageset*| as environment.
+\begin{sample}
+|\begin{languageset}*[<no-components>]{<language>} <text> \end{languageset}|\\
+|\languageset[<components>]{<language>}|
+\end{sample}
+
+It very unlikely that you will use the starred version at all.
+
+For the sake of clarity, spaces are ignored in the optional
+argument, so that you can write
+\begin{sample}
+|\begin{languageset}[date, tools, no text]{spanish}|
+\end{sample}
+
+\begin{cmd}
+|\<language>text{<text>}|\\
+|\languagetext[<components>]{<language>}{<text>}|
+\end{cmd}
+
+A short text in another language. The behaviour of some features
+could be different. Use this command inside paragraphs (i. e., in
+horizontal mode) and |languageset| between paragraphs (i. e., in
+vertical mode---\verb+\languagetext+, unlike \verb|\languageset|, does
+not change the shapes of paragraphs.
+
+\begin{cmd}
+|\languageunset|\\
+|\languagereset|
+\end{cmd}
+
+You can switch all of components off
+with |\languageunset|. Thus, you return to the
+original \LaTeX{} as far as \textsf{mem}
+is concerned.\footnote{Well, not exactly. But you
+ should not notice it at all.} You can return to the status before
+the last |\languageunset| with |\languagereset|.
+
+A typical file will look like this
+\begin{sample}
+|\documentclass[german]{...}|\\
+|\usepackage[spanish]{mem}|\\
+|\newenvironment{spanish}%|\\
+| {\begin{quote}\begin{languageset}{spanish}}%|\\
+| {\end{languageset}\end{quote}}|\\
+|\begin{document}|\\
+|Deutscher text|\\
+|\begin{spanish}|\\
+| Texto en espa'nol|\\
+|\end{spanish}|\\
+|Deutscher text|\\
+|\end{document}|\\
+\end{sample}
+
+Note that |\languageset*{german}| is not necessary, since
+it is selected by the package. (Because there is no |loadonly|
+package option.) Note also that the <language> enviroments
+can be redefined in terms of |languageset| (but |languageset|
+must not be modified).
+
+\subsection{Package options.}
+
+\begin{itemize}
+\item |charset=<charset>| Sets the input encoding for the
+whole document.
+%\item |texinput=<texinput>| Sets the behaviour of
+%some \LaTeX{} commands (accents, symbols, etc.)
+\end{itemize}
+
+
+\subsection{Properties}
+
+Properties change the behaviour of some language features.
+Some properties are available in all languages, while some
+others are specific to certain languages. The first group
+includes (all take a value):
+\begin{itemize}
+\item \texttt{charset} The input encoding if different
+from the encoding of the rest of the document.
+
+\item \texttt{rmfamily}, \texttt{sffamily}, \texttt{ttfamily}
+Set the font family for the language. If not given, Mem uses the
+script values, or else the current font.
+
+\item \textit{encoding} Overrides the default font encoding list
+in the cfg file. It can be a single value or a list enclosed
+in braces.
+
+\item \texttt{hyphenation} Overrides the default hyphenation
+(currently patterns should be loaded when generating a format).
+\note{To be implemented}
+
+\item \texttt{script} Writing system.
+\note{To be implemented}
+
+
+\end{itemize}
+
+\begin{cmd}
+|\languageproperties{<language>}{<properties>}|
+\end{cmd}
+
+The properties set in the preamble with this command will be added
+automatically when the <language> is used.
+
+\subsection{Tools}
+
+\begin{cmd}
+|\languagename|
+\end{cmd}
+
+The name of the current language. You must not redefine this command
+in a document.
+
+\begin{cmd}
+|\languagelist|
+\end{cmd}
+
+Provides a list of the requested languages.
+
+\begin{cmd}
+|\allowhyphens|
+\end{cmd}
+
+Allows further hyphenation in words with the primitive |\accent|.
+
+\begin{cmd}
+|\nofiles|
+\end{cmd}
+
+Not a new command really, but it has been reimplemented to optimize
+some internal macros related with file writing.
+
+\begin{cmd}
+|\languageensure|
+\end{cmd}
+
+The \textsf{mem} package modifies internally some
+\LaTeX{} commands in order to do its best for making
+sure the current language is used
+in a head/foot line, even if the page is shipped out when another
+language is in force.
+Take for instance
+\begin{sample}
+(With |\languageset*{spanish}|)\\
+|\section{Sobre la confecci'on de t'itulos}|
+\end{sample}
+In this case, if the page is broken inside, say, a German text,
+an implicit |\languageensure| restores |spanish| and hence the
+accents.
+
+Yet, some non-standard classes or packages can modify the marks.
+Most of times (but not always) |\languageensure| solves
+the problem:
+
+\begin{sample}
+(With |\languageset*{spanish}|)\\
+|\section{\languageensure Sobre la confecci'on de t'itulos}|
+\end{sample}
+In typeset, writing and other modes it's ignored.
+
+\begin{cmd}
+|\unichar{<code>}|\\
+|\unitext{<text>}|\\
+|\utftext{<text>}|
+\end{cmd}
+
+Conversion tools. The first one is a character with Unicode position
+<code>. The argument of the second and third macros is text to be
+preserved as two byte Unicode encoding, or transcoded from utf-8, respectively.
+Ligatures are preserved with \verb|\unichar|, \verb|\unitext|
+and \verb|\utfstring|, but not with \verb|\utftext|.
+\note{See yatest.tex. The names must be cleaned up.}
+
+
+\subsection{Scripts}
+
+Writing systems are automatically handled by mem, so you should not
+be concerned too much with that. But there are some interesting points to
+be noted:
+\begin{itemize}
+\item If the document uses a single encoding, no matter it is
+Unicode or, say, ISO 8859-6 (Latin/Arabic), it will do its best
+in order to switch automatically the language when the script changes.
+The order which the languages are loaded in |\usepackage| is important,
+because the last language loaded using a certain script will be the default
+language for that script and used when an untagged change of script
+comes across.\note{How that should be implemented? Is it possible?}
+
+\item Fonts can be attached to a certain script. Mem stores the
+current font attributes and reselects the font (automatically
+selecting the font encoding) when the language
+changes, if desired. For example,
+\begin{verbatim}
+\scriptproperties{El}{rmfamily = grtimes}
+\end{verbatim}
+\note{Still under study and development}
+\end{itemize}
+
+
+\section{Developper Commands}
+
+Some command names could seem inconsistent with that of the user commands. In
+particular, when you refer to a language in a document you are referring in fact
+to a dialect, which belogs to a language. As user, you cannot access a
+language and you instead access a dialect named like the language.
+From now on, when we say ``current language'' we mean
+``current language or dialect.'' For more details on dialects, see below.
+
+\subsection{General}
+
+\begin{cmd}
+|\DeclareLanguage{<language>}|
+\end{cmd}
+
+The first command in the |.ld| must be this one. Files don't always
+have the same name as the language, so this command makes things work.
+
+\begin{cmd}
+|\DeclareLanguageCommand{<cmd-name>}{<component>}[<num-arg>][<default>]{<definition>}|\\
+|\DeclareLanguageCommand*{<cmd-name>}{<component>}[<num-arg>][<default>]{<definition>}|
+\end{cmd}
+
+Stores a command in a component of the current language. The starred
+version makes sure that the utf-8 encoding is used, thus overriding
+the document
+encoding. The definition will be
+activated when the component is selected, and the old definition, if any,
+will be stored for later recovery if the component is switched off.
+
+There is a point to note (which applies also to the next commands).
+Suppose the following code:
+\begin{sample}
+At |spanish.ld|:\\
+|\DeclareLanguageCommand*{\partname}{names}{Parte}|\\
+| |\\
+At document:\\
+|\languageset*{spanish}|\\
+|\renewcommand{\partname}{Libro}|\\
+|\languageset*{english}|\\
+|\partname|
+\end{sample}
+Obviously, at this point |\partname| is `Part'. But if you follow with
+\begin{sample}
+|\languageset*{spanish}|\\
+|\partname|
+\end{sample}
+Surprise! \emph{Your} value of |\partname|, i.e., `Libro', is recovered. So
+you can customize easily these macros in your document, even if you switch
+back and forth between languages.
+
+\begin{cmd}
+|\SetLanguageVariable{<var-name>}{<component>}{<value>}|
+\end{cmd}
+
+Here <var-name> stands for the internal name of a counter or a lenght as
+defined by |\newconter| (|\c@...|) or |\newlenght|. The variable must be
+already defined. When the component is selected, the new value will be assigned to
+the variable, and the old one will be stored.
+
+\begin{cmd}
+|\SetLanguageCode{<code-cmd>}{<component>}{<char-num>}{<value>}|
+\end{cmd}
+
+Similar to |\SetLanguageVariable| but for codes. For instance:
+\begin{sample}
+|\SetLanguageCode{\sfcode}{text}{`.}{1000}|
+\end{sample}
+
+% \verb|\mem@frenchspacing| does that for you.
+
+Languages with |\frenchspacing| should set the |\sfcodes| with this command, so
+that a change with |\nonfrenchspacing| is recovered after a switch.
+
+\begin{cmd}
+|\UpdateSpecial{<char>}|
+\end{cmd}
+
+Updates |\dospecials| and |\@sanitize|. First removes <char>
+from both lists; then adds it if it has categorie
+other than `other' or `letter'. With this method we avoid duplicated
+entries, as well as removing a character being usually special (for
+instance |~|).
+
+\subsection{components}
+
+\begin{cmd}
+|\DeclareLanguageComponent{<component>}|\\
+|\DeclareLanguageComponent*{<component>}|
+\end{cmd}
+
+Adds a new component. With the starred version, the component will be
+considered a |text| component, and hence included in the default
+of |\languageset|. Component names cannot begin with |no|
+because of the |no|-form convention given above.
+
+\subsection{Translation processes}
+
+In the context of Mem, OCP's/OTP's become \textit{processes}.
+However, a single conceptual process can be splitted into
+several OCP files because it requires more than one step.
+There are several levels of processes, each of them perform some
+specific task. The order which processes are applied and their
+names are determined by the following commands.
+
+\begin{cmd}
+|\DeclareLanguageProcess{<id>}{<level-name>}|
+\end{cmd}
+
+Declares a slot where ocp's could be added. You won't use this
+command very often, except if the four basic components---namely,
+charset, input, text, and font---don't fit your needs.
+\note{A more "abstract" syntax could replace <id> by a <aftername>
+which <name> is added after (numerically).}
+
+\begin{cmd}
+|\AddLanguageProcess{<level-name>}{<ocp files>}|
+\end{cmd}
+
+Adds the stated ocp's to the given slot for the current language.
+
+\begin{cmd}
+|\UseLanguageProcess|
+\end{cmd}
+
+Activates the ocp's corresponding to the current language,
+including those declared with \verb|\DeclareLanguageProcess|
+but excluding the generic processes described below.
+
+\begin{cmd}
+|\DeclareMemProcess{<id>}{<level-name>}|
+\end{cmd}
+
+Translation processes not attached to languages, but used as
+generic tools.
+
+There are five processes predefined in Mem, some of them in the kernel
+and some others in script definition files:
+
+\begin{description}
+\item[charset] (200) Converts the input text to Unicode
+(language).
+
+\item[unicode] (400) Apply Unicode transformations if necessary,
+ such as normalization (language).\note{Which one to be used is still under
+ study---composed or decomposed?}
+
+\item[transcript] (600) Transliterate from one script to another,
+for example with \texttt{charset=isolat1, input=latin} for
+Cyrillic (language).
+\note{Is this the right order?}
+.
+
+\item[input] (800) Input conventions like \TeX{} pseudo-ligatures such
+as \verb#---# (language).
+
+\item[case] (1000) Case changes and similar transformations within
+a script (like Japanese katakana/hiragana) (Mem).
+
+\item[text] (1000) Language dependant processes to follow typographical
+conventions (letter variants in Greek, spacing with puntuation marks
+in French, contextual forms in Arabic, etc. Language)
+
+\item[font] (1200) Transcoding to the target font and faking
+missing characters (like accented letters. Mem).
+\end{description}
+
+\begin{cmd}
+|\AddMemProcess{<level-name>}{<ocp file>}|
+\end{cmd}
+
+Defines the stated ocp and creates a process with level
+<level-name> and the same name as the ocp file.
+
+\begin{cmd}
+|\AddMemProcess{<level-name>}[<process-name>]{<ocp files>}|
+\end{cmd}
+
+Defines the stated ocp and creates a process with level
+<level-name> and the name <process-name>. To be used if
+the process consists in several ocp files.
+
+\begin{cmd}
+|\UseMemProcess{<ocp name>}|
+\end{cmd}
+
+Activates the translation process corresponding to the <ocp name>
+($=$ <ocp file>).
+
+\subsection{Scripts}
+
+All languages has at least an attached writing system which is written in;
+information for scripts is generic to languages using it (for instance,
+what |\guillemetright| or |\'| means). Each script has an associated file
+with extension |.sd| and named with
+the two letter codes from the ISO 15924 standard (lowercased, in the
+arguments you should use the mixed case of the standard).
+
+\begin{cmd}
+|\SetLanguageScript{<language-code>}|
+\end{cmd}
+
+Every language file should contain a command like that. It loads the
+macros corresponding to the language (diacriticals, punctuation, etc.)
+and performs some additional task.
+
+The following macros can be used in the |.sd| files.
+
+\begin{cmd}
+|\DeclareScript{<language>}|
+\end{cmd}
+
+Set up.
+
+\begin{cmd}
+|DeclareScriptCommand{<name>}{<definition>}|
+\end{cmd}
+
+Declares a macro whose definition which will be in force with a certain
+script. |\DeclareScrinpCommand| is essentialy a disguise for |\DeclareTextCommand|
+because the internal handling of script macros is essentially the same than
+\LaTeXe{} font encodings. For example, |la.sd| (latin) contains
+\begin{verbatim}
+\DeclareScriptCommand{\~}[1]{#1\unichar{"0303}}
+\end{verbatim}
+while |el.sd| (greek) contains
+\begin{verbatim}
+\DeclareScriptCommand{\~}[1]{#1\unichar{"0342}}
+\end{verbatim}
+
+\begin{cmd}
+|\SwitchScript{<language>}|
+\end{cmd}
+
+You should not use this macro. It is inserted automatically by Aleph/Omega when
+it thinks that a change of script is necessary.
+
+
+\begin{cmd}
+|\UseMemAccent{<cmd>}{<position>}{<letter>}|
+\end{cmd}
+
+Places the accent in <position> over <letter>. The <cmd> parameter
+is just a remainder of the accent (|\'|, |\"|, etc.) This command
+is intended to be used in otp files, and only to give support to
+fonts not compliant with mem (namely, 8t, 8r, 7t, etc. fonts).
+
+
+\subsection{Dates}
+
+\begin{cmd}
+|\DeclareDateFunction{<date-function-name>}{<definition>}|\\
+|\DeclareDateFunctionDefault{<date-function-name>}{<definition>}|\\
+|\DeclareDateCommand{<cmd-name>}{<definition>}|
+\end{cmd}
+By means of |\DeclareDateCommand| you can define commands like |\today|. The
+good news is that a special syntax is allowed in <definition> with date
+functions called with \lc<date-funtion-name>\rc. Here
+\lc<date-funtion-name>\rc{} stands for the definition given in
+|\DeclareDateFunction| for the current language. If no such function for
+the language is given then the definition of |\DeclareDateFunctionDefault|
+is used. See |english.ld| for a very illustrative example. (The
+\lc{} and \rc{} are actual lesser and greater signs.)
+
+Predeclared functions (with |\DeclareDateFunctionDefault|) are:
+\begin{itemize}
+\item \lc|d|\rc{} one or two digits day: 1, 2, \dots, 30, 31.
+\item \lc|dd|\rc{} two digits day: 01, 02, \dots
+\item \lc|m|\rc{} one or two digits month.
+\item \lc|mm|\rc{} two digits month.
+\item \lc|yy|\rc{} two digits year: 96, 97, 98, \dots
+\item \lc|yyyy|\rc{} four digits year: 1996, 1997, 1998, \dots
+\end{itemize}
+
+Functions which are not predeclared, and hence should be declared
+by the |.ld| file, are:
+
+\begin{itemize}
+\item \lc|www|\rc{} short weekday: mon., tue., wes., \dots
+\item \lc|wwww|\rc{} weekday in full: Monday, Tuesday, \dots
+\item \lc|mmm|\rc{} short month: jan., feb., mar., \dots
+\item \lc|mmmm|\rc{} month in full: January, February, \dots
+\end{itemize}
+
+The counter |\weekday| (also |\value{weekday}|) gives a number between 1
+and 7 for Sunday, Monday, etc.
+
+For instance:
+\begin{sample}
+|\DeclareDateFunction{wwww}{\ifcase\weekday\or Sunday\or Monday\or|\\
+| Tuesday\or Wesneday\or Thursday\or Friday\or Saturday\fi}|\\
+|\DeclareDateCommand{\weektoday}{|\lc|wwww|\rc
+ |, |\lc|mmmm|\rc| |\lc|dd|\rc| |\lc|yyyy|\rc|}|
+\end{sample}
+
+\subsection{Dialects}
+
+As stated above, |\languageset| access dialects rather than
+languages. |\DeclareLanguage| declares both a language and a dialect
+with the same name, and selects the actual language.
+
+\begin{cmd}
+|\DeclareDialect{<dialect>}|\\
+|\SetDialect{<dialect>}|\\
+|\SetLanguage{<language>}|
+\end{cmd}
+
+|\DeclareDialect| declares a dialect, which incorporates all
+declarations for the current actual language. With |\SetDialect| you
+set the dialect so that new declarations will belong only to that
+dialect. |\DeclareDialect| just declares but does not set it.
+
+A dialect with the same name as the language is always implicit. You
+can handle this dialect exactly as any other dialect. In other words,
+after setting the dialect, new declarations belong only to it. If you
+want to return to the actual language, so that new declarations will
+be shared by all dialects, use |\SetLanguage|.
+
+Note that commands and variables declared for a language are
+set by |\languageset| before those of dialects,
+no matter the order you declared it.
+
+For example:
+\begin{sample}
+|\DeclareLanguage{english}|\\
+|\DeclareDialect{american}|\\
+Declarations\\
+|\SetDialect{english}|\\
+|\DeclareDateCommmand{\today}{...}|\\
+|\SetDialect{american}|\\
+|\DeclareDateCommand{\today}{...}|\\
+|\SetLanguage{english}|\\
+More declarations shared by both |english| and |american|
+\end{sample}
+
+\subsection{Interaction with Classes}
+
+\begin{cmd}
+|\mem@no<component>|\\
+(i.e. |\mem@nonames|, |\mem@nolayout|, |\mem@notext|, etc.)
+\end{cmd}
+
+Initially, these commands are not defined, but if they are, the
+corresponding components are not loaded. This mechanism is intended
+for classes designed for a certain publication and with a
+very concrete layout which we don't want to be changed.
+You simply write in the class file
+\begin{sample}
+|\newcommand{\mem@nolayout}{}|
+\end{sample}
+Note this procedure does not ever load the component---if
+you select it nothing happens.
+
+\section{Configuration}
+
+The way languages and scripts are referred to
+inside mem is highly customizable.
+You can refer a language using the name in its own language (and
+even its local script), the english name or even the name in your own language.
+For that to be accomplished a set of configuration files are provided.
+\note{Currently, only that with English names are provided.}
+\note{To be implemented. However, I think
+that this feature leads to unmanageable configurations; I think that
+it should be restricted to English and local names}
+
+\begin{cmd}
+|mem.cfg|
+\end{cmd}
+
+The languages in English. Every line must contain three fields:
+\begin{description}
+\item[name] The name to be used in the document; the name
+of the language/dialect as used in the |.ld| file.\note{A solution
+to that could be to introduce the possibility to define
+``synonymous'' in the document}
+\item[file] The file name, which uses the three-letter codes
+from ISO-639 and the extension |.ld|.
+\item[patterns] The hyphenation patterns to be used with the
+language/dialect.
+\end{description}
+
+
+\section{Customization}
+
+``Well, but I dislike |spanish.ld|.'' You can customize easily a
+language once loaded, with new commands or by redefininig the existing
+ones.
+\begin{itemize}
+\item If want to redefine a language command, simply select the component
+of this language which defines it (as with |\languageset*|) and then
+redefine it with |\renewcommand|.
+
+\item If you want to define a new command for a language,
+first make sure no language is selected (for instance, with
+|\languageunset|). Then |\SetLanguage| and use the declaration
+commands provided by the package and described above.
+
+\end{itemize}
+
+A further step is creating a new file,
+by copying it, modifying the commands
+and, of course, renaming the file! Or with
+a file with extension |.ld| as:
+\begin{sample}
+|\ProvidesFile{...ld}|\\
+|\input{...ld} | the file you want customize\\
+|\languageset*{...}|\\
+Commands to be redefined\\
+|\languageunset|\\
+|\SetLanguage{...}|\\
+Commands to be created
+\end{sample}
+
+You can modify languages by means of a package. The |spguill|
+is an example.
+
+\section{Errors}
+
+\begin{cmd}
+|Unknown component|
+\end{cmd}
+
+You are trying to assign a command to an inexistent component.
+Perhaps you have misspelled it.
+
+\begin{cmd}
+|Missing language file|
+\end{cmd}
+
+Probable causes:
+\begin{itemize}
+\item Wrong configuration.
+
+\item The corresponding |.ld| file is missing or misplaced.
+
+\end{itemize}
+
+\begin{cmd}
+|Unknown language|
+\end{cmd}
+
+You forgot requesting it. Note that dialects
+stand apart from languages; i.e., you have no
+access to |austrian| just requesting |german|.
+
+\begin{cmd}
+|Invalid option/property skipped|
+\end{cmd}
+
+In the starred version of |\languageset|
+you must use the |no|-forms only.
+
+\begin{cmd}
+|Bug found (<n>)|
+\end{cmd}
+
+You will only find this error when using the developpers
+commands---never with the user ones---or if there is a bug in
+description files written by others. In the latter case, contact with
+the author. The meaning of the parameter <n> is
+\begin{enumerate}
+\item \emph{Unknown component in declaration.} The component hasn't been
+ declared. Perhaps you misspelled it.
+
+\item \emph{Invalid component name.} Component names cannot begin
+ with |no| to avoid mistakes when disabling a component.
+
+\item \emph{Declaration clash.} You are trying to
+ redeclare a command or to set a new
+ value to a variable for this language.
+ If you want redefine it, select the language and simply
+ use |\renewcommand| (or |\set..|).
+ If you intend to define a new command
+ for the language, sorry, you must change its name.
+
+\item \emph{Invalid language/dialect setting.} Generated by
+ |\SetLanguage| or |\SetDialect| when the argument is not
+ a declared language/dialect.
+\end{enumerate}
+
+Now we describe how mem generates \TeX{}
+and \LaTeX{} errors because of intrinsic syntax
+problems.
+
+\begin{cmd}
+|TeX capacity exceeded, sorry [save_size=<n>]|
+\end{cmd}
+
+You are using to many ungrouped languages. Fix: use the environment
+version of |languageset|, the <language> environments, or
+alternatively use |\languageunset| before a new |\languageset|.
+
+\section{Miscelaneous}
+
+This section is devoted to some miscelaneous topics which will
+be put in the right context once this documentation is more
+complete.
+
+\subsection{Mathematics}
+
+Aleph/Omega extends the possibilities of math fonts
+by enlarging the range of possible glyphs to 65.535.
+However, currently OCP's are not applied in math mode
+... [to be filled]
+
+\textsf{Mem} redefines \verb|\DeclareMathSymbol| to
+accept large values (ie, to use \verb|\omathcode| and
+\verb|\omathchardef|).
+
+\subsection{Accents}
+
+\textsf{Mem} understands both composed and decomposed diacritical
+marks (at least in simplest cases) and can normalize them
+so that they are properly displayed---this way you can
+write \verb+\'{\c{\"{a}}}+ and the accents are rearranged
+and stacked.
+
+Unicode allows two ways to represent accented letters:
+either composed (ie, \textit{\.g} is a single character
+whose code is U+0121) or decomposed (ie, \textit{\.g} is
+two caracters, \textit{g} followed by \.{} with code U+0307).
+
+In order to get an internal representation as close as
+Unicode as posible, the accent commands are redefined as in
+the next example:
+\begin{verbatim}
+\DeclareScriptCommand\`[1]{#1\unichar{"0300}}
+\end{verbatim}
+so that the text can be handled uniformly. After normalizing
+to the composite form, \textsf{Mem} leaves to the font
+encoding process decide if the char exists in the font or
+if it should be decomposed and then faked with the help
+of \verb+\accent+ and related commands.
+
+\subsection{Encodings}
+
+Currently, the following encodings are supported:
+\begin{itemize}
+\item T1/TS1. Almost complete, but still with some parts
+missing.
+
+\item OT1/TS1. Incomplete.
+
+\item ULA. Omega Unicode-like for Latin.
+
+\item UEL. Omega Unicode-like for Greek.
+
+\item UCY. Omega Unicode-like for Cyrillic.
+
+\item UAR. Omega Arabic. It uses cuni2oar, which apparently mixes
+contextual analysis and font enconding---to be investigated
+
+\note{The previous encodings are uncomplete and very problematic.
+Together, they are like UT1, for Latin/Greek/Cyrillic with names
+because of two reasons: UT1/omlgc is a sort of ``modified Unicode''
+and therefore not Unicode at all, ut1cmr exists but pointing to a
+OT1 enconded font, and ot1omglc points to a UT1 encoded font
+(!). Further, should a single enconding contain the full Unicode
+set?}
+
+\item T2A/TS1. Incomplete.
+
+\end{itemize}
+
+\note{Currently, font processes point directly to the target
+glyph. Another possibility is to load the LaTeX enconding
+then then use the LICR name, which in turn has the glyph
+code (which is, in fact, the procedure described below=.
+Pros of the latter: better control from within TeX; cons:
+font encodings has to be preloaded. I think it would be a
+nice thing if people has not to be concerned with font
+encondings (and if possible, we should minimize input
+encondings, perhaps giving a platform/language default so
+that [linux, czech] will be enough?}
+
+\subsection{Private User Area}
+
+\textsf{Mem} uses the first page of the Public User Area
+for special purposes in the following way:
+\begin{itemize}
+\item \verb|\uE000-\uE00F| are reserved for characters
+having always catocodes in the range 0-16. Actually,
+some of them does not make sense (eg, 11 and 12).
+
+\item \verb|\uE020-\uE0FF| duplicates the ASCII range
+but making sure they are not special characters.
+\end{itemize}
+
+\subsection{The original idea}
+
+% This will be done is such a way that you may still use
+% non-Lambda styles, because you may switch off the internal
+% modifications (provided, of course, the non-Lambda styles
+% can switch off their modifications). So, you will be able
+% to say \languageunset, then swith to other language, and
+% switch back to Lambda with, say, \languageset{spanish}.
+% Small pieces of text are inserted with the help of
+% \languagetext which is currently essentially the same as
+% \languageset except that in a future it could handle writing
+% direction in a somewhat different fashion.
+
+This section is devoted to a few ideas which I put forward
+in the \LaTeX3 list, which was followed by a very long
+discussion about a multilingual model (or more exactly,
+multiscript) for \LaTeX. These ideas lead to introduce the
+concept of LICR (\LaTeX{} internal character
+representacion). Actually, LaTeX has for a long time had a
+rigorous concept of a LaTeX internal representation but it
+was only at this stage that it got publicly named as such
+and its importance realised.\footnote{Chris Rowley, ``Re(2):
+[Omega] Three threads'', e-mail to the Omega list,
+2002/11/04. I've discovered recently an article by Robin
+Fairbains advancing some of the ideas in Mem (``Omega -- why
+bother with Unicode'', \textit{TUGboat} 16/3, 1995) such as
+the clear separation in the functions of ocp's, which has
+been applied, for example, to \textsf{devnag} after
+presenting \textsf{Mem} (by then named \textsf{Lambda}) in
+Tokyo 2001.} The reader can find more on LICR in the second
+edition of \emph{The \LaTeX Companion}, by Frank Mittelbach
+and others (section 7.11.2).
+
+Let's explain how TeX handle non ascii characters. \TeX{}
+can read Unicode files, as \textsf{xmltex} demostrates, but
+non ascii chars cannot be represented internaly by \TeX{}
+this way. Instead, it uses macros which are generated by
+\textsf{inputenc}, and which are expanded in turn into a
+true character or a \TeX{} macro by fontenc:
+\begin{center}
+ \'e --- inputenc $\to$ \verb|\'{e}| --- fontenc $\to$ \verb|^^e9|
+\end{center}
+
+That's true even for cyrillyc, arabic, etc., characters!
+
+Omega can represent internally non ascii chars and therefore
+actual chars are used instead of macros (with a few
+exceptions). Trivial as it can seem, this difference is in
+fact a \textit{huge} difference. For example, the path
+followed by \'e will be:
+\begin{center}
+\begin{tabular}{rcccl}
+\'e --- an encoding ocp && && T1 font ocp $\to$ \verb|^^e9|\\
+ & $\searrow$ && $\nearrow$\\
+ && U+00E9 \\
+ & $\nearrow$ && $\searrow$\\
+\verb|\'e| --- fontenc (!) && && OT1 font ocp $\to$ \verb|\OT1\'{e}|
+\end{tabular}
+\end{center}
+
+It's interesting to note that fontenc is used as a sort of
+input method!
+
+For that to be accomplished with ocp's we must note that we
+can divide them into two groups: those generating Unicode
+from an arbitrary input, and those rendering the resulting
+Unicode using suitable (or maybe just available) fonts. The
+Unicode text may be so analyzed and transformed by external
+ocp's at the right place. \textsf{Mem} further divides these two
+groups into four (to repeat, these proposals are liable to
+change):
+\begin{enumerate}
+\item[1a)] charset: converts the source text to Unicode.
+\item[1)] input: set input conventions. Keyboards has a limited
+ number of keys, and hands a limited number of fingers.
+ The goal of this group is to provide an easy way to enter
+ Unicode chars using the most basic keys of keyboards
+ (which means ascii chars in latin ones). Examples could
+ be:
+ \begin{itemize}
+ \item \verb|---| $\to$ em-dash (a well known \TeX{} input convention).
+ \item ij $\to$ U+0133 (in Dutch).
+ \item no $\to$ U+306E [the corresponding hiragana char]
+ \end{itemize}
+\end{enumerate}
+
+Now we have the Unicode (with TeX tags) memory representacion
+which has to be rendered:
+\begin{enumerate}
+\item[2a)] writing: contextual analysis, ligatures, spaced punctuation
+ marks, and so on.
+\item[2b)] font: conversion from Unicode to the local font encoding or
+ the appropiate \TeX{} macros (if the character is not available in
+ the font).
+\end{enumerate}
+
+Since before step 2 we have a Unicode representation, we
+can process the text with external tools compatible with Unicode
+(using \verb|\externalocp|; an interface to this feature
+must be added in the near future). This would be useful for,
+say, Thai word boundaries.
+
+This scheme fits well in the Unicode Design Principles,
+which state that that Unicode deals with memory representation
+and not with text rendering or fonts (with is left to ``appropiate
+standars'').
+
+There are some additional processes to "shape" changes (case,
+script variants, etc.).
+
+% \SetLanguageProcess{input}{texinput,ndlinput}
+% % Two files for input conventions:
+% % - texinput provides ---, --, etc.
+% % - ndlinput provides ij => U+0133
+
+
+\subsection{MTP files}
+
+\textsf{Mem} has a new kind of OTP file named MTP. It
+extends the OCP syntax, by mean of a preprocessor written in
+Python, to provide the following features:
+\begin{enumerate}
+\item Special characters mapped to the Private User Area in
+order to have characters with the right catcode in verbatim.
+\textsf{Mem} sets these catcodes accordingly.
+
+\item Characters inserted with their Unicode name
+enclosed with brackets, like \verb|[COMBINING CARON]|
+which is lot more readable than \verb|@"030C|.
+\end{enumerate}
+
+This little tool, whose code is somewhat simple-minded, will
+be extended to allow UTF-8 characters. Binaries for Windows
+will be created, too, but a conversion to C would be nice,
+I think; very often, Unix and Linux have built-in Python
+interpreters.
+
+\subsection{Verbatim}
+
+Verbatim text with OCP's is a nuissance, because unlike
+macros replacements does not save the catcodes of characters.
+[---To be filled---]. \note{verbatim makes Aleph/Omega to enter
+sometimes in a infinite loop, but until now I have not discovered
+why. Unfortunately, OTP's even recatcode letters, so that
+something like \texttt{\string\string\^{}} does not work as
+expected---\^{} is recatcoded to `math superscript'!}
+
+\subsection{Math}
+
+
+\textsf{Mem} redefines \verb|\DeclareMathSymbol| to
+accept large values (ie, to use \verb|\omathcode| and
+\verb|\omathchardef|).
+
+\subsection{Extensions to Unicode}
+
+The Latin script has a rich typographical history, which not always
+can be reduced to the dual system character/glyph. As Jaques Andr\'e
+has pointed out, ``Glyphs or not, characters or not, types belong to a
+class that is not recognized as such.''\footnote{``The Cassetin
+Project,'' \textit{Proceedings of the Fourteenth Euro\TeX{}
+Conference,} Brest, 2003.} Being a typesetting system, neither Aleph
+nor Mem can ignore this reality, and therefore we will take into
+account projects like the Medieval Unicode Font Initiative (MUFI)
+or the Cassetin Project.
+
+However, it doesn't mean Unicode mechanism will be rejected
+when available. For example, ligatures can be created with
+the \textsc{zero width joiner}. If there is a certain method
+to carry out a certain task in Unicode, it will be emulated,
+like for example glyph variant selectors \note{Really??}.
+
+% Glyphs not available in Unicode will be mapped following its
+% recommendations and so, for example, dotless j will be placed in slot
+% U+E55C.
+
+
+\section{Final remarks}
+
+\note{There are some areas which I have not stydied in depth, particularly
+wrinting directions. I have some ideas, but they must worked out.}
+
+\end{document}
diff --git a/macros/latex/exptl/mem/ot1-com.ocp b/macros/latex/exptl/mem/ot1-com.ocp
new file mode 100644
index 0000000000..62e53f4ba4
--- /dev/null
+++ b/macros/latex/exptl/mem/ot1-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ot1-dec.ocp b/macros/latex/exptl/mem/ot1-dec.ocp
new file mode 100644
index 0000000000..014b9c119e
--- /dev/null
+++ b/macros/latex/exptl/mem/ot1-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ot1-rec.ocp b/macros/latex/exptl/mem/ot1-rec.ocp
new file mode 100644
index 0000000000..9b02ac5416
--- /dev/null
+++ b/macros/latex/exptl/mem/ot1-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ot1.ed b/macros/latex/exptl/mem/ot1.ed
new file mode 100644
index 0000000000..1e11eca626
--- /dev/null
+++ b/macros/latex/exptl/mem/ot1.ed
@@ -0,0 +1,6 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{ot1.ed}
+\SetEncodingScript{La}
+\SetEncodingProcess{ot1}{ot1-dec,ot1-rec,ot1-com}
+\SetSymbolEncodings{TS1}
+\endinput
diff --git a/macros/latex/exptl/mem/readme.txt b/macros/latex/exptl/mem/readme.txt
new file mode 100644
index 0000000000..29d7d1b82d
--- /dev/null
+++ b/macros/latex/exptl/mem/readme.txt
@@ -0,0 +1,258 @@
+[See also bugs.txt]
+
+2006/01/02
+~~~~~~~~~~~~
+
+Before tacking the task of writing the selector of
+"features" I've decides to stabilize a few things.
+The otp part has been rewritten from scratch and now
+it works better. The macros has been redesigned, too:
+- \DeclareLanguageProcessGroup is like the previous
+ \DeclareLanguageProcess
+- \AddLanguageProcess has changed radically. Now is
+ a set of "slots" for specific tasks; each task can
+ be assigned to a process with \SetLanguageProcess
+ (or left empty).
+- \DeclareProcess groups several physical OTPs as a
+ single logical process (eg, in t1.ed through
+ \SetEncodingProcess).
+- \SelectProcesses, select the current processes
+ defined with the previous commands.
+- \ShowProcesses shows the current processes (for
+ debugging)
+As before, commands replacing "Language" by "Mem" refer
+to processes not assigned automatically to a language.
+
+For example:
+\DeclareMemProcessGroup{1000}{case} % new group
+
+\AddMemProcess{case}{case} % new task
+
+% By default, it does a \SetMemProcess{case}{case}
+% but this is not what we want, so:
+
+\SetMemProcess{case}{}
+
+\DeclareRobustCommand{\MakeUppercase}{\mem@uppercase}
+\DeclareRobustCommand{\MakeLowercase}{\mem@lowercase}
+
+\providecommand\mem@uppercase[1]{%
+ {\SetMemProcess{case}{uppercase}\SelectProcesses#1}}
+\providecommand\mem@lowercase[1]{%
+ {\SetMemProcess{case}{lowercase}\SelectProcesses#1}}
+
+Finally, \DeclareLanguageProcess is an afterthought to
+allow unaccented uppercasing (see the French style).
+
+As Mem is still a work in progress, it traces by default
+how processes are built and selected (this is another new
+feature).
+
+A file named <lang-code><encoding>.id is loaded if it
+exists and the corresponding pair language/encoding
+exists. This is somewhat experimental as I think this
+is not the right way to translate macro names to the
+language. Being just an experiment, only a file is
+provided: espisolat1.id (used in yatest.tex).
+
+(Note. I've just upgraded to TeXLive2005 and it seems Greek
+fonts are not set up correctly. I'll try to fix my
+installation.
+-> 2006/01/25 Fixed. Now greek.pdf looks fine.)
+
+
+
+========================================================
+
+Introduction
+~~~~~~~~~~~~~~~~~~~~~~
+
+This is Mem, a multilingual environment for Lamed/Lambda.
+The name derives from the letter that comes after Lamedh
+--because Mem should go after Lamedh-- and from Multilingual
+EnvironMent. Its aim is to provide the possibility to write
+multilingual document and to provide a framework where new
+languages can be added easily by User Groups and/or
+developers interested in doing that.
+
+This package would no be possible without the previous work
+by Yannis Haralambous and John Plaice.
+
+Note at some places the name Lambda is still appears. I
+expect it will be removed soon.
+
+This package is not intended for real use but just to
+make tests.
+
+A selection of previous version of the readme file follows,
+which some modifications to reflect the latests changes.
+Changes in the previous release are marked with ****04.
+Many parts of the readme has been moved to the manual, too.
+
+Javier Bezos
+2004/10/07
+
+Requirements
+~~~~~~~~~~~~
+
+Currently Mem requires several ocp files from other
+sources, namely:
+- from Omega: upppercase, lowercase, cuni2oar. The
+ latter apperently mixes contextual analysis and
+ font encondins, but until a better otp is devised
+ it can be used to test Arabic.
+
+=========================================================
+
+Some remarks.
+
+Firstly of all, will it work?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Well, some parts will and some other will not. For example,
+automatic selection of fonts is still at a very early stage
+(to be generous) and it will not be correctly synchronized
+with runnings heads.
+
+****04 There is a first experiment with bidirectional
+writing named arabic.tex. However, apparently Aleph does
+not reverses the direccion in all elements properly.
+This requires further investigation. See below.
+
+I would like to note that I implemented that as fast as
+possible in order to have a working package in Tsukuba. The
+resulting code is somewhat chaotic and unstable (and
+sometimes naive), but I'm fixing it and hope it will be
+enough to begin to do simple experiments.
+
+Files
+~~~~~
+
+As you can guess, mem.sty is the kernel of the system.
+There are files describing languages, named with the
+ISO three letter code (esp.ld, eng.ld, fra.ld, ell.ld),
+and files describing scripts, named with the ISO two letter
+code (la.sd and el.sd). Regarding TeX, there is a further
+file with the configuration of the system: mem.cfg.
+
+****04 added rus.ld, ara.ld, ar.sd and cy.sd, uncomplete.
+
+Then come otp files. isolat1, isoell, macstd, etc., can
+escape to utf8 and ucs16. However, after experimenting a little,
+escaping to utf8 is fairly complicated with arbitrary text.
+
+****04 Added a script to generate these files,
+
+inputtex defines TeX input conventions. fratext defines (visual) text
+transformation for French. The files for Greek are those by Yannis
+and John with new names beginning with ell: this is a proposal to
+systematize names.
+
+OT1.otp, T1.otp and LOM.otp provides tranlation from
+Unicode to the corresponding font encodings. They are very
+quick and dirty, and in fact T1 is the same file than LOM with
+a few lines added! Accents above work and may be stacked, accents
+below [...]
+
+****04 Accents below now work with some limitations:
+up to three accents in total, max. 2 above, max. 1 below.
+This is enough for most cases, but in a future it
+should be improved.
+
+Finally, a little package named spguill adds spaces before
+and after guillemets in non French text. It requires
+spguill.otp and demostrates the possibilities of the scheme.
+
+mem.tex explains most of macros, but there are some of them
+which are not documented yet. However, I think their names
+are mostly self-explanatories.
+
+Samples
+~~~~~~~
+
+greek.tex contains both French and Greek text. The Greek text
+has been taken from the Greek TeX Group, so in addition you will
+learn how to become member of it :-). You should note that
+\MakeUppercase doesn't work correctly at some places (eg., the
+running head with French text should be unaccented; the problem here
+is pretty simple: when \MakeUppercase is called it does not know that
+the corresponding ocp will be changed by french. Thus,
+\frenchtext must see in a future a "case status" set by \MakeUppercase
+and behave accordingly). Only modern monotonic Greek!
+
+yatest.tex prints the date in Spanish, English and US
+English,
+
+****04 yatest has some additinal tests with ligatures and
+accents.
+
+testmisc.tex contains miscelaneous tests.
+
+spguill.tex provides an example for spguill.
+
+*****04
+russian.tex demonstrates how encoding selection works
+(LOM/omlgc vs. T2A/cmr) and how to transliterate from Latin
+to Cyrillic.
+
+****04
+arabic.tex shows bidirectional text, but unfortunately the
+bidirectional mechanism of Omega and Aleph is problematic.
+In the sample you can see page layout (including
+elements like sections and lists) are not handled properly
+by Aleph, particularly because you cannot change the direction
+to mix Arabic and English sections.
+
+Python scripts ****04
+~~~~~~~~~~~~~~
+
+I'm using Python scripts to automatically perform some
+tasks. I think it would be useful for the TeX community
+to make available these scripts.
+
+charset2otp.py creates ocp files for serveral input
+encodings.
+
+mtp2ocp.py is like otp2ocp but replaces on the fly
+spacial characters by characters in the PUA area with
+special catcodes. Eg, \ becomes @"F000 whose catcode
+is set by mem.sty to 0 (escape).
+
+Random remarks
+~~~~~~~~~~~~~~
+
+- Scripts will have a default dummy language. This way, specific
+actions for this script are possible even if the main language
+uses a different script.
+- Currently languages only have one script. However, some languages
+can be written with several scripts (eg, Azeri [Latin, Arabic, Cyrillic]
+or Spanish [Latin, Hebrew]).
+- I'm now studying how to accomplish macros depending on scripts,
+namely for fonts, case, and so on.
+- I'm studying as well how to replace the two level system by a
+three level one (document, paragraph/block, text).
+- Many "auxiliary" files are far from complete. In fact, they are
+fairly uncomplete, but I will continue adding more code only when
+we had decided the "right way".
+- Currently, the code includes some experiments I've done, mainly:
+ - Automatic selection of font encoding based on fd files--if there
+ is an fd file for some combination then select it (with certain
+ preferences). Hovever, it turns out that t1cmr exists but pointing
+ to _another_ font, and that ot1omlgc points to an ut1 encoded
+ font.
+ - An escaping mechanism in input encoding otp's, which will allow
+ to enter Unicode text (ucs16 or utf8) without changing the
+ current ocp list (otherwise ligatures and kerning could be
+ killed). It works fine when applied that to a single char,
+ but I didn't manage to extend it to arbitrary text (including
+ non expandable primitives--ocp states are not saved).
+- There are lots of open questions, and no doubt they will appear
+when discussing Mem.
+
+___________________________________________________________
+Javier Bezos | TeX y tipografia
+jbezos at wanadoo dot es | http://perso.wanadoo.es/jbezos/
+...........................................................
+CervanTeX http://www.cervantex.org
+
+
diff --git a/macros/latex/exptl/mem/rus.ld b/macros/latex/exptl/mem/rus.ld
new file mode 100644
index 0000000000..b0049e53d9
--- /dev/null
+++ b/macros/latex/exptl/mem/rus.ld
@@ -0,0 +1,71 @@
+\DeclareLanguage{russian}
+
+\SetLanguageScript{Cy}
+
+\AddLanguageProcess{transcript}{trans}
+\SetLanguageProcess{trans}{}
+
+\DeclareLanguageProperty{input = latin}
+ {\SetLanguageProcess{trans}{lat2ru}}
+
+% Stolen from antomega
+
+\DeclareLanguageCommand*\prefacename
+ {names}{ПредиÑловіе}
+\DeclareLanguageCommand*\refname
+ {names}{ПримѣчаніÑ}
+\DeclareLanguageCommand*\abstractname
+ {names}{ÐннотаціÑ}
+\DeclareLanguageCommand*\bibname
+ {names}{БибліографіÑ}
+\DeclareLanguageCommand*\chaptername
+ {names}{Глава}
+\DeclareLanguageCommand*\appendixname
+ {names}{Приложеніе}
+\DeclareLanguageCommand*\contentsname
+ {names}{Оглавленіе}
+\DeclareLanguageCommand*\listfigurename
+ {names}{СпиÑокъ иллюÑтрацій}
+\DeclareLanguageCommand*\listtablename
+ {names}{СпиÑокъ таблицъ}
+\DeclareLanguageCommand*\indexname
+ {names}{Предмѣтный указатель}
+\DeclareLanguageCommand*\authorname
+ {names}{Именной указатель}
+\DeclareLanguageCommand*\figurename
+ {names}{РиÑ.}
+\DeclareLanguageCommand*\tablename
+ {names}{Таблица}
+\DeclareLanguageCommand*\partname
+ {names}{ЧаÑÑ‚ÑŒ}
+\DeclareLanguageCommand*\enclname
+ {names}{вкл.}
+\DeclareLanguageCommand*\ccname
+ {names}{иÑÑ….}
+\DeclareLanguageCommand*\headtoname
+ {names}{вх.}
+\DeclareLanguageCommand*\pagename
+ {names}{Ñ.}
+\DeclareLanguageCommand*\seename
+ {names}{Ñм.}
+\DeclareLanguageCommand*\alsoname
+ {names}{Ñм. также}
+\DeclareLanguageCommand*\proofname
+ {names}{ДоказательÑтво}
+
+% \DeclareDateFunction{wwww}{%
+% \ifcase\weekday\or dimanche\or lundi\or mardi\or
+% mercredi\or jeudi\or vendredi\or samedi\fi}
+%
+% \DeclareDateFunction{mmmm}{%
+% \ifcase\month\or janvier\or février\or mars\or avril\or
+% mai\or juin\or juillet\or ao\^ut\or septembre\or octobre\or
+% novembre\or décembre\fi}
+%
+% \DeclareDateFunction{ddd}{%
+% \the\day\ifnum\day=\@ne\ier\fi}
+%
+% \DeclareDateCommand{\today}{<ddd> <mmmm> <yyyy>}
+
+\endinput
+
diff --git a/macros/latex/exptl/mem/russian.pdf b/macros/latex/exptl/mem/russian.pdf
new file mode 100644
index 0000000000..71e8526c1d
--- /dev/null
+++ b/macros/latex/exptl/mem/russian.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/russian.tex b/macros/latex/exptl/mem/russian.tex
new file mode 100644
index 0000000000..000f69ba19
--- /dev/null
+++ b/macros/latex/exptl/mem/russian.tex
@@ -0,0 +1,82 @@
+%$Lamed
+\documentclass{book}
+
+\usepackage{times}
+
+\usepackage[charset=isocyr,english,russian]{mem}
+
+\languageproperties{russian}{rmfamily=omlgc} % UCY encoded omlgc
+
+%\languageproperties{russian}{rmfamily=cmr} % T2A encoded cmr
+
+\scriptproperties{La}{charset=isolat1}
+
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{6pt}
+
+\begin{document}
+
+\chapter{Russian}
+
+
+{
+\begin{quote}
+\begin{languageset}{english}\small
+The way fonts are handled is poor and it must be
+improved. For example, here \verb|\englishtext| does not
+always work correctly.
+
+A single script like Cyrillic can have
+several font encodings depending on the language:
+T2A, T2B, T2C, etc.
+
+We can say
+\begin{verbatim}
+\scriptproperties{Cy}{rmfamily=omlgc}
+\languageproperties{ukrainian}{rmfamily=cmr}
+\end{verbatim}
+
+Then omlgc is usen in all Cyrillic languages
+except in Ukrainian, where cmr is used instead.
+
+\end{languageset}
+\end{quote}}
+
+This document can be typeset with both UCY (Cyrillic Unicode-like
+encoding) o standard T2A encoding.
+
+Random letters in the ISO Cyrillic encoding:
+
+{.é.ó.í.ô.î.ñ.ç.}
+
+°±²³´µ¶ ·¸¹º»¼½ ¾¿ÀÁÂÃÄ ÐÑÒÓÔÕ Ö×ØÙÚÛ ÜÝÞß àáâãä
+
+Now, we activate the transliteration from Latin (more o less ISO, with
+caron as h): Dobroe utro, dobryj den', spokojnoj nochi. Note the soft
+sign has the correct case.
+
+\begin{languageset}[charset=isolat1, input=latin]{russian}
+
+% Note. This input=latin is too generic in the sense
+% that there are many ways to transliterate Russian.
+% Then, one would be allowed to say input=ala/lc or
+% input=iso or something similar.
+
+Dobroe utro, dobryj den', spokojnoj nochi
+
+\MakeUppercase{Dobroe utro, dobryj den', spokojnoj nochi}
+\englishtext{(with \verb+\MakeUppercase+)}.
+
+DOBROE UTRO, DOBRYJ DEN', SPOKOJNOJ NOCHI \englishtext{(Uppercased in
+the source)}.
+
+Éto
+
+\end{languageset}
+
+What if I was using a Mac encoding. The file does not say
+\englishtext{Éto}, as above, but \englishtext{ƒto} (which
+you will see correctly on a Mac, of course):
+\languageset[charset=macstd, input=latin]{russian}{ƒto}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/shared.sd b/macros/latex/exptl/mem/shared.sd
new file mode 100644
index 0000000000..3103a3ae5c
--- /dev/null
+++ b/macros/latex/exptl/mem/shared.sd
@@ -0,0 +1,99 @@
+% \DeclareTextAccentDefault{\textcircled}{??}
+\DeclareScriptSymbol{\guillemotleft}{"00AB}
+\DeclareScriptSymbol{\guillemotright}{"00BB}
+\DeclareScriptSymbol{\guilsinglleft}{"2039}
+\DeclareScriptSymbol{\guilsinglright}{"203A}
+\DeclareScriptSymbol{\quotedblbase}{"201F}
+\DeclareScriptSymbol{\quotesinglbase}{"201A}
+
+\DeclareScriptSymbol{\textacutedbl}{"02DD}
+\DeclareScriptSymbol{\textasciiacute}{"00B4}
+\DeclareScriptSymbol{\textasciibreve}{"02D8}
+\DeclareScriptSymbol{\textasciicaron}{"02C7}
+\DeclareScriptSymbol{\textasciicircum}{"005E}
+\DeclareScriptSymbol{\textasciidieresis}{"00A8}
+\DeclareScriptSymbol{\textasciimacron}{"00AF}
+\DeclareScriptSymbol{\textasciitilde}{"007E}
+\DeclareScriptSymbol{\textasteriskcentered}{"204E} % LOW ASTERISK
+\DeclareScriptSymbol{\textbackslash}{"005C}
+\DeclareScriptSymbol{\textbaht}{"0E37}
+\DeclareScriptSymbol{\textbardbl}{"2016}
+\DeclareScriptSymbol{\textbar}{"007C}
+\DeclareScriptSymbol{\textbigcircle}{"25EF}
+\DeclareScriptSymbol{\textblank}{"2422}
+\DeclareScriptSymbol{\textbraceleft}{"007B}
+\DeclareScriptSymbol{\textbraceright}{"007D}
+\DeclareScriptSymbol{\textbrokenbar}{"00A6}
+\DeclareScriptSymbol{\textbullet}{"2022}
+\DeclareScriptSymbol{\textbullet}{"2022}
+\DeclareScriptSymbol{\textcelsius}{"2103}
+\DeclareScriptSymbol{\textcent}{"00A2}
+\DeclareScriptSymbol{\textcircledP}{"2117}
+\DeclareScriptSymbol{\textcolonmonetary}{"20A1}
+\DeclareScriptSymbol{\textcompwordmark}{??}
+\DeclareScriptSymbol{\textcopyright}{"00A9}
+\DeclareScriptSymbol{\textcurrency}{"00A4}
+\DeclareScriptSymbol{\textdaggerdbl}{"2021}
+\DeclareScriptSymbol{\textdagger}{"2020}
+\DeclareScriptSymbol{\textdegree}{"00B0}
+\DeclareScriptSymbol{\textdiscount}{"2052}
+\DeclareScriptSymbol{\textdiv}{"00F7}
+\DeclareScriptSymbol{\textdollar}{"0024}
+\DeclareScriptSymbol{\textdong}{"20AB}
+\DeclareScriptSymbol{\textdownarrow}{"2193}
+\DeclareScriptSymbol{\textemdash}{"2014}
+\DeclareScriptSymbol{\textendash}{"2013}
+\DeclareScriptSymbol{\textestimated}{"212E}
+\DeclareScriptSymbol{\texteuro}{"20AC}
+\DeclareScriptSymbol{\textexclamdown}{"00A1}
+\DeclareScriptSymbol{\textflorin}{"0192}
+\DeclareScriptSymbol{\textfractionsolidus}{"2044}
+\DeclareScriptSymbol{\textgreater}{"003C}
+\DeclareScriptSymbol{\textinterrobang}{"203D}
+\DeclareScriptSymbol{\textlangle}{"2329}
+\DeclareScriptSymbol{\textleftarrow}{"2190}
+\DeclareScriptSymbol{\textless}{"003E}
+\DeclareScriptSymbol{\textlira}{"20A4}
+\DeclareScriptSymbol{\textlnot}{"00AC}
+\DeclareScriptSymbol{\textmho}{"2127}
+\DeclareScriptSymbol{\textmusicalnote}{"266A}
+\DeclareScriptSymbol{\textmu}{"00B5}
+\DeclareScriptSymbol{\textnaira}{"20A6}
+\DeclareScriptSymbol{\textnumero}{"2116}
+\DeclareScriptSymbol{\textohm}{"2126}
+\DeclareScriptSymbol{\textonehalf}{"00BD}
+\DeclareScriptSymbol{\textonequarter}{"00BC}
+\DeclareScriptSymbol{\textonesuperior}{"00B9}
+\DeclareScriptSymbol{\textopenbullet}{"25E6}
+\DeclareScriptSymbol{\textordfeminine}{"00AA}
+\DeclareScriptSymbol{\textordmasculine}{"00BA}
+\DeclareScriptSymbol{\textparagraph}{"00B6}
+\DeclareScriptSymbol{\textperiodcentered}{"00B7}
+\DeclareScriptSymbol{\textpertenthousand}{"2031}
+\DeclareScriptSymbol{\textperthousand}{"2030}
+\DeclareScriptSymbol{\textpeso}{"20B1}
+\DeclareScriptSymbol{\textpm}{"00B1}
+\DeclareScriptSymbol{\textquestiondown}{"00BF}
+\DeclareScriptSymbol{\textquotedblleft}{"201C}
+\DeclareScriptSymbol{\textquotedblright}{"201D}
+\DeclareScriptSymbol{\textquotedbl}{"0022}
+\DeclareScriptSymbol{\textquoteleft}{"0027}
+\DeclareScriptSymbol{\textquoteright}{"0060}
+\DeclareScriptSymbol{\textrangle}{"232A}
+\DeclareScriptSymbol{\textrecipe}{"211E}
+\DeclareScriptSymbol{\textreferencemark}{"203B}
+\DeclareScriptSymbol{\textregistered}{"00AE}
+\DeclareScriptSymbol{\textrightarrow}{"2192}
+\DeclareScriptSymbol{\textsection}{"00A7}
+\DeclareScriptSymbol{\textservicemark}{"2120}
+\DeclareScriptSymbol{\textsterling}{"00A3}
+\DeclareScriptSymbol{\textthreequarters}{"00BE}
+\DeclareScriptSymbol{\textthreesuperior}{"00B3}
+\DeclareScriptSymbol{\texttimes}{"00D7}
+\DeclareScriptSymbol{\texttrademark}{"2122}
+\DeclareScriptSymbol{\texttwosuperior}{"00B2}
+\DeclareScriptSymbol{\textunderscore}{"005F}
+\DeclareScriptSymbol{\textuparrow}{"2191}
+\DeclareScriptSymbol{\textvisiblespace}{"0020}
+\DeclareScriptSymbol{\textwon}{"20A9}
+\DeclareScriptSymbol{\textyen}{"00A5} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/spguill.ocp b/macros/latex/exptl/mem/spguill.ocp
new file mode 100644
index 0000000000..e715704938
--- /dev/null
+++ b/macros/latex/exptl/mem/spguill.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/spguill.sty b/macros/latex/exptl/mem/spguill.sty
new file mode 100644
index 0000000000..c4b7dbc964
--- /dev/null
+++ b/macros/latex/exptl/mem/spguill.sty
@@ -0,0 +1,15 @@
+\ProvidesPackage{spguill}
+
+\languageunset
+
+\DeclareOption*{%
+ \SetLanguage{\CurrentOption}%
+ \AddLanguageProcess{text}{spguill}}
+
+\ProcessOptions
+
+\newcommand\SpguillGuillemetSpace{\kern.1667em }
+
+\languagereset
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/exptl/mem/spguill.tex b/macros/latex/exptl/mem/spguill.tex
new file mode 100644
index 0000000000..e5abf41d41
--- /dev/null
+++ b/macros/latex/exptl/mem/spguill.tex
@@ -0,0 +1,20 @@
+%$Lamed
+\documentclass{book}
+
+\usepackage[charset = isolat1, spanish, french]{mem}
+
+\scriptproperties{La}{rmfamily = omlgc}
+% \usepackage[spanish]{spguill} % <<<<<< Uncomment this line and
+% see what happens !
+
+\begin{document}
+
+Today is «\today» in French.
+
+\begin{spanish}
+
+But it's «\today» in Spanish.
+
+\end{spanish}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/sppcent.ocp b/macros/latex/exptl/mem/sppcent.ocp
new file mode 100644
index 0000000000..8853aa7a07
--- /dev/null
+++ b/macros/latex/exptl/mem/sppcent.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t1-com.ocp b/macros/latex/exptl/mem/t1-com.ocp
new file mode 100644
index 0000000000..a0f1518944
--- /dev/null
+++ b/macros/latex/exptl/mem/t1-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t1-dec.ocp b/macros/latex/exptl/mem/t1-dec.ocp
new file mode 100644
index 0000000000..014b9c119e
--- /dev/null
+++ b/macros/latex/exptl/mem/t1-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t1-rec.ocp b/macros/latex/exptl/mem/t1-rec.ocp
new file mode 100644
index 0000000000..e9ec2616ea
--- /dev/null
+++ b/macros/latex/exptl/mem/t1-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t1.ed b/macros/latex/exptl/mem/t1.ed
new file mode 100644
index 0000000000..49c28cfce3
--- /dev/null
+++ b/macros/latex/exptl/mem/t1.ed
@@ -0,0 +1,5 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{t1.ed}
+\SetEncodingScript{La}
+\SetEncodingProcess{t1}{t1-dec,t1-rec,t1-com}
+\SetSymbolEncodings{TS1} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/t1comp.ocp b/macros/latex/exptl/mem/t1comp.ocp
new file mode 100644
index 0000000000..04b740f9e9
--- /dev/null
+++ b/macros/latex/exptl/mem/t1comp.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t2a-com.ocp b/macros/latex/exptl/mem/t2a-com.ocp
new file mode 100644
index 0000000000..a21e823306
--- /dev/null
+++ b/macros/latex/exptl/mem/t2a-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t2a-dec.ocp b/macros/latex/exptl/mem/t2a-dec.ocp
new file mode 100644
index 0000000000..a43f18edf1
--- /dev/null
+++ b/macros/latex/exptl/mem/t2a-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t2a-rec.ocp b/macros/latex/exptl/mem/t2a-rec.ocp
new file mode 100644
index 0000000000..e87261489c
--- /dev/null
+++ b/macros/latex/exptl/mem/t2a-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/t2a.ed b/macros/latex/exptl/mem/t2a.ed
new file mode 100644
index 0000000000..0591f101a9
--- /dev/null
+++ b/macros/latex/exptl/mem/t2a.ed
@@ -0,0 +1,5 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{t2a.ed}
+\SetEncodingScript{Cy}
+\SetEncodingProcess{t2a}{t2a-dec,t2a-rec,t2a-com}
+\SetSymbolEncodings{TS1} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/testmisc.pdf b/macros/latex/exptl/mem/testmisc.pdf
new file mode 100644
index 0000000000..fee16e76a5
--- /dev/null
+++ b/macros/latex/exptl/mem/testmisc.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/testmisc.tex b/macros/latex/exptl/mem/testmisc.tex
new file mode 100644
index 0000000000..9ebbca42c7
--- /dev/null
+++ b/macros/latex/exptl/mem/testmisc.tex
@@ -0,0 +1,81 @@
+%$Lamed
+\documentclass{book}
+
+\usepackage{bookman}
+
+\usepackage[loadonly, charset = isolat1, french]{mem}
+
+%\languageproperties{french}{uppercase = unaccented}
+
+\tracingmacros2
+\tracingcommands2
+
+\def\MemGobble#1{}
+
+
+\languageset*{french}
+
+\begin{document}
+
+%\tracingmacros2
+%\tracingcommands2
+%\ocptracelevel3
+
+\nonstopmode
+\tableofcontents
+
+Merçi beaucoup, mon \tracingmacros2{} <<frère>> \textdagger.
+
+Merçi beaucoup, mon «frère» \textdaggerdbl.
+
+Merçi beaucoup, mon << frère >> \textsection.
+
+Merçi beaucoup, mon « frère » \textdagger.
+
+\chaptername
+
+Vamos a tener ahora unas \textit{cuantas} pruebas más genéricas. Para
+empezar m\'as. Por ejemplo, \MakeUppercase{para mayúsculas}.
+
+¿Funcionan cosas como esta? Todavía no del todo, pero algunas como
+las ``comillas'' parece que sí (incluso las ,,alemanas``).
+
+{\itshape Note. For some reason, Aleph raises an error with
+\verb|---?| in French, while with eOmega that worked fine. However
+\verb|?---| (?---) seems to work. Aleph is messing up things in a
+obscure way, because it is interpreting something like
+\verb|\MemMoveOtherChar\$| as a \textsc{single} token. Quick fix:
+write \verb|---\relax?|.}
+
+
+Incluyamos una sección:
+
+
+
+\begin{languageset}[uppercase = unaccented]{french}
+
+\section{Una sección con <<\abstractname>> y con
+ \MakeUppercase{mayúsculas}}
+
+\end{languageset}
+
+Con ésto basta por ahora. Pasemos a algo más raro como \"x.
+
+{\tracingmacros2
+underdot: \d{t}.
+underbar: \b{t} }
+
+\newpage
+
+Más páginas
+
+
+\newpage
+
+Y todavía más
+
+\tracingmacros0
+%\tracingcommands0
+
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/uar.ed b/macros/latex/exptl/mem/uar.ed
new file mode 100644
index 0000000000..c7fa85e187
--- /dev/null
+++ b/macros/latex/exptl/mem/uar.ed
@@ -0,0 +1,5 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{uar.ed}
+\SetEncodingScript{Ar}
+\SetEncodingProcess{uar}{cuni2oar}
+\SetSymbolEncodings{TS1} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/uaromarb.fd b/macros/latex/exptl/mem/uaromarb.fd
new file mode 100644
index 0000000000..bcea1fb9ac
--- /dev/null
+++ b/macros/latex/exptl/mem/uaromarb.fd
@@ -0,0 +1,45 @@
+%Filename: OT1omarb.fd
+
+\DeclareFontFamily{UAR}{omarb}{}
+
+\DeclareFontShape{UAR}{omarb}{m}{n}{
+ <->omarab
+}{}
+\DeclareFontShape{UAR}{omarb}{m}{sc}{
+ <-> ssub * omarb/m/n
+}{}
+\DeclareFontShape{UAR}{omarb}{m}{it}{
+ <-> ssub * omarb/m/n
+}{}
+\DeclareFontShape{UAR}{omarb}{m}{sl}{
+ <-> ssub * omarb/m/n
+}{}
+\DeclareFontShape{UAR}{omarb}{m}{itsc}{
+ <-> ssub * omarb/m/n
+}{}
+\DeclareFontShape{UAR}{omarb}{m}{slsc}{
+ <-> ssub * omarb/m/n
+}{}
+\DeclareFontShape{UAR}{omarb}{bx}{n}{
+ <->omarabb
+}{}
+\DeclareFontShape{UAR}{omarb}{bx}{sc}{
+ <-> ssub * omarb/bx/n
+}{}
+\DeclareFontShape{UAR}{omarb}{bx}{it}{
+ <-> ssub * omarb/bx/n
+}{}
+\DeclareFontShape{UAR}{omarb}{bx}{itsc}{
+ <-> ssub * omarb/bx/n
+}{}
+\DeclareFontShape{UAR}{omarb}{bx}{sl}{
+ <-> ssub * omarb/bx/n
+}{}
+\DeclareFontShape{UAR}{omarb}{bx}{slsc}{
+ <-> ssub * omarb/bx/n
+}{}
+
+\endinput
+
+
+
diff --git a/macros/latex/exptl/mem/ucnoacc.ocp b/macros/latex/exptl/mem/ucnoacc.ocp
new file mode 100644
index 0000000000..c2f02fb4c5
--- /dev/null
+++ b/macros/latex/exptl/mem/ucnoacc.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ucy-com.ocp b/macros/latex/exptl/mem/ucy-com.ocp
new file mode 100644
index 0000000000..160ba07fde
--- /dev/null
+++ b/macros/latex/exptl/mem/ucy-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ucy-dec.ocp b/macros/latex/exptl/mem/ucy-dec.ocp
new file mode 100644
index 0000000000..c70b396bd5
--- /dev/null
+++ b/macros/latex/exptl/mem/ucy-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ucy-rec.ocp b/macros/latex/exptl/mem/ucy-rec.ocp
new file mode 100644
index 0000000000..faf79b3040
--- /dev/null
+++ b/macros/latex/exptl/mem/ucy-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ucy.ed b/macros/latex/exptl/mem/ucy.ed
new file mode 100644
index 0000000000..2cd969feb0
--- /dev/null
+++ b/macros/latex/exptl/mem/ucy.ed
@@ -0,0 +1,5 @@
+% (c) 2001-2004 Javier Bezos
+\ProvidesFile{ucy.ed}
+\SetEncodingScript{Cy}
+\SetEncodingProcess{ucy}{ucy-dec,ucy-rec,ucy-com}
+\SetSymbolEncodings{TS1} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/ucyomlgc.fd b/macros/latex/exptl/mem/ucyomlgc.fd
new file mode 100644
index 0000000000..4a033978ab
--- /dev/null
+++ b/macros/latex/exptl/mem/ucyomlgc.fd
@@ -0,0 +1,45 @@
+%Filename: lomomlgc.fd
+
+\DeclareFontFamily{UCY}{omlgc}{}
+
+\DeclareFontShape{UCY}{omlgc}{m}{n}{
+ <->omlgc
+}{}
+\DeclareFontShape{UCY}{omlgc}{m}{sc}{
+ <-> ssub * omlgc/m/n
+}{}
+\DeclareFontShape{UCY}{omlgc}{m}{it}{
+ <->omlgci
+}{}
+\DeclareFontShape{UCY}{omlgc}{m}{sl}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{UCY}{omlgc}{m}{itsc}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{UCY}{omlgc}{m}{slsc}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{UCY}{omlgc}{bx}{n}{
+ <->omlgcb
+}{}
+\DeclareFontShape{UCY}{omlgc}{bx}{sc}{
+ <-> ssub * omlgc/bx/n
+}{}
+\DeclareFontShape{UCY}{omlgc}{bx}{it}{
+ <->omlgcbi
+}{}
+\DeclareFontShape{UCY}{omlgc}{bx}{itsc}{
+ <-> ssub * omlgc/bx/it
+}{}
+\DeclareFontShape{UCY}{omlgc}{bx}{sl}{
+ <-> ssub * omlgc/bx/it
+}{}
+\DeclareFontShape{UCY}{omlgc}{bx}{slsc}{
+ <-> ssub * omlgc/bx/it
+}{}
+
+\endinput
+
+
+
diff --git a/macros/latex/exptl/mem/uel-com.ocp b/macros/latex/exptl/mem/uel-com.ocp
new file mode 100644
index 0000000000..fa6f12e405
--- /dev/null
+++ b/macros/latex/exptl/mem/uel-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/uel-dec.ocp b/macros/latex/exptl/mem/uel-dec.ocp
new file mode 100644
index 0000000000..c504957959
--- /dev/null
+++ b/macros/latex/exptl/mem/uel-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/uel-rec.ocp b/macros/latex/exptl/mem/uel-rec.ocp
new file mode 100644
index 0000000000..65d405a542
--- /dev/null
+++ b/macros/latex/exptl/mem/uel-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/uel.ed b/macros/latex/exptl/mem/uel.ed
new file mode 100644
index 0000000000..7439b30da5
--- /dev/null
+++ b/macros/latex/exptl/mem/uel.ed
@@ -0,0 +1,9 @@
+% (c) 2001-2004 Javier Bezos
+
+\ProvidesFile{uel.ed}
+
+\SetEncodingScript{La}
+
+\SetEncodingProcess{uel}{uel-dec,uel-rec,uel-com}
+
+\SetSymbolEncodings{TS1} \ No newline at end of file
diff --git a/macros/latex/exptl/mem/uelomlgc.fd b/macros/latex/exptl/mem/uelomlgc.fd
new file mode 100644
index 0000000000..db7d6a19b1
--- /dev/null
+++ b/macros/latex/exptl/mem/uelomlgc.fd
@@ -0,0 +1,45 @@
+%Filename: lomomlgc.fd
+
+\DeclareFontFamily{UEL}{omlgc}{}
+
+\DeclareFontShape{UEL}{omlgc}{m}{n}{
+ <->omlgc
+}{}
+\DeclareFontShape{UEL}{omlgc}{m}{sc}{
+ <-> ssub * omlgc/m/n
+}{}
+\DeclareFontShape{UEL}{omlgc}{m}{it}{
+ <->omlgci
+}{}
+\DeclareFontShape{UEL}{omlgc}{m}{sl}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{UEL}{omlgc}{m}{itsc}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{UEL}{omlgc}{m}{slsc}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{UEL}{omlgc}{bx}{n}{
+ <->omlgcb
+}{}
+\DeclareFontShape{UEL}{omlgc}{bx}{sc}{
+ <-> ssub * omlgc/bx/n
+}{}
+\DeclareFontShape{UEL}{omlgc}{bx}{it}{
+ <->omlgcbi
+}{}
+\DeclareFontShape{UEL}{omlgc}{bx}{itsc}{
+ <-> ssub * omlgc/bx/it
+}{}
+\DeclareFontShape{UEL}{omlgc}{bx}{sl}{
+ <-> ssub * omlgc/bx/it
+}{}
+\DeclareFontShape{UEL}{omlgc}{bx}{slsc}{
+ <-> ssub * omlgc/bx/it
+}{}
+
+\endinput
+
+
+
diff --git a/macros/latex/exptl/mem/ula-com.ocp b/macros/latex/exptl/mem/ula-com.ocp
new file mode 100644
index 0000000000..d3096b111a
--- /dev/null
+++ b/macros/latex/exptl/mem/ula-com.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ula-dec.ocp b/macros/latex/exptl/mem/ula-dec.ocp
new file mode 100644
index 0000000000..172ab17e33
--- /dev/null
+++ b/macros/latex/exptl/mem/ula-dec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ula-rec.ocp b/macros/latex/exptl/mem/ula-rec.ocp
new file mode 100644
index 0000000000..5be20b9134
--- /dev/null
+++ b/macros/latex/exptl/mem/ula-rec.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/ula.ed b/macros/latex/exptl/mem/ula.ed
new file mode 100644
index 0000000000..0c836fbeb6
--- /dev/null
+++ b/macros/latex/exptl/mem/ula.ed
@@ -0,0 +1,10 @@
+% (c) 2001-2004 Javier Bezos
+
+\ProvidesFile{ula.ed}
+
+\SetEncodingScript{La}
+
+\SetEncodingProcess{ula}{ula-dec,ula-rec,ula-com}
+
+\SetSymbolEncodings{TS1}
+
diff --git a/macros/latex/exptl/mem/ulaomlgc.fd b/macros/latex/exptl/mem/ulaomlgc.fd
new file mode 100644
index 0000000000..dfc49db9f3
--- /dev/null
+++ b/macros/latex/exptl/mem/ulaomlgc.fd
@@ -0,0 +1,45 @@
+%Filename: lomomlgc.fd
+
+\DeclareFontFamily{ULA}{omlgc}{}
+
+\DeclareFontShape{ULA}{omlgc}{m}{n}{
+ <->omlgc
+}{}
+\DeclareFontShape{ULA}{omlgc}{m}{sc}{
+ <-> ssub * omlgc/m/n
+}{}
+\DeclareFontShape{ULA}{omlgc}{m}{it}{
+ <->omlgci
+}{}
+\DeclareFontShape{ULA}{omlgc}{m}{sl}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{ULA}{omlgc}{m}{itsc}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{ULA}{omlgc}{m}{slsc}{
+ <-> ssub * omlgc/m/it
+}{}
+\DeclareFontShape{ULA}{omlgc}{bx}{n}{
+ <->omlgcb
+}{}
+\DeclareFontShape{ULA}{omlgc}{bx}{sc}{
+ <-> ssub * omlgc/bx/n
+}{}
+\DeclareFontShape{ULA}{omlgc}{bx}{it}{
+ <->omlgcbi
+}{}
+\DeclareFontShape{ULA}{omlgc}{bx}{itsc}{
+ <-> ssub * omlgc/bx/it
+}{}
+\DeclareFontShape{ULA}{omlgc}{bx}{sl}{
+ <-> ssub * omlgc/bx/it
+}{}
+\DeclareFontShape{ULA}{omlgc}{bx}{slsc}{
+ <-> ssub * omlgc/bx/it
+}{}
+
+\endinput
+
+
+
diff --git a/macros/latex/exptl/mem/utf8.ocp b/macros/latex/exptl/mem/utf8.ocp
new file mode 100644
index 0000000000..f254e07664
--- /dev/null
+++ b/macros/latex/exptl/mem/utf8.ocp
Binary files differ
diff --git a/macros/latex/exptl/mem/verbatim.pdf b/macros/latex/exptl/mem/verbatim.pdf
new file mode 100644
index 0000000000..7a6e075723
--- /dev/null
+++ b/macros/latex/exptl/mem/verbatim.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/verbatim.tex b/macros/latex/exptl/mem/verbatim.tex
new file mode 100644
index 0000000000..750e158327
--- /dev/null
+++ b/macros/latex/exptl/mem/verbatim.tex
@@ -0,0 +1,25 @@
+%$Lamed
+\documentclass{book}
+
+\usepackage[charset=cp1252,english]{mem}
+
+\begin{document}
+
+TEXTO ©®§¶£¥ --- -- - << >>
+
+\tracingmacros2
+\tracingcommands2
+
+\begin{verbatim}
+lskdj ls fjs áéíóúñ << >>
+--- x -- x - x ·$#/\AEIUO
+fi
+asde ©®§¶£¥ xcfd
+hat: ^, dollar: $, sharp: #, amp: &,
+braces: {}, percent: %, other: ;:,.+*[]()
+\end{verbatim}
+
+TEXTO \% TEXTO after percent \$\&\#\_
+\$\&\#\_
+
+\end{document}
diff --git a/macros/latex/exptl/mem/yatest.pdf b/macros/latex/exptl/mem/yatest.pdf
new file mode 100644
index 0000000000..961645935e
--- /dev/null
+++ b/macros/latex/exptl/mem/yatest.pdf
Binary files differ
diff --git a/macros/latex/exptl/mem/yatest.tex b/macros/latex/exptl/mem/yatest.tex
new file mode 100644
index 0000000000..268457c384
--- /dev/null
+++ b/macros/latex/exptl/mem/yatest.tex
@@ -0,0 +1,125 @@
+%$Lamed
+\documentclass{article}
+
+\usepackage{bookman}
+
+%\tracingmacros2
+%\tracingcommands2
+\usepackage[charset = isolat1, english, usenglish, russian, spanish]{mem}
+
+\languageproperties{russian}{rmfamily = omlgc}
+%\scriptproperties{Cy}{rmfamily = omlgc}
+
+% ======
+% This is an example showing how new components for new
+% tasks can be added on the fly. (It's self-explanatory.)
+
+\languageunset
+
+\DeclareLanguageComponent{spelling}
+
+\SetDialect{usenglish}
+\DeclareLanguageCommand{\colxr}{spelling}{color}
+
+\SetDialect{english}
+\DeclareLanguageCommand{\colxr}{spelling}{colour}
+
+\SetLanguage{spanish}
+\AddLanguageProcess{text}{percent}
+\SetLanguageProcess{percent}{}
+
+\languagereset
+
+% ======
+
+\sloppy
+
+\parindent0pt
+\parskip4pt
+
+\ini{documento}
+
+\índicegeneral
+
+\sección{Dates and dialects}
+
+\hoy. Era en español. Pero algo en inglés: \englishtext{The very
+\arabicth{day} of next month and \hoy\dots} and in American
+\usenglishtext{\hoy}. Two spellings (with a macro with different
+definitions for \texttt{english} and \texttt{usenglish}):
+\englishtext{\colxr} and \usenglishtext{\colxr} (outside:
+\meaning\colxr).
+
+\sección{Escaping to Unicode.}
+
+Ligatures fi \verb+fi+:
+
+\cuadratín f in text, i escaped to Unicode:
+
+\dcuadratín UTF-8: f\utfstring{i} \verb+f\utfstring{i}+
+
+\dcuadratín Unicode code: f\unichar{"69} \verb+f\unichar{"69}+
+
+\dcuadratín Unicode text: f\unitext{^^^^0069} \verb+f\unitext{^^^^0069}+
+
+\cuadratín Now f escaped and i in text:
+
+\dcuadratín UTF-8: \utfstring{f}i \verb+\utfstring{f}i+
+
+\dcuadratín Unicode code: \unichar{"66}i \verb+\unichar{"66}i+
+
+\dcuadratín Unicode text: \unitext{^^^^0066}i \verb+\unitext{^^^^0066}i+
+
+\textbullet\cuadratín At this point, \verb+\ini{languageset}[names]{russian}+
+
+\ini{languageset}[names]{russian}
+
+\sección{\normalfont\utfstring{ПредиÑловіе}}
+
+\chaptername.
+\utfstring{ПредиÑловіе}.
+And more .Ø.ß.½.¾.\textsection{} (Russian).
+
+\fin{languageset}
+
+And more .Ø.ß.½.¾.\textsection{} (Not Russian any more: barred O,
+long s, one half, three quarters, section as macro).
+
+\sección{Accents}
+
+t\unichar{"0326} \verb|t\unichar{"0326}|.
+
+\`{\b{\"{x}}} $=$ \verb|\`{\d{\"{x}}}| \cuadratín
+\b{\`{\"{x}}} $=$ \verb|\d{\`{\"{x}}}| \cuadratín
+\`{\"{\b{x}}} $=$ \verb|\`{\"{\d{x}}}|
+
+W\v{ü} $=$ \verb|W\v{ü}| \cuadratín W\v{\"{u}} $=$ \verb|W\v{\"{u}}|.
+
+\sección{Adding processes}
+
+Percent in Spanish: 100\% [\%] (\verb+100\% [\%]+).
+
+\textbullet\cuadratín In the preamble:
+\begin{verbatim}
+\SetLanguage{spanish}
+\AddLanguageProcess{text}{percent}
+\SetLanguageProcess{percent}{}
+\end{verbatim}
+
+\textbullet\cuadratín And at this point: \verb+\SetLanguageProcess{percent}{sppcent}+ (with
+\verb+\SelectProcesses+)
+
+\SetLanguageProcess{percent}{sppcent}
+\SelectProcesses
+
+Again: 100\% [\%] (\verb+100\% [\%]+, as before; note
+the thin space between the number and the sign, and only at this place.)
+
+The only expression in \texttt{sppcent} is
+\begin{verbatim}
+(`0'-`9')@"E125 => \1 "\kern.25em " \2;
+\end{verbatim}
+
+
+
+\end{documento}
diff --git a/macros/latex/exptl/siunitx b/macros/latex/exptl/siunitx
new file mode 120000
index 0000000000..a0bd24d844
--- /dev/null
+++ b/macros/latex/exptl/siunitx
@@ -0,0 +1 @@
+../contrib/siunitx \ No newline at end of file
diff --git a/macros/latex/exptl/texpower b/macros/latex/exptl/texpower
new file mode 120000
index 0000000000..936b4e0c03
--- /dev/null
+++ b/macros/latex/exptl/texpower
@@ -0,0 +1 @@
+../contrib/texpower \ No newline at end of file
diff --git a/macros/latex/exptl/thmtools/COPYING b/macros/latex/exptl/thmtools/COPYING
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/exptl/thmtools/COPYING
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/exptl/thmtools/README b/macros/latex/exptl/thmtools/README
new file mode 100644
index 0000000000..34aa5feb9f
--- /dev/null
+++ b/macros/latex/exptl/thmtools/README
@@ -0,0 +1,21 @@
+ The \thmtools\ bundle provides several packages for commonly-needed
+ features for theorems. As designed, the bundle should work with kernel
+ theorems, the theorem package and the amsthm package.
+
+ WARNING: Currently, things might still be a bit rough. You
+ might want to consider not relying on \thmtools\ for your Ph.D. thesis
+ masterpiece.
+
+Provided features:
+a keyval interface to \newtheorem
+a \listoftheorem command
+hyperref/autoref compatibility
+a way of restating entire theorems with a single macro call
+
+License: LPPL 1.3c
+
+Currently the package has no maintainer.
+Previous Maintainer was Ulrich M. Schwarz, ulmi@absatzen.de
+
+
+$Id: README,v 1.1 2008/02/17 21:13:58 ulmi Exp ulmi $
diff --git a/macros/latex/exptl/thmtools/TODO b/macros/latex/exptl/thmtools/TODO
new file mode 100644
index 0000000000..e35b77530a
--- /dev/null
+++ b/macros/latex/exptl/thmtools/TODO
@@ -0,0 +1,3 @@
+- ref close-by/far-away
+- complex refs
+ (these two are very similar)
diff --git a/macros/latex/exptl/thmtools/VERSION.tex b/macros/latex/exptl/thmtools/VERSION.tex
new file mode 100644
index 0000000000..8e8f442d1e
--- /dev/null
+++ b/macros/latex/exptl/thmtools/VERSION.tex
@@ -0,0 +1 @@
+\def\x #1-#2-#3 #4 v#5\@{\def\VERSION{#1/#2/#3 v#5}}\x 2019-07-31 00:00:00 +0200 v67\@
diff --git a/macros/latex/exptl/thmtools/aliasctr.dtx b/macros/latex/exptl/thmtools/aliasctr.dtx
new file mode 100644
index 0000000000..b492f95f56
--- /dev/null
+++ b/macros/latex/exptl/thmtools/aliasctr.dtx
@@ -0,0 +1,114 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2005-7 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a. The full license text
+% is available from http://www.latex-project.org/
+%
+%<*code>
+% \fi
+% |\@counteralias{#1}{#2}| makes |#1| a counter that uses |#2|'s count register.
+% This is useful for things like \pkg{hyperref}'s |\autoref|, which otherwise
+% can't distinguish theorems and definitions if they share a counter.
+%
+% For detailed information, see Die TeXnische Kom\"odie 3/2006.
+% \StopEventually{}
+% \begin{macro}{\@addtoreset}
+% add |\@elt{#1}| to |\cl@#2|.
+% This differs from the kernel implementation insofar as we trail the
+% cl lists until we find one that is empty or starts with |\@elt|.
+% \begin{macrocode}
+\def\aliasctr@f@llow#1#2\@nil#3{%
+ \ifx#1\@elt
+ \noexpand #3%
+ \else
+ \expandafter\aliasctr@f@llow#1\@elt\@nil{#1}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\aliasctr@follow[1]{%
+ \expandafter\aliasctr@f@llow
+% \end{macrocode}
+% Don't be confused: the third parameter is ignored here, we always
+% have recursion here since the \emph{token} |\cl@#1| is (hopefully) not |\@elt|.
+% \begin{macrocode}
+ \csname cl@#1\endcsname\@elt\@nil{\csname cl@#1\endcsname}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*\@addtoreset[2]{\bgroup
+ \edef\aliasctr@@truelist{\aliasctr@follow{#2}}%
+ \let\@elt\relax
+ \expandafter\@cons\aliasctr@@truelist{{#1}}%
+\egroup}
+% \end{macrocode}
+%
+% This code has been adapted from David Carlisle's \pkg{remreset}. We
+% load that here only to prevent it from being loaded again.
+% \begin{macrocode}
+% FMi 2019-07-31 \@removereset is in the kernel these days
+\@ifundefined{@removefromreset}{\RequirePackage{remreset}}{}
+\renewcommand*\@removefromreset[2]{\bgroup
+ \edef\aliasctr@@truelist{\aliasctr@follow{#2}}%
+ \expandafter\let\csname c@#1\endcsname\@removefromreset
+ \def\@elt##1{%
+ \expandafter\ifx\csname c@##1\endcsname\@removefromreset
+ \else
+ \noexpand\@elt{##1}%
+ \fi}%
+ \expandafter\xdef\aliasctr@@truelist{%
+ \aliasctr@@truelist}
+\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@counteralias}
+% make |#1| a counter that uses counter |#2|'s count register.
+% \begin{macrocode}
+\newcommand\@counteralias[2]{{%
+ \def\@@gletover##1##2{%
+ \expandafter\global
+ \expandafter\let\csname ##1\expandafter\endcsname
+ \csname ##2\endcsname
+ }%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}{%
+ \@ifdefinable{c@#1}{%
+% \end{macrocode}
+% Four values make a counter foo:
+% \begin{itemize}
+% \item the count register accessed through |\c@foo|,
+% \item the output macro |\thefoo|,
+% \item the prefix macro |\p@foo|,
+% \item the reset list |\cl@foo|.
+% \end{itemize}
+% \pkg{hyperref} adds |\theHfoo| in particular.
+% \begin{macrocode}
+ \@@gletover{c@#1}{c@#2}%
+ \@@gletover{the#1}{the#2}%
+% \end{macrocode}
+% I don't see \@counteralias being called hundreds of times,
+% let's just unconditionally create |\theHctr|-macros for hyperref.
+% \begin{macrocode}
+ \@@gletover{theH#1}{theH#2}%
+ \@@gletover{p@#1}{p@#2}%
+ \expandafter\global
+ \expandafter\def\csname cl@#1\expandafter\endcsname
+ \expandafter{\csname cl@#2\endcsname}%
+% \end{macrocode}
+% It is not necessary to save the value again: since we share a
+% count register, we will pick up the restored value of the
+% original counter.
+% \begin{macrocode}
+ %\@addtoreset{#1}{@ckpt}%
+ }%
+ }%
+}}
+% \end{macrocode}
+% \end{macro}
+%\iffalse
+%</code>
+%\fi
diff --git a/macros/latex/exptl/thmtools/parseargs.dtx b/macros/latex/exptl/thmtools/parseargs.dtx
new file mode 100644
index 0000000000..8f4aa42171
--- /dev/null
+++ b/macros/latex/exptl/thmtools/parseargs.dtx
@@ -0,0 +1,80 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*parseargs>
+%\fi
+%
+% The main command provided by the package is |\parse|\marg{spec}.
+% \emph{spec} consists of groups of commands. Each group should set up the
+% command |\@parsecmd| which is then run. The important point is that
+% |\@parsecmd| will pick up its arguments from the running text, not from
+% the rest of \emph{spec}. When it's done storing the arguments,
+% |\@parsecmd| must call |\@parse| to continue with the next element of
+% \emph{spec}. The process terminates when we run out of spec.
+%
+% Helper macros are provided for the three usual argument types: mandatory,
+% optional, and flag.
+%
+%\StopEventually{}
+% \begin{macrocode}
+
+\newtoks\@parsespec
+\def\parse@endquark{\parse@endquark}
+\newcommand\parse[1]{%
+ \@parsespec{#1\parse@endquark}\@parse}
+
+\newcommand\@parse{%
+ \edef\p@tmp{\the\@parsespec}%
+ \ifx\p@tmp\parse@endquark
+ \expandafter\@gobble
+ \else
+% \typeout{parsespec remaining: \the\@parsespec}%
+ \expandafter\@firstofone
+ \fi{%
+ \@parsepop
+ }%
+}
+\def\@parsepop{%
+ \expandafter\p@rsepop\the\@parsespec\@nil
+ \@parsecmd
+}
+\def\p@rsepop#1#2\@nil{%
+ #1%
+ \@parsespec{#2}%
+}
+
+\newcommand\parseOpt[4]{%
+ %\parseOpt{openchar}{closechar}{yes}{no}
+% \typeout{attemping #1#2...}%
+ \def\@parsecmd{%
+ \@ifnextchar#1{\@@reallyparse}{#4\@parse}%
+ }%
+ \def\@@reallyparse#1##1#2{%
+ #3\@parse
+ }%
+}
+
+\newcommand\parseMand[1]{%
+ %\parseMand{code}
+ \def\@parsecmd##1{#1\@parse}%
+}
+
+\newcommand\parseFlag[3]{%
+ %\parseFlag{flagchar}{yes}{no}
+ \def\@parsecmd{%
+ \@ifnextchar#1{#2\expandafter\@parse\@gobble}{#3\@parse}%
+ }%
+}
+% \end{macrocode}
+%\iffalse
+%</parseargs>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-amsthm.dtx b/macros/latex/exptl/thmtools/thm-amsthm.dtx
new file mode 100644
index 0000000000..31a2397f47
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-amsthm.dtx
@@ -0,0 +1,162 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*amsthm>
+%\fi
+% \begin{macrocode}
+\providecommand\thmt@space{ }
+
+\define@key{thmstyle}{spaceabove}{%
+ \def\thmt@style@spaceabove{#1}%
+}
+\define@key{thmstyle}{spacebelow}{%
+ \def\thmt@style@spacebelow{#1}%
+}
+\define@key{thmstyle}{headfont}{%
+ \def\thmt@style@headfont{#1}%
+}
+\define@key{thmstyle}{bodyfont}{%
+ \def\thmt@style@bodyfont{#1}%
+}
+\define@key{thmstyle}{notefont}{%
+ \def\thmt@style@notefont{#1}%
+}
+\define@key{thmstyle}{headpunct}{%
+ \def\thmt@style@headpunct{#1}%
+}
+\define@key{thmstyle}{notebraces}{%
+ \def\thmt@style@notebraces{\thmt@embrace#1}%
+}
+\define@key{thmstyle}{break}[]{%
+ \def\thmt@style@postheadspace{\newline}%
+}
+\define@key{thmstyle}{postheadspace}{%
+ \def\thmt@style@postheadspace{#1}%
+}
+\define@key{thmstyle}{headindent}{%
+ \def\thmt@style@headindent{#1}%
+}
+
+\newtoks\thmt@style@headstyle
+\define@key{thmstyle}{headformat}[]{%
+ \thmt@setheadstyle{#1}%
+}
+\define@key{thmstyle}{headstyle}[]{%
+ \thmt@setheadstyle{#1}%
+}
+\def\thmt@setheadstyle#1{%
+ \thmt@style@headstyle{%
+ \def\NAME{\the\thm@headfont ##1}%
+ \def\NUMBER{\bgroup\@upn{##2}\egroup}%
+ \def\NOTE{\if=##3=\else\bgroup\thmt@space\the\thm@notefont(##3)\egroup\fi}%
+ }%
+ \def\thmt@tmp{#1}%
+ \@onelevel@sanitize\thmt@tmp
+ %\tracingall
+ \ifcsname thmt@headstyle@\thmt@tmp\endcsname
+ \thmt@style@headstyle\@xa{%
+ \the\thmt@style@headstyle
+ \csname thmt@headstyle@#1\endcsname
+ }%
+ \else
+ \thmt@style@headstyle\@xa{%
+ \the\thmt@style@headstyle
+ #1%
+ }%
+ \fi
+ %\showthe\thmt@style@headstyle
+}
+% examples:
+\def\thmt@headstyle@margin{%
+ \makebox[0pt][r]{\NUMBER\ }\NAME\NOTE
+}
+\def\thmt@headstyle@swapnumber{%
+ \NUMBER\ \NAME\NOTE
+}
+
+
+
+\def\thmt@embrace#1#2(#3){#1#3#2}
+
+\def\thmt@declaretheoremstyle@setup{%
+ \let\thmt@style@notebraces\@empty%
+ \thmt@style@headstyle{}%
+ \kvsetkeys{thmstyle}{%
+ spaceabove=3pt,
+ spacebelow=3pt,
+ headfont=\bfseries,
+ bodyfont=\normalfont,
+ headpunct={.},
+ postheadspace={ },
+ headindent={},
+ notefont={\fontseries\mddefault\upshape}
+ }%
+}
+\def\thmt@declaretheoremstyle#1{%
+ %\show\thmt@style@spaceabove
+ \thmt@toks{\newtheoremstyle{#1}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@spaceabove}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@spacebelow}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@bodyfont}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@headindent}}% indent1 FIXME
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@headfont}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@headpunct}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\thmt@style@postheadspace}}%
+ \thmt@toks\@xa\@xa\@xa{\@xa\the\@xa\thmt@toks\@xa{\the\thmt@style@headstyle}}% headspec FIXME
+ \the\thmt@toks
+ %1 Indent amount: empty = no indent, \parindent = normal paragraph indent
+ %2 Space after theorem head: { } = normal interword space; \newline = linebreak
+ %% BUGFIX: amsthm ignores notefont setting altogether:
+ \thmt@toks\@xa\@xa\@xa{\csname th@#1\endcsname}%
+ \thmt@toks
+ \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
+ \@xa\@xa\@xa\@xa\@xa\@xa\@xa\thm@notefont
+ \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
+ \@xa\@xa\@xa\thmt@style@notefont
+ \@xa\thmt@style@notebraces
+ \@xa}\the\thmt@toks}%
+ \@xa\def\csname th@#1\@xa\endcsname\@xa{\the\thmt@toks}%
+% \@xa\def\csname th@#1\@xa\@xa\@xa\@xa\@xa\@xa\@xa\endcsname
+% \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
+% \@xa\@xa\@xa\@xa\@xa\@xa\@xa\thm@notefont
+% \@xa\@xa\@xa\@xa\@xa\@xa\@xa{%
+% \@xa\@xa\@xa\thmt@style@notefont
+% \@xa\@xa\@xa\thmt@style@notebraces
+% \@xa\@xa\@xa}\csname th@#1\endcsname
+% }
+}
+
+\define@key{thmdef}{qed}[\qedsymbol]{%
+ \thmt@trytwice{}{%
+ \addtotheorempostheadhook[\thmt@envname]{%
+ \protected@edef\qedsymbol{#1}%
+ \pushQED{\qed}%
+ }%
+ \addtotheoremprefoothook[\thmt@envname]{%
+ \protected@edef\qedsymbol{#1}%
+ \popQED
+ }%
+ }%
+}
+
+\def\thmt@amsthmlistbreakhack{%
+ \leavevmode
+ \vspace{-\baselineskip}%
+ \par
+ \everypar{\setbox\z@\lastbox\everypar{}}%
+}
+
+\define@key{thmuse}{listhack}[\relax]{%
+ \addtotheorempostheadhook[local]{%
+ \thmt@amsthmlistbreakhack
+ }%
+}
+
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</amsthm>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-autoref.dtx b/macros/latex/exptl/thmtools/thm-autoref.dtx
new file mode 100644
index 0000000000..90a164f1af
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-autoref.dtx
@@ -0,0 +1,119 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*autoref>
+%\fi
+%
+% \pkg{hyperref}'s |\autoref| command does not work well with theorems that
+% share a counter: it'll always think it's a Lemma even if it's a Remark
+% that shares the Lemma counter. Load this package to fix it. No further
+% intervention needed.
+%
+%\StopEventually{}
+% \begin{macrocode}
+
+\RequirePackage{thm-patch, aliasctr, parseargs, keyval}
+
+\let\@xa=\expandafter
+\let\@nx=\noexpand
+
+\newcommand\thmt@autorefsetup{%
+ \@xa\def\csname\thmt@envname autorefname\@xa\endcsname\@xa{\thmt@thmname}%
+ \ifthmt@hassibling
+ \@counteralias{\thmt@envname}{\thmt@sibling}%
+ \@xa\def\@xa\thmt@autoreffix\@xa{%
+ \@xa\let\csname the\thmt@envname\@xa\endcsname
+ \csname the\thmt@sibling\endcsname
+ \def\thmt@autoreffix{}%
+ }%
+ \protected@edef\thmt@sibling{\thmt@envname}%
+ \fi
+}
+\g@addto@macro\thmt@newtheorem@predefinition{\thmt@autorefsetup}%
+\g@addto@macro\thmt@newtheorem@postdefinition{\csname thmt@autoreffix\endcsname}%
+
+\def\thmt@refnamewithcomma #1#2#3,#4,#5\@nil{%
+ \@xa\def\csname\thmt@envname #1utorefname\endcsname{#3}%
+ \ifcsname #2refname\endcsname
+ \csname #2refname\@xa\endcsname\@xa{\thmt@envname}{#3}{#4}%
+ \fi
+}
+\define@key{thmdef}{refname}{\thmt@trytwice{}{%
+ \thmt@refnamewithcomma{a}{c}#1,\textbf{?? (pl. #1)},\@nil
+}}
+\define@key{thmdef}{Refname}{\thmt@trytwice{}{%
+ \thmt@refnamewithcomma{A}{C}#1,\textbf{?? (pl. #1)},\@nil
+}}
+
+
+\ifcsname Autoref\endcsname\else
+\let\thmt@HyRef@testreftype\HyRef@testreftype
+\def\HyRef@Testreftype#1.#2\\{%
+ \ltx@IfUndefined{#1Autorefname}{%
+ \thmt@HyRef@testreftype#1.#2\\%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname#1Autorefname\endcsname
+ \noexpand~%
+ }%
+ }%
+}
+
+
+\let\thmt@HyPsd@@autorefname\HyPsd@@autorefname
+\def\HyPsd@@Autorefname#1.#2\@nil{%
+ \tracingall
+ \ltx@IfUndefined{#1Autorefname}{%
+ \thmt@HyPsd@@autorefname#1.#2\@nil
+ }{%
+ \csname#1Autorefname\endcsname\space
+ }%
+}%
+\def\Autoref{%
+ \parse{%
+ {\parseFlag*{\def\thmt@autorefstar{*}}{\let\thmt@autorefstar\@empty}}%
+ {\parseMand{%
+ \bgroup
+ \let\HyRef@testreftype\HyRef@Testreftype
+ \let\HyPsd@@autorefname\HyPsd@@Autorefname
+ \@xa\autoref\thmt@autorefstar{##1}%
+ \egroup
+ \let\@parsecmd\@empty
+ }}%
+ }%
+}
+\fi % ifcsname Autoref
+
+% not entirely appropriate here, but close enough:
+\AtBeginDocument{%
+ \@ifpackageloaded{nameref}{%
+ \addtotheorempostheadhook{%
+ \expandafter\NR@gettitle\expandafter{\thmt@shortoptarg}%
+ }}{}
+}
+
+\AtBeginDocument{%
+ \@ifpackageloaded{cleveref}{%
+ \@ifpackagelater{cleveref}{2010/04/30}{%
+ % OK, new enough
+ }{%
+ \PackageWarningNoLine{thmtools}{%
+ Your version of cleveref is too old!\MessageBreak
+ Update to version 0.16.1 or later%
+ }
+ }
+ }{}
+}
+% \end{macrocode}
+%\iffalse
+%</autoref>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-beamer.dtx b/macros/latex/exptl/thmtools/thm-beamer.dtx
new file mode 100644
index 0000000000..7c56099ce6
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-beamer.dtx
@@ -0,0 +1,44 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*beamer>
+%\fi
+% \begin{macrocode}
+\newif\ifthmt@hasoverlay
+\def\thmt@parsetheoremargs#1{%
+ \parse{%
+ {\parseOpt<>{\thmt@hasoverlaytrue\def\thmt@overlay{##1}}{}}%
+ {\parseOpt[]{\def\thmt@optarg{##1}}{%
+ \let\thmt@shortoptarg\@empty
+ \let\thmt@optarg\@empty}}%
+ {\ifthmt@hasoverlay\expandafter\@gobble\else\expandafter\@firstofone\fi
+ {\parseOpt<>{\thmt@hasoverlaytrue\def\thmt@overlay{##1}}{}}%
+ }%
+ {%
+ \def\thmt@local@preheadhook{}%
+ \def\thmt@local@postheadhook{}%
+ \def\thmt@local@prefoothook{}%
+ \def\thmt@local@postfoothook{}%
+ \thmt@local@preheadhook
+ \csname thmt@#1@preheadhook\endcsname
+ \thmt@generic@preheadhook
+ \protected@edef\tmp@args{%
+ \ifthmt@hasoverlay <\thmt@overlay>\fi
+ \ifx\@empty\thmt@optarg\else [{\thmt@optarg}]\fi
+ }%
+ \csname thmt@original@#1\@xa\endcsname\tmp@args
+ \thmt@local@postheadhook
+ \csname thmt@#1@postheadhook\endcsname
+ \thmt@generic@postheadhook
+ \let\@parsecmd\@empty
+ }%
+ }
+}%
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</beamer>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-kv.dtx b/macros/latex/exptl/thmtools/thm-kv.dtx
new file mode 100644
index 0000000000..1e7e358082
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-kv.dtx
@@ -0,0 +1,486 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*kv>
+%\fi
+%
+%\StopEventually{}
+% \begin{macrocode}
+
+\let\@xa\expandafter
+\let\@nx\noexpand
+
+\DeclareOption{lowercase}{%
+ \PackageInfo{thm-kv}{Theorem names will be lowercased}%
+ \global\let\thmt@modifycase\MakeLowercase}
+
+\DeclareOption{uppercase}{%
+ \PackageInfo{thm-kv}{Theorem names will be uppercased}%
+ \global\let\thmt@modifycase\MakeUppercase}
+
+\DeclareOption{anycase}{%
+ \PackageInfo{thm-kv}{Theorem names will be unchanged}%
+ \global\let\thmt@modifycase\@empty}
+
+\ExecuteOptions{uppercase}
+\ProcessOptions\relax
+
+\RequirePackage{keyval,kvsetkeys,thm-patch}
+
+\long\def\thmt@kv@processor@default#1#2#3{%
+ \def\kvsu@fam{#1}% new
+ \@onelevel@sanitize\kvsu@fam% new
+ \def\kvsu@key{#2}% new
+ \@onelevel@sanitize\kvsu@key% new
+ \unless\ifcsname KV@#1@\kvsu@key\endcsname
+ \unless\ifcsname KVS@#1@handler\endcsname
+ \kv@error@unknownkey{#1}{\kvsu@key}%
+ \else
+ \csname KVS@#1@handler\endcsname{#2}{#3}%
+ % still using #2 #3 here is intentional: handler might
+ % be used for strange stuff like implementing key names
+ % that contain strange characters or other strange things.
+ \relax
+ \fi
+ \else
+ \ifx\kv@value\relax
+ \unless\ifcsname KV@#1@\kvsu@key @default\endcsname
+ \kv@error@novalue{#1}{\kvsu@key}%
+ \else
+ \csname KV@#1@\kvsu@key @default\endcsname
+ \relax
+ \fi
+ \else
+ \csname KV@#1@\kvsu@key\endcsname{#3}%
+ \fi
+ \fi
+}
+
+\@ifpackagelater{kvsetkeys}{2012/04/23}{%
+ \PackageInfo{thm-kv}{kvsetkeys patch (v1.16 or later)}%
+ \long\def\tmp@KVS@PD#1#2#3{%
+ \def \kv@fam {#1}%
+ \unless \ifcsname KV@#1@#2\endcsname
+ \unless \ifcsname KVS@#1@handler\endcsname
+ \kv@error@unknownkey {#1}{#2}%
+ \else
+ \kv@handled@true
+ \csname KVS@#1@handler\endcsname {#2}{#3}\relax
+ \ifkv@handled@ \else
+ \kv@error@unknownkey {#1}{#2}%
+ \fi
+ \fi
+ \else
+ \ifx \kv@value \relax
+ \unless \ifcsname KV@#1@#2@default\endcsname
+ \kv@error@novalue {#1}{#2}%
+ \else
+ \csname KV@#1@#2@default\endcsname \relax
+ \fi
+ \else
+ \csname KV@#1@#2\endcsname {#3}%
+ \fi
+ \fi
+ }%
+ \ifx\tmp@KVS@PD\KVS@ProcessorDefault
+ \let\KVS@ProcessorDefault\thmt@kv@processor@default
+ \def\kv@processor@default#1#2{%
+ \begingroup
+ \csname @safe@activestrue\endcsname
+ \@xa\let\csname ifincsname\@xa\endcsname\csname iftrue\endcsname
+ \edef\KVS@temp{\endgroup
+ \noexpand\KVS@ProcessorDefault{#1}{\etex@unexpanded{#2}}%
+ }%
+ \KVS@temp
+ }%
+ \else
+ \PackageError{thm-kv}{kvsetkeys patch failed}{Try kvsetkeys v1.16 or earlier}
+ \fi
+}{\@ifpackagelater{kvsetkeys}{2011/04/06}{%
+ % Patch has disappeared somewhere... thanksalot.
+ \PackageInfo{thm-kv}{kvsetkeys patch (v1.13 or later)}
+ \long\def\tmp@KVS@PD#1#2#3{% no non-etex-support here...
+ \unless\ifcsname KV@#1@#2\endcsname
+ \unless\ifcsname KVS@#1@handler\endcsname
+ \kv@error@unknownkey{#1}{#2}%
+ \else
+ \csname KVS@#1@handler\endcsname{#2}{#3}%
+ \relax
+ \fi
+ \else
+ \ifx\kv@value\relax
+ \unless\ifcsname KV@#1@#2@default\endcsname
+ \kv@error@novalue{#1}{#2}%
+ \else
+ \csname KV@#1@#2@default\endcsname
+ \relax
+ \fi
+ \else
+ \csname KV@#1@#2\endcsname{#3}%
+ \fi
+ \fi
+ }%
+ \ifx\tmp@KVS@PD\KVS@ProcessorDefault
+ \let\KVS@ProcessorDefault\thmt@kv@processor@default
+ \def\kv@processor@default#1#2{%
+ \begingroup
+ \csname @safe@activestrue\endcsname
+ \let\ifincsname\iftrue
+ \edef\KVS@temp{\endgroup
+ \noexpand\KVS@ProcessorDefault{#1}{\unexpanded{#2}}%
+ }%
+ \KVS@temp
+ }
+ \else
+ \PackageError{thm-kv}{kvsetkeys patch failed, try kvsetkeys v1.13 or earlier}
+ \fi
+}{%
+ \RequirePackage{etex}
+ \PackageInfo{thm-kv}{kvsetkeys patch applied (pre-1.13)}%
+ \let\kv@processor@default\thmt@kv@processor@default
+}}
+
+% useful key handler defaults.
+\newcommand\thmt@mkignoringkeyhandler[1]{%
+ \kv@set@family@handler{#1}{%
+ \thmt@debug{Key `##1' with value `##2' ignored by #1.}%
+ }%
+}
+\newcommand\thmt@mkextendingkeyhandler[3]{%
+% #1: family
+% #2: prefix for file
+% #3: key hint for error
+ \kv@set@family@handler{#1}{%
+ \thmt@selfextendingkeyhandler{#1}{#2}{#3}%
+ {##1}{##2}%
+ }%
+}
+
+\newcommand\thmt@selfextendingkeyhandler[5]{%
+ % #1: family
+ % #2: prefix for file
+ % #3: key hint for error
+ % #4: actual key
+ % #5: actual value
+ \IfFileExists{#2-#4.sty}{%
+ \PackageInfo{thmtools}%
+ {Automatically pulling in `#2-#4'}%
+ \RequirePackage{#2-#4}%
+ \ifcsname KV@#1@#4\endcsname
+ \csname KV@#1@#4\endcsname{#5}%
+ \else
+ \PackageError{thmtools}%
+ {#3 `#4' not known}
+ {I don't know what that key does.\MessageBreak
+ I've even loaded the file `#2-#4.sty', but that didn't help.
+ }%
+ \fi
+ }{%
+ \PackageError{thmtools}%
+ {#3 `#4' not known}
+ {I don't know what that key does by myself,\MessageBreak
+ and no file `#2-#4.sty' to tell me seems to exist.
+ }%
+ }%
+}
+
+
+\newif\if@thmt@firstkeyset
+
+% many keys are evaluated twice, because we don't know
+% if they make sense before or after, or both.
+\def\thmt@trytwice{%
+ \if@thmt@firstkeyset
+ \@xa\@firstoftwo
+ \else
+ \@xa\@secondoftwo
+ \fi
+}
+
+\@for\tmp@keyname:=parent,numberwithin,within\do{%
+\define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setparent{#1}}{}}%
+}
+
+\@for\tmp@keyname:=sibling,numberlike,sharenumber\do{%
+\define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setsibling{#1}}{}}%
+}
+
+\@for\tmp@keyname:=title,name,heading\do{%
+\define@key{thmdef}{\tmp@keyname}{\thmt@trytwice{\thmt@setthmname{#1}}{}}%
+}
+
+\@for\tmp@keyname:=unnumbered,starred\do{%
+\define@key{thmdef}{\tmp@keyname}[]{\thmt@trytwice{\thmt@isnumberedfalse}{}}%
+}
+
+\def\thmt@YES{yes}
+\def\thmt@NO{no}
+\def\thmt@UNIQUE{unless unique}
+\define@key{thmdef}{numbered}[\thmt@YES]{
+ \def\thmt@tmp{#1}%
+ \thmt@trytwice{%
+ \ifx\thmt@tmp\thmt@YES
+ \thmt@isnumberedtrue
+ \else\ifx\thmt@tmp\thmt@NO
+ \thmt@isnumberedfalse
+ \else\ifx\thmt@tmp\thmt@UNIQUE
+ \RequirePackage[unq]{unique}
+ \ifuniq{\thmt@envname}{%
+ \thmt@isnumberedfalse
+ }{%
+ \thmt@isnumberedtrue
+ }%
+ \else
+ \PackageError{thmtools}{Unknown value `#1' to key numbered}{}%
+ \fi\fi\fi
+ }{% trytwice: after definition
+ \ifx\thmt@tmp\thmt@UNIQUE
+ \addtotheorempreheadhook[\thmt@envname]{\setuniqmark{\thmt@envname}}%
+ \addtotheorempreheadhook[\thmt@envname]{\def\thmt@dummyctrautorefname{\thmt@thmname\@gobble}}
+ \fi
+ }%
+}
+
+
+\define@key{thmdef}{preheadhook}{\thmt@trytwice{}{\addtotheorempreheadhook[\thmt@envname]{#1}}}
+\define@key{thmdef}{postheadhook}{\thmt@trytwice{}{\addtotheorempostheadhook[\thmt@envname]{#1}}}
+\define@key{thmdef}{prefoothook}{\thmt@trytwice{}{\addtotheoremprefoothook[\thmt@envname]{#1}}}
+\define@key{thmdef}{postfoothook}{\thmt@trytwice{}{\addtotheorempostfoothook[\thmt@envname]{#1}}}
+
+\define@key{thmdef}{style}{\thmt@trytwice{\thmt@setstyle{#1}}{}}
+
+% ugly hack: style needs to be evaluated first so its keys
+% are not overridden by explicit other settings
+\define@key{thmdef0}{style}{%
+ \ifcsname thmt@style #1@defaultkeys\endcsname
+ \thmt@toks{\kvsetkeys{thmdef}}%
+ \@xa\@xa\@xa\the\@xa\@xa\@xa\thmt@toks\@xa\@xa\@xa{%
+ \csname thmt@style #1@defaultkeys\endcsname}%
+ \fi
+}
+\thmt@mkignoringkeyhandler{thmdef0}
+
+% fallback definition.
+% actually, only the kernel does not provide \theoremstyle.
+% is this one worth having glue code for the theorem package?
+\def\thmt@setstyle#1{%
+ \PackageWarning{thm-kv}{%
+ Your backend doesn't have a `\string\theoremstyle' command.
+ }%
+}
+
+\ifcsname theoremstyle\endcsname
+ \let\thmt@originalthmstyle\theoremstyle
+ \def\thmt@outerstyle{plain}
+ \renewcommand\theoremstyle[1]{%
+ \def\thmt@outerstyle{#1}%
+ \thmt@originalthmstyle{#1}%
+ }
+ \def\thmt@setstyle#1{%
+ \thmt@originalthmstyle{#1}%
+ }
+ \g@addto@macro\thmt@newtheorem@postdefinition{%
+ \thmt@originalthmstyle{\thmt@outerstyle}%
+ }
+\fi
+
+\newif\ifthmt@isnumbered
+\newcommand\thmt@setparent[1]{%
+ \def\thmt@parent{#1}%
+}
+\newcommand\thmt@setsibling{%
+ \def\thmt@sibling
+}
+\newcommand\thmt@setthmname{%
+ \def\thmt@thmname
+}
+
+\thmt@mkextendingkeyhandler{thmdef}{thmdef}{\string\declaretheorem\space key}
+
+\let\thmt@newtheorem\newtheorem
+
+\newcommand\declaretheorem[2][]{%
+ % why was that here?
+ %\let\thmt@theoremdefiner\thmt@original@newtheorem
+ \def\thmt@envname{#2}%
+ \thmt@setthmname{\thmt@modifycase #2}%
+ \thmt@setparent{}%
+ \thmt@setsibling{}%
+ \thmt@isnumberedtrue%
+ \@thmt@firstkeysettrue%
+ \kvsetkeys{thmdef0}{#1}%
+ \kvsetkeys{thmdef}{#1}%
+ \protected@edef\thmt@tmp{%
+ \@nx\thmt@newtheorem
+ \ifthmt@isnumbered\else *\fi
+ {#2}%
+ \ifx\thmt@sibling\@empty\else [\thmt@sibling]\fi
+ {\thmt@thmname}%
+ \ifx\thmt@parent\@empty\else [\thmt@parent]\fi
+ \relax% added so we can delimited-read everything later
+ % (recall newtheorem is patched)
+ }%\show\thmt@tmp
+ \thmt@tmp
+ % uniquely ugly kludge: some keys make only sense
+ % afterwards.
+ % and it gets kludgier: again, the default-inherited
+ % keys need to have a go at it.
+ \@thmt@firstkeysetfalse%
+ \kvsetkeys{thmdef0}{#1}%
+ \kvsetkeys{thmdef}{#1}%
+}
+\@onlypreamble\declaretheorem
+
+\providecommand\thmt@quark{\thmt@quark}
+
+% in-document keyval, i.e. \begin{theorem}[key=val,key=val]
+
+\thmt@mkextendingkeyhandler{thmuse}{thmuse}{\thmt@envname\space optarg key}
+
+\addtotheorempreheadhook{%
+ \ifx\thmt@optarg\@empty\else
+ \@xa\thmt@garbleoptarg\@xa{\thmt@optarg}\fi
+}%
+
+\newif\ifthmt@thmuse@iskv
+
+\providecommand\thmt@garbleoptarg[1]{%
+ \thmt@thmuse@iskvfalse
+ \def\thmt@newoptarg{\@gobble}%
+ \def\thmt@newoptargextra{}%
+ \let\thmt@shortoptarg\@empty
+ \def\thmt@warn@unusedkeys{}%
+ \@for\thmt@fam:=\thmt@thmuse@families\do{%
+ \kvsetkeys{\thmt@fam}{#1}%
+ }%
+ \ifthmt@thmuse@iskv
+ \protected@edef\thmt@optarg{%
+ \@xa\thmt@newoptarg
+ \thmt@newoptargextra\@empty
+ }%
+ \ifx\thmt@shortoptarg\@empty
+ \protected@edef\thmt@shortoptarg{\thmt@newoptarg\@empty}%
+ \fi
+ \thmt@warn@unusedkeys
+ \else
+ \def\thmt@optarg{#1}%
+ \def\thmt@shortoptarg{#1}%
+ \fi
+}
+\def\thmt@splitopt#1=#2\thmt@quark{%
+ \def\thmt@tmpkey{#1}%
+ \ifx\thmt@tmpkey\@empty
+ \def\thmt@tmpkey{\thmt@quark}%
+ \fi
+ \@onelevel@sanitize\thmt@tmpkey
+}
+
+\def\thmt@thmuse@families{thm@track@keys}
+
+\kv@set@family@handler{thm@track@keys}{%
+ \@onelevel@sanitize\kv@key
+ \@namedef{thmt@unusedkey@\kv@key}{%
+ \PackageWarning{thmtools}{Unused key `#1'}%
+ }%
+ \@xa\g@addto@macro\@xa\thmt@warn@unusedkeys\@xa{%
+ \csname thmt@unusedkey@\kv@key\endcsname
+ }
+}
+
+% key, code.
+\def\thmt@define@thmuse@key#1#2{%
+ \g@addto@macro\thmt@thmuse@families{,#1}%
+ \define@key{#1}{#1}{\thmt@thmuse@iskvtrue
+ \@namedef{thmt@unusedkey@#1}{}%
+ #2}%
+ \thmt@mkignoringkeyhandler{#1}%
+}
+
+\thmt@define@thmuse@key{label}{%
+ \addtotheorempostheadhook[local]{\label{#1}}%
+}
+\thmt@define@thmuse@key{name}{%
+ \thmt@setnewoptarg #1\@iden%
+}
+\newcommand\thmt@setnewoptarg[1][]{%
+ \def\thmt@shortoptarg{#1}\thmt@setnewlongoptarg
+}
+\def\thmt@setnewlongoptarg #1\@iden{%
+ \def\thmt@newoptarg{#1\@iden}}
+
+\providecommand\thmt@suspendcounter[2]{%
+ \@xa\protected@edef\csname the#1\endcsname{#2}%
+ \@xa\let\csname c@#1\endcsname\c@thmt@dummyctr
+}
+
+\providecommand\thmcontinues[1]{%
+ \ifcsname hyperref\endcsname
+ \hyperref[#1]{continuing}
+ \else
+ continuing
+ \fi
+ from p.\,\pageref{#1}%
+}
+
+\thmt@define@thmuse@key{continues}{%
+ \thmt@suspendcounter{\thmt@envname}{\thmt@trivialref{#1}{??}}%
+ \g@addto@macro\thmt@newoptarg{{, }%
+ \thmcontinues{#1}%
+ \@iden}%
+}
+
+
+% \end{macrocode}
+%
+% Defining new theorem styles; keys are in opt-arg
+% even though not having any doesn't make much sense.
+% It doesn't do anything exciting here, it's up to
+% the glue layer to provide keys.
+%
+% \begin{macrocode}
+\def\thmt@declaretheoremstyle@setup{}
+\def\thmt@declaretheoremstyle#1{%
+ \PackageWarning{thmtools}{Your backend doesn't allow styling theorems}{}
+}
+\newcommand\declaretheoremstyle[2][]{%
+ \def\thmt@style{#2}%
+ \@xa\def\csname thmt@style \thmt@style @defaultkeys\endcsname{}%
+ \thmt@declaretheoremstyle@setup
+ \kvsetkeys{thmstyle}{#1}%
+ \thmt@declaretheoremstyle{#2}%
+}
+\@onlypreamble\declaretheoremstyle
+
+\kv@set@family@handler{thmstyle}{%
+ \@onelevel@sanitize\kv@value
+ \@onelevel@sanitize\kv@key
+ \PackageInfo{thmtools}{%
+ Key `\kv@key' (with value `\kv@value')\MessageBreak
+ is not a known style key.\MessageBreak
+ Will pass this to every \string\declaretheorem\MessageBreak
+ that uses `style=\thmt@style'%
+ }%
+ \ifx\kv@value\relax% no value given, don't pass on {}!
+ \@xa\g@addto@macro\csname thmt@style \thmt@style @defaultkeys\endcsname{%
+ #1,%
+ }%
+ \else
+ \@xa\g@addto@macro\csname thmt@style \thmt@style @defaultkeys\endcsname{%
+ #1={#2},%
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+%\iffalse
+%</kv>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-listof.dtx b/macros/latex/exptl/thmtools/thm-listof.dtx
new file mode 100644
index 0000000000..e91219eca1
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-listof.dtx
@@ -0,0 +1,222 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*listof>
+%\fi
+%
+% This package provides two main commands:
+% \DescribeMacro{\listoftheorems}
+% |\listoftheorems| will generate, well, a list of all theorems, lemmas,
+% etc. in your document. This list is hyperlinked if you use \pkg{hyperref},
+% and it will list the optional argument to the theorem.
+%
+% Currently, some options can be given as an optional argument keyval list:
+% \begin{description}
+% \item[numwidth] The width allocated for the numbers, default 2.3em. Since
+% you are more likely to have by-section numbering than with figures, this
+% needs to be accessible.
+% \item[ignore=foo,bar] A last-second call to |\ignoretheorems|, see below.
+% \item[onlynamed=foo,bar] Only list those foo and bar environments that
+% had an optional title. This weeds out unimportant definitions, for
+% example. If no argument is given, this applies to all environments
+% defined by |\newtheorem| and |\declaretheorem|.
+% \item[show=foo,bar] Undo a previous |\ignoretheorems| and restore default
+% formatting for these environments. Useful in combination with
+% ignoreall.
+% \item[ignoreall]
+% \item[showall] Like applying ignore or show with a list of all theorems
+% you have defined.
+% \item[title]
+% Provide a title for this list overwriting the default in |\listtheoremname|.
+% \end{description}
+%
+% \DescribeMacro{\listtheoremname}
+% The heading name is stored in the macro |\listtheoremname| and is
+% ``List of Theorems'' by default. All other formatting aspects are taken
+% from |\listoffigures|. (As a matter of fact, |\listoffigures| is called
+% internally.)
+%
+% \DescribeMacro{\ignoretheorems}
+% |\ignoretheorems|\marg{remark,example,...} can be used to suppress some
+% types of theorem from the LoTh. Be careful not to have spaces in the list,
+% those are currently \emph{not} filtered out.
+%
+% There's currently no interface to change the look of the list. If you're
+% daring, the code for the theorem type ``lemma'' is in |\l@lemma| and so on.
+%
+%\StopEventually{}
+% \begin{macrocode}
+\let\@xa=\expandafter
+\let\@nx=\noexpand
+\RequirePackage{thm-patch,keyval,kvsetkeys}
+
+\def\thmtlo@oldchapter{0}%
+\newcommand\thmtlo@chaptervspacehack{}
+\ifcsname c@chapter\endcsname
+ \ifx\c@chapter\relax\else
+ \def\thmtlo@chaptervspacehack{%
+ \ifnum \value{chapter}=\thmtlo@oldchapter\relax\else
+ % new chapter, add vspace to loe.
+ \addtocontents{loe}{\protect\addvspace{10\p@}}%
+ \xdef\thmtlo@oldchapter{\arabic{chapter}}%
+ \fi
+ }%
+ \fi
+\fi
+
+
+\providecommand\listtheoremname{List of Theorems}
+\newcommand\listoftheorems[1][]{%
+ %% much hacking here to pick up the definition from the class
+ %% without oodles of conditionals.
+ \bgroup
+ \setlisttheoremstyle{#1}%
+ \let\listfigurename\listtheoremname
+ \def\contentsline##1{%
+ \csname thmt@contentsline@##1\endcsname{##1}%
+ }%
+ \@for\thmt@envname:=\thmt@allenvs\do{%
+ \@xa\protected@edef\csname l@\thmt@envname\endcsname{% CHECK: why p@edef?
+ \@nx\@dottedtocline{1}{1.5em}{\@nx\thmt@listnumwidth}%
+ }%
+ }%
+ \let\thref@starttoc\@starttoc
+ \def\@starttoc##1{\thref@starttoc{loe}}%
+ % new hack: to allow multiple calls, we defer the opening of the
+ % loe file to AtEndDocument time. This is before the aux file is
+ % read back again, that is early enough.
+ % TODO: is it? crosscheck include/includeonly!
+ \@fileswfalse
+ \AtEndDocument{%
+ \if@filesw
+ \@ifundefined{tf@loe}{%
+ \expandafter\newwrite\csname tf@loe\endcsname
+ \immediate\openout \csname tf@loe\endcsname \jobname.loe\relax
+ }{}%
+ \fi
+ }%
+ %\expandafter
+ \listoffigures
+ \egroup
+}
+
+\newcommand\setlisttheoremstyle[1]{%
+ \kvsetkeys{thmt-listof}{#1}%
+}
+\define@key{thmt-listof}{numwidth}{\def\thmt@listnumwidth{#1}}
+\define@key{thmt-listof}{ignore}[\thmt@allenvs]{\ignoretheorems{#1}}
+\define@key{thmt-listof}{onlynamed}[\thmt@allenvs]{\onlynamedtheorems{#1}}
+\define@key{thmt-listof}{show}[\thmt@allenvs]{\showtheorems{#1}}
+\define@key{thmt-listof}{ignoreall}[true]{\ignoretheorems{\thmt@allenvs}}
+\define@key{thmt-listof}{showall}[true]{\showtheorems{\thmt@allenvs}}
+% FMi 2019-09-31 allow local title
+\define@key{thmt-listof}{title}{\def\listtheoremname{#1}}
+% -- FMi
+
+\providecommand\thmt@listnumwidth{2.3em}
+
+\providecommand\thmtformatoptarg[1]{ (#1)}
+
+\newcommand\thmt@mklistcmd{%
+ \@xa\protected@edef\csname l@\thmt@envname\endcsname{% CHECK: why p@edef?
+ \@nx\@dottedtocline{1}{1.5em}{\@nx\thmt@listnumwidth}%
+ }%
+ \ifthmt@isstarred
+ \@xa\def\csname ll@\thmt@envname\endcsname{%
+ \protect\numberline{\protect\let\protect\autodot\protect\@empty}%
+ \thmt@thmname
+ \ifx\@empty\thmt@shortoptarg\else\protect\thmtformatoptarg{\thmt@shortoptarg}\fi
+ }%
+ \else
+ \@xa\def\csname ll@\thmt@envname\endcsname{%
+ \protect\numberline{\csname the\thmt@envname\endcsname}%
+ \thmt@thmname
+ \ifx\@empty\thmt@shortoptarg\else\protect\thmtformatoptarg{\thmt@shortoptarg}\fi
+ }%
+ \fi
+ \@xa\gdef\csname thmt@contentsline@\thmt@envname\endcsname{%
+ \thmt@contentslineShow% default:show
+ }%
+}
+\def\thmt@allenvs{\@gobble}
+\newcommand\thmt@recordenvname{%
+ \edef\thmt@allenvs{\thmt@allenvs,\thmt@envname}%
+}
+\g@addto@macro\thmt@newtheorem@predefinition{%
+ \thmt@mklistcmd
+ \thmt@recordenvname
+}
+
+\addtotheorempostheadhook{%
+ \thmtlo@chaptervspacehack
+ \addcontentsline{loe}{\thmt@envname}{%
+ \csname ll@\thmt@envname\endcsname
+ }%
+}
+
+\newcommand\showtheorems[1]{%
+ \@for\thmt@thm:=#1\do{%
+ \typeout{showing \thmt@thm}%
+ \@xa\let\csname thmt@contentsline@\thmt@thm\endcsname
+ =\thmt@contentslineShow
+ }%
+}
+
+\newcommand\ignoretheorems[1]{%
+ \@for\thmt@thm:=#1\do{%
+ \@xa\let\csname thmt@contentsline@\thmt@thm\endcsname
+ =\thmt@contentslineIgnore
+ }%
+}
+\newcommand\onlynamedtheorems[1]{%
+ \@for\thmt@thm:=#1\do{%
+ \global\@xa\let\csname thmt@contentsline@\thmt@thm\endcsname
+ =\thmt@contentslineIfNamed
+ }%
+}
+
+\AtBeginDocument{%
+\@ifpackageloaded{hyperref}{%
+ \let\thmt@hygobble\@gobble
+}{%
+ \let\thmt@hygobble\@empty
+}
+\let\thmt@contentsline\contentsline
+}
+
+\def\thmt@contentslineIgnore#1#2#3{%
+ \thmt@hygobble
+}
+\def\thmt@contentslineShow{%
+ \thmt@contentsline
+}
+
+\def\thmt@contentslineIfNamed#1#2#3{%
+ \thmt@ifhasoptname #2\thmtformatoptarg\@nil{%
+ \thmt@contentslineShow{#1}{#2}{#3}%
+ }{%
+ \thmt@contentslineIgnore{#1}{#2}{#3}%
+ %\thmt@contentsline{#1}{#2}{#3}%
+ }
+}
+
+\def\thmt@ifhasoptname #1\thmtformatoptarg#2\@nil{%
+ \ifx\@nil#2\@nil
+ \@xa\@secondoftwo
+ \else
+ \@xa\@firstoftwo
+ \fi
+}
+% \end{macrocode}
+%\iffalse
+%</listof>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-llncs.dtx b/macros/latex/exptl/thmtools/thm-llncs.dtx
new file mode 100644
index 0000000000..5a3b480c2e
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-llncs.dtx
@@ -0,0 +1,90 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*llncs>
+%\fi
+% \begin{macrocode}
+\@ifclasslater{llncs}{2010/04/15}{}{%
+ \PackageWarningNoLine{thmtools}{%
+ LLNCS.cls too old, not supported by thmtools
+ }%
+ \endinput}
+% Thank you very much, Springer, for having yet another bloody
+% system. Annoyingly, it makes \xdefs all over the place, so
+% they break \MakeUppercase and hence name=.
+\ifx\thmt@modifycase\@empty\else
+ \PackageWarningNoLine{thmtools}{%
+ LLNCS support disables automatic casing of theorem names
+ }%
+ \let\thmt@modifycase\@empty
+\fi
+%%
+% Usage:
+%
+% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font}
+% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
+% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font}
+\providecommand\thmt@style@headfont{\normalfont\bfseries}
+\providecommand\thmt@style@bodyfont{\normalfont\itshape}
+
+\let\thmt@original@spnewtheorem\spnewtheorem
+\let\thmt@theoremdefiner\thmt@original@spnewtheorem
+
+% cf thm-patch.dtx
+\def\spnewtheorem{%
+ \thmt@isstarredfalse
+ \thmt@hassiblingfalse
+ \thmt@hasparentfalse
+ \parse{%
+ {\parseFlag*{\thmt@isstarredtrue}{}}%
+ {\parseMand{\def\thmt@envname{##1}}}%
+ {\parseOpt[]{\thmt@hassiblingtrue\def\thmt@sibling{##1}}{}}%
+ {\parseMand{%
+ \def\thmt@thmname{##1}%
+ }}%
+ {\parseOpt[]{\thmt@hasparenttrue\def\thmt@parent{##1}}{}}%
+ {\parseMand{\def\thmt@style@headfont{##1}}}%
+ {\parseMand{\def\thmt@style@bodyfont{##1}}}%
+ {\let\@parsecmd\thmt@spnewtheoremiv}%
+ }%
+}
+
+\newcommand\thmt@spnewtheoremiv{%
+ \thmt@newtheorem@predefinition
+ % whee, now reassemble the whole shebang.
+ \protected@edef\thmt@args{%
+ \@nx\thmt@theoremdefiner%
+ \ifthmt@isstarred *\fi
+ {\thmt@envname}%
+ \ifthmt@hassibling [\thmt@sibling]\fi
+ {\thmt@thmname}%
+ \ifthmt@hasparent [\thmt@parent]\fi
+ {\thmt@style@headfont}{\thmt@style@bodyfont}%
+ }
+ \thmt@args
+ \thmt@newtheorem@postdefinition
+}
+
+% for the keyval interface:
+\define@key{thmdef}{headfont}{%
+ \def\thmt@style@headfont{#1}%
+}
+\define@key{thmdef}{bodyfont}{%
+\def\thmt@style@bodyfont{#1}%
+}
+
+\def\thmt@almost@spnewtheorem#1\relax{%
+ \def\thm@tmpa{\spnewtheorem#1}%
+ \@xa\@xa\@xa\thm@tmpa
+ \@xa\@xa\@xa{\@xa\thmt@style@headfont\@xa}%
+ \@xa{\thmt@style@bodyfont}%
+}
+\let\thmt@newtheorem\thmt@almost@spnewtheorem
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</llncs>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-ntheorem.dtx b/macros/latex/exptl/thmtools/thm-ntheorem.dtx
new file mode 100644
index 0000000000..ccd12dc30d
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-ntheorem.dtx
@@ -0,0 +1,131 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*ntheorem>
+%\fi
+% \begin{macrocode}
+
+\providecommand\thmt@space{ }
+
+% actually, ntheorem's so-called style is nothing like a style at all...
+\def\thmt@declaretheoremstyle@setup{}
+\def\thmt@declaretheoremstyle#1{%
+ \ifcsname th@#1\endcsname\else
+ \@xa\let\csname th@#1\endcsname\th@plain
+ \fi
+}
+
+\def\thmt@notsupported#1#2{%
+ \PackageWarning{thmtools}{Key `#2' not supported by #1}{}%
+}
+
+\define@key{thmstyle}{spaceabove}{%
+ \setlength\theorempreskipamount{#1}%
+}
+\define@key{thmstyle}{spacebelow}{%
+ \setlength\theorempostskipamount{#1}%
+}
+\define@key{thmstyle}{headfont}{%
+ \theoremheaderfont{#1}%
+}
+\define@key{thmstyle}{bodyfont}{%
+ \theorembodyfont{#1}%
+}
+% not supported in ntheorem.
+\define@key{thmstyle}{notefont}{%
+ \thmt@notsupported{ntheorem}{notefont}%
+}
+\define@key{thmstyle}{headpunct}{%
+ \theoremseparator{#1}%
+}
+% not supported in ntheorem.
+\define@key{thmstyle}{notebraces}{%
+ \thmt@notsupported{ntheorem}{notebraces}%
+}
+\define@key{thmstyle}{break}{%
+ \theoremstyle{break}%
+}
+% not supported in ntheorem...
+\define@key{thmstyle}{postheadspace}{%
+ %\def\thmt@style@postheadspace{#1}%
+ \@xa\g@addto@macro\csname thmt@style \thmt@style @defaultkeys\endcsname{%
+ postheadhook={\hspace{-\labelsep}\hspace*{#1}},%
+ }%
+}
+
+% not supported in ntheorem
+\define@key{thmstyle}{headindent}{%
+ \thmt@notsupported{ntheorem}{headindent}%
+}
+% sorry, only style, not def with ntheorem.
+\define@key{thmstyle}{qed}[\qedsymbol]{%
+ \@ifpackagewith{ntheorem}{thmmarks}{%
+ \theoremsymbol{#1}%
+ }{%
+ \thmt@notsupported
+ {ntheorem without thmmarks option}%
+ {headindent}%
+ }%
+}
+
+\let\@upn=\textup
+\define@key{thmstyle}{headformat}[]{%
+ \def\thmt@tmp{#1}%
+ \@onelevel@sanitize\thmt@tmp
+ %\tracingall
+ \ifcsname thmt@headstyle@\thmt@tmp\endcsname
+ \newtheoremstyle{\thmt@style}{%
+ \item[\hskip\labelsep\theorem@headerfont%
+ \def\NAME{\theorem@headerfont ####1}%
+ \def\NUMBER{\bgroup\@upn{####2}\egroup}%
+ \def\NOTE{}%
+ \csname thmt@headstyle@#1\endcsname
+ \theorem@separator
+ ]
+ }{%
+ \item[\hskip\labelsep\theorem@headerfont%
+ \def\NAME{\theorem@headerfont ####1}%
+ \def\NUMBER{\bgroup\@upn{####2}\egroup}%
+ \def\NOTE{\if=####3=\else\bgroup\thmt@space(####3)\egroup\fi}%
+ \csname thmt@headstyle@#1\endcsname
+ \theorem@separator
+ ]
+ }
+ \else
+ \newtheoremstyle{\thmt@style}{%
+ \item[\hskip\labelsep\theorem@headerfont%
+ \def\NAME{\the\thm@headfont ####1}%
+ \def\NUMBER{\bgroup\@upn{####2}\egroup}%
+ \def\NOTE{}%
+ #1%
+ \theorem@separator
+ ]
+ }{%
+ \item[\hskip\labelsep\theorem@headerfont%
+ \def\NAME{\the\thm@headfont ####1}%
+ \def\NUMBER{\bgroup\@upn{####2}\egroup}%
+ \def\NOTE{\if=####3=\else\bgroup\thmt@space(####3)\egroup\fi}%
+ #1%
+ \theorem@separator
+ ]
+ }
+ \fi
+}
+
+\def\thmt@headstyle@margin{%
+ \makebox[0pt][r]{\NUMBER\ }\NAME\NOTE
+}
+\def\thmt@headstyle@swapnumber{%
+ \NUMBER\ \NAME\NOTE
+}
+
+
+
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</ntheorem>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-patch.dtx b/macros/latex/exptl/thmtools/thm-patch.dtx
new file mode 100644
index 0000000000..b1e28b6fe4
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-patch.dtx
@@ -0,0 +1,252 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*patch>
+%\fi
+%
+% This package is maybe not very suitable for the end user. It redefines
+% |\newtheorem| in a way that lets other packages (or the user) add code
+% to the newly-defined theorems, in a reasonably cross-compatible (with
+% the kernel, \pkg{theorem} and \pkg{amsthm}) way.
+%
+% \textbf{Warning:} the new |\newtheorem| is a superset of the allowed
+% syntax. For example, you can give a star and both optional arguments,
+% even though you cannot have an unnumbered theorem that shares a counter
+% and yet has a different reset-regimen. At some point, your command is
+% re-assembled and passed on to the original |\newtheorem|. This might
+% complain, or give you the usual ``Missing |\begin{document}|'' that
+% marks too many arguments in the preamble.
+%
+% \DescribeMacro{\addtotheorem(pre/post)(head/foot)hook}
+% A call to |\addtotheorempreheadhook|\oarg{kind}\marg{code} will
+% insert the code to be executed whenever a kind theorem is opened, before
+% the actual call takes place. (I.e., before the header ``Kind 1.3 (Foo)''
+% is typeset.) There are also posthooks that are executed after this header,
+% and the same for the end of the environment, even though nothing
+% interesting ever happens there. These are useful to put
+% |\begin{shaded}|\dots |\end{shaded}| around your theorems.
+% Note that foothooks are executed LIFO (last addition first) and headhooks
+% are executed FIFO (first addition first). There is a special kind called
+% generic that is called for all theorems. This is the default if no kind
+% is given.
+%
+% The added code may examine |\thmt@thmname| to get the title,
+% |\thmt@envname| to get the environment's name, and |\thmt@optarg| to get
+% the extra optional title, if any.
+%
+%\StopEventually{}
+% \begin{macrocode}
+\RequirePackage{parseargs}
+
+\newif\ifthmt@isstarred
+\newif\ifthmt@hassibling
+\newif\ifthmt@hasparent
+
+\def\thmt@parsetheoremargs#1{%
+ \parse{%
+ {\parseOpt[]{\def\thmt@optarg{##1}}{%
+ \let\thmt@shortoptarg\@empty
+ \let\thmt@optarg\@empty}}%
+ {%
+ \def\thmt@local@preheadhook{}%
+ \def\thmt@local@postheadhook{}%
+ \def\thmt@local@prefoothook{}%
+ \def\thmt@local@postfoothook{}%
+ \thmt@local@preheadhook
+ \csname thmt@#1@preheadhook\endcsname
+ \thmt@generic@preheadhook
+ % change following to \@xa-orgy at some point?
+ % forex, might have keyvals involving commands.
+ %\protected@edef\tmp@args{%
+ % \ifx\@empty\thmt@optarg\else [{\thmt@optarg}]\fi
+ %}%
+ \ifx\@empty\thmt@optarg
+ \def\tmp@args{}%
+ \else
+ \@xa\def\@xa\tmp@args\@xa{\@xa[\@xa{\thmt@optarg}]}%
+ \fi
+ \csname thmt@original@#1\@xa\endcsname\tmp@args
+ %%moved down: \thmt@local@postheadhook
+ %% (give postheadhooks a chance to re-set nameref data)
+ \csname thmt@#1@postheadhook\endcsname
+ \thmt@generic@postheadhook
+ \thmt@local@postheadhook
+%FMi 2019-07-31
+% \let\@parsecmd\@empty
+ \let\@parsecmd\ignorespaces
+%FMi ---
+ }%
+ }%
+}%
+
+\let\thmt@original@newtheorem\newtheorem
+\let\thmt@theoremdefiner\thmt@original@newtheorem
+
+\def\newtheorem{%
+ \thmt@isstarredfalse
+ \thmt@hassiblingfalse
+ \thmt@hasparentfalse
+ \parse{%
+ {\parseFlag*{\thmt@isstarredtrue}{}}%
+ {\parseMand{\def\thmt@envname{##1}}}%
+ {\parseOpt[]{\thmt@hassiblingtrue\def\thmt@sibling{##1}}{}}%
+ {\parseMand{\def\thmt@thmname{##1}}}%
+ {\parseOpt[]{\thmt@hasparenttrue\def\thmt@parent{##1}}{}}%
+ {\let\@parsecmd\thmt@newtheoremiv}%
+ }%
+}
+
+\newcommand\thmt@newtheoremiv{%
+ \thmt@newtheorem@predefinition
+ % whee, now reassemble the whole shebang.
+ \protected@edef\thmt@args{%
+ \@nx\thmt@theoremdefiner%
+ \ifthmt@isstarred *\fi
+ {\thmt@envname}%
+ \ifthmt@hassibling [\thmt@sibling]\fi
+ {\thmt@thmname}%
+ \ifthmt@hasparent [\thmt@parent]\fi
+ }
+ \thmt@args
+ \thmt@newtheorem@postdefinition
+}
+
+\newcommand\thmt@newtheorem@predefinition{}
+\newcommand\thmt@newtheorem@postdefinition{%
+ \let\thmt@theoremdefiner\thmt@original@newtheorem
+}
+
+\g@addto@macro\thmt@newtheorem@predefinition{%
+ \@xa\thmt@providetheoremhooks\@xa{\thmt@envname}%
+}
+\g@addto@macro\thmt@newtheorem@postdefinition{%
+ \@xa\thmt@addtheoremhook\@xa{\thmt@envname}%
+ \ifthmt@isstarred\@namedef{the\thmt@envname}{}\fi
+ \protected@edef\thmt@tmp{%
+ \def\@nx\thmt@envname{\thmt@envname}%
+ \def\@nx\thmt@thmname{\thmt@thmname}%
+ }%
+ \@xa\addtotheorempreheadhook\@xa[\@xa\thmt@envname\@xa]\@xa{%
+ \thmt@tmp
+ }%
+}
+\newcommand\thmt@providetheoremhooks[1]{%
+ \@namedef{thmt@#1@preheadhook}{}%
+ \@namedef{thmt@#1@postheadhook}{}%
+ \@namedef{thmt@#1@prefoothook}{}%
+ \@namedef{thmt@#1@postfoothook}{}%
+ \def\thmt@local@preheadhook{}%
+ \def\thmt@local@postheadhook{}%
+ \def\thmt@local@prefoothook{}%
+ \def\thmt@local@postfoothook{}%
+}
+\newcommand\thmt@addtheoremhook[1]{%
+ % this adds two command calls to the newly-defined theorem.
+ \@xa\let\csname thmt@original@#1\@xa\endcsname
+ \csname#1\endcsname
+ \@xa\renewcommand\csname #1\endcsname{%
+ \thmt@parsetheoremargs{#1}%
+ }%
+ \@xa\let\csname thmt@original@end#1\@xa\endcsname\csname end#1\endcsname
+ \@xa\def\csname end#1\endcsname{%
+ % these need to be in opposite order of headhooks.
+ \csname thmt@generic@prefoothook\endcsname
+ \csname thmt@#1@prefoothook\endcsname
+ \csname thmt@local@prefoothook\endcsname
+ \csname thmt@original@end#1\endcsname
+ \csname thmt@generic@postfoothook\endcsname
+ \csname thmt@#1@postfoothook\endcsname
+ \csname thmt@local@postfoothook\endcsname
+ }%
+}
+\newcommand\thmt@generic@preheadhook{\refstepcounter{thmt@dummyctr}}
+\newcommand\thmt@generic@postheadhook{}
+\newcommand\thmt@generic@prefoothook{}
+\newcommand\thmt@generic@postfoothook{}
+
+\def\thmt@local@preheadhook{}
+\def\thmt@local@postheadhook{}
+\def\thmt@local@prefoothook{}
+\def\thmt@local@postfoothook{}
+
+
+\providecommand\g@prependto@macro[2]{%
+ \begingroup
+ \toks@\@xa{\@xa{#1}{#2}}%
+ \def\tmp@a##1##2{##2##1}%
+ \@xa\@xa\@xa\gdef\@xa\@xa\@xa#1\@xa\@xa\@xa{\@xa\tmp@a\the\toks@}%
+ \endgroup
+}
+
+\newcommand\addtotheorempreheadhook[1][generic]{%
+ \expandafter\g@addto@macro\csname thmt@#1@preheadhook\endcsname%
+}
+\newcommand\addtotheorempostheadhook[1][generic]{%
+ \expandafter\g@addto@macro\csname thmt@#1@postheadhook\endcsname%
+}
+
+\newcommand\addtotheoremprefoothook[1][generic]{%
+ \expandafter\g@prependto@macro\csname thmt@#1@prefoothook\endcsname%
+}
+\newcommand\addtotheorempostfoothook[1][generic]{%
+ \expandafter\g@prependto@macro\csname thmt@#1@postfoothook\endcsname%
+}
+
+% \end{macrocode}
+% Since rev1.16, we add hooks to the proof environment as well, if it exists.
+% If it doesn't exist at this point, we're probably using ntheorem as
+% backend, where it goes through the regular theorem mechanism anyway.
+% \begin{macrocode}
+\ifx\proof\endproof\else% yup, that's a quaint way of doing it :)
+ % FIXME: this assumes proof has the syntax of theorems, which
+ % usually happens to be true (optarg overrides "Proof" string).
+ % FIXME: refactor into thmt@addtheoremhook, but we really don't want to
+ % call the generic-hook...
+ \let\thmt@original@proof=\proof
+ \renewcommand\proof{%
+ \thmt@parseproofargs%
+ }%
+ \def\thmt@parseproofargs{%
+ \parse{%
+ {\parseOpt[]{\def\thmt@optarg{##1}}{\let\thmt@optarg\@empty}}%
+ {%
+ \thmt@proof@preheadhook
+ %\thmt@generic@preheadhook
+ \protected@edef\tmp@args{%
+ \ifx\@empty\thmt@optarg\else [\thmt@optarg]\fi
+ }%
+ \csname thmt@original@proof\@xa\endcsname\tmp@args
+ \thmt@proof@postheadhook
+ %\thmt@generic@postheadhook
+ \let\@parsecmd\@empty
+ }%
+ }%
+ }%
+
+ \let\thmt@original@endproof=\endproof
+ \def\endproof{%
+ % these need to be in opposite order of headhooks.
+ %\csname thmtgeneric@prefoothook\endcsname
+ \thmt@proof@prefoothook
+ \thmt@original@endproof
+ %\csname thmt@generic@postfoothook\endcsname
+ \thmt@proof@postfoothook
+ }%
+ \@namedef{thmt@proof@preheadhook}{}%
+ \@namedef{thmt@proof@postheadhook}{}%
+ \@namedef{thmt@proof@prefoothook}{}%
+ \@namedef{thmt@proof@postfoothook}{}%
+\fi
+% \end{macrocode}
+%\iffalse
+%</patch>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thm-restate.dtx b/macros/latex/exptl/thmtools/thm-restate.dtx
new file mode 100644
index 0000000000..033a48254e
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-restate.dtx
@@ -0,0 +1,336 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*restate>
+%\fi
+%
+%\DescribeEnv{restatable}
+%Only one environment is provided: \verb|restatable|, which takes one
+%optional and two mandatory arguments. The first mandatory argument is the
+%type of the theorem, i.e. if you want |\begin{lemma}| to be called on
+%the inside, give |lemma|. The second argument is the name of the macro
+%that the text should be stored in, for example \verb|mylemma|. Be careful
+%not to specify existing command names! The optional argument will become the
+%optional argument to your theorem command. Consider the following example:
+%\begin{verbatim}
+% \documentclass{article}
+% \usepackage{amsmath, amsthm, thm-restate}
+% \newtheorem{lemma}{Lemma}
+% \begin{document}
+% \begin{restatable}[Zorn]{lemma}{zornlemma}\label{thm:zorn}
+% If every chain in $X$ is upper-bounded,
+% $X$ has a maximal element.
+%
+% It's true, you know!
+% \end{restatable}
+% \begin{lemma}
+% This is some other lemma of no import.
+% \end{lemma}
+% And now, here's Mr. Zorn again: \zornlemma*
+% \end{document}
+%\end{verbatim}
+%which yields
+% \begin{restatable}[Zorn]{lemma}{zornlemma}\label{thm:zorn}
+% If every chain in $X$ is upper-bounded, $X$ has a maximal element.
+%
+% It's true, you know!
+% \end{restatable}
+% \begin{lemma}
+% This is some other lemma of no import.
+% \end{lemma}
+% Actually, we have set a label in the environment, so we know that
+% it's Lemma~\ref{thm:zorn} on page~\ref{thm:zorn}.
+% And now, here's Mr. Zorn again: \zornlemma*
+% Since we prevent the label from being set again, we find that
+% it's still Lemma~\ref{thm:zorn} on page~\ref{thm:zorn}, even though
+% it occurs later also.
+%
+% \DescribeEnv{restatable*}
+% As you can see, we use the starred form |\mylemma*|. As in many cases in
+% \LaTeX, the star means ``don't give a number'', since we want to retain
+% the original number. There is also a starred variant of the |restatable|
+% environment, where the first call doesn't determine the number, but a
+% later call to |\mylemma| without star would. Since the number is carried
+% around using \LaTeX' |\label| machanism, you'll need a rerun for things to
+% settle.
+%
+% \subsection{Restrictions}
+% The only counter that is saved is the one for the theorem number. So,
+% putting floats inside a restatable is not advised: they will appear in the
+% LoF several times with new numbers.
+% Equations should work, but the code handling them might turn out to be
+% brittle, in particular when you add/remove hyperref.
+% %In the same vein, numbered equations
+% %within the statement appear again and are numbered again, with new
+% %numbers. (This is vaguely non-trivial to do correctly if equations are not
+% %numbered consecutively, but per-chapter, or there are multiple numbered
+% %equations.)
+% Note that you cannot successfully reference the equations
+% since all labels are disabled in the starred appearance. (The reference
+% will point at the unstarred occurence.)
+%
+% You cannot nest
+% restatables either. You \emph{can} use the |\restatable|\dots|\endrestatable|
+% version, but everything up to the next matching |\end{...}| is scooped up.
+% I've also probably missed many border cases.
+%
+%
+%\StopEventually{}
+% \begin{macrocode}
+\RequirePackage{thmtools}
+\let\@xa\expandafter
+\let\@nx\noexpand
+\@ifundefined{c@thmt@dummyctr}{%
+ \newcounter{thmt@dummyctr}%
+ }{}
+\gdef\theHthmt@dummyctr{dummy.\arabic{thmt@dummyctr}}%
+\gdef\thethmt@dummyctr{}%
+\long\def\thmt@collect@body#1#2\end#3{%
+ \@xa\thmt@toks\@xa{\the\thmt@toks #2}%
+ \def\thmttmpa{#3}%\def\thmttmpb{restatable}%
+ \ifx\thmttmpa\@currenvir%thmttmpb
+ \@xa\@firstoftwo% this is the end of the environment.
+ \else
+ \@xa\@secondoftwo% go on collecting
+ \fi{% this is the end, my friend, drop the \end.
+ % and call #1 with the collected body.
+ \@xa#1\@xa{\the\thmt@toks}%
+ }{% go on collecting
+ \@xa\thmt@toks\@xa{\the\thmt@toks\end{#3}}%
+ \thmt@collect@body{#1}%
+ }%
+}
+% \end{macrocode}
+% A totally ignorant version of |\ref|, defaulting to \#2 if label not
+% known yet. Otherwise, return the formatted number.
+% \begin{macrocode}
+\def\thmt@trivialref#1#2{%
+ \ifcsname r@#1\endcsname
+ \@xa\@xa\@xa\thmt@trivi@lr@f\csname r@#1\endcsname\relax\@nil
+ \else #2\fi
+}
+\def\thmt@trivi@lr@f#1#2\@nil{#1}
+% \end{macrocode}
+%
+% Counter safeties: some counters' values should be stored, such as
+% equation, so we don't get a new number. (We cannot reference it anyway.)
+% We cannot store everything, though, think page counter or section number!
+% There is one problem here: we have to remove all references to other
+% counters from |\theequation|, otherwise your equation could get a number
+% like (3.1) in one place and (4.1) in another section.
+%
+% The best solution I can come up with is to override the usual macros
+% that counter display goes through, to check if their argument is one
+% that should be fully-expanded away or retained.
+%
+% The following should only be called from within a group, and the sanitized
+% |\thectr| must not be called from within that group, since it needs the
+% original |\@arabic| et al.
+%
+% \begin{macrocode}
+\def\thmt@innercounters{%
+ equation}
+\def\thmt@counterformatters{%
+ @alph,@Alph,@arabic,@roman,@Roman,@fnsymbol}
+
+\@for\thmt@displ:=\thmt@counterformatters\do{%
+ \@xa\let\csname thmt@\thmt@displ\@xa\endcsname\csname \thmt@displ\endcsname
+}%
+\def\thmt@sanitizethe#1{%
+ \@for\thmt@displ:=\thmt@counterformatters\do{%
+ \@xa\protected@edef\csname\thmt@displ\endcsname##1{%
+ \@nx\ifx\@xa\@nx\csname c@#1\endcsname ##1%
+ \@xa\protect\csname \thmt@displ\endcsname{##1}%
+ \@nx\else
+ \@nx\csname thmt@\thmt@displ\endcsname{##1}%
+ \@nx\fi
+ }%
+ }%
+ \expandafter\protected@edef\csname the#1\endcsname{\csname the#1\endcsname}%
+ \ifcsname theH#1\endcsname
+ \expandafter\protected@edef\csname theH#1\endcsname{\csname theH#1\endcsname}%
+ \fi
+}
+
+\def\thmt@rst@storecounters#1{%
+ \bgroup
+ % ugly hack: save chapter,..subsection numbers
+ % for equation numbers.
+ %\refstepcounter{thmt@dummyctr}% why is this here?
+ %% temporarily disabled, broke autorefname.
+ \def\@currentlabel{}%
+ \@for\thmt@ctr:=\thmt@innercounters\do{%
+ \thmt@sanitizethe{\thmt@ctr}%
+ \protected@edef\@currentlabel{%
+ \@currentlabel
+ \protect\def\@xa\protect\csname the\thmt@ctr\endcsname{%
+ \csname the\thmt@ctr\endcsname}%
+ \ifcsname theH\thmt@ctr\endcsname
+ \protect\def\@xa\protect\csname theH\thmt@ctr\endcsname{%
+ (restate \protect\theHthmt@dummyctr)\csname theH\thmt@ctr\endcsname}%
+ \fi
+ \protect\setcounter{\thmt@ctr}{\number\csname c@\thmt@ctr\endcsname}%
+ }%
+ }%
+ \label{thmt@@#1@data}%
+ \egroup
+}%
+% \end{macrocode}
+%
+% Now, the main business.
+%
+% \begin{macrocode}
+\newif\ifthmt@thisistheone
+\newenvironment{thmt@restatable}[3][]{%
+ \thmt@toks{}% will hold body
+%
+ \stepcounter{thmt@dummyctr}% used for data storage label.
+%
+ \long\def\thmrst@store##1{%
+ \@xa\gdef\csname #3\endcsname{%
+ \@ifstar{%
+ \thmt@thisistheonefalse\csname thmt@stored@#3\endcsname
+ }{%
+ \thmt@thisistheonetrue\csname thmt@stored@#3\endcsname
+ }%
+ }%
+ \@xa\long\@xa\gdef\csname thmt@stored@#3\@xa\endcsname\@xa{%
+ \begingroup
+ \ifthmt@thisistheone
+ % these are the valid numbers, store them for the other
+ % occasions.
+ \thmt@rst@storecounters{#3}%
+ \else
+ % this one should use other numbers...
+ % first, fake the theorem number.
+ \@xa\protected@edef\csname the#2\endcsname{%
+ \thmt@trivialref{thmt@@#3}{??}}%
+ % if the number wasn't there, have a "re-run to get labels right"
+ % warning.
+ \ifcsname r@thmt@@#3\endcsname\else
+ \G@refundefinedtrue
+ \fi
+ % prevent stepcountering the theorem number,
+ % but still, have some number for hyperref, just in case.
+ \@xa\let\csname c@#2\endcsname=\c@thmt@dummyctr
+ \@xa\let\csname theH#2\endcsname=\theHthmt@dummyctr
+ % disable labeling.
+ \let\label=\@gobble
+ \let\ltx@label=\@gobble% amsmath needs this
+ % We shall need to restore the counters at the end
+ % of the environment, so we get
+ % (4.2) [(3.1 from restate)] (4.3)
+ \def\thmt@restorecounters{}%
+ \@for\thmt@ctr:=\thmt@innercounters\do{%
+ \protected@edef\thmt@restorecounters{%
+ \thmt@restorecounters
+ \protect\setcounter{\thmt@ctr}{\arabic{\thmt@ctr}}%
+ }%
+ }%
+ % pull the new semi-static definition of \theequation et al.
+ % from the aux file.
+ \thmt@trivialref{thmt@@#3@data}{}%
+ \fi
+ % call the proper begin-env code, possibly with optional argument
+ % (omit if stored via key-val)
+ \ifthmt@restatethis
+ \thmt@restatethisfalse
+ \else
+ \csname #2\@xa\endcsname\ifx\@nx#1\@nx\else[{#1}]\fi
+ \fi
+ \ifthmt@thisistheone
+ % store a label so we can pick up the number later.
+ \label{thmt@@#3}%
+ \fi
+ % this will be the collected body.
+ ##1%
+ \csname end#2\endcsname
+ % if we faked the counter values, restore originals now.
+ \ifthmt@thisistheone\else\thmt@restorecounters\fi
+ \endgroup
+ }% thmt@stored@#3
+ % in either case, now call the just-created macro,
+ \csname #3\@xa\endcsname\ifthmt@thisistheone\else*\fi
+ % and artificially close the current environment.
+ \@xa\end\@xa{\@currenvir}
+ }% thm@rst@store
+ \thmt@collect@body\thmrst@store
+}{%
+ %% now empty, just used as a marker.
+}
+
+\newenvironment{restatable}{%
+ \thmt@thisistheonetrue\thmt@restatable
+}{%
+ \endthmt@restatable
+}
+\newenvironment{restatable*}{%
+ \thmt@thisistheonefalse\thmt@restatable
+}{%
+ \endthmt@restatable
+}
+
+%%% support for keyval-style: restate=foobar
+\protected@edef\thmt@thmuse@families{%
+ \thmt@thmuse@families%
+ ,restate phase 1%
+ ,restate phase 2%
+}
+\newcommand\thmt@splitrestateargs[1][]{%
+ \g@addto@macro\thmt@storedoptargs{,#1}%
+ \def\tmp@a##1\@{\def\thmt@storename{##1}}%
+ \tmp@a
+}
+
+\newif\ifthmt@restatethis
+\define@key{restate phase 1}{restate}{%
+ \thmt@thmuse@iskvtrue
+ \def\thmt@storedoptargs{}% discard the first time around
+ \thmt@splitrestateargs #1\@
+ \def\thmt@storedoptargs{}% discard the first time around
+ %\def\thmt@storename{#1}%
+ \thmt@debug{we will restate as `\thmt@storename' with more args
+ `\thmt@storedoptargs'}%
+ \@namedef{thmt@unusedkey@restate}{}%
+ % spurious "unused key" fixes itself once we are after tracknames...
+ \thmt@restatethistrue
+ \protected@edef\tmp@a{%
+ \@nx\thmt@thisistheonetrue
+ \@nx\def\@nx\@currenvir{\thmt@envname}%
+ \@nx\@xa\@nx\thmt@restatable\@nx\@xa[\@nx\thmt@storedoptargs]%
+ {\thmt@envname}{\thmt@storename}%
+ }%
+ \@xa\g@addto@macro\@xa\thmt@local@postheadhook\@xa{%
+ \tmp@a
+ }%
+}
+\thmt@mkignoringkeyhandler{restate phase 1}
+
+\define@key{restate phase 2}{restate}{%
+ % do not store restate as a key for repetition:
+ % infinite loop.
+ % instead, retain the added keyvals
+ % overwriting thmt@storename should be safe here, it's been
+ % xdefd into the postheadhook
+ \thmt@splitrestateargs #1\@
+}
+\kv@set@family@handler{restate phase 2}{%
+ \ifthmt@restatethis
+ \@xa\@xa\@xa\g@addto@macro\@xa\@xa\@xa\thmt@storedoptargs\@xa\@xa\@xa{\@xa\@xa\@xa,%
+ \@xa\kv@key\@xa=\kv@value}%
+ \fi
+}
+
+% \end{macrocode}
+%\iffalse
+%</restate>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thmdef-mdframed.dtx b/macros/latex/exptl/thmtools/thmdef-mdframed.dtx
new file mode 100644
index 0000000000..a3fd3658cb
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmdef-mdframed.dtx
@@ -0,0 +1,28 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*mdframed>
+%\fi
+%
+% Mostly, this key wraps the theorem in a mdframed environment.
+% The parameters are set by treating the value we are given as
+% a new key-val list, see below.
+%
+% \begin{macrocode}
+\define@key{thmdef}{mdframed}[{}]{%
+ \thmt@trytwice{}{%
+ \RequirePackage{mdframed}%
+ \RequirePackage{thm-patch}%
+ \addtotheorempreheadhook[\thmt@envname]{%
+ \begin{mdframed}[#1]}%
+ \addtotheorempostfoothook[\thmt@envname]{\end{mdframed}}%
+ }%
+}
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</mdframed>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thmdef-shaded.dtx b/macros/latex/exptl/thmtools/thmdef-shaded.dtx
new file mode 100644
index 0000000000..6377182c3e
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmdef-shaded.dtx
@@ -0,0 +1,109 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*shaded>
+%\fi
+%
+% Mostly, this key wraps the theorem in a shadebox environment.
+% The parameters are set by treating the value we are given as
+% a new key-val list, see below.
+%
+% \begin{macrocode}
+ \define@key{thmdef}{shaded}[{}]{%
+ \thmt@trytwice{}{%
+ \RequirePackage{shadethm}%
+ \RequirePackage{thm-patch}%
+ \addtotheorempreheadhook[\thmt@envname]{%
+ \setlength\shadedtextwidth{\linewidth}%
+ \kvsetkeys{thmt@shade}{#1}\begin{shadebox}}%
+ \addtotheorempostfoothook[\thmt@envname]{\end{shadebox}}%
+ }%
+ }
+% \end{macrocode}
+% The docs for shadethm say:
+% \begin{quote}
+% There are some parameters you could set the default for (try them as is,
+% first).
+% \begin{itemize}
+% \item shadethmcolor The shading color of the background. See the
+% documentation for the color package, but with a `gray' model, I find .97
+% looks good out of my printer, while a darker shade like .92 is needed
+% to make it copy well. (Black is 0, white is 1.)
+% \item shaderulecolor The shading color of the border of the shaded box.
+% See (i). If shadeboxrule is set to 0pt then this won't print anyway.
+% \item shadeboxrule The width of the border around the shading. Set it to
+% 0pt (not just 0) to make it disappear.
+% \item shadeboxsep The length by which the shade box surrounds the text.
+% \end{itemize}
+% \end{quote}
+%
+% So, let's just define keys for all of these.
+%
+% \begin{macrocode}
+\define@key{thmt@shade}{textwidth}{\setlength\shadedtextwidth{#1}}
+\define@key{thmt@shade}{bgcolor}{\thmt@definecolor{shadethmcolor}{#1}}
+\define@key{thmt@shade}{rulecolor}{\thmt@definecolor{shaderulecolor}{#1}}
+\define@key{thmt@shade}{rulewidth}{\setlength\shadeboxrule{#1}}
+\define@key{thmt@shade}{margin}{\setlength\shadeboxsep{#1}}
+\define@key{thmt@shade}{padding}{\setlength\shadeboxsep{#1}}
+\define@key{thmt@shade}{leftmargin}{\setlength\shadeleftshift{#1}}
+\define@key{thmt@shade}{rightmargin}{\setlength\shaderightshift{#1}}
+% \end{macrocode}
+%
+% What follows is wizardry you don't have to understand. In essence,
+% we want to support two notions of color: one is ``everything that goes
+% after \lstinline|\definecolor{shadethmcolor}|'', such as
+% \lstinline|{rgb}{0.8,0.85,1}|. On the other hand, we'd also like
+% to recognize an already defined color name such as \lstinline|blue|.
+%
+% To handle the latter case, we need to copy the definition of one color
+% into another. The xcolor package offers \lstinline|\colorlet| for that,
+% for the color package, we just cross our fingers.
+% \begin{macrocode}
+\def\thmt@colorlet#1#2{%
+ %\typeout{don't know how to let color `#1' be like color `#2'!}%
+ \@xa\let\csname\string\color@#1\@xa\endcsname
+ \csname\string\color@#2\endcsname
+ % this is dubious at best, we don't know what a backend does.
+}
+\AtBeginDocument{%
+ \ifcsname colorlet\endcsname
+ \let\thmt@colorlet\colorlet
+ \fi
+}
+% \end{macrocode}
+% Now comes the interesting part: we assume that a simple color name
+% must not be in braces, and a color definition starts with an opening
+% curly brace. (So, if \lstinline|\definecolor| ever gets an optional arg,
+% we are in a world of pain.)
+%
+% If the second argument to \lstinline|\thmt@definecolor| (the key) starts
+% with a brace,
+% then \lstinline|\thmt@def@color| will have an empty second argument,
+% delimited by the brace of the key. Hopefully, the key will have exactly
+% enough arguments to satisfy \lstinline|\definecolor|. Then,
+% \lstinline|thmt@drop@relax| will be executed and gobble the fallback
+% values and the \lstinline|\thmt@colorlet|.
+%
+% If the key does not contain an opening brace, \lstinline|\thmt@def@color|
+% will drop everything up to \lstinline|{gray}{0.5}|. So, first the color
+% gets defined to a medium gray, but then, it immediately gets overwritten
+% with the definition corresponding to the color name.
+% \begin{macrocode}
+\def\thmt@drop@relax#1\relax{}
+\def\thmt@definecolor#1#2{%
+ \thmt@def@color{#1}#2\thmt@drop@relax
+ {gray}{0.5}%
+ \thmt@colorlet{#1}{#2}%
+ \relax
+}
+\def\thmt@def@color#1#2#{%
+ \definecolor{#1}}
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</shaded>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thmdef-thmbox.dtx b/macros/latex/exptl/thmtools/thmdef-thmbox.dtx
new file mode 100644
index 0000000000..ea22cbae97
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmdef-thmbox.dtx
@@ -0,0 +1,36 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2010 by Ulrich M. Schwarz
+% See file COPYING for more details.
+%\fi
+%
+%\iffalse (hide this from DocInput)
+%<*thmbox>
+%\fi
+% The thmbox package does something else: instead of having a separate
+% environment, we have to use a command different from
+% \lstinline|\newtheorem| to get the boxed style. Fortunately,
+% \thmtools stores the command as \lstinline|\thmt@theoremdefiner|, so we
+% can modify it. (One of the perks if extension writer and framework writer
+% are the same person.) So, in contrast to the previous example, this time
+% we need to do something before the actual \lstinline|\newtheorem| is
+% called.
+% \begin{macrocode}
+\define@key{thmdef}{thmbox}[L]{%
+ \thmt@trytwice{%
+ \let\oldproof=\proof
+ \let\oldendproof=\endproof
+ \let\oldexample=\example
+ \let\oldendexample=\endexample
+ \RequirePackage[nothm]{thmbox}
+ \let\proof=\oldproof
+ \let\endproof=\oldendproof
+ \let\example=\oldexample
+ \let\endexample=\oldendexample
+ \def\thmt@theoremdefiner{\newboxtheorem[#1]}%
+ }{}%
+}%
+% \end{macrocode}
+%\iffalse (hide this from DocInput)
+%</thmbox>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thmtools-manual.tex b/macros/latex/exptl/thmtools/thmtools-manual.tex
new file mode 100644
index 0000000000..111acda6dc
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmtools-manual.tex
@@ -0,0 +1,1154 @@
+%&pdflatex
+\documentclass[paper=a4, pagesize, DIV=20,
+ english,
+ headings=small,11pt,
+ titlepage=false,
+ numbers=noendperiod
+]{scrreprt}
+\addtokomafont{sectioning}{\rmfamily}
+
+\usepackage[T1]{fontenc}
+\usepackage[charter]{mathdesign}
+\usepackage{luximono}
+\usepackage[scaled]{helvet}
+
+\usepackage[dvipsnames]{xcolor}
+
+\usepackage{doc,shortvrb,xspace}
+\makeatletter
+% to be fixed at some point...
+\let\PrintDescribeMacro\@gobble
+\let \PrintDescribeEnv\@gobble
+\let \PrintMacroName\@gobble
+\let \PrintEnvName\@gobble
+\makeatother
+\CodelineNumbered
+
+\usepackage{listings}
+
+\usepackage{amsmath, amsthm}
+\usepackage{tikz}
+
+\usepackage{nameref}
+\usepackage{hyperref}
+\usepackage{cleveref}[2010/05/01]
+
+\usepackage{thmtools, thm-restate}
+\usepackage[unq]{unique}
+
+\providecommand\pkg[1]{\textsf{#1}}
+\providecommand\Thmtools{\pkg{Thmtools}\xspace}
+\providecommand\thmtools{\pkg{thmtools}\xspace}
+\providecommand\oarg[1]{\texttt{[}\textit{#1}\texttt{]}}
+\providecommand\marg[1]{\texttt{\{}\textit{#1}\texttt{\}}}
+
+
+\providecommand\clap{\makebox[0pt][c]}
+
+\newcommand\key[2][\keydefaultcontext]{%
+ % todo: create an index from this...
+ \paragraph*{\texttt{#2}}
+}
+
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{language=[LaTeX]TeX,basicstyle=\small\ttfamily,keywordstyle=\mdseries,aboveskip=0pt}
+
+\lstnewenvironment{preamble}[1][]{%
+ \lstset{backgroundcolor=\color{Purple!15},#1}%
+}{%
+}
+\lstnewenvironment{body}[1][]{%
+ \lstset{backgroundcolor=\color{Yellow!30},#1}%
+}{%
+}
+
+\newenvironment{source}{%
+ \par\noindent\strut\minipage[t]{0.61\linewidth}
+}{%
+ \endminipage
+}
+\newenvironment{result}{%
+ \hfill\minipage[t]{0.37\linewidth}
+}{%
+ \endminipage\strut\par
+}
+%\MakeShortVerb{\|}
+\lstMakeShortInline{|}
+
+
+\declaretheorem{theorem}
+\declaretheorem[numberwithin=section]{theoremS}
+\declaretheorem[name=\"Ubung]{exercise}
+\declaretheorem[sibling=theorem]{lemma}
+\declaretheorem[numbered=no,
+ name=Euclid's Prime Theorem]{euclid}
+\declaretheorem[numbered=unless unique]{singleton}
+\declaretheorem[numbered=unless unique]{couple}
+\declaretheorem[style=remark]{remark}
+\declaretheorem{Theorem}
+
+\declaretheorem[shaded={bgcolor=Lavender,
+ textwidth=12em}]{BoxI}
+
+\declaretheorem[shaded={rulecolor=Lavender,
+ rulewidth=2pt, bgcolor={rgb}{1,1,1}}]{BoxII}
+
+ \declaretheorem[thmbox=L]{boxtheorem L}
+ \declaretheorem[thmbox=M]{boxtheorem M}
+ \declaretheorem[thmbox=S]{boxtheorem S}
+
+\declaretheoremstyle[
+ spaceabove=6pt, spacebelow=6pt,
+ headfont=\normalfont\bfseries,
+ notefont=\mdseries, notebraces={(}{)},
+ bodyfont=\normalfont,
+ postheadspace=1em,
+ qed=\qedsymbol
+ ]{mystyle}
+\declaretheorem[style=mystyle
+ ]{styledtheorem}
+
+\declaretheorem[name=Theorem, refname={theorem,theorems},
+ Refname={Theorem,Theorems}]{callmeal}
+
+
+\input{VERSION.tex}
+
+\title{\Thmtools Users' Guide}
+\author{Dr. Ulrich M. Schwarz -- ulmi@absatzen.de\thanks{
+ who would like to thank the users for testing, encouragement, feature requests, and
+ bug reports. In particular, Denis Bitouz\'e prompted further improvement
+ when \thmtools got stuck in a ``good enough for me'' slump.
+}}
+\date{\VERSION}
+
+\begin{document}
+ \maketitle
+ \section*{\abstractname}
+
+ The \thmtools bundle is a collection of packages that is designed to
+ provide an easier interface to theorems, and to facilitate some more
+ advanced tasks.
+
+ If you are a first-time user and you don't think your requirements are out
+ of the ordinary, browse the examples in \autoref{cha:impatient}. If you're
+ here because the other packages you've tried so far just can't do what you
+ want, take inspiration from \autoref{cha:extravagant}. If you're a repeat
+ customer, you're most likely to be interested in the refence section in
+ \autoref{cha:reference}.
+
+ \begin{multicols}{2}[\section*{\contentsname}]
+ \makeatletter\let\chapter\@gobbletwo
+ \tableofcontents
+ \end{multicols}
+ \clearpage
+
+ \chapter{\Thmtools for the impatient}\label{cha:impatient}
+
+ \section*{How to use this document}
+
+ This guide consists mostly of examples and their output, sometimes with a
+ few additional remarks. Since theorems are defined in the preamble and
+ used in the document, the snippets are two-fold:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ % Preamble code looks like this.
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem{theorem}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ % Document code looks like this.
+ \begin{theorem}[Euclid]
+ \label{thm:euclid}%
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, the list of primes,
+ \begin{equation}\label{eq:1}
+ 2,3,5,7,\dots
+ \end{equation}
+ is infinite.
+ \end{theorem}
+ \end{body}
+ \end{source}
+ \begin{result}
+ The result looks like this:
+% \begin{theorem}[Euclid]
+% For every prime $p$, there is a prime $p'>p$.
+% In particular, there are infinitely many primes.
+% \end{theorem}
+ \begin{restatable}[Euclid]{theorem}{firsteuclid}
+ \label{thm:euclid}%
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, the list of primes,
+ \begin{equation}\label{eq:1}
+ 2,3,5,7,\dots
+ \end{equation}
+ is infinite.
+ \end{restatable}
+ \end{result}
+
+ Note that in all cases, you will need a \emph{backend} to provide the
+ command |\newtheorem| with the usual behaviour. The \LaTeX\
+ kernel has a built-in backend which cannot do very much; the most common
+ backends these days are the \pkg{amsthm} and \pkg{ntheorem} packages.
+ Throughout this document, we'll use \pkg{amsthm}, and some of the features
+ won't work with \pkg{ntheorem}.
+
+ \section{Elementary definitions}
+
+ As you have seen above, the new command to define theorems is
+ |\declaretheorem|, which in its most basic form just takes the
+ name of the environment. All other options can be set through a key-val
+ interface:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem[numberwithin=section]{theoremS}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{theoremS}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{theoremS}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{restatable}[Euclid]{theoremS}{euclidii}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{restatable}
+ \end{result}
+
+ Instead of ``numberwithin='', you can also use ``parent='' and
+ ``within=''. They're all the same, use the one you find easiest to
+ remember.
+
+ Note the example above looks somewhat bad: sometimes, the name of the environment,
+ with the first
+ letter uppercased, is not a good choice for the theorem's title.
+
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem[name=\"Ubung]{exercise}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{exercise}
+ Prove Euclid's Theorem.
+ \end{exercise}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{exercise}
+ Prove Euclid's Theorem.
+ \end{exercise}
+ \end{result}
+
+ To save you from having to look up the name of the key every time, you can
+ also use ``title='' and ``heading='' instead of ``name=''; they do exactly
+ the same and hopefully one of these will be easy to remember for you.
+
+ Of course, you do not have to follow the abominal practice of numbering
+ theorems, lemmas, etc., separately:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem[sibling=theorem]{lemma}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{lemma}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{lemma}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{lemma}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{lemma}
+ \end{result}
+
+ Again, instead of ``sibling='', you can also use ``numberlike='' and
+ ``sharecounter=''.
+
+ Some theorems have a fixed name and are not supposed to get a number.
+ To this end, \pkg{amsthm} provides |\newtheorem*|, which is
+ accessible through \thmtools:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem[numbered=no,
+ name=Euclid's Prime Theorem]{euclid}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{euclid}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{euclid}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{euclid}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{euclid}
+ \end{result}
+
+ As a somewhat odd frill, you can turn off the number if there's only one
+ instance of the kind in the document. This might happen when you split and
+ join your papers into short conference versions and longer journal papers
+ and tech reports. Note that this doesn't combine well with the sibling
+ key: how do you count like somebody who suddenly doesn't count anymore?
+ Also, it takes an extra \LaTeX\ run to settle.
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \usepackage[unq]{unique}
+ \declaretheorem[numbered=unless unique]{singleton}
+ \declaretheorem[numbered=unless unique]{couple}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{couple}
+ Marc \& Anne
+ \end{couple}
+ \begin{singleton}
+ Me.
+ \end{singleton}
+ \begin{couple}
+ Buck \& Britta
+ \end{couple}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{couple}
+ Marc \& Anne
+ \end{couple}
+ \begin{singleton}
+ Me.
+ \end{singleton}
+ \begin{couple}
+ Buck \& Britta
+ \end{couple}
+ \end{result}
+
+ \section{Frilly references}
+
+ In case you didn't know, you should: \pkg{hyperref}, \pkg{nameref} and
+ \pkg{cleveref} offer ways of ``automagically'' knowing that
+ |\label{foo}| was inside a theorem, so that a reference adds the
+ string ``Theorem''. This is all done for you, but there's one catch: you
+ have to tell \thmtools\ what the name to add is. By default, it will use
+ the title of the theorem, in particular, it will be uppercased.
+ (This happens to match the guidelines of all
+ publishers I have encountered.) But there is an alternate spelling
+ available, denoted by a capital letter, and in any case, if you use
+ \pkg{cleveref}, you should give two values separated by a comma, because
+ it will generate plural forms if you reference many theorems in one
+ |\cite|.
+ \begin{source}
+ \begin{preamble}[gobble=6]
+ \usepackage{amsthm, thmtools}
+ \usepackage{
+ nameref,%\nameref
+ hyperref,%\autoref
+ % n.b. \Autoref is defined by thmtools
+ cleveref,% \cref
+ % n.b. cleveref after! hyperref
+ }
+ \declaretheorem[name=Theorem,
+ refname={theorem,theorems},
+ Refname={Theorem,Theorems}]{callmeal}
+ \end{preamble}
+ \begin{body}[gobble=6]
+ \begin{callmeal}[Simon]\label{simon}
+ One
+ \end{callmeal}
+ \begin{callmeal}\label{garfunkel}
+ and another, and together,
+ \autoref{simon}, ``\nameref{simon}'',
+ and \cref{garfunkel} are referred
+ to as \cref{simon,garfunkel}.
+ \Cref{simon,garfunkel}, if you are at
+ the beginning of a sentence.
+ \end{callmeal}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{callmeal}[Simon]\label{simon}
+ One
+ \end{callmeal}
+ \begin{callmeal}\label{garfunkel}
+ and another, and together, \autoref{simon}, ``\nameref{simon}'',
+ and \cref{garfunkel} are referred to as \cref{simon,garfunkel}.
+ \Cref{simon,garfunkel}, if you are at the beginning of a sentence.
+ \end{callmeal}
+ \end{result}
+
+ \section{Styling theorems}
+
+ The major backends provide a command |\theoremstyle| to switch
+ between looks of theorems. This is handled as follows:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem[style=remark]{remark}
+ \declaretheorem{Theorem}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{Theorem}
+ This is a theorem.
+ \end{Theorem}
+ \begin{remark}
+ Note how it still retains the default style, `plain'.
+ \end{remark}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{Theorem}
+ This is a theorem.
+ \end{Theorem}
+ \begin{remark}
+ Note how it still retains the default style, `plain'.
+ \end{remark}
+ \end{result}
+
+ Thmtools also supports the shadethm and thmbox packages:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \usepackage[dvipsnames]{xcolor}
+ \declaretheorem[shaded={bgcolor=Lavender,
+ textwidth=12em}]{BoxI}
+ \declaretheorem[shaded={rulecolor=Lavender,
+ rulewidth=2pt, bgcolor={rgb}{1,1,1}}]{BoxII}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{BoxI}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{BoxI}
+ \begin{BoxII}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{BoxII}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{BoxI}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{BoxI}
+ \begin{BoxII}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{BoxII}
+ \end{result}
+
+ As you can see, the color parameters can take two forms: it's either the
+ name of a color that is already defined, without curly braces, or it can
+ start with a curly brace, in which case it is assumed that
+ |\definecolor{colorname}|$\langle$\textsl{what you said}$\rangle$ will be
+ valid \LaTeX\ code. In our case, we use the rbg model to manually specify
+ white. (Shadethm's default value is some sort of gray.)
+
+ For the thmbox package, use the thmbox key:
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \usepackage{amsthm}
+ \usepackage{thmtools}
+ \declaretheorem[thmbox=L]{boxtheorem L}
+ \declaretheorem[thmbox=M]{boxtheorem M}
+ \declaretheorem[thmbox=S]{boxtheorem S}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{boxtheorem L}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{boxtheorem L}
+ \begin{boxtheorem M}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{boxtheorem M}
+ \begin{boxtheorem S}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{boxtheorem S}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{boxtheorem L}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{boxtheorem L}
+ \begin{boxtheorem M}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{boxtheorem M}
+ \begin{boxtheorem S}[Euclid]
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, there are infinitely many primes.
+ \end{boxtheorem S}
+ \end{result}
+
+ Note that for both thmbox and shaded keys, it's quite possible they will not
+ cooperate with a style key you give at the same time.
+
+ \subsection{Declaring new theoremstyles}
+
+ \Thmtools\ also offers a new command to define new theoremstyles. It is
+ partly a frontend to the |\newtheoremstyle| command of \pkg{amsthm} or
+ \pkg{ntheorem}, but it offers (more or less successfully) the settings of both to
+ either. So we are talking about the same things, consider the sketch in
+ \autoref{fig:params}. To get a result like that, you would use something
+ like
+ \begin{source}
+ \begin{preamble}[gobble=4]
+ \declaretheoremstyle[
+ spaceabove=6pt, spacebelow=6pt,
+ headfont=\normalfont\bfseries,
+ notefont=\mdseries, notebraces={(}{)},
+ bodyfont=\normalfont,
+ postheadspace=1em,
+ qed=\qedsymbol
+ ]{mystyle}
+ \declaretheorem[style=mystyle]{styledtheorem}
+ \end{preamble}
+ \begin{body}[gobble=4]
+ \begin{styledtheorem}[Euclid]
+ For every prime $p$\dots
+ \end{styledtheorem}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{styledtheorem}[Euclid]
+ For every prime $p$\dots
+ \end{styledtheorem}
+ \end{result}
+ Again, the defaults are reasonable and you don't
+ have to give values for everything.
+
+ There is one important thing you cannot see in this example: there are
+ more keys you can pass to |\declaretheoremstyle|: if \thmtools\ cannot
+ figure out at all what to do with it, it will pass it on to the
+ |\declaretheorem| commands that use that style. For example, you may use
+ the boxed and shaded keys here.
+
+ To change the order in which title, number and note appear, there is a key
+ headformat. Currently, the values ``margin'' and ``swapnumber'' are
+ supported. The daring may also try to give a macro here that uses the
+ commands |\NUMBER|, |\NAME| and |\NOTE|.
+ You cannot circumvent the fact
+ that headpunct comes at the end, though, nor the fonts and braces you
+ select with the other keys.
+
+ \begin{figure}\centering
+ % please don't make me touch this picture ever again.
+ \fbox{
+ \begin{minipage}{0.618\textwidth}\Large
+ \tikzset{font=\normalfont\small\sffamily\itshape,y=12pt,>=latex}
+ \noindent which resulted in the following insight:
+ \par
+ \tikz{\draw[|<->|] (0,-1)--(0,1);
+ \draw[anchor=west] (0,0) node {spaceabove};}
+ \par
+ \tikz{\draw[|<->|] (-1,0)--(1,0);
+ \draw[anchor=south] (0,0) node {headindent};}
+ \textbf{Theo%
+ \smash{\clap{\tikz{\draw (0,0)--(0,1.2) node [anchor=south]{headfont};}}}%
+ rem 1.2
+ (\smash{\rlap{\tikz{\draw (0,0)--(0,2.5) node [anchor=base west]{notebraces};}}}%
+ Euc%
+\smash{\clap{\tikz{\draw (0,0)--(0,1.2) node [anchor=south]{notefont};}}}%
+ lid)%
+ .\smash{\rlap{\tikz{\draw (0,0)--(0,1.2) node [anchor=south west]{headpunct};}}}}%
+ \tikz{\draw[|<->|] (-1,0)--(1,0);
+ \draw[anchor=south] (0,0) node {postheadspace};}
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, the list of primes,
+ $2,3,5,7,\dots$,
+ is infinite.
+ \hfill{\tikz{\draw[anchor=north east] (0,0) node{qed}; }}$\Box$
+ \par
+ \tikz{\draw[|<->|] (0,-1)--(0,1);
+ \draw[anchor=west] (0,0) node {spacebelow};}
+ \par
+
+ As a consequence, lorem ipsum dolor sit amet frob-%nicate foo
+% paret.
+ \end{minipage}
+ }
+ \caption{Settable parameters of a theorem style.}
+ \label{fig:params}
+ \end{figure}
+
+ \section{Repeating theorems}
+
+ Sometimes, you want to repeat a theorem you have given in full earlier,
+ for example you either want to state your strong result in the
+ introduction and then again in the full text, or you want to re-state a
+ lemma in the appendix where you prove it. For example, I lied about
+ \autoref{thm:euclid} on p.\,\pageref{thm:euclid}: the true code used was
+ \begin{source}
+ \begin{preamble}[gobble=6]
+ \usepackage{thmtools, thm-restate}
+ \declaretheorem{theorem}
+ \end{preamble}
+ \begin{body}[gobble=6]
+ \begin{restatable}[Euclid]{theorem}{firsteuclid}
+ \label{thm:euclid}%
+ For every prime $p$, there is a prime $p'>p$.
+ In particular, the list of primes,
+ \begin{equation}\label{eq:1}
+ 2,3,45,7,\dots
+ \end{equation}
+ is infinite.
+ \end{restatable}
+ \end{body}
+ and to the right, I just use
+ \begin{body}[gobble=6]
+ \firsteuclid*
+ \vdots
+ \firsteuclid*
+ \end{body}
+ \end{source}
+ \begin{result}
+ \firsteuclid*
+ \vdots
+ \firsteuclid*
+ \end{result}
+
+ Note that in spite of being a theorem-environment, it gets number one all
+ over again. Also, we get equation number~\eqref{eq:1} again. The star in
+ |\firsteuclid*| tells thmtools that it should redirect the label
+ mechanism, so that this reference: \autoref{thm:euclid} points to
+ p.\,\pageref{thm:euclid}, where the unstarred environment is used. (You can
+ also use a starred environment and an unstarred command, in which case the
+ behaviour is reversed.) Also, if you use \pkg{hyperref}, the links will lead you
+ to the unstarred occurence.
+
+ Just to demonstrate that we also handle more involved cases, I repeat
+ another theorem here, but this one was numbered within its section: note
+ we retain the section number which does not fit the current section:
+ \begin{source}
+ \begin{body}
+ \euclidii*
+ \end{body}
+ \end{source}
+ \begin{result}
+ \euclidii*
+ \end{result}
+
+
+ \section{Lists of theorems}
+
+ To get a list of theorems with default formatting, just use
+ |\listoftheorems|:
+ \begin{source}
+ \begin{body}[gobble=6]
+ \listoftheorems
+ \end{body}
+ \end{source}
+ \begin{result}
+ \let\chapter\section
+ \let\clearpage\relax
+ \listoftheorems
+ \end{result}
+
+ Not everything might be of the same importance, so you can filter out
+ things by environment name:
+ \begin{source}
+ \begin{body}[gobble=6]
+ \listoftheorems[ignoreall,
+ show={theorem,Theorem,euclid}]
+ \end{body}
+ \end{source}
+ \begin{result}
+ \let\chapter\section
+ \let\clearpage\relax
+ \listoftheorems[ignoreall, show={theorem,Theorem,euclid}]
+ \end{result}
+
+ And you can also restrict to those environments that have an optional
+ argument given. Note that two theorems disappear compared to the previous
+ example. You could also say just ``onlynamed'', in which case it will
+ apply to \emph{all} theorem environments you have defined.
+ \begin{source}
+ \begin{body}[gobble=6]
+ \listoftheorems[ignoreall,
+ onlynamed={theorem,Theorem,euclid}]
+ \end{body}
+ \end{source}
+ \begin{result}
+ \let\chapter\section
+ \let\clearpage\relax
+ \listoftheorems[ignoreall, onlynamed={theorem,Theorem,euclid}]
+ \end{result}
+
+ As might be expected, the heading given is defined in |\listtheoremname|.
+
+ \section{Extended arguments to theorem environments}
+
+ Usually, the optional argument of a theorem serves just to give a note
+ that is shown in the theorem's head. \Thmtools\ allows you to have a
+ key-value list here as well. The following keys are known right now:
+ \begin{description}
+ \item[name] This is what used to be the old argument. It usually holds
+ the name of the theorem, or a source. This key also accepts an
+ \emph{optional} argument, which will go into the list of theorems. Be
+ aware that since we already are within an optional argument, you have to
+ use an extra level of curly braces:
+ |\begin{theorem}[{name=[Short name]A long name,...}]|
+ \item[label] This will issue a |\label| command after the head. Not very
+ useful, more of a demo.
+ \item[continues] Saying |continues=foo| will cause the number that is
+ given to be changed to |\ref{foo}|, and a text is added to the note.
+ (The exact text is given by the macro |\thmcontinues|, which takes the
+ label as its argument.)
+ \item[restate] Saying |restate=foo| will hopefully work like
+ wrapping this theorem in a restatable environment. (It probably still fails
+ in cases that I didn't think of.) This key also accepts an optional
+ argument: when restating, the restate key is replaced by this argument,
+ for example, |restate=[name=Boring rehash]foo| will result in a
+ different name. (Be aware that it is possible to give the same key
+ several times, but I don't promise the results. In case of the name key,
+ the names happen to override one another.)
+ \end{description}
+ \begin{source}
+ \begin{body}[gobble=6]
+ \begin{theorem}[name=Keyed theorem,
+ label=thm:key]
+ This is a
+ key-val theorem.
+ \end{theorem}
+ \begin{theorem}[continues=thm:key]
+ And it's spread out.
+ \end{theorem}
+ \end{body}
+ \end{source}
+ \begin{result}
+ \begin{theorem}[name=Keyed theorem,
+ label=thm:key]
+ This is a key-val theorem.
+ \end{theorem}
+ \begin{theorem}[continues=thm:key]
+ And it's spread out.
+ \end{theorem}
+ \end{result}
+
+
+
+ \chapter{\Thmtools for the extravagant}\label{cha:extravagant}
+
+ This chapter will go into detail on the slightly more technical offerings
+ of this bundle. In particular, it will demonstrate how to use the general
+ hooks provided to extend theorems in the way you want them to behave.
+ Again, this is done mostly by some examples.
+
+ \section{Understanding \thmtools' extension mechanism}
+
+ \Thmtools\ draws most of its power really only from one feature:
+ the |\newtheorem| of the backend will, for example, create
+ a theorem environment, i.e. the commands |\theorem| and
+ |\endtheorem|. To add functionality, four places immediately
+ suggest themselves: ``immediately before'' and ``immediately after'' those
+ two.
+
+ There are two equivalent ways of adding code there: one is to call
+ |\addtotheorempreheadhook| and its brothers and sisters
+ |...postheadhook|, |...prefoothook|
+ and |...postfoothook|.
+ All of these take an \emph{optional} argument, the name of the
+ environment, and the new code as a mandatory argument. The environment is
+ optional because there is also a set of ``generic'' hooks added to every
+ theorem that you define.
+
+ The other way is to use the keys |preheadhook| et al. in your
+ |\declaretheorem|. (There is no way of accessing the generic
+ hook in this way.)
+
+ The hooks are arranged in the following way: first the specific prehead,
+ then the generic one. Then, the original |\theorem| (or
+ whatever) will be called. Afterwards, first the specific posthead again,
+ then the generic one. (This means that you cannot wrap the head alone in
+ an environment this way.) At the end of the theorem, it is the other way
+ around: first the generic, then the specific, both before and after that
+ |\endtheorem|. This means you can wrap the entire theorem
+ easily by adding to the prehead and the postfoot hooks. Note that
+ \thmtools\ does not look inside |\theorem|, so you cannot get
+ inside the head formatting, spacing, punctuation in this way.
+
+ In many situations, adding static code will not be enough. Your code can
+ look at |\thmt@envname|, |\thmt@thmname| and
+ |\thmt@optarg|, which will contain the name of the environment,
+ its title, and, if present, the optional argument (otherwise, it is
+ |\@empty|).
+ \emph{However}, you should not make assumptions about the optional
+ argument in the preheadhook: it might still be key-value, or it might
+ already be what will be placed as a note. (This is because the key-val
+ handling itself is added as part of the headkeys.)
+
+
+ \section{Case in point: the shaded key}
+
+ Let us look at a reasonably simple example: the shaded key, which we've
+ already seen in the first section. You'll observe that we run into a
+ problem similar to the four-hook mess: your code may either want to modify
+ parameters that need to be set beforehand, or it wants to modify the
+ environment after it has been created. To hide this from the user, the
+ code you define for the key is actually executed twice, and
+ |\thmt@trytwice{A}{B}| will execute A on the first pass, and B
+ on the second. Here, we want to add to the hooks, and the hooks are only
+ there in the second pass.
+
+ \DocInput{thmdef-shaded.dtx}
+
+ \section{Case in point: the thmbox key}
+
+ \DocInput{thmdef-thmbox.dtx}
+
+ \section{Case in point: the mdframed key}
+ \DocInput{thmdef-mdframed.dtx}
+
+ \section{How \thmtools\ finds your extensions}
+
+ Up to now, we have discussed how to write the code that adds functionality
+ to your theorems, but you don't know how to activate it yet.
+ Of course, you can put it in your preamble, likely embraced by
+ |\makeatletter| and |\makeatother|, because you are
+ using internal macros with @ in their name (viz.,
+ |\thmt@envname| and friends). You can also put them into a
+ package (then, without the |\makeat...|),
+ which is simply a file ending in .sty put somewhere that \LaTeX\ can find
+ it, which can then be laoded with |\usepackage|.
+ To find out where exactly that is, and if you'd need to update
+ administrative helper files such as a filename database FNDB,
+ please consult the documentation of your \TeX\ distribution.
+
+ Since you most likely want to add keys as well, there is a shortcut that
+ \thmtools\ offers you: whenever you use a key |key| in a
+ |\declaretheorem| command, and \thmtools\ doesn't already know
+ what to do with it, it will try to |\usepackage{thmdef-key}| and
+ evaluate the key again. (If that doesn't work, \thmtools\ will cry
+ bitterly.)
+
+ For example, there is no provision in \thmtools\ itself that make the
+ |shaded| and |thmbox| keys described above special:
+ in fact, if you want to use a different package to create frames, you just
+ put a different |thmdef-shaded.sty| into a preferred texmf tree.
+ Of course, if your new package doesn't offer the old keys, your old
+ documents might break!
+
+ The behaviour for the keys in the style definition is slightly different:
+ if a key is not known there, it will be used as a ``default key'' to every
+ theorem that is defined using this style. For example, you can give the
+ |shaded| key in a style definition.
+
+ Lastly, the key-val arguments to the theorem environments themselves need
+ to be loaded manually, not least because inside the document it's too late
+ to call |\usepackage|.
+
+ \chapter{\Thmtools for the completionist}\label{cha:reference}
+
+ This will eventually contain a reference to all known keys, commands, etc.
+
+
+ \section{Known keys to \texttt{\textbackslash declaretheoremstyle}}
+ \def\keydefaultcontext{declaretheoremstyle}
+
+ N.b. implementation for \pkg{amsthm} and \pkg{ntheorem} is separate for
+ these, so if it doesn't work for \pkg{ntheorem}, try if it works with
+ \pkg{amsthm}, which in general supports more things.
+
+ Also, all keys listed as known to |\declaretheorem| are valid.
+
+ \key{spaceabove} Value: a length. Vertical space above the theorem,
+ possibly discarded if the theorem is at the top of the page.
+
+ \key{spacebelow} Value: a length. Vertical space after the theorem,
+ possibly discarded if the theorem is at the top of the page.
+
+ \key{headfont} Value: \TeX\ code. Executed just before the head of the
+ theorem is typeset, inside a group. Intended use it to put font switches here.
+
+ \key{notefont}
+ Value: \TeX\ code. Executed just before the note in the head is typeset, inside a group.
+ Intended use it to put font switches here. Formatting also applies to
+ the braces around the note.
+ Not supported by \pkg{ntheorem}.
+
+ \key{bodyfont}
+ Value: \TeX\ code. Executed before the begin part of the theorem ends,
+ but before all afterheadhooks. Intended use it to put font switches here.
+
+ \key{headpunct}
+ Value: \TeX\ code, usually a single character. Put at the end of the
+ theorem's head, prior to linebreaks or indents.
+
+ \key{notebraces}
+ Value: Two characters, the opening and closing symbol to use around a
+ theorem's note.
+ (Not supported by \pkg{ntheorem}.)
+
+ \key{postheadspace}
+ Value: a length. Horizontal space inserted after the entire head of the
+ theorem, before the body. Does probably not apply (or make sense) for
+ styles that have a linebreak after the head.
+
+ \key{headformat}
+ Value: \LaTeX\ code using the special placeholders |\NUMBER|, |\NAME|
+ and |\NOTE|, which correspond to the (formatted, including the braces
+ for |\NOTE| etc.) three parts of a theorem's head. This can be used to
+ override the usual style ``1.1 Theorem (Foo)'', for example to let the
+ numbers protude in the margin or put them after the name.
+
+ Additionally, a number of keywords are allowed here instead of \LaTeX\
+ code:
+ \begin{description}
+ \item[margin] Lets the number protude in the (left) margin.
+ \item[swapnumber] Puts the number before the name. Currently
+ not working so well for unnumbered theorems.
+ \item[] \emph{This list is likely to grow}
+ \end{description}
+
+ \key{headindent}
+ Value: a length. Horizontal space inserted before the head. Some
+ publishers like |\parindent| here for remarks, for example.
+
+
+ \section{Known keys to \texttt{\textbackslash declaretheorem}}
+ \def\keydefaultcontext{declaretheorem}
+
+ \key{parent}
+ Value: a counter name. The theorem will be reset whenever that counter
+ is incremented. Usually, this will be a sectioning level, |chapter| or
+ |section|.
+
+ \key{numberwithin}
+ Value: a counter name. The theorem will be reset whenever that counter
+ is incremented. Usually, this will be a sectioning level, |chapter| or
+ |section|.
+ (Same as parent.)
+
+ \key{within}
+ Value: a counter name. The theorem will be reset whenever that counter
+ is incremented. Usually, this will be a sectioning level, |chapter| or
+ |section|.
+ (Same as parent.)
+
+
+ \key{sibling}
+ Value: a counter name. The theorem will use this counter for numbering.
+ Usually, this is the name of another theorem environment.
+
+ \key{numberlike}
+ Value: a counter name. The theorem will use this counter for numbering.
+ Usually, this is the name of another theorem environment.
+ (Same as sibling.)
+
+ \key{sharenumber}
+ Value: a counter name. The theorem will use this counter for numbering.
+ Usually, this is the name of another theorem environment.
+ (Same as sibling.)
+
+
+ \key{title}
+ Value: \TeX\ code. The title of the theorem. Default is the name of the
+ environment, with |\MakeUppercase| prepended. You'll have to give
+ this if your title starts with a accented character, for example.
+
+ \key{name}
+ Value: \TeX\ code. The title of the theorem. Default is the name of the
+ environment, with |\MakeUppercase| prepended. You'll have to give
+ this if your title starts with a accented character, for example.
+ (Same as title.)
+
+ \key{heading}
+ Value: \TeX\ code. The title of the theorem. Default is the name of the
+ environment, with |\MakeUppercase| prepended. You'll have to give
+ this if your title starts with a accented character, for example.
+ (Same as title.)
+
+ \key{numbered}
+ Value: one of the keywords |yes|, |no| or |unless unique|. The theorem
+ will be numbered, not numbered, or only numbered if it occurs more than
+ once in the document. (The latter requires another \LaTeX\ run and will
+ not work well combined with |sibling|.)
+
+ \key{style}
+ Value: the name of a style defined with |\declaretheoremstyle| or
+ |\newtheoremstyle|. The theorem will use the settings of this style.
+
+ \key{preheadhook}
+ Value: \LaTeX\ code. This code will be executed at the beginning of the
+ environment, even before vertical spacing is added and the head is
+ typeset. However, it is already within the group defined by the
+ environment.
+
+ \key{postheadhook}
+ Value: \LaTeX\ code. This code will be executed after the call to the
+ original begin-theorem code. Note that all backends seem to delay
+ typesetting the actual head, so code here should probably enter
+ horizontal mode to be sure it is after the head, but this will change
+ the spacing/wrapping behaviour if your body starts with another list.
+
+ \key{prefoothook}
+ Value: \LaTeX\ code. This code will be executed at the end of the body
+ of the environment.
+
+ \key{postfoothook}
+ Value: \LaTeX\ code. This code will be executed at the end of the
+ environment, even after eventual vertical spacing, but still within the
+ group defined by the environment.
+
+ \key{refname}
+ Value: one string, or two string separated by a comma (no spaces). This
+ is the name of the theorem as used by |\autoref|, |\cref| and friends. If it is
+ two strings, the second is the plural form used by |\cref|. Default
+ value is the value of |name|, i.e. usually the environment name, with
+ \MakeUppercase.
+
+ \key{Refname}
+ Value: one string, or two string separated by a comma (no spaces). This
+ is the name of the theorem as used by |\Autoref|, |\Cref| and friends. If it is
+ two strings, the second is the plural form used by |\Cref|. This can be
+ used for alternate spellings, for example if your style requests no
+ abbreviations at the beginning of a sentence. No default.
+
+
+ \key{shaded}
+ Value: a key-value list, where the following keys are possible:
+ \begin{description}
+ \item[textwidth]
+ The linewidth within the theorem.
+ \item[bgcolor]
+ The color of the background of the theorem. Either a color name or a
+ color spec as accepted by |\definecolor|, such as |{gray}{0.5}|.
+ \item[rulecolor]
+ The color of the box surrounding the theorem. Either a color name or
+ a color spec.
+ \item[rulewidth]
+ The width of the box surrounding the theorem.
+ \item[margin]
+ The length by which the shade box surrounds the text.
+ \end{description}
+
+ \key{thmbox}
+ Value: one of the characters L, M and S; see examples above.
+
+
+ \section{Known keys to in-document theorems}
+ \def\keydefaultcontext{theorem}
+
+ \key{label} Value: a legal |\label| name.
+ Issues a |\label| command after the theorem's head.
+
+ \key{name} Value: \TeX\ code that will be typeset.
+ What you would have put in the optional argument in the
+ non-keyval style, i.e. the note to the head. This is \emph{not} the same
+ as the name key to |\declaretheorem|, you cannot override that from within
+ the document.
+
+ \key{listhack} Value: doesn't matter. (But put something to trigger
+ key-val behaviour, maybe listhack=true.) Linebreak styles in \pkg{amsthm}
+ don't linebreak if they start with another list, like an |enumerate|
+ environment. Giving the |listhack| key fixes that. \emph{Don't} give this
+ key for non-break styles, you'll get too little vertical space! (Just use
+ |\leavevmode| manually there.)
+ An all-around listhack that handles both situations might come in a
+ cleaner rewrite of the style system.
+
+ \section{Restatable -- hints and caveats}
+
+ TBD.
+ \begin{itemize}
+ \item Some counters are saved so that the same values appear when you
+ re-use them. The list of these counters is stored in the macro
+ |\thmt@innercounters| as a comma-separated list without spaces; default: equation.
+
+ \item To preserve the influence of other counters (think: equation
+ numbered per section and recall the theorem in another section), we need
+ to know all macros that are used to turn a counter into printed output.
+ Again, comma-separated list without spaces, without leading backslash, stored as
+ |\thmt@counterformatters|. Default:
+ |@alph,@Alph,@arabic,@roman,@Roman,@fnsymbol|
+ All these only take
+ the \LaTeX\ counter |\c@foo| as arguments. If you bypass this and use
+ |\romannumeral|, your numbers go wrong and you get what you deserve.
+ Important if you have very strange numbering, maybe using greek letters
+ or somesuch.
+
+ \item I think you cannot have one stored counter within another one's
+ typeset representation. I don't think that ever occurs in reasonable
+ circumstances, either. Only one I could think of: multiple subequation
+ blocks that partially overlap the theorem. Dude, that doesn't even nest.
+ You get what you deserve.
+
+ \item |\label| and \pkg{amsmath}'s |\ltx@label| are disabled inside the
+ starred execution. Possibly, |\phantomsection| should be disabled as
+ well?
+ \end{itemize}
+
+ \appendix
+
+
+ \chapter{\Thmtools for the morbidly curious}\label{cha:sourcecode}
+
+ This chapter consists of the implementation of Thmtools, in case you
+ wonder how this or that feature was implemented. Read on if you want a
+ look under the bonnet, but you enter at your own risk, and bring an oily
+ rag with you.
+
+ \section{Core functionality}
+
+ \subsection{The main package}
+ \DocInput{thmtools.dtx}
+
+ \subsection{Adding hooks to the relevant commands}
+ \DocInput{thm-patch.dtx}
+
+ \subsection{The key-value interfaces}
+ \DocInput{thm-kv.dtx}
+
+ \subsection{Lists of theorems}
+ \DocInput{thm-listof.dtx}
+
+ \subsection{Re-using environments}
+ \DocInput{thm-restate.dtx}
+
+ \subsection{Fixing autoref and friends}
+ \DocInput{thm-autoref.dtx}
+
+ \section{Glue code for different backends}
+
+ \subsection{amsthm}
+ \DocInput{thm-amsthm.dtx}
+
+ \subsection{beamer}
+ \DocInput{thm-beamer.dtx}
+
+ \subsection{ntheorem}
+ \DocInput{thm-ntheorem.dtx}
+
+ \section{Generic tools}
+
+ \subsection{A generalized argument parser}
+ \DocInput{parseargs.dtx}
+
+ \subsection{Different counters sharing the same register}
+ \DocInput{aliasctr.dtx}
+
+ \subsection{Tracking occurences: none, one or many}
+ \DocInput{unique.dtx}
+
+
+
+
+\end{document}
diff --git a/macros/latex/exptl/thmtools/thmtools.dtx b/macros/latex/exptl/thmtools/thmtools.dtx
new file mode 100644
index 0000000000..d5139e30c6
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmtools.dtx
@@ -0,0 +1,90 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*driver>
+\makeatletter
+\ifx\documentclass\@twoclasserror\else
+ \expandafter\@firstofone
+\fi{%
+ \makeatother
+ %% we are either \RequirePackage'd
+ %% (which we won't support) or compiled directly.
+ %% If we are compiled directly, yield the manual.
+ %% Otherwise, this looks like a debugging session
+ %% that directly uses the dtx file instead of the sty.
+ \input{thmtools-manual.tex}
+ \endinput
+}
+%</driver>
+%<*thmtools>
+%\fi
+% \begin{macrocode}
+\DeclareOption{debug}{%
+ \def\thmt@debug{\typeout}%
+}
+% common abbreviations and marker macros.
+\let\@xa\expandafter
+\let\@nx\noexpand
+\def\thmt@debug{\@gobble}
+\def\thmt@quark{\thmt@quark}
+\newtoks\thmt@toks
+
+\@for\thmt@opt:=lowercase,uppercase,anycase\do{%
+ \@xa\DeclareOption\@xa{\thmt@opt}{%
+ \@xa\PassOptionsToPackage\@xa{\CurrentOption}{thm-kv}%
+ }%
+}
+
+\ProcessOptions\relax
+
+% a scratch counter, mostly for fake hyperlinks
+\newcounter{thmt@dummyctr}%
+\def\theHthmt@dummyctr{dummy.\arabic{thmt@dummyctr}}%
+\def\thethmt@dummyctr{}%
+
+
+\RequirePackage{thm-patch, thm-kv,
+ thm-autoref, thm-listof,
+ thm-restate}
+
+% Glue code for the big players.
+\@ifpackageloaded{amsthm}{%
+ \RequirePackage{thm-amsthm}
+}{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{amsthm}{%
+ \PackageWarningNoLine{thmtools}{%
+ amsthm loaded after thmtools
+ }{}%
+ }{}}%
+}
+\@ifpackageloaded{ntheorem}{%
+ \RequirePackage{thm-ntheorem}
+}{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{ntheorem}{%
+ \PackageWarningNoLine{thmtools}{%
+ ntheorem loaded after thmtools
+ }{}%
+ }{}}%
+}
+\@ifclassloaded{beamer}{%
+ \RequirePackage{thm-beamer}
+}{}
+\@ifclassloaded{llncs}{%
+ \RequirePackage{thm-llncs}
+}{}
+% \end{macrocode}
+
+%\iffalse
+%</thmtools>
+%\fi
diff --git a/macros/latex/exptl/thmtools/thmtools.ins b/macros/latex/exptl/thmtools/thmtools.ins
new file mode 100644
index 0000000000..4b97aae226
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmtools.ins
@@ -0,0 +1,61 @@
+%%
+%% This is a bog-standard .ins file: thmtools.ins
+%%
+\input VERSION.tex
+%\show\VERSION
+\def\dropext #1.#2\relax{#1}
+\input docstrip.tex
+%\keepsilent
+\askonceonly
+\preamble
+This is a generated file.
+
+This file is part of the `thmtools' package.
+The `thmtools' package has the LPPL maintenance status: unmaintained.
+
+Copyright (C) 2008-2014 by Ulrich M. Schwarz.
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, version 1.3a.
+This version is obtainable at
+http://www.latex-project.org/lppl/lppl-1-3a.txt
+
+^^J\noexpand\noexpand\noexpand\NeedsTeXFormat{LaTeX2e}^^J\noexpand\noexpand\noexpand\ProvidesPackage{\noexpand\expandafter\noexpand\dropext\outFileName\relax}[\VERSION]
+\endpreamble
+
+\generate{%
+ \file{thmtools.sty}{\from{thmtools.dtx}{thmtools}}
+ \file{thm-restate.sty}{\from{thm-restate.dtx}{restate}}
+ \file{thm-patch.sty}{\from{thm-patch.dtx}{patch}}
+ \file{thm-autoref.sty}{\from{thm-autoref.dtx}{autoref}}
+ \file{thm-listof.sty}{\from{thm-listof.dtx}{listof}}
+ \file{thm-kv.sty}{\from{thm-kv.dtx}{kv}}
+ \file{parseargs.sty}{\from{parseargs.dtx}{parseargs}}
+ \file{aliasctr.sty}{\from{aliasctr.dtx}{code}}
+ \file{unique.sty}{\from{unique.dtx}{code}}
+ \file{thm-amsthm.sty}{\from{thm-amsthm.dtx}{amsthm}}
+ \file{thm-ntheorem.sty}{\from{thm-ntheorem.dtx}{ntheorem}}
+ \file{thm-beamer.sty}{\from{thm-beamer.dtx}{beamer}}
+ \file{thm-llncs.sty}{\from{thm-llncs.dtx}{llncs}}
+ \file{thmdef-shaded.sty}{\from{thmdef-shaded.dtx}{shaded}}
+ \file{thmdef-thmbox.sty}{\from{thmdef-thmbox.dtx}{thmbox}}
+ \file{thmdef-mdframed.sty}{\from{thmdef-mdframed.dtx}{mdframed}}
+ }
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space thmtools.sty}
+\Msg{* \space\space thm-restate.sty}
+\Msg{* \space\space thm-patch.sty}
+\Msg{* \space\space thm-autoref.sty}
+\Msg{* \space\space thm-listof.sty}
+\Msg{* \space\space thm-kv.sty}
+\Msg{* \space\space aliasctr.sty}
+\Msg{* \space\space unique.sty}
+\Msg{* \space\space parseargs.sty}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
diff --git a/macros/latex/exptl/thmtools/thmtools.pdf b/macros/latex/exptl/thmtools/thmtools.pdf
new file mode 100644
index 0000000000..5ab3fd1d69
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thmtools.pdf
Binary files differ
diff --git a/macros/latex/exptl/thmtools/unique.dtx b/macros/latex/exptl/thmtools/unique.dtx
new file mode 100644
index 0000000000..9afbd2cffa
--- /dev/null
+++ b/macros/latex/exptl/thmtools/unique.dtx
@@ -0,0 +1,173 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2005-8 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse
+%<*code>
+%\fi
+% Two macros are provided: |\setuniqmark| takes a single parameter,
+% the name, which should be a string of letters. |\ifuniqmark| takes
+% three parameters: a name, a true-part and a false-part. The true
+% part is executed if and only if there was exactly one call to
+% |\setuniqmark| with the given name during the previous \LaTeX\ run.
+%
+% Example application: legal documents are often very strongly numbered.
+% However, if a section has only a single paragraph, this paragraph is
+% not numbered separately, this only occurs from two paragraphs onwards.
+%
+% It's also possible to not-number the single theorem in your paper, but
+% fall back to numbering when you add another one.
+%
+% \StopEventually{}
+%
+% \begin{macrocode}
+
+\DeclareOption{unq}{%
+ \newwrite\uniq@channel
+ \InputIfFileExists{\jobname.unq}{}{}%
+ \immediate\openout\uniq@channel=\jobname.unq
+ \AtEndDocument{%
+ \immediate\closeout\uniq@channel%
+ }
+}
+\DeclareOption{aux}{%
+ \let\uniq@channel\@auxout
+}
+
+% \end{macrocode}
+%
+%
+% \iffalse $Id: unique.dtx,v 1.4 2010/04/25 19:37:46 ulmi Exp $\fi
+% \begin{macro}{\setuniqmark}
+% Call this with a name to set the corresponding uniqmark. The name must
+% be suitable for |\csname|-constructs, i.e. fully expansible to a
+% string of characters. If you use some counter values to generate this,
+% it might be a good idea to try and use hyperref's |\theH...| macros,
+% which have similar restrictions. You can check whether a particular
+% |\setuniqmark| was called more than once during \emph{the last run}
+% with |\ifuniq|.
+% \begin{macrocode}
+\newcommand\setuniqmark[1]{%
+ \expandafter\ifx\csname uniq@now@#1\endcsname\relax
+ \global\@namedef{uniq@now@#1}{\uniq@ONE}%
+ \else
+ \expandafter\ifx\csname uniq@now@#1\endcsname\uniq@MANY\else
+ \immediate\write\uniq@channel{%
+ \string\uniq@setmany{#1}%
+ }%
+ \ifuniq{#1}{%
+ \uniq@warnnotunique{#1}%
+ }{}%
+ \fi
+ \global\@namedef{uniq@now@#1}{\uniq@MANY}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifuniq}
+% Companion to |\setuniqmark|: if the uniqmark given in the first
+% argument was called more than once, execute the second argument,
+% otherwise execute the first argument. Note than no call to
+% |\setuniqmark| for a particular uniqmark at all means that this
+% uniqmark is unique.
+%
+% This is a lazy version: we could always say false if we already had two calls
+% to setuniqmark this run, but we have to rerun for any ifuniq prior
+% to the first setuniqmark anyway, so why bother?
+% \begin{macrocode}
+\newcommand\ifuniq[1]{%
+ \expandafter\ifx\csname uniq@last@#1\endcsname\uniq@MANY
+ \expandafter \@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Two quarks to signal if we have seen an uniqmark more than once.
+% \begin{macrocode}
+\def\uniq@ONE{\uniq@ONE}
+\def\uniq@MANY{\uniq@MANY}
+% \end{macrocode}
+% Flag: suggest a rerun?
+% \begin{macrocode}
+\newif\if@uniq@rerun
+% \end{macrocode}
+%
+% Helper macro: a call to this is written to the .aux file when we see
+% an uniqmark for the second time. This sets the right information for
+% the next run. It also checks on subsequent runs if the number of
+% uniqmarks drops to less than two, so that we'll need a rerun.
+% \begin{macrocode}
+\def\uniq@setmany#1{%
+ \global\@namedef{uniq@last@#1}{\uniq@MANY}%
+ \AtEndDocument{%
+ \uniq@warnifunique{#1}%
+ }%
+}
+% \end{macrocode}
+%
+% Warning if something is unique now. This always warns if the
+% setting for this run is not ``many'', because it was generated
+% by a setmany from the last run.
+% \begin{macrocode}
+\def\uniq@warnifunique#1{%
+ \expandafter\ifx\csname uniq@now@#1\endcsname\uniq@MANY\else
+ \PackageWarningNoLine{uniq}{%
+ `#1' is unique now.\MessageBreak
+ Rerun LaTeX to pick up the change%
+ }%
+ \@uniq@reruntrue
+ \fi
+}
+% \end{macrocode}
+%
+% Warning if we have a second uniqmark this run around. Since this is
+% checked immediately, we could give the line of the second
+% occurence, but we do not do so for symmetry.
+% \begin{macrocode}
+\def\uniq@warnnotunique#1{%
+ \PackageWarningNoLine{uniq}{%
+ `#1' is not unique anymore.\MessageBreak
+ Rerun LaTeX to pick up the change%
+ }%
+ \@uniq@reruntrue
+}
+% \end{macrocode}
+%
+% Maybe advise a rerun (duh!). This is executed at the end of the
+% second reading of the aux-file. If you manage to set uniqmarks
+% after that (though I cannot imagine why), you might need reruns
+% without being warned, so don't to that.
+% \begin{macrocode}
+\def\uniq@maybesuggestrerun{%
+ \if@uniq@rerun
+ \PackageWarningNoLine{uniq}{%
+ Uniquenesses have changed. \MessageBreak
+ Rerun LaTeX to pick up the change%
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% Make sure the check for rerun is pretty late in processing, so it
+% can catch all of the uniqmarks (hopefully).
+% \begin{macrocode}
+\AtEndDocument{%
+ \immediate\write\@auxout{\string\uniq@maybesuggestrerun}%
+}
+\ExecuteOptions{aux}
+\ProcessOptions\relax
+% \end{macrocode}
+%\iffalse
+%</code>
+%\fi
diff --git a/macros/latex/exptl/xdoc b/macros/latex/exptl/xdoc
new file mode 120000
index 0000000000..775b8110f7
--- /dev/null
+++ b/macros/latex/exptl/xdoc
@@ -0,0 +1 @@
+../contrib/xdoc \ No newline at end of file