summaryrefslogtreecommitdiff
path: root/macros/latex/exptl/mem/Tools
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/exptl/mem/Tools')
-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
8 files changed, 1489 insertions, 0 deletions
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