1#Copyright ReportLab Europe Ltd. 2000-2017
2#see license.txt for license details
3#history https://hg.reportlab.com/hg-public/reportlab/log/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'''
7import string
8import re
9import sys
10import os
11import copy
12import base64
13from pprint import pprint as pp
14from reportlab import ascii
15import unicodedata
16import reportlab.lib.sequencer
17
18from reportlab.lib.abag import ABag
19from reportlab.lib.utils import ImageReader, isPy3, annotateException, encode_label, asUnicode, asBytes, uniChr, isStr, unicodeT
20from reportlab.lib.colors import toColor, white, black, red, Color
21from reportlab.lib.fonts import tt2ps, ps2tt
22from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
23from reportlab.lib.units import inch,mm,cm,pica
24from reportlab.rl_config import platypus_link_underline
25if isPy3:
26    from html.parser import HTMLParser
27    from html.entities import name2codepoint
28else:
29    from HTMLParser import HTMLParser
30    from htmlentitydefs import name2codepoint
31
32_re_para = re.compile(r'^\s*<\s*para(?:\s+|>|/>)')
33
34sizeDelta = 2       # amount to reduce font size by for super and sub script
35subFraction = 0.5   # fraction of font size that a sub script should be lowered
36supFraction = 0.5 # fraction of font size that a super script should be raised
37
38DEFAULT_INDEX_NAME='_indexAdd'
39
40def _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
52def _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(r'^\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
66def _int(s):
67    try:
68        return int(s)
69    except:
70        raise ValueError('cannot convert %r to int' % s)
71
72def _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
80def _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
86class _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
110def 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
115class _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
135class _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*$')
149class _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
163def _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
177def _autoLeading(x):
178    x = x.lower()
179    if x in ('','min','max','off'):
180        return x
181    raise ValueError('Invalid autoLeading=%r' % x )
182
183def _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
191def _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
197def _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
204def _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 textTransform=%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
346def _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
361def _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.
373greeks = {
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
2497known_entities = dict([(k,uniChr(v)) for k,v in name2codepoint.items()])
2498for k in greeks:
2499    if k not in known_entities:
2500        known_entities[k] = greeks[k]
2501f = 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#------------------------------------------------------------------------
2508class 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
2515def _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#------------------------------------------------------------------
2583class 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',self._defaultLineColors[k]),
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 = attr['code'].lower()
2813                if v.startswith('0x'):
2814                    v = int(v,16)
2815                else:
2816                    v = int(v,0)    #treat as a python literal would be
2817                v = chr(v) if isPy3 else unichr(v)
2818            except:
2819                self._syntax_error('<unichar/> invalid code attribute %s' % ascii(attr['code']))
2820                v = '\0'
2821        else:
2822            v = None
2823            if attr:
2824                self._syntax_error('<unichar/> invalid attribute %s' % list(attr.keys())[0])
2825
2826        if v is not None:
2827            self.handle_data(v)
2828        self._push('unichar',_selfClosingTag='unichar')
2829
2830    def end_unichar(self):
2831        self._pop('unichar')
2832
2833    def start_font(self,attr):
2834        A = self.getAttributes(attr,_spanAttrMap)
2835        if 'fontName' in A:
2836            A['fontName'], A['bold'], A['italic'] = ps2tt(A['fontName'])
2837        self._push('font',**A)
2838
2839    def end_font(self):
2840        self._pop('font')
2841
2842    def start_span(self,attr):
2843        A = self.getAttributes(attr,_spanAttrMap)
2844        if 'style' in A:
2845            style = self.findSpanStyle(A.pop('style'))
2846            D = {}
2847            for k in 'fontName fontSize textColor backColor'.split():
2848                v = getattr(style,k,self)
2849                if v is self: continue
2850                D[k] = v
2851            D.update(A)
2852            A = D
2853        if 'fontName' in A:
2854            A['fontName'], A['bold'], A['italic'] = ps2tt(A['fontName'])
2855        self._push('span',**A)
2856
2857    def end_span(self):
2858        self._pop('span')
2859
2860    def start_br(self, attr):
2861        self._push('br',_selfClosingTag='br',lineBreak=True,text='')
2862
2863    def end_br(self):
2864        #print('\nend_br called, %d frags in list' % len(self.fragList))
2865        frag = self._stack[-1]
2866        if not (frag._selfClosingTag=='br' and frag.lineBreak):
2867                raise ValueError('Parser failure in <br/>')
2868        del frag._selfClosingTag
2869        self.handle_data('')
2870        self._pop('br')
2871
2872    def _initial_frag(self,attr,attrMap,bullet=0):
2873        style = self._style
2874        if attr!={}:
2875            style = copy.deepcopy(style)
2876            _applyAttributes(style,self.getAttributes(attr,attrMap))
2877            self._style = style
2878
2879        # initialize semantic values
2880        frag = ParaFrag()
2881        frag.rise = 0
2882        frag.greek = 0
2883        frag.link = []
2884        try:
2885            if bullet:
2886                frag.fontName, frag.bold, frag.italic = ps2tt(style.bulletFontName)
2887                frag.fontSize = style.bulletFontSize
2888                frag.textColor = hasattr(style,'bulletColor') and style.bulletColor or style.textColor
2889            else:
2890                frag.fontName, frag.bold, frag.italic = ps2tt(style.fontName)
2891                frag.fontSize = style.fontSize
2892                frag.textColor = style.textColor
2893        except:
2894            annotateException('error with style name=%s'%style.name)
2895        frag.us_lines = []
2896        self.nlinks = self.nlines = 0
2897        self._defaultLineWidths = dict(
2898                                    underline = getattr(style,'underlineWidth',''),
2899                                    strike = getattr(style,'strikeWidth',''),
2900                                    )
2901        self._defaultLineColors = dict(
2902                                    underline = getattr(style,'underlineColor',''),
2903                                    strike = getattr(style,'strikeColor',''),
2904                                    )
2905        self._defaultLineOffsets = dict(
2906                                    underline = getattr(style,'underlineOffset',''),
2907                                    strike = getattr(style,'strikeOffset',''),
2908                                    )
2909        self._defaultLineGaps = dict(
2910                                    underline = getattr(style,'underlineGap',''),
2911                                    strike = getattr(style,'strikeGap',''),
2912                                    )
2913        self._defaultLinkUnderline = getattr(style,'linkUnderline',platypus_link_underline)
2914        return frag
2915
2916    def start_para(self,attr):
2917        frag = self._initial_frag(attr,_paraAttrMap)
2918        frag.__tag__ = 'para'
2919        self._stack = [frag]
2920
2921    def end_para(self):
2922        self._pop('para')
2923
2924    def start_bullet(self,attr):
2925        if hasattr(self,'bFragList'):
2926            self._syntax_error('only one <bullet> tag allowed')
2927        self.bFragList = []
2928        frag = self._initial_frag(attr,_bulletAttrMap,1)
2929        frag.isBullet = 1
2930        frag.__tag__ = 'bullet'
2931        self._stack.append(frag)
2932
2933    def end_bullet(self):
2934        self._pop('bullet')
2935
2936    #---------------------------------------------------------------
2937    def start_seqdefault(self, attr):
2938        try:
2939            default = attr['id']
2940        except KeyError:
2941            default = None
2942        self._seq.setDefaultCounter(default)
2943
2944    def end_seqdefault(self):
2945        pass
2946
2947    def start_seqreset(self, attr):
2948        try:
2949            id = attr['id']
2950        except KeyError:
2951            id = None
2952        try:
2953            base = int(attr['base'])
2954        except:
2955            base=0
2956        self._seq.reset(id, base)
2957
2958    def end_seqreset(self):
2959        pass
2960
2961    def start_seqchain(self, attr):
2962        try:
2963            order = attr['order']
2964        except KeyError:
2965            order = ''
2966        order = order.split()
2967        seq = self._seq
2968        for p,c in zip(order[:-1],order[1:]):
2969            seq.chain(p, c)
2970    end_seqchain = end_seqreset
2971
2972    def start_seqformat(self, attr):
2973        try:
2974            id = attr['id']
2975        except KeyError:
2976            id = None
2977        try:
2978            value = attr['value']
2979        except KeyError:
2980            value = '1'
2981        self._seq.setFormat(id,value)
2982    end_seqformat = end_seqreset
2983
2984    # AR hacking in aliases to allow the proper casing for RML.
2985    # the above ones should be deprecated over time. 2001-03-22
2986    start_seqDefault = start_seqdefault
2987    end_seqDefault = end_seqdefault
2988    start_seqReset = start_seqreset
2989    end_seqReset = end_seqreset
2990    start_seqChain = start_seqchain
2991    end_seqChain = end_seqchain
2992    start_seqFormat = start_seqformat
2993    end_seqFormat = end_seqformat
2994
2995    def start_seq(self, attr):
2996        #if it has a template, use that; otherwise try for id;
2997        #otherwise take default sequence
2998        if 'template' in attr:
2999            templ = attr['template']
3000            self.handle_data(templ % self._seq)
3001            return
3002        elif 'id' in attr:
3003            id = attr['id']
3004        else:
3005            id = None
3006        increment = attr.get('inc', None)
3007        if not increment:
3008            output = self._seq.nextf(id)
3009        else:
3010            #accepts "no" for do not increment, or an integer.
3011            #thus, 0 and 1 increment by the right amounts.
3012            if increment.lower() == 'no':
3013                output = self._seq.thisf(id)
3014            else:
3015                incr = int(increment)
3016                output = self._seq.thisf(id)
3017                self._seq.reset(id, self._seq._this() + incr)
3018        self.handle_data(output)
3019
3020    def end_seq(self):
3021        pass
3022
3023    def start_ondraw(self,attr):
3024        defn = ABag()
3025        if 'name' in attr: defn.name = attr['name']
3026        else: self._syntax_error('<onDraw> needs at least a name attribute')
3027
3028        defn.label = attr.get('label',None)
3029        defn.kind='onDraw'
3030        self._push('ondraw',cbDefn=defn)
3031        self.handle_data('')
3032        self._pop('ondraw')
3033    start_onDraw=start_ondraw
3034    end_onDraw=end_ondraw=end_seq
3035
3036    def start_index(self,attr):
3037        attr=self.getAttributes(attr,_indexAttrMap)
3038        defn = ABag()
3039        if 'item' in attr:
3040            label = attr['item']
3041        else:
3042            self._syntax_error('<index> needs at least an item attribute')
3043        if 'name' in attr:
3044            name = attr['name']
3045        else:
3046            name = DEFAULT_INDEX_NAME
3047        format = attr.get('format',None)
3048        if format is not None and format not in ('123','I','i','ABC','abc'):
3049            raise ValueError('index tag format is %r not valid 123 I i ABC or abc' % offset)
3050        offset = attr.get('offset',None)
3051        if offset is not None:
3052            try:
3053                offset = int(offset)
3054            except:
3055                raise ValueError('index tag offset is %r not an int' % offset)
3056        defn.label = encode_label((label,format,offset))
3057        defn.name = name
3058        defn.kind='index'
3059        self._push('index',cbDefn=defn)
3060        self.handle_data('')
3061        self._pop('index',)
3062    end_index=end_seq
3063
3064    def start_unknown(self,attr):
3065        pass
3066    end_unknown=end_seq
3067
3068    #---------------------------------------------------------------
3069    def _push(self,tag,**attr):
3070        frag = copy.copy(self._stack[-1])
3071        frag.__tag__ = tag
3072        _applyAttributes(frag,attr)
3073        self._stack.append(frag)
3074
3075    def _pop(self,tag):
3076        frag = self._stack.pop()
3077        if tag==frag.__tag__: return frag
3078        raise ValueError('Parse error: saw </%s> instead of expected </%s>' % (tag,frag.__tag__))
3079
3080    def getAttributes(self,attr,attrMap):
3081        A = {}
3082        for k, v in attr.items():
3083            if not self.caseSensitive:
3084                k = k.lower()
3085            if k in attrMap:
3086                j = attrMap[k]
3087                func = j[1]
3088                if func is not None:
3089                    #it's a function
3090                    v = func(self,v) if isinstance(func,_ExValidate) else func(v)
3091                A[j[0]] = v
3092            else:
3093                self._syntax_error('invalid attribute name %s attrMap=%r'% (k,list(sorted(attrMap.keys()))))
3094        return A
3095
3096    #----------------------------------------------------------------
3097
3098    def __init__(self,verbose=0, caseSensitive=0, ignoreUnknownTags=1, crashOnError=True):
3099        HTMLParser.__init__(self,
3100            **(dict(convert_charrefs=False) if sys.version_info>=(3,4) else {}))
3101        self.verbose = verbose
3102        #HTMLParser is case insenstive anyway, but the rml interface still needs this
3103        #all start/end_ methods should have a lower case version for HMTMParser
3104        self.caseSensitive = caseSensitive
3105        self.ignoreUnknownTags = ignoreUnknownTags
3106        self._crashOnError = crashOnError
3107
3108    def _iReset(self):
3109        self.fragList = []
3110        if hasattr(self, 'bFragList'): delattr(self,'bFragList')
3111
3112    def _reset(self, style):
3113        '''reset the parser'''
3114
3115        HTMLParser.reset(self)
3116        # initialize list of string segments to empty
3117        self.errors = []
3118        self._style = style
3119        self._iReset()
3120
3121    #----------------------------------------------------------------
3122    def handle_data(self,data):
3123        "Creates an intermediate representation of string segments."
3124
3125        #The old parser would only 'see' a string after all entities had
3126        #been processed.  Thus, 'Hello &trade; World' would emerge as one
3127        #fragment.    HTMLParser processes these separately.  We want to ensure
3128        #that successive calls like this are concatenated, to prevent too many
3129        #fragments being created.
3130
3131        frag = copy.copy(self._stack[-1])
3132        if hasattr(frag,'cbDefn'):
3133            kind = frag.cbDefn.kind
3134            if data: self._syntax_error('Only empty <%s> tag allowed' % kind)
3135        elif hasattr(frag,'_selfClosingTag'):
3136            if data!='': self._syntax_error('No content allowed in %s tag' % frag._selfClosingTag)
3137            return
3138        else:
3139            #get the right parameters for the
3140            if frag.greek:
3141                frag.fontName = 'symbol'
3142                data = _greekConvert(data)
3143
3144        # bold, italic
3145        frag.fontName = tt2ps(frag.fontName,frag.bold,frag.italic)
3146
3147        #save our data
3148        frag.text = data
3149
3150        if hasattr(frag,'isBullet'):
3151            delattr(frag,'isBullet')
3152            self.bFragList.append(frag)
3153        else:
3154            self.fragList.append(frag)
3155
3156    def handle_cdata(self,data):
3157        self.handle_data(data)
3158
3159    def _setup_for_parse(self,style):
3160        self._seq = reportlab.lib.sequencer.getSequencer()
3161        self._reset(style)  # reinitialise the parser
3162
3163    def _complete_parse(self):
3164        "Reset after parsing, to be ready for next paragraph"
3165        if self._stack:
3166            self._syntax_error('parse ended with %d unclosed tags\n %s' % (len(self._stack),'\n '.join((x.__tag__ for x in reversed(self._stack)))))
3167        del self._seq
3168        style = self._style
3169        del self._style
3170        if len(self.errors)==0:
3171            fragList = self.fragList
3172            bFragList = hasattr(self,'bFragList') and self.bFragList or None
3173            self._iReset()
3174        else:
3175            fragList = bFragList = None
3176
3177        return style, fragList, bFragList
3178
3179    def _tt_handle(self,tt):
3180        "Iterate through a pre-parsed tuple tree (e.g. from pyRXP)"
3181        #import pprint
3182        #pprint.pprint(tt)
3183        #find the corresponding start_tagname and end_tagname methods.
3184        #These must be defined.
3185        tag = tt[0]
3186        try:
3187            start = getattr(self,'start_'+tag)
3188            end = getattr(self,'end_'+tag)
3189        except AttributeError:
3190            if not self.ignoreUnknownTags:
3191                raise ValueError('Invalid tag "%s"' % tag)
3192            start = self.start_unknown
3193            end = self.end_unknown
3194
3195        #call the start_tagname method
3196        start(tt[1] or {})
3197        #if tree node has any children, they will either be further nodes,
3198        #or text.  Accordingly, call either this function, or handle_data.
3199        C = tt[2]
3200        if C:
3201            M = self._tt_handlers
3202            for c in C:
3203                M[isinstance(c,(list,tuple))](c)
3204
3205        #call the end_tagname method
3206        end()
3207
3208    def _tt_start(self,tt):
3209        self._tt_handlers = self.handle_data,self._tt_handle
3210        self._tt_handle(tt)
3211
3212    def tt_parse(self,tt,style):
3213        '''parse from tupletree form'''
3214        self._setup_for_parse(style)
3215        self._tt_start(tt)
3216        return self._complete_parse()
3217
3218    def findSpanStyle(self,style):
3219        raise ValueError('findSpanStyle not implemented in this parser')
3220
3221    #HTMLParser interface
3222    def parse(self, text, style):
3223        "attempt replacement for parse"
3224        self._setup_for_parse(style)
3225        text = asUnicode(text)
3226        if not(len(text)>=6 and text[0]=='<' and _re_para.match(text)):
3227            text = u"<para>"+text+u"</para>"
3228        try:
3229            self.feed(text)
3230        except:
3231            annotateException('\nparagraph text %s caused exception' % ascii(text))
3232        return self._complete_parse()
3233
3234    def handle_starttag(self, tag, attrs):
3235        "Called by HTMLParser when a tag starts"
3236
3237        #tuple tree parser used to expect a dict.  HTML parser
3238        #gives list of two-element tuples
3239        if isinstance(attrs, list):
3240            d = {}
3241            for (k,  v) in attrs:
3242                d[k] = v
3243            attrs = d
3244        if not self.caseSensitive: tag = tag.lower()
3245        try:
3246            start = getattr(self,'start_'+tag)
3247        except AttributeError:
3248            if not self.ignoreUnknownTags:
3249                raise ValueError('Invalid tag "%s"' % tag)
3250            start = self.start_unknown
3251        #call it
3252        start(attrs or {})
3253
3254    def handle_endtag(self, tag):
3255        "Called by HTMLParser when a tag ends"
3256        #find the existing end_tagname method
3257        if not self.caseSensitive: tag = tag.lower()
3258        try:
3259            end = getattr(self,'end_'+tag)
3260        except AttributeError:
3261            if not self.ignoreUnknownTags:
3262                raise ValueError('Invalid tag "%s"' % tag)
3263            end = self.end_unknown
3264        #call it
3265        end()
3266
3267    def handle_entityref(self, name):
3268        "Handles a named entity.  "
3269        try:
3270            v = known_entities[name]
3271        except:
3272            v = u'&%s;' % name
3273        self.handle_data(v)
3274
3275if __name__=='__main__':
3276    from reportlab.platypus import cleanBlockQuotedText
3277    from reportlab.lib.styles import _baseFontName
3278    _parser=ParaParser()
3279    def check_text(text,p=_parser):
3280        print('##########')
3281        text = cleanBlockQuotedText(text)
3282        l,rv,bv = p.parse(text,style)
3283        if rv is None:
3284            for l in _parser.errors:
3285                print(l)
3286        else:
3287            print('ParaStyle', l.fontName,l.fontSize,l.textColor)
3288            for l in rv:
3289                sys.stdout.write(l.fontName,l.fontSize,l.textColor,l.bold, l.rise, '|%s|'%l.text[:25])
3290                if hasattr(l,'cbDefn'):
3291                    print('cbDefn',getattr(l.cbDefn,'name',''),getattr(l.cbDefn,'label',''),l.cbDefn.kind)
3292                else: print()
3293
3294    style=ParaFrag()
3295    style.fontName=_baseFontName
3296    style.fontSize = 12
3297    style.textColor = black
3298    style.bulletFontName = black
3299    style.bulletFontName=_baseFontName
3300    style.bulletFontSize=12
3301
3302    text='''
3303    <b><i><greek>a</greek>D</i></b>&beta;<unichr value="0x394"/>
3304    <font name="helvetica" size="15" color=green>
3305    Tell me, O muse, of that ingenious hero who travelled far and wide
3306    after</font> he had sacked the famous town of Troy. Many cities did he visit,
3307    and many were the nations with whose manners and customs he was acquainted;
3308    moreover he suffered much by sea while trying to save his own life
3309    and bring his men safely home; but do what he might he could not save
3310    his men, for they perished through their own sheer folly in eating
3311    the cattle of the Sun-god Hyperion; so the god prevented them from
3312    ever reaching home. Tell me, too, about all these things, O daughter
3313    of Jove, from whatsoever source you<super>1</super> may know them.
3314    '''
3315    check_text(text)
3316    check_text('<para> </para>')
3317    check_text('<para font="%s" size=24 leading=28.8 spaceAfter=72>ReportLab -- Reporting for the Internet Age</para>'%_baseFontName)
3318    check_text('''
3319    <font color=red>&tau;</font>Tell me, O muse, of that ingenious hero who travelled far and wide
3320    after he had sacked the famous town of Troy. Many cities did he visit,
3321    and many were the nations with whose manners and customs he was acquainted;
3322    moreover he suffered much by sea while trying to save his own life
3323    and bring his men safely home; but do what he might he could not save
3324    his men, for they perished through their own sheer folly in eating
3325    the cattle of the Sun-god Hyperion; so the god prevented them from
3326    ever reaching home. Tell me, too, about all these things, O daughter
3327    of Jove, from whatsoever source you may know them.''')
3328    check_text('''
3329    Telemachus took this speech as of good omen and rose at once, for
3330    he was bursting with what he had to say. He stood in the middle of
3331    the assembly and the good herald Pisenor brought him his staff. Then,
3332    turning to Aegyptius, "Sir," said he, "it is I, as you will shortly
3333    learn, who have convened you, for it is I who am the most aggrieved.
3334    I have not got wind of any host approaching about which I would warn
3335    you, nor is there any matter of public moment on which I would speak.
3336    My grieveance is purely personal, and turns on two great misfortunes
3337    which have fallen upon my house. The first of these is the loss of
3338    my excellent father, who was chief among all you here present, and
3339    was like a father to every one of you; the second is much more serious,
3340    and ere long will be the utter ruin of my estate. The sons of all
3341    the chief men among you are pestering my mother to marry them against
3342    her will. They are afraid to go to her father Icarius, asking him
3343    to choose the one he likes best, and to provide marriage gifts for
3344    his daughter, but day by day they keep hanging about my father's house,
3345    sacrificing our oxen, sheep, and fat goats for their banquets, and
3346    never giving so much as a thought to the quantity of wine they drink.
3347    No estate can stand such recklessness; we have now no Ulysses to ward
3348    off harm from our doors, and I cannot hold my own against them. I
3349    shall never all my days be as good a man as he was, still I would
3350    indeed defend myself if I had power to do so, for I cannot stand such
3351    treatment any longer; my house is being disgraced and ruined. Have
3352    respect, therefore, to your own consciences and to public opinion.
3353    Fear, too, the wrath of heaven, lest the gods should be displeased
3354    and turn upon you. I pray you by Jove and Themis, who is the beginning
3355    and the end of councils, [do not] hold back, my friends, and leave
3356    me singlehanded- unless it be that my brave father Ulysses did some
3357    wrong to the Achaeans which you would now avenge on me, by aiding
3358    and abetting these suitors. Moreover, if I am to be eaten out of house
3359    and home at all, I had rather you did the eating yourselves, for I
3360    could then take action against you to some purpose, and serve you
3361    with notices from house to house till I got paid in full, whereas
3362    now I have no remedy."''')
3363
3364    check_text('''
3365But as the sun was rising from the fair sea into the firmament of
3366heaven to shed light on mortals and immortals, they reached Pylos
3367the city of Neleus. Now the people of Pylos were gathered on the sea
3368shore to offer sacrifice of black bulls to Neptune lord of the Earthquake.
3369There were nine guilds with five hundred men in each, and there were
3370nine bulls to each guild. As they were eating the inward meats and
3371burning the thigh bones [on the embers] in the name of Neptune, Telemachus
3372and his crew arrived, furled their sails, brought their ship to anchor,
3373and went ashore. ''')
3374    check_text('''
3375So the neighbours and kinsmen of Menelaus were feasting and making
3376merry in his house. There was a bard also to sing to them and play
3377his lyre, while two tumblers went about performing in the midst of
3378them when the man struck up with his tune.]''')
3379    check_text('''
3380"When we had passed the [Wandering] rocks, with Scylla and terrible
3381Charybdis, we reached the noble island of the sun-god, where were
3382the goodly cattle and sheep belonging to the sun Hyperion. While still
3383at sea in my ship I could bear the cattle lowing as they came home
3384to the yards, and the sheep bleating. Then I remembered what the blind
3385Theban prophet Teiresias had told me, and how carefully Aeaean Circe
3386had warned me to shun the island of the blessed sun-god. So being
3387much troubled I said to the men, 'My men, I know you are hard pressed,
3388but listen while I <strike>tell you the prophecy that</strike> Teiresias made me, and
3389how carefully Aeaean Circe warned me to shun the island of the blessed
3390sun-god, for it was here, she said, that our worst danger would lie.
3391Head the ship, therefore, away from the island.''')
3392    check_text('''A&lt;B&gt;C&amp;D&quot;E&apos;F''')
3393    check_text('''A&lt; B&gt; C&amp; D&quot; E&apos; F''')
3394    check_text('''<![CDATA[<>&'"]]>''')
3395    check_text('''<bullet face=courier size=14 color=green>+</bullet>
3396There was a bard also to sing to them and play
3397his lyre, while two tumblers went about performing in the midst of
3398them when the man struck up with his tune.]''')
3399    check_text('''<onDraw name="myFunc" label="aaa   bbb">A paragraph''')
3400    check_text('''<para><onDraw name="myFunc" label="aaa   bbb">B paragraph</para>''')
3401    # HVB, 30.05.2003: Test for new features
3402    _parser.caseSensitive=0
3403    check_text('''Here comes <FONT FACE="Helvetica" SIZE="14pt">Helvetica 14</FONT> with <STRONG>strong</STRONG> <EM>emphasis</EM>.''')
3404    check_text('''Here comes <font face="Helvetica" size="14pt">Helvetica 14</font> with <Strong>strong</Strong> <em>emphasis</em>.''')
3405    check_text('''Here comes <font face="Courier" size="3cm">Courier 3cm</font> and normal again.''')
3406    check_text('''Before the break <br/>the middle line <br/> and the last line.''')
3407    check_text('''This should be an inline image <img src='../../../docs/images/testimg.gif'/>!''')
3408    check_text('''aaa&nbsp;bbbb <u>underline&#32;</u> cccc''')
3409