"Fossies" - the Fresh Open Source Software Archive

Member "reportlab-3.5.23/src/reportlab/platypus/paraparser.py" (31 May 2019, 213709 Bytes) of package /linux/privat/reportlab-3.5.23.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. For more information about "paraparser.py" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 3.5.21_vs_3.5.23.

    1 #Copyright ReportLab Europe Ltd. 2000-2017
    2 #see license.txt for license details
    3 #history https://bitbucket.org/rptlab/reportlab/history-node/tip/src/reportlab/platypus/paraparser.py
    4 __all__ = ('ParaFrag', 'ParaParser')
    5 __version__='3.5.20'
    6 __doc__='''The parser used to process markup within paragraphs'''
    7 import string
    8 import re
    9 import sys
   10 import os
   11 import copy
   12 import base64
   13 from pprint import pprint as pp
   14 from reportlab import ascii
   15 import unicodedata
   16 import reportlab.lib.sequencer
   17 
   18 from reportlab.lib.abag import ABag
   19 from reportlab.lib.utils import ImageReader, isPy3, annotateException, encode_label, asUnicode, asBytes, uniChr, isStr, unicodeT
   20 from reportlab.lib.colors import toColor, white, black, red, Color
   21 from reportlab.lib.fonts import tt2ps, ps2tt
   22 from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
   23 from reportlab.lib.units import inch,mm,cm,pica
   24 from reportlab.rl_config import platypus_link_underline
   25 if isPy3:
   26     from html.parser import HTMLParser
   27     from html.entities import name2codepoint
   28 else:
   29     from HTMLParser import HTMLParser
   30     from htmlentitydefs import name2codepoint
   31 
   32 _re_para = re.compile(r'^\s*<\s*para(?:\s+|>|/>)')
   33 
   34 sizeDelta = 2       # amount to reduce font size by for super and sub script
   35 subFraction = 0.5   # fraction of font size that a sub script should be lowered
   36 supFraction = 0.5 # fraction of font size that a super script should be raised
   37 
   38 DEFAULT_INDEX_NAME='_indexAdd'
   39 
   40 def _convnum(s, unit=1, allowRelative=True):
   41     if s[0] in ('+','-') and allowRelative:
   42         try:
   43             return ('relative',int(s)*unit)
   44         except ValueError:
   45             return ('relative',float(s)*unit)
   46     else:
   47         try:
   48             return int(s)*unit
   49         except ValueError:
   50             return float(s)*unit
   51 
   52 def _num(s, unit=1, allowRelative=True,
   53         _unit_map = {'i':inch,'in':inch,'pt':1,'cm':cm,'mm':mm,'pica':pica },
   54         _re_unit = re.compile('^\s*(.*)(i|in|cm|mm|pt|pica)\s*$'),
   55         ):
   56     """Convert a string like '10cm' to an int or float (in points).
   57        The default unit is point, but optionally you can use other
   58        default units like mm.
   59     """
   60     m = _re_unit.match(s)
   61     if m:
   62         unit = _unit_map[m.group(2)]
   63         s = m.group(1)
   64     return _convnum(s,unit,allowRelative)
   65 
   66 def _int(s):
   67     try:
   68         return int(s)
   69     except:
   70         raise ValueError('cannot convert %r to int' % s)
   71 
   72 def _bool(s):
   73     s = s.lower()
   74     if s in ('true','1','yes'):
   75         return True
   76     if s in ('false','0','no'):
   77         return False
   78     raise ValueError('cannot convert %r to bool value' % s)
   79 
   80 def _numpct(s,unit=1,allowRelative=False):
   81     if s.endswith('%'):
   82         return _PCT(_convnum(s[:-1],allowRelative=allowRelative))
   83     else:
   84         return _num(s,unit,allowRelative)
   85 
   86 class _PCT(float):
   87     def __new__(cls,v):
   88         self = float.__new__(cls,v*0.01)
   89         self._normalizer = 1.0
   90         self._value = v
   91         return self
   92 
   93     def normalizedValue(self,normalizer):
   94         if not normalizer:
   95             normaliser = self._normalizer
   96         r = _PCT(normalizer*self._value)
   97         r._value = self._value
   98         r._normalizer = normalizer
   99         return r
  100 
  101     def __copy__(self):
  102         r = _PCT(float(self))
  103         r._value = self._value
  104         r._normalizer = normalizer
  105         return r
  106 
  107     def __deepcopy__(self,mem):
  108         return self.__copy__()
  109 
  110 def fontSizeNormalize(frag,attr,default):
  111     if not hasattr(frag,attr): return default
  112     v = _numpct(getattr(frag,attr),allowRelative=True)
  113     return (v[1]+frag.fontSize) if isinstance(v,tuple) else v.normalizedValue(frag.fontSize) if isinstance(v,_PCT) else v
  114 
  115 class _ExValidate:
  116     '''class for syntax checking attributes
  117     '''
  118     def __init__(self,tag,attr):
  119         self.tag = tag
  120         self.attr = attr
  121 
  122     def invalid(self,s):
  123         raise ValueError('<%s> invalid value %r for attribute %s' % (self.tag,s,self.attr))
  124 
  125     def validate(self, parser,s):
  126         raise ValueError('abstract method called')
  127         return s
  128 
  129     def __call__(self, parser, s):
  130         try:
  131             return self.validate(parser, s)
  132         except:
  133             self.invalid(s)
  134 
  135 class _CheckSup(_ExValidate):
  136     '''class for syntax checking <sup|sub> attributes
  137     if the check succeeds then we always return the string for later evaluation'''
  138     def validate(self,parser,s):
  139         self.fontSize = parser._stack[-1].fontSize
  140         fontSizeNormalize(self,self.attr,'')
  141         return s
  142 
  143     def __call__(self, parser, s):
  144         setattr(self,self.attr,s)
  145         return _ExValidate.__call__(self,parser,s)
  146 
  147 _lineRepeats = dict(single=1,double=2,triple=3)
  148 _re_us_value = re.compile(r'^\s*(.*)\s*\*\s*(P|L|f|F)\s*$')
  149 class _CheckUS(_ExValidate):
  150     '''class for syntax checking <u|strike> width/offset attributes'''
  151     def validate(self,parser,s):
  152         s = s.strip()
  153         if s:
  154             m = _re_us_value.match(s)
  155             if m:
  156                 v = float(m.group(1))
  157                 if m.group(2)=='P':
  158                     return parser._stack[0].fontSize*v
  159             else:
  160                 _num(s,allowRelative=False)
  161         return s
  162 
  163 def _valignpc(s):
  164     s = s.lower()
  165     if s in ('baseline','sub','super','top','text-top','middle','bottom','text-bottom'):
  166         return s
  167     if s.endswith('%'):
  168         n = _convnum(s[:-1])
  169         if isinstance(n,tuple):
  170             n = n[1]
  171         return _PCT(n)
  172     n = _num(s)
  173     if isinstance(n,tuple):
  174         n = n[1]
  175     return n
  176 
  177 def _autoLeading(x):
  178     x = x.lower()
  179     if x in ('','min','max','off'):
  180         return x
  181     raise ValueError('Invalid autoLeading=%r' % x )
  182 
  183 def _align(s):
  184     s = s.lower()
  185     if s=='left': return TA_LEFT
  186     elif s=='right': return TA_RIGHT
  187     elif s=='justify': return TA_JUSTIFY
  188     elif s in ('centre','center'): return TA_CENTER
  189     else: raise ValueError('illegal alignment %r' % s)
  190 
  191 def _bAnchor(s):
  192     s = s.lower()
  193     if not s in ('start','middle','end','numeric'):
  194         raise ValueError('illegal bullet anchor %r' % s)
  195     return s
  196 
  197 def _wordWrapConv(s):
  198     s = s.upper().strip()
  199     if not s: return None
  200     if s not in ('CJK','RTL','LTR'):
  201         raise ValueError('cannot convert wordWrap=%r' % s)
  202     return s
  203 
  204 def _textTransformConv(s):
  205     s = s.lower().strip()
  206     if not s: return None
  207     if s not in ('uppercase','lowercase','capitalize','none'):
  208         raise ValueError('cannot convert wordWrap=%r' % s)
  209     return s
  210 
  211 _paraAttrMap = {'font': ('fontName', None),
  212                 'face': ('fontName', None),
  213                 'fontsize': ('fontSize', _num),
  214                 'size': ('fontSize', _num),
  215                 'leading': ('leading', _num),
  216                 'autoleading': ('autoLeading', _autoLeading),
  217                 'lindent': ('leftIndent', _num),
  218                 'rindent': ('rightIndent', _num),
  219                 'findent': ('firstLineIndent', _num),
  220                 'align': ('alignment', _align),
  221                 'spaceb': ('spaceBefore', _num),
  222                 'spacea': ('spaceAfter', _num),
  223                 'bfont': ('bulletFontName', None),
  224                 'bfontsize': ('bulletFontSize',_num),
  225                 'boffsety': ('bulletOffsetY',_num),
  226                 'bindent': ('bulletIndent',_num),
  227                 'bcolor': ('bulletColor',toColor),
  228                 'banchor': ('bulletAnchor',_bAnchor),
  229                 'color':('textColor',toColor),
  230                 'backcolor':('backColor',toColor),
  231                 'bgcolor':('backColor',toColor),
  232                 'bg':('backColor',toColor),
  233                 'fg': ('textColor',toColor),
  234                 'justifybreaks': ('justifyBreaks',_bool),
  235                 'justifylastline': ('justifyLastLine',_int),
  236                 'wordwrap': ('wordWrap',_wordWrapConv),
  237                 'allowwidows': ('allowWidows',_bool),
  238                 'alloworphans': ('allowOrphans',_bool),
  239                 'splitlongwords': ('splitLongWords',_bool),
  240                 'borderwidth': ('borderWidth',_num),
  241                 'borderpadding': ('borderpadding',_num),
  242                 'bordercolor': ('borderColor',toColor),
  243                 'borderradius': ('borderRadius',_num),
  244                 'texttransform':('textTransform',_textTransformConv),
  245                 'enddots':('endDots',None),
  246                 'underlinewidth':('underlineWidth',_CheckUS('para','underlineWidth')),
  247                 'underlinecolor':('underlineColor',toColor),
  248                 'underlineoffset':('underlineOffset',_CheckUS('para','underlineOffset')),
  249                 'underlinegap':('underlineGap',_CheckUS('para','underlineGap')),
  250                 'strikewidth':('strikeWidth',_CheckUS('para','strikeWidth')),
  251                 'strikecolor':('strikeColor',toColor),
  252                 'strikeoffset':('strikeOffset',_CheckUS('para','strikeOffset')),
  253                 'strikegap':('strikeGap',_CheckUS('para','strikeGap')),
  254                 'spaceshrinkage':('spaceShrinkage',_num),
  255                 'hyphenationLanguage': ('hyphenationLang',None),
  256                 'hyphenationOverflow': ('hyphenationOverflow',_bool),
  257                 'hyphenationMinWordLength': ('hyphenationMinWordLength',_int),
  258                 'uriWasteReduce': ('uriWasteReduce',_num),
  259                 'embeddedHyphenation': ('embeddedHyphenation',_bool),
  260                 }
  261 
  262 _bulletAttrMap = {
  263                 'font': ('bulletFontName', None),
  264                 'face': ('bulletFontName', None),
  265                 'size': ('bulletFontSize',_num),
  266                 'fontsize': ('bulletFontSize',_num),
  267                 'offsety': ('bulletOffsetY',_num),
  268                 'indent': ('bulletIndent',_num),
  269                 'color': ('bulletColor',toColor),
  270                 'fg': ('bulletColor',toColor),
  271                 'anchor': ('bulletAnchor',_bAnchor),
  272                 }
  273 
  274 #things which are valid font attributes
  275 _fontAttrMap = {'size': ('fontSize', _num),
  276                 'face': ('fontName', None),
  277                 'name': ('fontName', None),
  278                 'fg':   ('textColor', toColor),
  279                 'color':('textColor', toColor),
  280                 'backcolor':('backColor',toColor),
  281                 'bgcolor':('backColor',toColor),
  282                 }
  283 #things which are valid span attributes
  284 _spanAttrMap = {'size': ('fontSize', _num),
  285                 'face': ('fontName', None),
  286                 'name': ('fontName', None),
  287                 'fg':   ('textColor', toColor),
  288                 'color':('textColor', toColor),
  289                 'backcolor':('backColor',toColor),
  290                 'bgcolor':('backColor',toColor),
  291                 'style': ('style',None),
  292                 }
  293 #things which are valid font attributes
  294 _linkAttrMap = {'size': ('fontSize', _num),
  295                 'face': ('fontName', None),
  296                 'name': ('fontName', None),
  297                 'fg':   ('textColor', toColor),
  298                 'color':('textColor', toColor),
  299                 'backcolor':('backColor',toColor),
  300                 'bgcolor':('backColor',toColor),
  301                 'dest': ('link', None),
  302                 'destination': ('link', None),
  303                 'target': ('link', None),
  304                 'href': ('link', None),
  305                 'ucolor': ('underlineColor', toColor),
  306                 'uoffset': ('underlineOffset', _CheckUS('link','underlineOffset')),
  307                 'uwidth': ('underlineWidth', _CheckUS('link','underlineWidth')),
  308                 'ugap': ('underlineGap', _CheckUS('link','underlineGap')),
  309                 'underline': ('underline',_bool),
  310                 'ukind': ('underlineKind',None),
  311                 }
  312 _anchorAttrMap = {
  313                 'name': ('name', None),
  314                 }
  315 _imgAttrMap = {
  316                 'src': ('src', None),
  317                 'width': ('width',_numpct),
  318                 'height':('height',_numpct),
  319                 'valign':('valign',_valignpc),
  320                 }
  321 _indexAttrMap = {
  322                 'name': ('name',None),
  323                 'item': ('item',None),
  324                 'offset': ('offset',None),
  325                 'format': ('format',None),
  326                 }
  327 _supAttrMap = {
  328                 'rise': ('supr', _CheckSup('sup|sub','rise')),
  329                 'size': ('sups', _CheckSup('sup|sub','size')),
  330                 }
  331 _uAttrMap = {
  332             'color':('underlineColor', toColor),
  333             'width':('underlineWidth', _CheckUS('underline','underlineWidth')),
  334             'offset':('underlineOffset', _CheckUS('underline','underlineOffset')),
  335             'gap':('underlineGap', _CheckUS('underline','underlineGap')),
  336             'kind':('underlineKind',None),
  337             }
  338 _strikeAttrMap = {
  339             'color':('strikeColor', toColor),
  340             'width':('strikeWidth', _CheckUS('strike','strikeWidth')),
  341             'offset':('strikeOffset', _CheckUS('strike','strikeOffset')),
  342             'gap':('strikeGap', _CheckUS('strike','strikeGap')),
  343             'kind':('strikeKind',None),
  344             }
  345 
  346 def _addAttributeNames(m):
  347     K = list(m.keys())
  348     for k in K:
  349         n = m[k][0]
  350         if n not in m: m[n] = m[k]
  351         n = n.lower()
  352         if n not in m: m[n] = m[k]
  353 
  354 _addAttributeNames(_paraAttrMap)
  355 _addAttributeNames(_fontAttrMap)
  356 _addAttributeNames(_spanAttrMap)
  357 _addAttributeNames(_bulletAttrMap)
  358 _addAttributeNames(_anchorAttrMap)
  359 _addAttributeNames(_linkAttrMap)
  360 
  361 def _applyAttributes(obj, attr):
  362     for k, v in attr.items():
  363         if isinstance(v,(list,tuple)) and v[0]=='relative':
  364             if hasattr(obj, k):
  365                 v = v[1]+getattr(obj,k)
  366             else:
  367                 v = v[1]
  368         setattr(obj,k,v)
  369 
  370 #Named character entities intended to be supported from the special font
  371 #with additions suggested by Christoph Zwerschke who also suggested the
  372 #numeric entity names that follow.
  373 greeks = {
  374     'Aacute': u'\xc1',                            #LATIN CAPITAL LETTER A WITH ACUTE
  375     'aacute': u'\xe1',                            #LATIN SMALL LETTER A WITH ACUTE
  376     'Abreve': u'\u0102',                          #LATIN CAPITAL LETTER A WITH BREVE
  377     'abreve': u'\u0103',                          #LATIN SMALL LETTER A WITH BREVE
  378     'ac': u'\u223e',                              #INVERTED LAZY S
  379     'acd': u'\u223f',                             #SINE WAVE
  380     'acE': u'\u223e\u0333',                       #INVERTED LAZY S with double underline
  381     'Acirc': u'\xc2',                             #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  382     'acirc': u'\xe2',                             #LATIN SMALL LETTER A WITH CIRCUMFLEX
  383     'acute': u'\xb4',                             #ACUTE ACCENT
  384     'Acy': u'\u0410',                             #CYRILLIC CAPITAL LETTER A
  385     'acy': u'\u0430',                             #CYRILLIC SMALL LETTER A
  386     'AElig': u'\xc6',                             #LATIN CAPITAL LETTER AE
  387     'aelig': u'\xe6',                             #LATIN SMALL LETTER AE
  388     'af': u'\u2061',                              #FUNCTION APPLICATION
  389     'Afr': u'\U0001d504',                         #MATHEMATICAL FRAKTUR CAPITAL A
  390     'afr': u'\U0001d51e',                         #MATHEMATICAL FRAKTUR SMALL A
  391     'Agrave': u'\xc0',                            #LATIN CAPITAL LETTER A WITH GRAVE
  392     'agrave': u'\xe0',                            #LATIN SMALL LETTER A WITH GRAVE
  393     'alefsym': u'\u2135',                         #ALEF SYMBOL
  394     'aleph': u'\u2135',                           #ALEF SYMBOL
  395     'Alpha': u'\u0391',                           #GREEK CAPITAL LETTER ALPHA
  396     'alpha': u'\u03b1',                           #GREEK SMALL LETTER ALPHA
  397     'Amacr': u'\u0100',                           #LATIN CAPITAL LETTER A WITH MACRON
  398     'amacr': u'\u0101',                           #LATIN SMALL LETTER A WITH MACRON
  399     'amalg': u'\u2a3f',                           #AMALGAMATION OR COPRODUCT
  400     'AMP': u'\x26',                               #AMPERSAND
  401     'amp': u'\x26',                               #AMPERSAND
  402     'And': u'\u2a53',                             #DOUBLE LOGICAL AND
  403     'and': u'\u2227',                             #LOGICAL AND
  404     'andand': u'\u2a55',                          #TWO INTERSECTING LOGICAL AND
  405     'andd': u'\u2a5c',                            #LOGICAL AND WITH HORIZONTAL DASH
  406     'andslope': u'\u2a58',                        #SLOPING LARGE AND
  407     'andv': u'\u2a5a',                            #LOGICAL AND WITH MIDDLE STEM
  408     'ang': u'\u2220',                             #ANGLE
  409     'ange': u'\u29a4',                            #ANGLE WITH UNDERBAR
  410     'angle': u'\u2220',                           #ANGLE
  411     'angmsd': u'\u2221',                          #MEASURED ANGLE
  412     'angmsdaa': u'\u29a8',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
  413     'angmsdab': u'\u29a9',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
  414     'angmsdac': u'\u29aa',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
  415     'angmsdad': u'\u29ab',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
  416     'angmsdae': u'\u29ac',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
  417     'angmsdaf': u'\u29ad',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
  418     'angmsdag': u'\u29ae',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
  419     'angmsdah': u'\u29af',                        #MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
  420     'angrt': u'\u221f',                           #RIGHT ANGLE
  421     'angrtvb': u'\u22be',                         #RIGHT ANGLE WITH ARC
  422     'angrtvbd': u'\u299d',                        #MEASURED RIGHT ANGLE WITH DOT
  423     'angsph': u'\u2222',                          #SPHERICAL ANGLE
  424     'angst': u'\xc5',                             #LATIN CAPITAL LETTER A WITH RING ABOVE
  425     'angzarr': u'\u237c',                         #RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
  426     'Aogon': u'\u0104',                           #LATIN CAPITAL LETTER A WITH OGONEK
  427     'aogon': u'\u0105',                           #LATIN SMALL LETTER A WITH OGONEK
  428     'Aopf': u'\U0001d538',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL A
  429     'aopf': u'\U0001d552',                        #MATHEMATICAL DOUBLE-STRUCK SMALL A
  430     'ap': u'\u2248',                              #ALMOST EQUAL TO
  431     'apacir': u'\u2a6f',                          #ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
  432     'apE': u'\u2a70',                             #APPROXIMATELY EQUAL OR EQUAL TO
  433     'ape': u'\u224a',                             #ALMOST EQUAL OR EQUAL TO
  434     'apid': u'\u224b',                            #TRIPLE TILDE
  435     'apos': "'",                                 #APOSTROPHE
  436     'ApplyFunction': u'\u2061',                   #FUNCTION APPLICATION
  437     'approx': u'\u2248',                          #ALMOST EQUAL TO
  438     'approxeq': u'\u224a',                        #ALMOST EQUAL OR EQUAL TO
  439     'Aring': u'\xc5',                             #LATIN CAPITAL LETTER A WITH RING ABOVE
  440     'aring': u'\xe5',                             #LATIN SMALL LETTER A WITH RING ABOVE
  441     'Ascr': u'\U0001d49c',                        #MATHEMATICAL SCRIPT CAPITAL A
  442     'ascr': u'\U0001d4b6',                        #MATHEMATICAL SCRIPT SMALL A
  443     'Assign': u'\u2254',                          #COLON EQUALS
  444     'ast': u'*',                                  #ASTERISK
  445     'asymp': u'\u2248',                           #ALMOST EQUAL TO
  446     'asympeq': u'\u224d',                         #EQUIVALENT TO
  447     'Atilde': u'\xc3',                            #LATIN CAPITAL LETTER A WITH TILDE
  448     'atilde': u'\xe3',                            #LATIN SMALL LETTER A WITH TILDE
  449     'Auml': u'\xc4',                              #LATIN CAPITAL LETTER A WITH DIAERESIS
  450     'auml': u'\xe4',                              #LATIN SMALL LETTER A WITH DIAERESIS
  451     'awconint': u'\u2233',                        #ANTICLOCKWISE CONTOUR INTEGRAL
  452     'awint': u'\u2a11',                           #ANTICLOCKWISE INTEGRATION
  453     'backcong': u'\u224c',                        #ALL EQUAL TO
  454     'backepsilon': u'\u03f6',                     #GREEK REVERSED LUNATE EPSILON SYMBOL
  455     'backprime': u'\u2035',                       #REVERSED PRIME
  456     'backsim': u'\u223d',                         #REVERSED TILDE
  457     'backsimeq': u'\u22cd',                       #REVERSED TILDE EQUALS
  458     'Backslash': u'\u2216',                       #SET MINUS
  459     'Barv': u'\u2ae7',                            #SHORT DOWN TACK WITH OVERBAR
  460     'barvee': u'\u22bd',                          #NOR
  461     'Barwed': u'\u2306',                          #PERSPECTIVE
  462     'barwed': u'\u2305',                          #PROJECTIVE
  463     'barwedge': u'\u2305',                        #PROJECTIVE
  464     'bbrk': u'\u23b5',                            #BOTTOM SQUARE BRACKET
  465     'bbrktbrk': u'\u23b6',                        #BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
  466     'bcong': u'\u224c',                           #ALL EQUAL TO
  467     'Bcy': u'\u0411',                             #CYRILLIC CAPITAL LETTER BE
  468     'bcy': u'\u0431',                             #CYRILLIC SMALL LETTER BE
  469     'bdquo': u'\u201e',                           #DOUBLE LOW-9 QUOTATION MARK
  470     'becaus': u'\u2235',                          #BECAUSE
  471     'Because': u'\u2235',                         #BECAUSE
  472     'because': u'\u2235',                         #BECAUSE
  473     'bemptyv': u'\u29b0',                         #REVERSED EMPTY SET
  474     'bepsi': u'\u03f6',                           #GREEK REVERSED LUNATE EPSILON SYMBOL
  475     'bernou': u'\u212c',                          #SCRIPT CAPITAL B
  476     'Bernoullis': u'\u212c',                      #SCRIPT CAPITAL B
  477     'Beta': u'\u0392',                            #GREEK CAPITAL LETTER BETA
  478     'beta': u'\u03b2',                            #GREEK SMALL LETTER BETA
  479     'beth': u'\u2136',                            #BET SYMBOL
  480     'between': u'\u226c',                         #BETWEEN
  481     'Bfr': u'\U0001d505',                         #MATHEMATICAL FRAKTUR CAPITAL B
  482     'bfr': u'\U0001d51f',                         #MATHEMATICAL FRAKTUR SMALL B
  483     'bigcap': u'\u22c2',                          #N-ARY INTERSECTION
  484     'bigcirc': u'\u25ef',                         #LARGE CIRCLE
  485     'bigcup': u'\u22c3',                          #N-ARY UNION
  486     'bigodot': u'\u2a00',                         #N-ARY CIRCLED DOT OPERATOR
  487     'bigoplus': u'\u2a01',                        #N-ARY CIRCLED PLUS OPERATOR
  488     'bigotimes': u'\u2a02',                       #N-ARY CIRCLED TIMES OPERATOR
  489     'bigsqcup': u'\u2a06',                        #N-ARY SQUARE UNION OPERATOR
  490     'bigstar': u'\u2605',                         #BLACK STAR
  491     'bigtriangledown': u'\u25bd',                 #WHITE DOWN-POINTING TRIANGLE
  492     'bigtriangleup': u'\u25b3',                   #WHITE UP-POINTING TRIANGLE
  493     'biguplus': u'\u2a04',                        #N-ARY UNION OPERATOR WITH PLUS
  494     'bigvee': u'\u22c1',                          #N-ARY LOGICAL OR
  495     'bigwedge': u'\u22c0',                        #N-ARY LOGICAL AND
  496     'bkarow': u'\u290d',                          #RIGHTWARDS DOUBLE DASH ARROW
  497     'blacklozenge': u'\u29eb',                    #BLACK LOZENGE
  498     'blacksquare': u'\u25aa',                     #BLACK SMALL SQUARE
  499     'blacktriangle': u'\u25b4',                   #BLACK UP-POINTING SMALL TRIANGLE
  500     'blacktriangledown': u'\u25be',               #BLACK DOWN-POINTING SMALL TRIANGLE
  501     'blacktriangleleft': u'\u25c2',               #BLACK LEFT-POINTING SMALL TRIANGLE
  502     'blacktriangleright': u'\u25b8',              #BLACK RIGHT-POINTING SMALL TRIANGLE
  503     'blank': u'\u2423',                           #OPEN BOX
  504     'blk12': u'\u2592',                           #MEDIUM SHADE
  505     'blk14': u'\u2591',                           #LIGHT SHADE
  506     'blk34': u'\u2593',                           #DARK SHADE
  507     'block': u'\u2588',                           #FULL BLOCK
  508     'bne': u'=\u20e5',                            #EQUALS SIGN with reverse slash
  509     'bnequiv': u'\u2261\u20e5',                   #IDENTICAL TO with reverse slash
  510     'bNot': u'\u2aed',                            #REVERSED DOUBLE STROKE NOT SIGN
  511     'bnot': u'\u2310',                            #REVERSED NOT SIGN
  512     'Bopf': u'\U0001d539',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL B
  513     'bopf': u'\U0001d553',                        #MATHEMATICAL DOUBLE-STRUCK SMALL B
  514     'bot': u'\u22a5',                             #UP TACK
  515     'bottom': u'\u22a5',                          #UP TACK
  516     'bowtie': u'\u22c8',                          #BOWTIE
  517     'boxbox': u'\u29c9',                          #TWO JOINED SQUARES
  518     'boxDL': u'\u2557',                           #BOX DRAWINGS DOUBLE DOWN AND LEFT
  519     'boxDl': u'\u2556',                           #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
  520     'boxdL': u'\u2555',                           #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
  521     'boxdl': u'\u2510',                           #BOX DRAWINGS LIGHT DOWN AND LEFT
  522     'boxDR': u'\u2554',                           #BOX DRAWINGS DOUBLE DOWN AND RIGHT
  523     'boxDr': u'\u2553',                           #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
  524     'boxdR': u'\u2552',                           #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
  525     'boxdr': u'\u250c',                           #BOX DRAWINGS LIGHT DOWN AND RIGHT
  526     'boxH': u'\u2550',                            #BOX DRAWINGS DOUBLE HORIZONTAL
  527     'boxh': u'\u2500',                            #BOX DRAWINGS LIGHT HORIZONTAL
  528     'boxHD': u'\u2566',                           #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
  529     'boxHd': u'\u2564',                           #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
  530     'boxhD': u'\u2565',                           #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
  531     'boxhd': u'\u252c',                           #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
  532     'boxHU': u'\u2569',                           #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
  533     'boxHu': u'\u2567',                           #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
  534     'boxhU': u'\u2568',                           #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
  535     'boxhu': u'\u2534',                           #BOX DRAWINGS LIGHT UP AND HORIZONTAL
  536     'boxminus': u'\u229f',                        #SQUARED MINUS
  537     'boxplus': u'\u229e',                         #SQUARED PLUS
  538     'boxtimes': u'\u22a0',                        #SQUARED TIMES
  539     'boxUL': u'\u255d',                           #BOX DRAWINGS DOUBLE UP AND LEFT
  540     'boxUl': u'\u255c',                           #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
  541     'boxuL': u'\u255b',                           #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
  542     'boxul': u'\u2518',                           #BOX DRAWINGS LIGHT UP AND LEFT
  543     'boxUR': u'\u255a',                           #BOX DRAWINGS DOUBLE UP AND RIGHT
  544     'boxUr': u'\u2559',                           #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
  545     'boxuR': u'\u2558',                           #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
  546     'boxur': u'\u2514',                           #BOX DRAWINGS LIGHT UP AND RIGHT
  547     'boxV': u'\u2551',                            #BOX DRAWINGS DOUBLE VERTICAL
  548     'boxv': u'\u2502',                            #BOX DRAWINGS LIGHT VERTICAL
  549     'boxVH': u'\u256c',                           #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
  550     'boxVh': u'\u256b',                           #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
  551     'boxvH': u'\u256a',                           #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
  552     'boxvh': u'\u253c',                           #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
  553     'boxVL': u'\u2563',                           #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
  554     'boxVl': u'\u2562',                           #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
  555     'boxvL': u'\u2561',                           #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
  556     'boxvl': u'\u2524',                           #BOX DRAWINGS LIGHT VERTICAL AND LEFT
  557     'boxVR': u'\u2560',                           #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
  558     'boxVr': u'\u255f',                           #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
  559     'boxvR': u'\u255e',                           #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
  560     'boxvr': u'\u251c',                           #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
  561     'bprime': u'\u2035',                          #REVERSED PRIME
  562     'Breve': u'\u02d8',                           #BREVE
  563     'breve': u'\u02d8',                           #BREVE
  564     'brvbar': u'\xa6',                            #BROKEN BAR
  565     'Bscr': u'\u212c',                            #SCRIPT CAPITAL B
  566     'bscr': u'\U0001d4b7',                        #MATHEMATICAL SCRIPT SMALL B
  567     'bsemi': u'\u204f',                           #REVERSED SEMICOLON
  568     'bsim': u'\u223d',                            #REVERSED TILDE
  569     'bsime': u'\u22cd',                           #REVERSED TILDE EQUALS
  570     'bsol': u'\\',                                #REVERSE SOLIDUS
  571     'bsolb': u'\u29c5',                           #SQUARED FALLING DIAGONAL SLASH
  572     'bsolhsub': u'\u27c8',                        #REVERSE SOLIDUS PRECEDING SUBSET
  573     'bull': u'\u2022',                            #BULLET
  574     'bullet': u'\u2022',                          #BULLET
  575     'bump': u'\u224e',                            #GEOMETRICALLY EQUIVALENT TO
  576     'bumpE': u'\u2aae',                           #EQUALS SIGN WITH BUMPY ABOVE
  577     'bumpe': u'\u224f',                           #DIFFERENCE BETWEEN
  578     'Bumpeq': u'\u224e',                          #GEOMETRICALLY EQUIVALENT TO
  579     'bumpeq': u'\u224f',                          #DIFFERENCE BETWEEN
  580     'Cacute': u'\u0106',                          #LATIN CAPITAL LETTER C WITH ACUTE
  581     'cacute': u'\u0107',                          #LATIN SMALL LETTER C WITH ACUTE
  582     'Cap': u'\u22d2',                             #DOUBLE INTERSECTION
  583     'cap': u'\u2229',                             #INTERSECTION
  584     'capand': u'\u2a44',                          #INTERSECTION WITH LOGICAL AND
  585     'capbrcup': u'\u2a49',                        #INTERSECTION ABOVE BAR ABOVE UNION
  586     'capcap': u'\u2a4b',                          #INTERSECTION BESIDE AND JOINED WITH INTERSECTION
  587     'capcup': u'\u2a47',                          #INTERSECTION ABOVE UNION
  588     'capdot': u'\u2a40',                          #INTERSECTION WITH DOT
  589     'CapitalDifferentialD': u'\u2145',            #DOUBLE-STRUCK ITALIC CAPITAL D
  590     'caps': u'\u2229\ufe00',                      #INTERSECTION with serifs
  591     'caret': u'\u2041',                           #CARET INSERTION POINT
  592     'caron': u'\u02c7',                           #CARON
  593     'Cayleys': u'\u212d',                         #BLACK-LETTER CAPITAL C
  594     'ccaps': u'\u2a4d',                           #CLOSED INTERSECTION WITH SERIFS
  595     'Ccaron': u'\u010c',                          #LATIN CAPITAL LETTER C WITH CARON
  596     'ccaron': u'\u010d',                          #LATIN SMALL LETTER C WITH CARON
  597     'Ccedil': u'\xc7',                            #LATIN CAPITAL LETTER C WITH CEDILLA
  598     'ccedil': u'\xe7',                            #LATIN SMALL LETTER C WITH CEDILLA
  599     'Ccirc': u'\u0108',                           #LATIN CAPITAL LETTER C WITH CIRCUMFLEX
  600     'ccirc': u'\u0109',                           #LATIN SMALL LETTER C WITH CIRCUMFLEX
  601     'Cconint': u'\u2230',                         #VOLUME INTEGRAL
  602     'ccups': u'\u2a4c',                           #CLOSED UNION WITH SERIFS
  603     'ccupssm': u'\u2a50',                         #CLOSED UNION WITH SERIFS AND SMASH PRODUCT
  604     'Cdot': u'\u010a',                            #LATIN CAPITAL LETTER C WITH DOT ABOVE
  605     'cdot': u'\u010b',                            #LATIN SMALL LETTER C WITH DOT ABOVE
  606     'cedil': u'\xb8',                             #CEDILLA
  607     'Cedilla': u'\xb8',                           #CEDILLA
  608     'cemptyv': u'\u29b2',                         #EMPTY SET WITH SMALL CIRCLE ABOVE
  609     'cent': u'\xa2',                              #CENT SIGN
  610     'CenterDot': u'\xb7',                         #MIDDLE DOT
  611     'centerdot': u'\xb7',                         #MIDDLE DOT
  612     'Cfr': u'\u212d',                             #BLACK-LETTER CAPITAL C
  613     'cfr': u'\U0001d520',                         #MATHEMATICAL FRAKTUR SMALL C
  614     'CHcy': u'\u0427',                            #CYRILLIC CAPITAL LETTER CHE
  615     'chcy': u'\u0447',                            #CYRILLIC SMALL LETTER CHE
  616     'check': u'\u2713',                           #CHECK MARK
  617     'checkmark': u'\u2713',                       #CHECK MARK
  618     'Chi': u'\u03a7',                             #GREEK CAPITAL LETTER CHI
  619     'chi': u'\u03c7',                             #GREEK SMALL LETTER CHI
  620     'cir': u'\u25cb',                             #WHITE CIRCLE
  621     'circ': u'\u02c6',                            #MODIFIER LETTER CIRCUMFLEX ACCENT
  622     'circeq': u'\u2257',                          #RING EQUAL TO
  623     'circlearrowleft': u'\u21ba',                 #ANTICLOCKWISE OPEN CIRCLE ARROW
  624     'circlearrowright': u'\u21bb',                #CLOCKWISE OPEN CIRCLE ARROW
  625     'circledast': u'\u229b',                      #CIRCLED ASTERISK OPERATOR
  626     'circledcirc': u'\u229a',                     #CIRCLED RING OPERATOR
  627     'circleddash': u'\u229d',                     #CIRCLED DASH
  628     'CircleDot': u'\u2299',                       #CIRCLED DOT OPERATOR
  629     'circledR': u'\xae',                          #REGISTERED SIGN
  630     'circledS': u'\u24c8',                        #CIRCLED LATIN CAPITAL LETTER S
  631     'CircleMinus': u'\u2296',                     #CIRCLED MINUS
  632     'CirclePlus': u'\u2295',                      #CIRCLED PLUS
  633     'CircleTimes': u'\u2297',                     #CIRCLED TIMES
  634     'cirE': u'\u29c3',                            #CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
  635     'cire': u'\u2257',                            #RING EQUAL TO
  636     'cirfnint': u'\u2a10',                        #CIRCULATION FUNCTION
  637     'cirmid': u'\u2aef',                          #VERTICAL LINE WITH CIRCLE ABOVE
  638     'cirscir': u'\u29c2',                         #CIRCLE WITH SMALL CIRCLE TO THE RIGHT
  639     'ClockwiseContourIntegral': u'\u2232',        #CLOCKWISE CONTOUR INTEGRAL
  640     'CloseCurlyDoubleQuote': u'\u201d',           #RIGHT DOUBLE QUOTATION MARK
  641     'CloseCurlyQuote': u'\u2019',                 #RIGHT SINGLE QUOTATION MARK
  642     'clubs': u'\u2663',                           #BLACK CLUB SUIT
  643     'clubsuit': u'\u2663',                        #BLACK CLUB SUIT
  644     'Colon': u'\u2237',                           #PROPORTION
  645     'colon': u':',                                #COLON
  646     'Colone': u'\u2a74',                          #DOUBLE COLON EQUAL
  647     'colone': u'\u2254',                          #COLON EQUALS
  648     'coloneq': u'\u2254',                         #COLON EQUALS
  649     'comma': u',',                                #COMMA
  650     'commat': u'@',                               #COMMERCIAL AT
  651     'comp': u'\u2201',                            #COMPLEMENT
  652     'compfn': u'\u2218',                          #RING OPERATOR
  653     'complement': u'\u2201',                      #COMPLEMENT
  654     'complexes': u'\u2102',                       #DOUBLE-STRUCK CAPITAL C
  655     'cong': u'\u2245',                            #APPROXIMATELY EQUAL TO
  656     'congdot': u'\u2a6d',                         #CONGRUENT WITH DOT ABOVE
  657     'Congruent': u'\u2261',                       #IDENTICAL TO
  658     'Conint': u'\u222f',                          #SURFACE INTEGRAL
  659     'conint': u'\u222e',                          #CONTOUR INTEGRAL
  660     'ContourIntegral': u'\u222e',                 #CONTOUR INTEGRAL
  661     'Copf': u'\u2102',                            #DOUBLE-STRUCK CAPITAL C
  662     'copf': u'\U0001d554',                        #MATHEMATICAL DOUBLE-STRUCK SMALL C
  663     'coprod': u'\u2210',                          #N-ARY COPRODUCT
  664     'Coproduct': u'\u2210',                       #N-ARY COPRODUCT
  665     'COPY': u'\xa9',                              #COPYRIGHT SIGN
  666     'copy': u'\xa9',                              #COPYRIGHT SIGN
  667     'copysr': u'\u2117',                          #SOUND RECORDING COPYRIGHT
  668     'CounterClockwiseContourIntegral': u'\u2233', #ANTICLOCKWISE CONTOUR INTEGRAL
  669     'crarr': u'\u21b5',                           #DOWNWARDS ARROW WITH CORNER LEFTWARDS
  670     'Cross': u'\u2a2f',                           #VECTOR OR CROSS PRODUCT
  671     'cross': u'\u2717',                           #BALLOT X
  672     'Cscr': u'\U0001d49e',                        #MATHEMATICAL SCRIPT CAPITAL C
  673     'cscr': u'\U0001d4b8',                        #MATHEMATICAL SCRIPT SMALL C
  674     'csub': u'\u2acf',                            #CLOSED SUBSET
  675     'csube': u'\u2ad1',                           #CLOSED SUBSET OR EQUAL TO
  676     'csup': u'\u2ad0',                            #CLOSED SUPERSET
  677     'csupe': u'\u2ad2',                           #CLOSED SUPERSET OR EQUAL TO
  678     'ctdot': u'\u22ef',                           #MIDLINE HORIZONTAL ELLIPSIS
  679     'cudarrl': u'\u2938',                         #RIGHT-SIDE ARC CLOCKWISE ARROW
  680     'cudarrr': u'\u2935',                         #ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
  681     'cuepr': u'\u22de',                           #EQUAL TO OR PRECEDES
  682     'cuesc': u'\u22df',                           #EQUAL TO OR SUCCEEDS
  683     'cularr': u'\u21b6',                          #ANTICLOCKWISE TOP SEMICIRCLE ARROW
  684     'cularrp': u'\u293d',                         #TOP ARC ANTICLOCKWISE ARROW WITH PLUS
  685     'Cup': u'\u22d3',                             #DOUBLE UNION
  686     'cup': u'\u222a',                             #UNION
  687     'cupbrcap': u'\u2a48',                        #UNION ABOVE BAR ABOVE INTERSECTION
  688     'CupCap': u'\u224d',                          #EQUIVALENT TO
  689     'cupcap': u'\u2a46',                          #UNION ABOVE INTERSECTION
  690     'cupcup': u'\u2a4a',                          #UNION BESIDE AND JOINED WITH UNION
  691     'cupdot': u'\u228d',                          #MULTISET MULTIPLICATION
  692     'cupor': u'\u2a45',                           #UNION WITH LOGICAL OR
  693     'cups': u'\u222a\ufe00',                      #UNION with serifs
  694     'curarr': u'\u21b7',                          #CLOCKWISE TOP SEMICIRCLE ARROW
  695     'curarrm': u'\u293c',                         #TOP ARC CLOCKWISE ARROW WITH MINUS
  696     'curlyeqprec': u'\u22de',                     #EQUAL TO OR PRECEDES
  697     'curlyeqsucc': u'\u22df',                     #EQUAL TO OR SUCCEEDS
  698     'curlyvee': u'\u22ce',                        #CURLY LOGICAL OR
  699     'curlywedge': u'\u22cf',                      #CURLY LOGICAL AND
  700     'curren': u'\xa4',                            #CURRENCY SIGN
  701     'curvearrowleft': u'\u21b6',                  #ANTICLOCKWISE TOP SEMICIRCLE ARROW
  702     'curvearrowright': u'\u21b7',                 #CLOCKWISE TOP SEMICIRCLE ARROW
  703     'cuvee': u'\u22ce',                           #CURLY LOGICAL OR
  704     'cuwed': u'\u22cf',                           #CURLY LOGICAL AND
  705     'cwconint': u'\u2232',                        #CLOCKWISE CONTOUR INTEGRAL
  706     'cwint': u'\u2231',                           #CLOCKWISE INTEGRAL
  707     'cylcty': u'\u232d',                          #CYLINDRICITY
  708     'Dagger': u'\u2021',                          #DOUBLE DAGGER
  709     'dagger': u'\u2020',                          #DAGGER
  710     'daleth': u'\u2138',                          #DALET SYMBOL
  711     'Darr': u'\u21a1',                            #DOWNWARDS TWO HEADED ARROW
  712     'dArr': u'\u21d3',                            #DOWNWARDS DOUBLE ARROW
  713     'darr': u'\u2193',                            #DOWNWARDS ARROW
  714     'dash': u'\u2010',                            #HYPHEN
  715     'Dashv': u'\u2ae4',                           #VERTICAL BAR DOUBLE LEFT TURNSTILE
  716     'dashv': u'\u22a3',                           #LEFT TACK
  717     'dbkarow': u'\u290f',                         #RIGHTWARDS TRIPLE DASH ARROW
  718     'dblac': u'\u02dd',                           #DOUBLE ACUTE ACCENT
  719     'Dcaron': u'\u010e',                          #LATIN CAPITAL LETTER D WITH CARON
  720     'dcaron': u'\u010f',                          #LATIN SMALL LETTER D WITH CARON
  721     'Dcy': u'\u0414',                             #CYRILLIC CAPITAL LETTER DE
  722     'dcy': u'\u0434',                             #CYRILLIC SMALL LETTER DE
  723     'DD': u'\u2145',                              #DOUBLE-STRUCK ITALIC CAPITAL D
  724     'dd': u'\u2146',                              #DOUBLE-STRUCK ITALIC SMALL D
  725     'ddagger': u'\u2021',                         #DOUBLE DAGGER
  726     'ddarr': u'\u21ca',                           #DOWNWARDS PAIRED ARROWS
  727     'DDotrahd': u'\u2911',                        #RIGHTWARDS ARROW WITH DOTTED STEM
  728     'ddotseq': u'\u2a77',                         #EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
  729     'deg': u'\xb0',                               #DEGREE SIGN
  730     'Del': u'\u2207',                             #NABLA
  731     'Delta': u'\u0394',                           #GREEK CAPITAL LETTER DELTA
  732     'delta': u'\u03b4',                           #GREEK SMALL LETTER DELTA
  733     'demptyv': u'\u29b1',                         #EMPTY SET WITH OVERBAR
  734     'dfisht': u'\u297f',                          #DOWN FISH TAIL
  735     'Dfr': u'\U0001d507',                         #MATHEMATICAL FRAKTUR CAPITAL D
  736     'dfr': u'\U0001d521',                         #MATHEMATICAL FRAKTUR SMALL D
  737     'dHar': u'\u2965',                            #DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
  738     'dharl': u'\u21c3',                           #DOWNWARDS HARPOON WITH BARB LEFTWARDS
  739     'dharr': u'\u21c2',                           #DOWNWARDS HARPOON WITH BARB RIGHTWARDS
  740     'DiacriticalAcute': u'\xb4',                  #ACUTE ACCENT
  741     'DiacriticalDot': u'\u02d9',                  #DOT ABOVE
  742     'DiacriticalDoubleAcute': u'\u02dd',          #DOUBLE ACUTE ACCENT
  743     'DiacriticalGrave': u'`',                     #GRAVE ACCENT
  744     'DiacriticalTilde': u'\u02dc',                #SMALL TILDE
  745     'diam': u'\u22c4',                            #DIAMOND OPERATOR
  746     'Diamond': u'\u22c4',                         #DIAMOND OPERATOR
  747     'diamond': u'\u22c4',                         #DIAMOND OPERATOR
  748     'diamondsuit': u'\u2666',                     #BLACK DIAMOND SUIT
  749     'diams': u'\u2666',                           #BLACK DIAMOND SUIT
  750     'die': u'\xa8',                               #DIAERESIS
  751     'DifferentialD': u'\u2146',                   #DOUBLE-STRUCK ITALIC SMALL D
  752     'digamma': u'\u03dd',                         #GREEK SMALL LETTER DIGAMMA
  753     'disin': u'\u22f2',                           #ELEMENT OF WITH LONG HORIZONTAL STROKE
  754     'div': u'\xf7',                               #DIVISION SIGN
  755     'divide': u'\xf7',                            #DIVISION SIGN
  756     'divideontimes': u'\u22c7',                   #DIVISION TIMES
  757     'divonx': u'\u22c7',                          #DIVISION TIMES
  758     'DJcy': u'\u0402',                            #CYRILLIC CAPITAL LETTER DJE
  759     'djcy': u'\u0452',                            #CYRILLIC SMALL LETTER DJE
  760     'dlcorn': u'\u231e',                          #BOTTOM LEFT CORNER
  761     'dlcrop': u'\u230d',                          #BOTTOM LEFT CROP
  762     'dollar': u'$',                               #DOLLAR SIGN
  763     'Dopf': u'\U0001d53b',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL D
  764     'dopf': u'\U0001d555',                        #MATHEMATICAL DOUBLE-STRUCK SMALL D
  765     'Dot': u'\xa8',                               #DIAERESIS
  766     'dot': u'\u02d9',                             #DOT ABOVE
  767     'doteq': u'\u2250',                           #APPROACHES THE LIMIT
  768     'doteqdot': u'\u2251',                        #GEOMETRICALLY EQUAL TO
  769     'DotEqual': u'\u2250',                        #APPROACHES THE LIMIT
  770     'dotminus': u'\u2238',                        #DOT MINUS
  771     'dotplus': u'\u2214',                         #DOT PLUS
  772     'dotsquare': u'\u22a1',                       #SQUARED DOT OPERATOR
  773     'doublebarwedge': u'\u2306',                  #PERSPECTIVE
  774     'DoubleContourIntegral': u'\u222f',           #SURFACE INTEGRAL
  775     'DoubleDot': u'\xa8',                         #DIAERESIS
  776     'DoubleDownArrow': u'\u21d3',                 #DOWNWARDS DOUBLE ARROW
  777     'DoubleLeftArrow': u'\u21d0',                 #LEFTWARDS DOUBLE ARROW
  778     'DoubleLeftRightArrow': u'\u21d4',            #LEFT RIGHT DOUBLE ARROW
  779     'DoubleLeftTee': u'\u2ae4',                   #VERTICAL BAR DOUBLE LEFT TURNSTILE
  780     'DoubleLongLeftArrow': u'\u27f8',             #LONG LEFTWARDS DOUBLE ARROW
  781     'DoubleLongLeftRightArrow': u'\u27fa',        #LONG LEFT RIGHT DOUBLE ARROW
  782     'DoubleLongRightArrow': u'\u27f9',            #LONG RIGHTWARDS DOUBLE ARROW
  783     'DoubleRightArrow': u'\u21d2',                #RIGHTWARDS DOUBLE ARROW
  784     'DoubleRightTee': u'\u22a8',                  #TRUE
  785     'DoubleUpArrow': u'\u21d1',                   #UPWARDS DOUBLE ARROW
  786     'DoubleUpDownArrow': u'\u21d5',               #UP DOWN DOUBLE ARROW
  787     'DoubleVerticalBar': u'\u2225',               #PARALLEL TO
  788     'DownArrow': u'\u2193',                       #DOWNWARDS ARROW
  789     'Downarrow': u'\u21d3',                       #DOWNWARDS DOUBLE ARROW
  790     'downarrow': u'\u2193',                       #DOWNWARDS ARROW
  791     'DownArrowBar': u'\u2913',                    #DOWNWARDS ARROW TO BAR
  792     'DownArrowUpArrow': u'\u21f5',                #DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
  793     'downdownarrows': u'\u21ca',                  #DOWNWARDS PAIRED ARROWS
  794     'downharpoonleft': u'\u21c3',                 #DOWNWARDS HARPOON WITH BARB LEFTWARDS
  795     'downharpoonright': u'\u21c2',                #DOWNWARDS HARPOON WITH BARB RIGHTWARDS
  796     'DownLeftRightVector': u'\u2950',             #LEFT BARB DOWN RIGHT BARB DOWN HARPOON
  797     'DownLeftTeeVector': u'\u295e',               #LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
  798     'DownLeftVector': u'\u21bd',                  #LEFTWARDS HARPOON WITH BARB DOWNWARDS
  799     'DownLeftVectorBar': u'\u2956',               #LEFTWARDS HARPOON WITH BARB DOWN TO BAR
  800     'DownRightTeeVector': u'\u295f',              #RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
  801     'DownRightVector': u'\u21c1',                 #RIGHTWARDS HARPOON WITH BARB DOWNWARDS
  802     'DownRightVectorBar': u'\u2957',              #RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
  803     'DownTee': u'\u22a4',                         #DOWN TACK
  804     'DownTeeArrow': u'\u21a7',                    #DOWNWARDS ARROW FROM BAR
  805     'drbkarow': u'\u2910',                        #RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
  806     'drcorn': u'\u231f',                          #BOTTOM RIGHT CORNER
  807     'drcrop': u'\u230c',                          #BOTTOM RIGHT CROP
  808     'Dscr': u'\U0001d49f',                        #MATHEMATICAL SCRIPT CAPITAL D
  809     'dscr': u'\U0001d4b9',                        #MATHEMATICAL SCRIPT SMALL D
  810     'DScy': u'\u0405',                            #CYRILLIC CAPITAL LETTER DZE
  811     'dscy': u'\u0455',                            #CYRILLIC SMALL LETTER DZE
  812     'dsol': u'\u29f6',                            #SOLIDUS WITH OVERBAR
  813     'Dstrok': u'\u0110',                          #LATIN CAPITAL LETTER D WITH STROKE
  814     'dstrok': u'\u0111',                          #LATIN SMALL LETTER D WITH STROKE
  815     'dtdot': u'\u22f1',                           #DOWN RIGHT DIAGONAL ELLIPSIS
  816     'dtri': u'\u25bf',                            #WHITE DOWN-POINTING SMALL TRIANGLE
  817     'dtrif': u'\u25be',                           #BLACK DOWN-POINTING SMALL TRIANGLE
  818     'duarr': u'\u21f5',                           #DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
  819     'duhar': u'\u296f',                           #DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
  820     'dwangle': u'\u29a6',                         #OBLIQUE ANGLE OPENING UP
  821     'DZcy': u'\u040f',                            #CYRILLIC CAPITAL LETTER DZHE
  822     'dzcy': u'\u045f',                            #CYRILLIC SMALL LETTER DZHE
  823     'dzigrarr': u'\u27ff',                        #LONG RIGHTWARDS SQUIGGLE ARROW
  824     'Eacute': u'\xc9',                            #LATIN CAPITAL LETTER E WITH ACUTE
  825     'eacute': u'\xe9',                            #LATIN SMALL LETTER E WITH ACUTE
  826     'easter': u'\u2a6e',                          #EQUALS WITH ASTERISK
  827     'Ecaron': u'\u011a',                          #LATIN CAPITAL LETTER E WITH CARON
  828     'ecaron': u'\u011b',                          #LATIN SMALL LETTER E WITH CARON
  829     'ecir': u'\u2256',                            #RING IN EQUAL TO
  830     'Ecirc': u'\xca',                             #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  831     'ecirc': u'\xea',                             #LATIN SMALL LETTER E WITH CIRCUMFLEX
  832     'ecolon': u'\u2255',                          #EQUALS COLON
  833     'Ecy': u'\u042d',                             #CYRILLIC CAPITAL LETTER E
  834     'ecy': u'\u044d',                             #CYRILLIC SMALL LETTER E
  835     'eDDot': u'\u2a77',                           #EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
  836     'Edot': u'\u0116',                            #LATIN CAPITAL LETTER E WITH DOT ABOVE
  837     'eDot': u'\u2251',                            #GEOMETRICALLY EQUAL TO
  838     'edot': u'\u0117',                            #LATIN SMALL LETTER E WITH DOT ABOVE
  839     'ee': u'\u2147',                              #DOUBLE-STRUCK ITALIC SMALL E
  840     'efDot': u'\u2252',                           #APPROXIMATELY EQUAL TO OR THE IMAGE OF
  841     'Efr': u'\U0001d508',                         #MATHEMATICAL FRAKTUR CAPITAL E
  842     'efr': u'\U0001d522',                         #MATHEMATICAL FRAKTUR SMALL E
  843     'eg': u'\u2a9a',                              #DOUBLE-LINE EQUAL TO OR GREATER-THAN
  844     'Egrave': u'\xc8',                            #LATIN CAPITAL LETTER E WITH GRAVE
  845     'egrave': u'\xe8',                            #LATIN SMALL LETTER E WITH GRAVE
  846     'egs': u'\u2a96',                             #SLANTED EQUAL TO OR GREATER-THAN
  847     'egsdot': u'\u2a98',                          #SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
  848     'el': u'\u2a99',                              #DOUBLE-LINE EQUAL TO OR LESS-THAN
  849     'Element': u'\u2208',                         #ELEMENT OF
  850     'elinters': u'\u23e7',                        #ELECTRICAL INTERSECTION
  851     'ell': u'\u2113',                             #SCRIPT SMALL L
  852     'els': u'\u2a95',                             #SLANTED EQUAL TO OR LESS-THAN
  853     'elsdot': u'\u2a97',                          #SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
  854     'Emacr': u'\u0112',                           #LATIN CAPITAL LETTER E WITH MACRON
  855     'emacr': u'\u0113',                           #LATIN SMALL LETTER E WITH MACRON
  856     'empty': u'\u2205',                           #EMPTY SET
  857     'emptyset': u'\u2205',                        #EMPTY SET
  858     'EmptySmallSquare': u'\u25fb',                #WHITE MEDIUM SQUARE
  859     'emptyv': u'\u2205',                          #EMPTY SET
  860     'EmptyVerySmallSquare': u'\u25ab',            #WHITE SMALL SQUARE
  861     'emsp': u'\u2003',                            #EM SPACE
  862     'emsp13': u'\u2004',                          #THREE-PER-EM SPACE
  863     'emsp14': u'\u2005',                          #FOUR-PER-EM SPACE
  864     'ENG': u'\u014a',                             #LATIN CAPITAL LETTER ENG
  865     'eng': u'\u014b',                             #LATIN SMALL LETTER ENG
  866     'ensp': u'\u2002',                            #EN SPACE
  867     'Eogon': u'\u0118',                           #LATIN CAPITAL LETTER E WITH OGONEK
  868     'eogon': u'\u0119',                           #LATIN SMALL LETTER E WITH OGONEK
  869     'Eopf': u'\U0001d53c',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL E
  870     'eopf': u'\U0001d556',                        #MATHEMATICAL DOUBLE-STRUCK SMALL E
  871     'epar': u'\u22d5',                            #EQUAL AND PARALLEL TO
  872     'eparsl': u'\u29e3',                          #EQUALS SIGN AND SLANTED PARALLEL
  873     'eplus': u'\u2a71',                           #EQUALS SIGN ABOVE PLUS SIGN
  874     'epsi': u'\u03b5',                            #GREEK SMALL LETTER EPSILON
  875     'Epsilon': u'\u0395',                         #GREEK CAPITAL LETTER EPSILON
  876     'epsilon': u'\u03b5',                         #GREEK SMALL LETTER EPSILON
  877     'epsiv': u'\u03f5',                           #GREEK LUNATE EPSILON SYMBOL
  878     'eqcirc': u'\u2256',                          #RING IN EQUAL TO
  879     'eqcolon': u'\u2255',                         #EQUALS COLON
  880     'eqsim': u'\u2242',                           #MINUS TILDE
  881     'eqslantgtr': u'\u2a96',                      #SLANTED EQUAL TO OR GREATER-THAN
  882     'eqslantless': u'\u2a95',                     #SLANTED EQUAL TO OR LESS-THAN
  883     'Equal': u'\u2a75',                           #TWO CONSECUTIVE EQUALS SIGNS
  884     'equals': u'=',                               #EQUALS SIGN
  885     'EqualTilde': u'\u2242',                      #MINUS TILDE
  886     'equest': u'\u225f',                          #QUESTIONED EQUAL TO
  887     'Equilibrium': u'\u21cc',                     #RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
  888     'equiv': u'\u2261',                           #IDENTICAL TO
  889     'equivDD': u'\u2a78',                         #EQUIVALENT WITH FOUR DOTS ABOVE
  890     'eqvparsl': u'\u29e5',                        #IDENTICAL TO AND SLANTED PARALLEL
  891     'erarr': u'\u2971',                           #EQUALS SIGN ABOVE RIGHTWARDS ARROW
  892     'erDot': u'\u2253',                           #IMAGE OF OR APPROXIMATELY EQUAL TO
  893     'Escr': u'\u2130',                            #SCRIPT CAPITAL E
  894     'escr': u'\u212f',                            #SCRIPT SMALL E
  895     'esdot': u'\u2250',                           #APPROACHES THE LIMIT
  896     'Esim': u'\u2a73',                            #EQUALS SIGN ABOVE TILDE OPERATOR
  897     'esim': u'\u2242',                            #MINUS TILDE
  898     'Eta': u'\u0397',                             #GREEK CAPITAL LETTER ETA
  899     'eta': u'\u03b7',                             #GREEK SMALL LETTER ETA
  900     'ETH': u'\xd0',                               #LATIN CAPITAL LETTER ETH
  901     'eth': u'\xf0',                               #LATIN SMALL LETTER ETH
  902     'Euml': u'\xcb',                              #LATIN CAPITAL LETTER E WITH DIAERESIS
  903     'euml': u'\xeb',                              #LATIN SMALL LETTER E WITH DIAERESIS
  904     'euro': u'\u20ac',                            #EURO SIGN
  905     'excl': u'!',                                 #EXCLAMATION MARK
  906     'exist': u'\u2203',                           #THERE EXISTS
  907     'Exists': u'\u2203',                          #THERE EXISTS
  908     'expectation': u'\u2130',                     #SCRIPT CAPITAL E
  909     'ExponentialE': u'\u2147',                    #DOUBLE-STRUCK ITALIC SMALL E
  910     'exponentiale': u'\u2147',                    #DOUBLE-STRUCK ITALIC SMALL E
  911     'fallingdotseq': u'\u2252',                   #APPROXIMATELY EQUAL TO OR THE IMAGE OF
  912     'Fcy': u'\u0424',                             #CYRILLIC CAPITAL LETTER EF
  913     'fcy': u'\u0444',                             #CYRILLIC SMALL LETTER EF
  914     'female': u'\u2640',                          #FEMALE SIGN
  915     'ffilig': u'\ufb03',                          #LATIN SMALL LIGATURE FFI
  916     'fflig': u'\ufb00',                           #LATIN SMALL LIGATURE FF
  917     'ffllig': u'\ufb04',                          #LATIN SMALL LIGATURE FFL
  918     'Ffr': u'\U0001d509',                         #MATHEMATICAL FRAKTUR CAPITAL F
  919     'ffr': u'\U0001d523',                         #MATHEMATICAL FRAKTUR SMALL F
  920     'filig': u'\ufb01',                           #LATIN SMALL LIGATURE FI
  921     'FilledSmallSquare': u'\u25fc',               #BLACK MEDIUM SQUARE
  922     'FilledVerySmallSquare': u'\u25aa',           #BLACK SMALL SQUARE
  923     'fjlig': u'fj',                               #fj ligature
  924     'flat': u'\u266d',                            #MUSIC FLAT SIGN
  925     'fllig': u'\ufb02',                           #LATIN SMALL LIGATURE FL
  926     'fltns': u'\u25b1',                           #WHITE PARALLELOGRAM
  927     'fnof': u'\u0192',                            #LATIN SMALL LETTER F WITH HOOK
  928     'Fopf': u'\U0001d53d',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL F
  929     'fopf': u'\U0001d557',                        #MATHEMATICAL DOUBLE-STRUCK SMALL F
  930     'ForAll': u'\u2200',                          #FOR ALL
  931     'forall': u'\u2200',                          #FOR ALL
  932     'fork': u'\u22d4',                            #PITCHFORK
  933     'forkv': u'\u2ad9',                           #ELEMENT OF OPENING DOWNWARDS
  934     'Fouriertrf': u'\u2131',                      #SCRIPT CAPITAL F
  935     'fpartint': u'\u2a0d',                        #FINITE PART INTEGRAL
  936     'frac12': u'\xbd',                            #VULGAR FRACTION ONE HALF
  937     'frac13': u'\u2153',                          #VULGAR FRACTION ONE THIRD
  938     'frac14': u'\xbc',                            #VULGAR FRACTION ONE QUARTER
  939     'frac15': u'\u2155',                          #VULGAR FRACTION ONE FIFTH
  940     'frac16': u'\u2159',                          #VULGAR FRACTION ONE SIXTH
  941     'frac18': u'\u215b',                          #VULGAR FRACTION ONE EIGHTH
  942     'frac23': u'\u2154',                          #VULGAR FRACTION TWO THIRDS
  943     'frac25': u'\u2156',                          #VULGAR FRACTION TWO FIFTHS
  944     'frac34': u'\xbe',                            #VULGAR FRACTION THREE QUARTERS
  945     'frac35': u'\u2157',                          #VULGAR FRACTION THREE FIFTHS
  946     'frac38': u'\u215c',                          #VULGAR FRACTION THREE EIGHTHS
  947     'frac45': u'\u2158',                          #VULGAR FRACTION FOUR FIFTHS
  948     'frac56': u'\u215a',                          #VULGAR FRACTION FIVE SIXTHS
  949     'frac58': u'\u215d',                          #VULGAR FRACTION FIVE EIGHTHS
  950     'frac78': u'\u215e',                          #VULGAR FRACTION SEVEN EIGHTHS
  951     'frasl': u'\u2044',                           #FRACTION SLASH
  952     'frown': u'\u2322',                           #FROWN
  953     'Fscr': u'\u2131',                            #SCRIPT CAPITAL F
  954     'fscr': u'\U0001d4bb',                        #MATHEMATICAL SCRIPT SMALL F
  955     'gacute': u'\u01f5',                          #LATIN SMALL LETTER G WITH ACUTE
  956     'Gamma': u'\u0393',                           #GREEK CAPITAL LETTER GAMMA
  957     'gamma': u'\u03b3',                           #GREEK SMALL LETTER GAMMA
  958     'Gammad': u'\u03dc',                          #GREEK LETTER DIGAMMA
  959     'gammad': u'\u03dd',                          #GREEK SMALL LETTER DIGAMMA
  960     'gap': u'\u2a86',                             #GREATER-THAN OR APPROXIMATE
  961     'Gbreve': u'\u011e',                          #LATIN CAPITAL LETTER G WITH BREVE
  962     'gbreve': u'\u011f',                          #LATIN SMALL LETTER G WITH BREVE
  963     'Gcedil': u'\u0122',                          #LATIN CAPITAL LETTER G WITH CEDILLA
  964     'Gcirc': u'\u011c',                           #LATIN CAPITAL LETTER G WITH CIRCUMFLEX
  965     'gcirc': u'\u011d',                           #LATIN SMALL LETTER G WITH CIRCUMFLEX
  966     'Gcy': u'\u0413',                             #CYRILLIC CAPITAL LETTER GHE
  967     'gcy': u'\u0433',                             #CYRILLIC SMALL LETTER GHE
  968     'Gdot': u'\u0120',                            #LATIN CAPITAL LETTER G WITH DOT ABOVE
  969     'gdot': u'\u0121',                            #LATIN SMALL LETTER G WITH DOT ABOVE
  970     'gE': u'\u2267',                              #GREATER-THAN OVER EQUAL TO
  971     'ge': u'\u2265',                              #GREATER-THAN OR EQUAL TO
  972     'gEl': u'\u2a8c',                             #GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
  973     'gel': u'\u22db',                             #GREATER-THAN EQUAL TO OR LESS-THAN
  974     'geq': u'\u2265',                             #GREATER-THAN OR EQUAL TO
  975     'geqq': u'\u2267',                            #GREATER-THAN OVER EQUAL TO
  976     'geqslant': u'\u2a7e',                        #GREATER-THAN OR SLANTED EQUAL TO
  977     'ges': u'\u2a7e',                             #GREATER-THAN OR SLANTED EQUAL TO
  978     'gescc': u'\u2aa9',                           #GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
  979     'gesdot': u'\u2a80',                          #GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
  980     'gesdoto': u'\u2a82',                         #GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
  981     'gesdotol': u'\u2a84',                        #GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
  982     'gesl': u'\u22db\ufe00',                      #GREATER-THAN slanted EQUAL TO OR LESS-THAN
  983     'gesles': u'\u2a94',                          #GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
  984     'Gfr': u'\U0001d50a',                         #MATHEMATICAL FRAKTUR CAPITAL G
  985     'gfr': u'\U0001d524',                         #MATHEMATICAL FRAKTUR SMALL G
  986     'Gg': u'\u22d9',                              #VERY MUCH GREATER-THAN
  987     'gg': u'\u226b',                              #MUCH GREATER-THAN
  988     'ggg': u'\u22d9',                             #VERY MUCH GREATER-THAN
  989     'gimel': u'\u2137',                           #GIMEL SYMBOL
  990     'GJcy': u'\u0403',                            #CYRILLIC CAPITAL LETTER GJE
  991     'gjcy': u'\u0453',                            #CYRILLIC SMALL LETTER GJE
  992     'gl': u'\u2277',                              #GREATER-THAN OR LESS-THAN
  993     'gla': u'\u2aa5',                             #GREATER-THAN BESIDE LESS-THAN
  994     'glE': u'\u2a92',                             #GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
  995     'glj': u'\u2aa4',                             #GREATER-THAN OVERLAPPING LESS-THAN
  996     'gnap': u'\u2a8a',                            #GREATER-THAN AND NOT APPROXIMATE
  997     'gnapprox': u'\u2a8a',                        #GREATER-THAN AND NOT APPROXIMATE
  998     'gnE': u'\u2269',                             #GREATER-THAN BUT NOT EQUAL TO
  999     'gne': u'\u2a88',                             #GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
 1000     'gneq': u'\u2a88',                            #GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
 1001     'gneqq': u'\u2269',                           #GREATER-THAN BUT NOT EQUAL TO
 1002     'gnsim': u'\u22e7',                           #GREATER-THAN BUT NOT EQUIVALENT TO
 1003     'Gopf': u'\U0001d53e',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL G
 1004     'gopf': u'\U0001d558',                        #MATHEMATICAL DOUBLE-STRUCK SMALL G
 1005     'grave': u'`',                                #GRAVE ACCENT
 1006     'GreaterEqual': u'\u2265',                    #GREATER-THAN OR EQUAL TO
 1007     'GreaterEqualLess': u'\u22db',                #GREATER-THAN EQUAL TO OR LESS-THAN
 1008     'GreaterFullEqual': u'\u2267',                #GREATER-THAN OVER EQUAL TO
 1009     'GreaterGreater': u'\u2aa2',                  #DOUBLE NESTED GREATER-THAN
 1010     'GreaterLess': u'\u2277',                     #GREATER-THAN OR LESS-THAN
 1011     'GreaterSlantEqual': u'\u2a7e',               #GREATER-THAN OR SLANTED EQUAL TO
 1012     'GreaterTilde': u'\u2273',                    #GREATER-THAN OR EQUIVALENT TO
 1013     'Gscr': u'\U0001d4a2',                        #MATHEMATICAL SCRIPT CAPITAL G
 1014     'gscr': u'\u210a',                            #SCRIPT SMALL G
 1015     'gsim': u'\u2273',                            #GREATER-THAN OR EQUIVALENT TO
 1016     'gsime': u'\u2a8e',                           #GREATER-THAN ABOVE SIMILAR OR EQUAL
 1017     'gsiml': u'\u2a90',                           #GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
 1018     'GT': u'>',                                   #GREATER-THAN SIGN
 1019     'Gt': u'\u226b',                              #MUCH GREATER-THAN
 1020     'gt': u'>',                                   #GREATER-THAN SIGN
 1021     'gtcc': u'\u2aa7',                            #GREATER-THAN CLOSED BY CURVE
 1022     'gtcir': u'\u2a7a',                           #GREATER-THAN WITH CIRCLE INSIDE
 1023     'gtdot': u'\u22d7',                           #GREATER-THAN WITH DOT
 1024     'gtlPar': u'\u2995',                          #DOUBLE LEFT ARC GREATER-THAN BRACKET
 1025     'gtquest': u'\u2a7c',                         #GREATER-THAN WITH QUESTION MARK ABOVE
 1026     'gtrapprox': u'\u2a86',                       #GREATER-THAN OR APPROXIMATE
 1027     'gtrarr': u'\u2978',                          #GREATER-THAN ABOVE RIGHTWARDS ARROW
 1028     'gtrdot': u'\u22d7',                          #GREATER-THAN WITH DOT
 1029     'gtreqless': u'\u22db',                       #GREATER-THAN EQUAL TO OR LESS-THAN
 1030     'gtreqqless': u'\u2a8c',                      #GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
 1031     'gtrless': u'\u2277',                         #GREATER-THAN OR LESS-THAN
 1032     'gtrsim': u'\u2273',                          #GREATER-THAN OR EQUIVALENT TO
 1033     'gvertneqq': u'\u2269\ufe00',                 #GREATER-THAN BUT NOT EQUAL TO - with vertical stroke
 1034     'gvnE': u'\u2269\ufe00',                      #GREATER-THAN BUT NOT EQUAL TO - with vertical stroke
 1035     'Hacek': u'\u02c7',                           #CARON
 1036     'hairsp': u'\u200a',                          #HAIR SPACE
 1037     'half': u'\xbd',                              #VULGAR FRACTION ONE HALF
 1038     'hamilt': u'\u210b',                          #SCRIPT CAPITAL H
 1039     'HARDcy': u'\u042a',                          #CYRILLIC CAPITAL LETTER HARD SIGN
 1040     'hardcy': u'\u044a',                          #CYRILLIC SMALL LETTER HARD SIGN
 1041     'hArr': u'\u21d4',                            #LEFT RIGHT DOUBLE ARROW
 1042     'harr': u'\u2194',                            #LEFT RIGHT ARROW
 1043     'harrcir': u'\u2948',                         #LEFT RIGHT ARROW THROUGH SMALL CIRCLE
 1044     'harrw': u'\u21ad',                           #LEFT RIGHT WAVE ARROW
 1045     'Hat': u'^',                                  #CIRCUMFLEX ACCENT
 1046     'hbar': u'\u210f',                            #PLANCK CONSTANT OVER TWO PI
 1047     'Hcirc': u'\u0124',                           #LATIN CAPITAL LETTER H WITH CIRCUMFLEX
 1048     'hcirc': u'\u0125',                           #LATIN SMALL LETTER H WITH CIRCUMFLEX
 1049     'hearts': u'\u2665',                          #BLACK HEART SUIT
 1050     'heartsuit': u'\u2665',                       #BLACK HEART SUIT
 1051     'hellip': u'\u2026',                          #HORIZONTAL ELLIPSIS
 1052     'hercon': u'\u22b9',                          #HERMITIAN CONJUGATE MATRIX
 1053     'Hfr': u'\u210c',                             #BLACK-LETTER CAPITAL H
 1054     'hfr': u'\U0001d525',                         #MATHEMATICAL FRAKTUR SMALL H
 1055     'HilbertSpace': u'\u210b',                    #SCRIPT CAPITAL H
 1056     'hksearow': u'\u2925',                        #SOUTH EAST ARROW WITH HOOK
 1057     'hkswarow': u'\u2926',                        #SOUTH WEST ARROW WITH HOOK
 1058     'hoarr': u'\u21ff',                           #LEFT RIGHT OPEN-HEADED ARROW
 1059     'homtht': u'\u223b',                          #HOMOTHETIC
 1060     'hookleftarrow': u'\u21a9',                   #LEFTWARDS ARROW WITH HOOK
 1061     'hookrightarrow': u'\u21aa',                  #RIGHTWARDS ARROW WITH HOOK
 1062     'Hopf': u'\u210d',                            #DOUBLE-STRUCK CAPITAL H
 1063     'hopf': u'\U0001d559',                        #MATHEMATICAL DOUBLE-STRUCK SMALL H
 1064     'horbar': u'\u2015',                          #HORIZONTAL BAR
 1065     'HorizontalLine': u'\u2500',                  #BOX DRAWINGS LIGHT HORIZONTAL
 1066     'Hscr': u'\u210b',                            #SCRIPT CAPITAL H
 1067     'hscr': u'\U0001d4bd',                        #MATHEMATICAL SCRIPT SMALL H
 1068     'hslash': u'\u210f',                          #PLANCK CONSTANT OVER TWO PI
 1069     'Hstrok': u'\u0126',                          #LATIN CAPITAL LETTER H WITH STROKE
 1070     'hstrok': u'\u0127',                          #LATIN SMALL LETTER H WITH STROKE
 1071     'HumpDownHump': u'\u224e',                    #GEOMETRICALLY EQUIVALENT TO
 1072     'HumpEqual': u'\u224f',                       #DIFFERENCE BETWEEN
 1073     'hybull': u'\u2043',                          #HYPHEN BULLET
 1074     'hyphen': u'\u2010',                          #HYPHEN
 1075     'Iacute': u'\xcd',                            #LATIN CAPITAL LETTER I WITH ACUTE
 1076     'iacute': u'\xed',                            #LATIN SMALL LETTER I WITH ACUTE
 1077     'ic': u'\u2063',                              #INVISIBLE SEPARATOR
 1078     'Icirc': u'\xce',                             #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
 1079     'icirc': u'\xee',                             #LATIN SMALL LETTER I WITH CIRCUMFLEX
 1080     'Icy': u'\u0418',                             #CYRILLIC CAPITAL LETTER I
 1081     'icy': u'\u0438',                             #CYRILLIC SMALL LETTER I
 1082     'Idot': u'\u0130',                            #LATIN CAPITAL LETTER I WITH DOT ABOVE
 1083     'IEcy': u'\u0415',                            #CYRILLIC CAPITAL LETTER IE
 1084     'iecy': u'\u0435',                            #CYRILLIC SMALL LETTER IE
 1085     'iexcl': u'\xa1',                             #INVERTED EXCLAMATION MARK
 1086     'iff': u'\u21d4',                             #LEFT RIGHT DOUBLE ARROW
 1087     'Ifr': u'\u2111',                             #BLACK-LETTER CAPITAL I
 1088     'ifr': u'\U0001d526',                         #MATHEMATICAL FRAKTUR SMALL I
 1089     'Igrave': u'\xcc',                            #LATIN CAPITAL LETTER I WITH GRAVE
 1090     'igrave': u'\xec',                            #LATIN SMALL LETTER I WITH GRAVE
 1091     'ii': u'\u2148',                              #DOUBLE-STRUCK ITALIC SMALL I
 1092     'iiiint': u'\u2a0c',                          #QUADRUPLE INTEGRAL OPERATOR
 1093     'iiint': u'\u222d',                           #TRIPLE INTEGRAL
 1094     'iinfin': u'\u29dc',                          #INCOMPLETE INFINITY
 1095     'iiota': u'\u2129',                           #TURNED GREEK SMALL LETTER IOTA
 1096     'IJlig': u'\u0132',                           #LATIN CAPITAL LIGATURE IJ
 1097     'ijlig': u'\u0133',                           #LATIN SMALL LIGATURE IJ
 1098     'Im': u'\u2111',                              #BLACK-LETTER CAPITAL I
 1099     'Imacr': u'\u012a',                           #LATIN CAPITAL LETTER I WITH MACRON
 1100     'imacr': u'\u012b',                           #LATIN SMALL LETTER I WITH MACRON
 1101     'image': u'\u2111',                           #BLACK-LETTER CAPITAL I
 1102     'ImaginaryI': u'\u2148',                      #DOUBLE-STRUCK ITALIC SMALL I
 1103     'imagline': u'\u2110',                        #SCRIPT CAPITAL I
 1104     'imagpart': u'\u2111',                        #BLACK-LETTER CAPITAL I
 1105     'imath': u'\u0131',                           #LATIN SMALL LETTER DOTLESS I
 1106     'imof': u'\u22b7',                            #IMAGE OF
 1107     'imped': u'\u01b5',                           #LATIN CAPITAL LETTER Z WITH STROKE
 1108     'Implies': u'\u21d2',                         #RIGHTWARDS DOUBLE ARROW
 1109     'in': u'\u2208',                              #ELEMENT OF
 1110     'incare': u'\u2105',                          #CARE OF
 1111     'infin': u'\u221e',                           #INFINITY
 1112     'infintie': u'\u29dd',                        #TIE OVER INFINITY
 1113     'inodot': u'\u0131',                          #LATIN SMALL LETTER DOTLESS I
 1114     'Int': u'\u222c',                             #DOUBLE INTEGRAL
 1115     'int': u'\u222b',                             #INTEGRAL
 1116     'intcal': u'\u22ba',                          #INTERCALATE
 1117     'integers': u'\u2124',                        #DOUBLE-STRUCK CAPITAL Z
 1118     'Integral': u'\u222b',                        #INTEGRAL
 1119     'intercal': u'\u22ba',                        #INTERCALATE
 1120     'Intersection': u'\u22c2',                    #N-ARY INTERSECTION
 1121     'intlarhk': u'\u2a17',                        #INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
 1122     'intprod': u'\u2a3c',                         #INTERIOR PRODUCT
 1123     'InvisibleComma': u'\u2063',                  #INVISIBLE SEPARATOR
 1124     'InvisibleTimes': u'\u2062',                  #INVISIBLE TIMES
 1125     'IOcy': u'\u0401',                            #CYRILLIC CAPITAL LETTER IO
 1126     'iocy': u'\u0451',                            #CYRILLIC SMALL LETTER IO
 1127     'Iogon': u'\u012e',                           #LATIN CAPITAL LETTER I WITH OGONEK
 1128     'iogon': u'\u012f',                           #LATIN SMALL LETTER I WITH OGONEK
 1129     'Iopf': u'\U0001d540',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL I
 1130     'iopf': u'\U0001d55a',                        #MATHEMATICAL DOUBLE-STRUCK SMALL I
 1131     'Iota': u'\u0399',                            #GREEK CAPITAL LETTER IOTA
 1132     'iota': u'\u03b9',                            #GREEK SMALL LETTER IOTA
 1133     'iprod': u'\u2a3c',                           #INTERIOR PRODUCT
 1134     'iquest': u'\xbf',                            #INVERTED QUESTION MARK
 1135     'Iscr': u'\u2110',                            #SCRIPT CAPITAL I
 1136     'iscr': u'\U0001d4be',                        #MATHEMATICAL SCRIPT SMALL I
 1137     'isin': u'\u2208',                            #ELEMENT OF
 1138     'isindot': u'\u22f5',                         #ELEMENT OF WITH DOT ABOVE
 1139     'isinE': u'\u22f9',                           #ELEMENT OF WITH TWO HORIZONTAL STROKES
 1140     'isins': u'\u22f4',                           #SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
 1141     'isinsv': u'\u22f3',                          #ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
 1142     'isinv': u'\u2208',                           #ELEMENT OF
 1143     'it': u'\u2062',                              #INVISIBLE TIMES
 1144     'Itilde': u'\u0128',                          #LATIN CAPITAL LETTER I WITH TILDE
 1145     'itilde': u'\u0129',                          #LATIN SMALL LETTER I WITH TILDE
 1146     'Iukcy': u'\u0406',                           #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
 1147     'iukcy': u'\u0456',                           #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
 1148     'Iuml': u'\xcf',                              #LATIN CAPITAL LETTER I WITH DIAERESIS
 1149     'iuml': u'\xef',                              #LATIN SMALL LETTER I WITH DIAERESIS
 1150     'Jcirc': u'\u0134',                           #LATIN CAPITAL LETTER J WITH CIRCUMFLEX
 1151     'jcirc': u'\u0135',                           #LATIN SMALL LETTER J WITH CIRCUMFLEX
 1152     'Jcy': u'\u0419',                             #CYRILLIC CAPITAL LETTER SHORT I
 1153     'jcy': u'\u0439',                             #CYRILLIC SMALL LETTER SHORT I
 1154     'Jfr': u'\U0001d50d',                         #MATHEMATICAL FRAKTUR CAPITAL J
 1155     'jfr': u'\U0001d527',                         #MATHEMATICAL FRAKTUR SMALL J
 1156     'jmath': u'\u0237',                           #LATIN SMALL LETTER DOTLESS J
 1157     'Jopf': u'\U0001d541',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL J
 1158     'jopf': u'\U0001d55b',                        #MATHEMATICAL DOUBLE-STRUCK SMALL J
 1159     'Jscr': u'\U0001d4a5',                        #MATHEMATICAL SCRIPT CAPITAL J
 1160     'jscr': u'\U0001d4bf',                        #MATHEMATICAL SCRIPT SMALL J
 1161     'Jsercy': u'\u0408',                          #CYRILLIC CAPITAL LETTER JE
 1162     'jsercy': u'\u0458',                          #CYRILLIC SMALL LETTER JE
 1163     'Jukcy': u'\u0404',                           #CYRILLIC CAPITAL LETTER UKRAINIAN IE
 1164     'jukcy': u'\u0454',                           #CYRILLIC SMALL LETTER UKRAINIAN IE
 1165     'Kappa': u'\u039a',                           #GREEK CAPITAL LETTER KAPPA
 1166     'kappa': u'\u03ba',                           #GREEK SMALL LETTER KAPPA
 1167     'kappav': u'\u03f0',                          #GREEK KAPPA SYMBOL
 1168     'Kcedil': u'\u0136',                          #LATIN CAPITAL LETTER K WITH CEDILLA
 1169     'kcedil': u'\u0137',                          #LATIN SMALL LETTER K WITH CEDILLA
 1170     'Kcy': u'\u041a',                             #CYRILLIC CAPITAL LETTER KA
 1171     'kcy': u'\u043a',                             #CYRILLIC SMALL LETTER KA
 1172     'Kfr': u'\U0001d50e',                         #MATHEMATICAL FRAKTUR CAPITAL K
 1173     'kfr': u'\U0001d528',                         #MATHEMATICAL FRAKTUR SMALL K
 1174     'kgreen': u'\u0138',                          #LATIN SMALL LETTER KRA
 1175     'KHcy': u'\u0425',                            #CYRILLIC CAPITAL LETTER HA
 1176     'khcy': u'\u0445',                            #CYRILLIC SMALL LETTER HA
 1177     'KJcy': u'\u040c',                            #CYRILLIC CAPITAL LETTER KJE
 1178     'kjcy': u'\u045c',                            #CYRILLIC SMALL LETTER KJE
 1179     'Kopf': u'\U0001d542',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL K
 1180     'kopf': u'\U0001d55c',                        #MATHEMATICAL DOUBLE-STRUCK SMALL K
 1181     'Kscr': u'\U0001d4a6',                        #MATHEMATICAL SCRIPT CAPITAL K
 1182     'kscr': u'\U0001d4c0',                        #MATHEMATICAL SCRIPT SMALL K
 1183     'lAarr': u'\u21da',                           #LEFTWARDS TRIPLE ARROW
 1184     'Lacute': u'\u0139',                          #LATIN CAPITAL LETTER L WITH ACUTE
 1185     'lacute': u'\u013a',                          #LATIN SMALL LETTER L WITH ACUTE
 1186     'laemptyv': u'\u29b4',                        #EMPTY SET WITH LEFT ARROW ABOVE
 1187     'lagran': u'\u2112',                          #SCRIPT CAPITAL L
 1188     'Lambda': u'\u039b',                          #GREEK CAPITAL LETTER LAMDA
 1189     'lambda': u'\u03bb',                          #GREEK SMALL LETTER LAMDA
 1190     'Lang': u'\u27ea',                            #MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
 1191     'lang': u'\u27e8',                            #MATHEMATICAL LEFT ANGLE BRACKET
 1192     'langd': u'\u2991',                           #LEFT ANGLE BRACKET WITH DOT
 1193     'langle': u'\u27e8',                          #MATHEMATICAL LEFT ANGLE BRACKET
 1194     'lap': u'\u2a85',                             #LESS-THAN OR APPROXIMATE
 1195     'Laplacetrf': u'\u2112',                      #SCRIPT CAPITAL L
 1196     'laquo': u'\xab',                             #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
 1197     'Larr': u'\u219e',                            #LEFTWARDS TWO HEADED ARROW
 1198     'lArr': u'\u21d0',                            #LEFTWARDS DOUBLE ARROW
 1199     'larr': u'\u2190',                            #LEFTWARDS ARROW
 1200     'larrb': u'\u21e4',                           #LEFTWARDS ARROW TO BAR
 1201     'larrbfs': u'\u291f',                         #LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
 1202     'larrfs': u'\u291d',                          #LEFTWARDS ARROW TO BLACK DIAMOND
 1203     'larrhk': u'\u21a9',                          #LEFTWARDS ARROW WITH HOOK
 1204     'larrlp': u'\u21ab',                          #LEFTWARDS ARROW WITH LOOP
 1205     'larrpl': u'\u2939',                          #LEFT-SIDE ARC ANTICLOCKWISE ARROW
 1206     'larrsim': u'\u2973',                         #LEFTWARDS ARROW ABOVE TILDE OPERATOR
 1207     'larrtl': u'\u21a2',                          #LEFTWARDS ARROW WITH TAIL
 1208     'lat': u'\u2aab',                             #LARGER THAN
 1209     'lAtail': u'\u291b',                          #LEFTWARDS DOUBLE ARROW-TAIL
 1210     'latail': u'\u2919',                          #LEFTWARDS ARROW-TAIL
 1211     'late': u'\u2aad',                            #LARGER THAN OR EQUAL TO
 1212     'lates': u'\u2aad\ufe00',                     #LARGER THAN OR slanted EQUAL
 1213     'lBarr': u'\u290e',                           #LEFTWARDS TRIPLE DASH ARROW
 1214     'lbarr': u'\u290c',                           #LEFTWARDS DOUBLE DASH ARROW
 1215     'lbbrk': u'\u2772',                           #LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
 1216     'lbrace': u'{',                               #LEFT CURLY BRACKET
 1217     'lbrack': u'[',                               #LEFT SQUARE BRACKET
 1218     'lbrke': u'\u298b',                           #LEFT SQUARE BRACKET WITH UNDERBAR
 1219     'lbrksld': u'\u298f',                         #LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
 1220     'lbrkslu': u'\u298d',                         #LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
 1221     'Lcaron': u'\u013d',                          #LATIN CAPITAL LETTER L WITH CARON
 1222     'lcaron': u'\u013e',                          #LATIN SMALL LETTER L WITH CARON
 1223     'Lcedil': u'\u013b',                          #LATIN CAPITAL LETTER L WITH CEDILLA
 1224     'lcedil': u'\u013c',                          #LATIN SMALL LETTER L WITH CEDILLA
 1225     'lceil': u'\u2308',                           #LEFT CEILING
 1226     'lcub': u'{',                                 #LEFT CURLY BRACKET
 1227     'Lcy': u'\u041b',                             #CYRILLIC CAPITAL LETTER EL
 1228     'lcy': u'\u043b',                             #CYRILLIC SMALL LETTER EL
 1229     'ldca': u'\u2936',                            #ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
 1230     'ldquo': u'\u201c',                           #LEFT DOUBLE QUOTATION MARK
 1231     'ldquor': u'\u201e',                          #DOUBLE LOW-9 QUOTATION MARK
 1232     'ldrdhar': u'\u2967',                         #LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
 1233     'ldrushar': u'\u294b',                        #LEFT BARB DOWN RIGHT BARB UP HARPOON
 1234     'ldsh': u'\u21b2',                            #DOWNWARDS ARROW WITH TIP LEFTWARDS
 1235     'lE': u'\u2266',                              #LESS-THAN OVER EQUAL TO
 1236     'le': u'\u2264',                              #LESS-THAN OR EQUAL TO
 1237     'LeftAngleBracket': u'\u27e8',                #MATHEMATICAL LEFT ANGLE BRACKET
 1238     'LeftArrow': u'\u2190',                       #LEFTWARDS ARROW
 1239     'Leftarrow': u'\u21d0',                       #LEFTWARDS DOUBLE ARROW
 1240     'leftarrow': u'\u2190',                       #LEFTWARDS ARROW
 1241     'LeftArrowBar': u'\u21e4',                    #LEFTWARDS ARROW TO BAR
 1242     'LeftArrowRightArrow': u'\u21c6',             #LEFTWARDS ARROW OVER RIGHTWARDS ARROW
 1243     'leftarrowtail': u'\u21a2',                   #LEFTWARDS ARROW WITH TAIL
 1244     'LeftCeiling': u'\u2308',                     #LEFT CEILING
 1245     'LeftDoubleBracket': u'\u27e6',               #MATHEMATICAL LEFT WHITE SQUARE BRACKET
 1246     'LeftDownTeeVector': u'\u2961',               #DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
 1247     'LeftDownVector': u'\u21c3',                  #DOWNWARDS HARPOON WITH BARB LEFTWARDS
 1248     'LeftDownVectorBar': u'\u2959',               #DOWNWARDS HARPOON WITH BARB LEFT TO BAR
 1249     'LeftFloor': u'\u230a',                       #LEFT FLOOR
 1250     'leftharpoondown': u'\u21bd',                 #LEFTWARDS HARPOON WITH BARB DOWNWARDS
 1251     'leftharpoonup': u'\u21bc',                   #LEFTWARDS HARPOON WITH BARB UPWARDS
 1252     'leftleftarrows': u'\u21c7',                  #LEFTWARDS PAIRED ARROWS
 1253     'LeftRightArrow': u'\u2194',                  #LEFT RIGHT ARROW
 1254     'Leftrightarrow': u'\u21d4',                  #LEFT RIGHT DOUBLE ARROW
 1255     'leftrightarrow': u'\u2194',                  #LEFT RIGHT ARROW
 1256     'leftrightarrows': u'\u21c6',                 #LEFTWARDS ARROW OVER RIGHTWARDS ARROW
 1257     'leftrightharpoons': u'\u21cb',               #LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
 1258     'leftrightsquigarrow': u'\u21ad',             #LEFT RIGHT WAVE ARROW
 1259     'LeftRightVector': u'\u294e',                 #LEFT BARB UP RIGHT BARB UP HARPOON
 1260     'LeftTee': u'\u22a3',                         #LEFT TACK
 1261     'LeftTeeArrow': u'\u21a4',                    #LEFTWARDS ARROW FROM BAR
 1262     'LeftTeeVector': u'\u295a',                   #LEFTWARDS HARPOON WITH BARB UP FROM BAR
 1263     'leftthreetimes': u'\u22cb',                  #LEFT SEMIDIRECT PRODUCT
 1264     'LeftTriangle': u'\u22b2',                    #NORMAL SUBGROUP OF
 1265     'LeftTriangleBar': u'\u29cf',                 #LEFT TRIANGLE BESIDE VERTICAL BAR
 1266     'LeftTriangleEqual': u'\u22b4',               #NORMAL SUBGROUP OF OR EQUAL TO
 1267     'LeftUpDownVector': u'\u2951',                #UP BARB LEFT DOWN BARB LEFT HARPOON
 1268     'LeftUpTeeVector': u'\u2960',                 #UPWARDS HARPOON WITH BARB LEFT FROM BAR
 1269     'LeftUpVector': u'\u21bf',                    #UPWARDS HARPOON WITH BARB LEFTWARDS
 1270     'LeftUpVectorBar': u'\u2958',                 #UPWARDS HARPOON WITH BARB LEFT TO BAR
 1271     'LeftVector': u'\u21bc',                      #LEFTWARDS HARPOON WITH BARB UPWARDS
 1272     'LeftVectorBar': u'\u2952',                   #LEFTWARDS HARPOON WITH BARB UP TO BAR
 1273     'lEg': u'\u2a8b',                             #LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
 1274     'leg': u'\u22da',                             #LESS-THAN EQUAL TO OR GREATER-THAN
 1275     'leq': u'\u2264',                             #LESS-THAN OR EQUAL TO
 1276     'leqq': u'\u2266',                            #LESS-THAN OVER EQUAL TO
 1277     'leqslant': u'\u2a7d',                        #LESS-THAN OR SLANTED EQUAL TO
 1278     'les': u'\u2a7d',                             #LESS-THAN OR SLANTED EQUAL TO
 1279     'lescc': u'\u2aa8',                           #LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
 1280     'lesdot': u'\u2a7f',                          #LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
 1281     'lesdoto': u'\u2a81',                         #LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
 1282     'lesdotor': u'\u2a83',                        #LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
 1283     'lesg': u'\u22da\ufe00',                      #LESS-THAN slanted EQUAL TO OR GREATER-THAN
 1284     'lesges': u'\u2a93',                          #LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
 1285     'lessapprox': u'\u2a85',                      #LESS-THAN OR APPROXIMATE
 1286     'lessdot': u'\u22d6',                         #LESS-THAN WITH DOT
 1287     'lesseqgtr': u'\u22da',                       #LESS-THAN EQUAL TO OR GREATER-THAN
 1288     'lesseqqgtr': u'\u2a8b',                      #LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
 1289     'LessEqualGreater': u'\u22da',                #LESS-THAN EQUAL TO OR GREATER-THAN
 1290     'LessFullEqual': u'\u2266',                   #LESS-THAN OVER EQUAL TO
 1291     'LessGreater': u'\u2276',                     #LESS-THAN OR GREATER-THAN
 1292     'lessgtr': u'\u2276',                         #LESS-THAN OR GREATER-THAN
 1293     'LessLess': u'\u2aa1',                        #DOUBLE NESTED LESS-THAN
 1294     'lesssim': u'\u2272',                         #LESS-THAN OR EQUIVALENT TO
 1295     'LessSlantEqual': u'\u2a7d',                  #LESS-THAN OR SLANTED EQUAL TO
 1296     'LessTilde': u'\u2272',                       #LESS-THAN OR EQUIVALENT TO
 1297     'lfisht': u'\u297c',                          #LEFT FISH TAIL
 1298     'lfloor': u'\u230a',                          #LEFT FLOOR
 1299     'Lfr': u'\U0001d50f',                         #MATHEMATICAL FRAKTUR CAPITAL L
 1300     'lfr': u'\U0001d529',                         #MATHEMATICAL FRAKTUR SMALL L
 1301     'lg': u'\u2276',                              #LESS-THAN OR GREATER-THAN
 1302     'lgE': u'\u2a91',                             #LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
 1303     'lHar': u'\u2962',                            #LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
 1304     'lhard': u'\u21bd',                           #LEFTWARDS HARPOON WITH BARB DOWNWARDS
 1305     'lharu': u'\u21bc',                           #LEFTWARDS HARPOON WITH BARB UPWARDS
 1306     'lharul': u'\u296a',                          #LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
 1307     'lhblk': u'\u2584',                           #LOWER HALF BLOCK
 1308     'LJcy': u'\u0409',                            #CYRILLIC CAPITAL LETTER LJE
 1309     'ljcy': u'\u0459',                            #CYRILLIC SMALL LETTER LJE
 1310     'Ll': u'\u22d8',                              #VERY MUCH LESS-THAN
 1311     'll': u'\u226a',                              #MUCH LESS-THAN
 1312     'llarr': u'\u21c7',                           #LEFTWARDS PAIRED ARROWS
 1313     'llcorner': u'\u231e',                        #BOTTOM LEFT CORNER
 1314     'Lleftarrow': u'\u21da',                      #LEFTWARDS TRIPLE ARROW
 1315     'llhard': u'\u296b',                          #LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
 1316     'lltri': u'\u25fa',                           #LOWER LEFT TRIANGLE
 1317     'Lmidot': u'\u013f',                          #LATIN CAPITAL LETTER L WITH MIDDLE DOT
 1318     'lmidot': u'\u0140',                          #LATIN SMALL LETTER L WITH MIDDLE DOT
 1319     'lmoust': u'\u23b0',                          #UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
 1320     'lmoustache': u'\u23b0',                      #UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
 1321     'lnap': u'\u2a89',                            #LESS-THAN AND NOT APPROXIMATE
 1322     'lnapprox': u'\u2a89',                        #LESS-THAN AND NOT APPROXIMATE
 1323     'lnE': u'\u2268',                             #LESS-THAN BUT NOT EQUAL TO
 1324     'lne': u'\u2a87',                             #LESS-THAN AND SINGLE-LINE NOT EQUAL TO
 1325     'lneq': u'\u2a87',                            #LESS-THAN AND SINGLE-LINE NOT EQUAL TO
 1326     'lneqq': u'\u2268',                           #LESS-THAN BUT NOT EQUAL TO
 1327     'lnsim': u'\u22e6',                           #LESS-THAN BUT NOT EQUIVALENT TO
 1328     'loang': u'\u27ec',                           #MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
 1329     'loarr': u'\u21fd',                           #LEFTWARDS OPEN-HEADED ARROW
 1330     'lobrk': u'\u27e6',                           #MATHEMATICAL LEFT WHITE SQUARE BRACKET
 1331     'LongLeftArrow': u'\u27f5',                   #LONG LEFTWARDS ARROW
 1332     'Longleftarrow': u'\u27f8',                   #LONG LEFTWARDS DOUBLE ARROW
 1333     'longleftarrow': u'\u27f5',                   #LONG LEFTWARDS ARROW
 1334     'LongLeftRightArrow': u'\u27f7',              #LONG LEFT RIGHT ARROW
 1335     'Longleftrightarrow': u'\u27fa',              #LONG LEFT RIGHT DOUBLE ARROW
 1336     'longleftrightarrow': u'\u27f7',              #LONG LEFT RIGHT ARROW
 1337     'longmapsto': u'\u27fc',                      #LONG RIGHTWARDS ARROW FROM BAR
 1338     'LongRightArrow': u'\u27f6',                  #LONG RIGHTWARDS ARROW
 1339     'Longrightarrow': u'\u27f9',                  #LONG RIGHTWARDS DOUBLE ARROW
 1340     'longrightarrow': u'\u27f6',                  #LONG RIGHTWARDS ARROW
 1341     'looparrowleft': u'\u21ab',                   #LEFTWARDS ARROW WITH LOOP
 1342     'looparrowright': u'\u21ac',                  #RIGHTWARDS ARROW WITH LOOP
 1343     'lopar': u'\u2985',                           #LEFT WHITE PARENTHESIS
 1344     'Lopf': u'\U0001d543',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL L
 1345     'lopf': u'\U0001d55d',                        #MATHEMATICAL DOUBLE-STRUCK SMALL L
 1346     'loplus': u'\u2a2d',                          #PLUS SIGN IN LEFT HALF CIRCLE
 1347     'lotimes': u'\u2a34',                         #MULTIPLICATION SIGN IN LEFT HALF CIRCLE
 1348     'lowast': u'\u2217',                          #ASTERISK OPERATOR
 1349     'lowbar': u'_',                               #LOW LINE
 1350     'LowerLeftArrow': u'\u2199',                  #SOUTH WEST ARROW
 1351     'LowerRightArrow': u'\u2198',                 #SOUTH EAST ARROW
 1352     'loz': u'\u25ca',                             #LOZENGE
 1353     'lozenge': u'\u25ca',                         #LOZENGE
 1354     'lozf': u'\u29eb',                            #BLACK LOZENGE
 1355     'lpar': u'(',                                 #LEFT PARENTHESIS
 1356     'lparlt': u'\u2993',                          #LEFT ARC LESS-THAN BRACKET
 1357     'lrarr': u'\u21c6',                           #LEFTWARDS ARROW OVER RIGHTWARDS ARROW
 1358     'lrcorner': u'\u231f',                        #BOTTOM RIGHT CORNER
 1359     'lrhar': u'\u21cb',                           #LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
 1360     'lrhard': u'\u296d',                          #RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
 1361     'lrm': u'\u200e',                             #LEFT-TO-RIGHT MARK
 1362     'lrtri': u'\u22bf',                           #RIGHT TRIANGLE
 1363     'lsaquo': u'\u2039',                          #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
 1364     'Lscr': u'\u2112',                            #SCRIPT CAPITAL L
 1365     'lscr': u'\U0001d4c1',                        #MATHEMATICAL SCRIPT SMALL L
 1366     'Lsh': u'\u21b0',                             #UPWARDS ARROW WITH TIP LEFTWARDS
 1367     'lsh': u'\u21b0',                             #UPWARDS ARROW WITH TIP LEFTWARDS
 1368     'lsim': u'\u2272',                            #LESS-THAN OR EQUIVALENT TO
 1369     'lsime': u'\u2a8d',                           #LESS-THAN ABOVE SIMILAR OR EQUAL
 1370     'lsimg': u'\u2a8f',                           #LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
 1371     'lsqb': u'[',                                 #LEFT SQUARE BRACKET
 1372     'lsquo': u'\u2018',                           #LEFT SINGLE QUOTATION MARK
 1373     'lsquor': u'\u201a',                          #SINGLE LOW-9 QUOTATION MARK
 1374     'Lstrok': u'\u0141',                          #LATIN CAPITAL LETTER L WITH STROKE
 1375     'lstrok': u'\u0142',                          #LATIN SMALL LETTER L WITH STROKE
 1376     'LT': u'\x3c',                                    #LESS-THAN SIGN
 1377     'Lt': u'\u226a',                              #MUCH LESS-THAN
 1378     'lt': u'\x3c',                                    #LESS-THAN SIGN
 1379     'ltcc': u'\u2aa6',                            #LESS-THAN CLOSED BY CURVE
 1380     'ltcir': u'\u2a79',                           #LESS-THAN WITH CIRCLE INSIDE
 1381     'ltdot': u'\u22d6',                           #LESS-THAN WITH DOT
 1382     'lthree': u'\u22cb',                          #LEFT SEMIDIRECT PRODUCT
 1383     'ltimes': u'\u22c9',                          #LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
 1384     'ltlarr': u'\u2976',                          #LESS-THAN ABOVE LEFTWARDS ARROW
 1385     'ltquest': u'\u2a7b',                         #LESS-THAN WITH QUESTION MARK ABOVE
 1386     'ltri': u'\u25c3',                            #WHITE LEFT-POINTING SMALL TRIANGLE
 1387     'ltrie': u'\u22b4',                           #NORMAL SUBGROUP OF OR EQUAL TO
 1388     'ltrif': u'\u25c2',                           #BLACK LEFT-POINTING SMALL TRIANGLE
 1389     'ltrPar': u'\u2996',                          #DOUBLE RIGHT ARC LESS-THAN BRACKET
 1390     'lurdshar': u'\u294a',                        #LEFT BARB UP RIGHT BARB DOWN HARPOON
 1391     'luruhar': u'\u2966',                         #LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
 1392     'lvertneqq': u'\u2268\ufe00',                 #LESS-THAN BUT NOT EQUAL TO - with vertical stroke
 1393     'lvnE': u'\u2268\ufe00',                      #LESS-THAN BUT NOT EQUAL TO - with vertical stroke
 1394     'macr': u'\xaf',                              #MACRON
 1395     'male': u'\u2642',                            #MALE SIGN
 1396     'malt': u'\u2720',                            #MALTESE CROSS
 1397     'maltese': u'\u2720',                         #MALTESE CROSS
 1398     'Map': u'\u2905',                             #RIGHTWARDS TWO-HEADED ARROW FROM BAR
 1399     'map': u'\u21a6',                             #RIGHTWARDS ARROW FROM BAR
 1400     'mapsto': u'\u21a6',                          #RIGHTWARDS ARROW FROM BAR
 1401     'mapstodown': u'\u21a7',                      #DOWNWARDS ARROW FROM BAR
 1402     'mapstoleft': u'\u21a4',                      #LEFTWARDS ARROW FROM BAR
 1403     'mapstoup': u'\u21a5',                        #UPWARDS ARROW FROM BAR
 1404     'marker': u'\u25ae',                          #BLACK VERTICAL RECTANGLE
 1405     'mcomma': u'\u2a29',                          #MINUS SIGN WITH COMMA ABOVE
 1406     'Mcy': u'\u041c',                             #CYRILLIC CAPITAL LETTER EM
 1407     'mcy': u'\u043c',                             #CYRILLIC SMALL LETTER EM
 1408     'mdash': u'\u2014',                           #EM DASH
 1409     'mDDot': u'\u223a',                           #GEOMETRIC PROPORTION
 1410     'measuredangle': u'\u2221',                   #MEASURED ANGLE
 1411     'MediumSpace': u'\u205f',                     #MEDIUM MATHEMATICAL SPACE
 1412     'Mellintrf': u'\u2133',                       #SCRIPT CAPITAL M
 1413     'Mfr': u'\U0001d510',                         #MATHEMATICAL FRAKTUR CAPITAL M
 1414     'mfr': u'\U0001d52a',                         #MATHEMATICAL FRAKTUR SMALL M
 1415     'mho': u'\u2127',                             #INVERTED OHM SIGN
 1416     'micro': u'\xb5',                             #MICRO SIGN
 1417     'mid': u'\u2223',                             #DIVIDES
 1418     'midast': u'*',                               #ASTERISK
 1419     'midcir': u'\u2af0',                          #VERTICAL LINE WITH CIRCLE BELOW
 1420     'middot': u'\xb7',                            #MIDDLE DOT
 1421     'minus': u'\u2212',                           #MINUS SIGN
 1422     'minusb': u'\u229f',                          #SQUARED MINUS
 1423     'minusd': u'\u2238',                          #DOT MINUS
 1424     'minusdu': u'\u2a2a',                         #MINUS SIGN WITH DOT BELOW
 1425     'MinusPlus': u'\u2213',                       #MINUS-OR-PLUS SIGN
 1426     'mlcp': u'\u2adb',                            #TRANSVERSAL INTERSECTION
 1427     'mldr': u'\u2026',                            #HORIZONTAL ELLIPSIS
 1428     'mnplus': u'\u2213',                          #MINUS-OR-PLUS SIGN
 1429     'models': u'\u22a7',                          #MODELS
 1430     'Mopf': u'\U0001d544',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL M
 1431     'mopf': u'\U0001d55e',                        #MATHEMATICAL DOUBLE-STRUCK SMALL M
 1432     'mp': u'\u2213',                              #MINUS-OR-PLUS SIGN
 1433     'Mscr': u'\u2133',                            #SCRIPT CAPITAL M
 1434     'mscr': u'\U0001d4c2',                        #MATHEMATICAL SCRIPT SMALL M
 1435     'mstpos': u'\u223e',                          #INVERTED LAZY S
 1436     'Mu': u'\u039c',                              #GREEK CAPITAL LETTER MU
 1437     'mu': u'\u03bc',                              #GREEK SMALL LETTER MU
 1438     'multimap': u'\u22b8',                        #MULTIMAP
 1439     'mumap': u'\u22b8',                           #MULTIMAP
 1440     'nabla': u'\u2207',                           #NABLA
 1441     'Nacute': u'\u0143',                          #LATIN CAPITAL LETTER N WITH ACUTE
 1442     'nacute': u'\u0144',                          #LATIN SMALL LETTER N WITH ACUTE
 1443     'nang': u'\u2220\u20d2',                      #ANGLE with vertical line
 1444     'nap': u'\u2249',                             #NOT ALMOST EQUAL TO
 1445     'napE': u'\u2a70\u0338',                      #APPROXIMATELY EQUAL OR EQUAL TO with slash
 1446     'napid': u'\u224b\u0338',                     #TRIPLE TILDE with slash
 1447     'napos': u'\u0149',                           #LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
 1448     'napprox': u'\u2249',                         #NOT ALMOST EQUAL TO
 1449     'natur': u'\u266e',                           #MUSIC NATURAL SIGN
 1450     'natural': u'\u266e',                         #MUSIC NATURAL SIGN
 1451     'naturals': u'\u2115',                        #DOUBLE-STRUCK CAPITAL N
 1452     'nbsp': u'\xa0',                              #NO-BREAK SPACE
 1453     'nbump': u'\u224e\u0338',                     #GEOMETRICALLY EQUIVALENT TO with slash
 1454     'nbumpe': u'\u224f\u0338',                    #DIFFERENCE BETWEEN with slash
 1455     'ncap': u'\u2a43',                            #INTERSECTION WITH OVERBAR
 1456     'Ncaron': u'\u0147',                          #LATIN CAPITAL LETTER N WITH CARON
 1457     'ncaron': u'\u0148',                          #LATIN SMALL LETTER N WITH CARON
 1458     'Ncedil': u'\u0145',                          #LATIN CAPITAL LETTER N WITH CEDILLA
 1459     'ncedil': u'\u0146',                          #LATIN SMALL LETTER N WITH CEDILLA
 1460     'ncong': u'\u2247',                           #NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
 1461     'ncongdot': u'\u2a6d\u0338',                  #CONGRUENT WITH DOT ABOVE with slash
 1462     'ncup': u'\u2a42',                            #UNION WITH OVERBAR
 1463     'Ncy': u'\u041d',                             #CYRILLIC CAPITAL LETTER EN
 1464     'ncy': u'\u043d',                             #CYRILLIC SMALL LETTER EN
 1465     'ndash': u'\u2013',                           #EN DASH
 1466     'ne': u'\u2260',                              #NOT EQUAL TO
 1467     'nearhk': u'\u2924',                          #NORTH EAST ARROW WITH HOOK
 1468     'neArr': u'\u21d7',                           #NORTH EAST DOUBLE ARROW
 1469     'nearr': u'\u2197',                           #NORTH EAST ARROW
 1470     'nearrow': u'\u2197',                         #NORTH EAST ARROW
 1471     'nedot': u'\u2250\u0338',                     #APPROACHES THE LIMIT with slash
 1472     'NegativeMediumSpace': u'\u200b',             #ZERO WIDTH SPACE
 1473     'NegativeThickSpace': u'\u200b',              #ZERO WIDTH SPACE
 1474     'NegativeThinSpace': u'\u200b',               #ZERO WIDTH SPACE
 1475     'NegativeVeryThinSpace': u'\u200b',           #ZERO WIDTH SPACE
 1476     'nequiv': u'\u2262',                          #NOT IDENTICAL TO
 1477     'nesear': u'\u2928',                          #NORTH EAST ARROW AND SOUTH EAST ARROW
 1478     'nesim': u'\u2242\u0338',                     #MINUS TILDE with slash
 1479     'NestedGreaterGreater': u'\u226b',            #MUCH GREATER-THAN
 1480     'NestedLessLess': u'\u226a',                  #MUCH LESS-THAN
 1481     'NewLine': u'\n',                             #LINE FEED (LF)
 1482     'nexist': u'\u2204',                          #THERE DOES NOT EXIST
 1483     'nexists': u'\u2204',                         #THERE DOES NOT EXIST
 1484     'Nfr': u'\U0001d511',                         #MATHEMATICAL FRAKTUR CAPITAL N
 1485     'nfr': u'\U0001d52b',                         #MATHEMATICAL FRAKTUR SMALL N
 1486     'ngE': u'\u2267\u0338',                       #GREATER-THAN OVER EQUAL TO with slash
 1487     'nge': u'\u2271',                             #NEITHER GREATER-THAN NOR EQUAL TO
 1488     'ngeq': u'\u2271',                            #NEITHER GREATER-THAN NOR EQUAL TO
 1489     'ngeqq': u'\u2267\u0338',                     #GREATER-THAN OVER EQUAL TO with slash
 1490     'ngeqslant': u'\u2a7e\u0338',                 #GREATER-THAN OR SLANTED EQUAL TO with slash
 1491     'nges': u'\u2a7e\u0338',                      #GREATER-THAN OR SLANTED EQUAL TO with slash
 1492     'nGg': u'\u22d9\u0338',                       #VERY MUCH GREATER-THAN with slash
 1493     'ngsim': u'\u2275',                           #NEITHER GREATER-THAN NOR EQUIVALENT TO
 1494     'nGt': u'\u226b\u20d2',                       #MUCH GREATER THAN with vertical line
 1495     'ngt': u'\u226f',                             #NOT GREATER-THAN
 1496     'ngtr': u'\u226f',                            #NOT GREATER-THAN
 1497     'nGtv': u'\u226b\u0338',                      #MUCH GREATER THAN with slash
 1498     'nhArr': u'\u21ce',                           #LEFT RIGHT DOUBLE ARROW WITH STROKE
 1499     'nharr': u'\u21ae',                           #LEFT RIGHT ARROW WITH STROKE
 1500     'nhpar': u'\u2af2',                           #PARALLEL WITH HORIZONTAL STROKE
 1501     'ni': u'\u220b',                              #CONTAINS AS MEMBER
 1502     'nis': u'\u22fc',                             #SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
 1503     'nisd': u'\u22fa',                            #CONTAINS WITH LONG HORIZONTAL STROKE
 1504     'niv': u'\u220b',                             #CONTAINS AS MEMBER
 1505     'NJcy': u'\u040a',                            #CYRILLIC CAPITAL LETTER NJE
 1506     'njcy': u'\u045a',                            #CYRILLIC SMALL LETTER NJE
 1507     'nlArr': u'\u21cd',                           #LEFTWARDS DOUBLE ARROW WITH STROKE
 1508     'nlarr': u'\u219a',                           #LEFTWARDS ARROW WITH STROKE
 1509     'nldr': u'\u2025',                            #TWO DOT LEADER
 1510     'nlE': u'\u2266\u0338',                       #LESS-THAN OVER EQUAL TO with slash
 1511     'nle': u'\u2270',                             #NEITHER LESS-THAN NOR EQUAL TO
 1512     'nLeftarrow': u'\u21cd',                      #LEFTWARDS DOUBLE ARROW WITH STROKE
 1513     'nleftarrow': u'\u219a',                      #LEFTWARDS ARROW WITH STROKE
 1514     'nLeftrightarrow': u'\u21ce',                 #LEFT RIGHT DOUBLE ARROW WITH STROKE
 1515     'nleftrightarrow': u'\u21ae',                 #LEFT RIGHT ARROW WITH STROKE
 1516     'nleq': u'\u2270',                            #NEITHER LESS-THAN NOR EQUAL TO
 1517     'nleqq': u'\u2266\u0338',                     #LESS-THAN OVER EQUAL TO with slash
 1518     'nleqslant': u'\u2a7d\u0338',                 #LESS-THAN OR SLANTED EQUAL TO with slash
 1519     'nles': u'\u2a7d\u0338',                      #LESS-THAN OR SLANTED EQUAL TO with slash
 1520     'nless': u'\u226e',                           #NOT LESS-THAN
 1521     'nLl': u'\u22d8\u0338',                       #VERY MUCH LESS-THAN with slash
 1522     'nlsim': u'\u2274',                           #NEITHER LESS-THAN NOR EQUIVALENT TO
 1523     'nLt': u'\u226a\u20d2',                       #MUCH LESS THAN with vertical line
 1524     'nlt': u'\u226e',                             #NOT LESS-THAN
 1525     'nltri': u'\u22ea',                           #NOT NORMAL SUBGROUP OF
 1526     'nltrie': u'\u22ec',                          #NOT NORMAL SUBGROUP OF OR EQUAL TO
 1527     'nLtv': u'\u226a\u0338',                      #MUCH LESS THAN with slash
 1528     'nmid': u'\u2224',                            #DOES NOT DIVIDE
 1529     'NoBreak': u'\u2060',                         #WORD JOINER
 1530     'NonBreakingSpace': u'\xa0',                  #NO-BREAK SPACE
 1531     'Nopf': u'\u2115',                            #DOUBLE-STRUCK CAPITAL N
 1532     'nopf': u'\U0001d55f',                        #MATHEMATICAL DOUBLE-STRUCK SMALL N
 1533     'Not': u'\u2aec',                             #DOUBLE STROKE NOT SIGN
 1534     'not': u'\xac',                               #NOT SIGN
 1535     'NotCongruent': u'\u2262',                    #NOT IDENTICAL TO
 1536     'NotCupCap': u'\u226d',                       #NOT EQUIVALENT TO
 1537     'NotDoubleVerticalBar': u'\u2226',            #NOT PARALLEL TO
 1538     'NotElement': u'\u2209',                      #NOT AN ELEMENT OF
 1539     'NotEqual': u'\u2260',                        #NOT EQUAL TO
 1540     'NotEqualTilde': u'\u2242\u0338',             #MINUS TILDE with slash
 1541     'NotExists': u'\u2204',                       #THERE DOES NOT EXIST
 1542     'NotGreater': u'\u226f',                      #NOT GREATER-THAN
 1543     'NotGreaterEqual': u'\u2271',                 #NEITHER GREATER-THAN NOR EQUAL TO
 1544     'NotGreaterFullEqual': u'\u2267\u0338',       #GREATER-THAN OVER EQUAL TO with slash
 1545     'NotGreaterGreater': u'\u226b\u0338',         #MUCH GREATER THAN with slash
 1546     'NotGreaterLess': u'\u2279',                  #NEITHER GREATER-THAN NOR LESS-THAN
 1547     'NotGreaterSlantEqual': u'\u2a7e\u0338',      #GREATER-THAN OR SLANTED EQUAL TO with slash
 1548     'NotGreaterTilde': u'\u2275',                 #NEITHER GREATER-THAN NOR EQUIVALENT TO
 1549     'NotHumpDownHump': u'\u224e\u0338',           #GEOMETRICALLY EQUIVALENT TO with slash
 1550     'NotHumpEqual': u'\u224f\u0338',              #DIFFERENCE BETWEEN with slash
 1551     'notin': u'\u2209',                           #NOT AN ELEMENT OF
 1552     'notindot': u'\u22f5\u0338',                  #ELEMENT OF WITH DOT ABOVE with slash
 1553     'notinE': u'\u22f9\u0338',                    #ELEMENT OF WITH TWO HORIZONTAL STROKES with slash
 1554     'notinva': u'\u2209',                         #NOT AN ELEMENT OF
 1555     'notinvb': u'\u22f7',                         #SMALL ELEMENT OF WITH OVERBAR
 1556     'notinvc': u'\u22f6',                         #ELEMENT OF WITH OVERBAR
 1557     'NotLeftTriangle': u'\u22ea',                 #NOT NORMAL SUBGROUP OF
 1558     'NotLeftTriangleBar': u'\u29cf\u0338',        #LEFT TRIANGLE BESIDE VERTICAL BAR with slash
 1559     'NotLeftTriangleEqual': u'\u22ec',            #NOT NORMAL SUBGROUP OF OR EQUAL TO
 1560     'NotLess': u'\u226e',                         #NOT LESS-THAN
 1561     'NotLessEqual': u'\u2270',                    #NEITHER LESS-THAN NOR EQUAL TO
 1562     'NotLessGreater': u'\u2278',                  #NEITHER LESS-THAN NOR GREATER-THAN
 1563     'NotLessLess': u'\u226a\u0338',               #MUCH LESS THAN with slash
 1564     'NotLessSlantEqual': u'\u2a7d\u0338',         #LESS-THAN OR SLANTED EQUAL TO with slash
 1565     'NotLessTilde': u'\u2274',                    #NEITHER LESS-THAN NOR EQUIVALENT TO
 1566     'NotNestedGreaterGreater': u'\u2aa2\u0338',   #DOUBLE NESTED GREATER-THAN with slash
 1567     'NotNestedLessLess': u'\u2aa1\u0338',         #DOUBLE NESTED LESS-THAN with slash
 1568     'notni': u'\u220c',                           #DOES NOT CONTAIN AS MEMBER
 1569     'notniva': u'\u220c',                         #DOES NOT CONTAIN AS MEMBER
 1570     'notnivb': u'\u22fe',                         #SMALL CONTAINS WITH OVERBAR
 1571     'notnivc': u'\u22fd',                         #CONTAINS WITH OVERBAR
 1572     'NotPrecedes': u'\u2280',                     #DOES NOT PRECEDE
 1573     'NotPrecedesEqual': u'\u2aaf\u0338',          #PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash
 1574     'NotPrecedesSlantEqual': u'\u22e0',           #DOES NOT PRECEDE OR EQUAL
 1575     'NotReverseElement': u'\u220c',               #DOES NOT CONTAIN AS MEMBER
 1576     'NotRightTriangle': u'\u22eb',                #DOES NOT CONTAIN AS NORMAL SUBGROUP
 1577     'NotRightTriangleBar': u'\u29d0\u0338',       #VERTICAL BAR BESIDE RIGHT TRIANGLE with slash
 1578     'NotRightTriangleEqual': u'\u22ed',           #DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
 1579     'NotSquareSubset': u'\u228f\u0338',           #SQUARE IMAGE OF with slash
 1580     'NotSquareSubsetEqual': u'\u22e2',            #NOT SQUARE IMAGE OF OR EQUAL TO
 1581     'NotSquareSuperset': u'\u2290\u0338',         #SQUARE ORIGINAL OF with slash
 1582     'NotSquareSupersetEqual': u'\u22e3',          #NOT SQUARE ORIGINAL OF OR EQUAL TO
 1583     'NotSubset': u'\u2282\u20d2',                 #SUBSET OF with vertical line
 1584     'NotSubsetEqual': u'\u2288',                  #NEITHER A SUBSET OF NOR EQUAL TO
 1585     'NotSucceeds': u'\u2281',                     #DOES NOT SUCCEED
 1586     'NotSucceedsEqual': u'\u2ab0\u0338',          #SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash
 1587     'NotSucceedsSlantEqual': u'\u22e1',           #DOES NOT SUCCEED OR EQUAL
 1588     'NotSucceedsTilde': u'\u227f\u0338',          #SUCCEEDS OR EQUIVALENT TO with slash
 1589     'NotSuperset': u'\u2283\u20d2',               #SUPERSET OF with vertical line
 1590     'NotSupersetEqual': u'\u2289',                #NEITHER A SUPERSET OF NOR EQUAL TO
 1591     'NotTilde': u'\u2241',                        #NOT TILDE
 1592     'NotTildeEqual': u'\u2244',                   #NOT ASYMPTOTICALLY EQUAL TO
 1593     'NotTildeFullEqual': u'\u2247',               #NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
 1594     'NotTildeTilde': u'\u2249',                   #NOT ALMOST EQUAL TO
 1595     'NotVerticalBar': u'\u2224',                  #DOES NOT DIVIDE
 1596     'npar': u'\u2226',                            #NOT PARALLEL TO
 1597     'nparallel': u'\u2226',                       #NOT PARALLEL TO
 1598     'nparsl': u'\u2afd\u20e5',                    #DOUBLE SOLIDUS OPERATOR with reverse slash
 1599     'npart': u'\u2202\u0338',                     #PARTIAL DIFFERENTIAL with slash
 1600     'npolint': u'\u2a14',                         #LINE INTEGRATION NOT INCLUDING THE POLE
 1601     'npr': u'\u2280',                             #DOES NOT PRECEDE
 1602     'nprcue': u'\u22e0',                          #DOES NOT PRECEDE OR EQUAL
 1603     'npre': u'\u2aaf\u0338',                      #PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash
 1604     'nprec': u'\u2280',                           #DOES NOT PRECEDE
 1605     'npreceq': u'\u2aaf\u0338',                   #PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash
 1606     'nrArr': u'\u21cf',                           #RIGHTWARDS DOUBLE ARROW WITH STROKE
 1607     'nrarr': u'\u219b',                           #RIGHTWARDS ARROW WITH STROKE
 1608     'nrarrc': u'\u2933\u0338',                    #WAVE ARROW POINTING DIRECTLY RIGHT with slash
 1609     'nrarrw': u'\u219d\u0338',                    #RIGHTWARDS WAVE ARROW with slash
 1610     'nRightarrow': u'\u21cf',                     #RIGHTWARDS DOUBLE ARROW WITH STROKE
 1611     'nrightarrow': u'\u219b',                     #RIGHTWARDS ARROW WITH STROKE
 1612     'nrtri': u'\u22eb',                           #DOES NOT CONTAIN AS NORMAL SUBGROUP
 1613     'nrtrie': u'\u22ed',                          #DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
 1614     'nsc': u'\u2281',                             #DOES NOT SUCCEED
 1615     'nsccue': u'\u22e1',                          #DOES NOT SUCCEED OR EQUAL
 1616     'nsce': u'\u2ab0\u0338',                      #SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash
 1617     'Nscr': u'\U0001d4a9',                        #MATHEMATICAL SCRIPT CAPITAL N
 1618     'nscr': u'\U0001d4c3',                        #MATHEMATICAL SCRIPT SMALL N
 1619     'nshortmid': u'\u2224',                       #DOES NOT DIVIDE
 1620     'nshortparallel': u'\u2226',                  #NOT PARALLEL TO
 1621     'nsim': u'\u2241',                            #NOT TILDE
 1622     'nsime': u'\u2244',                           #NOT ASYMPTOTICALLY EQUAL TO
 1623     'nsimeq': u'\u2244',                          #NOT ASYMPTOTICALLY EQUAL TO
 1624     'nsmid': u'\u2224',                           #DOES NOT DIVIDE
 1625     'nspar': u'\u2226',                           #NOT PARALLEL TO
 1626     'nsqsube': u'\u22e2',                         #NOT SQUARE IMAGE OF OR EQUAL TO
 1627     'nsqsupe': u'\u22e3',                         #NOT SQUARE ORIGINAL OF OR EQUAL TO
 1628     'nsub': u'\u2284',                            #NOT A SUBSET OF
 1629     'nsubE': u'\u2ac5\u0338',                     #SUBSET OF ABOVE EQUALS SIGN with slash
 1630     'nsube': u'\u2288',                           #NEITHER A SUBSET OF NOR EQUAL TO
 1631     'nsubset': u'\u2282\u20d2',                   #SUBSET OF with vertical line
 1632     'nsubseteq': u'\u2288',                       #NEITHER A SUBSET OF NOR EQUAL TO
 1633     'nsubseteqq': u'\u2ac5\u0338',                #SUBSET OF ABOVE EQUALS SIGN with slash
 1634     'nsucc': u'\u2281',                           #DOES NOT SUCCEED
 1635     'nsucceq': u'\u2ab0\u0338',                   #SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash
 1636     'nsup': u'\u2285',                            #NOT A SUPERSET OF
 1637     'nsupE': u'\u2ac6\u0338',                     #SUPERSET OF ABOVE EQUALS SIGN with slash
 1638     'nsupe': u'\u2289',                           #NEITHER A SUPERSET OF NOR EQUAL TO
 1639     'nsupset': u'\u2283\u20d2',                   #SUPERSET OF with vertical line
 1640     'nsupseteq': u'\u2289',                       #NEITHER A SUPERSET OF NOR EQUAL TO
 1641     'nsupseteqq': u'\u2ac6\u0338',                #SUPERSET OF ABOVE EQUALS SIGN with slash
 1642     'ntgl': u'\u2279',                            #NEITHER GREATER-THAN NOR LESS-THAN
 1643     'Ntilde': u'\xd1',                            #LATIN CAPITAL LETTER N WITH TILDE
 1644     'ntilde': u'\xf1',                            #LATIN SMALL LETTER N WITH TILDE
 1645     'ntlg': u'\u2278',                            #NEITHER LESS-THAN NOR GREATER-THAN
 1646     'ntriangleleft': u'\u22ea',                   #NOT NORMAL SUBGROUP OF
 1647     'ntrianglelefteq': u'\u22ec',                 #NOT NORMAL SUBGROUP OF OR EQUAL TO
 1648     'ntriangleright': u'\u22eb',                  #DOES NOT CONTAIN AS NORMAL SUBGROUP
 1649     'ntrianglerighteq': u'\u22ed',                #DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
 1650     'Nu': u'\u039d',                              #GREEK CAPITAL LETTER NU
 1651     'nu': u'\u03bd',                              #GREEK SMALL LETTER NU
 1652     'num': u'#',                                  #NUMBER SIGN
 1653     'numero': u'\u2116',                          #NUMERO SIGN
 1654     'numsp': u'\u2007',                           #FIGURE SPACE
 1655     'nvap': u'\u224d\u20d2',                      #EQUIVALENT TO with vertical line
 1656     'nVDash': u'\u22af',                          #NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
 1657     'nVdash': u'\u22ae',                          #DOES NOT FORCE
 1658     'nvDash': u'\u22ad',                          #NOT TRUE
 1659     'nvdash': u'\u22ac',                          #DOES NOT PROVE
 1660     'nvge': u'\u2265\u20d2',                      #GREATER-THAN OR EQUAL TO with vertical line
 1661     'nvgt': u'>\u20d2',                           #GREATER-THAN SIGN with vertical line
 1662     'nvHarr': u'\u2904',                          #LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
 1663     'nvinfin': u'\u29de',                         #INFINITY NEGATED WITH VERTICAL BAR
 1664     'nvlArr': u'\u2902',                          #LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
 1665     'nvle': u'\u2264\u20d2',                      #LESS-THAN OR EQUAL TO with vertical line
 1666     'nvlt': u'\x3c\u20d2',                            #LESS-THAN SIGN with vertical line
 1667     'nvltrie': u'\u22b4\u20d2',                   #NORMAL SUBGROUP OF OR EQUAL TO with vertical line
 1668     'nvrArr': u'\u2903',                          #RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
 1669     'nvrtrie': u'\u22b5\u20d2',                   #CONTAINS AS NORMAL SUBGROUP OR EQUAL TO with vertical line
 1670     'nvsim': u'\u223c\u20d2',                     #TILDE OPERATOR with vertical line
 1671     'nwarhk': u'\u2923',                          #NORTH WEST ARROW WITH HOOK
 1672     'nwArr': u'\u21d6',                           #NORTH WEST DOUBLE ARROW
 1673     'nwarr': u'\u2196',                           #NORTH WEST ARROW
 1674     'nwarrow': u'\u2196',                         #NORTH WEST ARROW
 1675     'nwnear': u'\u2927',                          #NORTH WEST ARROW AND NORTH EAST ARROW
 1676     'Oacute': u'\xd3',                            #LATIN CAPITAL LETTER O WITH ACUTE
 1677     'oacute': u'\xf3',                            #LATIN SMALL LETTER O WITH ACUTE
 1678     'oast': u'\u229b',                            #CIRCLED ASTERISK OPERATOR
 1679     'ocir': u'\u229a',                            #CIRCLED RING OPERATOR
 1680     'Ocirc': u'\xd4',                             #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
 1681     'ocirc': u'\xf4',                             #LATIN SMALL LETTER O WITH CIRCUMFLEX
 1682     'Ocy': u'\u041e',                             #CYRILLIC CAPITAL LETTER O
 1683     'ocy': u'\u043e',                             #CYRILLIC SMALL LETTER O
 1684     'odash': u'\u229d',                           #CIRCLED DASH
 1685     'Odblac': u'\u0150',                          #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
 1686     'odblac': u'\u0151',                          #LATIN SMALL LETTER O WITH DOUBLE ACUTE
 1687     'odiv': u'\u2a38',                            #CIRCLED DIVISION SIGN
 1688     'odot': u'\u2299',                            #CIRCLED DOT OPERATOR
 1689     'odsold': u'\u29bc',                          #CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
 1690     'OElig': u'\u0152',                           #LATIN CAPITAL LIGATURE OE
 1691     'oelig': u'\u0153',                           #LATIN SMALL LIGATURE OE
 1692     'ofcir': u'\u29bf',                           #CIRCLED BULLET
 1693     'Ofr': u'\U0001d512',                         #MATHEMATICAL FRAKTUR CAPITAL O
 1694     'ofr': u'\U0001d52c',                         #MATHEMATICAL FRAKTUR SMALL O
 1695     'ogon': u'\u02db',                            #OGONEK
 1696     'Ograve': u'\xd2',                            #LATIN CAPITAL LETTER O WITH GRAVE
 1697     'ograve': u'\xf2',                            #LATIN SMALL LETTER O WITH GRAVE
 1698     'ogt': u'\u29c1',                             #CIRCLED GREATER-THAN
 1699     'ohbar': u'\u29b5',                           #CIRCLE WITH HORIZONTAL BAR
 1700     'ohm': u'\u03a9',                             #GREEK CAPITAL LETTER OMEGA
 1701     'oint': u'\u222e',                            #CONTOUR INTEGRAL
 1702     'olarr': u'\u21ba',                           #ANTICLOCKWISE OPEN CIRCLE ARROW
 1703     'olcir': u'\u29be',                           #CIRCLED WHITE BULLET
 1704     'olcross': u'\u29bb',                         #CIRCLE WITH SUPERIMPOSED X
 1705     'oline': u'\u203e',                           #OVERLINE
 1706     'olt': u'\u29c0',                             #CIRCLED LESS-THAN
 1707     'Omacr': u'\u014c',                           #LATIN CAPITAL LETTER O WITH MACRON
 1708     'omacr': u'\u014d',                           #LATIN SMALL LETTER O WITH MACRON
 1709     'Omega': u'\u03a9',                           #GREEK CAPITAL LETTER OMEGA
 1710     'omega': u'\u03c9',                           #GREEK SMALL LETTER OMEGA
 1711     'Omicron': u'\u039f',                         #GREEK CAPITAL LETTER OMICRON
 1712     'omicron': u'\u03bf',                         #GREEK SMALL LETTER OMICRON
 1713     'omid': u'\u29b6',                            #CIRCLED VERTICAL BAR
 1714     'ominus': u'\u2296',                          #CIRCLED MINUS
 1715     'Oopf': u'\U0001d546',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL O
 1716     'oopf': u'\U0001d560',                        #MATHEMATICAL DOUBLE-STRUCK SMALL O
 1717     'opar': u'\u29b7',                            #CIRCLED PARALLEL
 1718     'OpenCurlyDoubleQuote': u'\u201c',            #LEFT DOUBLE QUOTATION MARK
 1719     'OpenCurlyQuote': u'\u2018',                  #LEFT SINGLE QUOTATION MARK
 1720     'operp': u'\u29b9',                           #CIRCLED PERPENDICULAR
 1721     'oplus': u'\u2295',                           #CIRCLED PLUS
 1722     'Or': u'\u2a54',                              #DOUBLE LOGICAL OR
 1723     'or': u'\u2228',                              #LOGICAL OR
 1724     'orarr': u'\u21bb',                           #CLOCKWISE OPEN CIRCLE ARROW
 1725     'ord': u'\u2a5d',                             #LOGICAL OR WITH HORIZONTAL DASH
 1726     'order': u'\u2134',                           #SCRIPT SMALL O
 1727     'orderof': u'\u2134',                         #SCRIPT SMALL O
 1728     'ordf': u'\xaa',                              #FEMININE ORDINAL INDICATOR
 1729     'ordm': u'\xba',                              #MASCULINE ORDINAL INDICATOR
 1730     'origof': u'\u22b6',                          #ORIGINAL OF
 1731     'oror': u'\u2a56',                            #TWO INTERSECTING LOGICAL OR
 1732     'orslope': u'\u2a57',                         #SLOPING LARGE OR
 1733     'orv': u'\u2a5b',                             #LOGICAL OR WITH MIDDLE STEM
 1734     'oS': u'\u24c8',                              #CIRCLED LATIN CAPITAL LETTER S
 1735     'Oscr': u'\U0001d4aa',                        #MATHEMATICAL SCRIPT CAPITAL O
 1736     'oscr': u'\u2134',                            #SCRIPT SMALL O
 1737     'Oslash': u'\xd8',                            #LATIN CAPITAL LETTER O WITH STROKE
 1738     'oslash': u'\xf8',                            #LATIN SMALL LETTER O WITH STROKE
 1739     'osol': u'\u2298',                            #CIRCLED DIVISION SLASH
 1740     'Otilde': u'\xd5',                            #LATIN CAPITAL LETTER O WITH TILDE
 1741     'otilde': u'\xf5',                            #LATIN SMALL LETTER O WITH TILDE
 1742     'Otimes': u'\u2a37',                          #MULTIPLICATION SIGN IN DOUBLE CIRCLE
 1743     'otimes': u'\u2297',                          #CIRCLED TIMES
 1744     'otimesas': u'\u2a36',                        #CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
 1745     'Ouml': u'\xd6',                              #LATIN CAPITAL LETTER O WITH DIAERESIS
 1746     'ouml': u'\xf6',                              #LATIN SMALL LETTER O WITH DIAERESIS
 1747     'ovbar': u'\u233d',                           #APL FUNCTIONAL SYMBOL CIRCLE STILE
 1748     'OverBar': u'\u203e',                         #OVERLINE
 1749     'OverBrace': u'\u23de',                       #TOP CURLY BRACKET
 1750     'OverBracket': u'\u23b4',                     #TOP SQUARE BRACKET
 1751     'OverParenthesis': u'\u23dc',                 #TOP PARENTHESIS
 1752     'par': u'\u2225',                             #PARALLEL TO
 1753     'para': u'\xb6',                              #PILCROW SIGN
 1754     'parallel': u'\u2225',                        #PARALLEL TO
 1755     'parsim': u'\u2af3',                          #PARALLEL WITH TILDE OPERATOR
 1756     'parsl': u'\u2afd',                           #DOUBLE SOLIDUS OPERATOR
 1757     'part': u'\u2202',                            #PARTIAL DIFFERENTIAL
 1758     'PartialD': u'\u2202',                        #PARTIAL DIFFERENTIAL
 1759     'Pcy': u'\u041f',                             #CYRILLIC CAPITAL LETTER PE
 1760     'pcy': u'\u043f',                             #CYRILLIC SMALL LETTER PE
 1761     'percnt': u'%',                               #PERCENT SIGN
 1762     'period': u'.',                               #FULL STOP
 1763     'permil': u'\u2030',                          #PER MILLE SIGN
 1764     'perp': u'\u22a5',                            #UP TACK
 1765     'pertenk': u'\u2031',                         #PER TEN THOUSAND SIGN
 1766     'Pfr': u'\U0001d513',                         #MATHEMATICAL FRAKTUR CAPITAL P
 1767     'pfr': u'\U0001d52d',                         #MATHEMATICAL FRAKTUR SMALL P
 1768     'Phi': u'\u03a6',                             #GREEK CAPITAL LETTER PHI
 1769     'phi': u'\u03c6',                             #GREEK SMALL LETTER PHI
 1770     'phiv': u'\u03d5',                            #GREEK PHI SYMBOL
 1771     'phmmat': u'\u2133',                          #SCRIPT CAPITAL M
 1772     'phone': u'\u260e',                           #BLACK TELEPHONE
 1773     'Pi': u'\u03a0',                              #GREEK CAPITAL LETTER PI
 1774     'pi': u'\u03c0',                              #GREEK SMALL LETTER PI
 1775     'pitchfork': u'\u22d4',                       #PITCHFORK
 1776     'piv': u'\u03d6',                             #GREEK PI SYMBOL
 1777     'planck': u'\u210f',                          #PLANCK CONSTANT OVER TWO PI
 1778     'planckh': u'\u210e',                         #PLANCK CONSTANT
 1779     'plankv': u'\u210f',                          #PLANCK CONSTANT OVER TWO PI
 1780     'plus': u'+',                                 #PLUS SIGN
 1781     'plusacir': u'\u2a23',                        #PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
 1782     'plusb': u'\u229e',                           #SQUARED PLUS
 1783     'pluscir': u'\u2a22',                         #PLUS SIGN WITH SMALL CIRCLE ABOVE
 1784     'plusdo': u'\u2214',                          #DOT PLUS
 1785     'plusdu': u'\u2a25',                          #PLUS SIGN WITH DOT BELOW
 1786     'pluse': u'\u2a72',                           #PLUS SIGN ABOVE EQUALS SIGN
 1787     'PlusMinus': u'\xb1',                         #PLUS-MINUS SIGN
 1788     'plusmn': u'\xb1',                            #PLUS-MINUS SIGN
 1789     'plussim': u'\u2a26',                         #PLUS SIGN WITH TILDE BELOW
 1790     'plustwo': u'\u2a27',                         #PLUS SIGN WITH SUBSCRIPT TWO
 1791     'pm': u'\xb1',                                #PLUS-MINUS SIGN
 1792     'Poincareplane': u'\u210c',                   #BLACK-LETTER CAPITAL H
 1793     'pointint': u'\u2a15',                        #INTEGRAL AROUND A POINT OPERATOR
 1794     'Popf': u'\u2119',                            #DOUBLE-STRUCK CAPITAL P
 1795     'popf': u'\U0001d561',                        #MATHEMATICAL DOUBLE-STRUCK SMALL P
 1796     'pound': u'\xa3',                             #POUND SIGN
 1797     'Pr': u'\u2abb',                              #DOUBLE PRECEDES
 1798     'pr': u'\u227a',                              #PRECEDES
 1799     'prap': u'\u2ab7',                            #PRECEDES ABOVE ALMOST EQUAL TO
 1800     'prcue': u'\u227c',                           #PRECEDES OR EQUAL TO
 1801     'prE': u'\u2ab3',                             #PRECEDES ABOVE EQUALS SIGN
 1802     'pre': u'\u2aaf',                             #PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
 1803     'prec': u'\u227a',                            #PRECEDES
 1804     'precapprox': u'\u2ab7',                      #PRECEDES ABOVE ALMOST EQUAL TO
 1805     'preccurlyeq': u'\u227c',                     #PRECEDES OR EQUAL TO
 1806     'Precedes': u'\u227a',                        #PRECEDES
 1807     'PrecedesEqual': u'\u2aaf',                   #PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
 1808     'PrecedesSlantEqual': u'\u227c',              #PRECEDES OR EQUAL TO
 1809     'PrecedesTilde': u'\u227e',                   #PRECEDES OR EQUIVALENT TO
 1810     'preceq': u'\u2aaf',                          #PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
 1811     'precnapprox': u'\u2ab9',                     #PRECEDES ABOVE NOT ALMOST EQUAL TO
 1812     'precneqq': u'\u2ab5',                        #PRECEDES ABOVE NOT EQUAL TO
 1813     'precnsim': u'\u22e8',                        #PRECEDES BUT NOT EQUIVALENT TO
 1814     'precsim': u'\u227e',                         #PRECEDES OR EQUIVALENT TO
 1815     'Prime': u'\u2033',                           #DOUBLE PRIME
 1816     'prime': u'\u2032',                           #PRIME
 1817     'primes': u'\u2119',                          #DOUBLE-STRUCK CAPITAL P
 1818     'prnap': u'\u2ab9',                           #PRECEDES ABOVE NOT ALMOST EQUAL TO
 1819     'prnE': u'\u2ab5',                            #PRECEDES ABOVE NOT EQUAL TO
 1820     'prnsim': u'\u22e8',                          #PRECEDES BUT NOT EQUIVALENT TO
 1821     'prod': u'\u220f',                            #N-ARY PRODUCT
 1822     'Product': u'\u220f',                         #N-ARY PRODUCT
 1823     'profalar': u'\u232e',                        #ALL AROUND-PROFILE
 1824     'profline': u'\u2312',                        #ARC
 1825     'profsurf': u'\u2313',                        #SEGMENT
 1826     'prop': u'\u221d',                            #PROPORTIONAL TO
 1827     'Proportion': u'\u2237',                      #PROPORTION
 1828     'Proportional': u'\u221d',                    #PROPORTIONAL TO
 1829     'propto': u'\u221d',                          #PROPORTIONAL TO
 1830     'prsim': u'\u227e',                           #PRECEDES OR EQUIVALENT TO
 1831     'prurel': u'\u22b0',                          #PRECEDES UNDER RELATION
 1832     'Pscr': u'\U0001d4ab',                        #MATHEMATICAL SCRIPT CAPITAL P
 1833     'pscr': u'\U0001d4c5',                        #MATHEMATICAL SCRIPT SMALL P
 1834     'Psi': u'\u03a8',                             #GREEK CAPITAL LETTER PSI
 1835     'psi': u'\u03c8',                             #GREEK SMALL LETTER PSI
 1836     'puncsp': u'\u2008',                          #PUNCTUATION SPACE
 1837     'Qfr': u'\U0001d514',                         #MATHEMATICAL FRAKTUR CAPITAL Q
 1838     'qfr': u'\U0001d52e',                         #MATHEMATICAL FRAKTUR SMALL Q
 1839     'qint': u'\u2a0c',                            #QUADRUPLE INTEGRAL OPERATOR
 1840     'Qopf': u'\u211a',                            #DOUBLE-STRUCK CAPITAL Q
 1841     'qopf': u'\U0001d562',                        #MATHEMATICAL DOUBLE-STRUCK SMALL Q
 1842     'qprime': u'\u2057',                          #QUADRUPLE PRIME
 1843     'Qscr': u'\U0001d4ac',                        #MATHEMATICAL SCRIPT CAPITAL Q
 1844     'qscr': u'\U0001d4c6',                        #MATHEMATICAL SCRIPT SMALL Q
 1845     'quaternions': u'\u210d',                     #DOUBLE-STRUCK CAPITAL H
 1846     'quatint': u'\u2a16',                         #QUATERNION INTEGRAL OPERATOR
 1847     'quest': u'?',                                #QUESTION MARK
 1848     'questeq': u'\u225f',                         #QUESTIONED EQUAL TO
 1849     'QUOT': u'"',                                 #QUOTATION MARK
 1850     'quot': u'"',                                 #QUOTATION MARK
 1851     'rAarr': u'\u21db',                           #RIGHTWARDS TRIPLE ARROW
 1852     'race': u'\u223d\u0331',                      #REVERSED TILDE with underline
 1853     'Racute': u'\u0154',                          #LATIN CAPITAL LETTER R WITH ACUTE
 1854     'racute': u'\u0155',                          #LATIN SMALL LETTER R WITH ACUTE
 1855     'radic': u'\u221a',                           #SQUARE ROOT
 1856     'raemptyv': u'\u29b3',                        #EMPTY SET WITH RIGHT ARROW ABOVE
 1857     'Rang': u'\u27eb',                            #MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
 1858     'rang': u'\u27e9',                            #MATHEMATICAL RIGHT ANGLE BRACKET
 1859     'rangd': u'\u2992',                           #RIGHT ANGLE BRACKET WITH DOT
 1860     'range': u'\u29a5',                           #REVERSED ANGLE WITH UNDERBAR
 1861     'rangle': u'\u27e9',                          #MATHEMATICAL RIGHT ANGLE BRACKET
 1862     'raquo': u'\xbb',                             #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
 1863     'Rarr': u'\u21a0',                            #RIGHTWARDS TWO HEADED ARROW
 1864     'rArr': u'\u21d2',                            #RIGHTWARDS DOUBLE ARROW
 1865     'rarr': u'\u2192',                            #RIGHTWARDS ARROW
 1866     'rarrap': u'\u2975',                          #RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
 1867     'rarrb': u'\u21e5',                           #RIGHTWARDS ARROW TO BAR
 1868     'rarrbfs': u'\u2920',                         #RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
 1869     'rarrc': u'\u2933',                           #WAVE ARROW POINTING DIRECTLY RIGHT
 1870     'rarrfs': u'\u291e',                          #RIGHTWARDS ARROW TO BLACK DIAMOND
 1871     'rarrhk': u'\u21aa',                          #RIGHTWARDS ARROW WITH HOOK
 1872     'rarrlp': u'\u21ac',                          #RIGHTWARDS ARROW WITH LOOP
 1873     'rarrpl': u'\u2945',                          #RIGHTWARDS ARROW WITH PLUS BELOW
 1874     'rarrsim': u'\u2974',                         #RIGHTWARDS ARROW ABOVE TILDE OPERATOR
 1875     'Rarrtl': u'\u2916',                          #RIGHTWARDS TWO-HEADED ARROW WITH TAIL
 1876     'rarrtl': u'\u21a3',                          #RIGHTWARDS ARROW WITH TAIL
 1877     'rarrw': u'\u219d',                           #RIGHTWARDS WAVE ARROW
 1878     'rAtail': u'\u291c',                          #RIGHTWARDS DOUBLE ARROW-TAIL
 1879     'ratail': u'\u291a',                          #RIGHTWARDS ARROW-TAIL
 1880     'ratio': u'\u2236',                           #RATIO
 1881     'rationals': u'\u211a',                       #DOUBLE-STRUCK CAPITAL Q
 1882     'RBarr': u'\u2910',                           #RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
 1883     'rBarr': u'\u290f',                           #RIGHTWARDS TRIPLE DASH ARROW
 1884     'rbarr': u'\u290d',                           #RIGHTWARDS DOUBLE DASH ARROW
 1885     'rbbrk': u'\u2773',                           #LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
 1886     'rbrace': u'}',                               #RIGHT CURLY BRACKET
 1887     'rbrack': u']',                               #RIGHT SQUARE BRACKET
 1888     'rbrke': u'\u298c',                           #RIGHT SQUARE BRACKET WITH UNDERBAR
 1889     'rbrksld': u'\u298e',                         #RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
 1890     'rbrkslu': u'\u2990',                         #RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
 1891     'Rcaron': u'\u0158',                          #LATIN CAPITAL LETTER R WITH CARON
 1892     'rcaron': u'\u0159',                          #LATIN SMALL LETTER R WITH CARON
 1893     'Rcedil': u'\u0156',                          #LATIN CAPITAL LETTER R WITH CEDILLA
 1894     'rcedil': u'\u0157',                          #LATIN SMALL LETTER R WITH CEDILLA
 1895     'rceil': u'\u2309',                           #RIGHT CEILING
 1896     'rcub': u'}',                                 #RIGHT CURLY BRACKET
 1897     'Rcy': u'\u0420',                             #CYRILLIC CAPITAL LETTER ER
 1898     'rcy': u'\u0440',                             #CYRILLIC SMALL LETTER ER
 1899     'rdca': u'\u2937',                            #ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
 1900     'rdldhar': u'\u2969',                         #RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
 1901     'rdquo': u'\u201d',                           #RIGHT DOUBLE QUOTATION MARK
 1902     'rdquor': u'\u201d',                          #RIGHT DOUBLE QUOTATION MARK
 1903     'rdsh': u'\u21b3',                            #DOWNWARDS ARROW WITH TIP RIGHTWARDS
 1904     'Re': u'\u211c',                              #BLACK-LETTER CAPITAL R
 1905     'real': u'\u211c',                            #BLACK-LETTER CAPITAL R
 1906     'realine': u'\u211b',                         #SCRIPT CAPITAL R
 1907     'realpart': u'\u211c',                        #BLACK-LETTER CAPITAL R
 1908     'reals': u'\u211d',                           #DOUBLE-STRUCK CAPITAL R
 1909     'rect': u'\u25ad',                            #WHITE RECTANGLE
 1910     'REG': u'\xae',                               #REGISTERED SIGN
 1911     'reg': u'\xae',                               #REGISTERED SIGN
 1912     'ReverseElement': u'\u220b',                  #CONTAINS AS MEMBER
 1913     'ReverseEquilibrium': u'\u21cb',              #LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
 1914     'ReverseUpEquilibrium': u'\u296f',            #DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
 1915     'rfisht': u'\u297d',                          #RIGHT FISH TAIL
 1916     'rfloor': u'\u230b',                          #RIGHT FLOOR
 1917     'Rfr': u'\u211c',                             #BLACK-LETTER CAPITAL R
 1918     'rfr': u'\U0001d52f',                         #MATHEMATICAL FRAKTUR SMALL R
 1919     'rHar': u'\u2964',                            #RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
 1920     'rhard': u'\u21c1',                           #RIGHTWARDS HARPOON WITH BARB DOWNWARDS
 1921     'rharu': u'\u21c0',                           #RIGHTWARDS HARPOON WITH BARB UPWARDS
 1922     'rharul': u'\u296c',                          #RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
 1923     'Rho': u'\u03a1',                             #GREEK CAPITAL LETTER RHO
 1924     'rho': u'\u03c1',                             #GREEK SMALL LETTER RHO
 1925     'rhov': u'\u03f1',                            #GREEK RHO SYMBOL
 1926     'RightAngleBracket': u'\u27e9',               #MATHEMATICAL RIGHT ANGLE BRACKET
 1927     'RightArrow': u'\u2192',                      #RIGHTWARDS ARROW
 1928     'Rightarrow': u'\u21d2',                      #RIGHTWARDS DOUBLE ARROW
 1929     'rightarrow': u'\u2192',                      #RIGHTWARDS ARROW
 1930     'RightArrowBar': u'\u21e5',                   #RIGHTWARDS ARROW TO BAR
 1931     'RightArrowLeftArrow': u'\u21c4',             #RIGHTWARDS ARROW OVER LEFTWARDS ARROW
 1932     'rightarrowtail': u'\u21a3',                  #RIGHTWARDS ARROW WITH TAIL
 1933     'RightCeiling': u'\u2309',                    #RIGHT CEILING
 1934     'RightDoubleBracket': u'\u27e7',              #MATHEMATICAL RIGHT WHITE SQUARE BRACKET
 1935     'RightDownTeeVector': u'\u295d',              #DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
 1936     'RightDownVector': u'\u21c2',                 #DOWNWARDS HARPOON WITH BARB RIGHTWARDS
 1937     'RightDownVectorBar': u'\u2955',              #DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
 1938     'RightFloor': u'\u230b',                      #RIGHT FLOOR
 1939     'rightharpoondown': u'\u21c1',                #RIGHTWARDS HARPOON WITH BARB DOWNWARDS
 1940     'rightharpoonup': u'\u21c0',                  #RIGHTWARDS HARPOON WITH BARB UPWARDS
 1941     'rightleftarrows': u'\u21c4',                 #RIGHTWARDS ARROW OVER LEFTWARDS ARROW
 1942     'rightleftharpoons': u'\u21cc',               #RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
 1943     'rightrightarrows': u'\u21c9',                #RIGHTWARDS PAIRED ARROWS
 1944     'rightsquigarrow': u'\u219d',                 #RIGHTWARDS WAVE ARROW
 1945     'RightTee': u'\u22a2',                        #RIGHT TACK
 1946     'RightTeeArrow': u'\u21a6',                   #RIGHTWARDS ARROW FROM BAR
 1947     'RightTeeVector': u'\u295b',                  #RIGHTWARDS HARPOON WITH BARB UP FROM BAR
 1948     'rightthreetimes': u'\u22cc',                 #RIGHT SEMIDIRECT PRODUCT
 1949     'RightTriangle': u'\u22b3',                   #CONTAINS AS NORMAL SUBGROUP
 1950     'RightTriangleBar': u'\u29d0',                #VERTICAL BAR BESIDE RIGHT TRIANGLE
 1951     'RightTriangleEqual': u'\u22b5',              #CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
 1952     'RightUpDownVector': u'\u294f',               #UP BARB RIGHT DOWN BARB RIGHT HARPOON
 1953     'RightUpTeeVector': u'\u295c',                #UPWARDS HARPOON WITH BARB RIGHT FROM BAR
 1954     'RightUpVector': u'\u21be',                   #UPWARDS HARPOON WITH BARB RIGHTWARDS
 1955     'RightUpVectorBar': u'\u2954',                #UPWARDS HARPOON WITH BARB RIGHT TO BAR
 1956     'RightVector': u'\u21c0',                     #RIGHTWARDS HARPOON WITH BARB UPWARDS
 1957     'RightVectorBar': u'\u2953',                  #RIGHTWARDS HARPOON WITH BARB UP TO BAR
 1958     'ring': u'\u02da',                            #RING ABOVE
 1959     'risingdotseq': u'\u2253',                    #IMAGE OF OR APPROXIMATELY EQUAL TO
 1960     'rlarr': u'\u21c4',                           #RIGHTWARDS ARROW OVER LEFTWARDS ARROW
 1961     'rlhar': u'\u21cc',                           #RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
 1962     'rlm': u'\u200f',                             #RIGHT-TO-LEFT MARK
 1963     'rmoust': u'\u23b1',                          #UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
 1964     'rmoustache': u'\u23b1',                      #UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
 1965     'rnmid': u'\u2aee',                           #DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
 1966     'roang': u'\u27ed',                           #MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
 1967     'roarr': u'\u21fe',                           #RIGHTWARDS OPEN-HEADED ARROW
 1968     'robrk': u'\u27e7',                           #MATHEMATICAL RIGHT WHITE SQUARE BRACKET
 1969     'ropar': u'\u2986',                           #RIGHT WHITE PARENTHESIS
 1970     'Ropf': u'\u211d',                            #DOUBLE-STRUCK CAPITAL R
 1971     'ropf': u'\U0001d563',                        #MATHEMATICAL DOUBLE-STRUCK SMALL R
 1972     'roplus': u'\u2a2e',                          #PLUS SIGN IN RIGHT HALF CIRCLE
 1973     'rotimes': u'\u2a35',                         #MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
 1974     'RoundImplies': u'\u2970',                    #RIGHT DOUBLE ARROW WITH ROUNDED HEAD
 1975     'rpar': u')',                                 #RIGHT PARENTHESIS
 1976     'rpargt': u'\u2994',                          #RIGHT ARC GREATER-THAN BRACKET
 1977     'rppolint': u'\u2a12',                        #LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
 1978     'rrarr': u'\u21c9',                           #RIGHTWARDS PAIRED ARROWS
 1979     'Rrightarrow': u'\u21db',                     #RIGHTWARDS TRIPLE ARROW
 1980     'rsaquo': u'\u203a',                          #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
 1981     'Rscr': u'\u211b',                            #SCRIPT CAPITAL R
 1982     'rscr': u'\U0001d4c7',                        #MATHEMATICAL SCRIPT SMALL R
 1983     'Rsh': u'\u21b1',                             #UPWARDS ARROW WITH TIP RIGHTWARDS
 1984     'rsh': u'\u21b1',                             #UPWARDS ARROW WITH TIP RIGHTWARDS
 1985     'rsqb': u']',                                 #RIGHT SQUARE BRACKET
 1986     'rsquo': u'\u2019',                           #RIGHT SINGLE QUOTATION MARK
 1987     'rsquor': u'\u2019',                          #RIGHT SINGLE QUOTATION MARK
 1988     'rthree': u'\u22cc',                          #RIGHT SEMIDIRECT PRODUCT
 1989     'rtimes': u'\u22ca',                          #RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
 1990     'rtri': u'\u25b9',                            #WHITE RIGHT-POINTING SMALL TRIANGLE
 1991     'rtrie': u'\u22b5',                           #CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
 1992     'rtrif': u'\u25b8',                           #BLACK RIGHT-POINTING SMALL TRIANGLE
 1993     'rtriltri': u'\u29ce',                        #RIGHT TRIANGLE ABOVE LEFT TRIANGLE
 1994     'RuleDelayed': u'\u29f4',                     #RULE-DELAYED
 1995     'ruluhar': u'\u2968',                         #RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
 1996     'rx': u'\u211e',                              #PRESCRIPTION TAKE
 1997     'Sacute': u'\u015a',                          #LATIN CAPITAL LETTER S WITH ACUTE
 1998     'sacute': u'\u015b',                          #LATIN SMALL LETTER S WITH ACUTE
 1999     'sbquo': u'\u201a',                           #SINGLE LOW-9 QUOTATION MARK
 2000     'Sc': u'\u2abc',                              #DOUBLE SUCCEEDS
 2001     'sc': u'\u227b',                              #SUCCEEDS
 2002     'scap': u'\u2ab8',                            #SUCCEEDS ABOVE ALMOST EQUAL TO
 2003     'Scaron': u'\u0160',                          #LATIN CAPITAL LETTER S WITH CARON
 2004     'scaron': u'\u0161',                          #LATIN SMALL LETTER S WITH CARON
 2005     'sccue': u'\u227d',                           #SUCCEEDS OR EQUAL TO
 2006     'scE': u'\u2ab4',                             #SUCCEEDS ABOVE EQUALS SIGN
 2007     'sce': u'\u2ab0',                             #SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
 2008     'Scedil': u'\u015e',                          #LATIN CAPITAL LETTER S WITH CEDILLA
 2009     'scedil': u'\u015f',                          #LATIN SMALL LETTER S WITH CEDILLA
 2010     'Scirc': u'\u015c',                           #LATIN CAPITAL LETTER S WITH CIRCUMFLEX
 2011     'scirc': u'\u015d',                           #LATIN SMALL LETTER S WITH CIRCUMFLEX
 2012     'scnap': u'\u2aba',                           #SUCCEEDS ABOVE NOT ALMOST EQUAL TO
 2013     'scnE': u'\u2ab6',                            #SUCCEEDS ABOVE NOT EQUAL TO
 2014     'scnsim': u'\u22e9',                          #SUCCEEDS BUT NOT EQUIVALENT TO
 2015     'scpolint': u'\u2a13',                        #LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
 2016     'scsim': u'\u227f',                           #SUCCEEDS OR EQUIVALENT TO
 2017     'Scy': u'\u0421',                             #CYRILLIC CAPITAL LETTER ES
 2018     'scy': u'\u0441',                             #CYRILLIC SMALL LETTER ES
 2019     'sdot': u'\u22c5',                            #DOT OPERATOR
 2020     'sdotb': u'\u22a1',                           #SQUARED DOT OPERATOR
 2021     'sdote': u'\u2a66',                           #EQUALS SIGN WITH DOT BELOW
 2022     'searhk': u'\u2925',                          #SOUTH EAST ARROW WITH HOOK
 2023     'seArr': u'\u21d8',                           #SOUTH EAST DOUBLE ARROW
 2024     'searr': u'\u2198',                           #SOUTH EAST ARROW
 2025     'searrow': u'\u2198',                         #SOUTH EAST ARROW
 2026     'sect': u'\xa7',                              #SECTION SIGN
 2027     'semi': u';',                                 #SEMICOLON
 2028     'seswar': u'\u2929',                          #SOUTH EAST ARROW AND SOUTH WEST ARROW
 2029     'setminus': u'\u2216',                        #SET MINUS
 2030     'setmn': u'\u2216',                           #SET MINUS
 2031     'sext': u'\u2736',                            #SIX POINTED BLACK STAR
 2032     'Sfr': u'\U0001d516',                         #MATHEMATICAL FRAKTUR CAPITAL S
 2033     'sfr': u'\U0001d530',                         #MATHEMATICAL FRAKTUR SMALL S
 2034     'sfrown': u'\u2322',                          #FROWN
 2035     'sharp': u'\u266f',                           #MUSIC SHARP SIGN
 2036     'SHCHcy': u'\u0429',                          #CYRILLIC CAPITAL LETTER SHCHA
 2037     'shchcy': u'\u0449',                          #CYRILLIC SMALL LETTER SHCHA
 2038     'SHcy': u'\u0428',                            #CYRILLIC CAPITAL LETTER SHA
 2039     'shcy': u'\u0448',                            #CYRILLIC SMALL LETTER SHA
 2040     'ShortDownArrow': u'\u2193',                  #DOWNWARDS ARROW
 2041     'ShortLeftArrow': u'\u2190',                  #LEFTWARDS ARROW
 2042     'shortmid': u'\u2223',                        #DIVIDES
 2043     'shortparallel': u'\u2225',                   #PARALLEL TO
 2044     'ShortRightArrow': u'\u2192',                 #RIGHTWARDS ARROW
 2045     'ShortUpArrow': u'\u2191',                    #UPWARDS ARROW
 2046     'shy': u'\xad',                               #SOFT HYPHEN
 2047     'Sigma': u'\u03a3',                           #GREEK CAPITAL LETTER SIGMA
 2048     'sigma': u'\u03c3',                           #GREEK SMALL LETTER SIGMA
 2049     'sigmaf': u'\u03c2',                          #GREEK SMALL LETTER FINAL SIGMA
 2050     'sigmav': u'\u03c2',                          #GREEK SMALL LETTER FINAL SIGMA
 2051     'sim': u'\u223c',                             #TILDE OPERATOR
 2052     'simdot': u'\u2a6a',                          #TILDE OPERATOR WITH DOT ABOVE
 2053     'sime': u'\u2243',                            #ASYMPTOTICALLY EQUAL TO
 2054     'simeq': u'\u2243',                           #ASYMPTOTICALLY EQUAL TO
 2055     'simg': u'\u2a9e',                            #SIMILAR OR GREATER-THAN
 2056     'simgE': u'\u2aa0',                           #SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
 2057     'siml': u'\u2a9d',                            #SIMILAR OR LESS-THAN
 2058     'simlE': u'\u2a9f',                           #SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
 2059     'simne': u'\u2246',                           #APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
 2060     'simplus': u'\u2a24',                         #PLUS SIGN WITH TILDE ABOVE
 2061     'simrarr': u'\u2972',                         #TILDE OPERATOR ABOVE RIGHTWARDS ARROW
 2062     'slarr': u'\u2190',                           #LEFTWARDS ARROW
 2063     'SmallCircle': u'\u2218',                     #RING OPERATOR
 2064     'smallsetminus': u'\u2216',                   #SET MINUS
 2065     'smashp': u'\u2a33',                          #SMASH PRODUCT
 2066     'smeparsl': u'\u29e4',                        #EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
 2067     'smid': u'\u2223',                            #DIVIDES
 2068     'smile': u'\u2323',                           #SMILE
 2069     'smt': u'\u2aaa',                             #SMALLER THAN
 2070     'smte': u'\u2aac',                            #SMALLER THAN OR EQUAL TO
 2071     'smtes': u'\u2aac\ufe00',                     #SMALLER THAN OR slanted EQUAL
 2072     'SOFTcy': u'\u042c',                          #CYRILLIC CAPITAL LETTER SOFT SIGN
 2073     'softcy': u'\u044c',                          #CYRILLIC SMALL LETTER SOFT SIGN
 2074     'sol': u'/',                                  #SOLIDUS
 2075     'solb': u'\u29c4',                            #SQUARED RISING DIAGONAL SLASH
 2076     'solbar': u'\u233f',                          #APL FUNCTIONAL SYMBOL SLASH BAR
 2077     'Sopf': u'\U0001d54a',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL S
 2078     'sopf': u'\U0001d564',                        #MATHEMATICAL DOUBLE-STRUCK SMALL S
 2079     'spades': u'\u2660',                          #BLACK SPADE SUIT
 2080     'spadesuit': u'\u2660',                       #BLACK SPADE SUIT
 2081     'spar': u'\u2225',                            #PARALLEL TO
 2082     'sqcap': u'\u2293',                           #SQUARE CAP
 2083     'sqcaps': u'\u2293\ufe00',                    #SQUARE CAP with serifs
 2084     'sqcup': u'\u2294',                           #SQUARE CUP
 2085     'sqcups': u'\u2294\ufe00',                    #SQUARE CUP with serifs
 2086     'Sqrt': u'\u221a',                            #SQUARE ROOT
 2087     'sqsub': u'\u228f',                           #SQUARE IMAGE OF
 2088     'sqsube': u'\u2291',                          #SQUARE IMAGE OF OR EQUAL TO
 2089     'sqsubset': u'\u228f',                        #SQUARE IMAGE OF
 2090     'sqsubseteq': u'\u2291',                      #SQUARE IMAGE OF OR EQUAL TO
 2091     'sqsup': u'\u2290',                           #SQUARE ORIGINAL OF
 2092     'sqsupe': u'\u2292',                          #SQUARE ORIGINAL OF OR EQUAL TO
 2093     'sqsupset': u'\u2290',                        #SQUARE ORIGINAL OF
 2094     'sqsupseteq': u'\u2292',                      #SQUARE ORIGINAL OF OR EQUAL TO
 2095     'squ': u'\u25a1',                             #WHITE SQUARE
 2096     'Square': u'\u25a1',                          #WHITE SQUARE
 2097     'square': u'\u25a1',                          #WHITE SQUARE
 2098     'SquareIntersection': u'\u2293',              #SQUARE CAP
 2099     'SquareSubset': u'\u228f',                    #SQUARE IMAGE OF
 2100     'SquareSubsetEqual': u'\u2291',               #SQUARE IMAGE OF OR EQUAL TO
 2101     'SquareSuperset': u'\u2290',                  #SQUARE ORIGINAL OF
 2102     'SquareSupersetEqual': u'\u2292',             #SQUARE ORIGINAL OF OR EQUAL TO
 2103     'SquareUnion': u'\u2294',                     #SQUARE CUP
 2104     'squarf': u'\u25aa',                          #BLACK SMALL SQUARE
 2105     'squf': u'\u25aa',                            #BLACK SMALL SQUARE
 2106     'srarr': u'\u2192',                           #RIGHTWARDS ARROW
 2107     'Sscr': u'\U0001d4ae',                        #MATHEMATICAL SCRIPT CAPITAL S
 2108     'sscr': u'\U0001d4c8',                        #MATHEMATICAL SCRIPT SMALL S
 2109     'ssetmn': u'\u2216',                          #SET MINUS
 2110     'ssmile': u'\u2323',                          #SMILE
 2111     'sstarf': u'\u22c6',                          #STAR OPERATOR
 2112     'Star': u'\u22c6',                            #STAR OPERATOR
 2113     'star': u'\u2606',                            #WHITE STAR
 2114     'starf': u'\u2605',                           #BLACK STAR
 2115     'straightepsilon': u'\u03f5',                 #GREEK LUNATE EPSILON SYMBOL
 2116     'straightphi': u'\u03d5',                     #GREEK PHI SYMBOL
 2117     'strns': u'\xaf',                             #MACRON
 2118     'Sub': u'\u22d0',                             #DOUBLE SUBSET
 2119     'sub': u'\u2282',                             #SUBSET OF
 2120     'subdot': u'\u2abd',                          #SUBSET WITH DOT
 2121     'subE': u'\u2ac5',                            #SUBSET OF ABOVE EQUALS SIGN
 2122     'sube': u'\u2286',                            #SUBSET OF OR EQUAL TO
 2123     'subedot': u'\u2ac3',                         #SUBSET OF OR EQUAL TO WITH DOT ABOVE
 2124     'submult': u'\u2ac1',                         #SUBSET WITH MULTIPLICATION SIGN BELOW
 2125     'subnE': u'\u2acb',                           #SUBSET OF ABOVE NOT EQUAL TO
 2126     'subne': u'\u228a',                           #SUBSET OF WITH NOT EQUAL TO
 2127     'subplus': u'\u2abf',                         #SUBSET WITH PLUS SIGN BELOW
 2128     'subrarr': u'\u2979',                         #SUBSET ABOVE RIGHTWARDS ARROW
 2129     'Subset': u'\u22d0',                          #DOUBLE SUBSET
 2130     'subset': u'\u2282',                          #SUBSET OF
 2131     'subseteq': u'\u2286',                        #SUBSET OF OR EQUAL TO
 2132     'subseteqq': u'\u2ac5',                       #SUBSET OF ABOVE EQUALS SIGN
 2133     'SubsetEqual': u'\u2286',                     #SUBSET OF OR EQUAL TO
 2134     'subsetneq': u'\u228a',                       #SUBSET OF WITH NOT EQUAL TO
 2135     'subsetneqq': u'\u2acb',                      #SUBSET OF ABOVE NOT EQUAL TO
 2136     'subsim': u'\u2ac7',                          #SUBSET OF ABOVE TILDE OPERATOR
 2137     'subsub': u'\u2ad5',                          #SUBSET ABOVE SUBSET
 2138     'subsup': u'\u2ad3',                          #SUBSET ABOVE SUPERSET
 2139     'succ': u'\u227b',                            #SUCCEEDS
 2140     'succapprox': u'\u2ab8',                      #SUCCEEDS ABOVE ALMOST EQUAL TO
 2141     'succcurlyeq': u'\u227d',                     #SUCCEEDS OR EQUAL TO
 2142     'Succeeds': u'\u227b',                        #SUCCEEDS
 2143     'SucceedsEqual': u'\u2ab0',                   #SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
 2144     'SucceedsSlantEqual': u'\u227d',              #SUCCEEDS OR EQUAL TO
 2145     'SucceedsTilde': u'\u227f',                   #SUCCEEDS OR EQUIVALENT TO
 2146     'succeq': u'\u2ab0',                          #SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
 2147     'succnapprox': u'\u2aba',                     #SUCCEEDS ABOVE NOT ALMOST EQUAL TO
 2148     'succneqq': u'\u2ab6',                        #SUCCEEDS ABOVE NOT EQUAL TO
 2149     'succnsim': u'\u22e9',                        #SUCCEEDS BUT NOT EQUIVALENT TO
 2150     'succsim': u'\u227f',                         #SUCCEEDS OR EQUIVALENT TO
 2151     'SuchThat': u'\u220b',                        #CONTAINS AS MEMBER
 2152     'Sum': u'\u2211',                             #N-ARY SUMMATION
 2153     'sum': u'\u2211',                             #N-ARY SUMMATION
 2154     'sung': u'\u266a',                            #EIGHTH NOTE
 2155     'Sup': u'\u22d1',                             #DOUBLE SUPERSET
 2156     'sup': u'\u2283',                             #SUPERSET OF
 2157     'sup1': u'\xb9',                              #SUPERSCRIPT ONE
 2158     'sup2': u'\xb2',                              #SUPERSCRIPT TWO
 2159     'sup3': u'\xb3',                              #SUPERSCRIPT THREE
 2160     'supdot': u'\u2abe',                          #SUPERSET WITH DOT
 2161     'supdsub': u'\u2ad8',                         #SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
 2162     'supE': u'\u2ac6',                            #SUPERSET OF ABOVE EQUALS SIGN
 2163     'supe': u'\u2287',                            #SUPERSET OF OR EQUAL TO
 2164     'supedot': u'\u2ac4',                         #SUPERSET OF OR EQUAL TO WITH DOT ABOVE
 2165     'Superset': u'\u2283',                        #SUPERSET OF
 2166     'SupersetEqual': u'\u2287',                   #SUPERSET OF OR EQUAL TO
 2167     'suphsol': u'\u27c9',                         #SUPERSET PRECEDING SOLIDUS
 2168     'suphsub': u'\u2ad7',                         #SUPERSET BESIDE SUBSET
 2169     'suplarr': u'\u297b',                         #SUPERSET ABOVE LEFTWARDS ARROW
 2170     'supmult': u'\u2ac2',                         #SUPERSET WITH MULTIPLICATION SIGN BELOW
 2171     'supnE': u'\u2acc',                           #SUPERSET OF ABOVE NOT EQUAL TO
 2172     'supne': u'\u228b',                           #SUPERSET OF WITH NOT EQUAL TO
 2173     'supplus': u'\u2ac0',                         #SUPERSET WITH PLUS SIGN BELOW
 2174     'Supset': u'\u22d1',                          #DOUBLE SUPERSET
 2175     'supset': u'\u2283',                          #SUPERSET OF
 2176     'supseteq': u'\u2287',                        #SUPERSET OF OR EQUAL TO
 2177     'supseteqq': u'\u2ac6',                       #SUPERSET OF ABOVE EQUALS SIGN
 2178     'supsetneq': u'\u228b',                       #SUPERSET OF WITH NOT EQUAL TO
 2179     'supsetneqq': u'\u2acc',                      #SUPERSET OF ABOVE NOT EQUAL TO
 2180     'supsim': u'\u2ac8',                          #SUPERSET OF ABOVE TILDE OPERATOR
 2181     'supsub': u'\u2ad4',                          #SUPERSET ABOVE SUBSET
 2182     'supsup': u'\u2ad6',                          #SUPERSET ABOVE SUPERSET
 2183     'swarhk': u'\u2926',                          #SOUTH WEST ARROW WITH HOOK
 2184     'swArr': u'\u21d9',                           #SOUTH WEST DOUBLE ARROW
 2185     'swarr': u'\u2199',                           #SOUTH WEST ARROW
 2186     'swarrow': u'\u2199',                         #SOUTH WEST ARROW
 2187     'swnwar': u'\u292a',                          #SOUTH WEST ARROW AND NORTH WEST ARROW
 2188     'szlig': u'\xdf',                             #LATIN SMALL LETTER SHARP S
 2189     'Tab': u'\t',                                 #CHARACTER TABULATION
 2190     'target': u'\u2316',                          #POSITION INDICATOR
 2191     'Tau': u'\u03a4',                             #GREEK CAPITAL LETTER TAU
 2192     'tau': u'\u03c4',                             #GREEK SMALL LETTER TAU
 2193     'tbrk': u'\u23b4',                            #TOP SQUARE BRACKET
 2194     'Tcaron': u'\u0164',                          #LATIN CAPITAL LETTER T WITH CARON
 2195     'tcaron': u'\u0165',                          #LATIN SMALL LETTER T WITH CARON
 2196     'Tcedil': u'\u0162',                          #LATIN CAPITAL LETTER T WITH CEDILLA
 2197     'tcedil': u'\u0163',                          #LATIN SMALL LETTER T WITH CEDILLA
 2198     'Tcy': u'\u0422',                             #CYRILLIC CAPITAL LETTER TE
 2199     'tcy': u'\u0442',                             #CYRILLIC SMALL LETTER TE
 2200     'telrec': u'\u2315',                          #TELEPHONE RECORDER
 2201     'Tfr': u'\U0001d517',                         #MATHEMATICAL FRAKTUR CAPITAL T
 2202     'tfr': u'\U0001d531',                         #MATHEMATICAL FRAKTUR SMALL T
 2203     'there4': u'\u2234',                          #THEREFORE
 2204     'Therefore': u'\u2234',                       #THEREFORE
 2205     'therefore': u'\u2234',                       #THEREFORE
 2206     'Theta': u'\u0398',                           #GREEK CAPITAL LETTER THETA
 2207     'theta': u'\u03b8',                           #GREEK SMALL LETTER THETA
 2208     'thetasym': u'\u03d1',                        #GREEK THETA SYMBOL
 2209     'thetav': u'\u03d1',                          #GREEK THETA SYMBOL
 2210     'thickapprox': u'\u2248',                     #ALMOST EQUAL TO
 2211     'thicksim': u'\u223c',                        #TILDE OPERATOR
 2212     'ThickSpace': u'\u205f\u200a',                #space of width 5/18 em
 2213     'thinsp': u'\u2009',                          #THIN SPACE
 2214     'ThinSpace': u'\u2009',                       #THIN SPACE
 2215     'thkap': u'\u2248',                           #ALMOST EQUAL TO
 2216     'thksim': u'\u223c',                          #TILDE OPERATOR
 2217     'THORN': u'\xde',                             #LATIN CAPITAL LETTER THORN
 2218     'thorn': u'\xfe',                             #LATIN SMALL LETTER THORN
 2219     'Tilde': u'\u223c',                           #TILDE OPERATOR
 2220     'tilde': u'\u02dc',                           #SMALL TILDE
 2221     'TildeEqual': u'\u2243',                      #ASYMPTOTICALLY EQUAL TO
 2222     'TildeFullEqual': u'\u2245',                  #APPROXIMATELY EQUAL TO
 2223     'TildeTilde': u'\u2248',                      #ALMOST EQUAL TO
 2224     'times': u'\xd7',                             #MULTIPLICATION SIGN
 2225     'timesb': u'\u22a0',                          #SQUARED TIMES
 2226     'timesbar': u'\u2a31',                        #MULTIPLICATION SIGN WITH UNDERBAR
 2227     'timesd': u'\u2a30',                          #MULTIPLICATION SIGN WITH DOT ABOVE
 2228     'tint': u'\u222d',                            #TRIPLE INTEGRAL
 2229     'toea': u'\u2928',                            #NORTH EAST ARROW AND SOUTH EAST ARROW
 2230     'top': u'\u22a4',                             #DOWN TACK
 2231     'topbot': u'\u2336',                          #APL FUNCTIONAL SYMBOL I-BEAM
 2232     'topcir': u'\u2af1',                          #DOWN TACK WITH CIRCLE BELOW
 2233     'Topf': u'\U0001d54b',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL T
 2234     'topf': u'\U0001d565',                        #MATHEMATICAL DOUBLE-STRUCK SMALL T
 2235     'topfork': u'\u2ada',                         #PITCHFORK WITH TEE TOP
 2236     'tosa': u'\u2929',                            #SOUTH EAST ARROW AND SOUTH WEST ARROW
 2237     'tprime': u'\u2034',                          #TRIPLE PRIME
 2238     'TRADE': u'\u2122',                           #TRADE MARK SIGN
 2239     'trade': u'\u2122',                           #TRADE MARK SIGN
 2240     'triangle': u'\u25b5',                        #WHITE UP-POINTING SMALL TRIANGLE
 2241     'triangledown': u'\u25bf',                    #WHITE DOWN-POINTING SMALL TRIANGLE
 2242     'triangleleft': u'\u25c3',                    #WHITE LEFT-POINTING SMALL TRIANGLE
 2243     'trianglelefteq': u'\u22b4',                  #NORMAL SUBGROUP OF OR EQUAL TO
 2244     'triangleq': u'\u225c',                       #DELTA EQUAL TO
 2245     'triangleright': u'\u25b9',                   #WHITE RIGHT-POINTING SMALL TRIANGLE
 2246     'trianglerighteq': u'\u22b5',                 #CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
 2247     'tridot': u'\u25ec',                          #WHITE UP-POINTING TRIANGLE WITH DOT
 2248     'trie': u'\u225c',                            #DELTA EQUAL TO
 2249     'triminus': u'\u2a3a',                        #MINUS SIGN IN TRIANGLE
 2250     'triplus': u'\u2a39',                         #PLUS SIGN IN TRIANGLE
 2251     'trisb': u'\u29cd',                           #TRIANGLE WITH SERIFS AT BOTTOM
 2252     'tritime': u'\u2a3b',                         #MULTIPLICATION SIGN IN TRIANGLE
 2253     'trpezium': u'\u23e2',                        #WHITE TRAPEZIUM
 2254     'Tscr': u'\U0001d4af',                        #MATHEMATICAL SCRIPT CAPITAL T
 2255     'tscr': u'\U0001d4c9',                        #MATHEMATICAL SCRIPT SMALL T
 2256     'TScy': u'\u0426',                            #CYRILLIC CAPITAL LETTER TSE
 2257     'tscy': u'\u0446',                            #CYRILLIC SMALL LETTER TSE
 2258     'TSHcy': u'\u040b',                           #CYRILLIC CAPITAL LETTER TSHE
 2259     'tshcy': u'\u045b',                           #CYRILLIC SMALL LETTER TSHE
 2260     'Tstrok': u'\u0166',                          #LATIN CAPITAL LETTER T WITH STROKE
 2261     'tstrok': u'\u0167',                          #LATIN SMALL LETTER T WITH STROKE
 2262     'twixt': u'\u226c',                           #BETWEEN
 2263     'twoheadleftarrow': u'\u219e',                #LEFTWARDS TWO HEADED ARROW
 2264     'twoheadrightarrow': u'\u21a0',               #RIGHTWARDS TWO HEADED ARROW
 2265     'Uacute': u'\xda',                            #LATIN CAPITAL LETTER U WITH ACUTE
 2266     'uacute': u'\xfa',                            #LATIN SMALL LETTER U WITH ACUTE
 2267     'Uarr': u'\u219f',                            #UPWARDS TWO HEADED ARROW
 2268     'uArr': u'\u21d1',                            #UPWARDS DOUBLE ARROW
 2269     'uarr': u'\u2191',                            #UPWARDS ARROW
 2270     'Uarrocir': u'\u2949',                        #UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
 2271     'Ubrcy': u'\u040e',                           #CYRILLIC CAPITAL LETTER SHORT U
 2272     'ubrcy': u'\u045e',                           #CYRILLIC SMALL LETTER SHORT U
 2273     'Ubreve': u'\u016c',                          #LATIN CAPITAL LETTER U WITH BREVE
 2274     'ubreve': u'\u016d',                          #LATIN SMALL LETTER U WITH BREVE
 2275     'Ucirc': u'\xdb',                             #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 2276     'ucirc': u'\xfb',                             #LATIN SMALL LETTER U WITH CIRCUMFLEX
 2277     'Ucy': u'\u0423',                             #CYRILLIC CAPITAL LETTER U
 2278     'ucy': u'\u0443',                             #CYRILLIC SMALL LETTER U
 2279     'udarr': u'\u21c5',                           #UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
 2280     'Udblac': u'\u0170',                          #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
 2281     'udblac': u'\u0171',                          #LATIN SMALL LETTER U WITH DOUBLE ACUTE
 2282     'udhar': u'\u296e',                           #UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
 2283     'ufisht': u'\u297e',                          #UP FISH TAIL
 2284     'Ufr': u'\U0001d518',                         #MATHEMATICAL FRAKTUR CAPITAL U
 2285     'ufr': u'\U0001d532',                         #MATHEMATICAL FRAKTUR SMALL U
 2286     'Ugrave': u'\xd9',                            #LATIN CAPITAL LETTER U WITH GRAVE
 2287     'ugrave': u'\xf9',                            #LATIN SMALL LETTER U WITH GRAVE
 2288     'uHar': u'\u2963',                            #UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
 2289     'uharl': u'\u21bf',                           #UPWARDS HARPOON WITH BARB LEFTWARDS
 2290     'uharr': u'\u21be',                           #UPWARDS HARPOON WITH BARB RIGHTWARDS
 2291     'uhblk': u'\u2580',                           #UPPER HALF BLOCK
 2292     'ulcorn': u'\u231c',                          #TOP LEFT CORNER
 2293     'ulcorner': u'\u231c',                        #TOP LEFT CORNER
 2294     'ulcrop': u'\u230f',                          #TOP LEFT CROP
 2295     'ultri': u'\u25f8',                           #UPPER LEFT TRIANGLE
 2296     'Umacr': u'\u016a',                           #LATIN CAPITAL LETTER U WITH MACRON
 2297     'umacr': u'\u016b',                           #LATIN SMALL LETTER U WITH MACRON
 2298     'uml': u'\xa8',                               #DIAERESIS
 2299     'UnderBar': u'_',                             #LOW LINE
 2300     'UnderBrace': u'\u23df',                      #BOTTOM CURLY BRACKET
 2301     'UnderBracket': u'\u23b5',                    #BOTTOM SQUARE BRACKET
 2302     'UnderParenthesis': u'\u23dd',                #BOTTOM PARENTHESIS
 2303     'Union': u'\u22c3',                           #N-ARY UNION
 2304     'UnionPlus': u'\u228e',                       #MULTISET UNION
 2305     'Uogon': u'\u0172',                           #LATIN CAPITAL LETTER U WITH OGONEK
 2306     'uogon': u'\u0173',                           #LATIN SMALL LETTER U WITH OGONEK
 2307     'Uopf': u'\U0001d54c',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL U
 2308     'uopf': u'\U0001d566',                        #MATHEMATICAL DOUBLE-STRUCK SMALL U
 2309     'UpArrow': u'\u2191',                         #UPWARDS ARROW
 2310     'Uparrow': u'\u21d1',                         #UPWARDS DOUBLE ARROW
 2311     'uparrow': u'\u2191',                         #UPWARDS ARROW
 2312     'UpArrowBar': u'\u2912',                      #UPWARDS ARROW TO BAR
 2313     'UpArrowDownArrow': u'\u21c5',                #UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
 2314     'UpDownArrow': u'\u2195',                     #UP DOWN ARROW
 2315     'Updownarrow': u'\u21d5',                     #UP DOWN DOUBLE ARROW
 2316     'updownarrow': u'\u2195',                     #UP DOWN ARROW
 2317     'UpEquilibrium': u'\u296e',                   #UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
 2318     'upharpoonleft': u'\u21bf',                   #UPWARDS HARPOON WITH BARB LEFTWARDS
 2319     'upharpoonright': u'\u21be',                  #UPWARDS HARPOON WITH BARB RIGHTWARDS
 2320     'uplus': u'\u228e',                           #MULTISET UNION
 2321     'UpperLeftArrow': u'\u2196',                  #NORTH WEST ARROW
 2322     'UpperRightArrow': u'\u2197',                 #NORTH EAST ARROW
 2323     'Upsi': u'\u03d2',                            #GREEK UPSILON WITH HOOK SYMBOL
 2324     'upsi': u'\u03c5',                            #GREEK SMALL LETTER UPSILON
 2325     'upsih': u'\u03d2',                           #GREEK UPSILON WITH HOOK SYMBOL
 2326     'Upsilon': u'\u03a5',                         #GREEK CAPITAL LETTER UPSILON
 2327     'upsilon': u'\u03c5',                         #GREEK SMALL LETTER UPSILON
 2328     'UpTee': u'\u22a5',                           #UP TACK
 2329     'UpTeeArrow': u'\u21a5',                      #UPWARDS ARROW FROM BAR
 2330     'upuparrows': u'\u21c8',                      #UPWARDS PAIRED ARROWS
 2331     'urcorn': u'\u231d',                          #TOP RIGHT CORNER
 2332     'urcorner': u'\u231d',                        #TOP RIGHT CORNER
 2333     'urcrop': u'\u230e',                          #TOP RIGHT CROP
 2334     'Uring': u'\u016e',                           #LATIN CAPITAL LETTER U WITH RING ABOVE
 2335     'uring': u'\u016f',                           #LATIN SMALL LETTER U WITH RING ABOVE
 2336     'urtri': u'\u25f9',                           #UPPER RIGHT TRIANGLE
 2337     'Uscr': u'\U0001d4b0',                        #MATHEMATICAL SCRIPT CAPITAL U
 2338     'uscr': u'\U0001d4ca',                        #MATHEMATICAL SCRIPT SMALL U
 2339     'utdot': u'\u22f0',                           #UP RIGHT DIAGONAL ELLIPSIS
 2340     'Utilde': u'\u0168',                          #LATIN CAPITAL LETTER U WITH TILDE
 2341     'utilde': u'\u0169',                          #LATIN SMALL LETTER U WITH TILDE
 2342     'utri': u'\u25b5',                            #WHITE UP-POINTING SMALL TRIANGLE
 2343     'utrif': u'\u25b4',                           #BLACK UP-POINTING SMALL TRIANGLE
 2344     'uuarr': u'\u21c8',                           #UPWARDS PAIRED ARROWS
 2345     'Uuml': u'\xdc',                              #LATIN CAPITAL LETTER U WITH DIAERESIS
 2346     'uuml': u'\xfc',                              #LATIN SMALL LETTER U WITH DIAERESIS
 2347     'uwangle': u'\u29a7',                         #OBLIQUE ANGLE OPENING DOWN
 2348     'vangrt': u'\u299c',                          #RIGHT ANGLE VARIANT WITH SQUARE
 2349     'varepsilon': u'\u03f5',                      #GREEK LUNATE EPSILON SYMBOL
 2350     'varkappa': u'\u03f0',                        #GREEK KAPPA SYMBOL
 2351     'varnothing': u'\u2205',                      #EMPTY SET
 2352     'varphi': u'\u03d5',                          #GREEK PHI SYMBOL
 2353     'varpi': u'\u03d6',                           #GREEK PI SYMBOL
 2354     'varpropto': u'\u221d',                       #PROPORTIONAL TO
 2355     'vArr': u'\u21d5',                            #UP DOWN DOUBLE ARROW
 2356     'varr': u'\u2195',                            #UP DOWN ARROW
 2357     'varrho': u'\u03f1',                          #GREEK RHO SYMBOL
 2358     'varsigma': u'\u03c2',                        #GREEK SMALL LETTER FINAL SIGMA
 2359     'varsubsetneq': u'\u228a\ufe00',              #SUBSET OF WITH NOT EQUAL TO - variant with stroke through bottom members
 2360     'varsubsetneqq': u'\u2acb\ufe00',             #SUBSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members
 2361     'varsupsetneq': u'\u228b\ufe00',              #SUPERSET OF WITH NOT EQUAL TO - variant with stroke through bottom members
 2362     'varsupsetneqq': u'\u2acc\ufe00',             #SUPERSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members
 2363     'vartheta': u'\u03d1',                        #GREEK THETA SYMBOL
 2364     'vartriangleleft': u'\u22b2',                 #NORMAL SUBGROUP OF
 2365     'vartriangleright': u'\u22b3',                #CONTAINS AS NORMAL SUBGROUP
 2366     'Vbar': u'\u2aeb',                            #DOUBLE UP TACK
 2367     'vBar': u'\u2ae8',                            #SHORT UP TACK WITH UNDERBAR
 2368     'vBarv': u'\u2ae9',                           #SHORT UP TACK ABOVE SHORT DOWN TACK
 2369     'Vcy': u'\u0412',                             #CYRILLIC CAPITAL LETTER VE
 2370     'vcy': u'\u0432',                             #CYRILLIC SMALL LETTER VE
 2371     'VDash': u'\u22ab',                           #DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
 2372     'Vdash': u'\u22a9',                           #FORCES
 2373     'vDash': u'\u22a8',                           #TRUE
 2374     'vdash': u'\u22a2',                           #RIGHT TACK
 2375     'Vdashl': u'\u2ae6',                          #LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
 2376     'Vee': u'\u22c1',                             #N-ARY LOGICAL OR
 2377     'vee': u'\u2228',                             #LOGICAL OR
 2378     'veebar': u'\u22bb',                          #XOR
 2379     'veeeq': u'\u225a',                           #EQUIANGULAR TO
 2380     'vellip': u'\u22ee',                          #VERTICAL ELLIPSIS
 2381     'Verbar': u'\u2016',                          #DOUBLE VERTICAL LINE
 2382     'verbar': u'|',                               #VERTICAL LINE
 2383     'Vert': u'\u2016',                            #DOUBLE VERTICAL LINE
 2384     'vert': u'|',                                 #VERTICAL LINE
 2385     'VerticalBar': u'\u2223',                     #DIVIDES
 2386     'VerticalLine': u'|',                         #VERTICAL LINE
 2387     'VerticalSeparator': u'\u2758',               #LIGHT VERTICAL BAR
 2388     'VerticalTilde': u'\u2240',                   #WREATH PRODUCT
 2389     'VeryThinSpace': u'\u200a',                   #HAIR SPACE
 2390     'Vfr': u'\U0001d519',                         #MATHEMATICAL FRAKTUR CAPITAL V
 2391     'vfr': u'\U0001d533',                         #MATHEMATICAL FRAKTUR SMALL V
 2392     'vltri': u'\u22b2',                           #NORMAL SUBGROUP OF
 2393     'vnsub': u'\u2282\u20d2',                     #SUBSET OF with vertical line
 2394     'vnsup': u'\u2283\u20d2',                     #SUPERSET OF with vertical line
 2395     'Vopf': u'\U0001d54d',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL V
 2396     'vopf': u'\U0001d567',                        #MATHEMATICAL DOUBLE-STRUCK SMALL V
 2397     'vprop': u'\u221d',                           #PROPORTIONAL TO
 2398     'vrtri': u'\u22b3',                           #CONTAINS AS NORMAL SUBGROUP
 2399     'Vscr': u'\U0001d4b1',                        #MATHEMATICAL SCRIPT CAPITAL V
 2400     'vscr': u'\U0001d4cb',                        #MATHEMATICAL SCRIPT SMALL V
 2401     'vsubnE': u'\u2acb\ufe00',                    #SUBSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members
 2402     'vsubne': u'\u228a\ufe00',                    #SUBSET OF WITH NOT EQUAL TO - variant with stroke through bottom members
 2403     'vsupnE': u'\u2acc\ufe00',                    #SUPERSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members
 2404     'vsupne': u'\u228b\ufe00',                    #SUPERSET OF WITH NOT EQUAL TO - variant with stroke through bottom members
 2405     'Vvdash': u'\u22aa',                          #TRIPLE VERTICAL BAR RIGHT TURNSTILE
 2406     'vzigzag': u'\u299a',                         #VERTICAL ZIGZAG LINE
 2407     'Wcirc': u'\u0174',                           #LATIN CAPITAL LETTER W WITH CIRCUMFLEX
 2408     'wcirc': u'\u0175',                           #LATIN SMALL LETTER W WITH CIRCUMFLEX
 2409     'wedbar': u'\u2a5f',                          #LOGICAL AND WITH UNDERBAR
 2410     'Wedge': u'\u22c0',                           #N-ARY LOGICAL AND
 2411     'wedge': u'\u2227',                           #LOGICAL AND
 2412     'wedgeq': u'\u2259',                          #ESTIMATES
 2413     'weierp': u'\u2118',                          #SCRIPT CAPITAL P
 2414     'Wfr': u'\U0001d51a',                         #MATHEMATICAL FRAKTUR CAPITAL W
 2415     'wfr': u'\U0001d534',                         #MATHEMATICAL FRAKTUR SMALL W
 2416     'Wopf': u'\U0001d54e',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL W
 2417     'wopf': u'\U0001d568',                        #MATHEMATICAL DOUBLE-STRUCK SMALL W
 2418     'wp': u'\u2118',                              #SCRIPT CAPITAL P
 2419     'wr': u'\u2240',                              #WREATH PRODUCT
 2420     'wreath': u'\u2240',                          #WREATH PRODUCT
 2421     'Wscr': u'\U0001d4b2',                        #MATHEMATICAL SCRIPT CAPITAL W
 2422     'wscr': u'\U0001d4cc',                        #MATHEMATICAL SCRIPT SMALL W
 2423     'xcap': u'\u22c2',                            #N-ARY INTERSECTION
 2424     'xcirc': u'\u25ef',                           #LARGE CIRCLE
 2425     'xcup': u'\u22c3',                            #N-ARY UNION
 2426     'xdtri': u'\u25bd',                           #WHITE DOWN-POINTING TRIANGLE
 2427     'Xfr': u'\U0001d51b',                         #MATHEMATICAL FRAKTUR CAPITAL X
 2428     'xfr': u'\U0001d535',                         #MATHEMATICAL FRAKTUR SMALL X
 2429     'xhArr': u'\u27fa',                           #LONG LEFT RIGHT DOUBLE ARROW
 2430     'xharr': u'\u27f7',                           #LONG LEFT RIGHT ARROW
 2431     'Xi': u'\u039e',                              #GREEK CAPITAL LETTER XI
 2432     'xi': u'\u03be',                              #GREEK SMALL LETTER XI
 2433     'xlArr': u'\u27f8',                           #LONG LEFTWARDS DOUBLE ARROW
 2434     'xlarr': u'\u27f5',                           #LONG LEFTWARDS ARROW
 2435     'xmap': u'\u27fc',                            #LONG RIGHTWARDS ARROW FROM BAR
 2436     'xnis': u'\u22fb',                            #CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
 2437     'xodot': u'\u2a00',                           #N-ARY CIRCLED DOT OPERATOR
 2438     'Xopf': u'\U0001d54f',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL X
 2439     'xopf': u'\U0001d569',                        #MATHEMATICAL DOUBLE-STRUCK SMALL X
 2440     'xoplus': u'\u2a01',                          #N-ARY CIRCLED PLUS OPERATOR
 2441     'xotime': u'\u2a02',                          #N-ARY CIRCLED TIMES OPERATOR
 2442     'xrArr': u'\u27f9',                           #LONG RIGHTWARDS DOUBLE ARROW
 2443     'xrarr': u'\u27f6',                           #LONG RIGHTWARDS ARROW
 2444     'Xscr': u'\U0001d4b3',                        #MATHEMATICAL SCRIPT CAPITAL X
 2445     'xscr': u'\U0001d4cd',                        #MATHEMATICAL SCRIPT SMALL X
 2446     'xsqcup': u'\u2a06',                          #N-ARY SQUARE UNION OPERATOR
 2447     'xuplus': u'\u2a04',                          #N-ARY UNION OPERATOR WITH PLUS
 2448     'xutri': u'\u25b3',                           #WHITE UP-POINTING TRIANGLE
 2449     'xvee': u'\u22c1',                            #N-ARY LOGICAL OR
 2450     'xwedge': u'\u22c0',                          #N-ARY LOGICAL AND
 2451     'Yacute': u'\xdd',                            #LATIN CAPITAL LETTER Y WITH ACUTE
 2452     'yacute': u'\xfd',                            #LATIN SMALL LETTER Y WITH ACUTE
 2453     'YAcy': u'\u042f',                            #CYRILLIC CAPITAL LETTER YA
 2454     'yacy': u'\u044f',                            #CYRILLIC SMALL LETTER YA
 2455     'Ycirc': u'\u0176',                           #LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
 2456     'ycirc': u'\u0177',                           #LATIN SMALL LETTER Y WITH CIRCUMFLEX
 2457     'Ycy': u'\u042b',                             #CYRILLIC CAPITAL LETTER YERU
 2458     'ycy': u'\u044b',                             #CYRILLIC SMALL LETTER YERU
 2459     'yen': u'\xa5',                               #YEN SIGN
 2460     'Yfr': u'\U0001d51c',                         #MATHEMATICAL FRAKTUR CAPITAL Y
 2461     'yfr': u'\U0001d536',                         #MATHEMATICAL FRAKTUR SMALL Y
 2462     'YIcy': u'\u0407',                            #CYRILLIC CAPITAL LETTER YI
 2463     'yicy': u'\u0457',                            #CYRILLIC SMALL LETTER YI
 2464     'Yopf': u'\U0001d550',                        #MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
 2465     'yopf': u'\U0001d56a',                        #MATHEMATICAL DOUBLE-STRUCK SMALL Y
 2466     'Yscr': u'\U0001d4b4',                        #MATHEMATICAL SCRIPT CAPITAL Y
 2467     'yscr': u'\U0001d4ce',                        #MATHEMATICAL SCRIPT SMALL Y
 2468     'YUcy': u'\u042e',                            #CYRILLIC CAPITAL LETTER YU
 2469     'yucy': u'\u044e',                            #CYRILLIC SMALL LETTER YU
 2470     'Yuml': u'\u0178',                            #LATIN CAPITAL LETTER Y WITH DIAERESIS
 2471     'yuml': u'\xff',                              #LATIN SMALL LETTER Y WITH DIAERESIS
 2472     'Zacute': u'\u0179',                          #LATIN CAPITAL LETTER Z WITH ACUTE
 2473     'zacute': u'\u017a',                          #LATIN SMALL LETTER Z WITH ACUTE
 2474     'Zcaron': u'\u017d',                          #LATIN CAPITAL LETTER Z WITH CARON
 2475     'zcaron': u'\u017e',                          #LATIN SMALL LETTER Z WITH CARON
 2476     'Zcy': u'\u0417',                             #CYRILLIC CAPITAL LETTER ZE
 2477     'zcy': u'\u0437',                             #CYRILLIC SMALL LETTER ZE
 2478     'Zdot': u'\u017b',                            #LATIN CAPITAL LETTER Z WITH DOT ABOVE
 2479     'zdot': u'\u017c',                            #LATIN SMALL LETTER Z WITH DOT ABOVE
 2480     'zeetrf': u'\u2128',                          #BLACK-LETTER CAPITAL Z
 2481     'ZeroWidthSpace': u'\u200b',                  #ZERO WIDTH SPACE
 2482     'Zeta': u'\u0396',                            #GREEK CAPITAL LETTER ZETA
 2483     'zeta': u'\u03b6',                            #GREEK SMALL LETTER ZETA
 2484     'Zfr': u'\u2128',                             #BLACK-LETTER CAPITAL Z
 2485     'zfr': u'\U0001d537',                         #MATHEMATICAL FRAKTUR SMALL Z
 2486     'ZHcy': u'\u0416',                            #CYRILLIC CAPITAL LETTER ZHE
 2487     'zhcy': u'\u0436',                            #CYRILLIC SMALL LETTER ZHE
 2488     'zigrarr': u'\u21dd',                         #RIGHTWARDS SQUIGGLE ARROW
 2489     'Zopf': u'\u2124',                            #DOUBLE-STRUCK CAPITAL Z
 2490     'zopf': u'\U0001d56b',                        #MATHEMATICAL DOUBLE-STRUCK SMALL Z
 2491     'Zscr': u'\U0001d4b5',                        #MATHEMATICAL SCRIPT CAPITAL Z
 2492     'zscr': u'\U0001d4cf',                        #MATHEMATICAL SCRIPT SMALL Z
 2493     'zwj': u'\u200d',                             #ZERO WIDTH JOINER
 2494     'zwnj': u'\u200c',                            #ZERO WIDTH NON-JOINER
 2495     }
 2496 
 2497 known_entities = dict([(k,uniChr(v)) for k,v in name2codepoint.items()])
 2498 for k in greeks:
 2499     if k not in known_entities:
 2500         known_entities[k] = greeks[k]
 2501 f = isPy3 and asBytes or asUnicode
 2502 #K = list(known_entities.keys())
 2503 #for k in K:
 2504 #   known_entities[f(k)] = known_entities[k]
 2505 #del k, f, K
 2506 
 2507 #------------------------------------------------------------------------
 2508 class ParaFrag(ABag):
 2509     """class ParaFrag contains the intermediate representation of string
 2510     segments as they are being parsed by the ParaParser.
 2511     fontname, fontSize, rise, textColor, cbDefn
 2512     """
 2513 
 2514 _greek2Utf8=None
 2515 def _greekConvert(data):
 2516     global _greek2Utf8
 2517     if not _greek2Utf8:
 2518         from reportlab.pdfbase.rl_codecs import RL_Codecs
 2519         import codecs
 2520         #our decoding map
 2521         dm = codecs.make_identity_dict(range(32,256))
 2522         for k in range(0,32):
 2523             dm[k] = None
 2524         dm.update(RL_Codecs._RL_Codecs__rl_codecs_data['symbol'][0])
 2525         _greek2Utf8 = {}
 2526         for k,v in dm.items():
 2527             if not v:
 2528                 u = '\0'
 2529             else:
 2530                 if isPy3:
 2531                     u = chr(v)
 2532                 else:
 2533                     u = unichr(v).encode('utf8')
 2534             _greek2Utf8[chr(k)] = u
 2535     return ''.join(map(_greek2Utf8.__getitem__,data))
 2536 
 2537 #------------------------------------------------------------------
 2538 # !!! NOTE !!! THIS TEXT IS NOW REPLICATED IN PARAGRAPH.PY !!!
 2539 # The ParaFormatter will be able to format the following
 2540 # tags:
 2541 #       < /b > - bold
 2542 #       < /i > - italics
 2543 #       < u [color="red"] [width="pts"] [offset="pts"]> < /u > - underline
 2544 #           width and offset can be empty meaning use existing canvas line width
 2545 #           or with an f/F suffix regarded as a fraction of the font size
 2546 #       < strike > < /strike > - strike through has the same parameters as underline
 2547 #       < super [size="pts"] [rise="pts"]> < /super > - superscript
 2548 #       < sup ="pts"] [rise="pts"]> < /sup > - superscript
 2549 #       < sub ="pts"] [rise="pts"]> < /sub > - subscript
 2550 #       <font name=fontfamily/fontname color=colorname size=float>
 2551 #        <span name=fontfamily/fontname color=colorname backcolor=colorname size=float style=stylename>
 2552 #       < bullet > </bullet> - bullet text (at head of para only)
 2553 #       <onDraw name=callable label="a label"/>
 2554 #       <index [name="callablecanvasattribute"] label="a label"/>
 2555 #       <link>link text</link>
 2556 #           attributes of links
 2557 #               size/fontSize/uwidth/uoffset=num
 2558 #               name/face/fontName=name
 2559 #               fg/textColor/color/ucolor=color
 2560 #               backcolor/backColor/bgcolor=color
 2561 #               dest/destination/target/href/link=target
 2562 #               underline=bool turn on underline
 2563 #       <a>anchor text</a>
 2564 #           attributes of anchors
 2565 #               fontSize=num
 2566 #               fontName=name
 2567 #               fg/textColor/color=color
 2568 #               backcolor/backColor/bgcolor=color
 2569 #               href=href
 2570 #       <a name="anchorpoint"/>
 2571 #       <unichar name="unicode character name"/>
 2572 #       <unichar value="unicode code point"/>
 2573 #       <img src="path" width="1in" height="1in" valign="bottom"/>
 2574 #               width="w%" --> fontSize*w/100   idea from Roberto Alsina
 2575 #               height="h%" --> linewidth*h/100 <ralsina@netmanagers.com.ar>
 2576 #       <greek> - </greek>
 2577 #       <nobr> ... </nobr> turn off word breaking and hyphenation
 2578 #
 2579 #       The whole may be surrounded by <para> </para> tags
 2580 #
 2581 # It will also be able to handle any MathML specified Greek characters.
 2582 #------------------------------------------------------------------
 2583 class ParaParser(HTMLParser):
 2584 
 2585     #----------------------------------------------------------
 2586     # First we will define all of the xml tag handler functions.
 2587     #
 2588     # start_<tag>(attributes)
 2589     # end_<tag>()
 2590     #
 2591     # While parsing the xml ParaFormatter will call these
 2592     # functions to handle the string formatting tags.
 2593     # At the start of each tag the corresponding field will
 2594     # be set to 1 and at the end tag the corresponding field will
 2595     # be set to 0.  Then when handle_data is called the options
 2596     # for that data will be aparent by the current settings.
 2597     #----------------------------------------------------------
 2598 
 2599     def __getattr__( self, attrName ):
 2600         """This way we can handle <TAG> the same way as <tag> (ignoring case)."""
 2601         if attrName!=attrName.lower() and attrName!="caseSensitive" and not self.caseSensitive and \
 2602             (attrName.startswith("start_") or attrName.startswith("end_")):
 2603                 return getattr(self,attrName.lower())
 2604         raise AttributeError(attrName)
 2605 
 2606     #### bold
 2607     def start_b( self, attributes ):
 2608         self._push('b',bold=1)
 2609 
 2610     def end_b( self ):
 2611         self._pop('b')
 2612 
 2613     def start_strong( self, attributes ):
 2614         self._push('strong',bold=1)
 2615 
 2616     def end_strong( self ):
 2617         self._pop('strong')
 2618 
 2619     #### italics
 2620     def start_i( self, attributes ):
 2621         self._push('i',italic=1)
 2622 
 2623     def end_i( self ):
 2624         self._pop('i')
 2625 
 2626     def start_em( self, attributes ):
 2627         self._push('em', italic=1)
 2628 
 2629     def end_em( self ):
 2630         self._pop('em')
 2631 
 2632     def _new_line(self,k):
 2633         frag = self._stack[-1]
 2634         frag.us_lines = frag.us_lines + [(
 2635                     self.nlines,
 2636                     k,
 2637                     getattr(frag,k+'Color',None),
 2638                     getattr(frag,k+'Width',self._defaultLineWidths[k]),
 2639                     getattr(frag,k+'Offset',self._defaultLineOffsets[k]),
 2640                     frag.rise,
 2641                     _lineRepeats[getattr(frag,k+'Kind','single')],
 2642                     getattr(frag,k+'Gap',self._defaultLineGaps[k]),
 2643                     )]
 2644         self.nlines += 1
 2645 
 2646     #### underline
 2647     def start_u( self, attributes ):
 2648         A = self.getAttributes(attributes,_uAttrMap)
 2649         self._push('u',**A)
 2650         self._new_line('underline')
 2651 
 2652     def end_u( self ):
 2653         self._pop('u')
 2654 
 2655     #### strike
 2656     def start_strike( self, attributes ):
 2657         A = self.getAttributes(attributes,_strikeAttrMap)
 2658         self._push('strike',strike=1,**A)
 2659         self._new_line('strike')
 2660 
 2661     def end_strike( self ):
 2662         self._pop('strike')
 2663 
 2664     #### link
 2665     def _handle_link(self, tag, attributes):
 2666         A = self.getAttributes(attributes,_linkAttrMap)
 2667         underline = A.pop('underline',self._defaultLinkUnderline)
 2668         A['link'] = self._stack[-1].link + [(
 2669                         self.nlinks,
 2670                         A.pop('link','').strip(),
 2671                         )]
 2672         self.nlinks += 1
 2673         self._push(tag,**A)
 2674         if underline:
 2675             self._new_line('underline')
 2676 
 2677     def start_link(self,attributes):
 2678         self._handle_link('link',attributes)
 2679 
 2680     def end_link(self):
 2681         if self._pop('link').link is None:
 2682             raise ValueError('<link> has no target or href')
 2683 
 2684     #### anchor
 2685     def start_a(self, attributes):
 2686         anchor = 'name' in attributes
 2687         if anchor:
 2688             A = self.getAttributes(attributes,_anchorAttrMap)
 2689             name = A.get('name',None)
 2690             name = name.strip()
 2691             if not name:
 2692                 self._syntax_error('<a name="..."/> anchor variant requires non-blank name')
 2693             if len(A)>1:
 2694                 self._syntax_error('<a name="..."/> anchor variant only allows name attribute')
 2695                 A = dict(name=A['name'])
 2696             A['_selfClosingTag'] = 'anchor'
 2697             self._push('a',**A)
 2698         else:
 2699             self._handle_link('a',attributes)
 2700 
 2701     def end_a(self):
 2702         frag = self._stack[-1]
 2703         sct = getattr(frag,'_selfClosingTag','')
 2704         if sct:
 2705             if not (sct=='anchor' and frag.name):
 2706                 raise ValueError('Parser failure in <a/>')
 2707             defn = frag.cbDefn = ABag()
 2708             defn.label = defn.kind = 'anchor'
 2709             defn.name = frag.name
 2710             del frag.name, frag._selfClosingTag
 2711             self.handle_data('')
 2712             self._pop('a')
 2713         else:
 2714             if self._pop('a').link is None:
 2715                 raise ValueError('<link> has no href')
 2716 
 2717     def start_img(self,attributes):
 2718         A = self.getAttributes(attributes,_imgAttrMap)
 2719         if not A.get('src'):
 2720             self._syntax_error('<img> needs src attribute')
 2721         A['_selfClosingTag'] = 'img'
 2722         self._push('img',**A)
 2723 
 2724     def end_img(self):
 2725         frag = self._stack[-1]
 2726         if not getattr(frag,'_selfClosingTag',''):
 2727             raise ValueError('Parser failure in <img/>')
 2728         defn = frag.cbDefn = ABag()
 2729         defn.kind = 'img'
 2730         defn.src = getattr(frag,'src',None)
 2731         defn.image = ImageReader(defn.src)
 2732         size = defn.image.getSize()
 2733         defn.width = getattr(frag,'width',size[0])
 2734         defn.height = getattr(frag,'height',size[1])
 2735         defn.valign = getattr(frag,'valign','bottom')
 2736         del frag._selfClosingTag
 2737         self.handle_data('')
 2738         self._pop('img')
 2739 
 2740     #### super script
 2741     def start_super( self, attributes ):
 2742         A = self.getAttributes(attributes,_supAttrMap)
 2743         #A['sup']=1
 2744         self._push('super',**A)
 2745         frag = self._stack[-1]
 2746         frag.rise += fontSizeNormalize(frag,'supr',frag.fontSize*supFraction)
 2747         frag.fontSize = fontSizeNormalize(frag,'sups',frag.fontSize-min(sizeDelta,0.2*frag.fontSize))
 2748 
 2749     def end_super( self ):
 2750         self._pop('super')
 2751 
 2752     start_sup = start_super
 2753     end_sup = end_super
 2754 
 2755     #### sub script
 2756     def start_sub( self, attributes ):
 2757         A = self.getAttributes(attributes,_supAttrMap)
 2758         self._push('sub',**A)
 2759         frag = self._stack[-1]
 2760         frag.rise -= fontSizeNormalize(frag,'supr',frag.fontSize*subFraction)
 2761         frag.fontSize = fontSizeNormalize(frag,'sups',frag.fontSize-min(sizeDelta,0.2*frag.fontSize))
 2762 
 2763     def end_sub( self ):
 2764         self._pop('sub')
 2765 
 2766     def start_nobr(self, attrs):
 2767         self.getAttributes(attrs,{})
 2768         self._push('nobr',nobr=True)
 2769 
 2770     def end_nobr(self ):
 2771         self._pop('nobr')
 2772 
 2773     #### greek script
 2774     #### add symbol encoding
 2775     def handle_charref(self, name):
 2776         try:
 2777             if name[0]=='x':
 2778                 n = int(name[1:],16)
 2779             else:
 2780                 n = int(name)
 2781         except ValueError:
 2782             self.unknown_charref(name)
 2783             return
 2784         self.handle_data(uniChr(n))   #.encode('utf8'))
 2785 
 2786     def syntax_error(self,lineno,message):
 2787         self._syntax_error(message)
 2788 
 2789     def _syntax_error(self,message):
 2790         if message[:10]=="attribute " and message[-17:]==" value not quoted": return
 2791         if self._crashOnError:
 2792             raise ValueError('paraparser: syntax error: %s' % message)
 2793         self.errors.append(message)
 2794 
 2795     def start_greek(self, attr):
 2796         self._push('greek',greek=1)
 2797 
 2798     def end_greek(self):
 2799         self._pop('greek')
 2800 
 2801     def start_unichar(self, attr):
 2802         if 'name' in attr:
 2803             if 'code' in attr:
 2804                 self._syntax_error('<unichar/> invalid with both name and code attributes')
 2805             try:
 2806                 v = unicodedata.lookup(attr['name'])
 2807             except KeyError:
 2808                 self._syntax_error('<unichar/> invalid name attribute\n"%s"' % ascii(attr['name']))
 2809                 v = '\0'
 2810         elif 'code' in attr:
 2811             try:
 2812                 v = int(eval(attr['code']))
 2813                 v = chr(v) if isPy3 else unichr(v)
 2814             except:
 2815                 self._syntax_error('<unichar/> invalid code attribute %s' % ascii(attr['code']))
 2816                 v = '\0'
 2817         else:
 2818             v = None
 2819             if attr:
 2820                 self._syntax_error('<unichar/> invalid attribute %s' % list(attr.keys())[0])
 2821 
 2822         if v is not None:
 2823             self.handle_data(v)
 2824         self._push('unichar',_selfClosingTag='unichar')
 2825 
 2826     def end_unichar(self):
 2827         self._pop('unichar')
 2828 
 2829     def start_font(self,attr):
 2830         A = self.getAttributes(attr,_spanAttrMap)
 2831         if 'fontName' in A:
 2832             A['fontName'], A['bold'], A['italic'] = ps2tt(A['fontName'])
 2833         self._push('font',**A)
 2834 
 2835     def end_font(self):
 2836         self._pop('font')
 2837 
 2838     def start_span(self,attr):
 2839         A = self.getAttributes(attr,_spanAttrMap)
 2840         if 'style' in A:
 2841             style = self.findSpanStyle(A.pop('style'))
 2842             D = {}
 2843             for k in 'fontName fontSize textColor backColor'.split():
 2844                 v = getattr(style,k,self)
 2845                 if v is self: continue
 2846                 D[k] = v
 2847             D.update(A)
 2848             A = D
 2849         if 'fontName' in A:
 2850             A['fontName'], A['bold'], A['italic'] = ps2tt(A['fontName'])
 2851         self._push('span',**A)
 2852 
 2853     def end_span(self):
 2854         self._pop('span')
 2855 
 2856     def start_br(self, attr):
 2857         self._push('br',_selfClosingTag='br',lineBreak=True,text='')
 2858 
 2859     def end_br(self):
 2860         #print('\nend_br called, %d frags in list' % len(self.fragList))
 2861         frag = self._stack[-1]
 2862         if not (frag._selfClosingTag=='br' and frag.lineBreak):
 2863                 raise ValueError('Parser failure in <br/>')
 2864         del frag._selfClosingTag
 2865         self.handle_data('')
 2866         self._pop('br')
 2867 
 2868     def _initial_frag(self,attr,attrMap,bullet=0):
 2869         style = self._style
 2870         if attr!={}:
 2871             style = copy.deepcopy(style)
 2872             _applyAttributes(style,self.getAttributes(attr,attrMap))
 2873             self._style = style
 2874 
 2875         # initialize semantic values
 2876         frag = ParaFrag()
 2877         frag.rise = 0
 2878         frag.greek = 0
 2879         frag.link = []
 2880         if bullet:
 2881             frag.fontName, frag.bold, frag.italic = ps2tt(style.bulletFontName)
 2882             frag.fontSize = style.bulletFontSize
 2883             frag.textColor = hasattr(style,'bulletColor') and style.bulletColor or style.textColor
 2884         else:
 2885             frag.fontName, frag.bold, frag.italic = ps2tt(style.fontName)
 2886             frag.fontSize = style.fontSize
 2887             frag.textColor = style.textColor
 2888         frag.us_lines = []
 2889         self.nlinks = self.nlines = 0
 2890         self._defaultLineWidths = dict(
 2891                                     underline = getattr(style,'underlineWidth',''),
 2892                                     strike = getattr(style,'strikeWidth',''),
 2893                                     )
 2894         self._defaultLineOffsets = dict(
 2895                                     underline = getattr(style,'underlineOffset',''),
 2896                                     strike = getattr(style,'strikeOffset',''),
 2897                                     )
 2898         self._defaultLineGaps = dict(
 2899                                     underline = getattr(style,'underlineGap',''),
 2900                                     strike = getattr(style,'strikeGap',''),
 2901                                     )
 2902         self._defaultLinkUnderline = getattr(style,'linkUnderline',platypus_link_underline)
 2903         return frag
 2904 
 2905     def start_para(self,attr):
 2906         frag = self._initial_frag(attr,_paraAttrMap)
 2907         frag.__tag__ = 'para'
 2908         self._stack = [frag]
 2909 
 2910     def end_para(self):
 2911         self._pop('para')
 2912 
 2913     def start_bullet(self,attr):
 2914         if hasattr(self,'bFragList'):
 2915             self._syntax_error('only one <bullet> tag allowed')
 2916         self.bFragList = []
 2917         frag = self._initial_frag(attr,_bulletAttrMap,1)
 2918         frag.isBullet = 1
 2919         frag.__tag__ = 'bullet'
 2920         self._stack.append(frag)
 2921 
 2922     def end_bullet(self):
 2923         self._pop('bullet')
 2924 
 2925     #---------------------------------------------------------------
 2926     def start_seqdefault(self, attr):
 2927         try:
 2928             default = attr['id']
 2929         except KeyError:
 2930             default = None
 2931         self._seq.setDefaultCounter(default)
 2932 
 2933     def end_seqdefault(self):
 2934         pass
 2935 
 2936     def start_seqreset(self, attr):
 2937         try:
 2938             id = attr['id']
 2939         except KeyError:
 2940             id = None
 2941         try:
 2942             base = int(attr['base'])
 2943         except:
 2944             base=0
 2945         self._seq.reset(id, base)
 2946 
 2947     def end_seqreset(self):
 2948         pass
 2949 
 2950     def start_seqchain(self, attr):
 2951         try:
 2952             order = attr['order']
 2953         except KeyError:
 2954             order = ''
 2955         order = order.split()
 2956         seq = self._seq
 2957         for p,c in zip(order[:-1],order[1:]):
 2958             seq.chain(p, c)
 2959     end_seqchain = end_seqreset
 2960 
 2961     def start_seqformat(self, attr):
 2962         try:
 2963             id = attr['id']
 2964         except KeyError:
 2965             id = None
 2966         try:
 2967             value = attr['value']
 2968         except KeyError:
 2969             value = '1'
 2970         self._seq.setFormat(id,value)
 2971     end_seqformat = end_seqreset
 2972 
 2973     # AR hacking in aliases to allow the proper casing for RML.
 2974     # the above ones should be deprecated over time. 2001-03-22
 2975     start_seqDefault = start_seqdefault
 2976     end_seqDefault = end_seqdefault
 2977     start_seqReset = start_seqreset
 2978     end_seqReset = end_seqreset
 2979     start_seqChain = start_seqchain
 2980     end_seqChain = end_seqchain
 2981     start_seqFormat = start_seqformat
 2982     end_seqFormat = end_seqformat
 2983 
 2984     def start_seq(self, attr):
 2985         #if it has a template, use that; otherwise try for id;
 2986         #otherwise take default sequence
 2987         if 'template' in attr:
 2988             templ = attr['template']
 2989             self.handle_data(templ % self._seq)
 2990             return
 2991         elif 'id' in attr:
 2992             id = attr['id']
 2993         else:
 2994             id = None
 2995         increment = attr.get('inc', None)
 2996         if not increment:
 2997             output = self._seq.nextf(id)
 2998         else:
 2999             #accepts "no" for do not increment, or an integer.
 3000             #thus, 0 and 1 increment by the right amounts.
 3001             if increment.lower() == 'no':
 3002                 output = self._seq.thisf(id)
 3003             else:
 3004                 incr = int(increment)
 3005                 output = self._seq.thisf(id)
 3006                 self._seq.reset(id, self._seq._this() + incr)
 3007         self.handle_data(output)
 3008 
 3009     def end_seq(self):
 3010         pass
 3011 
 3012     def start_ondraw(self,attr):
 3013         defn = ABag()
 3014         if 'name' in attr: defn.name = attr['name']
 3015         else: self._syntax_error('<onDraw> needs at least a name attribute')
 3016 
 3017         defn.label = attr.get('label',None)
 3018         defn.kind='onDraw'
 3019         self._push('ondraw',cbDefn=defn)
 3020         self.handle_data('')
 3021         self._pop('ondraw')
 3022     start_onDraw=start_ondraw
 3023     end_onDraw=end_ondraw=end_seq
 3024 
 3025     def start_index(self,attr):
 3026         attr=self.getAttributes(attr,_indexAttrMap)
 3027         defn = ABag()
 3028         if 'item' in attr:
 3029             label = attr['item']
 3030         else:
 3031             self._syntax_error('<index> needs at least an item attribute')
 3032         if 'name' in attr:
 3033             name = attr['name']
 3034         else:
 3035             name = DEFAULT_INDEX_NAME
 3036         format = attr.get('format',None)
 3037         if format is not None and format not in ('123','I','i','ABC','abc'):
 3038             raise ValueError('index tag format is %r not valid 123 I i ABC or abc' % offset)
 3039         offset = attr.get('offset',None)
 3040         if offset is not None:
 3041             try:
 3042                 offset = int(offset)
 3043             except:
 3044                 raise ValueError('index tag offset is %r not an int' % offset)
 3045         defn.label = encode_label((label,format,offset))
 3046         defn.name = name
 3047         defn.kind='index'
 3048         self._push('index',cbDefn=defn)
 3049         self.handle_data('')
 3050         self._pop('index',)
 3051     end_index=end_seq
 3052 
 3053     def start_unknown(self,attr):
 3054         pass
 3055     end_unknown=end_seq
 3056 
 3057     #---------------------------------------------------------------
 3058     def _push(self,tag,**attr):
 3059         frag = copy.copy(self._stack[-1])
 3060         frag.__tag__ = tag
 3061         _applyAttributes(frag,attr)
 3062         self._stack.append(frag)
 3063 
 3064     def _pop(self,tag):
 3065         frag = self._stack.pop()
 3066         if tag==frag.__tag__: return frag
 3067         raise ValueError('Parse error: saw </%s> instead of expected </%s>' % (tag,frag.__tag__))
 3068 
 3069     def getAttributes(self,attr,attrMap):
 3070         A = {}
 3071         for k, v in attr.items():
 3072             if not self.caseSensitive:
 3073                 k = k.lower()
 3074             if k in attrMap:
 3075                 j = attrMap[k]
 3076                 func = j[1]
 3077                 if func is not None:
 3078                     #it's a function
 3079                     v = func(self,v) if isinstance(func,_ExValidate) else func(v)
 3080                 A[j[0]] = v
 3081             else:
 3082                 self._syntax_error('invalid attribute name %s attrMap=%r'% (k,list(sorted(attrMap.keys()))))
 3083         return A
 3084 
 3085     #----------------------------------------------------------------
 3086 
 3087     def __init__(self,verbose=0, caseSensitive=0, ignoreUnknownTags=1, crashOnError=True):
 3088         HTMLParser.__init__(self,
 3089             **(dict(convert_charrefs=False) if sys.version_info>=(3,4) else {}))
 3090         self.verbose = verbose
 3091         #HTMLParser is case insenstive anyway, but the rml interface still needs this
 3092         #all start/end_ methods should have a lower case version for HMTMParser
 3093         self.caseSensitive = caseSensitive
 3094         self.ignoreUnknownTags = ignoreUnknownTags
 3095         self._crashOnError = crashOnError
 3096 
 3097     def _iReset(self):
 3098         self.fragList = []
 3099         if hasattr(self, 'bFragList'): delattr(self,'bFragList')
 3100 
 3101     def _reset(self, style):
 3102         '''reset the parser'''
 3103 
 3104         HTMLParser.reset(self)
 3105         # initialize list of string segments to empty
 3106         self.errors = []
 3107         self._style = style
 3108         self._iReset()
 3109 
 3110     #----------------------------------------------------------------
 3111     def handle_data(self,data):
 3112         "Creates an intermediate representation of string segments."
 3113 
 3114         #The old parser would only 'see' a string after all entities had
 3115         #been processed.  Thus, 'Hello &trade; World' would emerge as one
 3116         #fragment.    HTMLParser processes these separately.  We want to ensure
 3117         #that successive calls like this are concatenated, to prevent too many
 3118         #fragments being created.
 3119 
 3120         frag = copy.copy(self._stack[-1])
 3121         if hasattr(frag,'cbDefn'):
 3122             kind = frag.cbDefn.kind
 3123             if data: self._syntax_error('Only empty <%s> tag allowed' % kind)
 3124         elif hasattr(frag,'_selfClosingTag'):
 3125             if data!='': self._syntax_error('No content allowed in %s tag' % frag._selfClosingTag)
 3126             return
 3127         else:
 3128             #get the right parameters for the
 3129             if frag.greek:
 3130                 frag.fontName = 'symbol'
 3131                 data = _greekConvert(data)
 3132 
 3133         # bold, italic
 3134         frag.fontName = tt2ps(frag.fontName,frag.bold,frag.italic)
 3135 
 3136         #save our data
 3137         frag.text = data
 3138 
 3139         if hasattr(frag,'isBullet'):
 3140             delattr(frag,'isBullet')
 3141             self.bFragList.append(frag)
 3142         else:
 3143             self.fragList.append(frag)
 3144 
 3145     def handle_cdata(self,data):
 3146         self.handle_data(data)
 3147 
 3148     def _setup_for_parse(self,style):
 3149         self._seq = reportlab.lib.sequencer.getSequencer()
 3150         self._reset(style)  # reinitialise the parser
 3151 
 3152     def _complete_parse(self):
 3153         "Reset after parsing, to be ready for next paragraph"
 3154         if self._stack:
 3155             self._syntax_error('parse ended with %d unclosed tags\n %s' % (len(self._stack),'\n '.join((x.__tag__ for x in reversed(self._stack)))))
 3156         del self._seq
 3157         style = self._style
 3158         del self._style
 3159         if len(self.errors)==0:
 3160             fragList = self.fragList
 3161             bFragList = hasattr(self,'bFragList') and self.bFragList or None
 3162             self._iReset()
 3163         else:
 3164             fragList = bFragList = None
 3165 
 3166         return style, fragList, bFragList
 3167 
 3168     def _tt_handle(self,tt):
 3169         "Iterate through a pre-parsed tuple tree (e.g. from pyRXP)"
 3170         #import pprint
 3171         #pprint.pprint(tt)
 3172         #find the corresponding start_tagname and end_tagname methods.
 3173         #These must be defined.
 3174         tag = tt[0]
 3175         try:
 3176             start = getattr(self,'start_'+tag)
 3177             end = getattr(self,'end_'+tag)
 3178         except AttributeError:
 3179             if not self.ignoreUnknownTags:
 3180                 raise ValueError('Invalid tag "%s"' % tag)
 3181             start = self.start_unknown
 3182             end = self.end_unknown
 3183 
 3184         #call the start_tagname method
 3185         start(tt[1] or {})
 3186         #if tree node has any children, they will either be further nodes,
 3187         #or text.  Accordingly, call either this function, or handle_data.
 3188         C = tt[2]
 3189         if C:
 3190             M = self._tt_handlers
 3191             for c in C:
 3192                 M[isinstance(c,(list,tuple))](c)
 3193 
 3194         #call the end_tagname method
 3195         end()
 3196 
 3197     def _tt_start(self,tt):
 3198         self._tt_handlers = self.handle_data,self._tt_handle
 3199         self._tt_handle(tt)
 3200 
 3201     def tt_parse(self,tt,style):
 3202         '''parse from tupletree form'''
 3203         self._setup_for_parse(style)
 3204         self._tt_start(tt)
 3205         return self._complete_parse()
 3206 
 3207     def findSpanStyle(self,style):
 3208         raise ValueError('findSpanStyle not implemented in this parser')
 3209 
 3210     #HTMLParser interface
 3211     def parse(self, text, style):
 3212         "attempt replacement for parse"
 3213         self._setup_for_parse(style)
 3214         text = asUnicode(text)
 3215         if not(len(text)>=6 and text[0]=='<' and _re_para.match(text)):
 3216             text = u"<para>"+text+u"</para>"
 3217         try:
 3218             self.feed(text)
 3219         except:
 3220             annotateException('\nparagraph text %s caused exception' % ascii(text))
 3221         return self._complete_parse()
 3222 
 3223     def handle_starttag(self, tag, attrs):
 3224         "Called by HTMLParser when a tag starts"
 3225 
 3226         #tuple tree parser used to expect a dict.  HTML parser
 3227         #gives list of two-element tuples
 3228         if isinstance(attrs, list):
 3229             d = {}
 3230             for (k,  v) in attrs:
 3231                 d[k] = v
 3232             attrs = d
 3233         if not self.caseSensitive: tag = tag.lower()
 3234         try:
 3235             start = getattr(self,'start_'+tag)
 3236         except AttributeError:
 3237             if not self.ignoreUnknownTags:
 3238                 raise ValueError('Invalid tag "%s"' % tag)
 3239             start = self.start_unknown
 3240         #call it
 3241         start(attrs or {})
 3242 
 3243     def handle_endtag(self, tag):
 3244         "Called by HTMLParser when a tag ends"
 3245         #find the existing end_tagname method
 3246         if not self.caseSensitive: tag = tag.lower()
 3247         try:
 3248             end = getattr(self,'end_'+tag)
 3249         except AttributeError:
 3250             if not self.ignoreUnknownTags:
 3251                 raise ValueError('Invalid tag "%s"' % tag)
 3252             end = self.end_unknown
 3253         #call it
 3254         end()
 3255 
 3256     def handle_entityref(self, name):
 3257         "Handles a named entity.  "
 3258         try:
 3259             v = known_entities[name]
 3260         except:
 3261             v = u'&%s;' % name
 3262         self.handle_data(v)
 3263 
 3264 if __name__=='__main__':
 3265     from reportlab.platypus import cleanBlockQuotedText
 3266     from reportlab.lib.styles import _baseFontName
 3267     _parser=ParaParser()
 3268     def check_text(text,p=_parser):
 3269         print('##########')
 3270         text = cleanBlockQuotedText(text)
 3271         l,rv,bv = p.parse(text,style)
 3272         if rv is None:
 3273             for l in _parser.errors:
 3274                 print(l)
 3275         else:
 3276             print('ParaStyle', l.fontName,l.fontSize,l.textColor)
 3277             for l in rv:
 3278                 sys.stdout.write(l.fontName,l.fontSize,l.textColor,l.bold, l.rise, '|%s|'%l.text[:25])
 3279                 if hasattr(l,'cbDefn'):
 3280                     print('cbDefn',getattr(l.cbDefn,'name',''),getattr(l.cbDefn,'label',''),l.cbDefn.kind)
 3281                 else: print()
 3282 
 3283     style=ParaFrag()
 3284     style.fontName=_baseFontName
 3285     style.fontSize = 12
 3286     style.textColor = black
 3287     style.bulletFontName = black
 3288     style.bulletFontName=_baseFontName
 3289     style.bulletFontSize=12
 3290 
 3291     text='''
 3292     <b><i><greek>a</greek>D</i></b>&beta;<unichr value="0x394"/>
 3293     <font name="helvetica" size="15" color=green>
 3294     Tell me, O muse, of that ingenious hero who travelled far and wide
 3295     after</font> he had sacked the famous town of Troy. Many cities did he visit,
 3296     and many were the nations with whose manners and customs he was acquainted;
 3297     moreover he suffered much by sea while trying to save his own life
 3298     and bring his men safely home; but do what he might he could not save
 3299     his men, for they perished through their own sheer folly in eating
 3300     the cattle of the Sun-god Hyperion; so the god prevented them from
 3301     ever reaching home. Tell me, too, about all these things, O daughter
 3302     of Jove, from whatsoever source you<super>1</super> may know them.
 3303     '''
 3304     check_text(text)
 3305     check_text('<para> </para>')
 3306     check_text('<para font="%s" size=24 leading=28.8 spaceAfter=72>ReportLab -- Reporting for the Internet Age</para>'%_baseFontName)
 3307     check_text('''
 3308     <font color=red>&tau;</font>Tell me, O muse, of that ingenious hero who travelled far and wide
 3309     after he had sacked the famous town of Troy. Many cities did he visit,
 3310     and many were the nations with whose manners and customs he was acquainted;
 3311     moreover he suffered much by sea while trying to save his own life
 3312     and bring his men safely home; but do what he might he could not save
 3313     his men, for they perished through their own sheer folly in eating
 3314     the cattle of the Sun-god Hyperion; so the god prevented them from
 3315     ever reaching home. Tell me, too, about all these things, O daughter
 3316     of Jove, from whatsoever source you may know them.''')
 3317     check_text('''
 3318     Telemachus took this speech as of good omen and rose at once, for
 3319     he was bursting with what he had to say. He stood in the middle of
 3320     the assembly and the good herald Pisenor brought him his staff. Then,
 3321     turning to Aegyptius, "Sir," said he, "it is I, as you will shortly
 3322     learn, who have convened you, for it is I who am the most aggrieved.
 3323     I have not got wind of any host approaching about which I would warn
 3324     you, nor is there any matter of public moment on which I would speak.
 3325     My grieveance is purely personal, and turns on two great misfortunes
 3326     which have fallen upon my house. The first of these is the loss of
 3327     my excellent father, who was chief among all you here present, and
 3328     was like a father to every one of you; the second is much more serious,
 3329     and ere long will be the utter ruin of my estate. The sons of all
 3330     the chief men among you are pestering my mother to marry them against
 3331     her will. They are afraid to go to her father Icarius, asking him
 3332     to choose the one he likes best, and to provide marriage gifts for
 3333     his daughter, but day by day they keep hanging about my father's house,
 3334     sacrificing our oxen, sheep, and fat goats for their banquets, and
 3335     never giving so much as a thought to the quantity of wine they drink.
 3336     No estate can stand such recklessness; we have now no Ulysses to ward
 3337     off harm from our doors, and I cannot hold my own against them. I
 3338     shall never all my days be as good a man as he was, still I would
 3339     indeed defend myself if I had power to do so, for I cannot stand such
 3340     treatment any longer; my house is being disgraced and ruined. Have
 3341     respect, therefore, to your own consciences and to public opinion.
 3342     Fear, too, the wrath of heaven, lest the gods should be displeased
 3343     and turn upon you. I pray you by Jove and Themis, who is the beginning
 3344     and the end of councils, [do not] hold back, my friends, and leave
 3345     me singlehanded- unless it be that my brave father Ulysses did some
 3346     wrong to the Achaeans which you would now avenge on me, by aiding
 3347     and abetting these suitors. Moreover, if I am to be eaten out of house
 3348     and home at all, I had rather you did the eating yourselves, for I
 3349     could then take action against you to some purpose, and serve you
 3350     with notices from house to house till I got paid in full, whereas
 3351     now I have no remedy."''')
 3352 
 3353     check_text('''
 3354 But as the sun was rising from the fair sea into the firmament of
 3355 heaven to shed light on mortals and immortals, they reached Pylos
 3356 the city of Neleus. Now the people of Pylos were gathered on the sea
 3357 shore to offer sacrifice of black bulls to Neptune lord of the Earthquake.
 3358 There were nine guilds with five hundred men in each, and there were
 3359 nine bulls to each guild. As they were eating the inward meats and
 3360 burning the thigh bones [on the embers] in the name of Neptune, Telemachus
 3361 and his crew arrived, furled their sails, brought their ship to anchor,
 3362 and went ashore. ''')
 3363     check_text('''
 3364 So the neighbours and kinsmen of Menelaus were feasting and making
 3365 merry in his house. There was a bard also to sing to them and play
 3366 his lyre, while two tumblers went about performing in the midst of
 3367 them when the man struck up with his tune.]''')
 3368     check_text('''
 3369 "When we had passed the [Wandering] rocks, with Scylla and terrible
 3370 Charybdis, we reached the noble island of the sun-god, where were
 3371 the goodly cattle and sheep belonging to the sun Hyperion. While still
 3372 at sea in my ship I could bear the cattle lowing as they came home
 3373 to the yards, and the sheep bleating. Then I remembered what the blind
 3374 Theban prophet Teiresias had told me, and how carefully Aeaean Circe
 3375 had warned me to shun the island of the blessed sun-god. So being
 3376 much troubled I said to the men, 'My men, I know you are hard pressed,
 3377 but listen while I <strike>tell you the prophecy that</strike> Teiresias made me, and
 3378 how carefully Aeaean Circe warned me to shun the island of the blessed
 3379 sun-god, for it was here, she said, that our worst danger would lie.
 3380 Head the ship, therefore, away from the island.''')
 3381     check_text('''A&lt;B&gt;C&amp;D&quot;E&apos;F''')
 3382     check_text('''A&lt; B&gt; C&amp; D&quot; E&apos; F''')
 3383     check_text('''<![CDATA[<>&'"]]>''')
 3384     check_text('''<bullet face=courier size=14 color=green>+</bullet>
 3385 There was a bard also to sing to them and play
 3386 his lyre, while two tumblers went about performing in the midst of
 3387 them when the man struck up with his tune.]''')
 3388     check_text('''<onDraw name="myFunc" label="aaa   bbb">A paragraph''')
 3389     check_text('''<para><onDraw name="myFunc" label="aaa   bbb">B paragraph</para>''')
 3390     # HVB, 30.05.2003: Test for new features
 3391     _parser.caseSensitive=0
 3392     check_text('''Here comes <FONT FACE="Helvetica" SIZE="14pt">Helvetica 14</FONT> with <STRONG>strong</STRONG> <EM>emphasis</EM>.''')
 3393     check_text('''Here comes <font face="Helvetica" size="14pt">Helvetica 14</font> with <Strong>strong</Strong> <em>emphasis</em>.''')
 3394     check_text('''Here comes <font face="Courier" size="3cm">Courier 3cm</font> and normal again.''')
 3395     check_text('''Before the break <br/>the middle line <br/> and the last line.''')
 3396     check_text('''This should be an inline image <img src='../../../docs/images/testimg.gif'/>!''')
 3397     check_text('''aaa&nbsp;bbbb <u>underline&#32;</u> cccc''')