summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/UnicodeRanges.py
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/UnicodeRanges.py')
-rw-r--r--Master/texmf-dist/doc/fonts/gnu-freefont/tools/report/OpenType/UnicodeRanges.py567
1 files changed, 567 insertions, 0 deletions
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 &amp; 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
+