diff options
author | Karl Berry <karl@freefriends.org> | 2012-05-06 23:27:09 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-05-06 23:27:09 +0000 |
commit | 8b30277ca27b1e7626d2611111006f4fa40b7ff8 (patch) | |
tree | 89d91907a7adeac20eaadff1dbce24e1c508b8b0 /Master/texmf-dist/doc/fonts/gnu-freefont/tools | |
parent | 6e142f4e4ff464728ac333fa9ab9e46ee6f97161 (diff) |
gnu-freefont 20120503 (6may12)
git-svn-id: svn://tug.org/texlive/trunk@26232 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/fonts/gnu-freefont/tools')
37 files changed, 8372 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/MacTT b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/MacTT new file mode 100755 index 00000000000..30d19e151f0 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/MacTT @@ -0,0 +1,54 @@ +# vim: set filetype=python : +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2012, Stevan White" +__date__ = "$Date: 2012-04-21 18:47:22 +0200 (Sat, 21 Apr 2012) $" +__version__ = "$Revision: 2231 $" + +__doc__ = """ +Convert fonts from FontForge's native SFD format to TrueType format +First auto-hints whole font + +Old-style kern tables seem to be what is actually used by Windows and +some Linux programs such as OpenOffice. + +According to the FAQ, need to pass Flags=(apple) to build Mac fonts. +But this option seems to rule out old-style kern tables +""" + +import fontforge +from sys import argv +from buildutils import * + +scriptname = argv[0]; +argc = len( argv ) + +if argc > 1: + for i in range( 1, argc ): + f = fontforge.open( argv[i] ) + ttfile = f.fontname + ".mac.ttf" + vstr = trim_version_str( f ) + print "Generating Mac TrueType file ", ttfile, ' ', vstr + f.selection.all() + f.autoHint() + f.autoInstr() + # Mac OS Font Book doesn't like the old-kern flag + #f.generate( ttfile, flags=('opentype','old-kern') ) + f.close() +else: + print "Usage: " + scriptname + " font.sfd [font.sfd ...]" diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/OpenType b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/OpenType new file mode 100755 index 00000000000..4307231034e --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/OpenType @@ -0,0 +1,54 @@ +# vim: set filetype=python : +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2012, Stevan White" +__date__ = "$Date: 2012-04-24 13:09:08 +0200 (Tue, 24 Apr 2012) $" +__version__ = "$Revision: 2245 $" +__doc__ = """ +Convert fonts from FontForge's native SFD format to OpenType format + +Issues: Currently, FontForge does not include gasp tables in OpenType fonts. +However, in Windows, that functionality is clearly present in other fonts. +The result, I think, is that hinting is applied to small font sizes when +it is inappropriate. + +Therefore, hinting is presently turned off +""" + +import fontforge +from sys import argv +from buildutils import * + +scriptname = argv[0]; +argc = len( argv ) + +if argc > 1: + for i in range( 1, argc ): + f = fontforge.open( argv[i] ) + otfile = f.fontname + ".otf" + vstr = trim_version_str( f ) + print "Generating OpenType file ", otfile, ' ', vstr + # Wanted to set to 'UniocdeBmp' if there were no high unicodes + # but all attemtps to determine that from Python failed. + f.encoding = 'UnicodeFull' + f.selection.all() + f.autoHint() # because without gasp table, small sizes ugly + f.generate( otfile, flags=('opentype','old-kern','round') ) + f.close() +else: + print "Usage: " + scriptname + " font.sfd [font.sfd ...]" diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/TrueType b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/TrueType new file mode 100755 index 00000000000..1f6cc2f1500 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/TrueType @@ -0,0 +1,57 @@ +# vim: set filetype=python : +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2012, Stevan White" +__date__ = "$Date: 2012-04-21 18:47:22 +0200 (Sat, 21 Apr 2012) $" +__version__ = "$Revision: 2231 $" +__doc__ = """ +Convert fonts from FontForge's native SFD format to TrueType format +First auto-hints whole font + +Old-style kern tables seem to be what is actually used by Windows and +some Linux programs such as OpenOffice. + +According to the FAQ, need to pass Flags=(apple) to build Mac fonts. +But this option seems to rule out old-style kern tables +""" + +import fontforge +import sys +from buildutils import * + +scriptname = sys.argv[0]; +argc = len( sys.argv ) + +if argc > 1: + for i in range( 1, argc ): + f = fontforge.open( sys.argv[i] ) + ttfile = f.fontname + ".ttf" + vstr = trim_version_str( f ) + print "Generating TrueType file ", ttfile, ' ', vstr + # Wanted to set to 'UniocdeBmp' if there were no high unicodes + # but all attemtps to determine that from Python failed. + f.encoding = 'UnicodeFull' + + f.layers['Fore'].is_quadratic = True + f.selection.all() + f.autoHint() + f.autoInstr() + f.generate( ttfile, flags=('opentype','old-kern','no-hints') ) + f.close() +else: + print "Usage: " + scriptname + " font.sfd [font.sfd ...]" diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF new file mode 100755 index 00000000000..7a3a7902299 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/WOFF @@ -0,0 +1,174 @@ +# vim: set filetype=python : +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2011, 2012, Stevan White" +__date__ = "$Date: 2011-11-03 01:50:14 +0100 (Thu, 03 Nov 2011) $" +__version__ = "$Revision: 1863 $" +__doc__ = """ +Convert fonts from FontForge's native SFD format to Web Open Font Format (WOFF) +First auto-hints whole font + +Mainly, this copies information out of the font's existing TT names strings, +and uses them to generate XML information for the WOFF metadata. +Then it just saves the file as *.woff. + +The settings should otherwise be like those for generic OpenType fonts. + +""" + +import fontforge +import sys +import xml.dom.minidom +from buildutils import * + +scriptname = sys.argv[0]; +argc = len( sys.argv ) + +class SFNT_name: + def __init__( self, lang, string ): + self.lang = lang + self.string = string + +def fontStrings2dict( font, lang_filter=None ): + sfnt_strings = {} + for n in font.sfnt_names: + if lang_filter: + if n[0].startswith( lang_filter ): + sfnt_strings[n[1]] = SFNT_name(n[0],n[2]) + else: + sfnt_strings[n[1]] = SFNT_name(n[0],n[2]) + return sfnt_strings + +def stripmeta( meta ): + lst = meta.split( '\n' ) + nlst = [] + for line in lst[1:-2]: + if line.startswith( '\t' ): + line = line[1:] + nlst.append( line ) + return '\n'.join( nlst ) + +def add_text_decorated_with_divs( doc, parent, text ): + for line in text.split( '\n' ): + if line: + div = doc.createElement( 'div' ) + div.appendChild( doc.createTextNode( line ) ) + parent.appendChild( div ) + +def fontInfo2WOFFxml( font ): + sfnt_strings = fontStrings2dict( f, 'English' ) + copyright = sfnt_strings['Copyright'].string + license = sfnt_strings['License'].string + licenseURL = sfnt_strings['License URL'].string + vendorURL = sfnt_strings['Vendor URL'].string + version = sfnt_strings['Version'].string + fontFamily = sfnt_strings['Family'].string + fontStyle = sfnt_strings['SubFamily'].string + + doc = xml.dom.minidom.Document() + meta = doc.createElement( 'metadata' ) + doc.appendChild( meta ) + # <uniqueid id="org.gnu.freefont.freeserif.1877" /> + elt = doc.createElement( 'uniqueid' ) + + version_prefix = 'Revision: ' + if version.startswith( version_prefix ): + revision = version[len(version_prefix):] + else: + revision = version + + elt.setAttribute( 'id', 'org.gnu.freefont.' + fontFamily + '.' + + fontStyle + '.' + revision ) + meta.appendChild( elt ) + + # <vendor name="Font Vendor" url="https://savannah.gnu.org/projects/freefont/" /> + elt = doc.createElement( 'vendor' ) + elt.setAttribute( 'name', 'Font Vendor' ) + elt.setAttribute( 'url', vendorURL ) + meta.appendChild( elt ) + # <credits> + # <credit name="Font Designer" + # url="https://savannah.gnu.org/projects/freefont/" /> + # </credits> + elt_credits = doc.createElement( 'credits' ) + elt = doc.createElement( 'credit' ) + elt.setAttribute( 'name', 'Font Designer' ) + elt.setAttribute( 'url', vendorURL ) + elt_credits.appendChild( elt ) + meta.appendChild( elt_credits ) + #<description> + # <text xml:lang="en"> + # FreeSerif-Medium is a member of the GNU FreeFont font family. + # </text> + #</description> + elt_description = doc.createElement( 'description' ) + elt = doc.createElement( 'text' ) + elt.setAttribute( 'xml:lang', 'en' ) + text = doc.createTextNode( fontFamily + '-' + fontStyle + + " is a member of the GNU FreeFont font family.") + elt.appendChild( text ) + elt_description.appendChild( elt ) + meta.appendChild( elt_description ) + #<license url="http://www.gnu.org/copyleft/gpl.html" + # id="fontvendor-Web-corporate-v2"> + # <text xml:lang="en"> + # ... + elt_license = doc.createElement( 'license' ) + elt_license.setAttribute( 'url', licenseURL ) + elt = doc.createElement( 'text' ) + elt.setAttribute( 'xml:lang', 'en' ) + add_text_decorated_with_divs( doc, elt, license ) + elt_license.appendChild( elt ) + meta.appendChild( elt_license ) + #<copyright> + #<text xml:lang="en">Copyright ‰2002, 2003, 2005, 2008, 2009, 2010, 2011 GNU Freefont contributors.</text> + #</copyright> + elt_copyright = doc.createElement( 'copyright' ) + elt = doc.createElement( 'text' ) + elt.setAttribute( 'xml:lang', 'en' ) + elt.appendChild( doc.createTextNode( copyright ) ) + elt_copyright.appendChild( elt ) + meta.appendChild( elt_copyright ) + strrep = meta.toprettyxml() + + return stripmeta( strrep ) + +if argc > 1: + for i in range( 1, argc ): + f = fontforge.open( sys.argv[i] ) + woff_file = f.fontname + ".woff" + vstr = trim_version_str( f ) + print "Generating WOFF file ", woff_file, ' ', vstr + # Wanted to set to 'UniocdeBmp' if there were no high unicodes + # but all attemtps to determine that from Python failed. + f.encoding = 'UnicodeFull' + f.layers['Fore'].is_quadratic = True + f.selection.all() + f.autoHint() + f.autoInstr() + # Copy copyright info etc from the tt tables into the + # WOFF XML section. + xml = fontInfo2WOFFxml( f ) + f.woffMajor = 1 + f.woffMajor = 0 + f.woffMetadata = xml + #f.generate( woff_file, flags=('opentype','round') ) + f.generate( woff_file, flags=('opentype','no-hints') ) + f.close() +else: + print "Usage: " + scriptname + " font.sfd [font.sfd ...]" diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/buildutils.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/buildutils.py new file mode 100644 index 00000000000..c723e056e59 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/buildutils.py @@ -0,0 +1,46 @@ +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2011, 2012, Stevan White" +__date__ = "$Date: 2012-04-24 13:10:12 +0200 (Tue, 24 Apr 2012) $" +__version__ = "$Revision: 2246 $" +__doc__ = """ +Common tools used by the generate scripts. +""" + +import re + +_re_vstr = re.compile( '\$Revision: (\d*)\s*\$(.*)' ) + +def trim_version_str( font ): + """ SVN automatically puts a revision number between dollar signs + in the sfd file's Version string. + However the OpenType standard recommends + Version n.m + Where n and m are decimal numbers. + """ + vstr_match = _re_vstr.match( font.version ) + ot_stdized = '' + if vstr_match: + trimmed = vstr_match.group( 1 ) + rest = vstr_match.group( 2 ) + otstdized = '0412.' + trimmed + rest + font.version = otstdized + #font.appendSFNTName( n[0], n[1], otstdized ) + return trimmed + return otstdized + diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/buildutils.pyc b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/buildutils.pyc Binary files differnew file mode 100644 index 00000000000..ff501eccdcb --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/generate/buildutils.pyc diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OS2UnicodeRange b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OS2UnicodeRange new file mode 100755 index 00000000000..486609578e8 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OS2UnicodeRange @@ -0,0 +1,7 @@ +#!/bin/sh +# Needs George Williams' showttf +for FILE in Free*.ttf +do + printf "%-23s" $FILE + showttf $FILE | grep -a UnicodeRange +done
\ No newline at end of file diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/UnicodeRanges.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/UnicodeRanges.py new file mode 100644 index 00000000000..937709630a7 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/UnicodeRanges.py @@ -0,0 +1,567 @@ +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2011, Stevan White" +__date__ = "$Date: 2012-04-22 13:43:44 +0200 (Sun, 22 Apr 2012) $" +__version__ = "$Revision: 2238 $" + +__doc__ = """ +Encodes the correspondence between Unicode code intervals +and the script support field 'ulUnicodeRange' of OpenType fonts. + +A Unicode script range, such as Greek, is not an unbroken list of +characters, but rather several "intervals" of defined characters, +broken by undefined or reserved character slots. + +OpenType contains an attempt to report whether a given font supports +a certain range of Unicode, e.g. Greek or Kanji. This was done using +a bit mask, with (roughly) one bit for each range. + +This is complicated by: + 1) some ranges overlap, or have other interactions + A) Greek and Coptic are not completely distinct + B) Accent ranges are often used by several scripts + C) FontForge has the occasional bug in its internal + notion of Unicode ranges + 2) What is meant by "support"? Is it enough to have a single + glyph in a range, to say it is supported? + 3) both Unicode and OpenType are in a state of flux + +See + +Roadmap tf the BMP +http://www.unicode.org/roadmaps/bmp/ + +The intervals are partly just the assigned interval, but often I have +listed the ranges that have characters assigned to them. + +OpenType standard: OS/2 and Windows Metrics +http://www.microsoft.com/typography/otspec/os2.htm + +Apple Developer: The TrueType Font File +http://developer.apple.com/fonts/TTRefMan/RM06/Chap6.html +Says 128 bits are split into 96 and 32 bits. +96 is Unicode block, 32 for script sets... + +Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification +http://www.w3.org/TR/CSS2/ +""" + +class interval: + def __init__( self, begin, end ): + self.begin = begin + self.end = end + + def len( self ): + return 1 + self.end - self.begin + + def __str__( self ): + return '[' + str( self.begin ) + ',' + str( self.end ) + ']' + + def contains( self, val ): + return val <= self.end and val >= self.begin + +# NOTE the OpenType spec is much more thorough +ulUnicodeRange = [ +[0, 'Basic Latin', [interval(0,1), # Nul character, mapped to notdef + # and .nul; required by TrueType + interval(0x0d, 0x0d), # non-marking return + interval(0x20, 0x7E)] ], # Latin range +[1, 'Latin-1 Supplement',[interval(0xA0, 0xFF)] ], +[2, 'Latin Extended-A', [interval(0x0100, 0x017F)] ], +[3, 'Latin Extended-B', [interval(0x0180, 0x024F)]], +[4, 'IPA and Phonetic Extensions', [interval(0x0250, 0x02AF), + interval(0x1D00, 0x1D7F), # Phonetic Extensions + interval(0x1D80, 0x1DBF) # Phonetic Extensions S. + ]], +[5, 'Spacing Modifier Letters', [interval(0x02B0, 0x02FF), + interval(0xA700, 0xA71F) # Modifier Tone Letters + ]], +[6, 'Combining Diacritical Marks (+suppl.)', [interval(0x0300, 0x036F), + interval(0x1DC0, 0x1DE6), # Supplement + interval(0x1DFC, 0x1DFF) # Supplement + ] ], +[7, 'Greek and Coptic', [interval(0x0370, 0x0377), + interval(0x037A, 0x037E), + interval(0x0384, 0x038A), + interval(0x038C, 0x038C), + interval(0x038E, 0x03A1), + interval(0x03A3, 0x03FF) + ] ], +[8, 'Coptic', [interval(0x2C80, 0x2CFF)]], +[9, 'Cyrillic (+suppl., +ext.-A, -B)', [ + interval(0x0400, 0x04FF), # Cyrillic + interval(0x0500, 0x0527), # Cyrillic Supplement + interval(0x2DE0, 0x2DFF), # Cyrillic Extended-A + interval(0xA640, 0xA673), # Cyrillic Extended-B + interval(0xA67C, 0xA697) + ] + ], +[10, 'Armenian', [interval(0x0531, 0x0556), + interval(0x0559, 0x055F), + interval(0x0561, 0x0587), + interval(0x0589, 0x058A), + interval(0x058F, 0x058F) + ] + ], +[11, 'Hebrew', [ + interval(0x0591, 0x05C7), + interval(0x05D0, 0x05EA), + interval(0x05F0, 0x05F4) + # See also Alphabetic Presentation Forms + ]], +[12, 'Vai', [interval(0xA500, 0xA62B), + ]], +[13, 'Arabic (+suppl.)', [interval(0x0600, 0x0603), + interval(0x0606, 0x061B), + interval(0x061E, 0x06FF), + interval(0x0750, 0x077F) # Supplement + ] + ], +[14, "N'Ko", [interval(0x07C0, 0x07FF)]], +[15, 'Devanagari (+ext.)', [ interval(0x0900, 0x0977), + interval(0x0979, 0x097F), + interval(0xA8E0, 0xA8FB) # Extended + ]], +[16, 'Bengali', [interval(0x0981, 0x0983), + interval(0x0985, 0x098C), + interval(0x098F, 0x0990), + interval(0x0993, 0x09A8), + interval(0x09AA, 0x09B0), + interval(0x09B2, 0x09B2), + interval(0x09B6, 0x09B9), + interval(0x09BC, 0x09C4), + interval(0x09C7, 0x09C8), + interval(0x09CB, 0x09CE), + interval(0x09D7, 0x09D7), + interval(0x09DC, 0x09DD), + interval(0x09DF, 0x09E3), + interval(0x09E6, 0x09FB), + ]], +[17, 'Gurmukhi', [interval(0x0A01, 0x0A03), + interval(0x0A05, 0x0A0A), + interval(0x0A0F, 0x0A10), + interval(0x0A13, 0x0A28), + interval(0x0A2A, 0x0A30), + interval(0x0A32, 0x0A33), + interval(0x0A35, 0x0A36), + interval(0x0A38, 0x0A39), + interval(0x0A3C, 0x0A3C), + interval(0x0A3E, 0x0A42), + interval(0x0A47, 0x0A48), + interval(0x0A4B, 0x0A4D), + interval(0x0A51, 0x0A51), + interval(0x0A59, 0x0A5C), + interval(0x0A5E, 0x0A5E), + interval(0x0A66, 0x0A75), + ]], +[18, 'Gujarati', [interval(0x0A81, 0x0A83), + interval(0x0A85, 0x0A8D), + interval(0x0A8F, 0x0A91), + interval(0x0A93, 0x0AA8), + interval(0x0AAA, 0x0AB0), + interval(0x0AB2, 0x0AB3), + interval(0x0AB5, 0x0AB9), + interval(0x0ABC, 0x0AC5), + interval(0x0AC7, 0x0AC9), + interval(0x0ACB, 0x0ACD), + interval(0x0AD0, 0x0AD0), + interval(0x0AE0, 0x0AE3), + interval(0x0AE6, 0x0AEF), + interval(0x0AF0, 0x0AF1) + ]], +[19, 'Oriya', [interval(0x0B01, 0x0B03), + interval(0x0B05, 0x0B0C), + interval(0x0B0F, 0x0B10), + interval(0x0B13, 0x0B28), + interval(0x0B2A, 0x0B30), + interval(0x0B32, 0x0B33), + interval(0x0B35, 0x0B39), + interval(0x0B3C, 0x0B44), + interval(0x0B47, 0x0B48), + interval(0x0B4B, 0x0B4D), + interval(0x0B56, 0x0B57), + interval(0x0B5C, 0x0B5D), + interval(0x0B5F, 0x0B63), + interval(0x0B66, 0x0B77), + ]], +[20, 'Tamil', [interval(0x0B82, 0x0B83), + interval(0x0B85, 0x0B8A), + interval(0x0B8E, 0x0B90), + interval(0x0B92, 0x0B95), + interval(0x0B99, 0x0B9A), + interval(0x0B9C, 0x0B9C), + interval(0x0B9E, 0x0B9F), + interval(0x0BA3, 0x0BA4), + interval(0x0BA8, 0x0BAA), + interval(0x0BAE, 0x0BB9), + interval(0x0BBE, 0x0BC2), + interval(0x0BC6, 0x0BC8), + interval(0x0BCA, 0x0BCD), + interval(0x0BD0, 0x0BD0), + interval(0x0BD7, 0x0BD7), + interval(0x0BE6, 0x0BFA) + ]], +[21, 'Telugu', [interval(0x0C01, 0x0C03), + interval(0x0C05, 0x0C0C), + interval(0x0C0E, 0x0C11), + interval(0x0C12, 0x0C28), + interval(0x0C2A, 0x0C33), + interval(0x0C35, 0x0C39), + interval(0x0C3d, 0x0C44), + interval(0x0C46, 0x0C48), + interval(0x0C4a, 0x0C4d), + interval(0x0C55, 0x0C56), + interval(0x0C58, 0x0C59), + interval(0x0C60, 0x0C63), + interval(0x0C66, 0x0C6f), + interval(0x0C78, 0x0C7f), + ] + ], +[22, 'Kannada', [interval(0x0C82, 0x0C83), + interval(0x0C85, 0x0C8C), + interval(0x0C8E, 0x0C90), + interval(0x0C92, 0x0CA8), + interval(0x0CAA, 0x0CB3), + interval(0x0CB5, 0x0CB9), + interval(0x0CBC, 0x0CC4), + interval(0x0CC6, 0x0CC8), + interval(0x0CCA, 0x0CCD), + interval(0x0CD5, 0x0CD6), + interval(0x0CDE, 0x0CDE), + interval(0x0CE0, 0x0CE3), + interval(0x0CE6, 0x0CEF), + interval(0x0CF1, 0x0CF2), + ]], +[23, 'Malayalam', [interval(0x0D02, 0x0D03), + interval(0x0D05, 0x0D0C), + interval(0x0D0E, 0x0D10), + interval(0x0D12, 0x0D3A), + interval(0x0D3D, 0x0D44), + interval(0x0D46, 0x0D48), + interval(0x0D4A, 0x0D4E), + interval(0x0D57, 0x0D57), + interval(0x0D60, 0x0D63), + interval(0x0D66, 0x0D75), + interval(0x0D79, 0x0D7F), + ]], +[24, 'Thai', [interval(0x0E01, 0x0E3A), + interval(0x0E3F, 0x0E5B) + ] + ], +[25, 'Lao', [interval(0x0E80, 0x0EFF)]], +[26, 'Georgian (+suppl.)', [ + interval(0x10A0, 0x10C5), + interval(0x10D0, 0x10FC), + interval(0x2D00, 0x2D25) # Supplement + ]], +[27, 'Balinese', [interval(0x1B00, 0x1B7F)]], +# 'Batak', [interval(0x1BC0, 0x1BFF)]], +[28, 'Hangul Jamo', [interval(0x1100, 0x11FF)]], +[29, 'Latin Extended (Additional,C,D)', [ + interval(0x1E00, 0x1EFF), # Additional + interval(0x2C60, 0x2C7F), # C + interval(0xA720, 0xA78E), # D + interval(0xA790, 0xA793), # D + interval(0xA7A0, 0xA7AA), # D + interval(0xA7F8, 0xA7FF) # D + ]], +[30, 'Greek Extended', [interval(0x1F00, 0x1F15), + interval(0x1F18, 0x1F1D), + interval(0x1F20, 0x1F45), + interval(0x1F48, 0x1F4D), + interval(0x1F50, 0x1F57), + interval(0x1F59, 0x1F59), + interval(0x1F5B, 0x1F5B), + interval(0x1F5D, 0x1F5D), + interval(0x1F5F, 0x1F7D), + interval(0x1F80, 0x1FB4), + interval(0x1FB6, 0x1FC4), + interval(0x1FC6, 0x1FD3), + interval(0x1FD6, 0x1FDB), + interval(0x1FDD, 0x1FEF), + interval(0x1FF2, 0x1FF4), + interval(0x1FF6, 0x1FFE) + ]], +[31, 'General Punctuation (+suppl.)', [interval(0x2000, 0x2064), + # interval(0x206A, 0x206F), # deprecated + interval(0x2E00, 0x2E31), # Supplemental + ]], +[32, 'Superscripts and Subscripts', [interval(0x2070, 0x2071), + interval(0x2074, 0x208E), + interval(0x2090, 0x2094) + ] + ], +[33, 'Currency Symbols', [interval(0x20A0, 0x20B9)]], +[34, 'Combining Diacritical Marks for Symbols', [interval(0x20D0, 0x20F0)]], +[35, 'Letterlike Symbols', [interval(0x2100, 0x214F)]], +[36, 'Number Forms', [interval(0x2150, 0x2189)]], +[37, 'Arrows (+suppl.)', [interval(0x2190, 0x21FF), + interval(0x27F0, 0x27FF), # Supplemental Arrows-A + interval(0x2900, 0x297F), # Supplemental Arrows-B + interval(0x2B00, 0x2B4C), # Miscellaneous Symbols and Arrows + interval(0x2B40, 0x2BF9) # " + ]], +[38, 'Mathematical Operators', [ + interval(0x2200, 0x22FF), + interval(0x2A00, 0x2AFF), # Supplemental Mathematical Operators + interval(0x27C0, 0x27CA), # Miscellaneous Mathematical Symbols-A + interval(0x27CC, 0x27CC), + interval(0x27CE, 0x27EF), + interval(0x2980, 0x29FF) # Miscellaneous Mathematical Symbols-B + ] + ], +[39, 'Miscellaneous Technical', [interval(0x2300, 0x23E7)]], +[40, 'Control Pictures', [interval(0x2400, 0x2426)]], +[41, 'Optical Character Recognition', [interval(0x2440, 0x244A)]], +[42, 'Enclosed Alphanumerics', [interval(0x2460, 0x24FF)]], +[43, 'Box Drawing', [interval(0x2500, 0x257F)]], +[44, 'Block Elements', [interval(0x2580, 0x259F)]], +[45, 'Geometric Shapes', [interval(0x25A0, 0x25FF)]], +[46, 'Miscellaneous Symbols', [ + interval(0x2600, 0x26FF), + ] + ], +[47, 'Dingbats', [interval(0x2701, 0x27BF), + ]], +[48, 'CJK Symbols and Punctuation', [interval(0x3000, 0x303F)]], +[49, 'Hiragana', [interval(0x3040, 0x309F)]], +[50, 'Katakana', [interval(0x30A0, 0x30FF)]], +[51, 'Bopomofo', [interval(0x3100, 0x312F)]], +[52, 'Hangul Compatibility Jamo', [interval(0x3130, 0x318F)]], +[53, 'Kanbun', [interval(0x3190, 0x319F)]], # was CJK Miscellaneous +[54, 'Enclosed CJK Letters and Months', [interval(0x3200, 0x32FF)]], +[55, 'CJK Compatibility', [interval(0x3300, 0x33FF)]], +# 'Lisu', [interval(0xA4D0, 0xA4FF)]], +[56, 'Hangul Syallables', [interval(0xAC00, 0xD7A3)]], +[57, 'Non-Plane 0', [interval(0xD800, 0xDFFF)]], +[58, 'Phoenician', [interval(0x10900, 0x1091B), + interval(0x1091F, 0x1091F)], True], +[59, 'CJK Unified Ideographs', [interval(0x4E00, 0x9FFF)]], #FIXME complex +# Meetai Mayek ABC0 ABFF +[60, 'Private Use Area', [interval(0xE000, 0xF8FF)]], +[61, 'CJK Compatibility Ideographs', [interval(0xF900, 0xFAFF)]], +[62, 'Alphabetic Presentation Forms', [ + interval(0xFB00, 0xFB06), + interval(0xFB13, 0xFB17), + interval(0xFB1D, 0xFB36), + interval(0xFB38, 0xFB3C), + interval(0xFB3E, 0xFB3E), + interval(0xFB40, 0xFB41), + interval(0xFB43, 0xFB44), + interval(0xFB46, 0xFB4F), + ]], +[63, 'Arabic Presentation Forms-A', [interval(0xFB50, 0xFBC1), + interval(0xFBD3, 0xFD3F), + interval(0xFD50, 0xFD8F), + interval(0xFD92, 0xFDC7), + interval(0xFDF0, 0xFDFD) + ] + ], +[64, 'Combining Half Marks', [interval(0xFE20, 0xFE26)]], +[65, 'CJK Compatibility Forms', [interval(0xFE10, 0xFE1F), # Vertical forms + interval(0xFE30, 0xFE4F) # Compatability forms + ]], +[66, 'Small Form Variants', [interval(0xFE50, 0xFE52), + interval(0xFE54, 0xFE66), + interval(0xFE68, 0xFE6B) + ] + ], +[67, 'Arabic Presentation Forms-B', [interval(0xFE70, 0xFE74), + interval(0xFE76, 0xFEFC), + interval(0xFEFF, 0xFEFF) + ] + ], +[68, 'Halfwidth and Fullwidth Forms', [interval(0xFF00, 0xFFEF)]], +[69, 'Specials', [interval(0xFFF9, 0xFFFD)]], +[70, 'Tibetan', [interval(0x0F00, 0x0FFF)]], +[71, 'Syriac', [interval(0x0700, 0x070D), + interval(0x070F, 0x074A), + interval(0x074D, 0x074F) + ]], +[72, 'Thaana', [interval(0x0780, 0x07B1)]], +[73, 'Sinhala', [interval(0x0D82, 0x0D83), + interval(0x0D85, 0x0D96), + interval(0x0D9A, 0x0DB1), + interval(0x0DB3, 0x0DBB), + interval(0x0DBD, 0x0DBD), + interval(0x0DC0, 0x0DC6), + interval(0x0DCA, 0x0DCA), + interval(0x0DCF, 0x0DD4), + interval(0x0DD6, 0x0DD6), + interval(0x0DD8, 0x0DDF), + interval(0x0DF2, 0x0DF4)]], +[74, 'Myanmar', [interval(0x1000, 0x109F)]], +[75, 'Ethiopic (+suppl., +ext.)', [ + interval(0x1200, 0x1248), + interval(0x124A, 0x124D), + interval(0x1250, 0x1256), + interval(0x1258, 0x1258), + interval(0x125A, 0x125D), + interval(0x1260, 0x1288), + interval(0x128A, 0x128D), + interval(0x1290, 0x12B0), + interval(0x12B2, 0x12B5), + interval(0x12B8, 0x12BE), + interval(0x12C0, 0x12C0), # page 2 + interval(0x12C2, 0x12C5), + interval(0x12C8, 0x12D6), + interval(0x12D8, 0x1310), + interval(0x1312, 0x1315), + interval(0x1318, 0x135A), + interval(0x135F, 0x137C), + interval(0x1380, 0x139F), # supplement + interval(0x2D80, 0x2DDF) # extended + ] + ], +[76, 'Cherokee', [interval(0x13A0, 0x13F4)]], +[77, 'Unified Canadian Aboriginal Syllabics', + [interval(0x1400, 0x167F), + interval(0x18B0, 0x18F5) # UCAS Extended + ] + ], +[78, 'Ogham', [interval(0x1680, 0x169F)]], +[79, 'Runic', [interval(0x16A0, 0x16F0)]], +[80, 'Khmer (+symbols)', [interval(0x1780, 0x17FF), + interval(0x19E0, 0x19FF) # symbols + ]], +[81, 'Mongolian', [interval(0x1800, 0x18AF)]], #FIXME ranges +[82, 'Braille Patterns', [interval(0x2800, 0x28FF)]], +[83, 'Yi Syllables, Radicals', [interval(0xA000, 0xA0EF), + interval(0xA490, 0xA4CF)] + ], +[84, 'Tagalog Hanunoo Buhid Tagbanwa', + [interval(0x1700, 0x1714), + interval(0x1720, 0x1736), + interval(0x1740, 0x1753), + interval(0x1750, 0x1773) + ] + ], +[85, 'Old Italic', [interval(0x10300, 0x1031E), + interval(0x10320, 0x10323) + ], True], +[86, 'Gothic', [interval(0x10330, 0x1034A)], True], +[87, 'Deseret', [interval(0x10400, 0x1044F)], True], +#'Karoshthi', [interval(0x10A00, 0x10A5F)], True], +#'Kaithi', [interval(0x11080, 0x110C1)], True], +#'Sora Sompeng', [interval(0x110D0, 0x110F0)], True], +#'Chakma', [interval(0x11100, 0x1114F)], True], +#'Sharada', [interval(0x11180, 0x111DF)], True], +#'Takri', [interval(0x11680, 0x116CF)], True], +#'Miao', [interval(0x16F00, 0x16F9F)], True], +[88, 'Byzantine & Western Musical Symbols', [interval(0x1D000, 0x1D0F5), + interval(0x1D100, 0x1D126), + interval(0x1D129, 0x1D1DD) + ], True], +[89, 'Mathematical Alphanumeric Symbols', [interval(0x1D400, 0x1D454), + interval(0x1D456, 0x1D49C), + interval(0x1D49E, 0x1D49F), + interval(0x1D4A2, 0x1D4A2), + interval(0x1D4A5, 0x1D4A6), + interval(0x1D4A9, 0x1D4AC), + interval(0x1D4AE, 0x1D4B9), + interval(0x1D4BB, 0x1D4BB), + interval(0x1D4BD, 0x1D4C3), + interval(0x1D4C5, 0x1D4FF), + interval(0x1D500, 0x1D505), # page 2 + interval(0x1D507, 0x1D50A), + interval(0x1D50D, 0x1D514), + interval(0x1D516, 0x1D51C), + interval(0x1D51E, 0x1D539), + interval(0x1D53B, 0x1D53E), + interval(0x1D540, 0x1D544), + interval(0x1D546, 0x1D546), + interval(0x1D54A, 0x1D550), + interval(0x1D552, 0x1D5FF), + interval(0x1D600, 0x1D6A5), # page 3 + interval(0x1D6A8, 0x1D6FF), + interval(0x1D700, 0x1D7CB), # page 4 + interval(0x1D7CE, 0x1D7FF), + ], True], +[90, 'Private Use (plane 15,16)', [ + interval(0xFF000, 0xFFFFD), # plane 15 + interval(0x100000, 0x10FFFD) # plane 16 + ], True], +[91, 'Variation Selectors (+suppl.)', [interval(0xFE00, 0xFE0F), + interval(0xE0100, 0xE01EF) # supplement + ], True], +[92, 'Tags', [interval(0xE0000, 0xE01EF)], True], +[93, 'Limbu', [interval(0x1900, 0x194F)]], +[94, 'Tai Le', [interval(0x1950, 0x196D), + interval(0x1970, 0x1974) + ]], +[95, 'New Tai Lue', [interval(0x1980, 0x19DF)]], +[96, 'Buginese', [interval(0x1A00, 0x1A1B), + interval(0x1A1E, 0x1A1F)]], +[97, 'Glagolitic', [ interval(0x2C00, 0x2C2E), + interval(0x2C30, 0x2C5E) ]], +[98, 'Tifinagh', [interval(0x2D30, 0x2D67), + interval(0x2D6F, 0x2D6F) + ]], +[99, 'Yijing Hexagram Symbols', [interval(0x4DC0, 0x4DFF)]], +[100, 'Syloti Nagri', [interval(0xA800, 0xA82F)]], +[101, 'Linear B Syllabary etc', [interval(0x10000, 0x1013F)], True], +[102, 'Ancient Greek Numbers', [interval(0x10140, 0x1018F)], True], +[103, 'Ugaritic', [interval(0x10380, 0x1039D), + interval(0x1039F, 0x1039F) + ], True], +[104, 'Old Persian', [interval(0x103A0, 0x103C3), + interval(0x103C8, 0x103D6), + ], True], +[105, 'Shavian', [interval(0x10450, 0x1047F)], True], +[106, 'Osmanya', [interval(0x10480, 0x104AF)], True], +[107, 'Cypriot Syllabary', [interval(0x10800, 0x1083F)], True], +[108, 'Kharoshthi', [interval(0x10A00, 0x10A5F)], True], +[109, 'Tai Xuan Jing Symbols', [interval(0x1D300, 0x1D35F)], True], +[110, 'Cuneiform (+numbers)', [interval(0x12000, 0x1247F)], True], +[111, 'Counting Rod Numerals', [interval(0x1D360, 0x1D37F)], True], +[112, 'Sundanese', [interval(0x1B80, 0x1BAA), + interval(0x1BAE, 0x1BB9) + ]], +[113, 'Lepcha', [interval(0x1C00, 0x1C4F)]], # FIXME +[114, 'Ol Chiki', [interval(0x1C50, 0x1C7F)]], +[115, 'Saurashtra', [interval(0xA880, 0xA8C4), + interval(0xA8CE, 0xA8D9) + ]], +[116, 'Kayah Li', [interval(0xA900, 0xA92F)]], +[117, 'Rejang', [interval(0xA930, 0xA953), + interval(0xA95F, 0xA95F) + ]], +[118, 'Cham', [interval(0xAA00, 0xAA5F)]], #FIXME more complex +[119, 'Ancient Symbols', [interval(0x10190, 0x101CF)], True], +[120, 'Phaistos Disc', [interval(0x101D0, 0x101FF)], True], +[121, 'Carian, Lycian, Lydian', [interval(0x102A0, 0x102D0), #Carian + interval(0x10280, 0x1029C), # Lycian + interval(0x10920, 0x10939), # Lydian + interval(0x1093F, 0x1093F) + ], True], +[122, 'Domino and Mahjong Tiles', [ + interval(0x1F000, 0x1F02B), # Mahjong + interval(0x1F030, 0x1F093) # Domino + ], True], +#[123-127, 'Reserved for process-internal usage', []] +] + + +def codepointIsInSomeRange( encoding ): + for ulr in ulUnicodeRange: + ranges = ulr[2] + for r in ranges: + if r.contains( encoding ): + return True + return False + diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/__init__.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/__init__.py diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/kernclasses.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/kernclasses.py new file mode 100755 index 00000000000..4eccc4c9d7f --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/kernclasses.py @@ -0,0 +1,169 @@ +#!/usr/bin/fontforge -script + +__author__ = "Stevan White <stevan.white@googlemail.com>" + +import fontforge +import sys +from OpenType.UnicodeRanges import * + +def get_kern_subtables( font ): + try: + tables = [] + for lookup in font.gpos_lookups: + if font.getLookupInfo( lookup )[0] == 'gpos_pair': + sts = font.getLookupSubtables( lookup ) + for st in sts: + if font.isKerningClass( st ): + tables.append( st ) + return tables + except EnvironmentError, ( e ): + print >> sys.stderr, 'EnvironmentError ' + str( e ) + except TypeError, ( t ): + print >> sys.stderr, 'TypeError ' + str( t ) + return None +preamble = """ +<html> +<head> +<style type="text/css"> + .nonexistent { background-color: red; } + td { text-align: right; font-family: inherit; } + .I td { font-style: italic; } + .B td { font-weight: bold; } + .BI td { font-weight: bold; font-style: italic; } + td { line-height: 1; } + .classes td { text-align: left; vertical-align: top; } + td span { font-weight: normal; font-style: normal; font-size: smaller; color: lime; } + td span.pos { color: magenta; } + td.zero { color: gray; } +</style> +</head> +<body> +""" +postamble=""" +</body> +</html> +""" + +def print_kerns( fontPath ): + font = fontforge.open( fontPath ) + print '<h2>Kerning classes in ' + font.fontname + '</h2>' + weight = '' + if font.os2_weight > 500: + weight = 'B' + style = '' + if font.italicangle < 0.0: + style = 'I' + print '<div style="font-family: ' + font.familyname + '" ' \ + + 'class="' + weight + style + '">' + subtables = get_kern_subtables( font ) + for st in subtables: + print '<h3>Subtable ' + st + '</h3>' + printKernsOfSubtable( font, st ) + print '</div>' + sys.stdout.flush() + +def printKernsOfSubtable( font, subtable ): + kclass = font.getKerningClass( subtable ) + n = 0 + leftclasses = kclass[0] + rightclasses = kclass[1] + kerns = kclass[2] + nr = len( rightclasses ) + print '<table class="classes"><tr>' + print '<th>left classes: </th>' + print '<th>right classes: </th>' + print '<tr><td>' + for lc in leftclasses: + if lc: + for c in lc: + printentity( font, c ) + print "<br />" + print "</td>" + print "<td>" + for rc in rightclasses: + if rc: + for c in rc: + printentity( font, c ) + print "<br />" + print "</td>" + print "</tr>" + print "</table>" + print "<table>" + print "<tr>" + print "<th></th>" + for rc in rightclasses: + if rc: + sys.stdout.write( "<th>" ) + printentity( font, rc[0] ) + sys.stdout.write( "</th>" ) + print "</tr>" + for lc in leftclasses: + m = 0 + if lc: + print "<tr>" + sys.stdout.write( "<th>" ) + printentity( font, lc[0] ) + sys.stdout.write( "</th>" ) + for rc in rightclasses: + kern = kerns[ n * nr + m ] + if rc: + ccolor = '' + ncolor = '' + if kern > 0: + ncolor = ' class="pos"' + if kern == 0: + ccolor = ' class="zero"' + sys.stdout.write( '<td' + ccolor + '><span' + ncolor + '>' ) + if kern == 0: + sys.stdout.write( ' ' ) + else: + sys.stdout.write( str( kern ) ) + sys.stdout.write( '</span><br />' ) + printpair( font, lc[0], rc[0] ) + sys.stdout.write( '</td>' ) + m += 1 + print "</tr>" + n += 1 + print "</table>" + +def printentity( font, a ): + s = font.findEncodingSlot( a ) + v = formatted_hex_value( s ) + if s == -1: + v = '<span class="nonexistent"> </span>' + print >> sys.stderr, font.fullname, 'Missing glyph: ' + a + elif not codepointIsInSomeRange( s ): + print >> sys.stderr, font.fullname, 'Non-unicode: ' + v + sys.stdout.write( v ) + +def printpair( font, p, q ): + printentity( font, p ) + printentity( font, q ) + sys.stdout.write( ' ' ) + +def formatted_hex_value( n ): + return '%s%0.4x%s' %( "&#x", n, ";" ) + +def printlist( lst ): + s = '' + delim = '' + for m in lst: + s += delim + m + delim = ' ' + print s + +print preamble +#print_kerns( '/home/swhite/font_stuff/urwsr-ttf/URWPalladioL-Roman-test.sfd' ) +print_kerns( '../../sfd/FreeSerif.sfd' ) +print_kerns( '../../sfd/FreeSerifItalic.sfd' ) +print_kerns( '../../sfd/FreeSerifBold.sfd' ) +print_kerns( '../../sfd/FreeSerifBoldItalic.sfd' ) +print_kerns( '../../sfd/FreeSans.sfd' ) +print_kerns( '../../sfd/FreeSansOblique.sfd' ) +print_kerns( '../../sfd/FreeSansBold.sfd' ) +print_kerns( '../../sfd/FreeSansBoldOblique.sfd' ) +print_kerns( '../../sfd/FreeMono.sfd' ) +print_kerns( '../../sfd/FreeMonoOblique.sfd' ) +print_kerns( '../../sfd/FreeMonoBold.sfd' ) +print_kerns( '../../sfd/FreeMonoBoldOblique.sfd' ) +print postamble diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/ligatureLookups.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/ligatureLookups.py new file mode 100755 index 00000000000..4e4678b869d --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/ligatureLookups.py @@ -0,0 +1,276 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2012 Stevan White" +__date__ = "$Date: 2012-03-28 21:24:32 +0200 (Wed, 28 Mar 2012) $" +__version__ = "$Revision: 2184 $" + +__doc__ = """ +ligaturelookups + + fontforge -script ligature.ookups font_file_path... + +Output is HTML showing all the ligature lookups in the font. + +To display the ligature, the HTML entities for the component Unicode charaters +are printed together. Then to show the components sparately they, are printed +with intervening spaces. + +Most web browsers do not display any character unless it is Unicode. +It may replace a sequence of Unicode characters by a ligature, however. + +Some of the ligatures in Indic ranges expand to (are made of) non-Unicode +characters, which themselves are ligatures. Ultimately, they all should +resolve to Unicode characters, although there isn't any real limit to how many +steps it may take. + +The resulting string of Unicode characters can then be put into HTML, which +should be properly rendered by a browser. + +""" + +__usage = """Usage: + fontforge -script ligaturelookups.py font-path-1 font-path-2 ... +""" + +import fontforge +from sys import stdout, stderr, argv, exit + +def get_ligature_lookups( font ): + try: + tables = [] + for lookup in font.gsub_lookups: + if font.getLookupInfo( lookup )[0] == 'gsub_ligature': + sts = font.getLookupSubtables( lookup ) + for st in sts: + tables.append( st ) + return tables + except EnvironmentError, ( e ): + print >> stderr, 'EnvironmentError ' + str( e ) + except TypeError, ( t ): + print >> stderr, 'TypeError ' + str( t ) + return None + +_preamble= """<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>Ligatures</title> +<style type="text/css"> + .nonchar { background-color: red; } + table, tr, td { font-family: inherit; } + table, tr, td { font-style: inherit; } + table, tr, td { font-weight: inherit; } + td { text-align: right; } + td { line-height: 1; } + .ligatures td { width: 2em; } + .ligatures th { text-align: left; font-family: freemono, monospace; } +</style> +</head> +<body> +""" + +_postamble=""" +</body> +</html> +""" + +_style_div_html = """<div style="font-family: '%s';%s%s">""" +_lig_header_html = '<h2>Ligatures in %s</h2>' + +def print_ligatures( fontPath ): + subtables = [] + font = fontforge.open( fontPath ) + + style = '' + if font.italicangle != 0.0: + style = "font-style: italic; " + weight = '' + if font.weight == 'Bold': + weight = "font-weight: bold; " + + print _style_div_html % ( font.familyname, style, weight ) + print _lig_header_html % ( font.fontname ) + + subtable_names = get_ligature_lookups( font ) + for subtable_name in subtable_names: + subtables.append( makeLigatureSubtable( font, subtable_name ) ) + for subtable in subtables: + out = htmlListOfLigSubtable( font, subtable, subtables ) + stdout.writelines( out ) + stdout.flush() + print '</div>' + +class Ligature: + def __init__( self, glyph ): + self.glyph = glyph + self.parts = [] + def setParts( self, parts ): + self.parts = parts + def append( self, part ): + self.parts.append( part ) + +class LigatureSubtable: + def __init__( self, tablename, name ): + self.tablename = tablename + self.name = name + self.ligatures = [] + def append( self, ligature ): + self.ligatures.append( ligature ) + def findLigatureGlyph( self, g ): + for p in self.ligatures: + if g == p.glyph.encoding: + return p + return False + +def findLigatureGlyph( g, subtables ): + for s in subtables: + lig = s.findLigatureGlyph( g ) + if lig: + return lig + return False + +def makeLigatureSubtable( font, subtable_name ): + """ + From FontForge Python scripting doc + + glyph.getPosSub( lookup-subtable-name ) + + Returns any positioning/substitution data attached to the glyph + controlled by the lookup-subtable. If the name is "*" then returns + data from all subtables. + + The data are returned as a tuple of tuples. + The first element of the subtuples is the name of the lookup-subtable. + The second element will be one of the strings: + "Position", "Pair", "Substitution", "AltSubs", "MultSubs","Ligature". + ... + Ligature data will be followed by several strings each containing + the name of a ligature component glyph. + + + BUT... + this info is attached to glyphs... + which glyph is it attached to? ones in the range, or the ligatures? + how to get the glyphs in the range referred to by the lookup?? + + Evidently, the library has stuff arranged internally to do the search + efficiently in the backwards direction, from glyph to subtable. + + font.getLookupInfo gets a feature-script-lang-tuple, which in principle + should be able to resolve a glyph list... but can't see how to use it... + + """ + subtable = LigatureSubtable( "", subtable_name ) + for g in font.glyphs(): + ligs = g.getPosSub( subtable_name ) + if ligs: + ligature = Ligature( g ) + for lr in ligs: + if len( lr ) < 3 or lr[1] != 'Ligature': + print >> stderr, font.fullname, '- non-ligature: ', g.glyphname + break + i = 2 + while i < len( lr ): + ligature.append( lr[i] ) + i += 1 + + subtable.append( ligature ) + return subtable + +_table_head_html = '''<table class="ligatures" rules="groups"> +<caption>%s</caption> +<colgroup> +<col style="width: 50ex" /> +</colgroup> +<colgroup> +<col style="width: 4ex" /> +</colgroup> +''' + +def htmlListOfLigSubtable( font, subtable, subtables ): + out = [ _table_head_html % ( subtable.name ) ] + for lig in subtable.ligatures: + out += [ '<tr>\n<th>' ] + + # FIXME this will fail for high Unicode + if lig.glyph.unicode > -1: + s = font.findEncodingSlot( lig.glyph.unicode ) + out += [ '%s%0.4x%s' %( "U+", s, " " ) ] + else: + out += [ '%s%0.4x%s' %( "#", lig.glyph.encoding, " " ) ] + out += [ lig.glyph.glyphname ] + out += [ '</th>' ] + + out += [ '<td>' ] + for p in lig.parts: + out += [ nestedEntity( font, subtable, p, subtables ) ] + out += [ '</td>' ] + + for p in lig.parts: + out += [ '<td>' ] + out += [ nestedEntity( font, subtable, p, subtables ) ] + out += [ '</td>' ] + out += [ '</tr>\n' ] + out += [ "</table>" ] + return out + +def nestedEntity( font, subtable, a, subtables ): + """ + Expands each ligature, then checks each component to see if it's + Unicode. + If not, it looks through all the ligature tables to expand it, + and so on recursively until only Unicode characters remain. + """ + s = font.findEncodingSlot( a ) + if s >= 0xe000 and s <= 0xf8ff: # Unicode only + lig = findLigatureGlyph( s, subtables ) + if lig: + #print >> stderr, 'Nested glyph found: ' + a + for p in lig.parts: + return nestedEntity( font, subtable, p, subtables ) + else: + print >> stderr, font.fullname, '- No nested glyph: ', a + return '<span class="nonchar"> </span>' + else: + return entityHTML( font, a ) + +def entityHTML( font, a ): + s = font.findEncodingSlot( a ) + if s == -1: + print >> stderr, font.fullname, '- Missing glyph: ', a + return '<span class="nonchar"> </span>' + else: + return formatted_hex_value( s ) + +def formatted_hex_value( n ): + return '%s%0.4x%s' %( "&#x", n, ";" ) + +# -------------------------------------------------------------------------- +args = argv[1:] + +if len( args ) < 1 or len( args[0].strip() ) == 0: + print >> stderr, __usage + exit( 0 ) + +print _preamble +for font_name in args: + print_ligatures( font_name ) +print _postamble + diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/private_use.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/private_use.py new file mode 100755 index 00000000000..1874af6dead --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/private_use.py @@ -0,0 +1,92 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh + +__doc__ = """ +private_use.py + + fontforge -script private_use.py font_file_path... + +Output is HTML showing all the font's glyphs that are in Unicode "Private Use" +areas. +Also reports whether glyphs have references, or if they are ligatures. +""" +__author__ = "Stevan White <stevan.white@googlemail.com>" +__date__ = "Dec 2009" +__version__ = "$Revision: 1.2 $" + +import fontforge +import sys + + +preamble = """<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>Private Use area</title> +<style type="text/css"> + .nonchar { background-color: red; } + table, tr, td { font-family: inherit; } + table, tr, td { font-style: inherit; } + table, tr, td { font-weight: inherit; } + td { text-align: right; } + td { line-height: 1; } + .ligatures td { width: 2em; } + .ligatures th { text-align: left; font-family: freemono, monospace; } +</style> +</head> +<body> +""" + +def makePreamble(): + return preamble + +postamble=""" +</body> +</html> +""" + +def print_private( fontPath ): + font = fontforge.open( fontPath ) + + print '<div style="font-family: \'' + font.familyname + '\'; ' \ + '\">' + print '<h2>Private Use Area in ' + font.fontname + '</h2>' + + font.selection.select(("ranges",None),0xe000,0xf8ff) + print '<table>' + for g in font.selection.byGlyphs: + print '<tr><td>' + print '%s%0.4x%s' %( "0x", g.encoding, "" ) + print '</td><td>' + print '' + g.glyphname + print '</td><td>' + if g.getPosSub( '*' ): + print "is ligature" + if g.references: + print "has references" + print '</td><td>' + print '</td></tr>' + + print '</table>' + print '</div>' + sys.stdout.flush() + +def printentity( font, s ): + if s == -1: + print >> sys.stderr, 'Missing glyph: ' + a + sys.stdout.write( '<span class="nonchar"> </span>' ) + else: + sys.stdout.write( formatted_hex_value( s ) ) + +def formatted_hex_value( n ): + return '%s%0.4x%s' %( "&#x", n, ";" ) + +args = sys.argv[1:] + +if len( args ) < 1 or len( args[0].strip() ) == 0: + sys.exit( 0 ) + +print makePreamble() +for font_name in args: + print_private( font_name ) +print postamble diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/range_report.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/range_report.py new file mode 100755 index 00000000000..0d53895d40e --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/range_report.py @@ -0,0 +1,323 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh + +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2011, Stevan White" +__date__ = "$Date: 2010-09-14 13:02:02 $" +__version__ = "$Revision: 1.9 $" +__doc__ = """ +Makes an HTML table showing how many glyphs are in each range in each font, +and tries to collate that with the OS/2 character range support bit flags. + +Runs under FontForge. + fontforge -script ranges.py + +This is a hack--in no way authoritative. +Lots of guesswork; much is wrong; the coding is gross. + +See +http://www.w3.org/TR/REC-CSS2/notes.html +http://shlimazl.nm.ru/eng/fonts_ttf.htm +http://www.evertype.com/standards/iso10646/ucs-collections.html + +The intervals are partly just the assigned interval, but often I have +listed the ranges that have characters assigned to them. +""" + +import fontforge +from sys import stderr +from time import tzset, strftime +from OpenType.UnicodeRanges import * + +def total_intervals( intervals ): + num = 0 + for i in intervals: + num += i.len() + return num + +def count_glyphs_in_intervals( font, intervals ): + num = 0 + for r in intervals: + if r.begin < len( font ) and r.end < len( font ): + # select() will throw up if try to select value + # beyond the range of the encoding + try: + font.selection.select( ( 'ranges', None ), + r.begin, r.end ) + g = font.selection.byGlyphs + for e in g: + num += 1 + except ValueError: + print >> stderr, "interval " + str( r ) \ + + " not representable in " + font.fontname + exit( 1 ) + return num + +special_TT_points = ( 0x00, 0x01, 0x0D ) + +def codepointIsSpecialTT( encoding ): + """ See Recommendations for OpenType Fonts + http://www.microsoft.com/typography/otspec/recom.htm """ + return encoding in special_TT_points + +class SupportInfo: + def __init__( self, os2bit, supports, total ): + self.os2bit = os2bit + self.supports = supports + self.total = total + +class FontSupport: + """ A record of support for all OS/2 ranges within a single font. + Uses a dictionary internally, to avoid loss of the index info. + """ + def __init__( self, fontPath, short ): + font = fontforge.open( fontPath ) + self.name = font.fontname + self.short = short + self.myInfos = {} + self.totalGlyphs = 0 + self.fontTotalGlyphs = 0 + self.privateUseGlyphs = 0 + + r = font.os2_unicoderanges + + # print >> stderr, font.fontname, hex( r[0] ), hex( r[1] ),hex( r[2] ),hex( r[3] ); + + nRanges = len( ulUnicodeRange ) + + for index in range( 0, nRanges ): + byte = index / 32 + bit = index % 32 + + self.collectRangeInfo( font, r[byte], bit, index ) + + for g in font.glyphs(): + self.fontTotalGlyphs += 1 + cp = g.encoding + if ( not codepointIsInSomeRange( cp ) + and not codepointIsSpecialTT( cp ) ): + print >> stderr, font.fontname, \ + "no range for", hex( cp ) + + """ '''Would like to check that special TT slots are + present, but don't know how...''' + for cp in special_TT_points: + font.selection.all() + if not cp in font.selection.byGlyphs: + print >> stderr, font.fontname, \ + "special TT glyph missing", hex( cp ) + """ + + def collectRangeInfo( self, font, os2supportbyte, bit, index ): + supports = ( os2supportbyte & (1 << bit) ) != 0 + rangeName = ulUnicodeRange[index][1] + intervals = ulUnicodeRange[index][2] + nglyphs = count_glyphs_in_intervals( font, intervals ) + self.setRangeSupport( index, supports, nglyphs ) + self.totalGlyphs += nglyphs + if index == 60 or index == 90: + self.privateUseGlyphs += nglyphs + + def setRangeSupport( self, idx, supports, total ): + if self.myInfos.has_key( idx ): + print >> stderr, "OS/2 index ", idx, " duplicated" + exit( 1 ) + self.myInfos[idx] = SupportInfo( idx, supports, total ) + + def getInfo( self, idx ): + if not self.myInfos.has_key( idx ): + print >> stderr, "OS/2 index ", idx, " not found" + exit( 1 ) + return self.myInfos[ idx ] + +table_head = ''' +<table class="fontrangereport" cellspacing="0" cellpadding="0" frame="box" rules="all"> +<caption> +OS/2 character ranges vs. font faces +</caption> +<colgroup> +<col /><col /><col /> +</colgroup> +<colgroup> +<col class="roman"/><col /><col /><col /> +<col /><col /><col /><col /> +</colgroup> +<colgroup> +<col class="roman"/><col /><col /><col /> +<col /><col /><col /><col /> +</colgroup> +<colgroup> +<col class="roman"/><col /><col /><col /> +<col /><col /><col /><col /> +</colgroup> +<thead> +<tr><th>OS/2 character range</th> +<th>range<br />total</th> +<td></td> +%s +</tr> +</thead>''' + +def print_font_range_table( fontSupportList ): + headings = '' + for fsl in fontSupportList: + headings += '<th colspan="2">' + fsl.short + '</th>' + print table_head % ( headings ) + + for r in ulUnicodeRange: + idx = r[0] + range_name = r[1] + intervals = r[2] + + rowclass = ' class="low"' + if len( ulUnicodeRange[idx] ) > 3 and ulUnicodeRange[ idx ][3]: + rowclass = ' class="high"' + if idx == 60 or idx == 90: + rowclass = ' class="private"' + + print '<tr%s><td>%s</td>' % ( rowclass, range_name ) + print '<td class="num">%i</td>' % ( + total_intervals( intervals ) ) + print '<td></td>' + for fsl in fontSupportList: + supportInfo = fsl.getInfo( idx ) + supportString = '' + if supportInfo.supports: + supportString = '•' + totalStr = ' ' + if supportInfo.total: + totalStr = str( supportInfo.total ) + + print '<td class="num">%s</td><td>%s</td>' % ( + totalStr, supportString ) + + print '</tr>' + print '<tr><th colspan="3">total in Unicode ranges</th>' + for fsl in fontSupportList: + print '<td class="num" colspan="2">%i </td>' % ( + fsl.totalGlyphs ) + print '</tr>' + print '<tr><th colspan="3">total in font</th>' + for fsl in fontSupportList: + print '<td class="num" colspan="2">%i </td>' % ( + fsl.fontTotalGlyphs ) + print '</tr>' + print '<tr><th colspan="3">total in Private Use</th>' + for fsl in fontSupportList: + print '<td class="num" colspan="2">%i </td>' % ( + fsl.privateUseGlyphs ) + print '</tr>' + # Would also like to total glyphs in ranges for each font, + # and also print total glyphs in each font. + print '</table>' + +table_introduction = """ +For historical reasons, TrueType classifies Unicode ranges according to +an extension of the old OS/2 character ranges. This table shows how many +characters FontForge finds in each of the ranges for each face in the family. +""" + +table_explanation = """ +<p> +Ranges for which (FontForge reports that) the font's OS/2 support +bit is set are marked with a bullet. +</p> +<p> +For many ranges, I took the liberty of reducing the set of characters +considered to those listed for the range in the current Unicode charts. +The number of characters supported can thus be less than the width of the range. +</p> +<p> +The totals include glyphs in the Private Use areas (where there +are many ligatures, alternative forms, and glyph components). The glyphs +in these areas do not correspond to Unicode characters. +</p> +<p> +Three control characters are inserted at 0x00, 0x01 and 0x0d to satisfy the +TrueType recommendations. These are counted under Basic Latin, but other +control characters there are not counted. +</p> +<p> +Note that there is a discrepancy in the Greek Symbols, Hebrew Extended and +Arabic Extended ranges, between what FontForge reports here and in its Font +Info window under OS/2 Character Ranges. I don't know why, but these ranges +are also not well defined in the TrueType standard. +</p> +<p> +Note the two characters from Devanagri. These are the danda and double-danda +used by other Indic scripts. +</p> +<p> +The ranges <span style="color: #555">beyond Unicode point 0xFFFF</span>, are +shaded. </p> +""" + +html_heading = ''' +<html> +<head> +<title> +Gnu FreeFont character range support +</title> +<style type="text/css"> + tr.high { color: #555 } + tr.private { background-color: silver; } + td.num { text-align: right } + td { padding-right: 0.25ex } + th { padding: 0.25ex } + .roman { border-left: medium black solid; } + caption { font-size: larger; font-weight: bold; } +</style> +</head> +''' + +def print_font_range_report( fontSupportList ): + print html_heading + + print '<body>' + print '<h1>' + print 'Gnu FreeFont support for OpenType OS/2 character ranges' + print '</h1>' + print '<p>' + print table_introduction + print '</p>' + print_font_range_table( fontSupportList ) + print '<p>' + print table_explanation + tzset() + print 'Generated by <code>range_report.py</code> on %s.' % ( + strftime('%X %x %Z') ) + print '</p>' + print '</body>' + + print '</html>' + +supportList = [] +supportList.append( FontSupport( '../../sfd/FreeSerif.sfd', 'Srf' ) ) +supportList.append( FontSupport( '../../sfd/FreeSerifItalic.sfd', 'Srf I' ) ) +supportList.append( FontSupport( '../../sfd/FreeSerifBold.sfd', 'Srf B' ) ) +supportList.append( FontSupport( '../../sfd/FreeSerifBoldItalic.sfd', 'Srf BI' ) ) +supportList.append( FontSupport( '../../sfd/FreeSans.sfd', 'Sans' ) ) +supportList.append( FontSupport( '../../sfd/FreeSansOblique.sfd', 'Sans O' ) ) +supportList.append( FontSupport( '../../sfd/FreeSansBold.sfd', 'Sans B' ) ) +supportList.append( FontSupport( '../../sfd/FreeSansBoldOblique.sfd', 'Sans BO' ) ) +supportList.append( FontSupport( '../../sfd/FreeMono.sfd', 'Mono' ) ) +supportList.append( FontSupport( '../../sfd/FreeMonoOblique.sfd', 'Mono O' ) ) +supportList.append( FontSupport( '../../sfd/FreeMonoBold.sfd', 'Mono B' ) ) +supportList.append( FontSupport( '../../sfd/FreeMonoBoldOblique.sfd', 'Mono BO' ) ) + +print_font_range_report( supportList ) diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py new file mode 100755 index 00000000000..1ab97411aa0 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/script-menu/nameBySlot.py @@ -0,0 +1,62 @@ +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, Stevan White" +__date__ = "$Date: 2010-09-14 13:02:02 $" +__version__ = "$Revision: 1.3 $" + +__doc__ = """ +For use from the FontForge Script Menu. +Add it to the Scripts Menu using the Preferences dialog. + +Sets the name and unicode values of the selected range of slots to the +encoding, that is + Name: uniXXXX + Unocode: u+XXXX +where XXXX is the n-digit hex value for the slot encoding. + +Careful! it changes the value whether it was previously set or not. + +Detailed info is printed to standard output (see by launching FontForge +from a console). +""" +import fontforge + +def explain_error_and_quit( e ): + if e: + print 'Error: ', e + exit( 1 ) + +try: + glyphs = fontforge.activeFont().selection.byGlyphs + for g in glyphs: + if g.encoding <= 0xFFFF: + newname = 'uni%0.4x' %( g.encoding ) + elif g.encoding <= 0xFFFFF: + newname = 'uni%0.5x' %( g.encoding ) + elif g.encoding <= 0xFFFFFF: + newname = 'uni%0.6x' %( g.encoding ) + elif g.encoding <= 0xFFFFFFF: + newname = 'uni%0.7x' %( g.encoding ) + elif g.encoding <= 0xFFFFFFFF: + newname = 'uni%0.8x' %( g.encoding ) + print "naming " + str( g.glyphname ) + ' as ' + newname + g.glyphname = newname + g.unicode = g.encoding +except ValueError, e: + explain_error_and_quit( e ) + diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py new file mode 100644 index 00000000000..b506417d99b --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/script-menu/unnameBySlot.py @@ -0,0 +1,54 @@ +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, Stevan White" +__date__ = "$Date: 2010-09-14 13:02:02 $" +__version__ = "$Revision: 1.3 $" + +__doc__ = """ +For use from the FontForge Script Menu. +Add it to the Scripts Menu using the Preferences dialog. + +Sets the name and unicode values of the selected range of slots to +the encoding, that is + Name: uniXXXX + Unocode: u+XXXX +where XXXX is the 4-digit hex value for the slot encoding. + +Careful! it changes the falue whether it was previously set or not. + +Detailed info is printed to standard output (see by launching FontForge +from a console). +""" + +import fontforge + +def explain_error_and_quit( e ): + if e: + print 'Error: ', e + exit( 1 ) + +try: + glyphs = fontforge.activeFont().selection.byGlyphs + for g in glyphs: + newname = 'NameMe.%s' %( str( g.encoding ) ) + print "naming " + str( g.glyphname ) + ' as ' + newname + g.glyphname = newname + g.unicode = -1 +except ValueError, e: + explain_error_and_quit( e ) + diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/CheckConformance.pl b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/CheckConformance.pl new file mode 100755 index 00000000000..42bb54d2db7 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/CheckConformance.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +# $Id: CheckConformance.pl,v 1.1 2009-12-27 16:25:15 Stevan_White Exp $ +# +# Check conformance of font file with given character sets. + +# Get the characters in the font file +# Regexp for ENCODING line matches BDF and PfaEdit's SFD formats +if ($#ARGV >= 0) { + open(FONTFILE, $ARGV[0]); +} else { + open(FONTFILE, "<stdin"); +} +while (<FONTFILE>) { + if (/^E[Nn][Cc][Oo][Dd][Ii][Nn][Gg]:? ([\d]+)/) { + $char{$1} = 1; + } +} +close (FONTFILE); + +$tbldir = "./"; +@tables = ("MES-1.lst", "MES-2.lst", "MES-3B.lst"); + +foreach $table (0 .. $#tables) { + + $tblfile = $tbldir.$tables[$table]; + + # Read in the table with the named entities + open(TABLE, "<$tblfile") || die "Cannot find $tblfile\n"; + delete @table{keys %table}; + while (<TABLE>) { + if (/^\#.*/) { + next; + } else { + chomp; + ($code,$name) = split(/:/, $_, 9999); + $table{hex($code)} = $name; + } + } + close(TABLE); + + # Get the list of missing chars, sorted numerically by their code + foreach $key (sort {$a <=> $b} keys %table) { + if ($char{$key} != 1) { + push @missing, $key; + } + } + + # Print the list of missing chars, code and ISO 10646 name + if ($#missing >= 0) { + print "\n$#missing characters are found missing for conformance with "; + print "$tblfile:\n"; + for ($i = 0; $i <= $#missing; $i++) { + printf("%04X %s\n", $missing[$i], $table{$missing[$i]}); + } + } else { + print "\nCongratulations!\n"; + print "No characters are found missing for conformance with "; + print "$tblfile.\n"; + } +} diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-1.lst b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-1.lst new file mode 100644 index 00000000000..51c119a9471 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-1.lst @@ -0,0 +1,335 @@ +0020:SPACE +0021:EXCLAMATION MARK +0022:QUOTATION MARK +0023:NUMBER SIGN +0024:DOLLAR SIGN +0025:PERCENT SIGN +0026:AMPERSAND +0027:APOSTROPHE +0028:LEFT PARENTHESIS +0029:RIGHT PARENTHESIS +002A:ASTERISK +002B:PLUS SIGN +002C:COMMA +002D:HYPHEN-MINUS +002E:FULL STOP +002F:SOLIDUS +0030:DIGIT ZERO +0031:DIGIT ONE +0032:DIGIT TWO +0033:DIGIT THREE +0034:DIGIT FOUR +0035:DIGIT FIVE +0036:DIGIT SIX +0037:DIGIT SEVEN +0038:DIGIT EIGHT +0039:DIGIT NINE +003A:COLON +003B:SEMICOLON +003C:LESS-THAN SIGN +003D:EQUALS SIGN +003E:GREATER-THAN SIGN +003F:QUESTION MARK +0040:COMMERCIAL AT +0041:LATIN CAPITAL LETTER A +0042:LATIN CAPITAL LETTER B +0043:LATIN CAPITAL LETTER C +0044:LATIN CAPITAL LETTER D +0045:LATIN CAPITAL LETTER E +0046:LATIN CAPITAL LETTER F +0047:LATIN CAPITAL LETTER G +0048:LATIN CAPITAL LETTER H +0049:LATIN CAPITAL LETTER I +004A:LATIN CAPITAL LETTER J +004B:LATIN CAPITAL LETTER K +004C:LATIN CAPITAL LETTER L +004D:LATIN CAPITAL LETTER M +004E:LATIN CAPITAL LETTER N +004F:LATIN CAPITAL LETTER O +0050:LATIN CAPITAL LETTER P +0051:LATIN CAPITAL LETTER Q +0052:LATIN CAPITAL LETTER R +0053:LATIN CAPITAL LETTER S +0054:LATIN CAPITAL LETTER T +0055:LATIN CAPITAL LETTER U +0056:LATIN CAPITAL LETTER V +0057:LATIN CAPITAL LETTER W +0058:LATIN CAPITAL LETTER X +0059:LATIN CAPITAL LETTER Y +005A:LATIN CAPITAL LETTER Z +005B:LEFT SQUARE BRACKET +005C:REVERSE SOLIDUS +005D:RIGHT SQUARE BRACKET +005E:CIRCUMFLEX ACCENT +005F:LOW LINE +0060:GRAVE ACCENT +0061:LATIN SMALL LETTER A +0062:LATIN SMALL LETTER B +0063:LATIN SMALL LETTER C +0064:LATIN SMALL LETTER D +0065:LATIN SMALL LETTER E +0066:LATIN SMALL LETTER F +0067:LATIN SMALL LETTER G +0068:LATIN SMALL LETTER H +0069:LATIN SMALL LETTER I +006A:LATIN SMALL LETTER J +006B:LATIN SMALL LETTER K +006C:LATIN SMALL LETTER L +006D:LATIN SMALL LETTER M +006E:LATIN SMALL LETTER N +006F:LATIN SMALL LETTER O +0070:LATIN SMALL LETTER P +0071:LATIN SMALL LETTER Q +0072:LATIN SMALL LETTER R +0073:LATIN SMALL LETTER S +0074:LATIN SMALL LETTER T +0075:LATIN SMALL LETTER U +0076:LATIN SMALL LETTER V +0077:LATIN SMALL LETTER W +0078:LATIN SMALL LETTER X +0079:LATIN SMALL LETTER Y +007A:LATIN SMALL LETTER Z +007B:LEFT CURLY BRACKET +007C:VERTICAL LINE +007D:RIGHT CURLY BRACKET +007E:TILDE +00A0:NO-BREAK SPACE +00A1:INVERTED EXCLAMATION MARK +00A2:CENT SIGN +00A3:POUND SIGN +00A4:CURRENCY SIGN +00A5:YEN SIGN +00A6:BROKEN BAR +00A7:SECTION SIGN +00A8:DIAERESIS +00A9:COPYRIGHT SIGN +00AA:FEMININE ORDINAL INDICATOR +00AB:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC:NOT SIGN +00AD:SOFT HYPHEN +00AE:REGISTERED SIGN +00AF:MACRON +00B0:DEGREE SIGN +00B1:PLUS-MINUS SIGN +00B2:SUPERSCRIPT TWO +00B3:SUPERSCRIPT THREE +00B4:ACUTE ACCENT +00B5:MICRO SIGN +00B6:PILCROW SIGN +00B7:MIDDLE DOT +00B8:CEDILLA +00B9:SUPERSCRIPT ONE +00BA:MASCULINE ORDINAL INDICATOR +00BB:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC:VULGAR FRACTION ONE QUARTER +00BD:VULGAR FRACTION ONE HALF +00BE:VULGAR FRACTION THREE QUARTERS +00BF:INVERTED QUESTION MARK +00C0:LATIN CAPITAL LETTER A WITH GRAVE +00C1:LATIN CAPITAL LETTER A WITH ACUTE +00C2:LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3:LATIN CAPITAL LETTER A WITH TILDE +00C4:LATIN CAPITAL LETTER A WITH DIAERESIS +00C5:LATIN CAPITAL LETTER A WITH RING ABOVE +00C6:LATIN CAPITAL LETTER AE +00C7:LATIN CAPITAL LETTER C WITH CEDILLA +00C8:LATIN CAPITAL LETTER E WITH GRAVE +00C9:LATIN CAPITAL LETTER E WITH ACUTE +00CA:LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB:LATIN CAPITAL LETTER E WITH DIAERESIS +00CC:LATIN CAPITAL LETTER I WITH GRAVE +00CD:LATIN CAPITAL LETTER I WITH ACUTE +00CE:LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF:LATIN CAPITAL LETTER I WITH DIAERESIS +00D0:LATIN CAPITAL LETTER ETH +00D1:LATIN CAPITAL LETTER N WITH TILDE +00D2:LATIN CAPITAL LETTER O WITH GRAVE +00D3:LATIN CAPITAL LETTER O WITH ACUTE +00D4:LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5:LATIN CAPITAL LETTER O WITH TILDE +00D6:LATIN CAPITAL LETTER O WITH DIAERESIS +00D7:MULTIPLICATION SIGN +00D8:LATIN CAPITAL LETTER O WITH STROKE +00D9:LATIN CAPITAL LETTER U WITH GRAVE +00DA:LATIN CAPITAL LETTER U WITH ACUTE +00DB:LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC:LATIN CAPITAL LETTER U WITH DIAERESIS +00DD:LATIN CAPITAL LETTER Y WITH ACUTE +00DE:LATIN CAPITAL LETTER THORN +00DF:LATIN SMALL LETTER SHARP S +00E0:LATIN SMALL LETTER A WITH GRAVE +00E1:LATIN SMALL LETTER A WITH ACUTE +00E2:LATIN SMALL LETTER A WITH CIRCUMFLEX +00E3:LATIN SMALL LETTER A WITH TILDE +00E4:LATIN SMALL LETTER A WITH DIAERESIS +00E5:LATIN SMALL LETTER A WITH RING ABOVE +00E6:LATIN SMALL LETTER AE +00E7:LATIN SMALL LETTER C WITH CEDILLA +00E8:LATIN SMALL LETTER E WITH GRAVE +00E9:LATIN SMALL LETTER E WITH ACUTE +00EA:LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB:LATIN SMALL LETTER E WITH DIAERESIS +00EC:LATIN SMALL LETTER I WITH GRAVE +00ED:LATIN SMALL LETTER I WITH ACUTE +00EE:LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF:LATIN SMALL LETTER I WITH DIAERESIS +00F0:LATIN SMALL LETTER ETH +00F1:LATIN SMALL LETTER N WITH TILDE +00F2:LATIN SMALL LETTER O WITH GRAVE +00F3:LATIN SMALL LETTER O WITH ACUTE +00F4:LATIN SMALL LETTER O WITH CIRCUMFLEX +00F5:LATIN SMALL LETTER O WITH TILDE +00F6:LATIN SMALL LETTER O WITH DIAERESIS +00F7:DIVISION SIGN +00F8:LATIN SMALL LETTER O WITH STROKE +00F9:LATIN SMALL LETTER U WITH GRAVE +00FA:LATIN SMALL LETTER U WITH ACUTE +00FB:LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC:LATIN SMALL LETTER U WITH DIAERESIS +00FD:LATIN SMALL LETTER Y WITH ACUTE +00FE:LATIN SMALL LETTER THORN +00FF:LATIN SMALL LETTER Y WITH DIAERESIS +0100:LATIN CAPITAL LETTER A WITH MACRON +0101:LATIN SMALL LETTER A WITH MACRON +0102:LATIN CAPITAL LETTER A WITH BREVE +0103:LATIN SMALL LETTER A WITH BREVE +0104:LATIN CAPITAL LETTER A WITH OGONEK +0105:LATIN SMALL LETTER A WITH OGONEK +0106:LATIN CAPITAL LETTER C WITH ACUTE +0107:LATIN SMALL LETTER C WITH ACUTE +0108:LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0109:LATIN SMALL LETTER C WITH CIRCUMFLEX +010A:LATIN CAPITAL LETTER C WITH DOT ABOVE +010B:LATIN SMALL LETTER C WITH DOT ABOVE +010C:LATIN CAPITAL LETTER C WITH CARON +010D:LATIN SMALL LETTER C WITH CARON +010E:LATIN CAPITAL LETTER D WITH CARON +010F:LATIN SMALL LETTER D WITH CARON +0110:LATIN CAPITAL LETTER D WITH STROKE +0111:LATIN SMALL LETTER D WITH STROKE +0112:LATIN CAPITAL LETTER E WITH MACRON +0113:LATIN SMALL LETTER E WITH MACRON +0116:LATIN CAPITAL LETTER E WITH DOT ABOVE +0117:LATIN SMALL LETTER E WITH DOT ABOVE +0118:LATIN CAPITAL LETTER E WITH OGONEK +0119:LATIN SMALL LETTER E WITH OGONEK +011A:LATIN CAPITAL LETTER E WITH CARON +011B:LATIN SMALL LETTER E WITH CARON +011C:LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011D:LATIN SMALL LETTER G WITH CIRCUMFLEX +011E:LATIN CAPITAL LETTER G WITH BREVE +011F:LATIN SMALL LETTER G WITH BREVE +0120:LATIN CAPITAL LETTER G WITH DOT ABOVE +0121:LATIN SMALL LETTER G WITH DOT ABOVE +0122:LATIN CAPITAL LETTER G WITH CEDILLA +0123:LATIN SMALL LETTER G WITH CEDILLA +0124:LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0125:LATIN SMALL LETTER H WITH CIRCUMFLEX +0126:LATIN CAPITAL LETTER H WITH STROKE +0127:LATIN SMALL LETTER H WITH STROKE +0128:LATIN CAPITAL LETTER I WITH TILDE +0129:LATIN SMALL LETTER I WITH TILDE +012A:LATIN CAPITAL LETTER I WITH MACRON +012B:LATIN SMALL LETTER I WITH MACRON +012E:LATIN CAPITAL LETTER I WITH OGONEK +012F:LATIN SMALL LETTER I WITH OGONEK +0130:LATIN CAPITAL LETTER I WITH DOT ABOVE +0131:LATIN SMALL LETTER DOTLESS I +0132:LATIN CAPITAL LIGATURE IJ +0133:LATIN SMALL LIGATURE IJ +0134:LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0135:LATIN SMALL LETTER J WITH CIRCUMFLEX +0136:LATIN CAPITAL LETTER K WITH CEDILLA +0137:LATIN SMALL LETTER K WITH CEDILLA +0138:LATIN SMALL LETTER KRA +0139:LATIN CAPITAL LETTER L WITH ACUTE +013A:LATIN SMALL LETTER L WITH ACUTE +013B:LATIN CAPITAL LETTER L WITH CEDILLA +013C:LATIN SMALL LETTER L WITH CEDILLA +013D:LATIN CAPITAL LETTER L WITH CARON +013E:LATIN SMALL LETTER L WITH CARON +013F:LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140:LATIN SMALL LETTER L WITH MIDDLE DOT +0141:LATIN CAPITAL LETTER L WITH STROKE +0142:LATIN SMALL LETTER L WITH STROKE +0143:LATIN CAPITAL LETTER N WITH ACUTE +0144:LATIN SMALL LETTER N WITH ACUTE +0145:LATIN CAPITAL LETTER N WITH CEDILLA +0146:LATIN SMALL LETTER N WITH CEDILLA +0147:LATIN CAPITAL LETTER N WITH CARON +0148:LATIN SMALL LETTER N WITH CARON +0149:LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A:LATIN CAPITAL LETTER ENG +014B:LATIN SMALL LETTER ENG +014C:LATIN CAPITAL LETTER O WITH MACRON +014D:LATIN SMALL LETTER O WITH MACRON +0150:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0151:LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152:LATIN CAPITAL LIGATURE OE +0153:LATIN SMALL LIGATURE OE +0154:LATIN CAPITAL LETTER R WITH ACUTE +0155:LATIN SMALL LETTER R WITH ACUTE +0156:LATIN CAPITAL LETTER R WITH CEDILLA +0157:LATIN SMALL LETTER R WITH CEDILLA +0158:LATIN CAPITAL LETTER R WITH CARON +0159:LATIN SMALL LETTER R WITH CARON +015A:LATIN CAPITAL LETTER S WITH ACUTE +015B:LATIN SMALL LETTER S WITH ACUTE +015C:LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015D:LATIN SMALL LETTER S WITH CIRCUMFLEX +015E:LATIN CAPITAL LETTER S WITH CEDILLA +015F:LATIN SMALL LETTER S WITH CEDILLA +0160:LATIN CAPITAL LETTER S WITH CARON +0161:LATIN SMALL LETTER S WITH CARON +0162:LATIN CAPITAL LETTER T WITH CEDILLA +0163:LATIN SMALL LETTER T WITH CEDILLA +0164:LATIN CAPITAL LETTER T WITH CARON +0165:LATIN SMALL LETTER T WITH CARON +0166:LATIN CAPITAL LETTER T WITH STROKE +0167:LATIN SMALL LETTER T WITH STROKE +0168:LATIN CAPITAL LETTER U WITH TILDE +0169:LATIN SMALL LETTER U WITH TILDE +016A:LATIN CAPITAL LETTER U WITH MACRON +016B:LATIN SMALL LETTER U WITH MACRON +016C:LATIN CAPITAL LETTER U WITH BREVE +016D:LATIN SMALL LETTER U WITH BREVE +016E:LATIN CAPITAL LETTER U WITH RING ABOVE +016F:LATIN SMALL LETTER U WITH RING ABOVE +0170:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0171:LATIN SMALL LETTER U WITH DOUBLE ACUTE +0172:LATIN CAPITAL LETTER U WITH OGONEK +0173:LATIN SMALL LETTER U WITH OGONEK +0174:LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175:LATIN SMALL LETTER W WITH CIRCUMFLEX +0176:LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177:LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178:LATIN CAPITAL LETTER Y WITH DIAERESIS +0179:LATIN CAPITAL LETTER Z WITH ACUTE +017A:LATIN SMALL LETTER Z WITH ACUTE +017B:LATIN CAPITAL LETTER Z WITH DOT ABOVE +017C:LATIN SMALL LETTER Z WITH DOT ABOVE +017D:LATIN CAPITAL LETTER Z WITH CARON +017E:LATIN SMALL LETTER Z WITH CARON +02C7:CARON +02D8:BREVE +02D9:DOT ABOVE +02DA:RING ABOVE +02DB:OGONEK +02DD:DOUBLE ACUTE ACCENT +2015:HORIZONTAL BAR +2018:LEFT SINGLE QUOTATION MARK +2019:RIGHT SINGLE QUOTATION MARK +201C:LEFT DOUBLE QUOTATION MARK +201D:RIGHT DOUBLE QUOTATION MARK +20AC:EURO SIGN +2122:TRADE MARK SIGN +2126:OHM SIGN +215B:VULGAR FRACTION ONE EIGHTH +215C:VULGAR FRACTION THREE EIGHTHS +215D:VULGAR FRACTION FIVE EIGHTHS +215E:VULGAR FRACTION SEVEN EIGHTHS +2190:LEFTWARDS ARROW +2191:UPWARDS ARROW +2192:RIGHTWARDS ARROW +2193:DOWNWARDS ARROW +266A:EIGHTH NOTE diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-1.txt b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-1.txt new file mode 100644 index 00000000000..399d29d84b0 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-1.txt @@ -0,0 +1,8 @@ +# Plane 00 +# Rows Positions (Cells) +00 20-7E A0-FF +01 00-13 16-2B 2E-4D 50-7E +02 C7 D8-DB DD +20 15 18-19 1C-1D AC +21 22 26 5B-5E 90-93 +26 6A
\ No newline at end of file diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-2.lst b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-2.lst new file mode 100644 index 00000000000..8e6c95a534c --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-2.lst @@ -0,0 +1,1052 @@ +0020:SPACE +0021:EXCLAMATION MARK +0022:QUOTATION MARK +0023:NUMBER SIGN +0024:DOLLAR SIGN +0025:PERCENT SIGN +0026:AMPERSAND +0027:APOSTROPHE +0028:LEFT PARENTHESIS +0029:RIGHT PARENTHESIS +002A:ASTERISK +002B:PLUS SIGN +002C:COMMA +002D:HYPHEN-MINUS +002E:FULL STOP +002F:SOLIDUS +0030:DIGIT ZERO +0031:DIGIT ONE +0032:DIGIT TWO +0033:DIGIT THREE +0034:DIGIT FOUR +0035:DIGIT FIVE +0036:DIGIT SIX +0037:DIGIT SEVEN +0038:DIGIT EIGHT +0039:DIGIT NINE +003A:COLON +003B:SEMICOLON +003C:LESS-THAN SIGN +003D:EQUALS SIGN +003E:GREATER-THAN SIGN +003F:QUESTION MARK +0040:COMMERCIAL AT +0041:LATIN CAPITAL LETTER A +0042:LATIN CAPITAL LETTER B +0043:LATIN CAPITAL LETTER C +0044:LATIN CAPITAL LETTER D +0045:LATIN CAPITAL LETTER E +0046:LATIN CAPITAL LETTER F +0047:LATIN CAPITAL LETTER G +0048:LATIN CAPITAL LETTER H +0049:LATIN CAPITAL LETTER I +004A:LATIN CAPITAL LETTER J +004B:LATIN CAPITAL LETTER K +004C:LATIN CAPITAL LETTER L +004D:LATIN CAPITAL LETTER M +004E:LATIN CAPITAL LETTER N +004F:LATIN CAPITAL LETTER O +0050:LATIN CAPITAL LETTER P +0051:LATIN CAPITAL LETTER Q +0052:LATIN CAPITAL LETTER R +0053:LATIN CAPITAL LETTER S +0054:LATIN CAPITAL LETTER T +0055:LATIN CAPITAL LETTER U +0056:LATIN CAPITAL LETTER V +0057:LATIN CAPITAL LETTER W +0058:LATIN CAPITAL LETTER X +0059:LATIN CAPITAL LETTER Y +005A:LATIN CAPITAL LETTER Z +005B:LEFT SQUARE BRACKET +005C:REVERSE SOLIDUS +005D:RIGHT SQUARE BRACKET +005E:CIRCUMFLEX ACCENT +005F:LOW LINE +0060:GRAVE ACCENT +0061:LATIN SMALL LETTER A +0062:LATIN SMALL LETTER B +0063:LATIN SMALL LETTER C +0064:LATIN SMALL LETTER D +0065:LATIN SMALL LETTER E +0066:LATIN SMALL LETTER F +0067:LATIN SMALL LETTER G +0068:LATIN SMALL LETTER H +0069:LATIN SMALL LETTER I +006A:LATIN SMALL LETTER J +006B:LATIN SMALL LETTER K +006C:LATIN SMALL LETTER L +006D:LATIN SMALL LETTER M +006E:LATIN SMALL LETTER N +006F:LATIN SMALL LETTER O +0070:LATIN SMALL LETTER P +0071:LATIN SMALL LETTER Q +0072:LATIN SMALL LETTER R +0073:LATIN SMALL LETTER S +0074:LATIN SMALL LETTER T +0075:LATIN SMALL LETTER U +0076:LATIN SMALL LETTER V +0077:LATIN SMALL LETTER W +0078:LATIN SMALL LETTER X +0079:LATIN SMALL LETTER Y +007A:LATIN SMALL LETTER Z +007B:LEFT CURLY BRACKET +007C:VERTICAL LINE +007D:RIGHT CURLY BRACKET +007E:TILDE +00A0:NO-BREAK SPACE +00A1:INVERTED EXCLAMATION MARK +00A2:CENT SIGN +00A3:POUND SIGN +00A4:CURRENCY SIGN +00A5:YEN SIGN +00A6:BROKEN BAR +00A7:SECTION SIGN +00A8:DIAERESIS +00A9:COPYRIGHT SIGN +00AA:FEMININE ORDINAL INDICATOR +00AB:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC:NOT SIGN +00AD:SOFT HYPHEN +00AE:REGISTERED SIGN +00AF:MACRON +00B0:DEGREE SIGN +00B1:PLUS-MINUS SIGN +00B2:SUPERSCRIPT TWO +00B3:SUPERSCRIPT THREE +00B4:ACUTE ACCENT +00B5:MICRO SIGN +00B6:PILCROW SIGN +00B7:MIDDLE DOT +00B8:CEDILLA +00B9:SUPERSCRIPT ONE +00BA:MASCULINE ORDINAL INDICATOR +00BB:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC:VULGAR FRACTION ONE QUARTER +00BD:VULGAR FRACTION ONE HALF +00BE:VULGAR FRACTION THREE QUARTERS +00BF:INVERTED QUESTION MARK +00C0:LATIN CAPITAL LETTER A WITH GRAVE +00C1:LATIN CAPITAL LETTER A WITH ACUTE +00C2:LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3:LATIN CAPITAL LETTER A WITH TILDE +00C4:LATIN CAPITAL LETTER A WITH DIAERESIS +00C5:LATIN CAPITAL LETTER A WITH RING ABOVE +00C6:LATIN CAPITAL LETTER AE +00C7:LATIN CAPITAL LETTER C WITH CEDILLA +00C8:LATIN CAPITAL LETTER E WITH GRAVE +00C9:LATIN CAPITAL LETTER E WITH ACUTE +00CA:LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB:LATIN CAPITAL LETTER E WITH DIAERESIS +00CC:LATIN CAPITAL LETTER I WITH GRAVE +00CD:LATIN CAPITAL LETTER I WITH ACUTE +00CE:LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF:LATIN CAPITAL LETTER I WITH DIAERESIS +00D0:LATIN CAPITAL LETTER ETH +00D1:LATIN CAPITAL LETTER N WITH TILDE +00D2:LATIN CAPITAL LETTER O WITH GRAVE +00D3:LATIN CAPITAL LETTER O WITH ACUTE +00D4:LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5:LATIN CAPITAL LETTER O WITH TILDE +00D6:LATIN CAPITAL LETTER O WITH DIAERESIS +00D7:MULTIPLICATION SIGN +00D8:LATIN CAPITAL LETTER O WITH STROKE +00D9:LATIN CAPITAL LETTER U WITH GRAVE +00DA:LATIN CAPITAL LETTER U WITH ACUTE +00DB:LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC:LATIN CAPITAL LETTER U WITH DIAERESIS +00DD:LATIN CAPITAL LETTER Y WITH ACUTE +00DE:LATIN CAPITAL LETTER THORN +00DF:LATIN SMALL LETTER SHARP S +00E0:LATIN SMALL LETTER A WITH GRAVE +00E1:LATIN SMALL LETTER A WITH ACUTE +00E2:LATIN SMALL LETTER A WITH CIRCUMFLEX +00E3:LATIN SMALL LETTER A WITH TILDE +00E4:LATIN SMALL LETTER A WITH DIAERESIS +00E5:LATIN SMALL LETTER A WITH RING ABOVE +00E6:LATIN SMALL LETTER AE +00E7:LATIN SMALL LETTER C WITH CEDILLA +00E8:LATIN SMALL LETTER E WITH GRAVE +00E9:LATIN SMALL LETTER E WITH ACUTE +00EA:LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB:LATIN SMALL LETTER E WITH DIAERESIS +00EC:LATIN SMALL LETTER I WITH GRAVE +00ED:LATIN SMALL LETTER I WITH ACUTE +00EE:LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF:LATIN SMALL LETTER I WITH DIAERESIS +00F0:LATIN SMALL LETTER ETH +00F1:LATIN SMALL LETTER N WITH TILDE +00F2:LATIN SMALL LETTER O WITH GRAVE +00F3:LATIN SMALL LETTER O WITH ACUTE +00F4:LATIN SMALL LETTER O WITH CIRCUMFLEX +00F5:LATIN SMALL LETTER O WITH TILDE +00F6:LATIN SMALL LETTER O WITH DIAERESIS +00F7:DIVISION SIGN +00F8:LATIN SMALL LETTER O WITH STROKE +00F9:LATIN SMALL LETTER U WITH GRAVE +00FA:LATIN SMALL LETTER U WITH ACUTE +00FB:LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC:LATIN SMALL LETTER U WITH DIAERESIS +00FD:LATIN SMALL LETTER Y WITH ACUTE +00FE:LATIN SMALL LETTER THORN +00FF:LATIN SMALL LETTER Y WITH DIAERESIS +0100:LATIN CAPITAL LETTER A WITH MACRON +0101:LATIN SMALL LETTER A WITH MACRON +0102:LATIN CAPITAL LETTER A WITH BREVE +0103:LATIN SMALL LETTER A WITH BREVE +0104:LATIN CAPITAL LETTER A WITH OGONEK +0105:LATIN SMALL LETTER A WITH OGONEK +0106:LATIN CAPITAL LETTER C WITH ACUTE +0107:LATIN SMALL LETTER C WITH ACUTE +0108:LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0109:LATIN SMALL LETTER C WITH CIRCUMFLEX +010A:LATIN CAPITAL LETTER C WITH DOT ABOVE +010B:LATIN SMALL LETTER C WITH DOT ABOVE +010C:LATIN CAPITAL LETTER C WITH CARON +010D:LATIN SMALL LETTER C WITH CARON +010E:LATIN CAPITAL LETTER D WITH CARON +010F:LATIN SMALL LETTER D WITH CARON +0110:LATIN CAPITAL LETTER D WITH STROKE +0111:LATIN SMALL LETTER D WITH STROKE +0112:LATIN CAPITAL LETTER E WITH MACRON +0113:LATIN SMALL LETTER E WITH MACRON +0114:LATIN CAPITAL LETTER E WITH BREVE +0115:LATIN SMALL LETTER E WITH BREVE +0116:LATIN CAPITAL LETTER E WITH DOT ABOVE +0117:LATIN SMALL LETTER E WITH DOT ABOVE +0118:LATIN CAPITAL LETTER E WITH OGONEK +0119:LATIN SMALL LETTER E WITH OGONEK +011A:LATIN CAPITAL LETTER E WITH CARON +011B:LATIN SMALL LETTER E WITH CARON +011C:LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011D:LATIN SMALL LETTER G WITH CIRCUMFLEX +011E:LATIN CAPITAL LETTER G WITH BREVE +011F:LATIN SMALL LETTER G WITH BREVE +0120:LATIN CAPITAL LETTER G WITH DOT ABOVE +0121:LATIN SMALL LETTER G WITH DOT ABOVE +0122:LATIN CAPITAL LETTER G WITH CEDILLA +0123:LATIN SMALL LETTER G WITH CEDILLA +0124:LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0125:LATIN SMALL LETTER H WITH CIRCUMFLEX +0126:LATIN CAPITAL LETTER H WITH STROKE +0127:LATIN SMALL LETTER H WITH STROKE +0128:LATIN CAPITAL LETTER I WITH TILDE +0129:LATIN SMALL LETTER I WITH TILDE +012A:LATIN CAPITAL LETTER I WITH MACRON +012B:LATIN SMALL LETTER I WITH MACRON +012C:LATIN CAPITAL LETTER I WITH BREVE +012D:LATIN SMALL LETTER I WITH BREVE +012E:LATIN CAPITAL LETTER I WITH OGONEK +012F:LATIN SMALL LETTER I WITH OGONEK +0130:LATIN CAPITAL LETTER I WITH DOT ABOVE +0131:LATIN SMALL LETTER DOTLESS I +0132:LATIN CAPITAL LIGATURE IJ +0133:LATIN SMALL LIGATURE IJ +0134:LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0135:LATIN SMALL LETTER J WITH CIRCUMFLEX +0136:LATIN CAPITAL LETTER K WITH CEDILLA +0137:LATIN SMALL LETTER K WITH CEDILLA +0138:LATIN SMALL LETTER KRA +0139:LATIN CAPITAL LETTER L WITH ACUTE +013A:LATIN SMALL LETTER L WITH ACUTE +013B:LATIN CAPITAL LETTER L WITH CEDILLA +013C:LATIN SMALL LETTER L WITH CEDILLA +013D:LATIN CAPITAL LETTER L WITH CARON +013E:LATIN SMALL LETTER L WITH CARON +013F:LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140:LATIN SMALL LETTER L WITH MIDDLE DOT +0141:LATIN CAPITAL LETTER L WITH STROKE +0142:LATIN SMALL LETTER L WITH STROKE +0143:LATIN CAPITAL LETTER N WITH ACUTE +0144:LATIN SMALL LETTER N WITH ACUTE +0145:LATIN CAPITAL LETTER N WITH CEDILLA +0146:LATIN SMALL LETTER N WITH CEDILLA +0147:LATIN CAPITAL LETTER N WITH CARON +0148:LATIN SMALL LETTER N WITH CARON +0149:LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A:LATIN CAPITAL LETTER ENG +014B:LATIN SMALL LETTER ENG +014C:LATIN CAPITAL LETTER O WITH MACRON +014D:LATIN SMALL LETTER O WITH MACRON +014E:LATIN CAPITAL LETTER O WITH BREVE +014F:LATIN SMALL LETTER O WITH BREVE +0150:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0151:LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152:LATIN CAPITAL LIGATURE OE +0153:LATIN SMALL LIGATURE OE +0154:LATIN CAPITAL LETTER R WITH ACUTE +0155:LATIN SMALL LETTER R WITH ACUTE +0156:LATIN CAPITAL LETTER R WITH CEDILLA +0157:LATIN SMALL LETTER R WITH CEDILLA +0158:LATIN CAPITAL LETTER R WITH CARON +0159:LATIN SMALL LETTER R WITH CARON +015A:LATIN CAPITAL LETTER S WITH ACUTE +015B:LATIN SMALL LETTER S WITH ACUTE +015C:LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015D:LATIN SMALL LETTER S WITH CIRCUMFLEX +015E:LATIN CAPITAL LETTER S WITH CEDILLA +015F:LATIN SMALL LETTER S WITH CEDILLA +0160:LATIN CAPITAL LETTER S WITH CARON +0161:LATIN SMALL LETTER S WITH CARON +0162:LATIN CAPITAL LETTER T WITH CEDILLA +0163:LATIN SMALL LETTER T WITH CEDILLA +0164:LATIN CAPITAL LETTER T WITH CARON +0165:LATIN SMALL LETTER T WITH CARON +0166:LATIN CAPITAL LETTER T WITH STROKE +0167:LATIN SMALL LETTER T WITH STROKE +0168:LATIN CAPITAL LETTER U WITH TILDE +0169:LATIN SMALL LETTER U WITH TILDE +016A:LATIN CAPITAL LETTER U WITH MACRON +016B:LATIN SMALL LETTER U WITH MACRON +016C:LATIN CAPITAL LETTER U WITH BREVE +016D:LATIN SMALL LETTER U WITH BREVE +016E:LATIN CAPITAL LETTER U WITH RING ABOVE +016F:LATIN SMALL LETTER U WITH RING ABOVE +0170:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0171:LATIN SMALL LETTER U WITH DOUBLE ACUTE +0172:LATIN CAPITAL LETTER U WITH OGONEK +0173:LATIN SMALL LETTER U WITH OGONEK +0174:LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175:LATIN SMALL LETTER W WITH CIRCUMFLEX +0176:LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177:LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178:LATIN CAPITAL LETTER Y WITH DIAERESIS +0179:LATIN CAPITAL LETTER Z WITH ACUTE +017A:LATIN SMALL LETTER Z WITH ACUTE +017B:LATIN CAPITAL LETTER Z WITH DOT ABOVE +017C:LATIN SMALL LETTER Z WITH DOT ABOVE +017D:LATIN CAPITAL LETTER Z WITH CARON +017E:LATIN SMALL LETTER Z WITH CARON +017F:LATIN SMALL LETTER LONG S +018F:LATIN CAPITAL LETTER SCHWA +0192:LATIN SMALL LETTER F WITH HOOK +01B7:LATIN CAPITAL LETTER EZH +01DE:LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01DF:LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E0:LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E1:LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E2:LATIN CAPITAL LETTER AE WITH MACRON +01E3:LATIN SMALL LETTER AE WITH MACRON +01E4:LATIN CAPITAL LETTER G WITH STROKE +01E5:LATIN SMALL LETTER G WITH STROKE +01E6:LATIN CAPITAL LETTER G WITH CARON +01E7:LATIN SMALL LETTER G WITH CARON +01E8:LATIN CAPITAL LETTER K WITH CARON +01E9:LATIN SMALL LETTER K WITH CARON +01EA:LATIN CAPITAL LETTER O WITH OGONEK +01EB:LATIN SMALL LETTER O WITH OGONEK +01EC:LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01ED:LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EE:LATIN CAPITAL LETTER EZH WITH CARON +01EF:LATIN SMALL LETTER EZH WITH CARON +01FA:LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FB:LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FC:LATIN CAPITAL LETTER AE WITH ACUTE +01FD:LATIN SMALL LETTER AE WITH ACUTE +01FE:LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +01FF:LATIN SMALL LETTER O WITH STROKE AND ACUTE +0218:LATIN CAPITAL LETTER S WITH COMMA BELOW +0219:LATIN SMALL LETTER S WITH COMMA BELOW +021A:LATIN CAPITAL LETTER T WITH COMMA BELOW +021B:LATIN SMALL LETTER T WITH COMMA BELOW +021E:LATIN CAPITAL LETTER H WITH CARON +021F:LATIN SMALL LETTER H WITH CARON +0259:LATIN SMALL LETTER SCHWA +027C:LATIN SMALL LETTER R WITH LONG LEG +0292:LATIN SMALL LETTER EZH +02BB:MODIFIER LETTER TURNED COMMA +02BC:MODIFIER LETTER APOSTROPHE +02BD:MODIFIER LETTER REVERSED COMMA +02C6:MODIFIER LETTER CIRCUMFLEX ACCENT +02C7:CARON +02C9:MODIFIER LETTER MACRON +02D8:BREVE +02D9:DOT ABOVE +02DA:RING ABOVE +02DB:OGONEK +02DC:SMALL TILDE +02DD:DOUBLE ACUTE ACCENT +02EE:MODIFIER LETTER DOUBLE APOSTROPHE +0374:GREEK NUMERAL SIGN +0375:GREEK LOWER NUMERAL SIGN +037A:GREEK YPOGEGRAMMENI +037E:GREEK QUESTION MARK +0384:GREEK TONOS +0385:GREEK DIALYTIKA TONOS +0386:GREEK CAPITAL LETTER ALPHA WITH TONOS +0387:GREEK ANO TELEIA +0388:GREEK CAPITAL LETTER EPSILON WITH TONOS +0389:GREEK CAPITAL LETTER ETA WITH TONOS +038A:GREEK CAPITAL LETTER IOTA WITH TONOS +038C:GREEK CAPITAL LETTER OMICRON WITH TONOS +038E:GREEK CAPITAL LETTER UPSILON WITH TONOS +038F:GREEK CAPITAL LETTER OMEGA WITH TONOS +0390:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391:GREEK CAPITAL LETTER ALPHA +0392:GREEK CAPITAL LETTER BETA +0393:GREEK CAPITAL LETTER GAMMA +0394:GREEK CAPITAL LETTER DELTA +0395:GREEK CAPITAL LETTER EPSILON +0396:GREEK CAPITAL LETTER ZETA +0397:GREEK CAPITAL LETTER ETA +0398:GREEK CAPITAL LETTER THETA +0399:GREEK CAPITAL LETTER IOTA +039A:GREEK CAPITAL LETTER KAPPA +039B:GREEK CAPITAL LETTER LAMDA +039C:GREEK CAPITAL LETTER MU +039D:GREEK CAPITAL LETTER NU +039E:GREEK CAPITAL LETTER XI +039F:GREEK CAPITAL LETTER OMICRON +03A0:GREEK CAPITAL LETTER PI +03A1:GREEK CAPITAL LETTER RHO +03A3:GREEK CAPITAL LETTER SIGMA +03A4:GREEK CAPITAL LETTER TAU +03A5:GREEK CAPITAL LETTER UPSILON +03A6:GREEK CAPITAL LETTER PHI +03A7:GREEK CAPITAL LETTER CHI +03A8:GREEK CAPITAL LETTER PSI +03A9:GREEK CAPITAL LETTER OMEGA +03AA:GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB:GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03AC:GREEK SMALL LETTER ALPHA WITH TONOS +03AD:GREEK SMALL LETTER EPSILON WITH TONOS +03AE:GREEK SMALL LETTER ETA WITH TONOS +03AF:GREEK SMALL LETTER IOTA WITH TONOS +03B0:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03B1:GREEK SMALL LETTER ALPHA +03B2:GREEK SMALL LETTER BETA +03B3:GREEK SMALL LETTER GAMMA +03B4:GREEK SMALL LETTER DELTA +03B5:GREEK SMALL LETTER EPSILON +03B6:GREEK SMALL LETTER ZETA +03B7:GREEK SMALL LETTER ETA +03B8:GREEK SMALL LETTER THETA +03B9:GREEK SMALL LETTER IOTA +03BA:GREEK SMALL LETTER KAPPA +03BB:GREEK SMALL LETTER LAMDA +03BC:GREEK SMALL LETTER MU +03BD:GREEK SMALL LETTER NU +03BE:GREEK SMALL LETTER XI +03BF:GREEK SMALL LETTER OMICRON +03C0:GREEK SMALL LETTER PI +03C1:GREEK SMALL LETTER RHO +03C2:GREEK SMALL LETTER FINAL SIGMA +03C3:GREEK SMALL LETTER SIGMA +03C4:GREEK SMALL LETTER TAU +03C5:GREEK SMALL LETTER UPSILON +03C6:GREEK SMALL LETTER PHI +03C7:GREEK SMALL LETTER CHI +03C8:GREEK SMALL LETTER PSI +03C9:GREEK SMALL LETTER OMEGA +03CA:GREEK SMALL LETTER IOTA WITH DIALYTIKA +03CB:GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03CC:GREEK SMALL LETTER OMICRON WITH TONOS +03CD:GREEK SMALL LETTER UPSILON WITH TONOS +03CE:GREEK SMALL LETTER OMEGA WITH TONOS +03D7:GREEK KAI SYMBOL +03DA:GREEK LETTER STIGMA +03DB:GREEK SMALL LETTER STIGMA +03DC:GREEK LETTER DIGAMMA +03DD:GREEK SMALL LETTER DIGAMMA +03DE:GREEK LETTER KOPPA +03DF:GREEK SMALL LETTER KOPPA +03E0:GREEK LETTER SAMPI +03E1:GREEK SMALL LETTER SAMPI +0400:CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401:CYRILLIC CAPITAL LETTER IO +0402:CYRILLIC CAPITAL LETTER DJE +0403:CYRILLIC CAPITAL LETTER GJE +0404:CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405:CYRILLIC CAPITAL LETTER DZE +0406:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407:CYRILLIC CAPITAL LETTER YI +0408:CYRILLIC CAPITAL LETTER JE +0409:CYRILLIC CAPITAL LETTER LJE +040A:CYRILLIC CAPITAL LETTER NJE +040B:CYRILLIC CAPITAL LETTER TSHE +040C:CYRILLIC CAPITAL LETTER KJE +040D:CYRILLIC CAPITAL LETTER I WITH GRAVE +040E:CYRILLIC CAPITAL LETTER SHORT U +040F:CYRILLIC CAPITAL LETTER DZHE +0410:CYRILLIC CAPITAL LETTER A +0411:CYRILLIC CAPITAL LETTER BE +0412:CYRILLIC CAPITAL LETTER VE +0413:CYRILLIC CAPITAL LETTER GHE +0414:CYRILLIC CAPITAL LETTER DE +0415:CYRILLIC CAPITAL LETTER IE +0416:CYRILLIC CAPITAL LETTER ZHE +0417:CYRILLIC CAPITAL LETTER ZE +0418:CYRILLIC CAPITAL LETTER I +0419:CYRILLIC CAPITAL LETTER SHORT I +041A:CYRILLIC CAPITAL LETTER KA +041B:CYRILLIC CAPITAL LETTER EL +041C:CYRILLIC CAPITAL LETTER EM +041D:CYRILLIC CAPITAL LETTER EN +041E:CYRILLIC CAPITAL LETTER O +041F:CYRILLIC CAPITAL LETTER PE +0420:CYRILLIC CAPITAL LETTER ER +0421:CYRILLIC CAPITAL LETTER ES +0422:CYRILLIC CAPITAL LETTER TE +0423:CYRILLIC CAPITAL LETTER U +0424:CYRILLIC CAPITAL LETTER EF +0425:CYRILLIC CAPITAL LETTER HA +0426:CYRILLIC CAPITAL LETTER TSE +0427:CYRILLIC CAPITAL LETTER CHE +0428:CYRILLIC CAPITAL LETTER SHA +0429:CYRILLIC CAPITAL LETTER SHCHA +042A:CYRILLIC CAPITAL LETTER HARD SIGN +042B:CYRILLIC CAPITAL LETTER YERU +042C:CYRILLIC CAPITAL LETTER SOFT SIGN +042D:CYRILLIC CAPITAL LETTER E +042E:CYRILLIC CAPITAL LETTER YU +042F:CYRILLIC CAPITAL LETTER YA +0430:CYRILLIC SMALL LETTER A +0431:CYRILLIC SMALL LETTER BE +0432:CYRILLIC SMALL LETTER VE +0433:CYRILLIC SMALL LETTER GHE +0434:CYRILLIC SMALL LETTER DE +0435:CYRILLIC SMALL LETTER IE +0436:CYRILLIC SMALL LETTER ZHE +0437:CYRILLIC SMALL LETTER ZE +0438:CYRILLIC SMALL LETTER I +0439:CYRILLIC SMALL LETTER SHORT I +043A:CYRILLIC SMALL LETTER KA +043B:CYRILLIC SMALL LETTER EL +043C:CYRILLIC SMALL LETTER EM +043D:CYRILLIC SMALL LETTER EN +043E:CYRILLIC SMALL LETTER O +043F:CYRILLIC SMALL LETTER PE +0440:CYRILLIC SMALL LETTER ER +0441:CYRILLIC SMALL LETTER ES +0442:CYRILLIC SMALL LETTER TE +0443:CYRILLIC SMALL LETTER U +0444:CYRILLIC SMALL LETTER EF +0445:CYRILLIC SMALL LETTER HA +0446:CYRILLIC SMALL LETTER TSE +0447:CYRILLIC SMALL LETTER CHE +0448:CYRILLIC SMALL LETTER SHA +0449:CYRILLIC SMALL LETTER SHCHA +044A:CYRILLIC SMALL LETTER HARD SIGN +044B:CYRILLIC SMALL LETTER YERU +044C:CYRILLIC SMALL LETTER SOFT SIGN +044D:CYRILLIC SMALL LETTER E +044E:CYRILLIC SMALL LETTER YU +044F:CYRILLIC SMALL LETTER YA +0450:CYRILLIC SMALL LETTER IE WITH GRAVE +0451:CYRILLIC SMALL LETTER IO +0452:CYRILLIC SMALL LETTER DJE +0453:CYRILLIC SMALL LETTER GJE +0454:CYRILLIC SMALL LETTER UKRAINIAN IE +0455:CYRILLIC SMALL LETTER DZE +0456:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0457:CYRILLIC SMALL LETTER YI +0458:CYRILLIC SMALL LETTER JE +0459:CYRILLIC SMALL LETTER LJE +045A:CYRILLIC SMALL LETTER NJE +045B:CYRILLIC SMALL LETTER TSHE +045C:CYRILLIC SMALL LETTER KJE +045D:CYRILLIC SMALL LETTER I WITH GRAVE +045E:CYRILLIC SMALL LETTER SHORT U +045F:CYRILLIC SMALL LETTER DZHE +0490:CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0491:CYRILLIC SMALL LETTER GHE WITH UPTURN +0492:CYRILLIC CAPITAL LETTER GHE WITH STROKE +0493:CYRILLIC SMALL LETTER GHE WITH STROKE +0494:CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0495:CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0496:CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0497:CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0498:CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +0499:CYRILLIC SMALL LETTER ZE WITH DESCENDER +049A:CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049B:CYRILLIC SMALL LETTER KA WITH DESCENDER +049C:CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049D:CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049E:CYRILLIC CAPITAL LETTER KA WITH STROKE +049F:CYRILLIC SMALL LETTER KA WITH STROKE +04A0:CYRILLIC CAPITAL LETTER BASHKIR KA +04A1:CYRILLIC SMALL LETTER BASHKIR KA +04A2:CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A3:CYRILLIC SMALL LETTER EN WITH DESCENDER +04A4:CYRILLIC CAPITAL LIGATURE EN GHE +04A5:CYRILLIC SMALL LIGATURE EN GHE +04A6:CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A7:CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A8:CYRILLIC CAPITAL LETTER ABKHASIAN HA +04A9:CYRILLIC SMALL LETTER ABKHASIAN HA +04AA:CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AB:CYRILLIC SMALL LETTER ES WITH DESCENDER +04AC:CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AD:CYRILLIC SMALL LETTER TE WITH DESCENDER +04AE:CYRILLIC CAPITAL LETTER STRAIGHT U +04AF:CYRILLIC SMALL LETTER STRAIGHT U +04B0:CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B1:CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B2:CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B3:CYRILLIC SMALL LETTER HA WITH DESCENDER +04B4:CYRILLIC CAPITAL LIGATURE TE TSE +04B5:CYRILLIC SMALL LIGATURE TE TSE +04B6:CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B7:CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B8:CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04B9:CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BA:CYRILLIC CAPITAL LETTER SHHA +04BB:CYRILLIC SMALL LETTER SHHA +04BC:CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BD:CYRILLIC SMALL LETTER ABKHASIAN CHE +04BE:CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04BF:CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C0:CYRILLIC LETTER PALOCHKA +04C1:CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C2:CYRILLIC SMALL LETTER ZHE WITH BREVE +04C3:CYRILLIC CAPITAL LETTER KA WITH HOOK +04C4:CYRILLIC SMALL LETTER KA WITH HOOK +04C7:CYRILLIC CAPITAL LETTER EN WITH HOOK +04C8:CYRILLIC SMALL LETTER EN WITH HOOK +04CB:CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CC:CYRILLIC SMALL LETTER KHAKASSIAN CHE +04D0:CYRILLIC CAPITAL LETTER A WITH BREVE +04D1:CYRILLIC SMALL LETTER A WITH BREVE +04D2:CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D3:CYRILLIC SMALL LETTER A WITH DIAERESIS +04D4:CYRILLIC CAPITAL LIGATURE A IE +04D5:CYRILLIC SMALL LIGATURE A IE +04D6:CYRILLIC CAPITAL LETTER IE WITH BREVE +04D7:CYRILLIC SMALL LETTER IE WITH BREVE +04D8:CYRILLIC CAPITAL LETTER SCHWA +04D9:CYRILLIC SMALL LETTER SCHWA +04DA:CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DB:CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DC:CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DD:CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DE:CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04DF:CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E0:CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E1:CYRILLIC SMALL LETTER ABKHASIAN DZE +04E2:CYRILLIC CAPITAL LETTER I WITH MACRON +04E3:CYRILLIC SMALL LETTER I WITH MACRON +04E4:CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E5:CYRILLIC SMALL LETTER I WITH DIAERESIS +04E6:CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E7:CYRILLIC SMALL LETTER O WITH DIAERESIS +04E8:CYRILLIC CAPITAL LETTER BARRED O +04E9:CYRILLIC SMALL LETTER BARRED O +04EA:CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EB:CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04EE:CYRILLIC CAPITAL LETTER U WITH MACRON +04EF:CYRILLIC SMALL LETTER U WITH MACRON +04F0:CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F1:CYRILLIC SMALL LETTER U WITH DIAERESIS +04F2:CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F3:CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F4:CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F5:CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F8:CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04F9:CYRILLIC SMALL LETTER YERU WITH DIAERESIS +1E02:LATIN CAPITAL LETTER B WITH DOT ABOVE +1E03:LATIN SMALL LETTER B WITH DOT ABOVE +1E0A:LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0B:LATIN SMALL LETTER D WITH DOT ABOVE +1E1E:LATIN CAPITAL LETTER F WITH DOT ABOVE +1E1F:LATIN SMALL LETTER F WITH DOT ABOVE +1E40:LATIN CAPITAL LETTER M WITH DOT ABOVE +1E41:LATIN SMALL LETTER M WITH DOT ABOVE +1E56:LATIN CAPITAL LETTER P WITH DOT ABOVE +1E57:LATIN SMALL LETTER P WITH DOT ABOVE +1E60:LATIN CAPITAL LETTER S WITH DOT ABOVE +1E61:LATIN SMALL LETTER S WITH DOT ABOVE +1E6A:LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6B:LATIN SMALL LETTER T WITH DOT ABOVE +1E80:LATIN CAPITAL LETTER W WITH GRAVE +1E81:LATIN SMALL LETTER W WITH GRAVE +1E82:LATIN CAPITAL LETTER W WITH ACUTE +1E83:LATIN SMALL LETTER W WITH ACUTE +1E84:LATIN CAPITAL LETTER W WITH DIAERESIS +1E85:LATIN SMALL LETTER W WITH DIAERESIS +1E9B:LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EF2:LATIN CAPITAL LETTER Y WITH GRAVE +1EF3:LATIN SMALL LETTER Y WITH GRAVE +1F00:GREEK SMALL LETTER ALPHA WITH PSILI +1F01:GREEK SMALL LETTER ALPHA WITH DASIA +1F02:GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA +1F03:GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA +1F04:GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA +1F05:GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA +1F06:GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F07:GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F08:GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09:GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A:GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B:GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C:GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D:GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E:GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F:GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F10:GREEK SMALL LETTER EPSILON WITH PSILI +1F11:GREEK SMALL LETTER EPSILON WITH DASIA +1F12:GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA +1F13:GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA +1F14:GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA +1F15:GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18:GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19:GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A:GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B:GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C:GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D:GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20:GREEK SMALL LETTER ETA WITH PSILI +1F21:GREEK SMALL LETTER ETA WITH DASIA +1F22:GREEK SMALL LETTER ETA WITH PSILI AND VARIA +1F23:GREEK SMALL LETTER ETA WITH DASIA AND VARIA +1F24:GREEK SMALL LETTER ETA WITH PSILI AND OXIA +1F25:GREEK SMALL LETTER ETA WITH DASIA AND OXIA +1F26:GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI +1F27:GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F28:GREEK CAPITAL LETTER ETA WITH PSILI +1F29:GREEK CAPITAL LETTER ETA WITH DASIA +1F2A:GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B:GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C:GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D:GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E:GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F:GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F30:GREEK SMALL LETTER IOTA WITH PSILI +1F31:GREEK SMALL LETTER IOTA WITH DASIA +1F32:GREEK SMALL LETTER IOTA WITH PSILI AND VARIA +1F33:GREEK SMALL LETTER IOTA WITH DASIA AND VARIA +1F34:GREEK SMALL LETTER IOTA WITH PSILI AND OXIA +1F35:GREEK SMALL LETTER IOTA WITH DASIA AND OXIA +1F36:GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI +1F37:GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F38:GREEK CAPITAL LETTER IOTA WITH PSILI +1F39:GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A:GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B:GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C:GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D:GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E:GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F:GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F40:GREEK SMALL LETTER OMICRON WITH PSILI +1F41:GREEK SMALL LETTER OMICRON WITH DASIA +1F42:GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA +1F43:GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA +1F44:GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA +1F45:GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48:GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49:GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A:GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B:GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C:GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D:GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50:GREEK SMALL LETTER UPSILON WITH PSILI +1F51:GREEK SMALL LETTER UPSILON WITH DASIA +1F52:GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F53:GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA +1F54:GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F55:GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA +1F56:GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F57:GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59:GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B:GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D:GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F:GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F60:GREEK SMALL LETTER OMEGA WITH PSILI +1F61:GREEK SMALL LETTER OMEGA WITH DASIA +1F62:GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA +1F63:GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA +1F64:GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA +1F65:GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA +1F66:GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F67:GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F68:GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69:GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A:GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B:GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C:GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D:GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E:GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F:GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F70:GREEK SMALL LETTER ALPHA WITH VARIA +1F71:GREEK SMALL LETTER ALPHA WITH OXIA +1F72:GREEK SMALL LETTER EPSILON WITH VARIA +1F73:GREEK SMALL LETTER EPSILON WITH OXIA +1F74:GREEK SMALL LETTER ETA WITH VARIA +1F75:GREEK SMALL LETTER ETA WITH OXIA +1F76:GREEK SMALL LETTER IOTA WITH VARIA +1F77:GREEK SMALL LETTER IOTA WITH OXIA +1F78:GREEK SMALL LETTER OMICRON WITH VARIA +1F79:GREEK SMALL LETTER OMICRON WITH OXIA +1F7A:GREEK SMALL LETTER UPSILON WITH VARIA +1F7B:GREEK SMALL LETTER UPSILON WITH OXIA +1F7C:GREEK SMALL LETTER OMEGA WITH VARIA +1F7D:GREEK SMALL LETTER OMEGA WITH OXIA +1F80:GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81:GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82:GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83:GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84:GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85:GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86:GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87:GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88:GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89:GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A:GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B:GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C:GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D:GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E:GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F:GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90:GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91:GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92:GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93:GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94:GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95:GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96:GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97:GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98:GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99:GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A:GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B:GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C:GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D:GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E:GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F:GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0:GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1:GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2:GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3:GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4:GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5:GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6:GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7:GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8:GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9:GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA:GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB:GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC:GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD:GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE:GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF:GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB0:GREEK SMALL LETTER ALPHA WITH VRACHY +1FB1:GREEK SMALL LETTER ALPHA WITH MACRON +1FB2:GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3:GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4:GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6:GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7:GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8:GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9:GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA:GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB:GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC:GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD:GREEK KORONIS +1FBE:GREEK PROSGEGRAMMENI +1FBF:GREEK PSILI +1FC0:GREEK PERISPOMENI +1FC1:GREEK DIALYTIKA AND PERISPOMENI +1FC2:GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3:GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4:GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6:GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7:GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8:GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9:GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA:GREEK CAPITAL LETTER ETA WITH VARIA +1FCB:GREEK CAPITAL LETTER ETA WITH OXIA +1FCC:GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD:GREEK PSILI AND VARIA +1FCE:GREEK PSILI AND OXIA +1FCF:GREEK PSILI AND PERISPOMENI +1FD0:GREEK SMALL LETTER IOTA WITH VRACHY +1FD1:GREEK SMALL LETTER IOTA WITH MACRON +1FD2:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6:GREEK SMALL LETTER IOTA WITH PERISPOMENI +1FD7:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8:GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9:GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA:GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB:GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD:GREEK DASIA AND VARIA +1FDE:GREEK DASIA AND OXIA +1FDF:GREEK DASIA AND PERISPOMENI +1FE0:GREEK SMALL LETTER UPSILON WITH VRACHY +1FE1:GREEK SMALL LETTER UPSILON WITH MACRON +1FE2:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE4:GREEK SMALL LETTER RHO WITH PSILI +1FE5:GREEK SMALL LETTER RHO WITH DASIA +1FE6:GREEK SMALL LETTER UPSILON WITH PERISPOMENI +1FE7:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8:GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9:GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA:GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB:GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC:GREEK CAPITAL LETTER RHO WITH DASIA +1FED:GREEK DIALYTIKA AND VARIA +1FEE:GREEK DIALYTIKA AND OXIA +1FEF:GREEK VARIA +1FF2:GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3:GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4:GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6:GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7:GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8:GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9:GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA:GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB:GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC:GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD:GREEK OXIA +1FFE:GREEK DASIA +2013:EN DASH +2014:EM DASH +2015:HORIZONTAL BAR +2017:DOUBLE LOW LINE +2018:LEFT SINGLE QUOTATION MARK +2019:RIGHT SINGLE QUOTATION MARK +201A:SINGLE LOW-9 QUOTATION MARK +201B:SINGLE HIGH-REVERSED-9 QUOTATION MARK +201C:LEFT DOUBLE QUOTATION MARK +201D:RIGHT DOUBLE QUOTATION MARK +201E:DOUBLE LOW-9 QUOTATION MARK +2020:DAGGER +2021:DOUBLE DAGGER +2022:BULLET +2026:HORIZONTAL ELLIPSIS +2030:PER MILLE SIGN +2032:PRIME +2033:DOUBLE PRIME +2039:SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203C:DOUBLE EXCLAMATION MARK +203E:OVERLINE +2044:FRACTION SLASH +204A:TIRONIAN SIGN ET +207F:SUPERSCRIPT LATIN SMALL LETTER N +2082:SUBSCRIPT TWO +20A3:FRENCH FRANC SIGN +20A4:LIRA SIGN +20A7:PESETA SIGN +20AC:EURO SIGN +20AF:DRACHMA SIGN +2105:CARE OF +2116:NUMERO SIGN +2122:TRADE MARK SIGN +2126:OHM SIGN +215B:VULGAR FRACTION ONE EIGHTH +215C:VULGAR FRACTION THREE EIGHTHS +215D:VULGAR FRACTION FIVE EIGHTHS +215E:VULGAR FRACTION SEVEN EIGHTHS +2190:LEFTWARDS ARROW +2191:UPWARDS ARROW +2192:RIGHTWARDS ARROW +2193:DOWNWARDS ARROW +2194:LEFT RIGHT ARROW +2195:UP DOWN ARROW +21A8:UP DOWN ARROW WITH BASE +2200:FOR ALL +2202:PARTIAL DIFFERENTIAL +2203:THERE EXISTS +2206:INCREMENT +2208:ELEMENT OF +2209:NOT AN ELEMENT OF +220F:N-ARY PRODUCT +2211:N-ARY SUMMATION +2212:MINUS SIGN +2219:BULLET OPERATOR +221A:SQUARE ROOT +221E:INFINITY +221F:RIGHT ANGLE +2227:LOGICAL AND +2228:LOGICAL OR +2229:INTERSECTION +222A:UNION +222B:INTEGRAL +2248:ALMOST EQUAL TO +2259:ESTIMATES +2260:NOT EQUAL TO +2261:IDENTICAL TO +2264:LESS-THAN OR EQUAL TO +2265:GREATER-THAN OR EQUAL TO +2282:SUBSET OF +2283:SUPERSET OF +2295:CIRCLED PLUS +2297:CIRCLED TIMES +2302:HOUSE +2310:REVERSED NOT SIGN +2320:TOP HALF INTEGRAL +2321:BOTTOM HALF INTEGRAL +2329:LEFT-POINTING ANGLE BRACKET +232A:RIGHT-POINTING ANGLE BRACKET +2500:BOX DRAWINGS LIGHT HORIZONTAL +2502:BOX DRAWINGS LIGHT VERTICAL +250C:BOX DRAWINGS LIGHT DOWN AND RIGHT +2510:BOX DRAWINGS LIGHT DOWN AND LEFT +2514:BOX DRAWINGS LIGHT UP AND RIGHT +2518:BOX DRAWINGS LIGHT UP AND LEFT +251C:BOX DRAWINGS LIGHT VERTICAL AND RIGHT +2524:BOX DRAWINGS LIGHT VERTICAL AND LEFT +252C:BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +2534:BOX DRAWINGS LIGHT UP AND HORIZONTAL +253C:BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +2550:BOX DRAWINGS DOUBLE HORIZONTAL +2551:BOX DRAWINGS DOUBLE VERTICAL +2552:BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553:BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +2554:BOX DRAWINGS DOUBLE DOWN AND RIGHT +2555:BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2556:BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2557:BOX DRAWINGS DOUBLE DOWN AND LEFT +2558:BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2559:BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +255A:BOX DRAWINGS DOUBLE UP AND RIGHT +255B:BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255C:BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255D:BOX DRAWINGS DOUBLE UP AND LEFT +255E:BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F:BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +2560:BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2561:BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562:BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2563:BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2564:BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565:BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2566:BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2567:BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568:BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2569:BOX DRAWINGS DOUBLE UP AND HORIZONTAL +256A:BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +256B:BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256C:BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +2580:UPPER HALF BLOCK +2584:LOWER HALF BLOCK +2588:FULL BLOCK +258C:LEFT HALF BLOCK +2590:RIGHT HALF BLOCK +2591:LIGHT SHADE +2592:MEDIUM SHADE +2593:DARK SHADE +25A0:BLACK SQUARE +25AC:BLACK RECTANGLE +25B2:BLACK UP-POINTING TRIANGLE +25BA:BLACK RIGHT-POINTING POINTER +25BC:BLACK DOWN-POINTING TRIANGLE +25C4:BLACK LEFT-POINTING POINTER +25CA:LOZENGE +25CB:WHITE CIRCLE +25D8:INVERSE BULLET +25D9:INVERSE WHITE CIRCLE +263A:WHITE SMILING FACE +263B:BLACK SMILING FACE +263C:WHITE SUN WITH RAYS +2640:FEMALE SIGN +2642:MALE SIGN +2660:BLACK SPADE SUIT +2663:BLACK CLUB SUIT +2665:BLACK HEART SUIT +2666:BLACK DIAMOND SUIT +266A:EIGHTH NOTE +266B:BEAMED EIGHTH NOTES +FB01:LATIN SMALL LIGATURE FI +FB02:LATIN SMALL LIGATURE FL +FFFD:REPLACEMENT CHARACTER diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-2.txt b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-2.txt new file mode 100644 index 00000000000..08a58945a9c --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-2.txt @@ -0,0 +1,17 @@ +# Plane 00 +# Rows Positions (Cells) +00 20-7E A0-FF +01 00-7F 8F 92 B7 DE-EF FA-FF +02 18-1B 1E-1F 59 7C 92 BB-BD C6-C7 C9 D8-DD EE +03 74-75 7A 7E 84-8A 8C 8E-A1 A3-CE D7 DA-E1 +04 00-5F 90-C4 C7-C8 CB-CC D0-EB EE-F5 F8-F9 +1E 02-03 0A-0B 1E-1F 40-41 56-57 60-61 6A-6B 80-85 9B F2-F3 +1F 00-15 18-1D 20-45 48-4D 50-57 59 5B 5D 5F-7D 80-B4 B6-C4 C6-D3 D6-DB DD-EF F2-F4 F6-FE +20 13-15 17-1E 20-22 26 30 32-33 39-3A 3C 3E 44 4A 7F 82 A3-A4 A7 AC AF +21 05 16 22 26 5B-5E 90-95 A8 +22 00 02-03 06 08-09 0F 11-12 19-1A 1E-1F 27-2B 48 59 60-61 64-65 82-83 95 97 +23 02 10 20-21 29-2A +25 00 02 0C 10 14 18 1C 24 2C 34 3C 50-6C 80 84 88 8C 90-93 A0 AC B2 BA BC C4 CA-CB D8-D9 +26 3A-3C 40 42 60 63 65-66 6A-6B +FB 01-02 +FF FD diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-3B.lst b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-3B.lst new file mode 100644 index 00000000000..74995709281 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-3B.lst @@ -0,0 +1,2819 @@ +0020:SPACE +0021:EXCLAMATION MARK +0022:QUOTATION MARK +0023:NUMBER SIGN +0024:DOLLAR SIGN +0025:PERCENT SIGN +0026:AMPERSAND +0027:APOSTROPHE +0028:LEFT PARENTHESIS +0029:RIGHT PARENTHESIS +002A:ASTERISK +002B:PLUS SIGN +002C:COMMA +002D:HYPHEN-MINUS +002E:FULL STOP +002F:SOLIDUS +0030:DIGIT ZERO +0031:DIGIT ONE +0032:DIGIT TWO +0033:DIGIT THREE +0034:DIGIT FOUR +0035:DIGIT FIVE +0036:DIGIT SIX +0037:DIGIT SEVEN +0038:DIGIT EIGHT +0039:DIGIT NINE +003A:COLON +003B:SEMICOLON +003C:LESS-THAN SIGN +003D:EQUALS SIGN +003E:GREATER-THAN SIGN +003F:QUESTION MARK +0040:COMMERCIAL AT +0041:LATIN CAPITAL LETTER A +0042:LATIN CAPITAL LETTER B +0043:LATIN CAPITAL LETTER C +0044:LATIN CAPITAL LETTER D +0045:LATIN CAPITAL LETTER E +0046:LATIN CAPITAL LETTER F +0047:LATIN CAPITAL LETTER G +0048:LATIN CAPITAL LETTER H +0049:LATIN CAPITAL LETTER I +004A:LATIN CAPITAL LETTER J +004B:LATIN CAPITAL LETTER K +004C:LATIN CAPITAL LETTER L +004D:LATIN CAPITAL LETTER M +004E:LATIN CAPITAL LETTER N +004F:LATIN CAPITAL LETTER O +0050:LATIN CAPITAL LETTER P +0051:LATIN CAPITAL LETTER Q +0052:LATIN CAPITAL LETTER R +0053:LATIN CAPITAL LETTER S +0054:LATIN CAPITAL LETTER T +0055:LATIN CAPITAL LETTER U +0056:LATIN CAPITAL LETTER V +0057:LATIN CAPITAL LETTER W +0058:LATIN CAPITAL LETTER X +0059:LATIN CAPITAL LETTER Y +005A:LATIN CAPITAL LETTER Z +005B:LEFT SQUARE BRACKET +005C:REVERSE SOLIDUS +005D:RIGHT SQUARE BRACKET +005E:CIRCUMFLEX ACCENT +005F:LOW LINE +0060:GRAVE ACCENT +0061:LATIN SMALL LETTER A +0062:LATIN SMALL LETTER B +0063:LATIN SMALL LETTER C +0064:LATIN SMALL LETTER D +0065:LATIN SMALL LETTER E +0066:LATIN SMALL LETTER F +0067:LATIN SMALL LETTER G +0068:LATIN SMALL LETTER H +0069:LATIN SMALL LETTER I +006A:LATIN SMALL LETTER J +006B:LATIN SMALL LETTER K +006C:LATIN SMALL LETTER L +006D:LATIN SMALL LETTER M +006E:LATIN SMALL LETTER N +006F:LATIN SMALL LETTER O +0070:LATIN SMALL LETTER P +0071:LATIN SMALL LETTER Q +0072:LATIN SMALL LETTER R +0073:LATIN SMALL LETTER S +0074:LATIN SMALL LETTER T +0075:LATIN SMALL LETTER U +0076:LATIN SMALL LETTER V +0077:LATIN SMALL LETTER W +0078:LATIN SMALL LETTER X +0079:LATIN SMALL LETTER Y +007A:LATIN SMALL LETTER Z +007B:LEFT CURLY BRACKET +007C:VERTICAL LINE +007D:RIGHT CURLY BRACKET +007E:TILDE +00A0:NO-BREAK SPACE +00A1:INVERTED EXCLAMATION MARK +00A2:CENT SIGN +00A3:POUND SIGN +00A4:CURRENCY SIGN +00A5:YEN SIGN +00A6:BROKEN BAR +00A7:SECTION SIGN +00A8:DIAERESIS +00A9:COPYRIGHT SIGN +00AA:FEMININE ORDINAL INDICATOR +00AB:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC:NOT SIGN +00AD:SOFT HYPHEN +00AE:REGISTERED SIGN +00AF:MACRON +00B0:DEGREE SIGN +00B1:PLUS-MINUS SIGN +00B2:SUPERSCRIPT TWO +00B3:SUPERSCRIPT THREE +00B4:ACUTE ACCENT +00B5:MICRO SIGN +00B6:PILCROW SIGN +00B7:MIDDLE DOT +00B8:CEDILLA +00B9:SUPERSCRIPT ONE +00BA:MASCULINE ORDINAL INDICATOR +00BB:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC:VULGAR FRACTION ONE QUARTER +00BD:VULGAR FRACTION ONE HALF +00BE:VULGAR FRACTION THREE QUARTERS +00BF:INVERTED QUESTION MARK +00C0:LATIN CAPITAL LETTER A WITH GRAVE +00C1:LATIN CAPITAL LETTER A WITH ACUTE +00C2:LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3:LATIN CAPITAL LETTER A WITH TILDE +00C4:LATIN CAPITAL LETTER A WITH DIAERESIS +00C5:LATIN CAPITAL LETTER A WITH RING ABOVE +00C6:LATIN CAPITAL LETTER AE +00C7:LATIN CAPITAL LETTER C WITH CEDILLA +00C8:LATIN CAPITAL LETTER E WITH GRAVE +00C9:LATIN CAPITAL LETTER E WITH ACUTE +00CA:LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB:LATIN CAPITAL LETTER E WITH DIAERESIS +00CC:LATIN CAPITAL LETTER I WITH GRAVE +00CD:LATIN CAPITAL LETTER I WITH ACUTE +00CE:LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF:LATIN CAPITAL LETTER I WITH DIAERESIS +00D0:LATIN CAPITAL LETTER ETH +00D1:LATIN CAPITAL LETTER N WITH TILDE +00D2:LATIN CAPITAL LETTER O WITH GRAVE +00D3:LATIN CAPITAL LETTER O WITH ACUTE +00D4:LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5:LATIN CAPITAL LETTER O WITH TILDE +00D6:LATIN CAPITAL LETTER O WITH DIAERESIS +00D7:MULTIPLICATION SIGN +00D8:LATIN CAPITAL LETTER O WITH STROKE +00D9:LATIN CAPITAL LETTER U WITH GRAVE +00DA:LATIN CAPITAL LETTER U WITH ACUTE +00DB:LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC:LATIN CAPITAL LETTER U WITH DIAERESIS +00DD:LATIN CAPITAL LETTER Y WITH ACUTE +00DE:LATIN CAPITAL LETTER THORN +00DF:LATIN SMALL LETTER SHARP S +00E0:LATIN SMALL LETTER A WITH GRAVE +00E1:LATIN SMALL LETTER A WITH ACUTE +00E2:LATIN SMALL LETTER A WITH CIRCUMFLEX +00E3:LATIN SMALL LETTER A WITH TILDE +00E4:LATIN SMALL LETTER A WITH DIAERESIS +00E5:LATIN SMALL LETTER A WITH RING ABOVE +00E6:LATIN SMALL LETTER AE +00E7:LATIN SMALL LETTER C WITH CEDILLA +00E8:LATIN SMALL LETTER E WITH GRAVE +00E9:LATIN SMALL LETTER E WITH ACUTE +00EA:LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB:LATIN SMALL LETTER E WITH DIAERESIS +00EC:LATIN SMALL LETTER I WITH GRAVE +00ED:LATIN SMALL LETTER I WITH ACUTE +00EE:LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF:LATIN SMALL LETTER I WITH DIAERESIS +00F0:LATIN SMALL LETTER ETH +00F1:LATIN SMALL LETTER N WITH TILDE +00F2:LATIN SMALL LETTER O WITH GRAVE +00F3:LATIN SMALL LETTER O WITH ACUTE +00F4:LATIN SMALL LETTER O WITH CIRCUMFLEX +00F5:LATIN SMALL LETTER O WITH TILDE +00F6:LATIN SMALL LETTER O WITH DIAERESIS +00F7:DIVISION SIGN +00F8:LATIN SMALL LETTER O WITH STROKE +00F9:LATIN SMALL LETTER U WITH GRAVE +00FA:LATIN SMALL LETTER U WITH ACUTE +00FB:LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC:LATIN SMALL LETTER U WITH DIAERESIS +00FD:LATIN SMALL LETTER Y WITH ACUTE +00FE:LATIN SMALL LETTER THORN +00FF:LATIN SMALL LETTER Y WITH DIAERESIS +0100:LATIN CAPITAL LETTER A WITH MACRON +0101:LATIN SMALL LETTER A WITH MACRON +0102:LATIN CAPITAL LETTER A WITH BREVE +0103:LATIN SMALL LETTER A WITH BREVE +0104:LATIN CAPITAL LETTER A WITH OGONEK +0105:LATIN SMALL LETTER A WITH OGONEK +0106:LATIN CAPITAL LETTER C WITH ACUTE +0107:LATIN SMALL LETTER C WITH ACUTE +0108:LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0109:LATIN SMALL LETTER C WITH CIRCUMFLEX +010A:LATIN CAPITAL LETTER C WITH DOT ABOVE +010B:LATIN SMALL LETTER C WITH DOT ABOVE +010C:LATIN CAPITAL LETTER C WITH CARON +010D:LATIN SMALL LETTER C WITH CARON +010E:LATIN CAPITAL LETTER D WITH CARON +010F:LATIN SMALL LETTER D WITH CARON +0110:LATIN CAPITAL LETTER D WITH STROKE +0111:LATIN SMALL LETTER D WITH STROKE +0112:LATIN CAPITAL LETTER E WITH MACRON +0113:LATIN SMALL LETTER E WITH MACRON +0114:LATIN CAPITAL LETTER E WITH BREVE +0115:LATIN SMALL LETTER E WITH BREVE +0116:LATIN CAPITAL LETTER E WITH DOT ABOVE +0117:LATIN SMALL LETTER E WITH DOT ABOVE +0118:LATIN CAPITAL LETTER E WITH OGONEK +0119:LATIN SMALL LETTER E WITH OGONEK +011A:LATIN CAPITAL LETTER E WITH CARON +011B:LATIN SMALL LETTER E WITH CARON +011C:LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011D:LATIN SMALL LETTER G WITH CIRCUMFLEX +011E:LATIN CAPITAL LETTER G WITH BREVE +011F:LATIN SMALL LETTER G WITH BREVE +0120:LATIN CAPITAL LETTER G WITH DOT ABOVE +0121:LATIN SMALL LETTER G WITH DOT ABOVE +0122:LATIN CAPITAL LETTER G WITH CEDILLA +0123:LATIN SMALL LETTER G WITH CEDILLA +0124:LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0125:LATIN SMALL LETTER H WITH CIRCUMFLEX +0126:LATIN CAPITAL LETTER H WITH STROKE +0127:LATIN SMALL LETTER H WITH STROKE +0128:LATIN CAPITAL LETTER I WITH TILDE +0129:LATIN SMALL LETTER I WITH TILDE +012A:LATIN CAPITAL LETTER I WITH MACRON +012B:LATIN SMALL LETTER I WITH MACRON +012C:LATIN CAPITAL LETTER I WITH BREVE +012D:LATIN SMALL LETTER I WITH BREVE +012E:LATIN CAPITAL LETTER I WITH OGONEK +012F:LATIN SMALL LETTER I WITH OGONEK +0130:LATIN CAPITAL LETTER I WITH DOT ABOVE +0131:LATIN SMALL LETTER DOTLESS I +0132:LATIN CAPITAL LIGATURE IJ +0133:LATIN SMALL LIGATURE IJ +0134:LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0135:LATIN SMALL LETTER J WITH CIRCUMFLEX +0136:LATIN CAPITAL LETTER K WITH CEDILLA +0137:LATIN SMALL LETTER K WITH CEDILLA +0138:LATIN SMALL LETTER KRA +0139:LATIN CAPITAL LETTER L WITH ACUTE +013A:LATIN SMALL LETTER L WITH ACUTE +013B:LATIN CAPITAL LETTER L WITH CEDILLA +013C:LATIN SMALL LETTER L WITH CEDILLA +013D:LATIN CAPITAL LETTER L WITH CARON +013E:LATIN SMALL LETTER L WITH CARON +013F:LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140:LATIN SMALL LETTER L WITH MIDDLE DOT +0141:LATIN CAPITAL LETTER L WITH STROKE +0142:LATIN SMALL LETTER L WITH STROKE +0143:LATIN CAPITAL LETTER N WITH ACUTE +0144:LATIN SMALL LETTER N WITH ACUTE +0145:LATIN CAPITAL LETTER N WITH CEDILLA +0146:LATIN SMALL LETTER N WITH CEDILLA +0147:LATIN CAPITAL LETTER N WITH CARON +0148:LATIN SMALL LETTER N WITH CARON +0149:LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A:LATIN CAPITAL LETTER ENG +014B:LATIN SMALL LETTER ENG +014C:LATIN CAPITAL LETTER O WITH MACRON +014D:LATIN SMALL LETTER O WITH MACRON +014E:LATIN CAPITAL LETTER O WITH BREVE +014F:LATIN SMALL LETTER O WITH BREVE +0150:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0151:LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152:LATIN CAPITAL LIGATURE OE +0153:LATIN SMALL LIGATURE OE +0154:LATIN CAPITAL LETTER R WITH ACUTE +0155:LATIN SMALL LETTER R WITH ACUTE +0156:LATIN CAPITAL LETTER R WITH CEDILLA +0157:LATIN SMALL LETTER R WITH CEDILLA +0158:LATIN CAPITAL LETTER R WITH CARON +0159:LATIN SMALL LETTER R WITH CARON +015A:LATIN CAPITAL LETTER S WITH ACUTE +015B:LATIN SMALL LETTER S WITH ACUTE +015C:LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015D:LATIN SMALL LETTER S WITH CIRCUMFLEX +015E:LATIN CAPITAL LETTER S WITH CEDILLA +015F:LATIN SMALL LETTER S WITH CEDILLA +0160:LATIN CAPITAL LETTER S WITH CARON +0161:LATIN SMALL LETTER S WITH CARON +0162:LATIN CAPITAL LETTER T WITH CEDILLA +0163:LATIN SMALL LETTER T WITH CEDILLA +0164:LATIN CAPITAL LETTER T WITH CARON +0165:LATIN SMALL LETTER T WITH CARON +0166:LATIN CAPITAL LETTER T WITH STROKE +0167:LATIN SMALL LETTER T WITH STROKE +0168:LATIN CAPITAL LETTER U WITH TILDE +0169:LATIN SMALL LETTER U WITH TILDE +016A:LATIN CAPITAL LETTER U WITH MACRON +016B:LATIN SMALL LETTER U WITH MACRON +016C:LATIN CAPITAL LETTER U WITH BREVE +016D:LATIN SMALL LETTER U WITH BREVE +016E:LATIN CAPITAL LETTER U WITH RING ABOVE +016F:LATIN SMALL LETTER U WITH RING ABOVE +0170:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0171:LATIN SMALL LETTER U WITH DOUBLE ACUTE +0172:LATIN CAPITAL LETTER U WITH OGONEK +0173:LATIN SMALL LETTER U WITH OGONEK +0174:LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175:LATIN SMALL LETTER W WITH CIRCUMFLEX +0176:LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177:LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178:LATIN CAPITAL LETTER Y WITH DIAERESIS +0179:LATIN CAPITAL LETTER Z WITH ACUTE +017A:LATIN SMALL LETTER Z WITH ACUTE +017B:LATIN CAPITAL LETTER Z WITH DOT ABOVE +017C:LATIN SMALL LETTER Z WITH DOT ABOVE +017D:LATIN CAPITAL LETTER Z WITH CARON +017E:LATIN SMALL LETTER Z WITH CARON +017F:LATIN SMALL LETTER LONG S +0180:LATIN SMALL LETTER B WITH STROKE +0181:LATIN CAPITAL LETTER B WITH HOOK +0182:LATIN CAPITAL LETTER B WITH TOPBAR +0183:LATIN SMALL LETTER B WITH TOPBAR +0184:LATIN CAPITAL LETTER TONE SIX +0185:LATIN SMALL LETTER TONE SIX +0186:LATIN CAPITAL LETTER OPEN O +0187:LATIN CAPITAL LETTER C WITH HOOK +0188:LATIN SMALL LETTER C WITH HOOK +0189:LATIN CAPITAL LETTER AFRICAN D +018A:LATIN CAPITAL LETTER D WITH HOOK +018B:LATIN CAPITAL LETTER D WITH TOPBAR +018C:LATIN SMALL LETTER D WITH TOPBAR +018D:LATIN SMALL LETTER TURNED DELTA +018E:LATIN CAPITAL LETTER REVERSED E +018F:LATIN CAPITAL LETTER SCHWA +0190:LATIN CAPITAL LETTER OPEN E +0191:LATIN CAPITAL LETTER F WITH HOOK +0192:LATIN SMALL LETTER F WITH HOOK +0193:LATIN CAPITAL LETTER G WITH HOOK +0194:LATIN CAPITAL LETTER GAMMA +0195:LATIN SMALL LETTER HV +0196:LATIN CAPITAL LETTER IOTA +0197:LATIN CAPITAL LETTER I WITH STROKE +0198:LATIN CAPITAL LETTER K WITH HOOK +0199:LATIN SMALL LETTER K WITH HOOK +019A:LATIN SMALL LETTER L WITH BAR +019B:LATIN SMALL LETTER LAMBDA WITH STROKE +019C:LATIN CAPITAL LETTER TURNED M +019D:LATIN CAPITAL LETTER N WITH LEFT HOOK +019E:LATIN SMALL LETTER N WITH LONG RIGHT LEG +019F:LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0:LATIN CAPITAL LETTER O WITH HORN +01A1:LATIN SMALL LETTER O WITH HORN +01A2:LATIN CAPITAL LETTER OI +01A3:LATIN SMALL LETTER OI +01A4:LATIN CAPITAL LETTER P WITH HOOK +01A5:LATIN SMALL LETTER P WITH HOOK +01A6:LATIN LETTER YR +01A7:LATIN CAPITAL LETTER TONE TWO +01A8:LATIN SMALL LETTER TONE TWO +01A9:LATIN CAPITAL LETTER ESH +01AA:LATIN LETTER REVERSED ESH LOOP +01AB:LATIN SMALL LETTER T WITH PALATAL HOOK +01AC:LATIN CAPITAL LETTER T WITH HOOK +01AD:LATIN SMALL LETTER T WITH HOOK +01AE:LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF:LATIN CAPITAL LETTER U WITH HORN +01B0:LATIN SMALL LETTER U WITH HORN +01B1:LATIN CAPITAL LETTER UPSILON +01B2:LATIN CAPITAL LETTER V WITH HOOK +01B3:LATIN CAPITAL LETTER Y WITH HOOK +01B4:LATIN SMALL LETTER Y WITH HOOK +01B5:LATIN CAPITAL LETTER Z WITH STROKE +01B6:LATIN SMALL LETTER Z WITH STROKE +01B7:LATIN CAPITAL LETTER EZH +01B8:LATIN CAPITAL LETTER EZH REVERSED +01B9:LATIN SMALL LETTER EZH REVERSED +01BA:LATIN SMALL LETTER EZH WITH TAIL +01BB:LATIN LETTER TWO WITH STROKE +01BC:LATIN CAPITAL LETTER TONE FIVE +01BD:LATIN SMALL LETTER TONE FIVE +01BE:LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE +01BF:LATIN LETTER WYNN +01C0:LATIN LETTER DENTAL CLICK +01C1:LATIN LETTER LATERAL CLICK +01C2:LATIN LETTER ALVEOLAR CLICK +01C3:LATIN LETTER RETROFLEX CLICK +01C4:LATIN CAPITAL LETTER DZ WITH CARON +01C5:LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C6:LATIN SMALL LETTER DZ WITH CARON +01C7:LATIN CAPITAL LETTER LJ +01C8:LATIN CAPITAL LETTER L WITH SMALL LETTER J +01C9:LATIN SMALL LETTER LJ +01CA:LATIN CAPITAL LETTER NJ +01CB:LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CC:LATIN SMALL LETTER NJ +01CD:LATIN CAPITAL LETTER A WITH CARON +01CE:LATIN SMALL LETTER A WITH CARON +01CF:LATIN CAPITAL LETTER I WITH CARON +01D0:LATIN SMALL LETTER I WITH CARON +01D1:LATIN CAPITAL LETTER O WITH CARON +01D2:LATIN SMALL LETTER O WITH CARON +01D3:LATIN CAPITAL LETTER U WITH CARON +01D4:LATIN SMALL LETTER U WITH CARON +01D5:LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D6:LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D7:LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D8:LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D9:LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DA:LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DB:LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DC:LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DD:LATIN SMALL LETTER TURNED E +01DE:LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01DF:LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E0:LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E1:LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E2:LATIN CAPITAL LETTER AE WITH MACRON +01E3:LATIN SMALL LETTER AE WITH MACRON +01E4:LATIN CAPITAL LETTER G WITH STROKE +01E5:LATIN SMALL LETTER G WITH STROKE +01E6:LATIN CAPITAL LETTER G WITH CARON +01E7:LATIN SMALL LETTER G WITH CARON +01E8:LATIN CAPITAL LETTER K WITH CARON +01E9:LATIN SMALL LETTER K WITH CARON +01EA:LATIN CAPITAL LETTER O WITH OGONEK +01EB:LATIN SMALL LETTER O WITH OGONEK +01EC:LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01ED:LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EE:LATIN CAPITAL LETTER EZH WITH CARON +01EF:LATIN SMALL LETTER EZH WITH CARON +01F0:LATIN SMALL LETTER J WITH CARON +01F1:LATIN CAPITAL LETTER DZ +01F2:LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F3:LATIN SMALL LETTER DZ +01F4:LATIN CAPITAL LETTER G WITH ACUTE +01F5:LATIN SMALL LETTER G WITH ACUTE +01F6:LATIN CAPITAL LETTER HWAIR +01F7:LATIN CAPITAL LETTER WYNN +01F8:LATIN CAPITAL LETTER N WITH GRAVE +01F9:LATIN SMALL LETTER N WITH GRAVE +01FA:LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FB:LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FC:LATIN CAPITAL LETTER AE WITH ACUTE +01FD:LATIN SMALL LETTER AE WITH ACUTE +01FE:LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +01FF:LATIN SMALL LETTER O WITH STROKE AND ACUTE +0200:LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0201:LATIN SMALL LETTER A WITH DOUBLE GRAVE +0202:LATIN CAPITAL LETTER A WITH INVERTED BREVE +0203:LATIN SMALL LETTER A WITH INVERTED BREVE +0204:LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0205:LATIN SMALL LETTER E WITH DOUBLE GRAVE +0206:LATIN CAPITAL LETTER E WITH INVERTED BREVE +0207:LATIN SMALL LETTER E WITH INVERTED BREVE +0208:LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +0209:LATIN SMALL LETTER I WITH DOUBLE GRAVE +020A:LATIN CAPITAL LETTER I WITH INVERTED BREVE +020B:LATIN SMALL LETTER I WITH INVERTED BREVE +020C:LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020D:LATIN SMALL LETTER O WITH DOUBLE GRAVE +020E:LATIN CAPITAL LETTER O WITH INVERTED BREVE +020F:LATIN SMALL LETTER O WITH INVERTED BREVE +0210:LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0211:LATIN SMALL LETTER R WITH DOUBLE GRAVE +0212:LATIN CAPITAL LETTER R WITH INVERTED BREVE +0213:LATIN SMALL LETTER R WITH INVERTED BREVE +0214:LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0215:LATIN SMALL LETTER U WITH DOUBLE GRAVE +0216:LATIN CAPITAL LETTER U WITH INVERTED BREVE +0217:LATIN SMALL LETTER U WITH INVERTED BREVE +0218:LATIN CAPITAL LETTER S WITH COMMA BELOW +0219:LATIN SMALL LETTER S WITH COMMA BELOW +021A:LATIN CAPITAL LETTER T WITH COMMA BELOW +021B:LATIN SMALL LETTER T WITH COMMA BELOW +021C:LATIN CAPITAL LETTER YOGH +021D:LATIN SMALL LETTER YOGH +021E:LATIN CAPITAL LETTER H WITH CARON +021F:LATIN SMALL LETTER H WITH CARON +0222:LATIN CAPITAL LETTER OU +0223:LATIN SMALL LETTER OU +0224:LATIN CAPITAL LETTER Z WITH HOOK +0225:LATIN SMALL LETTER Z WITH HOOK +0226:LATIN CAPITAL LETTER A WITH DOT ABOVE +0227:LATIN SMALL LETTER A WITH DOT ABOVE +0228:LATIN CAPITAL LETTER E WITH CEDILLA +0229:LATIN SMALL LETTER E WITH CEDILLA +022A:LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022B:LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022C:LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022D:LATIN SMALL LETTER O WITH TILDE AND MACRON +022E:LATIN CAPITAL LETTER O WITH DOT ABOVE +022F:LATIN SMALL LETTER O WITH DOT ABOVE +0230:LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0231:LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0232:LATIN CAPITAL LETTER Y WITH MACRON +0233:LATIN SMALL LETTER Y WITH MACRON +0250:LATIN SMALL LETTER TURNED A +0251:LATIN SMALL LETTER ALPHA +0252:LATIN SMALL LETTER TURNED ALPHA +0253:LATIN SMALL LETTER B WITH HOOK +0254:LATIN SMALL LETTER OPEN O +0255:LATIN SMALL LETTER C WITH CURL +0256:LATIN SMALL LETTER D WITH TAIL +0257:LATIN SMALL LETTER D WITH HOOK +0258:LATIN SMALL LETTER REVERSED E +0259:LATIN SMALL LETTER SCHWA +025A:LATIN SMALL LETTER SCHWA WITH HOOK +025B:LATIN SMALL LETTER OPEN E +025C:LATIN SMALL LETTER REVERSED OPEN E +025D:LATIN SMALL LETTER REVERSED OPEN E WITH HOOK +025E:LATIN SMALL LETTER CLOSED REVERSED OPEN E +025F:LATIN SMALL LETTER DOTLESS J WITH STROKE +0260:LATIN SMALL LETTER G WITH HOOK +0261:LATIN SMALL LETTER SCRIPT G +0262:LATIN LETTER SMALL CAPITAL G +0263:LATIN SMALL LETTER GAMMA +0264:LATIN SMALL LETTER RAMS HORN +0265:LATIN SMALL LETTER TURNED H +0266:LATIN SMALL LETTER H WITH HOOK +0267:LATIN SMALL LETTER HENG WITH HOOK +0268:LATIN SMALL LETTER I WITH STROKE +0269:LATIN SMALL LETTER IOTA +026A:LATIN LETTER SMALL CAPITAL I +026B:LATIN SMALL LETTER L WITH MIDDLE TILDE +026C:LATIN SMALL LETTER L WITH BELT +026D:LATIN SMALL LETTER L WITH RETROFLEX HOOK +026E:LATIN SMALL LETTER LEZH +026F:LATIN SMALL LETTER TURNED M +0270:LATIN SMALL LETTER TURNED M WITH LONG LEG +0271:LATIN SMALL LETTER M WITH HOOK +0272:LATIN SMALL LETTER N WITH LEFT HOOK +0273:LATIN SMALL LETTER N WITH RETROFLEX HOOK +0274:LATIN LETTER SMALL CAPITAL N +0275:LATIN SMALL LETTER BARRED O +0276:LATIN LETTER SMALL CAPITAL OE +0277:LATIN SMALL LETTER CLOSED OMEGA +0278:LATIN SMALL LETTER PHI +0279:LATIN SMALL LETTER TURNED R +027A:LATIN SMALL LETTER TURNED R WITH LONG LEG +027B:LATIN SMALL LETTER TURNED R WITH HOOK +027C:LATIN SMALL LETTER R WITH LONG LEG +027D:LATIN SMALL LETTER R WITH TAIL +027E:LATIN SMALL LETTER R WITH FISHHOOK +027F:LATIN SMALL LETTER REVERSED R WITH FISHHOOK +0280:LATIN LETTER SMALL CAPITAL R +0281:LATIN LETTER SMALL CAPITAL INVERTED R +0282:LATIN SMALL LETTER S WITH HOOK +0283:LATIN SMALL LETTER ESH +0284:LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK +0285:LATIN SMALL LETTER SQUAT REVERSED ESH +0286:LATIN SMALL LETTER ESH WITH CURL +0287:LATIN SMALL LETTER TURNED T +0288:LATIN SMALL LETTER T WITH RETROFLEX HOOK +0289:LATIN SMALL LETTER U BAR +028A:LATIN SMALL LETTER UPSILON +028B:LATIN SMALL LETTER V WITH HOOK +028C:LATIN SMALL LETTER TURNED V +028D:LATIN SMALL LETTER TURNED W +028E:LATIN SMALL LETTER TURNED Y +028F:LATIN LETTER SMALL CAPITAL Y +0290:LATIN SMALL LETTER Z WITH RETROFLEX HOOK +0291:LATIN SMALL LETTER Z WITH CURL +0292:LATIN SMALL LETTER EZH +0293:LATIN SMALL LETTER EZH WITH CURL +0294:LATIN LETTER GLOTTAL STOP +0295:LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296:LATIN LETTER INVERTED GLOTTAL STOP +0297:LATIN LETTER STRETCHED C +0298:LATIN LETTER BILABIAL CLICK +0299:LATIN LETTER SMALL CAPITAL B +029A:LATIN SMALL LETTER CLOSED OPEN E +029B:LATIN LETTER SMALL CAPITAL G WITH HOOK +029C:LATIN LETTER SMALL CAPITAL H +029D:LATIN SMALL LETTER J WITH CROSSED-TAIL +029E:LATIN SMALL LETTER TURNED K +029F:LATIN LETTER SMALL CAPITAL L +02A0:LATIN SMALL LETTER Q WITH HOOK +02A1:LATIN LETTER GLOTTAL STOP WITH STROKE +02A2:LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE +02A3:LATIN SMALL LETTER DZ DIGRAPH +02A4:LATIN SMALL LETTER DEZH DIGRAPH +02A5:LATIN SMALL LETTER DZ DIGRAPH WITH CURL +02A6:LATIN SMALL LETTER TS DIGRAPH +02A7:LATIN SMALL LETTER TESH DIGRAPH +02A8:LATIN SMALL LETTER TC DIGRAPH WITH CURL +02A9:LATIN SMALL LETTER FENG DIGRAPH +02AA:LATIN SMALL LETTER LS DIGRAPH +02AB:LATIN SMALL LETTER LZ DIGRAPH +02AC:LATIN LETTER BILABIAL PERCUSSIVE +02AD:LATIN LETTER BIDENTAL PERCUSSIVE +02B0:MODIFIER LETTER SMALL H +02B1:MODIFIER LETTER SMALL H WITH HOOK +02B2:MODIFIER LETTER SMALL J +02B3:MODIFIER LETTER SMALL R +02B4:MODIFIER LETTER SMALL TURNED R +02B5:MODIFIER LETTER SMALL TURNED R WITH HOOK +02B6:MODIFIER LETTER SMALL CAPITAL INVERTED R +02B7:MODIFIER LETTER SMALL W +02B8:MODIFIER LETTER SMALL Y +02B9:MODIFIER LETTER PRIME +02BA:MODIFIER LETTER DOUBLE PRIME +02BB:MODIFIER LETTER TURNED COMMA +02BC:MODIFIER LETTER APOSTROPHE +02BD:MODIFIER LETTER REVERSED COMMA +02BE:MODIFIER LETTER RIGHT HALF RING +02BF:MODIFIER LETTER LEFT HALF RING +02C0:MODIFIER LETTER GLOTTAL STOP +02C1:MODIFIER LETTER REVERSED GLOTTAL STOP +02C2:MODIFIER LETTER LEFT ARROWHEAD +02C3:MODIFIER LETTER RIGHT ARROWHEAD +02C4:MODIFIER LETTER UP ARROWHEAD +02C5:MODIFIER LETTER DOWN ARROWHEAD +02C6:MODIFIER LETTER CIRCUMFLEX ACCENT +02C7:CARON +02C8:MODIFIER LETTER VERTICAL LINE +02C9:MODIFIER LETTER MACRON +02CA:MODIFIER LETTER ACUTE ACCENT +02CB:MODIFIER LETTER GRAVE ACCENT +02CC:MODIFIER LETTER LOW VERTICAL LINE +02CD:MODIFIER LETTER LOW MACRON +02CE:MODIFIER LETTER LOW GRAVE ACCENT +02CF:MODIFIER LETTER LOW ACUTE ACCENT +02D0:MODIFIER LETTER TRIANGULAR COLON +02D1:MODIFIER LETTER HALF TRIANGULAR COLON +02D2:MODIFIER LETTER CENTRED RIGHT HALF RING +02D3:MODIFIER LETTER CENTRED LEFT HALF RING +02D4:MODIFIER LETTER UP TACK +02D5:MODIFIER LETTER DOWN TACK +02D6:MODIFIER LETTER PLUS SIGN +02D7:MODIFIER LETTER MINUS SIGN +02D8:BREVE +02D9:DOT ABOVE +02DA:RING ABOVE +02DB:OGONEK +02DC:SMALL TILDE +02DD:DOUBLE ACUTE ACCENT +02DE:MODIFIER LETTER RHOTIC HOOK +02DF:MODIFIER LETTER CROSS ACCENT +02E0:MODIFIER LETTER SMALL GAMMA +02E1:MODIFIER LETTER SMALL L +02E2:MODIFIER LETTER SMALL S +02E3:MODIFIER LETTER SMALL X +02E4:MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02E5:MODIFIER LETTER EXTRA-HIGH TONE BAR +02E6:MODIFIER LETTER HIGH TONE BAR +02E7:MODIFIER LETTER MID TONE BAR +02E8:MODIFIER LETTER LOW TONE BAR +02E9:MODIFIER LETTER EXTRA-LOW TONE BAR +02EA:MODIFIER LETTER YIN DEPARTING TONE MARK +02EB:MODIFIER LETTER YANG DEPARTING TONE MARK +02EC:MODIFIER LETTER VOICING +02ED:MODIFIER LETTER UNASPIRATED +02EE:MODIFIER LETTER DOUBLE APOSTROPHE +0300:COMBINING GRAVE ACCENT +0301:COMBINING ACUTE ACCENT +0302:COMBINING CIRCUMFLEX ACCENT +0303:COMBINING TILDE +0304:COMBINING MACRON +0305:COMBINING OVERLINE +0306:COMBINING BREVE +0307:COMBINING DOT ABOVE +0308:COMBINING DIAERESIS +0309:COMBINING HOOK ABOVE +030A:COMBINING RING ABOVE +030B:COMBINING DOUBLE ACUTE ACCENT +030C:COMBINING CARON +030D:COMBINING VERTICAL LINE ABOVE +030E:COMBINING DOUBLE VERTICAL LINE ABOVE +030F:COMBINING DOUBLE GRAVE ACCENT +0310:COMBINING CANDRABINDU +0311:COMBINING INVERTED BREVE +0312:COMBINING TURNED COMMA ABOVE +0313:COMBINING COMMA ABOVE +0314:COMBINING REVERSED COMMA ABOVE +0315:COMBINING COMMA ABOVE RIGHT +0316:COMBINING GRAVE ACCENT BELOW +0317:COMBINING ACUTE ACCENT BELOW +0318:COMBINING LEFT TACK BELOW +0319:COMBINING RIGHT TACK BELOW +031A:COMBINING LEFT ANGLE ABOVE +031B:COMBINING HORN +031C:COMBINING LEFT HALF RING BELOW +031D:COMBINING UP TACK BELOW +031E:COMBINING DOWN TACK BELOW +031F:COMBINING PLUS SIGN BELOW +0320:COMBINING MINUS SIGN BELOW +0321:COMBINING PALATALIZED HOOK BELOW +0322:COMBINING RETROFLEX HOOK BELOW +0323:COMBINING DOT BELOW +0324:COMBINING DIAERESIS BELOW +0325:COMBINING RING BELOW +0326:COMBINING COMMA BELOW +0327:COMBINING CEDILLA +0328:COMBINING OGONEK +0329:COMBINING VERTICAL LINE BELOW +032A:COMBINING BRIDGE BELOW +032B:COMBINING INVERTED DOUBLE ARCH BELOW +032C:COMBINING CARON BELOW +032D:COMBINING CIRCUMFLEX ACCENT BELOW +032E:COMBINING BREVE BELOW +032F:COMBINING INVERTED BREVE BELOW +0330:COMBINING TILDE BELOW +0331:COMBINING MACRON BELOW +0332:COMBINING LOW LINE +0333:COMBINING DOUBLE LOW LINE +0334:COMBINING TILDE OVERLAY +0335:COMBINING SHORT STROKE OVERLAY +0336:COMBINING LONG STROKE OVERLAY +0337:COMBINING SHORT SOLIDUS OVERLAY +0338:COMBINING LONG SOLIDUS OVERLAY +0339:COMBINING RIGHT HALF RING BELOW +033A:COMBINING INVERTED BRIDGE BELOW +033B:COMBINING SQUARE BELOW +033C:COMBINING SEAGULL BELOW +033D:COMBINING X ABOVE +033E:COMBINING VERTICAL TILDE +033F:COMBINING DOUBLE OVERLINE +0340:COMBINING GRAVE TONE MARK +0341:COMBINING ACUTE TONE MARK +0342:COMBINING GREEK PERISPOMENI +0343:COMBINING GREEK KORONIS +0344:COMBINING GREEK DIALYTIKA TONOS +0345:COMBINING GREEK YPOGEGRAMMENI +0346:COMBINING BRIDGE ABOVE +0347:COMBINING EQUALS SIGN BELOW +0348:COMBINING DOUBLE VERTICAL LINE BELOW +0349:COMBINING LEFT ANGLE BELOW +034A:COMBINING NOT TILDE ABOVE +034B:COMBINING HOMOTHETIC ABOVE +034C:COMBINING ALMOST EQUAL TO ABOVE +034D:COMBINING LEFT RIGHT ARROW BELOW +034E:COMBINING UPWARDS ARROW BELOW +0360:COMBINING DOUBLE TILDE +0361:COMBINING DOUBLE INVERTED BREVE +0362:COMBINING DOUBLE RIGHTWARDS ARROW BELOW +0374:GREEK NUMERAL SIGN +0375:GREEK LOWER NUMERAL SIGN +037A:GREEK YPOGEGRAMMENI +037E:GREEK QUESTION MARK +0384:GREEK TONOS +0385:GREEK DIALYTIKA TONOS +0386:GREEK CAPITAL LETTER ALPHA WITH TONOS +0387:GREEK ANO TELEIA +0388:GREEK CAPITAL LETTER EPSILON WITH TONOS +0389:GREEK CAPITAL LETTER ETA WITH TONOS +038A:GREEK CAPITAL LETTER IOTA WITH TONOS +038C:GREEK CAPITAL LETTER OMICRON WITH TONOS +038E:GREEK CAPITAL LETTER UPSILON WITH TONOS +038F:GREEK CAPITAL LETTER OMEGA WITH TONOS +0390:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391:GREEK CAPITAL LETTER ALPHA +0392:GREEK CAPITAL LETTER BETA +0393:GREEK CAPITAL LETTER GAMMA +0394:GREEK CAPITAL LETTER DELTA +0395:GREEK CAPITAL LETTER EPSILON +0396:GREEK CAPITAL LETTER ZETA +0397:GREEK CAPITAL LETTER ETA +0398:GREEK CAPITAL LETTER THETA +0399:GREEK CAPITAL LETTER IOTA +039A:GREEK CAPITAL LETTER KAPPA +039B:GREEK CAPITAL LETTER LAMDA +039C:GREEK CAPITAL LETTER MU +039D:GREEK CAPITAL LETTER NU +039E:GREEK CAPITAL LETTER XI +039F:GREEK CAPITAL LETTER OMICRON +03A0:GREEK CAPITAL LETTER PI +03A1:GREEK CAPITAL LETTER RHO +03A3:GREEK CAPITAL LETTER SIGMA +03A4:GREEK CAPITAL LETTER TAU +03A5:GREEK CAPITAL LETTER UPSILON +03A6:GREEK CAPITAL LETTER PHI +03A7:GREEK CAPITAL LETTER CHI +03A8:GREEK CAPITAL LETTER PSI +03A9:GREEK CAPITAL LETTER OMEGA +03AA:GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB:GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03AC:GREEK SMALL LETTER ALPHA WITH TONOS +03AD:GREEK SMALL LETTER EPSILON WITH TONOS +03AE:GREEK SMALL LETTER ETA WITH TONOS +03AF:GREEK SMALL LETTER IOTA WITH TONOS +03B0:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03B1:GREEK SMALL LETTER ALPHA +03B2:GREEK SMALL LETTER BETA +03B3:GREEK SMALL LETTER GAMMA +03B4:GREEK SMALL LETTER DELTA +03B5:GREEK SMALL LETTER EPSILON +03B6:GREEK SMALL LETTER ZETA +03B7:GREEK SMALL LETTER ETA +03B8:GREEK SMALL LETTER THETA +03B9:GREEK SMALL LETTER IOTA +03BA:GREEK SMALL LETTER KAPPA +03BB:GREEK SMALL LETTER LAMDA +03BC:GREEK SMALL LETTER MU +03BD:GREEK SMALL LETTER NU +03BE:GREEK SMALL LETTER XI +03BF:GREEK SMALL LETTER OMICRON +03C0:GREEK SMALL LETTER PI +03C1:GREEK SMALL LETTER RHO +03C2:GREEK SMALL LETTER FINAL SIGMA +03C3:GREEK SMALL LETTER SIGMA +03C4:GREEK SMALL LETTER TAU +03C5:GREEK SMALL LETTER UPSILON +03C6:GREEK SMALL LETTER PHI +03C7:GREEK SMALL LETTER CHI +03C8:GREEK SMALL LETTER PSI +03C9:GREEK SMALL LETTER OMEGA +03CA:GREEK SMALL LETTER IOTA WITH DIALYTIKA +03CB:GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03CC:GREEK SMALL LETTER OMICRON WITH TONOS +03CD:GREEK SMALL LETTER UPSILON WITH TONOS +03CE:GREEK SMALL LETTER OMEGA WITH TONOS +03D0:GREEK BETA SYMBOL +03D1:GREEK THETA SYMBOL +03D2:GREEK UPSILON WITH HOOK SYMBOL +03D3:GREEK UPSILON WITH ACUTE AND HOOK SYMBOL +03D4:GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03D5:GREEK PHI SYMBOL +03D6:GREEK PI SYMBOL +03D7:GREEK KAI SYMBOL +03DA:GREEK LETTER STIGMA +03DB:GREEK SMALL LETTER STIGMA +03DC:GREEK LETTER DIGAMMA +03DD:GREEK SMALL LETTER DIGAMMA +03DE:GREEK LETTER KOPPA +03DF:GREEK SMALL LETTER KOPPA +03E0:GREEK LETTER SAMPI +03E1:GREEK SMALL LETTER SAMPI +03E2:COPTIC CAPITAL LETTER SHEI +03E3:COPTIC SMALL LETTER SHEI +03E4:COPTIC CAPITAL LETTER FEI +03E5:COPTIC SMALL LETTER FEI +03E6:COPTIC CAPITAL LETTER KHEI +03E7:COPTIC SMALL LETTER KHEI +03E8:COPTIC CAPITAL LETTER HORI +03E9:COPTIC SMALL LETTER HORI +03EA:COPTIC CAPITAL LETTER GANGIA +03EB:COPTIC SMALL LETTER GANGIA +03EC:COPTIC CAPITAL LETTER SHIMA +03ED:COPTIC SMALL LETTER SHIMA +03EE:COPTIC CAPITAL LETTER DEI +03EF:COPTIC SMALL LETTER DEI +03F0:GREEK KAPPA SYMBOL +03F1:GREEK RHO SYMBOL +03F2:GREEK LUNATE SIGMA SYMBOL +03F3:GREEK LETTER YOT +0400:CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401:CYRILLIC CAPITAL LETTER IO +0402:CYRILLIC CAPITAL LETTER DJE +0403:CYRILLIC CAPITAL LETTER GJE +0404:CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405:CYRILLIC CAPITAL LETTER DZE +0406:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407:CYRILLIC CAPITAL LETTER YI +0408:CYRILLIC CAPITAL LETTER JE +0409:CYRILLIC CAPITAL LETTER LJE +040A:CYRILLIC CAPITAL LETTER NJE +040B:CYRILLIC CAPITAL LETTER TSHE +040C:CYRILLIC CAPITAL LETTER KJE +040D:CYRILLIC CAPITAL LETTER I WITH GRAVE +040E:CYRILLIC CAPITAL LETTER SHORT U +040F:CYRILLIC CAPITAL LETTER DZHE +0410:CYRILLIC CAPITAL LETTER A +0411:CYRILLIC CAPITAL LETTER BE +0412:CYRILLIC CAPITAL LETTER VE +0413:CYRILLIC CAPITAL LETTER GHE +0414:CYRILLIC CAPITAL LETTER DE +0415:CYRILLIC CAPITAL LETTER IE +0416:CYRILLIC CAPITAL LETTER ZHE +0417:CYRILLIC CAPITAL LETTER ZE +0418:CYRILLIC CAPITAL LETTER I +0419:CYRILLIC CAPITAL LETTER SHORT I +041A:CYRILLIC CAPITAL LETTER KA +041B:CYRILLIC CAPITAL LETTER EL +041C:CYRILLIC CAPITAL LETTER EM +041D:CYRILLIC CAPITAL LETTER EN +041E:CYRILLIC CAPITAL LETTER O +041F:CYRILLIC CAPITAL LETTER PE +0420:CYRILLIC CAPITAL LETTER ER +0421:CYRILLIC CAPITAL LETTER ES +0422:CYRILLIC CAPITAL LETTER TE +0423:CYRILLIC CAPITAL LETTER U +0424:CYRILLIC CAPITAL LETTER EF +0425:CYRILLIC CAPITAL LETTER HA +0426:CYRILLIC CAPITAL LETTER TSE +0427:CYRILLIC CAPITAL LETTER CHE +0428:CYRILLIC CAPITAL LETTER SHA +0429:CYRILLIC CAPITAL LETTER SHCHA +042A:CYRILLIC CAPITAL LETTER HARD SIGN +042B:CYRILLIC CAPITAL LETTER YERU +042C:CYRILLIC CAPITAL LETTER SOFT SIGN +042D:CYRILLIC CAPITAL LETTER E +042E:CYRILLIC CAPITAL LETTER YU +042F:CYRILLIC CAPITAL LETTER YA +0430:CYRILLIC SMALL LETTER A +0431:CYRILLIC SMALL LETTER BE +0432:CYRILLIC SMALL LETTER VE +0433:CYRILLIC SMALL LETTER GHE +0434:CYRILLIC SMALL LETTER DE +0435:CYRILLIC SMALL LETTER IE +0436:CYRILLIC SMALL LETTER ZHE +0437:CYRILLIC SMALL LETTER ZE +0438:CYRILLIC SMALL LETTER I +0439:CYRILLIC SMALL LETTER SHORT I +043A:CYRILLIC SMALL LETTER KA +043B:CYRILLIC SMALL LETTER EL +043C:CYRILLIC SMALL LETTER EM +043D:CYRILLIC SMALL LETTER EN +043E:CYRILLIC SMALL LETTER O +043F:CYRILLIC SMALL LETTER PE +0440:CYRILLIC SMALL LETTER ER +0441:CYRILLIC SMALL LETTER ES +0442:CYRILLIC SMALL LETTER TE +0443:CYRILLIC SMALL LETTER U +0444:CYRILLIC SMALL LETTER EF +0445:CYRILLIC SMALL LETTER HA +0446:CYRILLIC SMALL LETTER TSE +0447:CYRILLIC SMALL LETTER CHE +0448:CYRILLIC SMALL LETTER SHA +0449:CYRILLIC SMALL LETTER SHCHA +044A:CYRILLIC SMALL LETTER HARD SIGN +044B:CYRILLIC SMALL LETTER YERU +044C:CYRILLIC SMALL LETTER SOFT SIGN +044D:CYRILLIC SMALL LETTER E +044E:CYRILLIC SMALL LETTER YU +044F:CYRILLIC SMALL LETTER YA +0450:CYRILLIC SMALL LETTER IE WITH GRAVE +0451:CYRILLIC SMALL LETTER IO +0452:CYRILLIC SMALL LETTER DJE +0453:CYRILLIC SMALL LETTER GJE +0454:CYRILLIC SMALL LETTER UKRAINIAN IE +0455:CYRILLIC SMALL LETTER DZE +0456:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0457:CYRILLIC SMALL LETTER YI +0458:CYRILLIC SMALL LETTER JE +0459:CYRILLIC SMALL LETTER LJE +045A:CYRILLIC SMALL LETTER NJE +045B:CYRILLIC SMALL LETTER TSHE +045C:CYRILLIC SMALL LETTER KJE +045D:CYRILLIC SMALL LETTER I WITH GRAVE +045E:CYRILLIC SMALL LETTER SHORT U +045F:CYRILLIC SMALL LETTER DZHE +0460:CYRILLIC CAPITAL LETTER OMEGA +0461:CYRILLIC SMALL LETTER OMEGA +0462:CYRILLIC CAPITAL LETTER YAT +0463:CYRILLIC SMALL LETTER YAT +0464:CYRILLIC CAPITAL LETTER IOTIFIED E +0465:CYRILLIC SMALL LETTER IOTIFIED E +0466:CYRILLIC CAPITAL LETTER LITTLE YUS +0467:CYRILLIC SMALL LETTER LITTLE YUS +0468:CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +0469:CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +046A:CYRILLIC CAPITAL LETTER BIG YUS +046B:CYRILLIC SMALL LETTER BIG YUS +046C:CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046D:CYRILLIC SMALL LETTER IOTIFIED BIG YUS +046E:CYRILLIC CAPITAL LETTER KSI +046F:CYRILLIC SMALL LETTER KSI +0470:CYRILLIC CAPITAL LETTER PSI +0471:CYRILLIC SMALL LETTER PSI +0472:CYRILLIC CAPITAL LETTER FITA +0473:CYRILLIC SMALL LETTER FITA +0474:CYRILLIC CAPITAL LETTER IZHITSA +0475:CYRILLIC SMALL LETTER IZHITSA +0476:CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0477:CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478:CYRILLIC CAPITAL LETTER UK +0479:CYRILLIC SMALL LETTER UK +047A:CYRILLIC CAPITAL LETTER ROUND OMEGA +047B:CYRILLIC SMALL LETTER ROUND OMEGA +047C:CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047D:CYRILLIC SMALL LETTER OMEGA WITH TITLO +047E:CYRILLIC CAPITAL LETTER OT +047F:CYRILLIC SMALL LETTER OT +0480:CYRILLIC CAPITAL LETTER KOPPA +0481:CYRILLIC SMALL LETTER KOPPA +0482:CYRILLIC THOUSANDS SIGN +0483:COMBINING CYRILLIC TITLO +0484:COMBINING CYRILLIC PALATALIZATION +0485:COMBINING CYRILLIC DASIA PNEUMATA +0486:COMBINING CYRILLIC PSILI PNEUMATA +0488:COMBINING CYRILLIC HUNDRED THOUSANDS SIGN +0489:COMBINING CYRILLIC MILLIONS SIGN +048C:CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048D:CYRILLIC SMALL LETTER SEMISOFT SIGN +048E:CYRILLIC CAPITAL LETTER ER WITH TICK +048F:CYRILLIC SMALL LETTER ER WITH TICK +0490:CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0491:CYRILLIC SMALL LETTER GHE WITH UPTURN +0492:CYRILLIC CAPITAL LETTER GHE WITH STROKE +0493:CYRILLIC SMALL LETTER GHE WITH STROKE +0494:CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0495:CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0496:CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0497:CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0498:CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +0499:CYRILLIC SMALL LETTER ZE WITH DESCENDER +049A:CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049B:CYRILLIC SMALL LETTER KA WITH DESCENDER +049C:CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049D:CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049E:CYRILLIC CAPITAL LETTER KA WITH STROKE +049F:CYRILLIC SMALL LETTER KA WITH STROKE +04A0:CYRILLIC CAPITAL LETTER BASHKIR KA +04A1:CYRILLIC SMALL LETTER BASHKIR KA +04A2:CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A3:CYRILLIC SMALL LETTER EN WITH DESCENDER +04A4:CYRILLIC CAPITAL LIGATURE EN GHE +04A5:CYRILLIC SMALL LIGATURE EN GHE +04A6:CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A7:CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A8:CYRILLIC CAPITAL LETTER ABKHASIAN HA +04A9:CYRILLIC SMALL LETTER ABKHASIAN HA +04AA:CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AB:CYRILLIC SMALL LETTER ES WITH DESCENDER +04AC:CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AD:CYRILLIC SMALL LETTER TE WITH DESCENDER +04AE:CYRILLIC CAPITAL LETTER STRAIGHT U +04AF:CYRILLIC SMALL LETTER STRAIGHT U +04B0:CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B1:CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B2:CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B3:CYRILLIC SMALL LETTER HA WITH DESCENDER +04B4:CYRILLIC CAPITAL LIGATURE TE TSE +04B5:CYRILLIC SMALL LIGATURE TE TSE +04B6:CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B7:CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B8:CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04B9:CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BA:CYRILLIC CAPITAL LETTER SHHA +04BB:CYRILLIC SMALL LETTER SHHA +04BC:CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BD:CYRILLIC SMALL LETTER ABKHASIAN CHE +04BE:CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04BF:CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C0:CYRILLIC LETTER PALOCHKA +04C1:CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C2:CYRILLIC SMALL LETTER ZHE WITH BREVE +04C3:CYRILLIC CAPITAL LETTER KA WITH HOOK +04C4:CYRILLIC SMALL LETTER KA WITH HOOK +04C7:CYRILLIC CAPITAL LETTER EN WITH HOOK +04C8:CYRILLIC SMALL LETTER EN WITH HOOK +04CB:CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CC:CYRILLIC SMALL LETTER KHAKASSIAN CHE +04D0:CYRILLIC CAPITAL LETTER A WITH BREVE +04D1:CYRILLIC SMALL LETTER A WITH BREVE +04D2:CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D3:CYRILLIC SMALL LETTER A WITH DIAERESIS +04D4:CYRILLIC CAPITAL LIGATURE A IE +04D5:CYRILLIC SMALL LIGATURE A IE +04D6:CYRILLIC CAPITAL LETTER IE WITH BREVE +04D7:CYRILLIC SMALL LETTER IE WITH BREVE +04D8:CYRILLIC CAPITAL LETTER SCHWA +04D9:CYRILLIC SMALL LETTER SCHWA +04DA:CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DB:CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DC:CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DD:CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DE:CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04DF:CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E0:CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E1:CYRILLIC SMALL LETTER ABKHASIAN DZE +04E2:CYRILLIC CAPITAL LETTER I WITH MACRON +04E3:CYRILLIC SMALL LETTER I WITH MACRON +04E4:CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E5:CYRILLIC SMALL LETTER I WITH DIAERESIS +04E6:CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E7:CYRILLIC SMALL LETTER O WITH DIAERESIS +04E8:CYRILLIC CAPITAL LETTER BARRED O +04E9:CYRILLIC SMALL LETTER BARRED O +04EA:CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EB:CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04EC:CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04ED:CYRILLIC SMALL LETTER E WITH DIAERESIS +04EE:CYRILLIC CAPITAL LETTER U WITH MACRON +04EF:CYRILLIC SMALL LETTER U WITH MACRON +04F0:CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F1:CYRILLIC SMALL LETTER U WITH DIAERESIS +04F2:CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F3:CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F4:CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F5:CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F8:CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04F9:CYRILLIC SMALL LETTER YERU WITH DIAERESIS +0531:ARMENIAN CAPITAL LETTER AYB +0532:ARMENIAN CAPITAL LETTER BEN +0533:ARMENIAN CAPITAL LETTER GIM +0534:ARMENIAN CAPITAL LETTER DA +0535:ARMENIAN CAPITAL LETTER ECH +0536:ARMENIAN CAPITAL LETTER ZA +0537:ARMENIAN CAPITAL LETTER EH +0538:ARMENIAN CAPITAL LETTER ET +0539:ARMENIAN CAPITAL LETTER TO +053A:ARMENIAN CAPITAL LETTER ZHE +053B:ARMENIAN CAPITAL LETTER INI +053C:ARMENIAN CAPITAL LETTER LIWN +053D:ARMENIAN CAPITAL LETTER XEH +053E:ARMENIAN CAPITAL LETTER CA +053F:ARMENIAN CAPITAL LETTER KEN +0540:ARMENIAN CAPITAL LETTER HO +0541:ARMENIAN CAPITAL LETTER JA +0542:ARMENIAN CAPITAL LETTER GHAD +0543:ARMENIAN CAPITAL LETTER CHEH +0544:ARMENIAN CAPITAL LETTER MEN +0545:ARMENIAN CAPITAL LETTER YI +0546:ARMENIAN CAPITAL LETTER NOW +0547:ARMENIAN CAPITAL LETTER SHA +0548:ARMENIAN CAPITAL LETTER VO +0549:ARMENIAN CAPITAL LETTER CHA +054A:ARMENIAN CAPITAL LETTER PEH +054B:ARMENIAN CAPITAL LETTER JHEH +054C:ARMENIAN CAPITAL LETTER RA +054D:ARMENIAN CAPITAL LETTER SEH +054E:ARMENIAN CAPITAL LETTER VEW +054F:ARMENIAN CAPITAL LETTER TIWN +0550:ARMENIAN CAPITAL LETTER REH +0551:ARMENIAN CAPITAL LETTER CO +0552:ARMENIAN CAPITAL LETTER YIWN +0553:ARMENIAN CAPITAL LETTER PIWR +0554:ARMENIAN CAPITAL LETTER KEH +0555:ARMENIAN CAPITAL LETTER OH +0556:ARMENIAN CAPITAL LETTER FEH +0559:ARMENIAN MODIFIER LETTER LEFT HALF RING +055A:ARMENIAN APOSTROPHE +055B:ARMENIAN EMPHASIS MARK +055C:ARMENIAN EXCLAMATION MARK +055D:ARMENIAN COMMA +055E:ARMENIAN QUESTION MARK +055F:ARMENIAN ABBREVIATION MARK +0561:ARMENIAN SMALL LETTER AYB +0562:ARMENIAN SMALL LETTER BEN +0563:ARMENIAN SMALL LETTER GIM +0564:ARMENIAN SMALL LETTER DA +0565:ARMENIAN SMALL LETTER ECH +0566:ARMENIAN SMALL LETTER ZA +0567:ARMENIAN SMALL LETTER EH +0568:ARMENIAN SMALL LETTER ET +0569:ARMENIAN SMALL LETTER TO +056A:ARMENIAN SMALL LETTER ZHE +056B:ARMENIAN SMALL LETTER INI +056C:ARMENIAN SMALL LETTER LIWN +056D:ARMENIAN SMALL LETTER XEH +056E:ARMENIAN SMALL LETTER CA +056F:ARMENIAN SMALL LETTER KEN +0570:ARMENIAN SMALL LETTER HO +0571:ARMENIAN SMALL LETTER JA +0572:ARMENIAN SMALL LETTER GHAD +0573:ARMENIAN SMALL LETTER CHEH +0574:ARMENIAN SMALL LETTER MEN +0575:ARMENIAN SMALL LETTER YI +0576:ARMENIAN SMALL LETTER NOW +0577:ARMENIAN SMALL LETTER SHA +0578:ARMENIAN SMALL LETTER VO +0579:ARMENIAN SMALL LETTER CHA +057A:ARMENIAN SMALL LETTER PEH +057B:ARMENIAN SMALL LETTER JHEH +057C:ARMENIAN SMALL LETTER RA +057D:ARMENIAN SMALL LETTER SEH +057E:ARMENIAN SMALL LETTER VEW +057F:ARMENIAN SMALL LETTER TIWN +0580:ARMENIAN SMALL LETTER REH +0581:ARMENIAN SMALL LETTER CO +0582:ARMENIAN SMALL LETTER YIWN +0583:ARMENIAN SMALL LETTER PIWR +0584:ARMENIAN SMALL LETTER KEH +0585:ARMENIAN SMALL LETTER OH +0586:ARMENIAN SMALL LETTER FEH +0587:ARMENIAN SMALL LIGATURE ECH YIWN +0589:ARMENIAN FULL STOP +058A:ARMENIAN HYPHEN +10D0:GEORGIAN LETTER AN +10D1:GEORGIAN LETTER BAN +10D2:GEORGIAN LETTER GAN +10D3:GEORGIAN LETTER DON +10D4:GEORGIAN LETTER EN +10D5:GEORGIAN LETTER VIN +10D6:GEORGIAN LETTER ZEN +10D7:GEORGIAN LETTER TAN +10D8:GEORGIAN LETTER IN +10D9:GEORGIAN LETTER KAN +10DA:GEORGIAN LETTER LAS +10DB:GEORGIAN LETTER MAN +10DC:GEORGIAN LETTER NAR +10DD:GEORGIAN LETTER ON +10DE:GEORGIAN LETTER PAR +10DF:GEORGIAN LETTER ZHAR +10E0:GEORGIAN LETTER RAE +10E1:GEORGIAN LETTER SAN +10E2:GEORGIAN LETTER TAR +10E3:GEORGIAN LETTER UN +10E4:GEORGIAN LETTER PHAR +10E5:GEORGIAN LETTER KHAR +10E6:GEORGIAN LETTER GHAN +10E7:GEORGIAN LETTER QAR +10E8:GEORGIAN LETTER SHIN +10E9:GEORGIAN LETTER CHIN +10EA:GEORGIAN LETTER CAN +10EB:GEORGIAN LETTER JIL +10EC:GEORGIAN LETTER CIL +10ED:GEORGIAN LETTER CHAR +10EE:GEORGIAN LETTER XAN +10EF:GEORGIAN LETTER JHAN +10F0:GEORGIAN LETTER HAE +10F1:GEORGIAN LETTER HE +10F2:GEORGIAN LETTER HIE +10F3:GEORGIAN LETTER WE +10F4:GEORGIAN LETTER HAR +10F5:GEORGIAN LETTER HOE +10F6:GEORGIAN LETTER FI +10FB:GEORGIAN PARAGRAPH SEPARATOR +1E00:LATIN CAPITAL LETTER A WITH RING BELOW +1E01:LATIN SMALL LETTER A WITH RING BELOW +1E02:LATIN CAPITAL LETTER B WITH DOT ABOVE +1E03:LATIN SMALL LETTER B WITH DOT ABOVE +1E04:LATIN CAPITAL LETTER B WITH DOT BELOW +1E05:LATIN SMALL LETTER B WITH DOT BELOW +1E06:LATIN CAPITAL LETTER B WITH LINE BELOW +1E07:LATIN SMALL LETTER B WITH LINE BELOW +1E08:LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E09:LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E0A:LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0B:LATIN SMALL LETTER D WITH DOT ABOVE +1E0C:LATIN CAPITAL LETTER D WITH DOT BELOW +1E0D:LATIN SMALL LETTER D WITH DOT BELOW +1E0E:LATIN CAPITAL LETTER D WITH LINE BELOW +1E0F:LATIN SMALL LETTER D WITH LINE BELOW +1E10:LATIN CAPITAL LETTER D WITH CEDILLA +1E11:LATIN SMALL LETTER D WITH CEDILLA +1E12:LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E13:LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E14:LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E15:LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E16:LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E17:LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E18:LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E19:LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E1A:LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1B:LATIN SMALL LETTER E WITH TILDE BELOW +1E1C:LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1D:LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1E:LATIN CAPITAL LETTER F WITH DOT ABOVE +1E1F:LATIN SMALL LETTER F WITH DOT ABOVE +1E20:LATIN CAPITAL LETTER G WITH MACRON +1E21:LATIN SMALL LETTER G WITH MACRON +1E22:LATIN CAPITAL LETTER H WITH DOT ABOVE +1E23:LATIN SMALL LETTER H WITH DOT ABOVE +1E24:LATIN CAPITAL LETTER H WITH DOT BELOW +1E25:LATIN SMALL LETTER H WITH DOT BELOW +1E26:LATIN CAPITAL LETTER H WITH DIAERESIS +1E27:LATIN SMALL LETTER H WITH DIAERESIS +1E28:LATIN CAPITAL LETTER H WITH CEDILLA +1E29:LATIN SMALL LETTER H WITH CEDILLA +1E2A:LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2B:LATIN SMALL LETTER H WITH BREVE BELOW +1E2C:LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2D:LATIN SMALL LETTER I WITH TILDE BELOW +1E2E:LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E2F:LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E30:LATIN CAPITAL LETTER K WITH ACUTE +1E31:LATIN SMALL LETTER K WITH ACUTE +1E32:LATIN CAPITAL LETTER K WITH DOT BELOW +1E33:LATIN SMALL LETTER K WITH DOT BELOW +1E34:LATIN CAPITAL LETTER K WITH LINE BELOW +1E35:LATIN SMALL LETTER K WITH LINE BELOW +1E36:LATIN CAPITAL LETTER L WITH DOT BELOW +1E37:LATIN SMALL LETTER L WITH DOT BELOW +1E38:LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E39:LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E3A:LATIN CAPITAL LETTER L WITH LINE BELOW +1E3B:LATIN SMALL LETTER L WITH LINE BELOW +1E3C:LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3D:LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3E:LATIN CAPITAL LETTER M WITH ACUTE +1E3F:LATIN SMALL LETTER M WITH ACUTE +1E40:LATIN CAPITAL LETTER M WITH DOT ABOVE +1E41:LATIN SMALL LETTER M WITH DOT ABOVE +1E42:LATIN CAPITAL LETTER M WITH DOT BELOW +1E43:LATIN SMALL LETTER M WITH DOT BELOW +1E44:LATIN CAPITAL LETTER N WITH DOT ABOVE +1E45:LATIN SMALL LETTER N WITH DOT ABOVE +1E46:LATIN CAPITAL LETTER N WITH DOT BELOW +1E47:LATIN SMALL LETTER N WITH DOT BELOW +1E48:LATIN CAPITAL LETTER N WITH LINE BELOW +1E49:LATIN SMALL LETTER N WITH LINE BELOW +1E4A:LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4B:LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4C:LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4D:LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4E:LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E4F:LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E50:LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E51:LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E52:LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E53:LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E54:LATIN CAPITAL LETTER P WITH ACUTE +1E55:LATIN SMALL LETTER P WITH ACUTE +1E56:LATIN CAPITAL LETTER P WITH DOT ABOVE +1E57:LATIN SMALL LETTER P WITH DOT ABOVE +1E58:LATIN CAPITAL LETTER R WITH DOT ABOVE +1E59:LATIN SMALL LETTER R WITH DOT ABOVE +1E5A:LATIN CAPITAL LETTER R WITH DOT BELOW +1E5B:LATIN SMALL LETTER R WITH DOT BELOW +1E5C:LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5D:LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5E:LATIN CAPITAL LETTER R WITH LINE BELOW +1E5F:LATIN SMALL LETTER R WITH LINE BELOW +1E60:LATIN CAPITAL LETTER S WITH DOT ABOVE +1E61:LATIN SMALL LETTER S WITH DOT ABOVE +1E62:LATIN CAPITAL LETTER S WITH DOT BELOW +1E63:LATIN SMALL LETTER S WITH DOT BELOW +1E64:LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E65:LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E66:LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E67:LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E68:LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E69:LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A:LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6B:LATIN SMALL LETTER T WITH DOT ABOVE +1E6C:LATIN CAPITAL LETTER T WITH DOT BELOW +1E6D:LATIN SMALL LETTER T WITH DOT BELOW +1E6E:LATIN CAPITAL LETTER T WITH LINE BELOW +1E6F:LATIN SMALL LETTER T WITH LINE BELOW +1E70:LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E71:LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E72:LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E73:LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E74:LATIN CAPITAL LETTER U WITH TILDE BELOW +1E75:LATIN SMALL LETTER U WITH TILDE BELOW +1E76:LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E77:LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E78:LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E79:LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E7A:LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7B:LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7C:LATIN CAPITAL LETTER V WITH TILDE +1E7D:LATIN SMALL LETTER V WITH TILDE +1E7E:LATIN CAPITAL LETTER V WITH DOT BELOW +1E7F:LATIN SMALL LETTER V WITH DOT BELOW +1E80:LATIN CAPITAL LETTER W WITH GRAVE +1E81:LATIN SMALL LETTER W WITH GRAVE +1E82:LATIN CAPITAL LETTER W WITH ACUTE +1E83:LATIN SMALL LETTER W WITH ACUTE +1E84:LATIN CAPITAL LETTER W WITH DIAERESIS +1E85:LATIN SMALL LETTER W WITH DIAERESIS +1E86:LATIN CAPITAL LETTER W WITH DOT ABOVE +1E87:LATIN SMALL LETTER W WITH DOT ABOVE +1E88:LATIN CAPITAL LETTER W WITH DOT BELOW +1E89:LATIN SMALL LETTER W WITH DOT BELOW +1E8A:LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8B:LATIN SMALL LETTER X WITH DOT ABOVE +1E8C:LATIN CAPITAL LETTER X WITH DIAERESIS +1E8D:LATIN SMALL LETTER X WITH DIAERESIS +1E8E:LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E8F:LATIN SMALL LETTER Y WITH DOT ABOVE +1E90:LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E91:LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E92:LATIN CAPITAL LETTER Z WITH DOT BELOW +1E93:LATIN SMALL LETTER Z WITH DOT BELOW +1E94:LATIN CAPITAL LETTER Z WITH LINE BELOW +1E95:LATIN SMALL LETTER Z WITH LINE BELOW +1E96:LATIN SMALL LETTER H WITH LINE BELOW +1E97:LATIN SMALL LETTER T WITH DIAERESIS +1E98:LATIN SMALL LETTER W WITH RING ABOVE +1E99:LATIN SMALL LETTER Y WITH RING ABOVE +1E9A:LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B:LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0:LATIN CAPITAL LETTER A WITH DOT BELOW +1EA1:LATIN SMALL LETTER A WITH DOT BELOW +1EA2:LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA3:LATIN SMALL LETTER A WITH HOOK ABOVE +1EA4:LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA5:LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6:LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA7:LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8:LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EA9:LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA:LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAB:LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC:LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAD:LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE:LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EAF:LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EB0:LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB1:LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB2:LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB3:LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB4:LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB5:LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB6:LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB7:LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB8:LATIN CAPITAL LETTER E WITH DOT BELOW +1EB9:LATIN SMALL LETTER E WITH DOT BELOW +1EBA:LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBB:LATIN SMALL LETTER E WITH HOOK ABOVE +1EBC:LATIN CAPITAL LETTER E WITH TILDE +1EBD:LATIN SMALL LETTER E WITH TILDE +1EBE:LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBF:LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0:LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC1:LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2:LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC3:LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4:LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC5:LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6:LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC7:LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8:LATIN CAPITAL LETTER I WITH HOOK ABOVE +1EC9:LATIN SMALL LETTER I WITH HOOK ABOVE +1ECA:LATIN CAPITAL LETTER I WITH DOT BELOW +1ECB:LATIN SMALL LETTER I WITH DOT BELOW +1ECC:LATIN CAPITAL LETTER O WITH DOT BELOW +1ECD:LATIN SMALL LETTER O WITH DOT BELOW +1ECE:LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ECF:LATIN SMALL LETTER O WITH HOOK ABOVE +1ED0:LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED1:LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2:LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED3:LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4:LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED5:LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6:LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED7:LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8:LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED9:LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA:LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDB:LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDC:LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDD:LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDE:LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EDF:LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EE0:LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE1:LATIN SMALL LETTER O WITH HORN AND TILDE +1EE2:LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE3:LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE4:LATIN CAPITAL LETTER U WITH DOT BELOW +1EE5:LATIN SMALL LETTER U WITH DOT BELOW +1EE6:LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE7:LATIN SMALL LETTER U WITH HOOK ABOVE +1EE8:LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EE9:LATIN SMALL LETTER U WITH HORN AND ACUTE +1EEA:LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEB:LATIN SMALL LETTER U WITH HORN AND GRAVE +1EEC:LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EED:LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEE:LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EEF:LATIN SMALL LETTER U WITH HORN AND TILDE +1EF0:LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF1:LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF2:LATIN CAPITAL LETTER Y WITH GRAVE +1EF3:LATIN SMALL LETTER Y WITH GRAVE +1EF4:LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF5:LATIN SMALL LETTER Y WITH DOT BELOW +1EF6:LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF7:LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF8:LATIN CAPITAL LETTER Y WITH TILDE +1EF9:LATIN SMALL LETTER Y WITH TILDE +1F00:GREEK SMALL LETTER ALPHA WITH PSILI +1F01:GREEK SMALL LETTER ALPHA WITH DASIA +1F02:GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA +1F03:GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA +1F04:GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA +1F05:GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA +1F06:GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F07:GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F08:GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09:GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A:GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B:GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C:GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D:GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E:GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F:GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F10:GREEK SMALL LETTER EPSILON WITH PSILI +1F11:GREEK SMALL LETTER EPSILON WITH DASIA +1F12:GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA +1F13:GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA +1F14:GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA +1F15:GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18:GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19:GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A:GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B:GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C:GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D:GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20:GREEK SMALL LETTER ETA WITH PSILI +1F21:GREEK SMALL LETTER ETA WITH DASIA +1F22:GREEK SMALL LETTER ETA WITH PSILI AND VARIA +1F23:GREEK SMALL LETTER ETA WITH DASIA AND VARIA +1F24:GREEK SMALL LETTER ETA WITH PSILI AND OXIA +1F25:GREEK SMALL LETTER ETA WITH DASIA AND OXIA +1F26:GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI +1F27:GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F28:GREEK CAPITAL LETTER ETA WITH PSILI +1F29:GREEK CAPITAL LETTER ETA WITH DASIA +1F2A:GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B:GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C:GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D:GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E:GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F:GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F30:GREEK SMALL LETTER IOTA WITH PSILI +1F31:GREEK SMALL LETTER IOTA WITH DASIA +1F32:GREEK SMALL LETTER IOTA WITH PSILI AND VARIA +1F33:GREEK SMALL LETTER IOTA WITH DASIA AND VARIA +1F34:GREEK SMALL LETTER IOTA WITH PSILI AND OXIA +1F35:GREEK SMALL LETTER IOTA WITH DASIA AND OXIA +1F36:GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI +1F37:GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F38:GREEK CAPITAL LETTER IOTA WITH PSILI +1F39:GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A:GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B:GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C:GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D:GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E:GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F:GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F40:GREEK SMALL LETTER OMICRON WITH PSILI +1F41:GREEK SMALL LETTER OMICRON WITH DASIA +1F42:GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA +1F43:GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA +1F44:GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA +1F45:GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48:GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49:GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A:GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B:GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C:GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D:GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50:GREEK SMALL LETTER UPSILON WITH PSILI +1F51:GREEK SMALL LETTER UPSILON WITH DASIA +1F52:GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F53:GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA +1F54:GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F55:GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA +1F56:GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F57:GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59:GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B:GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D:GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F:GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F60:GREEK SMALL LETTER OMEGA WITH PSILI +1F61:GREEK SMALL LETTER OMEGA WITH DASIA +1F62:GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA +1F63:GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA +1F64:GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA +1F65:GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA +1F66:GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F67:GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F68:GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69:GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A:GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B:GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C:GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D:GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E:GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F:GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F70:GREEK SMALL LETTER ALPHA WITH VARIA +1F71:GREEK SMALL LETTER ALPHA WITH OXIA +1F72:GREEK SMALL LETTER EPSILON WITH VARIA +1F73:GREEK SMALL LETTER EPSILON WITH OXIA +1F74:GREEK SMALL LETTER ETA WITH VARIA +1F75:GREEK SMALL LETTER ETA WITH OXIA +1F76:GREEK SMALL LETTER IOTA WITH VARIA +1F77:GREEK SMALL LETTER IOTA WITH OXIA +1F78:GREEK SMALL LETTER OMICRON WITH VARIA +1F79:GREEK SMALL LETTER OMICRON WITH OXIA +1F7A:GREEK SMALL LETTER UPSILON WITH VARIA +1F7B:GREEK SMALL LETTER UPSILON WITH OXIA +1F7C:GREEK SMALL LETTER OMEGA WITH VARIA +1F7D:GREEK SMALL LETTER OMEGA WITH OXIA +1F80:GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81:GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82:GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83:GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84:GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85:GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86:GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87:GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88:GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89:GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A:GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B:GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C:GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D:GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E:GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F:GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90:GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91:GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92:GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93:GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94:GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95:GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96:GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97:GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98:GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99:GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A:GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B:GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C:GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D:GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E:GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F:GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0:GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1:GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2:GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3:GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4:GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5:GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6:GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7:GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8:GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9:GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA:GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB:GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC:GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD:GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE:GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF:GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB0:GREEK SMALL LETTER ALPHA WITH VRACHY +1FB1:GREEK SMALL LETTER ALPHA WITH MACRON +1FB2:GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3:GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4:GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6:GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7:GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8:GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9:GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA:GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB:GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC:GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD:GREEK KORONIS +1FBE:GREEK PROSGEGRAMMENI +1FBF:GREEK PSILI +1FC0:GREEK PERISPOMENI +1FC1:GREEK DIALYTIKA AND PERISPOMENI +1FC2:GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3:GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4:GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6:GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7:GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8:GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9:GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA:GREEK CAPITAL LETTER ETA WITH VARIA +1FCB:GREEK CAPITAL LETTER ETA WITH OXIA +1FCC:GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD:GREEK PSILI AND VARIA +1FCE:GREEK PSILI AND OXIA +1FCF:GREEK PSILI AND PERISPOMENI +1FD0:GREEK SMALL LETTER IOTA WITH VRACHY +1FD1:GREEK SMALL LETTER IOTA WITH MACRON +1FD2:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6:GREEK SMALL LETTER IOTA WITH PERISPOMENI +1FD7:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8:GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9:GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA:GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB:GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD:GREEK DASIA AND VARIA +1FDE:GREEK DASIA AND OXIA +1FDF:GREEK DASIA AND PERISPOMENI +1FE0:GREEK SMALL LETTER UPSILON WITH VRACHY +1FE1:GREEK SMALL LETTER UPSILON WITH MACRON +1FE2:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE4:GREEK SMALL LETTER RHO WITH PSILI +1FE5:GREEK SMALL LETTER RHO WITH DASIA +1FE6:GREEK SMALL LETTER UPSILON WITH PERISPOMENI +1FE7:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8:GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9:GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA:GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB:GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC:GREEK CAPITAL LETTER RHO WITH DASIA +1FED:GREEK DIALYTIKA AND VARIA +1FEE:GREEK DIALYTIKA AND OXIA +1FEF:GREEK VARIA +1FF2:GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3:GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4:GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6:GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7:GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8:GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9:GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA:GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB:GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC:GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD:GREEK OXIA +1FFE:GREEK DASIA +2000:EN QUAD +2001:EM QUAD +2002:EN SPACE +2003:EM SPACE +2004:THREE-PER-EM SPACE +2005:FOUR-PER-EM SPACE +2006:SIX-PER-EM SPACE +2007:FIGURE SPACE +2008:PUNCTUATION SPACE +2009:THIN SPACE +200A:HAIR SPACE +200B:ZERO WIDTH SPACE +200C:ZERO WIDTH NON-JOINER +200D:ZERO WIDTH JOINER +200E:LEFT-TO-RIGHT MARK +200F:RIGHT-TO-LEFT MARK +2010:HYPHEN +2011:NON-BREAKING HYPHEN +2012:FIGURE DASH +2013:EN DASH +2014:EM DASH +2015:HORIZONTAL BAR +2016:DOUBLE VERTICAL LINE +2017:DOUBLE LOW LINE +2018:LEFT SINGLE QUOTATION MARK +2019:RIGHT SINGLE QUOTATION MARK +201A:SINGLE LOW-9 QUOTATION MARK +201B:SINGLE HIGH-REVERSED-9 QUOTATION MARK +201C:LEFT DOUBLE QUOTATION MARK +201D:RIGHT DOUBLE QUOTATION MARK +201E:DOUBLE LOW-9 QUOTATION MARK +201F:DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020:DAGGER +2021:DOUBLE DAGGER +2022:BULLET +2023:TRIANGULAR BULLET +2024:ONE DOT LEADER +2025:TWO DOT LEADER +2026:HORIZONTAL ELLIPSIS +2027:HYPHENATION POINT +2028:LINE SEPARATOR +2029:PARAGRAPH SEPARATOR +202A:LEFT-TO-RIGHT EMBEDDING +202B:RIGHT-TO-LEFT EMBEDDING +202C:POP DIRECTIONAL FORMATTING +202D:LEFT-TO-RIGHT OVERRIDE +202E:RIGHT-TO-LEFT OVERRIDE +202F:NARROW NO-BREAK SPACE +2030:PER MILLE SIGN +2031:PER TEN THOUSAND SIGN +2032:PRIME +2033:DOUBLE PRIME +2034:TRIPLE PRIME +2035:REVERSED PRIME +2036:REVERSED DOUBLE PRIME +2037:REVERSED TRIPLE PRIME +2038:CARET +2039:SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203B:REFERENCE MARK +203C:DOUBLE EXCLAMATION MARK +203D:INTERROBANG +203E:OVERLINE +203F:UNDERTIE +2040:CHARACTER TIE +2041:CARET INSERTION POINT +2042:ASTERISM +2043:HYPHEN BULLET +2044:FRACTION SLASH +2045:LEFT SQUARE BRACKET WITH QUILL +2046:RIGHT SQUARE BRACKET WITH QUILL +2048:QUESTION EXCLAMATION MARK +2049:EXCLAMATION QUESTION MARK +204A:TIRONIAN SIGN ET +204B:REVERSED PILCROW SIGN +204C:BLACK LEFTWARDS BULLET +204D:BLACK RIGHTWARDS BULLET +206A:INHIBIT SYMMETRIC SWAPPING +206B:ACTIVATE SYMMETRIC SWAPPING +206C:INHIBIT ARABIC FORM SHAPING +206D:ACTIVATE ARABIC FORM SHAPING +206E:NATIONAL DIGIT SHAPES +206F:NOMINAL DIGIT SHAPES +2070:SUPERSCRIPT ZERO +2074:SUPERSCRIPT FOUR +2075:SUPERSCRIPT FIVE +2076:SUPERSCRIPT SIX +2077:SUPERSCRIPT SEVEN +2078:SUPERSCRIPT EIGHT +2079:SUPERSCRIPT NINE +207A:SUPERSCRIPT PLUS SIGN +207B:SUPERSCRIPT MINUS +207C:SUPERSCRIPT EQUALS SIGN +207D:SUPERSCRIPT LEFT PARENTHESIS +207E:SUPERSCRIPT RIGHT PARENTHESIS +207F:SUPERSCRIPT LATIN SMALL LETTER N +2080:SUBSCRIPT ZERO +2081:SUBSCRIPT ONE +2082:SUBSCRIPT TWO +2083:SUBSCRIPT THREE +2084:SUBSCRIPT FOUR +2085:SUBSCRIPT FIVE +2086:SUBSCRIPT SIX +2087:SUBSCRIPT SEVEN +2088:SUBSCRIPT EIGHT +2089:SUBSCRIPT NINE +208A:SUBSCRIPT PLUS SIGN +208B:SUBSCRIPT MINUS +208C:SUBSCRIPT EQUALS SIGN +208D:SUBSCRIPT LEFT PARENTHESIS +208E:SUBSCRIPT RIGHT PARENTHESIS +20A0:EURO-CURRENCY SIGN +20A1:COLON SIGN +20A2:CRUZEIRO SIGN +20A3:FRENCH FRANC SIGN +20A4:LIRA SIGN +20A5:MILL SIGN +20A6:NAIRA SIGN +20A7:PESETA SIGN +20A8:RUPEE SIGN +20A9:WON SIGN +20AA:NEW SHEQEL SIGN +20AB:DONG SIGN +20AC:EURO SIGN +20AD:KIP SIGN +20AE:TUGRIK SIGN +20AF:DRACHMA SIGN +20D0:COMBINING LEFT HARPOON ABOVE +20D1:COMBINING RIGHT HARPOON ABOVE +20D2:COMBINING LONG VERTICAL LINE OVERLAY +20D3:COMBINING SHORT VERTICAL LINE OVERLAY +20D4:COMBINING ANTICLOCKWISE ARROW ABOVE +20D5:COMBINING CLOCKWISE ARROW ABOVE +20D6:COMBINING LEFT ARROW ABOVE +20D7:COMBINING RIGHT ARROW ABOVE +20D8:COMBINING RING OVERLAY +20D9:COMBINING CLOCKWISE RING OVERLAY +20DA:COMBINING ANTICLOCKWISE RING OVERLAY +20DB:COMBINING THREE DOTS ABOVE +20DC:COMBINING FOUR DOTS ABOVE +20DD:COMBINING ENCLOSING CIRCLE +20DE:COMBINING ENCLOSING SQUARE +20DF:COMBINING ENCLOSING DIAMOND +20E0:COMBINING ENCLOSING CIRCLE BACKSLASH +20E1:COMBINING LEFT RIGHT ARROW ABOVE +20E2:COMBINING ENCLOSING SCREEN +20E3:COMBINING ENCLOSING KEYCAP +2100:ACCOUNT OF +2101:ADDRESSED TO THE SUBJECT +2102:DOUBLE-STRUCK CAPITAL C +2103:DEGREE CELSIUS +2104:CENTRE LINE SYMBOL +2105:CARE OF +2106:CADA UNA +2107:EULER CONSTANT +2108:SCRUPLE +2109:DEGREE FAHRENHEIT +210A:SCRIPT SMALL G +210B:SCRIPT CAPITAL H +210C:BLACK-LETTER CAPITAL H +210D:DOUBLE-STRUCK CAPITAL H +210E:PLANCK CONSTANT +210F:PLANCK CONSTANT OVER TWO PI +2110:SCRIPT CAPITAL I +2111:BLACK-LETTER CAPITAL I +2112:SCRIPT CAPITAL L +2113:SCRIPT SMALL L +2114:L B BAR SYMBOL +2115:DOUBLE-STRUCK CAPITAL N +2116:NUMERO SIGN +2117:SOUND RECORDING COPYRIGHT +2118:SCRIPT CAPITAL P +2119:DOUBLE-STRUCK CAPITAL P +211A:DOUBLE-STRUCK CAPITAL Q +211B:SCRIPT CAPITAL R +211C:BLACK-LETTER CAPITAL R +211D:DOUBLE-STRUCK CAPITAL R +211E:PRESCRIPTION TAKE +211F:RESPONSE +2120:SERVICE MARK +2121:TELEPHONE SIGN +2122:TRADE MARK SIGN +2123:VERSICLE +2124:DOUBLE-STRUCK CAPITAL Z +2125:OUNCE SIGN +2126:OHM SIGN +2127:INVERTED OHM SIGN +2128:BLACK-LETTER CAPITAL Z +2129:TURNED GREEK SMALL LETTER IOTA +212A:KELVIN SIGN +212B:ANGSTROM SIGN +212C:SCRIPT CAPITAL B +212D:BLACK-LETTER CAPITAL C +212E:ESTIMATED SYMBOL +212F:SCRIPT SMALL E +2130:SCRIPT CAPITAL E +2131:SCRIPT CAPITAL F +2132:TURNED CAPITAL F +2133:SCRIPT CAPITAL M +2134:SCRIPT SMALL O +2135:ALEF SYMBOL +2136:BET SYMBOL +2137:GIMEL SYMBOL +2138:DALET SYMBOL +2139:INFORMATION SOURCE +213A:ROTATED CAPITAL Q +2153:VULGAR FRACTION ONE THIRD +2154:VULGAR FRACTION TWO THIRDS +2155:VULGAR FRACTION ONE FIFTH +2156:VULGAR FRACTION TWO FIFTHS +2157:VULGAR FRACTION THREE FIFTHS +2158:VULGAR FRACTION FOUR FIFTHS +2159:VULGAR FRACTION ONE SIXTH +215A:VULGAR FRACTION FIVE SIXTHS +215B:VULGAR FRACTION ONE EIGHTH +215C:VULGAR FRACTION THREE EIGHTHS +215D:VULGAR FRACTION FIVE EIGHTHS +215E:VULGAR FRACTION SEVEN EIGHTHS +215F:FRACTION NUMERATOR ONE +2160:ROMAN NUMERAL ONE +2161:ROMAN NUMERAL TWO +2162:ROMAN NUMERAL THREE +2163:ROMAN NUMERAL FOUR +2164:ROMAN NUMERAL FIVE +2165:ROMAN NUMERAL SIX +2166:ROMAN NUMERAL SEVEN +2167:ROMAN NUMERAL EIGHT +2168:ROMAN NUMERAL NINE +2169:ROMAN NUMERAL TEN +216A:ROMAN NUMERAL ELEVEN +216B:ROMAN NUMERAL TWELVE +216C:ROMAN NUMERAL FIFTY +216D:ROMAN NUMERAL ONE HUNDRED +216E:ROMAN NUMERAL FIVE HUNDRED +216F:ROMAN NUMERAL ONE THOUSAND +2170:SMALL ROMAN NUMERAL ONE +2171:SMALL ROMAN NUMERAL TWO +2172:SMALL ROMAN NUMERAL THREE +2173:SMALL ROMAN NUMERAL FOUR +2174:SMALL ROMAN NUMERAL FIVE +2175:SMALL ROMAN NUMERAL SIX +2176:SMALL ROMAN NUMERAL SEVEN +2177:SMALL ROMAN NUMERAL EIGHT +2178:SMALL ROMAN NUMERAL NINE +2179:SMALL ROMAN NUMERAL TEN +217A:SMALL ROMAN NUMERAL ELEVEN +217B:SMALL ROMAN NUMERAL TWELVE +217C:SMALL ROMAN NUMERAL FIFTY +217D:SMALL ROMAN NUMERAL ONE HUNDRED +217E:SMALL ROMAN NUMERAL FIVE HUNDRED +217F:SMALL ROMAN NUMERAL ONE THOUSAND +2180:ROMAN NUMERAL ONE THOUSAND C D +2181:ROMAN NUMERAL FIVE THOUSAND +2182:ROMAN NUMERAL TEN THOUSAND +2183:ROMAN NUMERAL REVERSED ONE HUNDRED +2190:LEFTWARDS ARROW +2191:UPWARDS ARROW +2192:RIGHTWARDS ARROW +2193:DOWNWARDS ARROW +2194:LEFT RIGHT ARROW +2195:UP DOWN ARROW +2196:NORTH WEST ARROW +2197:NORTH EAST ARROW +2198:SOUTH EAST ARROW +2199:SOUTH WEST ARROW +219A:LEFTWARDS ARROW WITH STROKE +219B:RIGHTWARDS ARROW WITH STROKE +219C:LEFTWARDS WAVE ARROW +219D:RIGHTWARDS WAVE ARROW +219E:LEFTWARDS TWO HEADED ARROW +219F:UPWARDS TWO HEADED ARROW +21A0:RIGHTWARDS TWO HEADED ARROW +21A1:DOWNWARDS TWO HEADED ARROW +21A2:LEFTWARDS ARROW WITH TAIL +21A3:RIGHTWARDS ARROW WITH TAIL +21A4:LEFTWARDS ARROW FROM BAR +21A5:UPWARDS ARROW FROM BAR +21A6:RIGHTWARDS ARROW FROM BAR +21A7:DOWNWARDS ARROW FROM BAR +21A8:UP DOWN ARROW WITH BASE +21A9:LEFTWARDS ARROW WITH HOOK +21AA:RIGHTWARDS ARROW WITH HOOK +21AB:LEFTWARDS ARROW WITH LOOP +21AC:RIGHTWARDS ARROW WITH LOOP +21AD:LEFT RIGHT WAVE ARROW +21AE:LEFT RIGHT ARROW WITH STROKE +21AF:DOWNWARDS ZIGZAG ARROW +21B0:UPWARDS ARROW WITH TIP LEFTWARDS +21B1:UPWARDS ARROW WITH TIP RIGHTWARDS +21B2:DOWNWARDS ARROW WITH TIP LEFTWARDS +21B3:DOWNWARDS ARROW WITH TIP RIGHTWARDS +21B4:RIGHTWARDS ARROW WITH CORNER DOWNWARDS +21B5:DOWNWARDS ARROW WITH CORNER LEFTWARDS +21B6:ANTICLOCKWISE TOP SEMICIRCLE ARROW +21B7:CLOCKWISE TOP SEMICIRCLE ARROW +21B8:NORTH WEST ARROW TO LONG BAR +21B9:LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR +21BA:ANTICLOCKWISE OPEN CIRCLE ARROW +21BB:CLOCKWISE OPEN CIRCLE ARROW +21BC:LEFTWARDS HARPOON WITH BARB UPWARDS +21BD:LEFTWARDS HARPOON WITH BARB DOWNWARDS +21BE:UPWARDS HARPOON WITH BARB RIGHTWARDS +21BF:UPWARDS HARPOON WITH BARB LEFTWARDS +21C0:RIGHTWARDS HARPOON WITH BARB UPWARDS +21C1:RIGHTWARDS HARPOON WITH BARB DOWNWARDS +21C2:DOWNWARDS HARPOON WITH BARB RIGHTWARDS +21C3:DOWNWARDS HARPOON WITH BARB LEFTWARDS +21C4:RIGHTWARDS ARROW OVER LEFTWARDS ARROW +21C5:UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW +21C6:LEFTWARDS ARROW OVER RIGHTWARDS ARROW +21C7:LEFTWARDS PAIRED ARROWS +21C8:UPWARDS PAIRED ARROWS +21C9:RIGHTWARDS PAIRED ARROWS +21CA:DOWNWARDS PAIRED ARROWS +21CB:LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON +21CC:RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON +21CD:LEFTWARDS DOUBLE ARROW WITH STROKE +21CE:LEFT RIGHT DOUBLE ARROW WITH STROKE +21CF:RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0:LEFTWARDS DOUBLE ARROW +21D1:UPWARDS DOUBLE ARROW +21D2:RIGHTWARDS DOUBLE ARROW +21D3:DOWNWARDS DOUBLE ARROW +21D4:LEFT RIGHT DOUBLE ARROW +21D5:UP DOWN DOUBLE ARROW +21D6:NORTH WEST DOUBLE ARROW +21D7:NORTH EAST DOUBLE ARROW +21D8:SOUTH EAST DOUBLE ARROW +21D9:SOUTH WEST DOUBLE ARROW +21DA:LEFTWARDS TRIPLE ARROW +21DB:RIGHTWARDS TRIPLE ARROW +21DC:LEFTWARDS SQUIGGLE ARROW +21DD:RIGHTWARDS SQUIGGLE ARROW +21DE:UPWARDS ARROW WITH DOUBLE STROKE +21DF:DOWNWARDS ARROW WITH DOUBLE STROKE +21E0:LEFTWARDS DASHED ARROW +21E1:UPWARDS DASHED ARROW +21E2:RIGHTWARDS DASHED ARROW +21E3:DOWNWARDS DASHED ARROW +21E4:LEFTWARDS ARROW TO BAR +21E5:RIGHTWARDS ARROW TO BAR +21E6:LEFTWARDS WHITE ARROW +21E7:UPWARDS WHITE ARROW +21E8:RIGHTWARDS WHITE ARROW +21E9:DOWNWARDS WHITE ARROW +21EA:UPWARDS WHITE ARROW FROM BAR +21EB:UPWARDS WHITE ARROW ON PEDESTAL +21EC:UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR +21ED:UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR +21EE:UPWARDS WHITE DOUBLE ARROW +21EF:UPWARDS WHITE DOUBLE ARROW ON PEDESTAL +21F0:RIGHTWARDS WHITE ARROW FROM WALL +21F1:NORTH WEST ARROW TO CORNER +21F2:SOUTH EAST ARROW TO CORNER +21F3:UP DOWN WHITE ARROW +2200:FOR ALL +2201:COMPLEMENT +2202:PARTIAL DIFFERENTIAL +2203:THERE EXISTS +2204:THERE DOES NOT EXIST +2205:EMPTY SET +2206:INCREMENT +2207:NABLA +2208:ELEMENT OF +2209:NOT AN ELEMENT OF +220A:SMALL ELEMENT OF +220B:CONTAINS AS MEMBER +220C:DOES NOT CONTAIN AS MEMBER +220D:SMALL CONTAINS AS MEMBER +220E:END OF PROOF +220F:N-ARY PRODUCT +2210:N-ARY COPRODUCT +2211:N-ARY SUMMATION +2212:MINUS SIGN +2213:MINUS-OR-PLUS SIGN +2214:DOT PLUS +2215:DIVISION SLASH +2216:SET MINUS +2217:ASTERISK OPERATOR +2218:RING OPERATOR +2219:BULLET OPERATOR +221A:SQUARE ROOT +221B:CUBE ROOT +221C:FOURTH ROOT +221D:PROPORTIONAL TO +221E:INFINITY +221F:RIGHT ANGLE +2220:ANGLE +2221:MEASURED ANGLE +2222:SPHERICAL ANGLE +2223:DIVIDES +2224:DOES NOT DIVIDE +2225:PARALLEL TO +2226:NOT PARALLEL TO +2227:LOGICAL AND +2228:LOGICAL OR +2229:INTERSECTION +222A:UNION +222B:INTEGRAL +222C:DOUBLE INTEGRAL +222D:TRIPLE INTEGRAL +222E:CONTOUR INTEGRAL +222F:SURFACE INTEGRAL +2230:VOLUME INTEGRAL +2231:CLOCKWISE INTEGRAL +2232:CLOCKWISE CONTOUR INTEGRAL +2233:ANTICLOCKWISE CONTOUR INTEGRAL +2234:THEREFORE +2235:BECAUSE +2236:RATIO +2237:PROPORTION +2238:DOT MINUS +2239:EXCESS +223A:GEOMETRIC PROPORTION +223B:HOMOTHETIC +223C:TILDE OPERATOR +223D:REVERSED TILDE +223E:INVERTED LAZY S +223F:SINE WAVE +2240:WREATH PRODUCT +2241:NOT TILDE +2242:MINUS TILDE +2243:ASYMPTOTICALLY EQUAL TO +2244:NOT ASYMPTOTICALLY EQUAL TO +2245:APPROXIMATELY EQUAL TO +2246:APPROXIMATELY BUT NOT ACTUALLY EQUAL TO +2247:NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2248:ALMOST EQUAL TO +2249:NOT ALMOST EQUAL TO +224A:ALMOST EQUAL OR EQUAL TO +224B:TRIPLE TILDE +224C:ALL EQUAL TO +224D:EQUIVALENT TO +224E:GEOMETRICALLY EQUIVALENT TO +224F:DIFFERENCE BETWEEN +2250:APPROACHES THE LIMIT +2251:GEOMETRICALLY EQUAL TO +2252:APPROXIMATELY EQUAL TO OR THE IMAGE OF +2253:IMAGE OF OR APPROXIMATELY EQUAL TO +2254:COLON EQUALS +2255:EQUALS COLON +2256:RING IN EQUAL TO +2257:RING EQUAL TO +2258:CORRESPONDS TO +2259:ESTIMATES +225A:EQUIANGULAR TO +225B:STAR EQUALS +225C:DELTA EQUAL TO +225D:EQUAL TO BY DEFINITION +225E:MEASURED BY +225F:QUESTIONED EQUAL TO +2260:NOT EQUAL TO +2261:IDENTICAL TO +2262:NOT IDENTICAL TO +2263:STRICTLY EQUIVALENT TO +2264:LESS-THAN OR EQUAL TO +2265:GREATER-THAN OR EQUAL TO +2266:LESS-THAN OVER EQUAL TO +2267:GREATER-THAN OVER EQUAL TO +2268:LESS-THAN BUT NOT EQUAL TO +2269:GREATER-THAN BUT NOT EQUAL TO +226A:MUCH LESS-THAN +226B:MUCH GREATER-THAN +226C:BETWEEN +226D:NOT EQUIVALENT TO +226E:NOT LESS-THAN +226F:NOT GREATER-THAN +2270:NEITHER LESS-THAN NOR EQUAL TO +2271:NEITHER GREATER-THAN NOR EQUAL TO +2272:LESS-THAN OR EQUIVALENT TO +2273:GREATER-THAN OR EQUIVALENT TO +2274:NEITHER LESS-THAN NOR EQUIVALENT TO +2275:NEITHER GREATER-THAN NOR EQUIVALENT TO +2276:LESS-THAN OR GREATER-THAN +2277:GREATER-THAN OR LESS-THAN +2278:NEITHER LESS-THAN NOR GREATER-THAN +2279:NEITHER GREATER-THAN NOR LESS-THAN +227A:PRECEDES +227B:SUCCEEDS +227C:PRECEDES OR EQUAL TO +227D:SUCCEEDS OR EQUAL TO +227E:PRECEDES OR EQUIVALENT TO +227F:SUCCEEDS OR EQUIVALENT TO +2280:DOES NOT PRECEDE +2281:DOES NOT SUCCEED +2282:SUBSET OF +2283:SUPERSET OF +2284:NOT A SUBSET OF +2285:NOT A SUPERSET OF +2286:SUBSET OF OR EQUAL TO +2287:SUPERSET OF OR EQUAL TO +2288:NEITHER A SUBSET OF NOR EQUAL TO +2289:NEITHER A SUPERSET OF NOR EQUAL TO +228A:SUBSET OF WITH NOT EQUAL TO +228B:SUPERSET OF WITH NOT EQUAL TO +228C:MULTISET +228D:MULTISET MULTIPLICATION +228E:MULTISET UNION +228F:SQUARE IMAGE OF +2290:SQUARE ORIGINAL OF +2291:SQUARE IMAGE OF OR EQUAL TO +2292:SQUARE ORIGINAL OF OR EQUAL TO +2293:SQUARE CAP +2294:SQUARE CUP +2295:CIRCLED PLUS +2296:CIRCLED MINUS +2297:CIRCLED TIMES +2298:CIRCLED DIVISION SLASH +2299:CIRCLED DOT OPERATOR +229A:CIRCLED RING OPERATOR +229B:CIRCLED ASTERISK OPERATOR +229C:CIRCLED EQUALS +229D:CIRCLED DASH +229E:SQUARED PLUS +229F:SQUARED MINUS +22A0:SQUARED TIMES +22A1:SQUARED DOT OPERATOR +22A2:RIGHT TACK +22A3:LEFT TACK +22A4:DOWN TACK +22A5:UP TACK +22A6:ASSERTION +22A7:MODELS +22A8:TRUE +22A9:FORCES +22AA:TRIPLE VERTICAL BAR RIGHT TURNSTILE +22AB:DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22AC:DOES NOT PROVE +22AD:NOT TRUE +22AE:DOES NOT FORCE +22AF:NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22B0:PRECEDES UNDER RELATION +22B1:SUCCEEDS UNDER RELATION +22B2:NORMAL SUBGROUP OF +22B3:CONTAINS AS NORMAL SUBGROUP +22B4:NORMAL SUBGROUP OF OR EQUAL TO +22B5:CONTAINS AS NORMAL SUBGROUP OR EQUAL TO +22B6:ORIGINAL OF +22B7:IMAGE OF +22B8:MULTIMAP +22B9:HERMITIAN CONJUGATE MATRIX +22BA:INTERCALATE +22BB:XOR +22BC:NAND +22BD:NOR +22BE:RIGHT ANGLE WITH ARC +22BF:RIGHT TRIANGLE +22C0:N-ARY LOGICAL AND +22C1:N-ARY LOGICAL OR +22C2:N-ARY INTERSECTION +22C3:N-ARY UNION +22C4:DIAMOND OPERATOR +22C5:DOT OPERATOR +22C6:STAR OPERATOR +22C7:DIVISION TIMES +22C8:BOWTIE +22C9:LEFT NORMAL FACTOR SEMIDIRECT PRODUCT +22CA:RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT +22CB:LEFT SEMIDIRECT PRODUCT +22CC:RIGHT SEMIDIRECT PRODUCT +22CD:REVERSED TILDE EQUALS +22CE:CURLY LOGICAL OR +22CF:CURLY LOGICAL AND +22D0:DOUBLE SUBSET +22D1:DOUBLE SUPERSET +22D2:DOUBLE INTERSECTION +22D3:DOUBLE UNION +22D4:PITCHFORK +22D5:EQUAL AND PARALLEL TO +22D6:LESS-THAN WITH DOT +22D7:GREATER-THAN WITH DOT +22D8:VERY MUCH LESS-THAN +22D9:VERY MUCH GREATER-THAN +22DA:LESS-THAN EQUAL TO OR GREATER-THAN +22DB:GREATER-THAN EQUAL TO OR LESS-THAN +22DC:EQUAL TO OR LESS-THAN +22DD:EQUAL TO OR GREATER-THAN +22DE:EQUAL TO OR PRECEDES +22DF:EQUAL TO OR SUCCEEDS +22E0:DOES NOT PRECEDE OR EQUAL +22E1:DOES NOT SUCCEED OR EQUAL +22E2:NOT SQUARE IMAGE OF OR EQUAL TO +22E3:NOT SQUARE ORIGINAL OF OR EQUAL TO +22E4:SQUARE IMAGE OF OR NOT EQUAL TO +22E5:SQUARE ORIGINAL OF OR NOT EQUAL TO +22E6:LESS-THAN BUT NOT EQUIVALENT TO +22E7:GREATER-THAN BUT NOT EQUIVALENT TO +22E8:PRECEDES BUT NOT EQUIVALENT TO +22E9:SUCCEEDS BUT NOT EQUIVALENT TO +22EA:NOT NORMAL SUBGROUP OF +22EB:DOES NOT CONTAIN AS NORMAL SUBGROUP +22EC:NOT NORMAL SUBGROUP OF OR EQUAL TO +22ED:DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +22EE:VERTICAL ELLIPSIS +22EF:MIDLINE HORIZONTAL ELLIPSIS +22F0:UP RIGHT DIAGONAL ELLIPSIS +22F1:DOWN RIGHT DIAGONAL ELLIPSIS +2300:DIAMETER SIGN +2301:ELECTRIC ARROW +2302:HOUSE +2303:UP ARROWHEAD +2304:DOWN ARROWHEAD +2305:PROJECTIVE +2306:PERSPECTIVE +2307:WAVY LINE +2308:LEFT CEILING +2309:RIGHT CEILING +230A:LEFT FLOOR +230B:RIGHT FLOOR +230C:BOTTOM RIGHT CROP +230D:BOTTOM LEFT CROP +230E:TOP RIGHT CROP +230F:TOP LEFT CROP +2310:REVERSED NOT SIGN +2311:SQUARE LOZENGE +2312:ARC +2313:SEGMENT +2314:SECTOR +2315:TELEPHONE RECORDER +2316:POSITION INDICATOR +2317:VIEWDATA SQUARE +2318:PLACE OF INTEREST SIGN +2319:TURNED NOT SIGN +231A:WATCH +231B:HOURGLASS +231C:TOP LEFT CORNER +231D:TOP RIGHT CORNER +231E:BOTTOM LEFT CORNER +231F:BOTTOM RIGHT CORNER +2320:TOP HALF INTEGRAL +2321:BOTTOM HALF INTEGRAL +2322:FROWN +2323:SMILE +2324:UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS +2325:OPTION KEY +2326:ERASE TO THE RIGHT +2327:X IN A RECTANGLE BOX +2328:KEYBOARD +2329:LEFT-POINTING ANGLE BRACKET +232A:RIGHT-POINTING ANGLE BRACKET +232B:ERASE TO THE LEFT +232C:BENZENE RING +232D:CYLINDRICITY +232E:ALL AROUND-PROFILE +232F:SYMMETRY +2330:TOTAL RUNOUT +2331:DIMENSION ORIGIN +2332:CONICAL TAPER +2333:SLOPE +2334:COUNTERBORE +2335:COUNTERSINK +2336:APL FUNCTIONAL SYMBOL I-BEAM +2337:APL FUNCTIONAL SYMBOL SQUISH QUAD +2338:APL FUNCTIONAL SYMBOL QUAD EQUAL +2339:APL FUNCTIONAL SYMBOL QUAD DIVIDE +233A:APL FUNCTIONAL SYMBOL QUAD DIAMOND +233B:APL FUNCTIONAL SYMBOL QUAD JOT +233C:APL FUNCTIONAL SYMBOL QUAD CIRCLE +233D:APL FUNCTIONAL SYMBOL CIRCLE STILE +233E:APL FUNCTIONAL SYMBOL CIRCLE JOT +233F:APL FUNCTIONAL SYMBOL SLASH BAR +2340:APL FUNCTIONAL SYMBOL BACKSLASH BAR +2341:APL FUNCTIONAL SYMBOL QUAD SLASH +2342:APL FUNCTIONAL SYMBOL QUAD BACKSLASH +2343:APL FUNCTIONAL SYMBOL QUAD LESS-THAN +2344:APL FUNCTIONAL SYMBOL QUAD GREATER-THAN +2345:APL FUNCTIONAL SYMBOL LEFTWARDS VANE +2346:APL FUNCTIONAL SYMBOL RIGHTWARDS VANE +2347:APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW +2348:APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW +2349:APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH +234A:APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR +234B:APL FUNCTIONAL SYMBOL DELTA STILE +234C:APL FUNCTIONAL SYMBOL QUAD DOWN CARET +234D:APL FUNCTIONAL SYMBOL QUAD DELTA +234E:APL FUNCTIONAL SYMBOL DOWN TACK JOT +234F:APL FUNCTIONAL SYMBOL UPWARDS VANE +2350:APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW +2351:APL FUNCTIONAL SYMBOL UP TACK OVERBAR +2352:APL FUNCTIONAL SYMBOL DEL STILE +2353:APL FUNCTIONAL SYMBOL QUAD UP CARET +2354:APL FUNCTIONAL SYMBOL QUAD DEL +2355:APL FUNCTIONAL SYMBOL UP TACK JOT +2356:APL FUNCTIONAL SYMBOL DOWNWARDS VANE +2357:APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW +2358:APL FUNCTIONAL SYMBOL QUOTE UNDERBAR +2359:APL FUNCTIONAL SYMBOL DELTA UNDERBAR +235A:APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR +235B:APL FUNCTIONAL SYMBOL JOT UNDERBAR +235C:APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR +235D:APL FUNCTIONAL SYMBOL UP SHOE JOT +235E:APL FUNCTIONAL SYMBOL QUOTE QUAD +235F:APL FUNCTIONAL SYMBOL CIRCLE STAR +2360:APL FUNCTIONAL SYMBOL QUAD COLON +2361:APL FUNCTIONAL SYMBOL UP TACK DIAERESIS +2362:APL FUNCTIONAL SYMBOL DEL DIAERESIS +2363:APL FUNCTIONAL SYMBOL STAR DIAERESIS +2364:APL FUNCTIONAL SYMBOL JOT DIAERESIS +2365:APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS +2366:APL FUNCTIONAL SYMBOL DOWN SHOE STILE +2367:APL FUNCTIONAL SYMBOL LEFT SHOE STILE +2368:APL FUNCTIONAL SYMBOL TILDE DIAERESIS +2369:APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS +236A:APL FUNCTIONAL SYMBOL COMMA BAR +236B:APL FUNCTIONAL SYMBOL DEL TILDE +236C:APL FUNCTIONAL SYMBOL ZILDE +236D:APL FUNCTIONAL SYMBOL STILE TILDE +236E:APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR +236F:APL FUNCTIONAL SYMBOL QUAD NOT EQUAL +2370:APL FUNCTIONAL SYMBOL QUAD QUESTION +2371:APL FUNCTIONAL SYMBOL DOWN CARET TILDE +2372:APL FUNCTIONAL SYMBOL UP CARET TILDE +2373:APL FUNCTIONAL SYMBOL IOTA +2374:APL FUNCTIONAL SYMBOL RHO +2375:APL FUNCTIONAL SYMBOL OMEGA +2376:APL FUNCTIONAL SYMBOL ALPHA UNDERBAR +2377:APL FUNCTIONAL SYMBOL EPSILON UNDERBAR +2378:APL FUNCTIONAL SYMBOL IOTA UNDERBAR +2379:APL FUNCTIONAL SYMBOL OMEGA UNDERBAR +237A:APL FUNCTIONAL SYMBOL ALPHA +237B:NOT CHECK MARK +237D:SHOULDERED OPEN BOX +237E:BELL SYMBOL +237F:VERTICAL LINE WITH MIDDLE DOT +2380:INSERTION SYMBOL +2381:CONTINUOUS UNDERLINE SYMBOL +2382:DISCONTINUOUS UNDERLINE SYMBOL +2383:EMPHASIS SYMBOL +2384:COMPOSITION SYMBOL +2385:WHITE SQUARE WITH CENTRE VERTICAL LINE +2386:ENTER SYMBOL +2387:ALTERNATIVE KEY SYMBOL +2388:HELM SYMBOL +2389:CIRCLED HORIZONTAL BAR WITH NOTCH +238A:CIRCLED TRIANGLE DOWN +238B:BROKEN CIRCLE WITH NORTHWEST ARROW +238C:UNDO SYMBOL +238D:MONOSTABLE SYMBOL +238E:HYSTERESIS SYMBOL +238F:OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL +2390:OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL +2391:PASSIVE-PULL-DOWN-OUTPUT SYMBOL +2392:PASSIVE-PULL-UP-OUTPUT SYMBOL +2393:DIRECT CURRENT SYMBOL FORM TWO +2394:SOFTWARE-FUNCTION SYMBOL +2395:APL FUNCTIONAL SYMBOL QUAD +2396:DECIMAL SEPARATOR KEY SYMBOL +2397:PREVIOUS PAGE +2398:NEXT PAGE +2399:PRINT SCREEN SYMBOL +239A:CLEAR SCREEN SYMBOL +3440: +3441: +3442: +3443: +3444: +3445: +3446: +3447: +3448: +3449: +344A: +2500:BOX DRAWINGS LIGHT HORIZONTAL +2501:BOX DRAWINGS HEAVY HORIZONTAL +2502:BOX DRAWINGS LIGHT VERTICAL +2503:BOX DRAWINGS HEAVY VERTICAL +2504:BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL +2505:BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL +2506:BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL +2507:BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL +2508:BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL +2509:BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL +250A:BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL +250B:BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL +250C:BOX DRAWINGS LIGHT DOWN AND RIGHT +250D:BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY +250E:BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT +250F:BOX DRAWINGS HEAVY DOWN AND RIGHT +2510:BOX DRAWINGS LIGHT DOWN AND LEFT +2511:BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY +2512:BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT +2513:BOX DRAWINGS HEAVY DOWN AND LEFT +2514:BOX DRAWINGS LIGHT UP AND RIGHT +2515:BOX DRAWINGS UP LIGHT AND RIGHT HEAVY +2516:BOX DRAWINGS UP HEAVY AND RIGHT LIGHT +2517:BOX DRAWINGS HEAVY UP AND RIGHT +2518:BOX DRAWINGS LIGHT UP AND LEFT +2519:BOX DRAWINGS UP LIGHT AND LEFT HEAVY +251A:BOX DRAWINGS UP HEAVY AND LEFT LIGHT +251B:BOX DRAWINGS HEAVY UP AND LEFT +251C:BOX DRAWINGS LIGHT VERTICAL AND RIGHT +251D:BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +251E:BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT +251F:BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT +2520:BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +2521:BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY +2522:BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY +2523:BOX DRAWINGS HEAVY VERTICAL AND RIGHT +2524:BOX DRAWINGS LIGHT VERTICAL AND LEFT +2525:BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +2526:BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT +2527:BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT +2528:BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +2529:BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY +252A:BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY +252B:BOX DRAWINGS HEAVY VERTICAL AND LEFT +252C:BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +252D:BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT +252E:BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT +252F:BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +2530:BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +2531:BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY +2532:BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY +2533:BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +2534:BOX DRAWINGS LIGHT UP AND HORIZONTAL +2535:BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT +2536:BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT +2537:BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +2538:BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +2539:BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY +253A:BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY +253B:BOX DRAWINGS HEAVY UP AND HORIZONTAL +253C:BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +253D:BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT +253E:BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT +253F:BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +2540:BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT +2541:BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT +2542:BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT +2543:BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT +2544:BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT +2545:BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT +2546:BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT +2547:BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY +2548:BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY +2549:BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY +254A:BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY +254B:BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +254C:BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL +254D:BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL +254E:BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL +254F:BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL +2550:BOX DRAWINGS DOUBLE HORIZONTAL +2551:BOX DRAWINGS DOUBLE VERTICAL +2552:BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553:BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +2554:BOX DRAWINGS DOUBLE DOWN AND RIGHT +2555:BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2556:BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2557:BOX DRAWINGS DOUBLE DOWN AND LEFT +2558:BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2559:BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +255A:BOX DRAWINGS DOUBLE UP AND RIGHT +255B:BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255C:BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255D:BOX DRAWINGS DOUBLE UP AND LEFT +255E:BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F:BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +2560:BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2561:BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562:BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2563:BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2564:BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565:BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2566:BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2567:BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568:BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2569:BOX DRAWINGS DOUBLE UP AND HORIZONTAL +256A:BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +256B:BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256C:BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +256D:BOX DRAWINGS LIGHT ARC DOWN AND RIGHT +256E:BOX DRAWINGS LIGHT ARC DOWN AND LEFT +256F:BOX DRAWINGS LIGHT ARC UP AND LEFT +2570:BOX DRAWINGS LIGHT ARC UP AND RIGHT +2571:BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT +2572:BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT +2573:BOX DRAWINGS LIGHT DIAGONAL CROSS +2574:BOX DRAWINGS LIGHT LEFT +2575:BOX DRAWINGS LIGHT UP +2576:BOX DRAWINGS LIGHT RIGHT +2577:BOX DRAWINGS LIGHT DOWN +2578:BOX DRAWINGS HEAVY LEFT +2579:BOX DRAWINGS HEAVY UP +257A:BOX DRAWINGS HEAVY RIGHT +257B:BOX DRAWINGS HEAVY DOWN +257C:BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT +257D:BOX DRAWINGS LIGHT UP AND HEAVY DOWN +257E:BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT +257F:BOX DRAWINGS HEAVY UP AND LIGHT DOWN +2580:UPPER HALF BLOCK +2581:LOWER ONE EIGHTH BLOCK +2582:LOWER ONE QUARTER BLOCK +2583:LOWER THREE EIGHTHS BLOCK +2584:LOWER HALF BLOCK +2585:LOWER FIVE EIGHTHS BLOCK +2586:LOWER THREE QUARTERS BLOCK +2587:LOWER SEVEN EIGHTHS BLOCK +2588:FULL BLOCK +2589:LEFT SEVEN EIGHTHS BLOCK +258A:LEFT THREE QUARTERS BLOCK +258B:LEFT FIVE EIGHTHS BLOCK +258C:LEFT HALF BLOCK +258D:LEFT THREE EIGHTHS BLOCK +258E:LEFT ONE QUARTER BLOCK +258F:LEFT ONE EIGHTH BLOCK +2590:RIGHT HALF BLOCK +2591:LIGHT SHADE +2592:MEDIUM SHADE +2593:DARK SHADE +2594:UPPER ONE EIGHTH BLOCK +2595:RIGHT ONE EIGHTH BLOCK +25A0:BLACK SQUARE +25A1:WHITE SQUARE +25A2:WHITE SQUARE WITH ROUNDED CORNERS +25A3:WHITE SQUARE CONTAINING BLACK SMALL SQUARE +25A4:SQUARE WITH HORIZONTAL FILL +25A5:SQUARE WITH VERTICAL FILL +25A6:SQUARE WITH ORTHOGONAL CROSSHATCH FILL +25A7:SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL +25A8:SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL +25A9:SQUARE WITH DIAGONAL CROSSHATCH FILL +25AA:BLACK SMALL SQUARE +25AB:WHITE SMALL SQUARE +25AC:BLACK RECTANGLE +25AD:WHITE RECTANGLE +25AE:BLACK VERTICAL RECTANGLE +25AF:WHITE VERTICAL RECTANGLE +25B0:BLACK PARALLELOGRAM +25B1:WHITE PARALLELOGRAM +25B2:BLACK UP-POINTING TRIANGLE +25B3:WHITE UP-POINTING TRIANGLE +25B4:BLACK UP-POINTING SMALL TRIANGLE +25B5:WHITE UP-POINTING SMALL TRIANGLE +25B6:BLACK RIGHT-POINTING TRIANGLE +25B7:WHITE RIGHT-POINTING TRIANGLE +25B8:BLACK RIGHT-POINTING SMALL TRIANGLE +25B9:WHITE RIGHT-POINTING SMALL TRIANGLE +25BA:BLACK RIGHT-POINTING POINTER +25BB:WHITE RIGHT-POINTING POINTER +25BC:BLACK DOWN-POINTING TRIANGLE +25BD:WHITE DOWN-POINTING TRIANGLE +25BE:BLACK DOWN-POINTING SMALL TRIANGLE +25BF:WHITE DOWN-POINTING SMALL TRIANGLE +25C0:BLACK LEFT-POINTING TRIANGLE +25C1:WHITE LEFT-POINTING TRIANGLE +25C2:BLACK LEFT-POINTING SMALL TRIANGLE +25C3:WHITE LEFT-POINTING SMALL TRIANGLE +25C4:BLACK LEFT-POINTING POINTER +25C5:WHITE LEFT-POINTING POINTER +25C6:BLACK DIAMOND +25C7:WHITE DIAMOND +25C8:WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND +25C9:FISHEYE +25CA:LOZENGE +25CB:WHITE CIRCLE +25CC:DOTTED CIRCLE +25CD:CIRCLE WITH VERTICAL FILL +25CE:BULLSEYE +25CF:BLACK CIRCLE +25D0:CIRCLE WITH LEFT HALF BLACK +25D1:CIRCLE WITH RIGHT HALF BLACK +25D2:CIRCLE WITH LOWER HALF BLACK +25D3:CIRCLE WITH UPPER HALF BLACK +25D4:CIRCLE WITH UPPER RIGHT QUADRANT BLACK +25D5:CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK +25D6:LEFT HALF BLACK CIRCLE +25D7:RIGHT HALF BLACK CIRCLE +25D8:INVERSE BULLET +25D9:INVERSE WHITE CIRCLE +25DA:UPPER HALF INVERSE WHITE CIRCLE +25DB:LOWER HALF INVERSE WHITE CIRCLE +25DC:UPPER LEFT QUADRANT CIRCULAR ARC +25DD:UPPER RIGHT QUADRANT CIRCULAR ARC +25DE:LOWER RIGHT QUADRANT CIRCULAR ARC +25DF:LOWER LEFT QUADRANT CIRCULAR ARC +25E0:UPPER HALF CIRCLE +25E1:LOWER HALF CIRCLE +25E2:BLACK LOWER RIGHT TRIANGLE +25E3:BLACK LOWER LEFT TRIANGLE +25E4:BLACK UPPER LEFT TRIANGLE +25E5:BLACK UPPER RIGHT TRIANGLE +25E6:WHITE BULLET +25E7:SQUARE WITH LEFT HALF BLACK +25E8:SQUARE WITH RIGHT HALF BLACK +25E9:SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK +25EA:SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK +25EB:WHITE SQUARE WITH VERTICAL BISECTING LINE +25EC:WHITE UP-POINTING TRIANGLE WITH DOT +25ED:UP-POINTING TRIANGLE WITH LEFT HALF BLACK +25EE:UP-POINTING TRIANGLE WITH RIGHT HALF BLACK +25EF:LARGE CIRCLE +25F0:WHITE SQUARE WITH UPPER LEFT QUADRANT +25F1:WHITE SQUARE WITH LOWER LEFT QUADRANT +25F2:WHITE SQUARE WITH LOWER RIGHT QUADRANT +25F3:WHITE SQUARE WITH UPPER RIGHT QUADRANT +25F4:WHITE CIRCLE WITH UPPER LEFT QUADRANT +25F5:WHITE CIRCLE WITH LOWER LEFT QUADRANT +25F6:WHITE CIRCLE WITH LOWER RIGHT QUADRANT +25F7:WHITE CIRCLE WITH UPPER RIGHT QUADRANT +2600:BLACK SUN WITH RAYS +2601:CLOUD +2602:UMBRELLA +2603:SNOWMAN +2604:COMET +2605:BLACK STAR +2606:WHITE STAR +2607:LIGHTNING +2608:THUNDERSTORM +2609:SUN +260A:ASCENDING NODE +260B:DESCENDING NODE +260C:CONJUNCTION +260D:OPPOSITION +260E:BLACK TELEPHONE +260F:WHITE TELEPHONE +2610:BALLOT BOX +2611:BALLOT BOX WITH CHECK +2612:BALLOT BOX WITH X +2613:SALTIRE +2619:REVERSED ROTATED FLORAL HEART BULLET +261A:BLACK LEFT POINTING INDEX +261B:BLACK RIGHT POINTING INDEX +261C:WHITE LEFT POINTING INDEX +261D:WHITE UP POINTING INDEX +261E:WHITE RIGHT POINTING INDEX +261F:WHITE DOWN POINTING INDEX +2620:SKULL AND CROSSBONES +2621:CAUTION SIGN +2622:RADIOACTIVE SIGN +2623:BIOHAZARD SIGN +2624:CADUCEUS +2625:ANKH +2626:ORTHODOX CROSS +2627:CHI RHO +2628:CROSS OF LORRAINE +2629:CROSS OF JERUSALEM +262A:STAR AND CRESCENT +262B:FARSI SYMBOL +262C:ADI SHAKTI +262D:HAMMER AND SICKLE +262E:PEACE SYMBOL +262F:YIN YANG +2630:TRIGRAM FOR HEAVEN +2631:TRIGRAM FOR LAKE +2632:TRIGRAM FOR FIRE +2633:TRIGRAM FOR THUNDER +2634:TRIGRAM FOR WIND +2635:TRIGRAM FOR WATER +2636:TRIGRAM FOR MOUNTAIN +2637:TRIGRAM FOR EARTH +2638:WHEEL OF DHARMA +2639:WHITE FROWNING FACE +263A:WHITE SMILING FACE +263B:BLACK SMILING FACE +263C:WHITE SUN WITH RAYS +263D:FIRST QUARTER MOON +263E:LAST QUARTER MOON +263F:MERCURY +2640:FEMALE SIGN +2641:EARTH +2642:MALE SIGN +2643:JUPITER +2644:SATURN +2645:URANUS +2646:NEPTUNE +2647:PLUTO +2648:ARIES +2649:TAURUS +264A:GEMINI +264B:CANCER +264C:LEO +264D:VIRGO +264E:LIBRA +264F:SCORPIUS +2650:SAGITTARIUS +2651:CAPRICORN +2652:AQUARIUS +2653:PISCES +2654:WHITE CHESS KING +2655:WHITE CHESS QUEEN +2656:WHITE CHESS ROOK +2657:WHITE CHESS BISHOP +2658:WHITE CHESS KNIGHT +2659:WHITE CHESS PAWN +265A:BLACK CHESS KING +265B:BLACK CHESS QUEEN +265C:BLACK CHESS ROOK +265D:BLACK CHESS BISHOP +265E:BLACK CHESS KNIGHT +265F:BLACK CHESS PAWN +2660:BLACK SPADE SUIT +2661:WHITE HEART SUIT +2662:WHITE DIAMOND SUIT +2663:BLACK CLUB SUIT +2664:WHITE SPADE SUIT +2665:BLACK HEART SUIT +2666:BLACK DIAMOND SUIT +2667:WHITE CLUB SUIT +2668:HOT SPRINGS +2669:QUARTER NOTE +266A:EIGHTH NOTE +266B:BEAMED EIGHTH NOTES +266C:BEAMED SIXTEENTH NOTES +266D:MUSIC FLAT SIGN +266E:MUSIC NATURAL SIGN +266F:MUSIC SHARP SIGN +2670:WEST SYRIAC CROSS +2671:EAST SYRIAC CROSS +FB00:LATIN SMALL LIGATURE FF +FB01:LATIN SMALL LIGATURE FI +FB02:LATIN SMALL LIGATURE FL +FB03:LATIN SMALL LIGATURE FFI +FB04:LATIN SMALL LIGATURE FFL +FB05:LATIN SMALL LIGATURE LONG S T +FB06:LATIN SMALL LIGATURE ST +FB13:ARMENIAN SMALL LIGATURE MEN NOW +FB14:ARMENIAN SMALL LIGATURE MEN ECH +FB15:ARMENIAN SMALL LIGATURE MEN INI +FB16:ARMENIAN SMALL LIGATURE VEW NOW +FB17:ARMENIAN SMALL LIGATURE MEN XEH +FE20:COMBINING LIGATURE LEFT HALF +FE21:COMBINING LIGATURE RIGHT HALF +FE22:COMBINING DOUBLE TILDE LEFT HALF +FE23:COMBINING DOUBLE TILDE RIGHT HALF +FFF9:INTERLINEAR ANNOTATION ANCHOR +FFFA:INTERLINEAR ANNOTATION SEPARATOR +FFFB:INTERLINEAR ANNOTATION TERMINATOR +FFFC:OBJECT REPLACEMENT CHARACTER +FFFD:REPLACEMENT CHARACTER diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-3B.txt b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-3B.txt new file mode 100644 index 00000000000..11316824871 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/MES-3B.txt @@ -0,0 +1,21 @@ +# Plane 00 +# Rows Positions (Cells) +00 20-7E A0-FF +01 00-FF +02 00-1F 22-33 50-AD B0-EE +03 00-4E 60-62 74-75 7A 7E 84-8A 8C 8E-A1 A3-CE D0-D7 DA-F3 +04 00-86 88-89 8C-C4 C7-C8 CB-CC D0-F5 F8-F9 +05 31-56 59-5F 61-87 89-8A +10 D0-F6 FB +1E 00-9B A0-F9 +1F 00-15 18-1D 20-45 48-4D 50-57 59 5B 5D 5F-7D 80-B4 B6-C4 C6-D3 D6-DB DD-EF F2-F4 F6-FE +20 00-46 48-4D 6A-70 74-8E A0-AF D0-E3 +21 00-3A 53-83 90-F3 +22 00-F1 +23 00-7B 7D-9A +34 40-4A +25 00-95 A0-F7 +26 00-13 19-71 +FB 00-06 13-17 +FE 20-23 +FF F9-FD diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/WGL4.lst b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/WGL4.lst new file mode 100644 index 00000000000..b33e1715fc4 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/WGL4.lst @@ -0,0 +1,653 @@ +0020:SPACE +0021:EXCLAMATION MARK +0022:QUOTATION MARK +0023:NUMBER SIGN +0024:DOLLAR SIGN +0025:PERCENT SIGN +0026:AMPERSAND +0027:APOSTROPHE +0028:LEFT PARENTHESIS +0029:RIGHT PARENTHESIS +002A:ASTERISK +002B:PLUS SIGN +002C:COMMA +002D:HYPHEN-MINUS +002E:FULL STOP +002F:SOLIDUS +0030:DIGIT ZERO +0031:DIGIT ONE +0032:DIGIT TWO +0033:DIGIT THREE +0034:DIGIT FOUR +0035:DIGIT FIVE +0036:DIGIT SIX +0037:DIGIT SEVEN +0038:DIGIT EIGHT +0039:DIGIT NINE +003A:COLON +003B:SEMICOLON +003C:LESS-THAN SIGN +003D:EQUALS SIGN +003E:GREATER-THAN SIGN +003F:QUESTION MARK +0040:COMMERCIAL AT +0041:LATIN CAPITAL LETTER A +0042:LATIN CAPITAL LETTER B +0043:LATIN CAPITAL LETTER C +0044:LATIN CAPITAL LETTER D +0045:LATIN CAPITAL LETTER E +0046:LATIN CAPITAL LETTER F +0047:LATIN CAPITAL LETTER G +0048:LATIN CAPITAL LETTER H +0049:LATIN CAPITAL LETTER I +004A:LATIN CAPITAL LETTER J +004B:LATIN CAPITAL LETTER K +004C:LATIN CAPITAL LETTER L +004D:LATIN CAPITAL LETTER M +004E:LATIN CAPITAL LETTER N +004F:LATIN CAPITAL LETTER O +0050:LATIN CAPITAL LETTER P +0051:LATIN CAPITAL LETTER Q +0052:LATIN CAPITAL LETTER R +0053:LATIN CAPITAL LETTER S +0054:LATIN CAPITAL LETTER T +0055:LATIN CAPITAL LETTER U +0056:LATIN CAPITAL LETTER V +0057:LATIN CAPITAL LETTER W +0058:LATIN CAPITAL LETTER X +0059:LATIN CAPITAL LETTER Y +005A:LATIN CAPITAL LETTER Z +005B:LEFT SQUARE BRACKET +005C:REVERSE SOLIDUS +005D:RIGHT SQUARE BRACKET +005E:CIRCUMFLEX ACCENT +005F:LOW LINE +0060:GRAVE ACCENT +0061:LATIN SMALL LETTER A +0062:LATIN SMALL LETTER B +0063:LATIN SMALL LETTER C +0064:LATIN SMALL LETTER D +0065:LATIN SMALL LETTER E +0066:LATIN SMALL LETTER F +0067:LATIN SMALL LETTER G +0068:LATIN SMALL LETTER H +0069:LATIN SMALL LETTER I +006A:LATIN SMALL LETTER J +006B:LATIN SMALL LETTER K +006C:LATIN SMALL LETTER L +006D:LATIN SMALL LETTER M +006E:LATIN SMALL LETTER N +006F:LATIN SMALL LETTER O +0070:LATIN SMALL LETTER P +0071:LATIN SMALL LETTER Q +0072:LATIN SMALL LETTER R +0073:LATIN SMALL LETTER S +0074:LATIN SMALL LETTER T +0075:LATIN SMALL LETTER U +0076:LATIN SMALL LETTER V +0077:LATIN SMALL LETTER W +0078:LATIN SMALL LETTER X +0079:LATIN SMALL LETTER Y +007A:LATIN SMALL LETTER Z +007B:LEFT CURLY BRACKET +007C:VERTICAL LINE +007D:RIGHT CURLY BRACKET +007E:TILDE +00A0:NO-BREAK SPACE +00A1:INVERTED EXCLAMATION MARK +00A2:CENT SIGN +00A3:POUND SIGN +00A4:CURRENCY SIGN +00A5:YEN SIGN +00A6:BROKEN BAR +00A7:SECTION SIGN +00A8:DIAERESIS +00A9:COPYRIGHT SIGN +00AA:FEMININE ORDINAL INDICATOR +00AB:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC:NOT SIGN +00AD:SOFT HYPHEN +00AE:REGISTERED SIGN +00AF:MACRON +00B0:DEGREE SIGN +00B1:PLUS-MINUS SIGN +00B2:SUPERSCRIPT TWO +00B3:SUPERSCRIPT THREE +00B4:ACUTE ACCENT +00B5:MICRO SIGN +00B6:PILCROW SIGN +00B7:MIDDLE DOT +00B8:CEDILLA +00B9:SUPERSCRIPT ONE +00BA:MASCULINE ORDINAL INDICATOR +00BB:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC:VULGAR FRACTION ONE QUARTER +00BD:VULGAR FRACTION ONE HALF +00BE:VULGAR FRACTION THREE QUARTERS +00BF:INVERTED QUESTION MARK +00C0:LATIN CAPITAL LETTER A WITH GRAVE +00C1:LATIN CAPITAL LETTER A WITH ACUTE +00C2:LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3:LATIN CAPITAL LETTER A WITH TILDE +00C4:LATIN CAPITAL LETTER A WITH DIAERESIS +00C5:LATIN CAPITAL LETTER A WITH RING ABOVE +00C6:LATIN CAPITAL LETTER AE +00C7:LATIN CAPITAL LETTER C WITH CEDILLA +00C8:LATIN CAPITAL LETTER E WITH GRAVE +00C9:LATIN CAPITAL LETTER E WITH ACUTE +00CA:LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB:LATIN CAPITAL LETTER E WITH DIAERESIS +00CC:LATIN CAPITAL LETTER I WITH GRAVE +00CD:LATIN CAPITAL LETTER I WITH ACUTE +00CE:LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF:LATIN CAPITAL LETTER I WITH DIAERESIS +00D0:LATIN CAPITAL LETTER ETH +00D1:LATIN CAPITAL LETTER N WITH TILDE +00D2:LATIN CAPITAL LETTER O WITH GRAVE +00D3:LATIN CAPITAL LETTER O WITH ACUTE +00D4:LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5:LATIN CAPITAL LETTER O WITH TILDE +00D6:LATIN CAPITAL LETTER O WITH DIAERESIS +00D7:MULTIPLICATION SIGN +00D8:LATIN CAPITAL LETTER O WITH STROKE +00D9:LATIN CAPITAL LETTER U WITH GRAVE +00DA:LATIN CAPITAL LETTER U WITH ACUTE +00DB:LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC:LATIN CAPITAL LETTER U WITH DIAERESIS +00DD:LATIN CAPITAL LETTER Y WITH ACUTE +00DE:LATIN CAPITAL LETTER THORN +00DF:LATIN SMALL LETTER SHARP S +00E0:LATIN SMALL LETTER A WITH GRAVE +00E1:LATIN SMALL LETTER A WITH ACUTE +00E2:LATIN SMALL LETTER A WITH CIRCUMFLEX +00E3:LATIN SMALL LETTER A WITH TILDE +00E4:LATIN SMALL LETTER A WITH DIAERESIS +00E5:LATIN SMALL LETTER A WITH RING ABOVE +00E6:LATIN SMALL LETTER AE +00E7:LATIN SMALL LETTER C WITH CEDILLA +00E8:LATIN SMALL LETTER E WITH GRAVE +00E9:LATIN SMALL LETTER E WITH ACUTE +00EA:LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB:LATIN SMALL LETTER E WITH DIAERESIS +00EC:LATIN SMALL LETTER I WITH GRAVE +00ED:LATIN SMALL LETTER I WITH ACUTE +00EE:LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF:LATIN SMALL LETTER I WITH DIAERESIS +00F0:LATIN SMALL LETTER ETH +00F1:LATIN SMALL LETTER N WITH TILDE +00F2:LATIN SMALL LETTER O WITH GRAVE +00F3:LATIN SMALL LETTER O WITH ACUTE +00F4:LATIN SMALL LETTER O WITH CIRCUMFLEX +00F5:LATIN SMALL LETTER O WITH TILDE +00F6:LATIN SMALL LETTER O WITH DIAERESIS +00F7:DIVISION SIGN +00F8:LATIN SMALL LETTER O WITH STROKE +00F9:LATIN SMALL LETTER U WITH GRAVE +00FA:LATIN SMALL LETTER U WITH ACUTE +00FB:LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC:LATIN SMALL LETTER U WITH DIAERESIS +00FD:LATIN SMALL LETTER Y WITH ACUTE +00FE:LATIN SMALL LETTER THORN +00FF:LATIN SMALL LETTER Y WITH DIAERESIS +0100:LATIN CAPITAL LETTER A WITH MACRON +0101:LATIN SMALL LETTER A WITH MACRON +0102:LATIN CAPITAL LETTER A WITH BREVE +0103:LATIN SMALL LETTER A WITH BREVE +0104:LATIN CAPITAL LETTER A WITH OGONEK +0105:LATIN SMALL LETTER A WITH OGONEK +0106:LATIN CAPITAL LETTER C WITH ACUTE +0107:LATIN SMALL LETTER C WITH ACUTE +0108:LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0109:LATIN SMALL LETTER C WITH CIRCUMFLEX +010A:LATIN CAPITAL LETTER C WITH DOT ABOVE +010B:LATIN SMALL LETTER C WITH DOT ABOVE +010C:LATIN CAPITAL LETTER C WITH CARON +010D:LATIN SMALL LETTER C WITH CARON +010E:LATIN CAPITAL LETTER D WITH CARON +010F:LATIN SMALL LETTER D WITH CARON +0110:LATIN CAPITAL LETTER D WITH STROKE +0111:LATIN SMALL LETTER D WITH STROKE +0112:LATIN CAPITAL LETTER E WITH MACRON +0113:LATIN SMALL LETTER E WITH MACRON +0114:LATIN CAPITAL LETTER E WITH BREVE +0115:LATIN SMALL LETTER E WITH BREVE +0116:LATIN CAPITAL LETTER E WITH DOT ABOVE +0117:LATIN SMALL LETTER E WITH DOT ABOVE +0118:LATIN CAPITAL LETTER E WITH OGONEK +0119:LATIN SMALL LETTER E WITH OGONEK +011A:LATIN CAPITAL LETTER E WITH CARON +011B:LATIN SMALL LETTER E WITH CARON +011C:LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011D:LATIN SMALL LETTER G WITH CIRCUMFLEX +011E:LATIN CAPITAL LETTER G WITH BREVE +011F:LATIN SMALL LETTER G WITH BREVE +0120:LATIN CAPITAL LETTER G WITH DOT ABOVE +0121:LATIN SMALL LETTER G WITH DOT ABOVE +0122:LATIN CAPITAL LETTER G WITH CEDILLA +0123:LATIN SMALL LETTER G WITH CEDILLA +0124:LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0125:LATIN SMALL LETTER H WITH CIRCUMFLEX +0126:LATIN CAPITAL LETTER H WITH STROKE +0127:LATIN SMALL LETTER H WITH STROKE +0128:LATIN CAPITAL LETTER I WITH TILDE +0129:LATIN SMALL LETTER I WITH TILDE +012A:LATIN CAPITAL LETTER I WITH MACRON +012B:LATIN SMALL LETTER I WITH MACRON +012C:LATIN CAPITAL LETTER I WITH BREVE +012D:LATIN SMALL LETTER I WITH BREVE +012E:LATIN CAPITAL LETTER I WITH OGONEK +012F:LATIN SMALL LETTER I WITH OGONEK +0130:LATIN CAPITAL LETTER I WITH DOT ABOVE +0131:LATIN SMALL LETTER DOTLESS I +0132:LATIN CAPITAL LIGATURE IJ +0133:LATIN SMALL LIGATURE IJ +0134:LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0135:LATIN SMALL LETTER J WITH CIRCUMFLEX +0136:LATIN CAPITAL LETTER K WITH CEDILLA +0137:LATIN SMALL LETTER K WITH CEDILLA +0138:LATIN SMALL LETTER KRA +0139:LATIN CAPITAL LETTER L WITH ACUTE +013A:LATIN SMALL LETTER L WITH ACUTE +013B:LATIN CAPITAL LETTER L WITH CEDILLA +013C:LATIN SMALL LETTER L WITH CEDILLA +013D:LATIN CAPITAL LETTER L WITH CARON +013E:LATIN SMALL LETTER L WITH CARON +013F:LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140:LATIN SMALL LETTER L WITH MIDDLE DOT +0141:LATIN CAPITAL LETTER L WITH STROKE +0142:LATIN SMALL LETTER L WITH STROKE +0143:LATIN CAPITAL LETTER N WITH ACUTE +0144:LATIN SMALL LETTER N WITH ACUTE +0145:LATIN CAPITAL LETTER N WITH CEDILLA +0146:LATIN SMALL LETTER N WITH CEDILLA +0147:LATIN CAPITAL LETTER N WITH CARON +0148:LATIN SMALL LETTER N WITH CARON +0149:LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A:LATIN CAPITAL LETTER ENG +014B:LATIN SMALL LETTER ENG +014C:LATIN CAPITAL LETTER O WITH MACRON +014D:LATIN SMALL LETTER O WITH MACRON +014E:LATIN CAPITAL LETTER O WITH BREVE +014F:LATIN SMALL LETTER O WITH BREVE +0150:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0151:LATIN SMALL LETTER O WITH DOUBLE ACUTE +0152:LATIN CAPITAL LIGATURE OE +0153:LATIN SMALL LIGATURE OE +0154:LATIN CAPITAL LETTER R WITH ACUTE +0155:LATIN SMALL LETTER R WITH ACUTE +0156:LATIN CAPITAL LETTER R WITH CEDILLA +0157:LATIN SMALL LETTER R WITH CEDILLA +0158:LATIN CAPITAL LETTER R WITH CARON +0159:LATIN SMALL LETTER R WITH CARON +015A:LATIN CAPITAL LETTER S WITH ACUTE +015B:LATIN SMALL LETTER S WITH ACUTE +015C:LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015D:LATIN SMALL LETTER S WITH CIRCUMFLEX +015E:LATIN CAPITAL LETTER S WITH CEDILLA +015F:LATIN SMALL LETTER S WITH CEDILLA +0160:LATIN CAPITAL LETTER S WITH CARON +0161:LATIN SMALL LETTER S WITH CARON +0162:LATIN CAPITAL LETTER T WITH CEDILLA +0163:LATIN SMALL LETTER T WITH CEDILLA +0164:LATIN CAPITAL LETTER T WITH CARON +0165:LATIN SMALL LETTER T WITH CARON +0166:LATIN CAPITAL LETTER T WITH STROKE +0167:LATIN SMALL LETTER T WITH STROKE +0168:LATIN CAPITAL LETTER U WITH TILDE +0169:LATIN SMALL LETTER U WITH TILDE +016A:LATIN CAPITAL LETTER U WITH MACRON +016B:LATIN SMALL LETTER U WITH MACRON +016C:LATIN CAPITAL LETTER U WITH BREVE +016D:LATIN SMALL LETTER U WITH BREVE +016E:LATIN CAPITAL LETTER U WITH RING ABOVE +016F:LATIN SMALL LETTER U WITH RING ABOVE +0170:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0171:LATIN SMALL LETTER U WITH DOUBLE ACUTE +0172:LATIN CAPITAL LETTER U WITH OGONEK +0173:LATIN SMALL LETTER U WITH OGONEK +0174:LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175:LATIN SMALL LETTER W WITH CIRCUMFLEX +0176:LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177:LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178:LATIN CAPITAL LETTER Y WITH DIAERESIS +0179:LATIN CAPITAL LETTER Z WITH ACUTE +017A:LATIN SMALL LETTER Z WITH ACUTE +017B:LATIN CAPITAL LETTER Z WITH DOT ABOVE +017C:LATIN SMALL LETTER Z WITH DOT ABOVE +017D:LATIN CAPITAL LETTER Z WITH CARON +017E:LATIN SMALL LETTER Z WITH CARON +017F:LATIN SMALL LETTER LONG S +0192:LATIN SMALL LETTER F WITH HOOK +01FA:LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FB:LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FC:LATIN CAPITAL LETTER AE WITH ACUTE +01FD:LATIN SMALL LETTER AE WITH ACUTE +01FE:LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +01FF:LATIN SMALL LETTER O WITH STROKE AND ACUTE +02C6:MODIFIER LETTER CIRCUMFLEX ACCENT +02C7:CARON +02C9:MODIFIER LETTER MACRON +02D8:BREVE +02D9:DOT ABOVE +02DA:RING ABOVE +02DB:OGONEK +02DC:SMALL TILDE +02DD:DOUBLE ACUTE ACCENT +0384:GREEK TONOS +0385:GREEK DIALYTIKA TONOS +0386:GREEK CAPITAL LETTER ALPHA WITH TONOS +0387:GREEK ANO TELEIA +0388:GREEK CAPITAL LETTER EPSILON WITH TONOS +0389:GREEK CAPITAL LETTER ETA WITH TONOS +038A:GREEK CAPITAL LETTER IOTA WITH TONOS +038C:GREEK CAPITAL LETTER OMICRON WITH TONOS +038E:GREEK CAPITAL LETTER UPSILON WITH TONOS +038F:GREEK CAPITAL LETTER OMEGA WITH TONOS +0390:GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391:GREEK CAPITAL LETTER ALPHA +0392:GREEK CAPITAL LETTER BETA +0393:GREEK CAPITAL LETTER GAMMA +0394:GREEK CAPITAL LETTER DELTA +0395:GREEK CAPITAL LETTER EPSILON +0396:GREEK CAPITAL LETTER ZETA +0397:GREEK CAPITAL LETTER ETA +0398:GREEK CAPITAL LETTER THETA +0399:GREEK CAPITAL LETTER IOTA +039A:GREEK CAPITAL LETTER KAPPA +039B:GREEK CAPITAL LETTER LAMDA +039C:GREEK CAPITAL LETTER MU +039D:GREEK CAPITAL LETTER NU +039E:GREEK CAPITAL LETTER XI +039F:GREEK CAPITAL LETTER OMICRON +03A0:GREEK CAPITAL LETTER PI +03A1:GREEK CAPITAL LETTER RHO +03A3:GREEK CAPITAL LETTER SIGMA +03A4:GREEK CAPITAL LETTER TAU +03A5:GREEK CAPITAL LETTER UPSILON +03A6:GREEK CAPITAL LETTER PHI +03A7:GREEK CAPITAL LETTER CHI +03A8:GREEK CAPITAL LETTER PSI +03A9:GREEK CAPITAL LETTER OMEGA +03AA:GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB:GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03AC:GREEK SMALL LETTER ALPHA WITH TONOS +03AD:GREEK SMALL LETTER EPSILON WITH TONOS +03AE:GREEK SMALL LETTER ETA WITH TONOS +03AF:GREEK SMALL LETTER IOTA WITH TONOS +03B0:GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03B1:GREEK SMALL LETTER ALPHA +03B2:GREEK SMALL LETTER BETA +03B3:GREEK SMALL LETTER GAMMA +03B4:GREEK SMALL LETTER DELTA +03B5:GREEK SMALL LETTER EPSILON +03B6:GREEK SMALL LETTER ZETA +03B7:GREEK SMALL LETTER ETA +03B8:GREEK SMALL LETTER THETA +03B9:GREEK SMALL LETTER IOTA +03BA:GREEK SMALL LETTER KAPPA +03BB:GREEK SMALL LETTER LAMDA +03BC:GREEK SMALL LETTER MU +03BD:GREEK SMALL LETTER NU +03BE:GREEK SMALL LETTER XI +03BF:GREEK SMALL LETTER OMICRON +03C0:GREEK SMALL LETTER PI +03C1:GREEK SMALL LETTER RHO +03C2:GREEK SMALL LETTER FINAL SIGMA +03C3:GREEK SMALL LETTER SIGMA +03C4:GREEK SMALL LETTER TAU +03C5:GREEK SMALL LETTER UPSILON +03C6:GREEK SMALL LETTER PHI +03C7:GREEK SMALL LETTER CHI +03C8:GREEK SMALL LETTER PSI +03C9:GREEK SMALL LETTER OMEGA +03CA:GREEK SMALL LETTER IOTA WITH DIALYTIKA +03CB:GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03CC:GREEK SMALL LETTER OMICRON WITH TONOS +03CD:GREEK SMALL LETTER UPSILON WITH TONOS +03CE:GREEK SMALL LETTER OMEGA WITH TONOS +0401:CYRILLIC CAPITAL LETTER IO +0402:CYRILLIC CAPITAL LETTER DJE +0403:CYRILLIC CAPITAL LETTER GJE +0404:CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405:CYRILLIC CAPITAL LETTER DZE +0406:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407:CYRILLIC CAPITAL LETTER YI +0408:CYRILLIC CAPITAL LETTER JE +0409:CYRILLIC CAPITAL LETTER LJE +040A:CYRILLIC CAPITAL LETTER NJE +040B:CYRILLIC CAPITAL LETTER TSHE +040C:CYRILLIC CAPITAL LETTER KJE +040E:CYRILLIC CAPITAL LETTER SHORT U +040F:CYRILLIC CAPITAL LETTER DZHE +0410:CYRILLIC CAPITAL LETTER A +0411:CYRILLIC CAPITAL LETTER BE +0412:CYRILLIC CAPITAL LETTER VE +0413:CYRILLIC CAPITAL LETTER GHE +0414:CYRILLIC CAPITAL LETTER DE +0415:CYRILLIC CAPITAL LETTER IE +0416:CYRILLIC CAPITAL LETTER ZHE +0417:CYRILLIC CAPITAL LETTER ZE +0418:CYRILLIC CAPITAL LETTER I +0419:CYRILLIC CAPITAL LETTER SHORT I +041A:CYRILLIC CAPITAL LETTER KA +041B:CYRILLIC CAPITAL LETTER EL +041C:CYRILLIC CAPITAL LETTER EM +041D:CYRILLIC CAPITAL LETTER EN +041E:CYRILLIC CAPITAL LETTER O +041F:CYRILLIC CAPITAL LETTER PE +0420:CYRILLIC CAPITAL LETTER ER +0421:CYRILLIC CAPITAL LETTER ES +0422:CYRILLIC CAPITAL LETTER TE +0423:CYRILLIC CAPITAL LETTER U +0424:CYRILLIC CAPITAL LETTER EF +0425:CYRILLIC CAPITAL LETTER HA +0426:CYRILLIC CAPITAL LETTER TSE +0427:CYRILLIC CAPITAL LETTER CHE +0428:CYRILLIC CAPITAL LETTER SHA +0429:CYRILLIC CAPITAL LETTER SHCHA +042A:CYRILLIC CAPITAL LETTER HARD SIGN +042B:CYRILLIC CAPITAL LETTER YERU +042C:CYRILLIC CAPITAL LETTER SOFT SIGN +042D:CYRILLIC CAPITAL LETTER E +042E:CYRILLIC CAPITAL LETTER YU +042F:CYRILLIC CAPITAL LETTER YA +0430:CYRILLIC SMALL LETTER A +0431:CYRILLIC SMALL LETTER BE +0432:CYRILLIC SMALL LETTER VE +0433:CYRILLIC SMALL LETTER GHE +0434:CYRILLIC SMALL LETTER DE +0435:CYRILLIC SMALL LETTER IE +0436:CYRILLIC SMALL LETTER ZHE +0437:CYRILLIC SMALL LETTER ZE +0438:CYRILLIC SMALL LETTER I +0439:CYRILLIC SMALL LETTER SHORT I +043A:CYRILLIC SMALL LETTER KA +043B:CYRILLIC SMALL LETTER EL +043C:CYRILLIC SMALL LETTER EM +043D:CYRILLIC SMALL LETTER EN +043E:CYRILLIC SMALL LETTER O +043F:CYRILLIC SMALL LETTER PE +0440:CYRILLIC SMALL LETTER ER +0441:CYRILLIC SMALL LETTER ES +0442:CYRILLIC SMALL LETTER TE +0443:CYRILLIC SMALL LETTER U +0444:CYRILLIC SMALL LETTER EF +0445:CYRILLIC SMALL LETTER HA +0446:CYRILLIC SMALL LETTER TSE +0447:CYRILLIC SMALL LETTER CHE +0448:CYRILLIC SMALL LETTER SHA +0449:CYRILLIC SMALL LETTER SHCHA +044A:CYRILLIC SMALL LETTER HARD SIGN +044B:CYRILLIC SMALL LETTER YERU +044C:CYRILLIC SMALL LETTER SOFT SIGN +044D:CYRILLIC SMALL LETTER E +044E:CYRILLIC SMALL LETTER YU +044F:CYRILLIC SMALL LETTER YA +0451:CYRILLIC SMALL LETTER IO +0452:CYRILLIC SMALL LETTER DJE +0453:CYRILLIC SMALL LETTER GJE +0454:CYRILLIC SMALL LETTER UKRAINIAN IE +0455:CYRILLIC SMALL LETTER DZE +0456:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0457:CYRILLIC SMALL LETTER YI +0458:CYRILLIC SMALL LETTER JE +0459:CYRILLIC SMALL LETTER LJE +045A:CYRILLIC SMALL LETTER NJE +045B:CYRILLIC SMALL LETTER TSHE +045C:CYRILLIC SMALL LETTER KJE +045E:CYRILLIC SMALL LETTER SHORT U +045F:CYRILLIC SMALL LETTER DZHE +0490:CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0491:CYRILLIC SMALL LETTER GHE WITH UPTURN +1E80:LATIN CAPITAL LETTER W WITH GRAVE +1E81:LATIN SMALL LETTER W WITH GRAVE +1E82:LATIN CAPITAL LETTER W WITH ACUTE +1E83:LATIN SMALL LETTER W WITH ACUTE +1E84:LATIN CAPITAL LETTER W WITH DIAERESIS +1E85:LATIN SMALL LETTER W WITH DIAERESIS +1EF2:LATIN CAPITAL LETTER Y WITH GRAVE +1EF3:LATIN SMALL LETTER Y WITH GRAVE +2013:EN DASH +2014:EM DASH +2015:HORIZONTAL BAR +2017:DOUBLE LOW LINE +2018:LEFT SINGLE QUOTATION MARK +2019:RIGHT SINGLE QUOTATION MARK +201A:SINGLE LOW-9 QUOTATION MARK +201B:SINGLE HIGH-REVERSED-9 QUOTATION MARK +201C:LEFT DOUBLE QUOTATION MARK +201D:RIGHT DOUBLE QUOTATION MARK +201E:DOUBLE LOW-9 QUOTATION MARK +2020:DAGGER +2021:DOUBLE DAGGER +2022:BULLET +2026:HORIZONTAL ELLIPSIS +2030:PER MILLE SIGN +2032:PRIME +2033:DOUBLE PRIME +2039:SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203C:DOUBLE EXCLAMATION MARK +203E:OVERLINE +2044:FRACTION SLASH +207F:SUPERSCRIPT LATIN SMALL LETTER N +20A3:FRENCH FRANC SIGN +20A4:LIRA SIGN +20A7:PESETA SIGN +20AC:EURO SIGN +2105:CARE OF +2113:SCRIPT SMALL L +2116:NUMERO SIGN +2122:TRADE MARK SIGN +2126:OHM SIGN +212E:ESTIMATED SYMBOL +215B:VULGAR FRACTION ONE EIGHTH +215C:VULGAR FRACTION THREE EIGHTHS +215D:VULGAR FRACTION FIVE EIGHTHS +215E:VULGAR FRACTION SEVEN EIGHTHS +2190:LEFTWARDS ARROW +2191:UPWARDS ARROW +2192:RIGHTWARDS ARROW +2193:DOWNWARDS ARROW +2194:LEFT RIGHT ARROW +2195:UP DOWN ARROW +21A8:UP DOWN ARROW WITH BASE +2202:PARTIAL DIFFERENTIAL +2206:INCREMENT +220F:N-ARY PRODUCT +2211:N-ARY SUMMATION +2212:MINUS SIGN +2215:DIVISION SLASH +2219:BULLET OPERATOR +221A:SQUARE ROOT +221E:INFINITY +221F:RIGHT ANGLE +2229:INTERSECTION +222B:INTEGRAL +2248:ALMOST EQUAL TO +2260:NOT EQUAL TO +2261:IDENTICAL TO +2264:LESS-THAN OR EQUAL TO +2265:GREATER-THAN OR EQUAL TO +2302:HOUSE +2310:REVERSED NOT SIGN +2320:TOP HALF INTEGRAL +2321:BOTTOM HALF INTEGRAL +2500:BOX DRAWINGS LIGHT HORIZONTAL +2502:BOX DRAWINGS LIGHT VERTICAL +250C:BOX DRAWINGS LIGHT DOWN AND RIGHT +2510:BOX DRAWINGS LIGHT DOWN AND LEFT +2514:BOX DRAWINGS LIGHT UP AND RIGHT +2518:BOX DRAWINGS LIGHT UP AND LEFT +251C:BOX DRAWINGS LIGHT VERTICAL AND RIGHT +2524:BOX DRAWINGS LIGHT VERTICAL AND LEFT +252C:BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +2534:BOX DRAWINGS LIGHT UP AND HORIZONTAL +253C:BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +2550:BOX DRAWINGS DOUBLE HORIZONTAL +2551:BOX DRAWINGS DOUBLE VERTICAL +2552:BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553:BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +2554:BOX DRAWINGS DOUBLE DOWN AND RIGHT +2555:BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2556:BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2557:BOX DRAWINGS DOUBLE DOWN AND LEFT +2558:BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2559:BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +255A:BOX DRAWINGS DOUBLE UP AND RIGHT +255B:BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255C:BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255D:BOX DRAWINGS DOUBLE UP AND LEFT +255E:BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F:BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +2560:BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2561:BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562:BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2563:BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2564:BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565:BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2566:BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2567:BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568:BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2569:BOX DRAWINGS DOUBLE UP AND HORIZONTAL +256A:BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +256B:BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256C:BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +2580:UPPER HALF BLOCK +2584:LOWER HALF BLOCK +2588:FULL BLOCK +258C:LEFT HALF BLOCK +2590:RIGHT HALF BLOCK +2591:LIGHT SHADE +2592:MEDIUM SHADE +2593:DARK SHADE +25A0:BLACK SQUARE +25A1:WHITE SQUARE +25AA:BLACK SMALL SQUARE +25AB:WHITE SMALL SQUARE +25AC:BLACK RECTANGLE +25B2:BLACK UP-POINTING TRIANGLE +25BA:BLACK RIGHT-POINTING POINTER +25BC:BLACK DOWN-POINTING TRIANGLE +25C4:BLACK LEFT-POINTING POINTER +25CA:LOZENGE +25CB:WHITE CIRCLE +25CF:BLACK CIRCLE +25D8:INVERSE BULLET +25D9:INVERSE WHITE CIRCLE +25E6:WHITE BULLET +263A:WHITE SMILING FACE +263B:BLACK SMILING FACE +263C:WHITE SUN WITH RAYS +2640:FEMALE SIGN +2642:MALE SIGN +2660:BLACK SPADE SUIT +2663:BLACK CLUB SUIT +2665:BLACK HEART SUIT +2666:BLACK DIAMOND SUIT +266A:EIGHTH NOTE +266B:BEAMED EIGHTH NOTES +F001:LATIN SMALL LIGATURE FI +F002:LATIN SMALL LIGATURE FL +FB01:LATIN SMALL LIGATURE FI +FB02:LATIN SMALL LIGATURE FL diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/mes-list-expand.pl b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/mes-list-expand.pl new file mode 100755 index 00000000000..16b37369479 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/MES-Conformance/mes-list-expand.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl +# $Id: mes-list-expand.pl,v 1.1 2009-12-27 16:25:15 Stevan_White Exp $ +# +# Expand MES ranges, as available in CEN documents, into simple list +# of character codes. + +# Unicode table +$tblfile = "/usr/local/share/unicode/UnicodeData-Latest.txt"; +# Array size +$#table = 65535; + +# Read in complete Unicode table for the named entities +open(TABLE, "<$tblfile") || die "Cannot find $tblfile\n"; +while (<TABLE>) { + ($code,$name) = split(/[;\n]/, $_, 9999); + $table[hex($code)] = $name; +} +close(TABLE); + +if ($#ARGV >= 0) { + open(RANGE, $ARGV[0]); +} else { + open(RANGE, "<stdin"); +} +while (<RANGE>) { + if (/^\#.*/) { + next; + } else { + ($page,$codes) = split(/[\t]/, $_, 9999); + chomp $codes; + @range = split(/ /, $codes, 9999); + for ($i = 0; $i <= $#range; $i++) { + if (length($range[$i]) == 2) { + $code = 256*hex($page) + hex($range[$i]); + printf("%04X:%s\n", $code, $table[$code]); + } else { + ($lower,$upper) = split(/-/, $range[$i], 9999); + for ($j = hex($lower); $j <= hex($upper); $j++) { + $code = 256*hex($page) + $j; + printf("%04X:%s\n", $code, $table[$code]); + } + } + } + } +} diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py new file mode 100755 index 00000000000..c845d0d55ec --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/checkGlyphNumbers.py @@ -0,0 +1,98 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2011 Stevan White" +__date__ = "$Date: 2011-11-27 01:33:15 +0100 (Sun, 27 Nov 2011) $" +__version__ = "$Revision: 1907 $" + +__doc__ = """ +For most unicode ranges, glyph slot numbers should be the same as the +Unicode value. +The Private Use ranges are the exception: those characters should have a +definate non-Unicode number: -1 + +This script checks that this is the case, and prints out a warning +whenever it isn't. +""" + +import fontforge +import sys + +problem = False + +def inPrivateUseRange( glyph ): + e = glyph.encoding + + return ( ( e >= 0xE800 and e <= 0xF8FF ) + or ( e >= 0xFF000 and e <= 0xFFFFD ) + or ( e >= 0x100000 and e <= 0x10FFFD ) ) + +def isSpecialTrueType( glyph ): + """ Fontforge treats three control characters as the special + TrueType characters recommended by that standard + """ + e = glyph.encoding + + return e == 0 or e == 1 or e == 0xD + +from os import path +def checkGlyphNumbers( fontDir, fontFile ): + if isinstance( fontFile, ( list, tuple ) ): + print "In directory " + fontDir + for fontName in fontFile: + checkGlyphNumbers( fontDir, fontName ) + return + + print "Checking slot numbers in " + fontFile + font = fontforge.open( path.join( fontDir, fontFile ) ) + + g = font.selection.all() + g = font.selection.byGlyphs + + valid = True + for glyph in g: + if isSpecialTrueType( glyph ): + # FIXME really should complain if it DOESNT exist + pass + elif inPrivateUseRange( glyph ): + if glyph.unicode != -1: + print "Glyph at slot " + str( glyph.encoding ) \ + + " is Private Use but has Unicode" + problem = True + else: + if glyph.encoding != glyph.unicode: + print "Glyph at slot " + str( glyph.encoding ) \ + + " has wrong Unicode" + problem = True + +# -------------------------------------------------------------------------- +args = sys.argv[1:] + +if len( args ) < 1 or len( args[0].strip() ) == 0: + checkGlyphNumbers( '../../sfd/', + ( 'FreeSerif.sfd', 'FreeSerifItalic.sfd', + 'FreeSerifBold.sfd', 'FreeSerifBoldItalic.sfd', + 'FreeSans.sfd', 'FreeSansOblique.sfd', + 'FreeSansBold.sfd', 'FreeSansBoldOblique.sfd', + 'FreeMono.sfd', 'FreeMonoOblique.sfd', + 'FreeMonoBold.sfd', 'FreeMonoBoldOblique.sfd' ) ) +else: + checkGlyphNumbers( args[0], args[1:] ) + +if problem: + sys.exit( 1 ) diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/findBackLayers.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/findBackLayers.py new file mode 100755 index 00000000000..29f6588024e --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/findBackLayers.py @@ -0,0 +1,63 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, Stevan White" +__date__ = "$Date: 2011-11-03 01:51:05 +0100 (Thu, 03 Nov 2011) $" +__version__ = "$Revision: 1864 $" + +__doc__ = """ +Check for glyphs with back layers. + +Haven't see this actually work... +""" + +import fontforge +from sys import exit + +problem = False + +def checkBackLayers( fontPath ): + print "Checking " + fontPath + font = fontforge.open( fontPath ) + + g = font.selection.all() + g = font.selection.byGlyphs + + nonzero = 0 + + for e in g: + if e.layer_cnt != 2: + print e + +checkBackLayers( '../sfd/FreeSerif.sfd' ) +checkBackLayers( '../sfd/FreeSerifItalic.sfd' ) +checkBackLayers( '../sfd/FreeSerifBold.sfd' ) +checkBackLayers( '../sfd/FreeSerifBoldItalic.sfd' ) +checkBackLayers( '../sfd/FreeSans.sfd' ) +checkBackLayers( '../sfd/FreeSansOblique.sfd' ) +checkBackLayers( '../sfd/FreeSansBold.sfd' ) +checkBackLayers( '../sfd/FreeSansBoldOblique.sfd' ) +checkBackLayers( '../sfd/FreeMono.sfd' ) +checkBackLayers( '../sfd/FreeMonoOblique.sfd' ) +checkBackLayers( '../sfd/FreeMonoBold.sfd' ) +checkBackLayers( '../sfd/FreeMonoBoldOblique.sfd' ) + +if problem: + exit( 0 ) +else: + exit( 1 ) diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/isMonoMono.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/isMonoMono.py new file mode 100755 index 00000000000..0eca9fe31a7 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/isMonoMono.py @@ -0,0 +1,94 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, Stevan White" +__date__ = "$Date: 2011-11-03 01:51:05 +0100 (Thu, 03 Nov 2011) $" +__version__ = "$Revision: 1864 $" + +__doc__ = """ +Diagnostic tool that checks that fonts are really monospace. + +Allows characters to have 0 width though (note this is controversial) + +Also: in order for box-drawing characters to connect properly, it is +important that the glyphs all lie between 800 and -200EM vertically. +""" + +import fontforge +import sys + +problem = False + +def ismonomono( fontfilename ): + print "Checking character bounding boxes: " + fontfilename + font = fontforge.open( fontfilename ) + + g = font.selection.all() + g = font.selection.byGlyphs + + nonzero = 0 + + for e in g: + if nonzero == 0: + if e.width > 0: + nonzero = e.width + else: + if e.width > 0 and e.width != nonzero: + print ' ' + e.glyphname \ + + '(' + str( e.encoding ) \ + + ') width is ' + str( e.width ) \ + + ' not ' + str( nonzero ) + problem = True + + ( xmin, ymin, xmax, ymax ) = e.boundingBox() + if ymin < -200 or ymax > 800: + print ' ' + e.glyphname + ' goes between heights ' \ + + str( ymin ) + ' and ' + str( ymax ) + """ + For FontForge handling of TrueType/OpenType magic characters: + 1) check that 0x0000 0x0001, 0x000D exist and have names + .notdef, .null, nonmarkingreturn + 2) check that 0x0000 and 0x000D are width 600, and + 0x0001 has no glyph and is width 0 + + Othewise complain that FontForge may not treat it right. + """ + if not font[0x0000] \ + or font[0x0000].glyphname != '.notdef' \ + or font[0x0000].width != nonzero: + print 'Should be full-width ".notdef" glyph at 0x0000.' + if not font[0x0001] \ + or font[0x0001].glyphname != '.null' \ + or font[0x0001].width != 0: + print 'Should be zero-width ".null" glyph at 0x0001.' + if not font[0x000D] \ + or font[0x000D].glyphname != 'nonmarkingreturn' \ + or font[0x000D].width != nonzero: + print 'Should be full-width "nonmarkingreturn" glyph at 0x000D.' + +scriptname = sys.argv[0]; +argc = len( sys.argv ) + +if argc > 1: + for i in range( 1, argc ): + ismonomono( sys.argv[i] ) + +if problem: + sys.exit( 1 ) +else: + sys.exit( 0 ) diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/arabic_test.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/arabic_test.py new file mode 100755 index 00000000000..43ab450d72a --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/arabic_test.py @@ -0,0 +1,310 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +from __future__ import print_function, unicode_literals +__license__ = """ +This file is part of GNU FreeFont. + +GNU FreeFont 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 3 of the License, or (at your option) any later +version. + +GNU FreeFont 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. + +You should have received a copy of the GNU General Public License along with +GNU FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Emmanuel Vallois" +__email__ = "vallois@polytech.unice.fr" +__copyright__ = "Copyright 2011 Emmanuel Vallois" +__date__ = "$Date$" +__version__ = "$Revision$" +__doc__ = """ +Writes in the file named by the first argument an HTML page comprising a table +for testing arabic characters, their behavior and consistency with presentation +forms. + +Runs under normal Python, version 2.7 or above. + +Typical usage: +arabic_test.py "Arabic test page.html" +""" +import sys +from codecs import open +from string import Template +from io import StringIO +from unicodedata import normalize, name, unidata_version, decomposition + +_module_missing_msg = """Please run + generate_arabic_shaping.py +to generate + arabic_shaping.py""" + +try: + from arabic_shaping import joining_type +except: + print( _module_missing_msg, file=sys.stderr) + sys.exit( 1 ) + +if len(sys.argv) > 1: + outfile = sys.argv[1] +else: + outfile = 'Arabic test page.html' + +sys.stdout = open(outfile, 'w', 'utf-8') + +def uniname(char): + return name(char, new_names.get(char, "<reserved-{:04X}>".format(ord(char)))) + +def non_positional_name(char): + return uniname(char).replace(' INITIAL','').replace(' FINAL','').replace(' MEDIAL','').replace(' ISOLATED','').replace(' FORM','') + +arabic_ranges = list(range(0x600, 0x61B + 1)) +arabic_ranges.extend(range(0x61E, 0x6FF + 1)) +arabic_ranges.extend(range(0x750, 0x77F + 1)) +arabic_ranges.extend(range(0x8A0, 0x8B1 + 1)) +arabic_ranges.extend(range(0x8E4, 0x8FF + 1)) +arabic_ranges.extend(range(0xFB50, 0xFBC1 + 1)) +arabic_ranges.extend(range(0xFBD3, 0xFD3F + 1)) +arabic_ranges.extend(range(0xFD50, 0xFD8F + 1)) +arabic_ranges.extend(range(0xFD92, 0xFDC7 + 1)) +arabic_ranges.extend(range(0xFDF0, 0xFDFD + 1)) +arabic_ranges.extend(range(0xFE70, 0xFE74 + 1)) +arabic_ranges.extend(range(0xFE76, 0xFEFC + 1)) + +unicode61_new_ranges = [0x604, 0x8A0] +unicode61_new_ranges.extend(range(0x8A2, 0x8AC + 1)) +unicode61_new_ranges.extend(range(0x8E4, 0x8FE + 1)) +unicode62_new_ranges = [0x605, 0x8A1] +unicode62_new_ranges.extend(range(0x8AD, 0x8B1 + 1)) +unicode62_new_ranges.append(0x8FF) +new_names = {} +new_names['\u0604'] = 'ARABIC SIGN SAMVAT' +new_names['\u0605'] = 'ARABIC NUMBER MARK ABOVE' +new_names['\u08A0'] = 'ARABIC LETTER BEH WITH SMALL V BELOW' +new_names['\u08A1'] = 'ARABIC LETTER BEH WITH HAMZA ABOVE' +new_names['\u08A2'] = 'ARABIC LETTER JEEM WITH TWO DOTS ABOVE' +new_names['\u08A3'] = 'ARABIC LETTER TAH WITH TWO DOTS ABOVE' +new_names['\u08A4'] = 'ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE' +new_names['\u08A5'] = 'ARABIC LETTER QAF WITH DOT BELOW' +new_names['\u08A6'] = 'ARABIC LETTER LAM WITH DOUBLE BAR' +new_names['\u08A7'] = 'ARABIC LETTER MEEM WITH THREE DOTS ABOVE' +new_names['\u08A8'] = 'ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE' +new_names['\u08A9'] = 'ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE' +new_names['\u08AA'] = 'ARABIC LETTER REH WITH LOOP' +new_names['\u08AB'] = 'ARABIC LETTER WAW WITH DOT WITHIN' +new_names['\u08AC'] = 'ARABIC LETTER ROHINGYA YEH' +new_names['\u08E4'] = 'ARABIC CURLY FATHA' +new_names['\u08E5'] = 'ARABIC CURLY DAMMA' +new_names['\u08E6'] = 'ARABIC CURLY KASRA' +new_names['\u08E7'] = 'ARABIC CURLY FATHATAN' +new_names['\u08E8'] = 'ARABIC CURLY DAMMATAN' +new_names['\u08E9'] = 'ARABIC CURLY KASRATAN' +new_names['\u08EA'] = 'ARABIC TONE ONE DOT ABOVE' +new_names['\u08EB'] = 'ARABIC TONE TWO DOTS ABOVE' +new_names['\u08EC'] = 'ARABIC TONE LOOP ABOVE' +new_names['\u08ED'] = 'ARABIC TONE ONE DOT BELOW' +new_names['\u08EE'] = 'ARABIC TONE TWO DOTS BELOW' +new_names['\u08EF'] = 'ARABIC TONE LOOP BELOW' +new_names['\u08F0'] = 'ARABIC OPEN FATHATAN' +new_names['\u08F1'] = 'ARABIC OPEN DAMMATAN' +new_names['\u08F2'] = 'ARABIC OPEN KASRATAN' +new_names['\u08F3'] = 'ARABIC SMALL HIGH WAW' +new_names['\u08F4'] = 'ARABIC FATHA WITH RING' +new_names['\u08F5'] = 'ARABIC FATHA WITH DOT ABOVE' +new_names['\u08F6'] = 'ARABIC KASRA WITH DOT BELOW' +new_names['\u08F7'] = 'ARABIC LEFT ARROWHEAD ABOVE' +new_names['\u08F8'] = 'ARABIC RIGHT ARROWHEAD ABOVE' +new_names['\u08F9'] = 'ARABIC LEFT ARROWHEAD BELOW' +new_names['\u08FA'] = 'ARABIC RIGHT ARROWHEAD BELOW' +new_names['\u08FB'] = 'ARABIC DOUBLE RIGHT ARROWHEAD ABOVE' +new_names['\u08FC'] = 'ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT' +new_names['\u08FD'] = 'ARABIC RIGHT ARROWHEAD ABOVE WITH DOT' +new_names['\u08FE'] = 'ARABIC DAMMA WITH DOT' +new_names['\u08AD'] = 'ARABIC LETTER LOW ALEF' +new_names['\u08AE'] = 'ARABIC LETTER DAL WITH THREE DOTS BELOW' +new_names['\u08AF'] = 'ARABIC LETTER SAD WITH THREE DOTS BELOW' +new_names['\u08B0'] = 'ARABIC LETTER GAF WITH INVERTED STROKE' +new_names['\u08B1'] = 'ARABIC LETTER STRAIGHT WAW' +new_names['\u08FF'] = 'ARABIC MARK SIDEWAYS NOON GHUNNA' + +# Unicode 6.0 additions not present in Python 2.7 +new_names['\u0620'] = 'ARABIC LETTER KASHMIRI YEH' +new_names['\u065F'] = 'ARABIC WAVY HAMZA BELOW' +new_names['\uFBB2'] = 'ARABIC SYMBOL DOT ABOVE' +new_names['\uFBB3'] = 'ARABIC SYMBOL DOT BELOW' +new_names['\uFBB4'] = 'ARABIC SYMBOL TWO DOTS ABOVE' +new_names['\uFBB5'] = 'ARABIC SYMBOL TWO DOTS BELOW' +new_names['\uFBB6'] = 'ARABIC SYMBOL THREE DOTS ABOVE' +new_names['\uFBB7'] = 'ARABIC SYMBOL THREE DOTS BELOW' +new_names['\uFBB8'] = 'ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE' +new_names['\uFBB9'] = 'ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW' +new_names['\uFBBA'] = 'ARABIC SYMBOL FOUR DOTS ABOVE' +new_names['\uFBBB'] = 'ARABIC SYMBOL FOUR DOTS BELOW' +new_names['\uFBBC'] = 'ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW' +new_names['\uFBBD'] = 'ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE' +new_names['\uFBBE'] = 'ARABIC SYMBOL TWO DOTS VERTICALLY BELOW' +new_names['\uFBBF'] = 'ARABIC SYMBOL RING' +new_names['\uFBC0'] = 'ARABIC SYMBOL SMALL TAH ABOVE' +new_names['\uFBC1'] = 'ARABIC SYMBOL SMALL TAH BELOW' + +'''Class Equiv stores the correspondence between a code point and its NFKC-normalized equivalent, +for usual characters it is the character itself, for decomposable characters it is the compatibility +decompostion.''' +class Equiv: + code_point = 0 + compat = 0 + def __init__(self, code_point, compat): + self.code_point = code_point + self.compat = compat + def sort_key(self): + return '{:02X}'.format(len(self.compat.lstrip(' '))) + self.compat.lstrip(' ') + def __repr__(self): + return 'Equiv(0x{:04X}, compat={})'.format(self.code_point, self.compat) + +equivs = [] +for cp in arabic_ranges: + normalized = normalize('NFKC', unichr(cp)) + equivs.append(Equiv(cp, normalized)) +# Sort our characters by length of the decomposition and by decomposition itself +equivs.sort(key=Equiv.sort_key) +#for e in equivs: +# print(e, file=sys.stderr) + +contextual_form_formats = { 'isolat':'{}', 'final>':'‍{}', 'medial':'‍{}‍', 'initia':'{}‍' } +contextual_forms = 'isolat', 'final>', 'medial', 'initia' +current_line = {} +equiv = None +char = None +def store_contextual_form(): + # print('store_contextual_form', equiv, file=sys.stderr) + compat_disp = equiv.compat + if equiv.compat[0] == ' ': compat_disp = '\u00A0' + compat_disp[1:] + #nonlocal current_line + form_cells = StringIO() + form = decomposition(char)[1:7] + print('<td class="ch">{}{}</td>'.format(contextual_form_formats.get(form, '{}').format(compat_disp), + '<small><br/>{}</small>'.format(ord_mul(compat_disp)) if len(compat_disp) >=2 else ''), file=form_cells) + print('<td class="ch">{}<small><br />{:04X}</small></td>'.format(char, equiv.code_point), file=form_cells) + #if current_line.get(form, 'not found') != 'not found': print('collision', current_line[form].rstrip(), equiv, file=stderr) + current_line[form] = form_cells.getvalue() + form_cells.close() + +table_head = ''' +<table frame="box" rules="rows"> +{} +<colgroup><col/><col/></colgroup> +<colgroup id="characterCols"><col span="2"/><col span="2"/><col span="2"/><col span="2"/></colgroup> +<tr> +<th rowspan="2">General<br />Unicode</th> +<th rowspan="2">Name</th> +<th colspan="8">Contextual Forms</th> +</tr> +<tr><th>Isolated</th><th>Isolated (compat)</th><th>Final</th><th>Final (compat)</th> +<th>Medial</th><th>Medial (compat)</th><th>Initial</th><th>Initial (compat)</th></tr>''' + +def print_table(): + global current_line, char + def end_line(): + for form in contextual_forms: + print(current_line.get(form, '<td colspan="2"></td>').rstrip()) + print('</tr>') + current_line.clear() + def print_equiv(equiv): + # print('print_equiv', equiv, file=sys.stderr) + cp = equiv.code_point + char = unichr(cp) + print('<tr{}><td>{}</td>'.format(' class="nextVersion"' if cp in unicode61_new_ranges else ' class="furtherFuture"' if cp in unicode62_new_ranges else '', + 'compat' if len(equiv.compat.replace(' ', '')) > 1 else '{:04X}'.format(ord(equiv.compat.lstrip()[0])))) + print('<td>{}</td>'.format(non_positional_name(char))) + if equiv.compat.replace(' ', '') == char: # character is not a decomposable character, or is a standalone combining mark (decomposable to space + combining mark) + i = 0 + for form in contextual_forms: + print('<td class="ch">{}</td><td></td>'.format(contextual_form_formats[form].format(char))) + i += 1 + if { 'T':'isolat', 'U':'isolat', 'C':'isolat', 'R':'final>', 'D':'' }[joining_type(cp)] == form: + break + if i < 4: + print('<td colspan="{}"></td>'.format((4 - i) * 2)) + print('</tr>') + else: + end_line() + + print(table_head.format(caption)) + last_equiv = None + global equiv + for equiv in equivs: + char = unichr(equiv.code_point) + + if last_equiv: + #special case FC03 because there is one set of plain YEH WITH HAMZA ABOVE WITH ALEF MAKSURA and one of 'uighur kirghiz' compatibility ligatures + if equiv.compat.lstrip() == last_equiv.compat.lstrip() and equiv.code_point != 0xFC03: + store_contextual_form() + else: + print_equiv(last_equiv) + if equiv.compat != char: + store_contextual_form() + last_equiv = equiv + print_equiv(last_equiv) + print('</table>') + +def ord_mul(s): + code_points = '' + for c in s: + code_points += '{:X} '.format(ord(c)) + return code_points[:-1] + +html_heading = Template('''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> +<title>$title</title> +<style type="text/css"> +.captionSquare { float: left; width: 2em; height: 1em; margin-right: 0.5em } +caption { width: 60em; text-align: left } +table { text-align: center; font-family: FreeSerif } +td { padding: 10px } +small { font-size: small } +#characterCols { border-left: medium double black; border-right: medium double black } +.nextVersion { background-color: #CCFF99 } +.furtherFuture { background-color: #FFFFCC } +.name { width: 10em } +.ch { vertical-align: baseline; line-height: 75%; font-size: 250%; width: 1em; direction: rtl } +.empty { background:#EEEEEE } +</style> +</head> +<body> +<h1>$title</h1> +<p>Choose the font to test: <select onchange="changefont(this)"><option>FreeSerif</option><option>FreeSerif, bold</option><option>FreeMono</option></select></p> +<script type="text/javascript">//<![CDATA[ +function changefont(select) { + var font = select.options.item(select.selectedIndex).value.split(', '); + var bold = font.length > 1 ? font[1] == 'bold' : false; + font = font[0]; + var elementsToStyle = document.getElementsByClassName("ch"); + + for (i = 0; i < elementsToStyle.length; i++) { + elementsToStyle[i].style.fontFamily = font; + elementsToStyle[i].style.fontWeight = bold ? 'bold' : 'normal'; + } +}//]]></script>''') + +caption='''<caption><span class="captionSquare nextVersion"> </span> New characters in Unicode 6.1, which will be published in February 2012. +These can be relied upon and will not change or be removed. See <a href="http://www.unicode.org/Public/6.1.0/charts/blocks//U08A0.pdf">the +Unicode chart for the new block <b>Arabic Extended-A</b></a>, and for more about these characters, see <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3734.pdf">N3734</a> +for U+0604, <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3882.pdf">the complete +proposal</a> for most characters, <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3791.pdf">N3791</a> for U+08F0-U+08F3.<br/> +<span class="captionSquare furtherFuture"> </span> Future new characters in Unicode 6.2. These can will probably be standardized this way, +but could in principle still change or be removed. See <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3990.pdf">N3990, in 4.2 Orthography</a> for U+0605, +<a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n4072.pdf">N4072 proposal</a> about U+08AD-U+08B1, and +<a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3989.pdf">N3989 proposal</a> about U+08FF.</caption>''' + +def print_arabic_test_page(): + print(html_heading.substitute(title='Test for Unicode Arabic range')) + print_table() + print('</body>') + print('</html>') + +print_arabic_test_page() diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/generate_arabic_shaping.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/generate_arabic_shaping.py new file mode 100755 index 00000000000..49a32065004 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/generate_arabic_shaping.py @@ -0,0 +1,81 @@ +#!/usr/bin/python +from __future__ import print_function +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Emmanuel Vallois" +__email__ = "vallois@polytech.unice.fr" +__copyright__ = "Copyright 2011 Emmanuel Vallois" +__date__ = "$Date$" +__version__ = "$Revision$" +__doc__ = """ +Generates test script + arab_shaping.py +from a file + ArabicShaping.txt +which may be obtained from + http://www.unicode.org/Public/UNIDATA/ArabicShaping.txt +""" + +'''Convert Unicode ArabicShaping.txt to a Python module containing its data.''' + +import sys + +sys.stdout = open('arabic_shaping.py', 'w') + +print('''#!/usr/bin/python +__license__ = """''' + __license__ + ''' +""" +__doc__ = """ +Module containing UCD ArabicShaping.txt data.""" + +from unicodedata import name +from collections import OrderedDict + +class ArabicShaping: + def __init__(self, code_point, short_name, joining_type, joining_group): + self.code_point = code_point + self.short_name = short_name + self.joining_type = joining_type + self.joining_group = joining_group + def __repr__(self): + return 'ArabicShaping({:X}, {}, {}, {})'.format(self.code_point, self.short_name, self.joining_type, self.joining_group) + +arabic_shapings = OrderedDict()''') +with open('ArabicShaping.txt') as f: + for line in f: + if not line.strip() or line[0] == '#': continue + line = line[:-1] #removes the \n at the end of the line + fields = line.split('; ') + print("arabic_shapings[0x{0[0]}] = ArabicShaping(0x{0[0]}, '{0[1]}', '{0[2]}', '{0[3]}')".format(fields)) + if fields[0] == '08A0': + print('''arabic_shapings[0x08A1] = ArabicShaping(0x8A1, 'BEH WITH HAMZA ABOVE','D','BEH')''') +print('''arabic_shapings[0x08AE] = ArabicShaping(0x8AE, 'DAL WITH THREE DOTS BELOW', 'R', 'DAL') +arabic_shapings[0x08AF] = ArabicShaping(0x8AF, 'SAD WITH THREE DOTS BELOW', 'D', 'SAD') +arabic_shapings[0x08B0] = ArabicShaping(0x8B0, 'GAF WITH INVERTED STROKE', 'D', 'GAF') +arabic_shapings[0x08B1] = ArabicShaping(0x8B1, 'STRAIGHT WAW', 'R', 'WAW')''') + +print(''' +def short_name(cp): + shaping = arabic_shapings.get(cp) + return shaping and shaping.short_name or name(unichr(cp)) + +def joining_type(cp): + shaping = arabic_shapings.get(cp) + return shaping and shaping.joining_type or 'U' + +def joining_group(cp): + shaping = arabic_shapings.get(cp) + return shaping and shaping.joining_group or 'No_Joining_Group\'''') diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/unicode_joining.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/unicode_joining.py new file mode 100755 index 00000000000..1d734c15d56 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/ranges/Arabic/unicode_joining.py @@ -0,0 +1,207 @@ +#!/usr/bin/python +from __future__ import print_function, unicode_literals +__license__ = """ +This file is part of GNU FreeFont. + +GNU FreeFont 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 3 of the License, or (at your option) any later +version. + +GNU FreeFont 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. + +You should have received a copy of the GNU General Public License along with +GNU FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Emmanuel Vallois" +__email__ = "vallois@polytech.unice.fr" +__copyright__ = "Copyright 2011 Emmanuel Vallois" +__date__ = "$Date$" +__version__ = "$Revision$" +__doc__ = """ +Writes in the file named by the first argument an HTML page comprising a table +for testing joining cursive script characters. + +Runs under normal Python, version 2.7 or above. + +Typical usage: +unicode_joining.py "Unicode joining test page.html" +""" +import sys +from codecs import open +from string import Template +from collections import OrderedDict +from itertools import chain + +_module_missing_msg = """Please run + generate_arabic_shaping.py +to generate + arabic_shaping.py""" + +try: + from arabic_shaping import arabic_shapings, joining_type +except: + print( _module_missing_msg, file=sys.stderr) + sys.exit( 1 ) + +if len(sys.argv) > 1: + outfile = sys.argv[1] +else: + outfile = 'Unicode joining test page.html' + +sys.stdout = open(outfile, 'w', 'utf-8') + +class OrderedDefaultDict(OrderedDict): + def __missing__(self, key): + self[key] = rv = [] + return rv + def move_to_end(self, key): + tmp = self[key] + del self[key] + self[key] = tmp + +arabic_ranges = tuple(chain(range(0x600, 0x6FF +1), range(0x750, 0x77F +1), range(0x8A0, 0x8FF))) +unicode61_new_ranges = [0x604, 0x8A0] +unicode61_new_ranges.extend(range(0x8A2, 0x8AC + 1)) +unicode61_new_ranges.extend(range(0x8E4, 0x8FE + 1)) +unicode62_new_ranges = [0x605, 0x8A1] +unicode62_new_ranges.extend(range(0x8AD, 0x8B1 + 1)) +unicode62_new_ranges.append(0x8FF) + +shapings = filter(lambda s: s.joining_type in 'RD' and (s.joining_group != 'No_Joining_Group' or s.code_point not in arabic_ranges), arabic_shapings.values()) +jg_shapings_arabic = OrderedDefaultDict() +jg_shapings_other_scripts = OrderedDefaultDict() +for s in shapings: + if s.code_point in arabic_ranges: + jg_shapings_arabic[s.joining_group].append(s) + else: + jg_shapings_other_scripts[s.joining_group].append(s) + if s.code_point == 0x62B: + jg_shapings_arabic.move_to_end('TEH MARBUTA') + jg_shapings_arabic['TEH MARBUTA GOAL'] + elif s.code_point == 0x642: + jg_shapings_arabic.move_to_end('GAF') + jg_shapings_arabic['SWASH KAF'] + elif s.code_point == 0x646: + jg_shapings_arabic['NYA'] + elif s.code_point == 0x647: + jg_shapings_arabic['KNOTTED HEH'] + jg_shapings_arabic['HEH GOAL'] + elif s.code_point == 0x64A: + jg_shapings_arabic.move_to_end('FARSI YEH') + elif s.code_point in chain(range(0x627, 0x63A + 1), range(0x641, 0x64A + 1)): + jg_shapings_arabic.move_to_end(s.joining_group) + +#for jg, ls in jg_shapings_arabic.items(): +# for s in ls: +# print(jg, ls, file=sys.stderr) + +table_head = ''' +<table frame="box" rules="rows"> +{} +<colgroup><col/><col/><col/></colgroup> +<colgroup id="characterCols"><col/><col/><col/><col/></colgroup> +<colgroup><col/></colgroup>''' +table_internal_title = '''<tr><td colspan="8"><h2>{}</h2></td></tr> +<tr> +<th rowspan="2">Joining Group</th> +<th rowspan="2">Code Point</th> +<th rowspan="2">Short Name</th> +<th colspan="5">Contextual Forms</th> +</tr> +<tr><th>Isolated</th><th>Final</th><th>Medial</th><th>Initial</th><th>Joined</th></tr>''' + +def print_table(): + contextual_form_formats = { 'isolat':'{}', 'final>':'‍{}', 'medial':'‍{}‍', 'initia':'{}‍' } + contextual_forms = 'isolat', 'final>', 'medial', 'initia' + def print_shaping(shaping, rowspan): + # print('print_shaping', shaping, file=sys.stderr) + cp = shaping.code_point + char = unichr(cp) + print('<tr{}>'.format(' class="nextVersion"' if cp in unicode61_new_ranges else ' class="furtherFuture"' if cp in unicode62_new_ranges else '')) + if rowspan: print('<td rowspan="{}">{}</td>'.format(rowspan, shaping.joining_group)) + print('<td>{:04X}</td>'.format(cp)) + print('<td>{}</td>'.format(shaping.short_name)) + i = 0 + for form in contextual_forms: + print('<td class="ch">{}</td>'.format(contextual_form_formats[form].format(char))) + i += 1 + if { 'R':'final>', 'D':'' }[joining_type(cp)] == form: + break + if i < 4: + print('<td colspan="{}"></td>'.format(4 - i)) + print('<td class="ch">{}</td>'.format('\u0640' * (4 - i) + char * (i - 1) + ' ' + char)) + print('</tr>') + + print(table_head.format(caption)) + print(table_internal_title.format('Arabic')) + for shaping_list in jg_shapings_arabic.values(): + rowspan = len(shaping_list) + for shaping in shaping_list: + print_shaping(shaping, rowspan) + rowspan = None + + print(table_internal_title.format('Syriac, Nko and Mandaic')) + for shaping_list in jg_shapings_other_scripts.values(): + rowspan = len(shaping_list) + for shaping in shaping_list: + print_shaping(shaping, rowspan) + rowspan = None + + print('</table>') + +html_heading = Template('''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> +<title>$title</title> +<style type="text/css"> +.captionSquare { float: left; width: 2em; height: 1em; margin-right: 0.5em } +caption { width: 60em; text-align: left } +table { text-align: center; font-family: FreeSerif, FreeSans } +td { padding: 10px } +small { font-size: small } +#characterCols { border-left: medium double black; border-right: medium double black } +.nextVersion { background-color: #CCFF99 } +.furtherFuture { background-color: #FFFFCC } +.name { width: 10em } +.ch { vertical-align: baseline; line-height: 75%; font-size: 250%; direction: rtl } +.empty { background:#EEEEEE } +</style> +</head> +<body> +<h1>$title</h1> +<p>Choose the font to test: <select onchange="changefont(this)"><option>FreeSerif</option><option>FreeSerif, bold</option><option>FreeSans</option><option>FreeMono</option></select></p> +<script type="text/javascript">//<![CDATA[ +function changefont(select) { + var font = select.options.item(select.selectedIndex).value.split(', '); + var bold = font.length > 1 ? font[1] == 'bold' : false; + font = font[0]; + var elementsToStyle = document.getElementsByClassName("ch"); + + for (i = 0; i < elementsToStyle.length; i++) { + elementsToStyle[i].style.fontFamily = font; + elementsToStyle[i].style.fontWeight = bold ? 'bold' : 'normal'; + } +}//]]></script>''') + +caption='''<caption><span class="captionSquare nextVersion"> </span> New characters in Unicode 6.1, which will be published in February 2012. +These can be relied upon and will not change or be removed. See <a href="http://www.unicode.org/Public/6.1.0/charts/blocks//U08A0.pdf">the +Unicode chart for the new block <b>Arabic Extended-A</b></a>, and for more about these characters, see <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3734.pdf">N3734</a> +for U+0604, <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3882.pdf">the complete +proposal</a> for most characters, <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3791.pdf">N3791</a> for U+08F0-U+08F3.<br/> +<span class="captionSquare furtherFuture"> </span> Future new characters in Unicode 6.2. These can will probably be standardized this way, +but could in principle still change or be removed. See <a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3990.pdf">N3990, in 4.2 Orthography</a> for U+0605, +<a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n4072.pdf">N4072 proposal</a> about U+08AD-U+08B1, and +<a href="http://std.dkuug.dk/JTC1/SC2/WG2/docs/n3989.pdf">N3989 proposal</a> about U+08FF.</caption>''' + +def print_arabic_test_page(): + print(html_heading.substitute(title='Test of Joining Characters From Unicode Cursive Scripts')) + + print_table() + print('</body>') + print('</html>') + +print_arabic_test_page() diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/validate.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/validate.py new file mode 100755 index 00000000000..da9ce966198 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/test/validate.py @@ -0,0 +1,146 @@ +#!/usr/bin/env ../utility/fontforge-interp.sh +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, Stevan White" +__date__ = "$Date: 2010-09-14 13:02:02 $" +__version__ = "$Revision: 1.5 $" + +__doc__ = """ +Runs the FontForge validate function on all the font faces. +Prints report on standard output. +Returns 1 if problems found 0 otherwise. +""" + +import fontforge +import sys + +problem = False + + +""" Haven't really figured out why TT limit warniings are turndd on, + or where the limits are set. +""" +def countPointsInLayer( layer ): + problem = True + p = 0 + for c in layer: + p += len( c ) + return p + +def printProblemLine( e, msg ): + print "\t" + e.glyphname + msg + +def dealWithValidationState( state, e ): + if state & 0x2: + printProblemLine( e, " has open contour" ) + if state & 0x4: + printProblemLine( e, " intersects itself" ) + if state & 0x8: + printProblemLine( e, " is drawn in wrong direction" ) + if state & 0x10: + printProblemLine( e, " has a flipped reference" ) + if state & 0x20: + printProblemLine( e, " is missing extrema" ) + if state & 0x40: + printProblemLine( e, " is missing a reference in a table" ) + if state & 0x80: + printProblemLine( e, " has more than 1500 pts" ) + if state & 0x100: + printProblemLine( e, " has more than 96 hints" ) + if state & 0x200: + printProblemLine( e, " has invalid PS name" ) + """ + # Not meaningfully set for non-TrueType fonts ) + if state & 0x400: + printProblemLine( e, " has more points than allowed by TT: " + str( countPointsInLayer( e.layers[1] ) ) ) + if state & 0x800: + printProblemLine( e, " has more paths than allowed by TT" ) + if state & 0x1000: + printProblemLine( e, " has more points in composite than allowed by TT" ) + if state & 0x2000: + printProblemLine( e, " has more paths in composite than allowed by TT" ) + if state & 0x4000: + printProblemLine( e, " has instruction longer than allowed" ) + if state & 0x8000: + printProblemLine( e, " has more references than allowed" ) + if state & 0x10000: + printProblemLine( e, " has references deeper than allowed" ) + if state & 0x20000: + print e.glyphname + " fpgm or prep tables longer than allowed" ) + """ + +def validate( dir, fontFile ): + try: + font = fontforge.open( dir + fontFile ) + print "Validating " + fontFile + + g = font.selection.all() + g = font.selection.byGlyphs + + valid = True + for e in g: + state = e.validate() + if state != 0: + dealWithValidationState( state, e ) + font.validate + except Exception, e: + problem = True + print >> sys.stderr, str( e ) + +validate( '../sfd/', 'FreeSerif.sfd' ) +validate( '../sfd/', 'FreeSerifItalic.sfd' ) +validate( '../sfd/', 'FreeSerifBold.sfd' ) +validate( '../sfd/', 'FreeSerifBoldItalic.sfd' ) +validate( '../sfd/', 'FreeSans.sfd' ) +validate( '../sfd/', 'FreeSansOblique.sfd' ) +validate( '../sfd/', 'FreeSansBold.sfd' ) +validate( '../sfd/', 'FreeSansBoldOblique.sfd' ) +validate( '../sfd/', 'FreeMono.sfd' ) +validate( '../sfd/', 'FreeMonoOblique.sfd' ) +validate( '../sfd/', 'FreeMonoBold.sfd' ) +validate( '../sfd/', 'FreeMonoBoldOblique.sfd' ) + +validate( '../sfd/', 'FreeSerif.ttf' ) +validate( '../sfd/', 'FreeSerifItalic.ttf' ) +validate( '../sfd/', 'FreeSerifBold.ttf' ) +validate( '../sfd/', 'FreeSerifBoldItalic.ttf' ) +validate( '../sfd/', 'FreeSans.ttf' ) +validate( '../sfd/', 'FreeSansOblique.ttf' ) +validate( '../sfd/', 'FreeSansBold.ttf' ) +validate( '../sfd/', 'FreeSansBoldOblique.ttf' ) +validate( '../sfd/', 'FreeMono.ttf' ) +validate( '../sfd/', 'FreeMonoOblique.ttf' ) +validate( '../sfd/', 'FreeMonoBold.ttf' ) +validate( '../sfd/', 'FreeMonoBoldOblique.ttf' ) + +validate( '../sfd/', 'FreeSerif.otf' ) +validate( '../sfd/', 'FreeSerifItalic.otf' ) +validate( '../sfd/', 'FreeSerifBold.otf' ) +validate( '../sfd/', 'FreeSerifBoldItalic.otf' ) +validate( '../sfd/', 'FreeSans.otf' ) +validate( '../sfd/', 'FreeSansOblique.otf' ) +validate( '../sfd/', 'FreeSansBold.otf' ) +validate( '../sfd/', 'FreeSansBoldOblique.otf' ) +validate( '../sfd/', 'FreeMono.otf' ) +validate( '../sfd/', 'FreeMonoOblique.otf' ) +validate( '../sfd/', 'FreeMonoBold.otf' ) +validate( '../sfd/', 'FreeMonoBoldOblique.otf' ) + + +if problem: + sys.exit( 1 ) diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/KerningNumerals.pl b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/KerningNumerals.pl new file mode 100755 index 00000000000..a537e25a07e --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/KerningNumerals.pl @@ -0,0 +1,117 @@ +#!/usr/bin/perl +=pod + +=head1 KerningNumerals.pl + +Move kerning information from ASCII numerals (U+0030...) to characters in +the Adobe corporate use area (U+F6xx). + +By: Primož Peterlin, 2003 + +$Id: KerningNumerals.pl,v 1.2 2003-05-15 12:04:41 peterlin Exp $ + +=cut + +sub numerically { $a <=> $b; } + +if ($#ARGV != 0) { + print $#ARGV; + die "Usage: $0 file.sfd\n"; +} + +open(INFILE, $ARGV[0]) || die "Failed to open file: $ARGV[0]\n"; + +while (<INFILE>) { + if (/^Kerns:/) { + # Old-style kerning information + chomp; + # Cut off the first seven characters ("Kerns: ") + substr($_,0,7) = ""; + @values = split; + # Construct the hash $kern{$code} + for ($i = 0; $i <= $#values; $i += 2) { + $code = $values[$i]; + # Recode ASCII numerals to Adobe corporate use values + if ($code == 48) { + $code = 63033; + } elsif ($code == 49) { + $code = 63196; + } elsif ($code == 50) { + $code = 63034; + } elsif ($code == 51) { + $code = 63035; + } elsif ($code == 52) { + $code = 63036; + } elsif ($code == 53) { + $code = 63037; + } elsif ($code == 54) { + $code = 63038; + } elsif ($code == 55) { + $code = 63039; + } elsif ($code == 56) { + $code = 63040; + } elsif ($code == 57) { + $code = 63041; + } + $kern{$code} = $values[$i+1]; + } + print "Kerns:"; + foreach $code (sort numerically keys(%kern)) { + print " ",$code," ",$kern{$code}; + } + print "\n"; + # Clean-up + foreach $code (keys(%kern)) { + delete $kern{$code}; + } + } elsif (/^KernsSLIF:/) { + # New-style kerning information + chomp; + # Cut off the first eleven characters ("KernsSLIF: ") + substr($_,0,11) = ""; + @values = split; + # Construct the hash $kern{$code} + for ($i = 0; $i <= $#values; $i += 4) { + $code = $values[$i]; + # Recode ASCII numerals to Adobe corporate use values + if ($code == 48) { + $code = 63033; + } elsif ($code == 49) { + $code = 63196; + } elsif ($code == 50) { + $code = 63034; + } elsif ($code == 51) { + $code = 63035; + } elsif ($code == 52) { + $code = 63036; + } elsif ($code == 53) { + $code = 63037; + } elsif ($code == 54) { + $code = 63038; + } elsif ($code == 55) { + $code = 63039; + } elsif ($code == 56) { + $code = 63040; + } elsif ($code == 57) { + $code = 63041; + } + $kern{$code} = $values[$i+1]; + $unx{$code} = $values[$i+2]; + $uny{$code} = $values[$i+3]; + } + print "KernsSLIF:"; + foreach $code (sort numerically keys(%kern)) { + print " ",$code," ",$kern{$code}," ",$unx{$code}," ",$uny{$code}; + } + print "\n"; + # Clean-up + foreach $code (keys(%kern)) { + delete $kern{$code}; + } + } else { + # All other lines + print; + } +} + +close(INFILE); diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/fontforge-interp.sh b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/fontforge-interp.sh new file mode 100755 index 00000000000..b19dd8eb4ca --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/fontforge-interp.sh @@ -0,0 +1,9 @@ +# fontforge as a script interpreter. +# +# Exists because +# * It is desirable to launch fontforge scripts as executables. +# * The usual #! interpreter-calling mechanism needs an explicit path, +# but custom-installed fontforge should be in a non-distro location. +# * Linux /usr/bin/env won't allow arguments such as -script. + +/usr/bin/fontforge -script $@ diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/freefont-ttf.spec b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/freefont-ttf.spec new file mode 100644 index 00000000000..0c81d1ba008 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/freefont-ttf.spec @@ -0,0 +1,83 @@ +# This is an RPM 'spec' file, for use with the Redhat Package Manager +# to make packages for that distribution. + +%define fontdir %{_datadir}/fonts/freefont + +Name: freefont-ttf +Version: 20051206 +Release: 1.pingo.1 +Summary: FreeFonts +Group: User Interface/X +License: GPL +URL: http://www.nongnu.org/freefont/ +Source: freefont-ttf-%{version}.tar +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +BuildArch: noarch +Requires: fontconfig + +%description +Freefonts aim to provide a set of free high-quality outline (OpenType, +Truetype, Type 0) UCS fonts, under GNU GPL license. + +All the fonts conform to MES-1 (Minimum European Subset) of +Unicode/ISO 10646. + +%prep +%setup + +%build + +%install +/bin/rm -rf $RPM_BUILD_ROOT + +#fonts +install -d -m 0755 $RPM_BUILD_ROOT%{fontdir} +install -m 0644 *.ttf $RPM_BUILD_ROOT%{fontdir} +cd .. + +# "touch" all files we've got flagged as %ghost but which are not +# present in the RPM_BUILD_ROOT when RPM looks for files +/bin/touch $RPM_BUILD_ROOT%{fontdir}/fonts.cache-1 + + +%clean +/bin/rm -rf $RPM_BUILD_ROOT + + +%post +if [ -x %{_bindir}/fc-cache ] ; then + %{_bindir}/fc-cache %{_datadir}/fonts ; +fi + +%postun +if [ "$1" = "0" ]; then + if [ -x %{_bindir}/fc-cache ] ; then + %{_bindir}/fc-cache %{_datadir}/fonts ; + fi +fi + + +%files +%defattr(0644,root,root,0755) +%doc README +%doc AUTHORS +%doc CREDITS +%doc COPYING +%doc ChangeLog +%dir %{fontdir} +%{fontdir}/*.ttf +%ghost %{fontdir}/fonts.cache-1 + +%changelog +* Fri Dec 9 2005 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si> 20051206-1.pingo.1 +- renamed to freefont-ttf + +* Tue Dec 06 2005 Rok Papez <rok.papez@lugos.si> 20051206-1.pingo.1 +- Updated fonts to version 2005-12-06 + +* Fri Sep 09 2005 Rok Papez <rok.papez@lugos.si> 20050407-1.pingo.1 +- Updated fonts to version 2005-04-07 +- Rebuild for Fedora Core 4 / Pingo 4.0 + +* Sun Oct 06 2003 Rok Papez <rok.papez@lugos.si> 1.0-1 +- Created the first release diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/hex_range.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/hex_range.py new file mode 100755 index 00000000000..7ef50f7b805 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/hex_range.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2009, 2010, 2011 Stevan White" +__date__ = "$Date: 2011-09-13 13:05:59 +0200 (Tue, 13 Sep 2011) $" +__version__ = "$Revision: 1704 $" + +__doc__ = """Sends to standard output a range of hex values formatted + for e.g. HTML. + Takes one or two numerical arguments. With one argument the output + is just the formatted value of the argument. +""" + +import sys + +# Python Unicode prefix +prefix = '\\u' +postfix = '' +# General Unicode prefix +prefix = 'U+' +postfix = '' +# HTML Entity +prefix = '&#x' +postfix = ';' + +def explain_error_and_quit( e ): + if e: + print 'Error: ', e + print "Usage:" + print " hex_range num1 [num2]" + exit( 1 ) + +def print_formatted_hex_value( n ): + print '%s%0.4x%s' %( prefix, n, postfix ) + +if len( sys.argv ) == 3: + try: + a = int( sys.argv[1], 0 ) + b = int( sys.argv[2], 0 ) + for i in xrange( a, b + 1 ): + print_formatted_hex_value( i ) + except ValueError, e: + explain_error_and_quit( e ) +elif len( sys.argv ) == 2: + try: + a = int( sys.argv[1], 0 ) + print_formatted_hex_value( a ) + except ValueError, e: + explain_error_and_quit( e ) +else: + explain_error_and_quit() + diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py new file mode 100755 index 00000000000..6d71e571fed --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/metafont/bulk_eps_import.py @@ -0,0 +1,72 @@ +#!/usr/bin/fontforge -script +""" +For use on Metafont fonts. +To import glyphs each in individual .eps files into an empty font file. + +First, process with 'mpost'. Procedure is: + +1) Make sure you have an mfplain mem file for mpost. It may come with + the distro, but it is possible also to generate it. + + I found an mfplain.mp file somewhere. Use it to make an mfplain.mem. + mpost -ini '\input mfplain.mp; dump' + +2) Generate .eps files from a .mf file such as skt10.mf + mpost '&./mfplain \mag=1; truecorners:=0; filenametemplate "%j-%4c.eps"; input skt10.mf' + + A bunch of eps files should result, with names like + skt10-012.eps +3) Use FontForge to make an empty font file, with a name like SKT.sfd +4) Run this script on the eps files like so + freefont/tools/metafont/bulk_eps_import.py SKT.sfd skt10 + +Then clean up clean up clean up. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2008, 2011, Stevan White" +__date__ = "$Date: 2011-09-12 14:25:06 +0200 (Mon, 12 Sep 2011) $" +__version__ = "$Revision: 1694 $" + +import fontforge +import sys, os +import fnmatch, re + +problem = False + +def import_glyph( font, name, chrnum ): + print "importing file: " + name + " to slot " + str( chrnum ) + + g = font.createChar( chrnum ) + + print "importing outlines " + name + g.importOutlines( name ) + # The glyphs produced by MetaPost usually have a grid, whose + # right side seems to correspond to the proper right side bearing + xmax = g.layers[1].boundingBox()[2] + g.right_side_bearing = max( xmax, 0 ) + +scriptname = sys.argv[0]; +argc = len( sys.argv ) + +file_pat = r'([A-Za-z0-9]*)-(\d{3,4}).eps' +file_pat = sys.argv[2] + r'-(\d{3,4}).eps' +re_file_pat = re.compile( file_pat ) + +if argc > 2: + fontfilename = sys.argv[1] + font = fontforge.open( fontfilename ) + print "bulk importing to font file: " + fontfilename + chrnum = 0 + directories = os.listdir('.') + directories.sort() + + for file in directories: + matches = re_file_pat.match( file ) + if matches: + chrnum = int( matches.group(1) ) + import_glyph( font, file, chrnum ) + font.save() + font.close() + +sys.exit( int( problem ) ) diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py new file mode 100644 index 00000000000..645296d4b14 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py @@ -0,0 +1,80 @@ +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont 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 3 of the License, or (at your option) any later +version. + +Gnu FreeFont 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. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2010, Stevan White" +__date__ = "$Date: 2010/09/18 08:50:42 $" +__version__ = "$Revision: 1.6 $" + +import fontforge +import psMat +from sys import stdout + +__doc__ = """ +Replaces the Braille Pattern range in a font. There must already be +characters defined there. + +Two auxiliar glyphs, in variables glyphOff and glyphOn below, represent the +off and on state of the Braille dots, respectively. + +One also needs to set the font file path, the width between columns of dots, +and the width between rows of dots, as well as the width of the glyphs. + +The first 64 Braille Patterns consist of two columns of four dots, +the bottom two of which are all zero. The other 6 dots are represented +by the bit patterns of the octal digits of the offset from the range start. + +The remaining three sets of 64 patterns repeat the first set, with +the bottom two dots being the bit pattern for the numbers 1 to 4 in binary. +""" + +font = fontforge.open( '../../sfd/FreeMono.sfd' ) + +glyphOff = 'braille_off' +glyphOn = 'braille_on' +colwidth = 220 +rowheight = -220 +glyphwidth = 600 + +def drawdot( g, col, row, on ): + move = psMat.translate( col * colwidth, row * rowheight ) + if on: + g.addReference( glyphOn, move ) + else: + g.addReference( glyphOff, move ) + +def createAndName( font, off ): + return font.createChar( 0x2800 + off, 'braille%0.2X' % off ) + +def drawtopsix( g, off ): + print 'created', 'braille%0.2X' % off + g.clear() + g.right_side_bearing = glyphwidth + for col in range ( 0, 2 ): + for row in range ( 0, 3 ): + print 'shift', ( 3 * col + row ) + state = ( 1 << ( 3 * col + row ) ) & off + drawdot( g, col, row, state ) + +# Contrary to the FontForge docs, font.createChar does *not* create a +# glyph if one doesn't exist, but *does* re-name it if it already exists. +for off in range ( 0, 0x0100 ): + g = createAndName( font, off ) + drawtopsix( g, off ) + drawdot( g, 0, 3, ( off / 0x40 ) % 2 != 0 ) + drawdot( g, 1, 3, off / 0x80 != 0 ) + +font.save() |