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 ™ 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>β<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>τ</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<B>C&D"E'F''') 3393 check_text('''A< B> C& D" E' 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 bbbb <u>underline </u> cccc''') 3409