summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@netsurf-browser.org>2010-12-04 19:03:19 +0000
committerDaniel Silverstone <dsilvers@netsurf-browser.org>2010-12-04 19:03:19 +0000
commitef71b3d9674cc97e3a4b8a7cf62ab5ff043a2c77 (patch)
treea8bf79d08ed4fa619e836880f499ec8b29165d42
parentdeb36d37e23997aa5352e0a7c2cc99e4a29f0416 (diff)
downloadlibhubbub-ef71b3d9674cc97e3a4b8a7cf62ab5ff043a2c77.tar.gz
libhubbub-ef71b3d9674cc97e3a4b8a7cf62ab5ff043a2c77.tar.bz2
Remove init/final and embed entity trie at build time. r=vince
svn path=/trunk/hubbub/; revision=10976
-rw-r--r--build/Entities2142
-rw-r--r--build/make-entities.pl138
-rw-r--r--include/hubbub/hubbub.h7
-rw-r--r--src/Makefile2
-rw-r--r--src/hubbub.c65
-rw-r--r--src/tokeniser/Makefile8
-rw-r--r--src/tokeniser/entities.c2262
-rw-r--r--src/tokeniser/entities.h7
-rw-r--r--src/tokeniser/tokeniser.c4
-rw-r--r--src/utils/Makefile2
-rw-r--r--src/utils/dict.c236
-rw-r--r--src/utils/dict.h32
-rw-r--r--test/INDEX2
-rw-r--r--test/Makefile4
-rw-r--r--test/csdetect.c11
-rw-r--r--test/dict.c52
-rw-r--r--test/entities.c13
-rw-r--r--test/hubbub.c29
-rw-r--r--test/parser.c5
-rw-r--r--test/tokeniser.c5
-rw-r--r--test/tokeniser2.c5
-rw-r--r--test/tokeniser3.c5
-rw-r--r--test/tree-buf.c5
-rw-r--r--test/tree.c5
-rw-r--r--test/tree2.c5
25 files changed, 2361 insertions, 2690 deletions
diff --git a/build/Entities b/build/Entities
new file mode 100644
index 0000000..f067008
--- /dev/null
+++ b/build/Entities
@@ -0,0 +1,2142 @@
+# Entities for HTML5
+# Note, some entities are allowed to omit their trailing semicolon, which is
+# why most entities here have semicolons after them.
+
+# Entity Code
+Aacute; 0x000C1
+Aacute 0x000C1
+aacute; 0x000E1
+aacute 0x000E1
+Abreve; 0x00102
+abreve; 0x00103
+ac; 0x0223E
+acd; 0x0223F
+Acirc; 0x000C2
+Acirc 0x000C2
+acirc; 0x000E2
+acirc 0x000E2
+acute; 0x000B4
+acute 0x000B4
+Acy; 0x00410
+acy; 0x00430
+AElig; 0x000C6
+AElig 0x000C6
+aelig; 0x000E6
+aelig 0x000E6
+af; 0x02061
+Afr; 0x1D504
+afr; 0x1D51E
+Agrave; 0x000C0
+Agrave 0x000C0
+agrave; 0x000E0
+agrave 0x000E0
+alefsym; 0x02135
+aleph; 0x02135
+Alpha; 0x00391
+alpha; 0x003B1
+Amacr; 0x00100
+amacr; 0x00101
+amalg; 0x02A3F
+amp; 0x00026
+amp 0x00026
+AMP; 0x00026
+AMP 0x00026
+and; 0x02227
+And; 0x02A53
+andand; 0x02A55
+andd; 0x02A5C
+andslope; 0x02A58
+andv; 0x02A5A
+ang; 0x02220
+ange; 0x029A4
+angle; 0x02220
+angmsd; 0x02221
+angmsdaa; 0x029A8
+angmsdab; 0x029A9
+angmsdac; 0x029AA
+angmsdad; 0x029AB
+angmsdae; 0x029AC
+angmsdaf; 0x029AD
+angmsdag; 0x029AE
+angmsdah; 0x029AF
+angrt; 0x0221F
+angrtvb; 0x022BE
+angrtvbd; 0x0299D
+angsph; 0x02222
+angst; 0x0212B
+angzarr; 0x0237C
+Aogon; 0x00104
+aogon; 0x00105
+Aopf; 0x1D538
+aopf; 0x1D552
+ap; 0x02248
+apacir; 0x02A6F
+ape; 0x0224A
+apE; 0x02A70
+apid; 0x0224B
+apos; 0x00027
+ApplyFunction; 0x02061
+approx; 0x02248
+approxeq; 0x0224A
+Aring; 0x000C5
+Aring 0x000C5
+aring; 0x000E5
+aring 0x000E5
+Ascr; 0x1D49C
+ascr; 0x1D4B6
+Assign; 0x02254
+ast; 0x0002A
+asymp; 0x02248
+asympeq; 0x0224D
+Atilde; 0x000C3
+Atilde 0x000C3
+atilde; 0x000E3
+atilde 0x000E3
+Auml; 0x000C4
+Auml 0x000C4
+auml; 0x000E4
+auml 0x000E4
+awconint; 0x02233
+awint; 0x02A11
+backcong; 0x0224C
+backepsilon; 0x003F6
+backprime; 0x02035
+backsim; 0x0223D
+backsimeq; 0x022CD
+Backslash; 0x02216
+Barv; 0x02AE7
+barvee; 0x022BD
+barwed; 0x02305
+Barwed; 0x02306
+barwedge; 0x02305
+bbrk; 0x023B5
+bbrktbrk; 0x023B6
+bcong; 0x0224C
+Bcy; 0x00411
+bcy; 0x00431
+bdquo; 0x0201E
+becaus; 0x02235
+because; 0x02235
+Because; 0x02235
+bemptyv; 0x029B0
+bepsi; 0x003F6
+bernou; 0x0212C
+Bernoullis; 0x0212C
+Beta; 0x00392
+beta; 0x003B2
+beth; 0x02136
+between; 0x0226C
+Bfr; 0x1D505
+bfr; 0x1D51F
+bigcap; 0x022C2
+bigcirc; 0x025EF
+bigcup; 0x022C3
+bigodot; 0x02A00
+bigoplus; 0x02A01
+bigotimes; 0x02A02
+bigsqcup; 0x02A06
+bigstar; 0x02605
+bigtriangledown; 0x025BD
+bigtriangleup; 0x025B3
+biguplus; 0x02A04
+bigvee; 0x022C1
+bigwedge; 0x022C0
+bkarow; 0x0290D
+blacklozenge; 0x029EB
+blacksquare; 0x025AA
+blacktriangle; 0x025B4
+blacktriangledown; 0x025BE
+blacktriangleleft; 0x025C2
+blacktriangleright; 0x025B8
+blank; 0x02423
+blk12; 0x02592
+blk14; 0x02591
+blk34; 0x02593
+block; 0x02588
+bnot; 0x02310
+bNot; 0x02AED
+Bopf; 0x1D539
+bopf; 0x1D553
+bot; 0x022A5
+bottom; 0x022A5
+bowtie; 0x022C8
+boxbox; 0x029C9
+boxdl; 0x02510
+boxdL; 0x02555
+boxDl; 0x02556
+boxDL; 0x02557
+boxdr; 0x0250C
+boxdR; 0x02552
+boxDr; 0x02553
+boxDR; 0x02554
+boxh; 0x02500
+boxH; 0x02550
+boxhd; 0x0252C
+boxHd; 0x02564
+boxhD; 0x02565
+boxHD; 0x02566
+boxhu; 0x02534
+boxHu; 0x02567
+boxhU; 0x02568
+boxHU; 0x02569
+boxminus; 0x0229F
+boxplus; 0x0229E
+boxtimes; 0x022A0
+boxul; 0x02518
+boxuL; 0x0255B
+boxUl; 0x0255C
+boxUL; 0x0255D
+boxur; 0x02514
+boxuR; 0x02558
+boxUr; 0x02559
+boxUR; 0x0255A
+boxv; 0x02502
+boxV; 0x02551
+boxvh; 0x0253C
+boxvH; 0x0256A
+boxVh; 0x0256B
+boxVH; 0x0256C
+boxvl; 0x02524
+boxvL; 0x02561
+boxVl; 0x02562
+boxVL; 0x02563
+boxvr; 0x0251C
+boxvR; 0x0255E
+boxVr; 0x0255F
+boxVR; 0x02560
+bprime; 0x02035
+breve; 0x002D8
+Breve; 0x002D8
+brvbar; 0x000A6
+brvbar 0x000A6
+Bscr; 0x0212C
+bscr; 0x1D4B7
+bsemi; 0x0204F
+bsim; 0x0223D
+bsime; 0x022CD
+bsol; 0x0005C
+bsolb; 0x029C5
+bull; 0x02022
+bullet; 0x02022
+bump; 0x0224E
+bumpe; 0x0224F
+bumpE; 0x02AAE
+Bumpeq; 0x0224E
+bumpeq; 0x0224F
+Cacute; 0x00106
+cacute; 0x00107
+cap; 0x02229
+Cap; 0x022D2
+capand; 0x02A44
+capbrcup; 0x02A49
+capcap; 0x02A4B
+capcup; 0x02A47
+capdot; 0x02A40
+CapitalDifferentialD; 0x02145
+caret; 0x02041
+caron; 0x002C7
+Cayleys; 0x0212D
+ccaps; 0x02A4D
+Ccaron; 0x0010C
+ccaron; 0x0010D
+Ccedil; 0x000C7
+Ccedil 0x000C7
+ccedil; 0x000E7
+ccedil 0x000E7
+Ccirc; 0x00108
+ccirc; 0x00109
+Cconint; 0x02230
+ccups; 0x02A4C
+ccupssm; 0x02A50
+Cdot; 0x0010A
+cdot; 0x0010B
+cedil; 0x000B8
+cedil 0x000B8
+Cedilla; 0x000B8
+cemptyv; 0x029B2
+cent; 0x000A2
+cent 0x000A2
+centerdot; 0x000B7
+CenterDot; 0x000B7
+Cfr; 0x0212D
+cfr; 0x1D520
+CHcy; 0x00427
+chcy; 0x00447
+check; 0x02713
+checkmark; 0x02713
+Chi; 0x003A7
+chi; 0x003C7
+cir; 0x025CB
+circ; 0x002C6
+circeq; 0x02257
+circlearrowleft; 0x021BA
+circlearrowright; 0x021BB
+circledast; 0x0229B
+circledcirc; 0x0229A
+circleddash; 0x0229D
+CircleDot; 0x02299
+circledR; 0x000AE
+circledS; 0x024C8
+CircleMinus; 0x02296
+CirclePlus; 0x02295
+CircleTimes; 0x02297
+cire; 0x02257
+cirE; 0x029C3
+cirfnint; 0x02A10
+cirmid; 0x02AEF
+cirscir; 0x029C2
+ClockwiseContourIntegral; 0x02232
+CloseCurlyDoubleQuote; 0x0201D
+CloseCurlyQuote; 0x02019
+clubs; 0x02663
+clubsuit; 0x02663
+colon; 0x0003A
+Colon; 0x02237
+colone; 0x02254
+Colone; 0x02A74
+coloneq; 0x02254
+comma; 0x0002C
+commat; 0x00040
+comp; 0x02201
+compfn; 0x02218
+complement; 0x02201
+complexes; 0x02102
+cong; 0x02245
+congdot; 0x02A6D
+Congruent; 0x02261
+conint; 0x0222E
+Conint; 0x0222F
+ContourIntegral; 0x0222E
+Copf; 0x02102
+copf; 0x1D554
+coprod; 0x02210
+Coproduct; 0x02210
+copy; 0x000A9
+copy 0x000A9
+COPY; 0x000A9
+COPY 0x000A9
+copysr; 0x02117
+CounterClockwiseContourIntegral; 0x02233
+crarr; 0x021B5
+cross; 0x02717
+Cross; 0x02A2F
+Cscr; 0x1D49E
+cscr; 0x1D4B8
+csub; 0x02ACF
+csube; 0x02AD1
+csup; 0x02AD0
+csupe; 0x02AD2
+ctdot; 0x022EF
+cudarrl; 0x02938
+cudarrr; 0x02935
+cuepr; 0x022DE
+cuesc; 0x022DF
+cularr; 0x021B6
+cularrp; 0x0293D
+cup; 0x0222A
+Cup; 0x022D3
+cupbrcap; 0x02A48
+CupCap; 0x0224D
+cupcap; 0x02A46
+cupcup; 0x02A4A
+cupdot; 0x0228D
+cupor; 0x02A45
+curarr; 0x021B7
+curarrm; 0x0293C
+curlyeqprec; 0x022DE
+curlyeqsucc; 0x022DF
+curlyvee; 0x022CE
+curlywedge; 0x022CF
+curren; 0x000A4
+curren 0x000A4
+curvearrowleft; 0x021B6
+curvearrowright; 0x021B7
+cuvee; 0x022CE
+cuwed; 0x022CF
+cwconint; 0x02232
+cwint; 0x02231
+cylcty; 0x0232D
+dagger; 0x02020
+Dagger; 0x02021
+daleth; 0x02138
+darr; 0x02193
+Darr; 0x021A1
+dArr; 0x021D3
+dash; 0x02010
+dashv; 0x022A3
+Dashv; 0x02AE4
+dbkarow; 0x0290F
+dblac; 0x002DD
+Dcaron; 0x0010E
+dcaron; 0x0010F
+Dcy; 0x00414
+dcy; 0x00434
+DD; 0x02145
+dd; 0x02146
+ddagger; 0x02021
+ddarr; 0x021CA
+DDotrahd; 0x02911
+ddotseq; 0x02A77
+deg; 0x000B0
+deg 0x000B0
+Del; 0x02207
+Delta; 0x00394
+delta; 0x003B4
+demptyv; 0x029B1
+dfisht; 0x0297F
+Dfr; 0x1D507
+dfr; 0x1D521
+dHar; 0x02965
+dharl; 0x021C3
+dharr; 0x021C2
+DiacriticalAcute; 0x000B4
+DiacriticalDot; 0x002D9
+DiacriticalDoubleAcute; 0x002DD
+DiacriticalGrave; 0x00060
+DiacriticalTilde; 0x002DC
+diam; 0x022C4
+diamond; 0x022C4
+Diamond; 0x022C4
+diamondsuit; 0x02666
+diams; 0x02666
+die; 0x000A8
+DifferentialD; 0x02146
+digamma; 0x003DD
+disin; 0x022F2
+div; 0x000F7
+divide; 0x000F7
+divide 0x000F7
+divideontimes; 0x022C7
+divonx; 0x022C7
+DJcy; 0x00402
+djcy; 0x00452
+dlcorn; 0x0231E
+dlcrop; 0x0230D
+dollar; 0x00024
+Dopf; 0x1D53B
+dopf; 0x1D555
+Dot; 0x000A8
+dot; 0x002D9
+DotDot; 0x020DC
+doteq; 0x02250
+doteqdot; 0x02251
+DotEqual; 0x02250
+dotminus; 0x02238
+dotplus; 0x02214
+dotsquare; 0x022A1
+doublebarwedge; 0x02306
+DoubleContourIntegral; 0x0222F
+DoubleDot; 0x000A8
+DoubleDownArrow; 0x021D3
+DoubleLeftArrow; 0x021D0
+DoubleLeftRightArrow; 0x021D4
+DoubleLeftTee; 0x02AE4
+DoubleLongLeftArrow; 0x027F8
+DoubleLongLeftRightArrow; 0x027FA
+DoubleLongRightArrow; 0x027F9
+DoubleRightArrow; 0x021D2
+DoubleRightTee; 0x022A8
+DoubleUpArrow; 0x021D1
+DoubleUpDownArrow; 0x021D5
+DoubleVerticalBar; 0x02225
+downarrow; 0x02193
+DownArrow; 0x02193
+Downarrow; 0x021D3
+DownArrowBar; 0x02913
+DownArrowUpArrow; 0x021F5
+DownBreve; 0x00311
+downdownarrows; 0x021CA
+downharpoonleft; 0x021C3
+downharpoonright; 0x021C2
+DownLeftRightVector; 0x02950
+DownLeftTeeVector; 0x0295E
+DownLeftVector; 0x021BD
+DownLeftVectorBar; 0x02956
+DownRightTeeVector; 0x0295F
+DownRightVector; 0x021C1
+DownRightVectorBar; 0x02957
+DownTee; 0x022A4
+DownTeeArrow; 0x021A7
+drbkarow; 0x02910
+drcorn; 0x0231F
+drcrop; 0x0230C
+Dscr; 0x1D49F
+dscr; 0x1D4B9
+DScy; 0x00405
+dscy; 0x00455
+dsol; 0x029F6
+Dstrok; 0x00110
+dstrok; 0x00111
+dtdot; 0x022F1
+dtri; 0x025BF
+dtrif; 0x025BE
+duarr; 0x021F5
+duhar; 0x0296F
+dwangle; 0x029A6
+DZcy; 0x0040F
+dzcy; 0x0045F
+dzigrarr; 0x027FF
+Eacute; 0x000C9
+Eacute 0x000C9
+eacute; 0x000E9
+eacute 0x000E9
+easter; 0x02A6E
+Ecaron; 0x0011A
+ecaron; 0x0011B
+ecir; 0x02256
+Ecirc; 0x000CA
+Ecirc 0x000CA
+ecirc; 0x000EA
+ecirc 0x000EA
+ecolon; 0x02255
+Ecy; 0x0042D
+ecy; 0x0044D
+eDDot; 0x02A77
+Edot; 0x00116
+edot; 0x00117
+eDot; 0x02251
+ee; 0x02147
+efDot; 0x02252
+Efr; 0x1D508
+efr; 0x1D522
+eg; 0x02A9A
+Egrave; 0x000C8
+Egrave 0x000C8
+egrave; 0x000E8
+egrave 0x000E8
+egs; 0x02A96
+egsdot; 0x02A98
+el; 0x02A99
+Element; 0x02208
+elinters; 0x023E7
+ell; 0x02113
+els; 0x02A95
+elsdot; 0x02A97
+Emacr; 0x00112
+emacr; 0x00113
+empty; 0x02205
+emptyset; 0x02205
+EmptySmallSquare; 0x025FB
+emptyv; 0x02205
+EmptyVerySmallSquare; 0x025AB
+emsp; 0x02003
+emsp13; 0x02004
+emsp14; 0x02005
+ENG; 0x0014A
+eng; 0x0014B
+ensp; 0x02002
+Eogon; 0x00118
+eogon; 0x00119
+Eopf; 0x1D53C
+eopf; 0x1D556
+epar; 0x022D5
+eparsl; 0x029E3
+eplus; 0x02A71
+epsi; 0x003F5
+Epsilon; 0x00395
+epsilon; 0x003B5
+epsiv; 0x003B5
+eqcirc; 0x02256
+eqcolon; 0x02255
+eqsim; 0x02242
+eqslantgtr; 0x02A96
+eqslantless; 0x02A95
+Equal; 0x02A75
+equals; 0x0003D
+EqualTilde; 0x02242
+equest; 0x0225F
+Equilibrium; 0x021CC
+equiv; 0x02261
+equivDD; 0x02A78
+eqvparsl; 0x029E5
+erarr; 0x02971
+erDot; 0x02253
+escr; 0x0212F
+Escr; 0x02130
+esdot; 0x02250
+esim; 0x02242
+Esim; 0x02A73
+Eta; 0x00397
+eta; 0x003B7
+ETH; 0x000D0
+ETH 0x000D0
+eth; 0x000F0
+eth 0x000F0
+Euml; 0x000CB
+Euml 0x000CB
+euml; 0x000EB
+euml 0x000EB
+euro; 0x020AC
+excl; 0x00021
+exist; 0x02203
+Exists; 0x02203
+expectation; 0x02130
+exponentiale; 0x02147
+ExponentialE; 0x02147
+fallingdotseq; 0x02252
+Fcy; 0x00424
+fcy; 0x00444
+female; 0x02640
+ffilig; 0x0FB03
+fflig; 0x0FB00
+ffllig; 0x0FB04
+Ffr; 0x1D509
+ffr; 0x1D523
+filig; 0x0FB01
+FilledSmallSquare; 0x025FC
+FilledVerySmallSquare; 0x025AA
+flat; 0x0266D
+fllig; 0x0FB02
+fltns; 0x025B1
+fnof; 0x00192
+Fopf; 0x1D53D
+fopf; 0x1D557
+forall; 0x02200
+ForAll; 0x02200
+fork; 0x022D4
+forkv; 0x02AD9
+Fouriertrf; 0x02131
+fpartint; 0x02A0D
+frac12; 0x000BD
+frac12 0x000BD
+frac13; 0x02153
+frac14; 0x000BC
+frac14 0x000BC
+frac15; 0x02155
+frac16; 0x02159
+frac18; 0x0215B
+frac23; 0x02154
+frac25; 0x02156
+frac34; 0x000BE
+frac34 0x000BE
+frac35; 0x02157
+frac38; 0x0215C
+frac45; 0x02158
+frac56; 0x0215A
+frac58; 0x0215D
+frac78; 0x0215E
+frasl; 0x02044
+frown; 0x02322
+Fscr; 0x02131
+fscr; 0x1D4BB
+gacute; 0x001F5
+Gamma; 0x00393
+gamma; 0x003B3
+Gammad; 0x003DC
+gammad; 0x003DD
+gap; 0x02A86
+Gbreve; 0x0011E
+gbreve; 0x0011F
+Gcedil; 0x00122
+Gcirc; 0x0011C
+gcirc; 0x0011D
+Gcy; 0x00413
+gcy; 0x00433
+Gdot; 0x00120
+gdot; 0x00121
+ge; 0x02265
+gE; 0x02267
+gel; 0x022DB
+gEl; 0x02A8C
+geq; 0x02265
+geqq; 0x02267
+geqslant; 0x02A7E
+ges; 0x02A7E
+gescc; 0x02AA9
+gesdot; 0x02A80
+gesdoto; 0x02A82
+gesdotol; 0x02A84
+gesles; 0x02A94
+Gfr; 0x1D50A
+gfr; 0x1D524
+gg; 0x0226B
+Gg; 0x022D9
+ggg; 0x022D9
+gimel; 0x02137
+GJcy; 0x00403
+gjcy; 0x00453
+gl; 0x02277
+gla; 0x02AA5
+glE; 0x02A92
+glj; 0x02AA4
+gnap; 0x02A8A
+gnapprox; 0x02A8A
+gnE; 0x02269
+gne; 0x02A88
+gneq; 0x02A88
+gneqq; 0x02269
+gnsim; 0x022E7
+Gopf; 0x1D53E
+gopf; 0x1D558
+grave; 0x00060
+GreaterEqual; 0x02265
+GreaterEqualLess; 0x022DB
+GreaterFullEqual; 0x02267
+GreaterGreater; 0x02AA2
+GreaterLess; 0x02277
+GreaterSlantEqual; 0x02A7E
+GreaterTilde; 0x02273
+gscr; 0x0210A
+Gscr; 0x1D4A2
+gsim; 0x02273
+gsime; 0x02A8E
+gsiml; 0x02A90
+gt; 0x0003E
+gt 0x0003E
+GT; 0x0003E
+GT 0x0003E
+Gt; 0x0226B
+gtcc; 0x02AA7
+gtcir; 0x02A7A
+gtdot; 0x022D7
+gtlPar; 0x02995
+gtquest; 0x02A7C
+gtrapprox; 0x02A86
+gtrarr; 0x02978
+gtrdot; 0x022D7
+gtreqless; 0x022DB
+gtreqqless; 0x02A8C
+gtrless; 0x02277
+gtrsim; 0x02273
+Hacek; 0x002C7
+hairsp; 0x0200A
+half; 0x000BD
+hamilt; 0x0210B
+HARDcy; 0x0042A
+hardcy; 0x0044A
+harr; 0x02194
+hArr; 0x021D4
+harrcir; 0x02948
+harrw; 0x021AD
+Hat; 0x0005E
+hbar; 0x0210F
+Hcirc; 0x00124
+hcirc; 0x00125
+hearts; 0x02665
+heartsuit; 0x02665
+hellip; 0x02026
+hercon; 0x022B9
+Hfr; 0x0210C
+hfr; 0x1D525
+HilbertSpace; 0x0210B
+hksearow; 0x02925
+hkswarow; 0x02926
+hoarr; 0x021FF
+homtht; 0x0223B
+hookleftarrow; 0x021A9
+hookrightarrow; 0x021AA
+Hopf; 0x0210D
+hopf; 0x1D559
+horbar; 0x02015
+HorizontalLine; 0x02500
+Hscr; 0x0210B
+hscr; 0x1D4BD
+hslash; 0x0210F
+Hstrok; 0x00126
+hstrok; 0x00127
+HumpDownHump; 0x0224E
+HumpEqual; 0x0224F
+hybull; 0x02043
+hyphen; 0x02010
+Iacute; 0x000CD
+Iacute 0x000CD
+iacute; 0x000ED
+iacute 0x000ED
+ic; 0x02063
+Icirc; 0x000CE
+Icirc 0x000CE
+icirc; 0x000EE
+icirc 0x000EE
+Icy; 0x00418
+icy; 0x00438
+Idot; 0x00130
+IEcy; 0x00415
+iecy; 0x00435
+iexcl; 0x000A1
+iexcl 0x000A1
+iff; 0x021D4
+Ifr; 0x02111
+ifr; 0x1D526
+Igrave; 0x000CC
+Igrave 0x000CC
+igrave; 0x000EC
+igrave 0x000EC
+ii; 0x02148
+iiiint; 0x02A0C
+iiint; 0x0222D
+iinfin; 0x029DC
+iiota; 0x02129
+IJlig; 0x00132
+ijlig; 0x00133
+Im; 0x02111
+Imacr; 0x0012A
+imacr; 0x0012B
+image; 0x02111
+ImaginaryI; 0x02148
+imagline; 0x02110
+imagpart; 0x02111
+imath; 0x00131
+imof; 0x022B7
+imped; 0x001B5
+Implies; 0x021D2
+in; 0x02208
+incare; 0x02105
+infin; 0x0221E
+infintie; 0x029DD
+inodot; 0x00131
+int; 0x0222B
+Int; 0x0222C
+intcal; 0x022BA
+integers; 0x02124
+Integral; 0x0222B
+intercal; 0x022BA
+Intersection; 0x022C2
+intlarhk; 0x02A17
+intprod; 0x02A3C
+InvisibleComma; 0x02063
+InvisibleTimes; 0x02062
+IOcy; 0x00401
+iocy; 0x00451
+Iogon; 0x0012E
+iogon; 0x0012F
+Iopf; 0x1D540
+iopf; 0x1D55A
+Iota; 0x00399
+iota; 0x003B9
+iprod; 0x02A3C
+iquest; 0x000BF
+iquest 0x000BF
+Iscr; 0x02110
+iscr; 0x1D4BE
+isin; 0x02208
+isindot; 0x022F5
+isinE; 0x022F9
+isins; 0x022F4
+isinsv; 0x022F3
+isinv; 0x02208
+it; 0x02062
+Itilde; 0x00128
+itilde; 0x00129
+Iukcy; 0x00406
+iukcy; 0x00456
+Iuml; 0x000CF
+Iuml 0x000CF
+iuml; 0x000EF
+iuml 0x000EF
+Jcirc; 0x00134
+jcirc; 0x00135
+Jcy; 0x00419
+jcy; 0x00439
+Jfr; 0x1D50D
+jfr; 0x1D527
+jmath; 0x00237
+Jopf; 0x1D541
+jopf; 0x1D55B
+Jscr; 0x1D4A5
+jscr; 0x1D4BF
+Jsercy; 0x00408
+jsercy; 0x00458
+Jukcy; 0x00404
+jukcy; 0x00454
+Kappa; 0x0039A
+kappa; 0x003BA
+kappav; 0x003F0
+Kcedil; 0x00136
+kcedil; 0x00137
+Kcy; 0x0041A
+kcy; 0x0043A
+Kfr; 0x1D50E
+kfr; 0x1D528
+kgreen; 0x00138
+KHcy; 0x00425
+khcy; 0x00445
+KJcy; 0x0040C
+kjcy; 0x0045C
+Kopf; 0x1D542
+kopf; 0x1D55C
+Kscr; 0x1D4A6
+kscr; 0x1D4C0
+lAarr; 0x021DA
+Lacute; 0x00139
+lacute; 0x0013A
+laemptyv; 0x029B4
+lagran; 0x02112
+Lambda; 0x0039B
+lambda; 0x003BB
+lang; 0x027E8
+Lang; 0x027EA
+langd; 0x02991
+langle; 0x027E8
+lap; 0x02A85
+Laplacetrf; 0x02112
+laquo; 0x000AB
+laquo 0x000AB
+larr; 0x02190
+Larr; 0x0219E
+lArr; 0x021D0
+larrb; 0x021E4
+larrbfs; 0x0291F
+larrfs; 0x0291D
+larrhk; 0x021A9
+larrlp; 0x021AB
+larrpl; 0x02939
+larrsim; 0x02973
+larrtl; 0x021A2
+lat; 0x02AAB
+latail; 0x02919
+lAtail; 0x0291B
+late; 0x02AAD
+lbarr; 0x0290C
+lBarr; 0x0290E
+lbbrk; 0x02772
+lbrace; 0x0007B
+lbrack; 0x0005B
+lbrke; 0x0298B
+lbrksld; 0x0298F
+lbrkslu; 0x0298D
+Lcaron; 0x0013D
+lcaron; 0x0013E
+Lcedil; 0x0013B
+lcedil; 0x0013C
+lceil; 0x02308
+lcub; 0x0007B
+Lcy; 0x0041B
+lcy; 0x0043B
+ldca; 0x02936
+ldquo; 0x0201C
+ldquor; 0x0201E
+ldrdhar; 0x02967
+ldrushar; 0x0294B
+ldsh; 0x021B2
+le; 0x02264
+lE; 0x02266
+LeftAngleBracket; 0x027E8
+leftarrow; 0x02190
+LeftArrow; 0x02190
+Leftarrow; 0x021D0
+LeftArrowBar; 0x021E4
+LeftArrowRightArrow; 0x021C6
+leftarrowtail; 0x021A2
+LeftCeiling; 0x02308
+LeftDoubleBracket; 0x027E6
+LeftDownTeeVector; 0x02961
+LeftDownVector; 0x021C3
+LeftDownVectorBar; 0x02959
+LeftFloor; 0x0230A
+leftharpoondown; 0x021BD
+leftharpoonup; 0x021BC
+leftleftarrows; 0x021C7
+leftrightarrow; 0x02194
+LeftRightArrow; 0x02194
+Leftrightarrow; 0x021D4
+leftrightarrows; 0x021C6
+leftrightharpoons; 0x021CB
+leftrightsquigarrow; 0x021AD
+LeftRightVector; 0x0294E
+LeftTee; 0x022A3
+LeftTeeArrow; 0x021A4
+LeftTeeVector; 0x0295A
+leftthreetimes; 0x022CB
+LeftTriangle; 0x022B2
+LeftTriangleBar; 0x029CF
+LeftTriangleEqual; 0x022B4
+LeftUpDownVector; 0x02951
+LeftUpTeeVector; 0x02960
+LeftUpVector; 0x021BF
+LeftUpVectorBar; 0x02958
+LeftVector; 0x021BC
+LeftVectorBar; 0x02952
+leg; 0x022DA
+lEg; 0x02A8B
+leq; 0x02264
+leqq; 0x02266
+leqslant; 0x02A7D
+les; 0x02A7D
+lescc; 0x02AA8
+lesdot; 0x02A7F
+lesdoto; 0x02A81
+lesdotor; 0x02A83
+lesges; 0x02A93
+lessapprox; 0x02A85
+lessdot; 0x022D6
+lesseqgtr; 0x022DA
+lesseqqgtr; 0x02A8B
+LessEqualGreater; 0x022DA
+LessFullEqual; 0x02266
+LessGreater; 0x02276
+lessgtr; 0x02276
+LessLess; 0x02AA1
+lesssim; 0x02272
+LessSlantEqual; 0x02A7D
+LessTilde; 0x02272
+lfisht; 0x0297C
+lfloor; 0x0230A
+Lfr; 0x1D50F
+lfr; 0x1D529
+lg; 0x02276
+lgE; 0x02A91
+lHar; 0x02962
+lhard; 0x021BD
+lharu; 0x021BC
+lharul; 0x0296A
+lhblk; 0x02584
+LJcy; 0x00409
+ljcy; 0x00459
+ll; 0x0226A
+Ll; 0x022D8
+llarr; 0x021C7
+llcorner; 0x0231E
+Lleftarrow; 0x021DA
+llhard; 0x0296B
+lltri; 0x025FA
+Lmidot; 0x0013F
+lmidot; 0x00140
+lmoust; 0x023B0
+lmoustache; 0x023B0
+lnap; 0x02A89
+lnapprox; 0x02A89
+lnE; 0x02268
+lne; 0x02A87
+lneq; 0x02A87
+lneqq; 0x02268
+lnsim; 0x022E6
+loang; 0x027EC
+loarr; 0x021FD
+lobrk; 0x027E6
+longleftarrow; 0x027F5
+LongLeftArrow; 0x027F5
+Longleftarrow; 0x027F8
+longleftrightarrow; 0x027F7
+LongLeftRightArrow; 0x027F7
+Longleftrightarrow; 0x027FA
+longmapsto; 0x027FC
+longrightarrow; 0x027F6
+LongRightArrow; 0x027F6
+Longrightarrow; 0x027F9
+looparrowleft; 0x021AB
+looparrowright; 0x021AC
+lopar; 0x02985
+Lopf; 0x1D543
+lopf; 0x1D55D
+loplus; 0x02A2D
+lotimes; 0x02A34
+lowast; 0x02217
+lowbar; 0x0005F
+LowerLeftArrow; 0x02199
+LowerRightArrow; 0x02198
+loz; 0x025CA
+lozenge; 0x025CA
+lozf; 0x029EB
+lpar; 0x00028
+lparlt; 0x02993
+lrarr; 0x021C6
+lrcorner; 0x0231F
+lrhar; 0x021CB
+lrhard; 0x0296D
+lrm; 0x0200E
+lrtri; 0x022BF
+lsaquo; 0x02039
+Lscr; 0x02112
+lscr; 0x1D4C1
+lsh; 0x021B0
+Lsh; 0x021B0
+lsim; 0x02272
+lsime; 0x02A8D
+lsimg; 0x02A8F
+lsqb; 0x0005B
+lsquo; 0x02018
+lsquor; 0x0201A
+Lstrok; 0x00141
+lstrok; 0x00142
+lt; 0x0003C
+lt 0x0003C
+LT; 0x0003C
+LT 0x0003C
+Lt; 0x0226A
+ltcc; 0x02AA6
+ltcir; 0x02A79
+ltdot; 0x022D6
+lthree; 0x022CB
+ltimes; 0x022C9
+ltlarr; 0x02976
+ltquest; 0x02A7B
+ltri; 0x025C3
+ltrie; 0x022B4
+ltrif; 0x025C2
+ltrPar; 0x02996
+lurdshar; 0x0294A
+luruhar; 0x02966
+macr; 0x000AF
+macr 0x000AF
+male; 0x02642
+malt; 0x02720
+maltese; 0x02720
+map; 0x021A6
+Map; 0x02905
+mapsto; 0x021A6
+mapstodown; 0x021A7
+mapstoleft; 0x021A4
+mapstoup; 0x021A5
+marker; 0x025AE
+mcomma; 0x02A29
+Mcy; 0x0041C
+mcy; 0x0043C
+mdash; 0x02014
+mDDot; 0x0223A
+measuredangle; 0x02221
+MediumSpace; 0x0205F
+Mellintrf; 0x02133
+Mfr; 0x1D510
+mfr; 0x1D52A
+mho; 0x02127
+micro; 0x000B5
+micro 0x000B5
+mid; 0x02223
+midast; 0x0002A
+midcir; 0x02AF0
+middot; 0x000B7
+middot 0x000B7
+minus; 0x02212
+minusb; 0x0229F
+minusd; 0x02238
+minusdu; 0x02A2A
+MinusPlus; 0x02213
+mlcp; 0x02ADB
+mldr; 0x02026
+mnplus; 0x02213
+models; 0x022A7
+Mopf; 0x1D544
+mopf; 0x1D55E
+mp; 0x02213
+Mscr; 0x02133
+mscr; 0x1D4C2
+mstpos; 0x0223E
+Mu; 0x0039C
+mu; 0x003BC
+multimap; 0x022B8
+mumap; 0x022B8
+nabla; 0x02207
+Nacute; 0x00143
+nacute; 0x00144
+nap; 0x02249
+napos; 0x00149
+napprox; 0x02249
+natur; 0x0266E
+natural; 0x0266E
+naturals; 0x02115
+nbsp; 0x000A0
+nbsp 0x000A0
+ncap; 0x02A43
+Ncaron; 0x00147
+ncaron; 0x00148
+Ncedil; 0x00145
+ncedil; 0x00146
+ncong; 0x02247
+ncup; 0x02A42
+Ncy; 0x0041D
+ncy; 0x0043D
+ndash; 0x02013
+ne; 0x02260
+nearhk; 0x02924
+nearr; 0x02197
+neArr; 0x021D7
+nearrow; 0x02197
+NegativeMediumSpace; 0x0200B
+NegativeThickSpace; 0x0200B
+NegativeThinSpace; 0x0200B
+NegativeVeryThinSpace; 0x0200B
+nequiv; 0x02262
+nesear; 0x02928
+NestedGreaterGreater; 0x0226B
+NestedLessLess; 0x0226A
+NewLine; 0x0000A
+nexist; 0x02204
+nexists; 0x02204
+Nfr; 0x1D511
+nfr; 0x1D52B
+nge; 0x02271
+ngeq; 0x02271
+ngsim; 0x02275
+ngt; 0x0226F
+ngtr; 0x0226F
+nharr; 0x021AE
+nhArr; 0x021CE
+nhpar; 0x02AF2
+ni; 0x0220B
+nis; 0x022FC
+nisd; 0x022FA
+niv; 0x0220B
+NJcy; 0x0040A
+njcy; 0x0045A
+nlarr; 0x0219A
+nlArr; 0x021CD
+nldr; 0x02025
+nle; 0x02270
+nleftarrow; 0x0219A
+nLeftarrow; 0x021CD
+nleftrightarrow; 0x021AE
+nLeftrightarrow; 0x021CE
+nleq; 0x02270
+nless; 0x0226E
+nlsim; 0x02274
+nlt; 0x0226E
+nltri; 0x022EA
+nltrie; 0x022EC
+nmid; 0x02224
+NoBreak; 0x02060
+NonBreakingSpace; 0x000A0
+Nopf; 0x02115
+nopf; 0x1D55F
+not; 0x000AC
+not 0x000AC
+Not; 0x02AEC
+NotCongruent; 0x02262
+NotCupCap; 0x0226D
+NotDoubleVerticalBar; 0x02226
+NotElement; 0x02209
+NotEqual; 0x02260
+NotExists; 0x02204
+NotGreater; 0x0226F
+NotGreaterEqual; 0x02271
+NotGreaterLess; 0x02279
+NotGreaterTilde; 0x02275
+notin; 0x02209
+notinva; 0x02209
+notinvb; 0x022F7
+notinvc; 0x022F6
+NotLeftTriangle; 0x022EA
+NotLeftTriangleEqual; 0x022EC
+NotLess; 0x0226E
+NotLessEqual; 0x02270
+NotLessGreater; 0x02278
+NotLessTilde; 0x02274
+notni; 0x0220C
+notniva; 0x0220C
+notnivb; 0x022FE
+notnivc; 0x022FD
+NotPrecedes; 0x02280
+NotPrecedesSlantEqual; 0x022E0
+NotReverseElement; 0x0220C
+NotRightTriangle; 0x022EB
+NotRightTriangleEqual; 0x022ED
+NotSquareSubsetEqual; 0x022E2
+NotSquareSupersetEqual; 0x022E3
+NotSubsetEqual; 0x02288
+NotSucceeds; 0x02281
+NotSucceedsSlantEqual; 0x022E1
+NotSupersetEqual; 0x02289
+NotTilde; 0x02241
+NotTildeEqual; 0x02244
+NotTildeFullEqual; 0x02247
+NotTildeTilde; 0x02249
+NotVerticalBar; 0x02224
+npar; 0x02226
+nparallel; 0x02226
+npolint; 0x02A14
+npr; 0x02280
+nprcue; 0x022E0
+nprec; 0x02280
+nrarr; 0x0219B
+nrArr; 0x021CF
+nrightarrow; 0x0219B
+nRightarrow; 0x021CF
+nrtri; 0x022EB
+nrtrie; 0x022ED
+nsc; 0x02281
+nsccue; 0x022E1
+Nscr; 0x1D4A9
+nscr; 0x1D4C3
+nshortmid; 0x02224
+nshortparallel; 0x02226
+nsim; 0x02241
+nsime; 0x02244
+nsimeq; 0x02244
+nsmid; 0x02224
+nspar; 0x02226
+nsqsube; 0x022E2
+nsqsupe; 0x022E3
+nsub; 0x02284
+nsube; 0x02288
+nsubseteq; 0x02288
+nsucc; 0x02281
+nsup; 0x02285
+nsupe; 0x02289
+nsupseteq; 0x02289
+ntgl; 0x02279
+Ntilde; 0x000D1
+Ntilde 0x000D1
+ntilde; 0x000F1
+ntilde 0x000F1
+ntlg; 0x02278
+ntriangleleft; 0x022EA
+ntrianglelefteq; 0x022EC
+ntriangleright; 0x022EB
+ntrianglerighteq; 0x022ED
+Nu; 0x0039D
+nu; 0x003BD
+num; 0x00023
+numero; 0x02116
+numsp; 0x02007
+nvdash; 0x022AC
+nvDash; 0x022AD
+nVdash; 0x022AE
+nVDash; 0x022AF
+nvHarr; 0x02904
+nvinfin; 0x029DE
+nvlArr; 0x02902
+nvrArr; 0x02903
+nwarhk; 0x02923
+nwarr; 0x02196
+nwArr; 0x021D6
+nwarrow; 0x02196
+nwnear; 0x02927
+Oacute; 0x000D3
+Oacute 0x000D3
+oacute; 0x000F3
+oacute 0x000F3
+oast; 0x0229B
+ocir; 0x0229A
+Ocirc; 0x000D4
+Ocirc 0x000D4
+ocirc; 0x000F4
+ocirc 0x000F4
+Ocy; 0x0041E
+ocy; 0x0043E
+odash; 0x0229D
+Odblac; 0x00150
+odblac; 0x00151
+odiv; 0x02A38
+odot; 0x02299
+odsold; 0x029BC
+OElig; 0x00152
+oelig; 0x00153
+ofcir; 0x029BF
+Ofr; 0x1D512
+ofr; 0x1D52C
+ogon; 0x002DB
+Ograve; 0x000D2
+Ograve 0x000D2
+ograve; 0x000F2
+ograve 0x000F2
+ogt; 0x029C1
+ohbar; 0x029B5
+ohm; 0x02126
+oint; 0x0222E
+olarr; 0x021BA
+olcir; 0x029BE
+olcross; 0x029BB
+oline; 0x0203E
+olt; 0x029C0
+Omacr; 0x0014C
+omacr; 0x0014D
+Omega; 0x003A9
+omega; 0x003C9
+Omicron; 0x0039F
+omicron; 0x003BF
+omid; 0x029B6
+ominus; 0x02296
+Oopf; 0x1D546
+oopf; 0x1D560
+opar; 0x029B7
+OpenCurlyDoubleQuote; 0x0201C
+OpenCurlyQuote; 0x02018
+operp; 0x029B9
+oplus; 0x02295
+or; 0x02228
+Or; 0x02A54
+orarr; 0x021BB
+ord; 0x02A5D
+order; 0x02134
+orderof; 0x02134
+ordf; 0x000AA
+ordf 0x000AA
+ordm; 0x000BA
+ordm 0x000BA
+origof; 0x022B6
+oror; 0x02A56
+orslope; 0x02A57
+orv; 0x02A5B
+oS; 0x024C8
+oscr; 0x02134
+Oscr; 0x1D4AA
+Oslash; 0x000D8
+Oslash 0x000D8
+oslash; 0x000F8
+oslash 0x000F8
+osol; 0x02298
+Otilde; 0x000D5
+Otilde 0x000D5
+otilde; 0x000F5
+otilde 0x000F5
+otimes; 0x02297
+Otimes; 0x02A37
+otimesas; 0x02A36
+Ouml; 0x000D6
+Ouml 0x000D6
+ouml; 0x000F6
+ouml 0x000F6
+ovbar; 0x0233D
+OverBar; 0x000AF
+OverBrace; 0x023DE
+OverBracket; 0x023B4
+OverParenthesis; 0x023DC
+par; 0x02225
+para; 0x000B6
+para 0x000B6
+parallel; 0x02225
+parsim; 0x02AF3
+parsl; 0x02AFD
+part; 0x02202
+PartialD; 0x02202
+Pcy; 0x0041F
+pcy; 0x0043F
+percnt; 0x00025
+period; 0x0002E
+permil; 0x02030
+perp; 0x022A5
+pertenk; 0x02031
+Pfr; 0x1D513
+pfr; 0x1D52D
+Phi; 0x003A6
+phi; 0x003C6
+phiv; 0x003C6
+phmmat; 0x02133
+phone; 0x0260E
+Pi; 0x003A0
+pi; 0x003C0
+pitchfork; 0x022D4
+piv; 0x003D6
+planck; 0x0210F
+planckh; 0x0210E
+plankv; 0x0210F
+plus; 0x0002B
+plusacir; 0x02A23
+plusb; 0x0229E
+pluscir; 0x02A22
+plusdo; 0x02214
+plusdu; 0x02A25
+pluse; 0x02A72
+PlusMinus; 0x000B1
+plusmn; 0x000B1
+plusmn 0x000B1
+plussim; 0x02A26
+plustwo; 0x02A27
+pm; 0x000B1
+Poincareplane; 0x0210C
+pointint; 0x02A15
+Popf; 0x02119
+popf; 0x1D561
+pound; 0x000A3
+pound 0x000A3
+pr; 0x0227A
+Pr; 0x02ABB
+prap; 0x02AB7
+prcue; 0x0227C
+pre; 0x02AAF
+prE; 0x02AB3
+prec; 0x0227A
+precapprox; 0x02AB7
+preccurlyeq; 0x0227C
+Precedes; 0x0227A
+PrecedesEqual; 0x02AAF
+PrecedesSlantEqual; 0x0227C
+PrecedesTilde; 0x0227E
+preceq; 0x02AAF
+precnapprox; 0x02AB9
+precneqq; 0x02AB5
+precnsim; 0x022E8
+precsim; 0x0227E
+prime; 0x02032
+Prime; 0x02033
+primes; 0x02119
+prnap; 0x02AB9
+prnE; 0x02AB5
+prnsim; 0x022E8
+prod; 0x0220F
+Product; 0x0220F
+profalar; 0x0232E
+profline; 0x02312
+profsurf; 0x02313
+prop; 0x0221D
+Proportion; 0x02237
+Proportional; 0x0221D
+propto; 0x0221D
+prsim; 0x0227E
+prurel; 0x022B0
+Pscr; 0x1D4AB
+pscr; 0x1D4C5
+Psi; 0x003A8
+psi; 0x003C8
+puncsp; 0x02008
+Qfr; 0x1D514
+qfr; 0x1D52E
+qint; 0x02A0C
+Qopf; 0x0211A
+qopf; 0x1D562
+qprime; 0x02057
+Qscr; 0x1D4AC
+qscr; 0x1D4C6
+quaternions; 0x0210D
+quatint; 0x02A16
+quest; 0x0003F
+questeq; 0x0225F
+quot; 0x00022
+quot 0x00022
+QUOT; 0x00022
+QUOT 0x00022
+rAarr; 0x021DB
+race; 0x029DA
+Racute; 0x00154
+racute; 0x00155
+radic; 0x0221A
+raemptyv; 0x029B3
+rang; 0x027E9
+Rang; 0x027EB
+rangd; 0x02992
+range; 0x029A5
+rangle; 0x027E9
+raquo; 0x000BB
+raquo 0x000BB
+rarr; 0x02192
+Rarr; 0x021A0
+rArr; 0x021D2
+rarrap; 0x02975
+rarrb; 0x021E5
+rarrbfs; 0x02920
+rarrc; 0x02933
+rarrfs; 0x0291E
+rarrhk; 0x021AA
+rarrlp; 0x021AC
+rarrpl; 0x02945
+rarrsim; 0x02974
+rarrtl; 0x021A3
+Rarrtl; 0x02916
+rarrw; 0x0219D
+ratail; 0x0291A
+rAtail; 0x0291C
+ratio; 0x02236
+rationals; 0x0211A
+rbarr; 0x0290D
+rBarr; 0x0290F
+RBarr; 0x02910
+rbbrk; 0x02773
+rbrace; 0x0007D
+rbrack; 0x0005D
+rbrke; 0x0298C
+rbrksld; 0x0298E
+rbrkslu; 0x02990
+Rcaron; 0x00158
+rcaron; 0x00159
+Rcedil; 0x00156
+rcedil; 0x00157
+rceil; 0x02309
+rcub; 0x0007D
+Rcy; 0x00420
+rcy; 0x00440
+rdca; 0x02937
+rdldhar; 0x02969
+rdquo; 0x0201D
+rdquor; 0x0201D
+rdsh; 0x021B3
+Re; 0x0211C
+real; 0x0211C
+realine; 0x0211B
+realpart; 0x0211C
+reals; 0x0211D
+rect; 0x025AD
+reg; 0x000AE
+reg 0x000AE
+REG; 0x000AE
+REG 0x000AE
+ReverseElement; 0x0220B
+ReverseEquilibrium; 0x021CB
+ReverseUpEquilibrium; 0x0296F
+rfisht; 0x0297D
+rfloor; 0x0230B
+Rfr; 0x0211C
+rfr; 0x1D52F
+rHar; 0x02964
+rhard; 0x021C1
+rharu; 0x021C0
+rharul; 0x0296C
+Rho; 0x003A1
+rho; 0x003C1
+rhov; 0x003F1
+RightAngleBracket; 0x027E9
+rightarrow; 0x02192
+RightArrow; 0x02192
+Rightarrow; 0x021D2
+RightArrowBar; 0x021E5
+RightArrowLeftArrow; 0x021C4
+rightarrowtail; 0x021A3
+RightCeiling; 0x02309
+RightDoubleBracket; 0x027E7
+RightDownTeeVector; 0x0295D
+RightDownVector; 0x021C2
+RightDownVectorBar; 0x02955
+RightFloor; 0x0230B
+rightharpoondown; 0x021C1
+rightharpoonup; 0x021C0
+rightleftarrows; 0x021C4
+rightleftharpoons; 0x021CC
+rightrightarrows; 0x021C9
+rightsquigarrow; 0x0219D
+RightTee; 0x022A2
+RightTeeArrow; 0x021A6
+RightTeeVector; 0x0295B
+rightthreetimes; 0x022CC
+RightTriangle; 0x022B3
+RightTriangleBar; 0x029D0
+RightTriangleEqual; 0x022B5
+RightUpDownVector; 0x0294F
+RightUpTeeVector; 0x0295C
+RightUpVector; 0x021BE
+RightUpVectorBar; 0x02954
+RightVector; 0x021C0
+RightVectorBar; 0x02953
+ring; 0x002DA
+risingdotseq; 0x02253
+rlarr; 0x021C4
+rlhar; 0x021CC
+rlm; 0x0200F
+rmoust; 0x023B1
+rmoustache; 0x023B1
+rnmid; 0x02AEE
+roang; 0x027ED
+roarr; 0x021FE
+robrk; 0x027E7
+ropar; 0x02986
+Ropf; 0x0211D
+ropf; 0x1D563
+roplus; 0x02A2E
+rotimes; 0x02A35
+RoundImplies; 0x02970
+rpar; 0x00029
+rpargt; 0x02994
+rppolint; 0x02A12
+rrarr; 0x021C9
+Rrightarrow; 0x021DB
+rsaquo; 0x0203A
+Rscr; 0x0211B
+rscr; 0x1D4C7
+rsh; 0x021B1
+Rsh; 0x021B1
+rsqb; 0x0005D
+rsquo; 0x02019
+rsquor; 0x02019
+rthree; 0x022CC
+rtimes; 0x022CA
+rtri; 0x025B9
+rtrie; 0x022B5
+rtrif; 0x025B8
+rtriltri; 0x029CE
+RuleDelayed; 0x029F4
+ruluhar; 0x02968
+rx; 0x0211E
+Sacute; 0x0015A
+sacute; 0x0015B
+sbquo; 0x0201A
+sc; 0x0227B
+Sc; 0x02ABC
+scap; 0x02AB8
+Scaron; 0x00160
+scaron; 0x00161
+sccue; 0x0227D
+sce; 0x02AB0
+scE; 0x02AB4
+Scedil; 0x0015E
+scedil; 0x0015F
+Scirc; 0x0015C
+scirc; 0x0015D
+scnap; 0x02ABA
+scnE; 0x02AB6
+scnsim; 0x022E9
+scpolint; 0x02A13
+scsim; 0x0227F
+Scy; 0x00421
+scy; 0x00441
+sdot; 0x022C5
+sdotb; 0x022A1
+sdote; 0x02A66
+searhk; 0x02925
+searr; 0x02198
+seArr; 0x021D8
+searrow; 0x02198
+sect; 0x000A7
+sect 0x000A7
+semi; 0x0003B
+seswar; 0x02929
+setminus; 0x02216
+setmn; 0x02216
+sext; 0x02736
+Sfr; 0x1D516
+sfr; 0x1D530
+sfrown; 0x02322
+sharp; 0x0266F
+SHCHcy; 0x00429
+shchcy; 0x00449
+SHcy; 0x00428
+shcy; 0x00448
+ShortDownArrow; 0x02193
+ShortLeftArrow; 0x02190
+shortmid; 0x02223
+shortparallel; 0x02225
+ShortRightArrow; 0x02192
+ShortUpArrow; 0x02191
+shy; 0x000AD
+shy 0x000AD
+Sigma; 0x003A3
+sigma; 0x003C3
+sigmaf; 0x003C2
+sigmav; 0x003C2
+sim; 0x0223C
+simdot; 0x02A6A
+sime; 0x02243
+simeq; 0x02243
+simg; 0x02A9E
+simgE; 0x02AA0
+siml; 0x02A9D
+simlE; 0x02A9F
+simne; 0x02246
+simplus; 0x02A24
+simrarr; 0x02972
+slarr; 0x02190
+SmallCircle; 0x02218
+smallsetminus; 0x02216
+smashp; 0x02A33
+smeparsl; 0x029E4
+smid; 0x02223
+smile; 0x02323
+smt; 0x02AAA
+smte; 0x02AAC
+SOFTcy; 0x0042C
+softcy; 0x0044C
+sol; 0x0002F
+solb; 0x029C4
+solbar; 0x0233F
+Sopf; 0x1D54A
+sopf; 0x1D564
+spades; 0x02660
+spadesuit; 0x02660
+spar; 0x02225
+sqcap; 0x02293
+sqcup; 0x02294
+Sqrt; 0x0221A
+sqsub; 0x0228F
+sqsube; 0x02291
+sqsubset; 0x0228F
+sqsubseteq; 0x02291
+sqsup; 0x02290
+sqsupe; 0x02292
+sqsupset; 0x02290
+sqsupseteq; 0x02292
+squ; 0x025A1
+square; 0x025A1
+Square; 0x025A1
+SquareIntersection; 0x02293
+SquareSubset; 0x0228F
+SquareSubsetEqual; 0x02291
+SquareSuperset; 0x02290
+SquareSupersetEqual; 0x02292
+SquareUnion; 0x02294
+squarf; 0x025AA
+squf; 0x025AA
+srarr; 0x02192
+Sscr; 0x1D4AE
+sscr; 0x1D4C8
+ssetmn; 0x02216
+ssmile; 0x02323
+sstarf; 0x022C6
+Star; 0x022C6
+star; 0x02606
+starf; 0x02605
+straightepsilon; 0x003F5
+straightphi; 0x003D5
+strns; 0x000AF
+sub; 0x02282
+Sub; 0x022D0
+subdot; 0x02ABD
+sube; 0x02286
+subE; 0x02AC5
+subedot; 0x02AC3
+submult; 0x02AC1
+subne; 0x0228A
+subnE; 0x02ACB
+subplus; 0x02ABF
+subrarr; 0x02979
+subset; 0x02282
+Subset; 0x022D0
+subseteq; 0x02286
+subseteqq; 0x02AC5
+SubsetEqual; 0x02286
+subsetneq; 0x0228A
+subsetneqq; 0x02ACB
+subsim; 0x02AC7
+subsub; 0x02AD5
+subsup; 0x02AD3
+succ; 0x0227B
+succapprox; 0x02AB8
+succcurlyeq; 0x0227D
+Succeeds; 0x0227B
+SucceedsEqual; 0x02AB0
+SucceedsSlantEqual; 0x0227D
+SucceedsTilde; 0x0227F
+succeq; 0x02AB0
+succnapprox; 0x02ABA
+succneqq; 0x02AB6
+succnsim; 0x022E9
+succsim; 0x0227F
+SuchThat; 0x0220B
+sum; 0x02211
+Sum; 0x02211
+sung; 0x0266A
+sup; 0x02283
+Sup; 0x022D1
+sup1; 0x000B9
+sup1 0x000B9
+sup2; 0x000B2
+sup2 0x000B2
+sup3; 0x000B3
+sup3 0x000B3
+supdot; 0x02ABE
+supdsub; 0x02AD8
+supe; 0x02287
+supE; 0x02AC6
+supedot; 0x02AC4
+Superset; 0x02283
+SupersetEqual; 0x02287
+suphsub; 0x02AD7
+suplarr; 0x0297B
+supmult; 0x02AC2
+supne; 0x0228B
+supnE; 0x02ACC
+supplus; 0x02AC0
+supset; 0x02283
+Supset; 0x022D1
+supseteq; 0x02287
+supseteqq; 0x02AC6
+supsetneq; 0x0228B
+supsetneqq; 0x02ACC
+supsim; 0x02AC8
+supsub; 0x02AD4
+supsup; 0x02AD6
+swarhk; 0x02926
+swarr; 0x02199
+swArr; 0x021D9
+swarrow; 0x02199
+swnwar; 0x0292A
+szlig; 0x000DF
+szlig 0x000DF
+Tab; 0x00009
+target; 0x02316
+Tau; 0x003A4
+tau; 0x003C4
+tbrk; 0x023B4
+Tcaron; 0x00164
+tcaron; 0x00165
+Tcedil; 0x00162
+tcedil; 0x00163
+Tcy; 0x00422
+tcy; 0x00442
+tdot; 0x020DB
+telrec; 0x02315
+Tfr; 0x1D517
+tfr; 0x1D531
+there4; 0x02234
+therefore; 0x02234
+Therefore; 0x02234
+Theta; 0x00398
+theta; 0x003B8
+thetasym; 0x003D1
+thetav; 0x003D1
+thickapprox; 0x02248
+thicksim; 0x0223C
+thinsp; 0x02009
+ThinSpace; 0x02009
+thkap; 0x02248
+thksim; 0x0223C
+THORN; 0x000DE
+THORN 0x000DE
+thorn; 0x000FE
+thorn 0x000FE
+tilde; 0x002DC
+Tilde; 0x0223C
+TildeEqual; 0x02243
+TildeFullEqual; 0x02245
+TildeTilde; 0x02248
+times; 0x000D7
+times 0x000D7
+timesb; 0x022A0
+timesbar; 0x02A31
+timesd; 0x02A30
+tint; 0x0222D
+toea; 0x02928
+top; 0x022A4
+topbot; 0x02336
+topcir; 0x02AF1
+Topf; 0x1D54B
+topf; 0x1D565
+topfork; 0x02ADA
+tosa; 0x02929
+tprime; 0x02034
+trade; 0x02122
+TRADE; 0x02122
+triangle; 0x025B5
+triangledown; 0x025BF
+triangleleft; 0x025C3
+trianglelefteq; 0x022B4
+triangleq; 0x0225C
+triangleright; 0x025B9
+trianglerighteq; 0x022B5
+tridot; 0x025EC
+trie; 0x0225C
+triminus; 0x02A3A
+TripleDot; 0x020DB
+triplus; 0x02A39
+trisb; 0x029CD
+tritime; 0x02A3B
+trpezium; 0x023E2
+Tscr; 0x1D4AF
+tscr; 0x1D4C9
+TScy; 0x00426
+tscy; 0x00446
+TSHcy; 0x0040B
+tshcy; 0x0045B
+Tstrok; 0x00166
+tstrok; 0x00167
+twixt; 0x0226C
+twoheadleftarrow; 0x0219E
+twoheadrightarrow; 0x021A0
+Uacute; 0x000DA
+Uacute 0x000DA
+uacute; 0x000FA
+uacute 0x000FA
+uarr; 0x02191
+Uarr; 0x0219F
+uArr; 0x021D1
+Uarrocir; 0x02949
+Ubrcy; 0x0040E
+ubrcy; 0x0045E
+Ubreve; 0x0016C
+ubreve; 0x0016D
+Ucirc; 0x000DB
+Ucirc 0x000DB
+ucirc; 0x000FB
+ucirc 0x000FB
+Ucy; 0x00423
+ucy; 0x00443
+udarr; 0x021C5
+Udblac; 0x00170
+udblac; 0x00171
+udhar; 0x0296E
+ufisht; 0x0297E
+Ufr; 0x1D518
+ufr; 0x1D532
+Ugrave; 0x000D9
+Ugrave 0x000D9
+ugrave; 0x000F9
+ugrave 0x000F9
+uHar; 0x02963
+uharl; 0x021BF
+uharr; 0x021BE
+uhblk; 0x02580
+ulcorn; 0x0231C
+ulcorner; 0x0231C
+ulcrop; 0x0230F
+ultri; 0x025F8
+Umacr; 0x0016A
+umacr; 0x0016B
+uml; 0x000A8
+uml 0x000A8
+UnderBar; 0x00332
+UnderBrace; 0x023DF
+UnderBracket; 0x023B5
+UnderParenthesis; 0x023DD
+Union; 0x022C3
+UnionPlus; 0x0228E
+Uogon; 0x00172
+uogon; 0x00173
+Uopf; 0x1D54C
+uopf; 0x1D566
+uparrow; 0x02191
+UpArrow; 0x02191
+Uparrow; 0x021D1
+UpArrowBar; 0x02912
+UpArrowDownArrow; 0x021C5
+updownarrow; 0x02195
+UpDownArrow; 0x02195
+Updownarrow; 0x021D5
+UpEquilibrium; 0x0296E
+upharpoonleft; 0x021BF
+upharpoonright; 0x021BE
+uplus; 0x0228E
+UpperLeftArrow; 0x02196
+UpperRightArrow; 0x02197
+upsi; 0x003C5
+Upsi; 0x003D2
+upsih; 0x003D2
+Upsilon; 0x003A5
+upsilon; 0x003C5
+UpTee; 0x022A5
+UpTeeArrow; 0x021A5
+upuparrows; 0x021C8
+urcorn; 0x0231D
+urcorner; 0x0231D
+urcrop; 0x0230E
+Uring; 0x0016E
+uring; 0x0016F
+urtri; 0x025F9
+Uscr; 0x1D4B0
+uscr; 0x1D4CA
+utdot; 0x022F0
+Utilde; 0x00168
+utilde; 0x00169
+utri; 0x025B5
+utrif; 0x025B4
+uuarr; 0x021C8
+Uuml; 0x000DC
+Uuml 0x000DC
+uuml; 0x000FC
+uuml 0x000FC
+uwangle; 0x029A7
+vangrt; 0x0299C
+varepsilon; 0x003B5
+varkappa; 0x003F0
+varnothing; 0x02205
+varphi; 0x003C6
+varpi; 0x003D6
+varpropto; 0x0221D
+varr; 0x02195
+vArr; 0x021D5
+varrho; 0x003F1
+varsigma; 0x003C2
+vartheta; 0x003D1
+vartriangleleft; 0x022B2
+vartriangleright; 0x022B3
+vBar; 0x02AE8
+Vbar; 0x02AEB
+vBarv; 0x02AE9
+Vcy; 0x00412
+vcy; 0x00432
+vdash; 0x022A2
+vDash; 0x022A8
+Vdash; 0x022A9
+VDash; 0x022AB
+Vdashl; 0x02AE6
+vee; 0x02228
+Vee; 0x022C1
+veebar; 0x022BB
+veeeq; 0x0225A
+vellip; 0x022EE
+verbar; 0x0007C
+Verbar; 0x02016
+vert; 0x0007C
+Vert; 0x02016
+VerticalBar; 0x02223
+VerticalLine; 0x0007C
+VerticalSeparator; 0x02758
+VerticalTilde; 0x02240
+VeryThinSpace; 0x0200A
+Vfr; 0x1D519
+vfr; 0x1D533
+vltri; 0x022B2
+Vopf; 0x1D54D
+vopf; 0x1D567
+vprop; 0x0221D
+vrtri; 0x022B3
+Vscr; 0x1D4B1
+vscr; 0x1D4CB
+Vvdash; 0x022AA
+vzigzag; 0x0299A
+Wcirc; 0x00174
+wcirc; 0x00175
+wedbar; 0x02A5F
+wedge; 0x02227
+Wedge; 0x022C0
+wedgeq; 0x02259
+weierp; 0x02118
+Wfr; 0x1D51A
+wfr; 0x1D534
+Wopf; 0x1D54E
+wopf; 0x1D568
+wp; 0x02118
+wr; 0x02240
+wreath; 0x02240
+Wscr; 0x1D4B2
+wscr; 0x1D4CC
+xcap; 0x022C2
+xcirc; 0x025EF
+xcup; 0x022C3
+xdtri; 0x025BD
+Xfr; 0x1D51B
+xfr; 0x1D535
+xharr; 0x027F7
+xhArr; 0x027FA
+Xi; 0x0039E
+xi; 0x003BE
+xlarr; 0x027F5
+xlArr; 0x027F8
+xmap; 0x027FC
+xnis; 0x022FB
+xodot; 0x02A00
+Xopf; 0x1D54F
+xopf; 0x1D569
+xoplus; 0x02A01
+xotime; 0x02A02
+xrarr; 0x027F6
+xrArr; 0x027F9
+Xscr; 0x1D4B3
+xscr; 0x1D4CD
+xsqcup; 0x02A06
+xuplus; 0x02A04
+xutri; 0x025B3
+xvee; 0x022C1
+xwedge; 0x022C0
+Yacute; 0x000DD
+Yacute 0x000DD
+yacute; 0x000FD
+yacute 0x000FD
+YAcy; 0x0042F
+yacy; 0x0044F
+Ycirc; 0x00176
+ycirc; 0x00177
+Ycy; 0x0042B
+ycy; 0x0044B
+yen; 0x000A5
+yen 0x000A5
+Yfr; 0x1D51C
+yfr; 0x1D536
+YIcy; 0x00407
+yicy; 0x00457
+Yopf; 0x1D550
+yopf; 0x1D56A
+Yscr; 0x1D4B4
+yscr; 0x1D4CE
+YUcy; 0x0042E
+yucy; 0x0044E
+yuml; 0x000FF
+yuml 0x000FF
+Yuml; 0x00178
+Zacute; 0x00179
+zacute; 0x0017A
+Zcaron; 0x0017D
+zcaron; 0x0017E
+Zcy; 0x00417
+zcy; 0x00437
+Zdot; 0x0017B
+zdot; 0x0017C
+zeetrf; 0x02128
+ZeroWidthSpace; 0x0200B
+Zeta; 0x00396
+zeta; 0x003B6
+Zfr; 0x02128
+zfr; 0x1D537
+ZHcy; 0x00416
+zhcy; 0x00436
+zigrarr; 0x021DD
+Zopf; 0x02124
+zopf; 0x1D56B
+Zscr; 0x1D4B5
+zscr; 0x1D4CF
+zwj; 0x0200D
+zwnj; 0x0200C
diff --git a/build/make-entities.pl b/build/make-entities.pl
new file mode 100644
index 0000000..7492052
--- /dev/null
+++ b/build/make-entities.pl
@@ -0,0 +1,138 @@
+#!/usr/bin/perl -w
+# This file is part of Hubbub.
+# Licensed under the MIT License,
+# http://www.opensource.org/licenses/mit-license.php
+# Copyright 2010 Daniel Silverstone <dsilvers@netsurf-browser.org>
+# John-Mark Bell <jmb@netsurf-browser.org>
+
+use strict;
+
+use constant ENTITIES_FILE => 'build/Entities';
+use constant ENTITIES_INC => 'src/tokeniser/entities.inc';
+
+open(INFILE, "<", ENTITIES_FILE) || die "Unable to open " . ENTITIES_FILE;
+
+my %entities;
+
+while (my $line = <INFILE>) {
+ last unless (defined $line);
+ next if ($line =~ /^#/);
+ chomp $line;
+ next if ($line eq '');
+ my @elements = split /\s+/, $line;
+ my $entity = shift @elements;
+ my $code = shift @elements;
+ $entities{$entity} = $code;
+}
+
+close(INFILE);
+
+my $output = <<'EOH';
+/*
+ * This file is part of Hubbub.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2010 The NetSurf Project.
+ *
+ * Note: This file is automatically generated by make-entities.pl
+ *
+ * Do not edit file file, changes will be overwritten during build.
+ */
+
+
+EOH
+
+# Build a Trie of the entities
+
+my $heapindex = 0;
+
+my @nodelist;
+
+sub insert_node {
+ my ($parent, $key, $code) = @_;
+ my ($pivot, $tail);
+
+ if (length($key) == 0) {
+ $pivot = ''; $tail = '';
+ } elsif (length($key) == 1) {
+ $pivot = $key; $tail = '';
+ } else {
+ $pivot = substr($key, 0, 1);
+ $tail = substr($key, 1);
+ }
+
+ unless (defined($parent)) {
+ $parent = { pivot => $pivot, heapindex => $heapindex };
+ push @nodelist, $parent;
+ $heapindex++;
+ }
+
+ if ($pivot lt $parent->{pivot}) {
+ $parent->{lt} = insert_node($parent->{lt}, $key, $code);
+ } elsif ($pivot eq $parent->{pivot}) {
+ if ($pivot eq '') {
+ $parent->{value} = $code;
+ } elsif (substr($tail, 0, 1) eq '') {
+ $parent->{value} = $code;
+ $parent->{eq} = insert_node($parent->{eq}, $tail, $code);
+ } else {
+ $parent->{eq} = insert_node($parent->{eq}, $tail, $code);
+ }
+ } else {
+ $parent->{gt} = insert_node($parent->{gt}, $key, $code);
+ }
+ return $parent;
+}
+
+my $trie;
+
+foreach my $key (keys %entities) {
+ $trie = insert_node($trie, $key, $entities{$key});
+}
+
+# Serialise the Trie to the output string
+
+$output .= "static hubbub_entity_node dict[] = {\n";
+
+foreach my $node (@nodelist) {
+ my $split = $node->{pivot};
+ my $lt = $node->{lt};
+ my $eq = $node->{eq};
+ my $gt = $node->{gt};
+ my $value = $node->{value};
+
+ $lt = $lt->{heapindex} if defined($lt);
+ $lt = "-1" unless defined($lt);
+
+ $eq = $eq->{heapindex} if defined($eq);
+ $eq = "-1" unless defined($eq);
+
+ $gt = $gt->{heapindex} if defined($gt);
+ $gt = "-1" unless defined($gt);
+
+ $split = ord($split) if ($split ne '');
+ $split = 0 if ($split eq '');
+
+ $value = "0" unless defined($value);
+
+ $output .= "\t{ $split, $lt, $eq, $gt, $value },\n";
+}
+
+$output .= "};\n\n";
+
+$output .= "static int32_t dict_root = " . $trie->{heapindex} . ";\n";
+
+# Write file out
+
+if (open(EXISTING, "<", ENTITIES_INC)) {
+ local $/ = undef();
+ my $now = <EXISTING>;
+ undef($output) if ($output eq $now);
+ close(EXISTING);
+}
+
+if (defined($output)) {
+ open(OUTF, ">", ENTITIES_INC);
+ print OUTF $output;
+ close(OUTF);
+}
diff --git a/include/hubbub/hubbub.h b/include/hubbub/hubbub.h
index d6ddc01..005ec82 100644
--- a/include/hubbub/hubbub.h
+++ b/include/hubbub/hubbub.h
@@ -17,13 +17,6 @@ extern "C"
#include <hubbub/functypes.h>
#include <hubbub/types.h>
-/* Initialise the Hubbub library for use */
-hubbub_error hubbub_initialise(const char *aliases_file,
- hubbub_allocator_fn alloc, void *pw);
-
-/* Clean up after Hubbub */
-hubbub_error hubbub_finalise(hubbub_allocator_fn alloc, void *pw);
-
#ifdef __cplusplus
}
#endif
diff --git a/src/Makefile b/src/Makefile
index a939c8b..6fd9406 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
# Sources
-DIR_SOURCES := hubbub.c parser.c
+DIR_SOURCES := parser.c
include build/makefiles/Makefile.subdir
diff --git a/src/hubbub.c b/src/hubbub.c
deleted file mode 100644
index 94d6a49..0000000
--- a/src/hubbub.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * This file is part of Hubbub.
- * Licensed under the MIT License,
- * http://www.opensource.org/licenses/mit-license.php
- * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
- */
-
-#include <parserutils/parserutils.h>
-
-#include <hubbub/hubbub.h>
-
-#include "utils/parserutilserror.h"
-#include "tokeniser/entities.h"
-
-/**
- * Initialise the Hubbub library for use.
- *
- * This _must_ be called before using any hubbub functions
- *
- * \param aliases_file Pointer to name of file containing encoding alias data
- * \param alloc Pointer to (de)allocation function
- * \param pw Pointer to client-specific private data (may be NULL)
- * \return HUBBUB_OK on success, applicable error otherwise.
- */
-hubbub_error hubbub_initialise(const char *aliases_file,
- hubbub_allocator_fn alloc, void *pw)
-{
- hubbub_error error;
-
- if (aliases_file == NULL || alloc == NULL)
- return HUBBUB_BADPARM;
-
- error = hubbub_error_from_parserutils_error(
- parserutils_initialise(aliases_file, alloc, pw));
- if (error != HUBBUB_OK)
- return error;
-
- error = hubbub_entities_create(alloc, pw);
- if (error != HUBBUB_OK) {
- parserutils_finalise(alloc, pw);
- return error;
- }
-
- return HUBBUB_OK;
-}
-
-/**
- * Clean up after Hubbub
- *
- * \param alloc Pointer to (de)allocation function
- * \param pw Pointer to client-specific private data (may be NULL)
- * \return HUBBUB_OK on success, applicable error otherwise.
- */
-hubbub_error hubbub_finalise(hubbub_allocator_fn alloc, void *pw)
-{
- if (alloc == NULL)
- return HUBBUB_BADPARM;
-
- hubbub_entities_destroy(alloc, pw);
-
- parserutils_finalise(alloc, pw);
-
- return HUBBUB_OK;
-}
-
diff --git a/src/tokeniser/Makefile b/src/tokeniser/Makefile
index 1dcb100..9cc7604 100644
--- a/src/tokeniser/Makefile
+++ b/src/tokeniser/Makefile
@@ -1,4 +1,12 @@
# Sources
DIR_SOURCES := entities.c tokeniser.c
+$(DIR)entities.c: $(DIR)entities.inc
+
+$(DIR)entities.inc: build/make-entities.pl build/Entities
+ $(VQ)$(ECHO) "ENTITIES: $@"
+ $(Q)$(PERL) build/make-entities.pl
+
+CLEAN_ITEMS := $(CLEAN_ITEMS) $(DIR)entities.inc
+
include build/makefiles/Makefile.subdir
diff --git a/src/tokeniser/entities.c b/src/tokeniser/entities.c
index b06ed28..ac47d80 100644
--- a/src/tokeniser/entities.c
+++ b/src/tokeniser/entities.c
@@ -5,2203 +5,82 @@
* Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
*/
-#include "utils/dict.h"
#include "utils/utils.h"
#include "tokeniser/entities.h"
-typedef struct hubbub_entity hubbub_entity;
+/** Node in our entity tree */
+typedef struct hubbub_entity_node {
+ /* Do not reorder this without fixing make-entities.pl */
+ uint8_t split; /**< Data to split on */
+ int32_t lt; /**< Subtree for data less than split */
+ int32_t eq; /**< Subtree for data equal to split */
+ int32_t gt; /**< Subtree for data greater than split */
+ uint32_t value; /**< Data for this node */
+} hubbub_entity_node;
-/**
- * Entity mapping table
- */
-static const struct hubbub_entity {
- const char *name; /**< Entity name */
- uint32_t ucs4; /**< UCS-4 codepoint */
-} entities[] = {
- { "Aacute;", 0x000C1 },
- { "Aacute", 0x000C1 },
- { "aacute;", 0x000E1 },
- { "aacute", 0x000E1 },
- { "Abreve;", 0x00102 },
- { "abreve;", 0x00103 },
- { "ac;", 0x0223E },
- { "acd;", 0x0223F },
- { "Acirc;", 0x000C2 },
- { "Acirc", 0x000C2 },
- { "acirc;", 0x000E2 },
- { "acirc", 0x000E2 },
- { "acute;", 0x000B4 },
- { "acute", 0x000B4 },
- { "Acy;", 0x00410 },
- { "acy;", 0x00430 },
- { "AElig;", 0x000C6 },
- { "AElig", 0x000C6 },
- { "aelig;", 0x000E6 },
- { "aelig", 0x000E6 },
- { "af;", 0x02061 },
- { "Afr;", 0x1D504 },
- { "afr;", 0x1D51E },
- { "Agrave;", 0x000C0 },
- { "Agrave", 0x000C0 },
- { "agrave;", 0x000E0 },
- { "agrave", 0x000E0 },
- { "alefsym;", 0x02135 },
- { "aleph;", 0x02135 },
- { "Alpha;", 0x00391 },
- { "alpha;", 0x003B1 },
- { "Amacr;", 0x00100 },
- { "amacr;", 0x00101 },
- { "amalg;", 0x02A3F },
- { "amp;", 0x00026 },
- { "amp", 0x00026 },
- { "AMP;", 0x00026 },
- { "AMP", 0x00026 },
- { "and;", 0x02227 },
- { "And;", 0x02A53 },
- { "andand;", 0x02A55 },
- { "andd;", 0x02A5C },
- { "andslope;", 0x02A58 },
- { "andv;", 0x02A5A },
- { "ang;", 0x02220 },
- { "ange;", 0x029A4 },
- { "angle;", 0x02220 },
- { "angmsd;", 0x02221 },
- { "angmsdaa;", 0x029A8 },
- { "angmsdab;", 0x029A9 },
- { "angmsdac;", 0x029AA },
- { "angmsdad;", 0x029AB },
- { "angmsdae;", 0x029AC },
- { "angmsdaf;", 0x029AD },
- { "angmsdag;", 0x029AE },
- { "angmsdah;", 0x029AF },
- { "angrt;", 0x0221F },
- { "angrtvb;", 0x022BE },
- { "angrtvbd;", 0x0299D },
- { "angsph;", 0x02222 },
- { "angst;", 0x0212B },
- { "angzarr;", 0x0237C },
- { "Aogon;", 0x00104 },
- { "aogon;", 0x00105 },
- { "Aopf;", 0x1D538 },
- { "aopf;", 0x1D552 },
- { "ap;", 0x02248 },
- { "apacir;", 0x02A6F },
- { "ape;", 0x0224A },
- { "apE;", 0x02A70 },
- { "apid;", 0x0224B },
- { "apos;", 0x00027 },
- { "ApplyFunction;", 0x02061 },
- { "approx;", 0x02248 },
- { "approxeq;", 0x0224A },
- { "Aring;", 0x000C5 },
- { "Aring", 0x000C5 },
- { "aring;", 0x000E5 },
- { "aring", 0x000E5 },
- { "Ascr;", 0x1D49C },
- { "ascr;", 0x1D4B6 },
- { "Assign;", 0x02254 },
- { "ast;", 0x0002A },
- { "asymp;", 0x02248 },
- { "asympeq;", 0x0224D },
- { "Atilde;", 0x000C3 },
- { "Atilde", 0x000C3 },
- { "atilde;", 0x000E3 },
- { "atilde", 0x000E3 },
- { "Auml;", 0x000C4 },
- { "Auml", 0x000C4 },
- { "auml;", 0x000E4 },
- { "auml", 0x000E4 },
- { "awconint;", 0x02233 },
- { "awint;", 0x02A11 },
- { "backcong;", 0x0224C },
- { "backepsilon;", 0x003F6 },
- { "backprime;", 0x02035 },
- { "backsim;", 0x0223D },
- { "backsimeq;", 0x022CD },
- { "Backslash;", 0x02216 },
- { "Barv;", 0x02AE7 },
- { "barvee;", 0x022BD },
- { "barwed;", 0x02305 },
- { "Barwed;", 0x02306 },
- { "barwedge;", 0x02305 },
- { "bbrk;", 0x023B5 },
- { "bbrktbrk;", 0x023B6 },
- { "bcong;", 0x0224C },
- { "Bcy;", 0x00411 },
- { "bcy;", 0x00431 },
- { "bdquo;", 0x0201E },
- { "becaus;", 0x02235 },
- { "because;", 0x02235 },
- { "Because;", 0x02235 },
- { "bemptyv;", 0x029B0 },
- { "bepsi;", 0x003F6 },
- { "bernou;", 0x0212C },
- { "Bernoullis;", 0x0212C },
- { "Beta;", 0x00392 },
- { "beta;", 0x003B2 },
- { "beth;", 0x02136 },
- { "between;", 0x0226C },
- { "Bfr;", 0x1D505 },
- { "bfr;", 0x1D51F },
- { "bigcap;", 0x022C2 },
- { "bigcirc;", 0x025EF },
- { "bigcup;", 0x022C3 },
- { "bigodot;", 0x02A00 },
- { "bigoplus;", 0x02A01 },
- { "bigotimes;", 0x02A02 },
- { "bigsqcup;", 0x02A06 },
- { "bigstar;", 0x02605 },
- { "bigtriangledown;", 0x025BD },
- { "bigtriangleup;", 0x025B3 },
- { "biguplus;", 0x02A04 },
- { "bigvee;", 0x022C1 },
- { "bigwedge;", 0x022C0 },
- { "bkarow;", 0x0290D },
- { "blacklozenge;", 0x029EB },
- { "blacksquare;", 0x025AA },
- { "blacktriangle;", 0x025B4 },
- { "blacktriangledown;", 0x025BE },
- { "blacktriangleleft;", 0x025C2 },
- { "blacktriangleright;", 0x025B8 },
- { "blank;", 0x02423 },
- { "blk12;", 0x02592 },
- { "blk14;", 0x02591 },
- { "blk34;", 0x02593 },
- { "block;", 0x02588 },
- { "bnot;", 0x02310 },
- { "bNot;", 0x02AED },
- { "Bopf;", 0x1D539 },
- { "bopf;", 0x1D553 },
- { "bot;", 0x022A5 },
- { "bottom;", 0x022A5 },
- { "bowtie;", 0x022C8 },
- { "boxbox;", 0x029C9 },
- { "boxdl;", 0x02510 },
- { "boxdL;", 0x02555 },
- { "boxDl;", 0x02556 },
- { "boxDL;", 0x02557 },
- { "boxdr;", 0x0250C },
- { "boxdR;", 0x02552 },
- { "boxDr;", 0x02553 },
- { "boxDR;", 0x02554 },
- { "boxh;", 0x02500 },
- { "boxH;", 0x02550 },
- { "boxhd;", 0x0252C },
- { "boxHd;", 0x02564 },
- { "boxhD;", 0x02565 },
- { "boxHD;", 0x02566 },
- { "boxhu;", 0x02534 },
- { "boxHu;", 0x02567 },
- { "boxhU;", 0x02568 },
- { "boxHU;", 0x02569 },
- { "boxminus;", 0x0229F },
- { "boxplus;", 0x0229E },
- { "boxtimes;", 0x022A0 },
- { "boxul;", 0x02518 },
- { "boxuL;", 0x0255B },
- { "boxUl;", 0x0255C },
- { "boxUL;", 0x0255D },
- { "boxur;", 0x02514 },
- { "boxuR;", 0x02558 },
- { "boxUr;", 0x02559 },
- { "boxUR;", 0x0255A },
- { "boxv;", 0x02502 },
- { "boxV;", 0x02551 },
- { "boxvh;", 0x0253C },
- { "boxvH;", 0x0256A },
- { "boxVh;", 0x0256B },
- { "boxVH;", 0x0256C },
- { "boxvl;", 0x02524 },
- { "boxvL;", 0x02561 },
- { "boxVl;", 0x02562 },
- { "boxVL;", 0x02563 },
- { "boxvr;", 0x0251C },
- { "boxvR;", 0x0255E },
- { "boxVr;", 0x0255F },
- { "boxVR;", 0x02560 },
- { "bprime;", 0x02035 },
- { "breve;", 0x002D8 },
- { "Breve;", 0x002D8 },
- { "brvbar;", 0x000A6 },
- { "brvbar", 0x000A6 },
- { "Bscr;", 0x0212C },
- { "bscr;", 0x1D4B7 },
- { "bsemi;", 0x0204F },
- { "bsim;", 0x0223D },
- { "bsime;", 0x022CD },
- { "bsol;", 0x0005C },
- { "bsolb;", 0x029C5 },
- { "bull;", 0x02022 },
- { "bullet;", 0x02022 },
- { "bump;", 0x0224E },
- { "bumpe;", 0x0224F },
- { "bumpE;", 0x02AAE },
- { "Bumpeq;", 0x0224E },
- { "bumpeq;", 0x0224F },
- { "Cacute;", 0x00106 },
- { "cacute;", 0x00107 },
- { "cap;", 0x02229 },
- { "Cap;", 0x022D2 },
- { "capand;", 0x02A44 },
- { "capbrcup;", 0x02A49 },
- { "capcap;", 0x02A4B },
- { "capcup;", 0x02A47 },
- { "capdot;", 0x02A40 },
- { "CapitalDifferentialD;", 0x02145 },
- { "caret;", 0x02041 },
- { "caron;", 0x002C7 },
- { "Cayleys;", 0x0212D },
- { "ccaps;", 0x02A4D },
- { "Ccaron;", 0x0010C },
- { "ccaron;", 0x0010D },
- { "Ccedil;", 0x000C7 },
- { "Ccedil", 0x000C7 },
- { "ccedil;", 0x000E7 },
- { "ccedil", 0x000E7 },
- { "Ccirc;", 0x00108 },
- { "ccirc;", 0x00109 },
- { "Cconint;", 0x02230 },
- { "ccups;", 0x02A4C },
- { "ccupssm;", 0x02A50 },
- { "Cdot;", 0x0010A },
- { "cdot;", 0x0010B },
- { "cedil;", 0x000B8 },
- { "cedil", 0x000B8 },
- { "Cedilla;", 0x000B8 },
- { "cemptyv;", 0x029B2 },
- { "cent;", 0x000A2 },
- { "cent", 0x000A2 },
- { "centerdot;", 0x000B7 },
- { "CenterDot;", 0x000B7 },
- { "Cfr;", 0x0212D },
- { "cfr;", 0x1D520 },
- { "CHcy;", 0x00427 },
- { "chcy;", 0x00447 },
- { "check;", 0x02713 },
- { "checkmark;", 0x02713 },
- { "Chi;", 0x003A7 },
- { "chi;", 0x003C7 },
- { "cir;", 0x025CB },
- { "circ;", 0x002C6 },
- { "circeq;", 0x02257 },
- { "circlearrowleft;", 0x021BA },
- { "circlearrowright;", 0x021BB },
- { "circledast;", 0x0229B },
- { "circledcirc;", 0x0229A },
- { "circleddash;", 0x0229D },
- { "CircleDot;", 0x02299 },
- { "circledR;", 0x000AE },
- { "circledS;", 0x024C8 },
- { "CircleMinus;", 0x02296 },
- { "CirclePlus;", 0x02295 },
- { "CircleTimes;", 0x02297 },
- { "cire;", 0x02257 },
- { "cirE;", 0x029C3 },
- { "cirfnint;", 0x02A10 },
- { "cirmid;", 0x02AEF },
- { "cirscir;", 0x029C2 },
- { "ClockwiseContourIntegral;", 0x02232 },
- { "CloseCurlyDoubleQuote;", 0x0201D },
- { "CloseCurlyQuote;", 0x02019 },
- { "clubs;", 0x02663 },
- { "clubsuit;", 0x02663 },
- { "colon;", 0x0003A },
- { "Colon;", 0x02237 },
- { "colone;", 0x02254 },
- { "Colone;", 0x02A74 },
- { "coloneq;", 0x02254 },
- { "comma;", 0x0002C },
- { "commat;", 0x00040 },
- { "comp;", 0x02201 },
- { "compfn;", 0x02218 },
- { "complement;", 0x02201 },
- { "complexes;", 0x02102 },
- { "cong;", 0x02245 },
- { "congdot;", 0x02A6D },
- { "Congruent;", 0x02261 },
- { "conint;", 0x0222E },
- { "Conint;", 0x0222F },
- { "ContourIntegral;", 0x0222E },
- { "Copf;", 0x02102 },
- { "copf;", 0x1D554 },
- { "coprod;", 0x02210 },
- { "Coproduct;", 0x02210 },
- { "copy;", 0x000A9 },
- { "copy", 0x000A9 },
- { "COPY;", 0x000A9 },
- { "COPY", 0x000A9 },
- { "copysr;", 0x02117 },
- { "CounterClockwiseContourIntegral;", 0x02233 },
- { "crarr;", 0x021B5 },
- { "cross;", 0x02717 },
- { "Cross;", 0x02A2F },
- { "Cscr;", 0x1D49E },
- { "cscr;", 0x1D4B8 },
- { "csub;", 0x02ACF },
- { "csube;", 0x02AD1 },
- { "csup;", 0x02AD0 },
- { "csupe;", 0x02AD2 },
- { "ctdot;", 0x022EF },
- { "cudarrl;", 0x02938 },
- { "cudarrr;", 0x02935 },
- { "cuepr;", 0x022DE },
- { "cuesc;", 0x022DF },
- { "cularr;", 0x021B6 },
- { "cularrp;", 0x0293D },
- { "cup;", 0x0222A },
- { "Cup;", 0x022D3 },
- { "cupbrcap;", 0x02A48 },
- { "CupCap;", 0x0224D },
- { "cupcap;", 0x02A46 },
- { "cupcup;", 0x02A4A },
- { "cupdot;", 0x0228D },
- { "cupor;", 0x02A45 },
- { "curarr;", 0x021B7 },
- { "curarrm;", 0x0293C },
- { "curlyeqprec;", 0x022DE },
- { "curlyeqsucc;", 0x022DF },
- { "curlyvee;", 0x022CE },
- { "curlywedge;", 0x022CF },
- { "curren;", 0x000A4 },
- { "curren", 0x000A4 },
- { "curvearrowleft;", 0x021B6 },
- { "curvearrowright;", 0x021B7 },
- { "cuvee;", 0x022CE },
- { "cuwed;", 0x022CF },
- { "cwconint;", 0x02232 },
- { "cwint;", 0x02231 },
- { "cylcty;", 0x0232D },
- { "dagger;", 0x02020 },
- { "Dagger;", 0x02021 },
- { "daleth;", 0x02138 },
- { "darr;", 0x02193 },
- { "Darr;", 0x021A1 },
- { "dArr;", 0x021D3 },
- { "dash;", 0x02010 },
- { "dashv;", 0x022A3 },
- { "Dashv;", 0x02AE4 },
- { "dbkarow;", 0x0290F },
- { "dblac;", 0x002DD },
- { "Dcaron;", 0x0010E },
- { "dcaron;", 0x0010F },
- { "Dcy;", 0x00414 },
- { "dcy;", 0x00434 },
- { "DD;", 0x02145 },
- { "dd;", 0x02146 },
- { "ddagger;", 0x02021 },
- { "ddarr;", 0x021CA },
- { "DDotrahd;", 0x02911 },
- { "ddotseq;", 0x02A77 },
- { "deg;", 0x000B0 },
- { "deg", 0x000B0 },
- { "Del;", 0x02207 },
- { "Delta;", 0x00394 },
- { "delta;", 0x003B4 },
- { "demptyv;", 0x029B1 },
- { "dfisht;", 0x0297F },
- { "Dfr;", 0x1D507 },
- { "dfr;", 0x1D521 },
- { "dHar;", 0x02965 },
- { "dharl;", 0x021C3 },
- { "dharr;", 0x021C2 },
- { "DiacriticalAcute;", 0x000B4 },
- { "DiacriticalDot;", 0x002D9 },
- { "DiacriticalDoubleAcute;", 0x002DD },
- { "DiacriticalGrave;", 0x00060 },
- { "DiacriticalTilde;", 0x002DC },
- { "diam;", 0x022C4 },
- { "diamond;", 0x022C4 },
- { "Diamond;", 0x022C4 },
- { "diamondsuit;", 0x02666 },
- { "diams;", 0x02666 },
- { "die;", 0x000A8 },
- { "DifferentialD;", 0x02146 },
- { "digamma;", 0x003DD },
- { "disin;", 0x022F2 },
- { "div;", 0x000F7 },
- { "divide;", 0x000F7 },
- { "divide", 0x000F7 },
- { "divideontimes;", 0x022C7 },
- { "divonx;", 0x022C7 },
- { "DJcy;", 0x00402 },
- { "djcy;", 0x00452 },
- { "dlcorn;", 0x0231E },
- { "dlcrop;", 0x0230D },
- { "dollar;", 0x00024 },
- { "Dopf;", 0x1D53B },
- { "dopf;", 0x1D555 },
- { "Dot;", 0x000A8 },
- { "dot;", 0x002D9 },
- { "DotDot;", 0x020DC },
- { "doteq;", 0x02250 },
- { "doteqdot;", 0x02251 },
- { "DotEqual;", 0x02250 },
- { "dotminus;", 0x02238 },
- { "dotplus;", 0x02214 },
- { "dotsquare;", 0x022A1 },
- { "doublebarwedge;", 0x02306 },
- { "DoubleContourIntegral;", 0x0222F },
- { "DoubleDot;", 0x000A8 },
- { "DoubleDownArrow;", 0x021D3 },
- { "DoubleLeftArrow;", 0x021D0 },
- { "DoubleLeftRightArrow;", 0x021D4 },
- { "DoubleLeftTee;", 0x02AE4 },
- { "DoubleLongLeftArrow;", 0x027F8 },
- { "DoubleLongLeftRightArrow;", 0x027FA },
- { "DoubleLongRightArrow;", 0x027F9 },
- { "DoubleRightArrow;", 0x021D2 },
- { "DoubleRightTee;", 0x022A8 },
- { "DoubleUpArrow;", 0x021D1 },
- { "DoubleUpDownArrow;", 0x021D5 },
- { "DoubleVerticalBar;", 0x02225 },
- { "downarrow;", 0x02193 },
- { "DownArrow;", 0x02193 },
- { "Downarrow;", 0x021D3 },
- { "DownArrowBar;", 0x02913 },
- { "DownArrowUpArrow;", 0x021F5 },
- { "DownBreve;", 0x00311 },
- { "downdownarrows;", 0x021CA },
- { "downharpoonleft;", 0x021C3 },
- { "downharpoonright;", 0x021C2 },
- { "DownLeftRightVector;", 0x02950 },
- { "DownLeftTeeVector;", 0x0295E },
- { "DownLeftVector;", 0x021BD },
- { "DownLeftVectorBar;", 0x02956 },
- { "DownRightTeeVector;", 0x0295F },
- { "DownRightVector;", 0x021C1 },
- { "DownRightVectorBar;", 0x02957 },
- { "DownTee;", 0x022A4 },
- { "DownTeeArrow;", 0x021A7 },
- { "drbkarow;", 0x02910 },
- { "drcorn;", 0x0231F },
- { "drcrop;", 0x0230C },
- { "Dscr;", 0x1D49F },
- { "dscr;", 0x1D4B9 },
- { "DScy;", 0x00405 },
- { "dscy;", 0x00455 },
- { "dsol;", 0x029F6 },
- { "Dstrok;", 0x00110 },
- { "dstrok;", 0x00111 },
- { "dtdot;", 0x022F1 },
- { "dtri;", 0x025BF },
- { "dtrif;", 0x025BE },
- { "duarr;", 0x021F5 },
- { "duhar;", 0x0296F },
- { "dwangle;", 0x029A6 },
- { "DZcy;", 0x0040F },
- { "dzcy;", 0x0045F },
- { "dzigrarr;", 0x027FF },
- { "Eacute;", 0x000C9 },
- { "Eacute", 0x000C9 },
- { "eacute;", 0x000E9 },
- { "eacute", 0x000E9 },
- { "easter;", 0x02A6E },
- { "Ecaron;", 0x0011A },
- { "ecaron;", 0x0011B },
- { "ecir;", 0x02256 },
- { "Ecirc;", 0x000CA },
- { "Ecirc", 0x000CA },
- { "ecirc;", 0x000EA },
- { "ecirc", 0x000EA },
- { "ecolon;", 0x02255 },
- { "Ecy;", 0x0042D },
- { "ecy;", 0x0044D },
- { "eDDot;", 0x02A77 },
- { "Edot;", 0x00116 },
- { "edot;", 0x00117 },
- { "eDot;", 0x02251 },
- { "ee;", 0x02147 },
- { "efDot;", 0x02252 },
- { "Efr;", 0x1D508 },
- { "efr;", 0x1D522 },
- { "eg;", 0x02A9A },
- { "Egrave;", 0x000C8 },
- { "Egrave", 0x000C8 },
- { "egrave;", 0x000E8 },
- { "egrave", 0x000E8 },
- { "egs;", 0x02A96 },
- { "egsdot;", 0x02A98 },
- { "el;", 0x02A99 },
- { "Element;", 0x02208 },
- { "elinters;", 0x023E7 },
- { "ell;", 0x02113 },
- { "els;", 0x02A95 },
- { "elsdot;", 0x02A97 },
- { "Emacr;", 0x00112 },
- { "emacr;", 0x00113 },
- { "empty;", 0x02205 },
- { "emptyset;", 0x02205 },
- { "EmptySmallSquare;", 0x025FB },
- { "emptyv;", 0x02205 },
- { "EmptyVerySmallSquare;", 0x025AB },
- { "emsp;", 0x02003 },
- { "emsp13;", 0x02004 },
- { "emsp14;", 0x02005 },
- { "ENG;", 0x0014A },
- { "eng;", 0x0014B },
- { "ensp;", 0x02002 },
- { "Eogon;", 0x00118 },
- { "eogon;", 0x00119 },
- { "Eopf;", 0x1D53C },
- { "eopf;", 0x1D556 },
- { "epar;", 0x022D5 },
- { "eparsl;", 0x029E3 },
- { "eplus;", 0x02A71 },
- { "epsi;", 0x003F5 },
- { "Epsilon;", 0x00395 },
- { "epsilon;", 0x003B5 },
- { "epsiv;", 0x003B5 },
- { "eqcirc;", 0x02256 },
- { "eqcolon;", 0x02255 },
- { "eqsim;", 0x02242 },
- { "eqslantgtr;", 0x02A96 },
- { "eqslantless;", 0x02A95 },
- { "Equal;", 0x02A75 },
- { "equals;", 0x0003D },
- { "EqualTilde;", 0x02242 },
- { "equest;", 0x0225F },
- { "Equilibrium;", 0x021CC },
- { "equiv;", 0x02261 },
- { "equivDD;", 0x02A78 },
- { "eqvparsl;", 0x029E5 },
- { "erarr;", 0x02971 },
- { "erDot;", 0x02253 },
- { "escr;", 0x0212F },
- { "Escr;", 0x02130 },
- { "esdot;", 0x02250 },
- { "esim;", 0x02242 },
- { "Esim;", 0x02A73 },
- { "Eta;", 0x00397 },
- { "eta;", 0x003B7 },
- { "ETH;", 0x000D0 },
- { "ETH", 0x000D0 },
- { "eth;", 0x000F0 },
- { "eth", 0x000F0 },
- { "Euml;", 0x000CB },
- { "Euml", 0x000CB },
- { "euml;", 0x000EB },
- { "euml", 0x000EB },
- { "euro;", 0x020AC },
- { "excl;", 0x00021 },
- { "exist;", 0x02203 },
- { "Exists;", 0x02203 },
- { "expectation;", 0x02130 },
- { "exponentiale;", 0x02147 },
- { "ExponentialE;", 0x02147 },
- { "fallingdotseq;", 0x02252 },
- { "Fcy;", 0x00424 },
- { "fcy;", 0x00444 },
- { "female;", 0x02640 },
- { "ffilig;", 0x0FB03 },
- { "fflig;", 0x0FB00 },
- { "ffllig;", 0x0FB04 },
- { "Ffr;", 0x1D509 },
- { "ffr;", 0x1D523 },
- { "filig;", 0x0FB01 },
- { "FilledSmallSquare;", 0x025FC },
- { "FilledVerySmallSquare;", 0x025AA },
- { "flat;", 0x0266D },
- { "fllig;", 0x0FB02 },
- { "fltns;", 0x025B1 },
- { "fnof;", 0x00192 },
- { "Fopf;", 0x1D53D },
- { "fopf;", 0x1D557 },
- { "forall;", 0x02200 },
- { "ForAll;", 0x02200 },
- { "fork;", 0x022D4 },
- { "forkv;", 0x02AD9 },
- { "Fouriertrf;", 0x02131 },
- { "fpartint;", 0x02A0D },
- { "frac12;", 0x000BD },
- { "frac12", 0x000BD },
- { "frac13;", 0x02153 },
- { "frac14;", 0x000BC },
- { "frac14", 0x000BC },
- { "frac15;", 0x02155 },
- { "frac16;", 0x02159 },
- { "frac18;", 0x0215B },
- { "frac23;", 0x02154 },
- { "frac25;", 0x02156 },
- { "frac34;", 0x000BE },
- { "frac34", 0x000BE },
- { "frac35;", 0x02157 },
- { "frac38;", 0x0215C },
- { "frac45;", 0x02158 },
- { "frac56;", 0x0215A },
- { "frac58;", 0x0215D },
- { "frac78;", 0x0215E },
- { "frasl;", 0x02044 },
- { "frown;", 0x02322 },
- { "Fscr;", 0x02131 },
- { "fscr;", 0x1D4BB },
- { "gacute;", 0x001F5 },
- { "Gamma;", 0x00393 },
- { "gamma;", 0x003B3 },
- { "Gammad;", 0x003DC },
- { "gammad;", 0x003DD },
- { "gap;", 0x02A86 },
- { "Gbreve;", 0x0011E },
- { "gbreve;", 0x0011F },
- { "Gcedil;", 0x00122 },
- { "Gcirc;", 0x0011C },
- { "gcirc;", 0x0011D },
- { "Gcy;", 0x00413 },
- { "gcy;", 0x00433 },
- { "Gdot;", 0x00120 },
- { "gdot;", 0x00121 },
- { "ge;", 0x02265 },
- { "gE;", 0x02267 },
- { "gel;", 0x022DB },
- { "gEl;", 0x02A8C },
- { "geq;", 0x02265 },
- { "geqq;", 0x02267 },
- { "geqslant;", 0x02A7E },
- { "ges;", 0x02A7E },
- { "gescc;", 0x02AA9 },
- { "gesdot;", 0x02A80 },
- { "gesdoto;", 0x02A82 },
- { "gesdotol;", 0x02A84 },
- { "gesles;", 0x02A94 },
- { "Gfr;", 0x1D50A },
- { "gfr;", 0x1D524 },
- { "gg;", 0x0226B },
- { "Gg;", 0x022D9 },
- { "ggg;", 0x022D9 },
- { "gimel;", 0x02137 },
- { "GJcy;", 0x00403 },
- { "gjcy;", 0x00453 },
- { "gl;", 0x02277 },
- { "gla;", 0x02AA5 },
- { "glE;", 0x02A92 },
- { "glj;", 0x02AA4 },
- { "gnap;", 0x02A8A },
- { "gnapprox;", 0x02A8A },
- { "gnE;", 0x02269 },
- { "gne;", 0x02A88 },
- { "gneq;", 0x02A88 },
- { "gneqq;", 0x02269 },
- { "gnsim;", 0x022E7 },
- { "Gopf;", 0x1D53E },
- { "gopf;", 0x1D558 },
- { "grave;", 0x00060 },
- { "GreaterEqual;", 0x02265 },
- { "GreaterEqualLess;", 0x022DB },
- { "GreaterFullEqual;", 0x02267 },
- { "GreaterGreater;", 0x02AA2 },
- { "GreaterLess;", 0x02277 },
- { "GreaterSlantEqual;", 0x02A7E },
- { "GreaterTilde;", 0x02273 },
- { "gscr;", 0x0210A },
- { "Gscr;", 0x1D4A2 },
- { "gsim;", 0x02273 },
- { "gsime;", 0x02A8E },
- { "gsiml;", 0x02A90 },
- { "gt;", 0x0003E },
- { "gt", 0x0003E },
- { "GT;", 0x0003E },
- { "GT", 0x0003E },
- { "Gt;", 0x0226B },
- { "gtcc;", 0x02AA7 },
- { "gtcir;", 0x02A7A },
- { "gtdot;", 0x022D7 },
- { "gtlPar;", 0x02995 },
- { "gtquest;", 0x02A7C },
- { "gtrapprox;", 0x02A86 },
- { "gtrarr;", 0x02978 },
- { "gtrdot;", 0x022D7 },
- { "gtreqless;", 0x022DB },
- { "gtreqqless;", 0x02A8C },
- { "gtrless;", 0x02277 },
- { "gtrsim;", 0x02273 },
- { "Hacek;", 0x002C7 },
- { "hairsp;", 0x0200A },
- { "half;", 0x000BD },
- { "hamilt;", 0x0210B },
- { "HARDcy;", 0x0042A },
- { "hardcy;", 0x0044A },
- { "harr;", 0x02194 },
- { "hArr;", 0x021D4 },
- { "harrcir;", 0x02948 },
- { "harrw;", 0x021AD },
- { "Hat;", 0x0005E },
- { "hbar;", 0x0210F },
- { "Hcirc;", 0x00124 },
- { "hcirc;", 0x00125 },
- { "hearts;", 0x02665 },
- { "heartsuit;", 0x02665 },
- { "hellip;", 0x02026 },
- { "hercon;", 0x022B9 },
- { "Hfr;", 0x0210C },
- { "hfr;", 0x1D525 },
- { "HilbertSpace;", 0x0210B },
- { "hksearow;", 0x02925 },
- { "hkswarow;", 0x02926 },
- { "hoarr;", 0x021FF },
- { "homtht;", 0x0223B },
- { "hookleftarrow;", 0x021A9 },
- { "hookrightarrow;", 0x021AA },
- { "Hopf;", 0x0210D },
- { "hopf;", 0x1D559 },
- { "horbar;", 0x02015 },
- { "HorizontalLine;", 0x02500 },
- { "Hscr;", 0x0210B },
- { "hscr;", 0x1D4BD },
- { "hslash;", 0x0210F },
- { "Hstrok;", 0x00126 },
- { "hstrok;", 0x00127 },
- { "HumpDownHump;", 0x0224E },
- { "HumpEqual;", 0x0224F },
- { "hybull;", 0x02043 },
- { "hyphen;", 0x02010 },
- { "Iacute;", 0x000CD },
- { "Iacute", 0x000CD },
- { "iacute;", 0x000ED },
- { "iacute", 0x000ED },
- { "ic;", 0x02063 },
- { "Icirc;", 0x000CE },
- { "Icirc", 0x000CE },
- { "icirc;", 0x000EE },
- { "icirc", 0x000EE },
- { "Icy;", 0x00418 },
- { "icy;", 0x00438 },
- { "Idot;", 0x00130 },
- { "IEcy;", 0x00415 },
- { "iecy;", 0x00435 },
- { "iexcl;", 0x000A1 },
- { "iexcl", 0x000A1 },
- { "iff;", 0x021D4 },
- { "Ifr;", 0x02111 },
- { "ifr;", 0x1D526 },
- { "Igrave;", 0x000CC },
- { "Igrave", 0x000CC },
- { "igrave;", 0x000EC },
- { "igrave", 0x000EC },
- { "ii;", 0x02148 },
- { "iiiint;", 0x02A0C },
- { "iiint;", 0x0222D },
- { "iinfin;", 0x029DC },
- { "iiota;", 0x02129 },
- { "IJlig;", 0x00132 },
- { "ijlig;", 0x00133 },
- { "Im;", 0x02111 },
- { "Imacr;", 0x0012A },
- { "imacr;", 0x0012B },
- { "image;", 0x02111 },
- { "ImaginaryI;", 0x02148 },
- { "imagline;", 0x02110 },
- { "imagpart;", 0x02111 },
- { "imath;", 0x00131 },
- { "imof;", 0x022B7 },
- { "imped;", 0x001B5 },
- { "Implies;", 0x021D2 },
- { "in;", 0x02208 },
- { "incare;", 0x02105 },
- { "infin;", 0x0221E },
- { "infintie;", 0x029DD },
- { "inodot;", 0x00131 },
- { "int;", 0x0222B },
- { "Int;", 0x0222C },
- { "intcal;", 0x022BA },
- { "integers;", 0x02124 },
- { "Integral;", 0x0222B },
- { "intercal;", 0x022BA },
- { "Intersection;", 0x022C2 },
- { "intlarhk;", 0x02A17 },
- { "intprod;", 0x02A3C },
- { "InvisibleComma;", 0x02063 },
- { "InvisibleTimes;", 0x02062 },
- { "IOcy;", 0x00401 },
- { "iocy;", 0x00451 },
- { "Iogon;", 0x0012E },
- { "iogon;", 0x0012F },
- { "Iopf;", 0x1D540 },
- { "iopf;", 0x1D55A },
- { "Iota;", 0x00399 },
- { "iota;", 0x003B9 },
- { "iprod;", 0x02A3C },
- { "iquest;", 0x000BF },
- { "iquest", 0x000BF },
- { "Iscr;", 0x02110 },
- { "iscr;", 0x1D4BE },
- { "isin;", 0x02208 },
- { "isindot;", 0x022F5 },
- { "isinE;", 0x022F9 },
- { "isins;", 0x022F4 },
- { "isinsv;", 0x022F3 },
- { "isinv;", 0x02208 },
- { "it;", 0x02062 },
- { "Itilde;", 0x00128 },
- { "itilde;", 0x00129 },
- { "Iukcy;", 0x00406 },
- { "iukcy;", 0x00456 },
- { "Iuml;", 0x000CF },
- { "Iuml", 0x000CF },
- { "iuml;", 0x000EF },
- { "iuml", 0x000EF },
- { "Jcirc;", 0x00134 },
- { "jcirc;", 0x00135 },
- { "Jcy;", 0x00419 },
- { "jcy;", 0x00439 },
- { "Jfr;", 0x1D50D },
- { "jfr;", 0x1D527 },
- { "jmath;", 0x00237 },
- { "Jopf;", 0x1D541 },
- { "jopf;", 0x1D55B },
- { "Jscr;", 0x1D4A5 },
- { "jscr;", 0x1D4BF },
- { "Jsercy;", 0x00408 },
- { "jsercy;", 0x00458 },
- { "Jukcy;", 0x00404 },
- { "jukcy;", 0x00454 },
- { "Kappa;", 0x0039A },
- { "kappa;", 0x003BA },
- { "kappav;", 0x003F0 },
- { "Kcedil;", 0x00136 },
- { "kcedil;", 0x00137 },
- { "Kcy;", 0x0041A },
- { "kcy;", 0x0043A },
- { "Kfr;", 0x1D50E },
- { "kfr;", 0x1D528 },
- { "kgreen;", 0x00138 },
- { "KHcy;", 0x00425 },
- { "khcy;", 0x00445 },
- { "KJcy;", 0x0040C },
- { "kjcy;", 0x0045C },
- { "Kopf;", 0x1D542 },
- { "kopf;", 0x1D55C },
- { "Kscr;", 0x1D4A6 },
- { "kscr;", 0x1D4C0 },
- { "lAarr;", 0x021DA },
- { "Lacute;", 0x00139 },
- { "lacute;", 0x0013A },
- { "laemptyv;", 0x029B4 },
- { "lagran;", 0x02112 },
- { "Lambda;", 0x0039B },
- { "lambda;", 0x003BB },
- { "lang;", 0x027E8 },
- { "Lang;", 0x027EA },
- { "langd;", 0x02991 },
- { "langle;", 0x027E8 },
- { "lap;", 0x02A85 },
- { "Laplacetrf;", 0x02112 },
- { "laquo;", 0x000AB },
- { "laquo", 0x000AB },
- { "larr;", 0x02190 },
- { "Larr;", 0x0219E },
- { "lArr;", 0x021D0 },
- { "larrb;", 0x021E4 },
- { "larrbfs;", 0x0291F },
- { "larrfs;", 0x0291D },
- { "larrhk;", 0x021A9 },
- { "larrlp;", 0x021AB },
- { "larrpl;", 0x02939 },
- { "larrsim;", 0x02973 },
- { "larrtl;", 0x021A2 },
- { "lat;", 0x02AAB },
- { "latail;", 0x02919 },
- { "lAtail;", 0x0291B },
- { "late;", 0x02AAD },
- { "lbarr;", 0x0290C },
- { "lBarr;", 0x0290E },
- { "lbbrk;", 0x02772 },
- { "lbrace;", 0x0007B },
- { "lbrack;", 0x0005B },
- { "lbrke;", 0x0298B },
- { "lbrksld;", 0x0298F },
- { "lbrkslu;", 0x0298D },
- { "Lcaron;", 0x0013D },
- { "lcaron;", 0x0013E },
- { "Lcedil;", 0x0013B },
- { "lcedil;", 0x0013C },
- { "lceil;", 0x02308 },
- { "lcub;", 0x0007B },
- { "Lcy;", 0x0041B },
- { "lcy;", 0x0043B },
- { "ldca;", 0x02936 },
- { "ldquo;", 0x0201C },
- { "ldquor;", 0x0201E },
- { "ldrdhar;", 0x02967 },
- { "ldrushar;", 0x0294B },
- { "ldsh;", 0x021B2 },
- { "le;", 0x02264 },
- { "lE;", 0x02266 },
- { "LeftAngleBracket;", 0x027E8 },
- { "leftarrow;", 0x02190 },
- { "LeftArrow;", 0x02190 },
- { "Leftarrow;", 0x021D0 },
- { "LeftArrowBar;", 0x021E4 },
- { "LeftArrowRightArrow;", 0x021C6 },
- { "leftarrowtail;", 0x021A2 },
- { "LeftCeiling;", 0x02308 },
- { "LeftDoubleBracket;", 0x027E6 },
- { "LeftDownTeeVector;", 0x02961 },
- { "LeftDownVector;", 0x021C3 },
- { "LeftDownVectorBar;", 0x02959 },
- { "LeftFloor;", 0x0230A },
- { "leftharpoondown;", 0x021BD },
- { "leftharpoonup;", 0x021BC },
- { "leftleftarrows;", 0x021C7 },
- { "leftrightarrow;", 0x02194 },
- { "LeftRightArrow;", 0x02194 },
- { "Leftrightarrow;", 0x021D4 },
- { "leftrightarrows;", 0x021C6 },
- { "leftrightharpoons;", 0x021CB },
- { "leftrightsquigarrow;", 0x021AD },
- { "LeftRightVector;", 0x0294E },
- { "LeftTee;", 0x022A3 },
- { "LeftTeeArrow;", 0x021A4 },
- { "LeftTeeVector;", 0x0295A },
- { "leftthreetimes;", 0x022CB },
- { "LeftTriangle;", 0x022B2 },
- { "LeftTriangleBar;", 0x029CF },
- { "LeftTriangleEqual;", 0x022B4 },
- { "LeftUpDownVector;", 0x02951 },
- { "LeftUpTeeVector;", 0x02960 },
- { "LeftUpVector;", 0x021BF },
- { "LeftUpVectorBar;", 0x02958 },
- { "LeftVector;", 0x021BC },
- { "LeftVectorBar;", 0x02952 },
- { "leg;", 0x022DA },
- { "lEg;", 0x02A8B },
- { "leq;", 0x02264 },
- { "leqq;", 0x02266 },
- { "leqslant;", 0x02A7D },
- { "les;", 0x02A7D },
- { "lescc;", 0x02AA8 },
- { "lesdot;", 0x02A7F },
- { "lesdoto;", 0x02A81 },
- { "lesdotor;", 0x02A83 },
- { "lesges;", 0x02A93 },
- { "lessapprox;", 0x02A85 },
- { "lessdot;", 0x022D6 },
- { "lesseqgtr;", 0x022DA },
- { "lesseqqgtr;", 0x02A8B },
- { "LessEqualGreater;", 0x022DA },
- { "LessFullEqual;", 0x02266 },
- { "LessGreater;", 0x02276 },
- { "lessgtr;", 0x02276 },
- { "LessLess;", 0x02AA1 },
- { "lesssim;", 0x02272 },
- { "LessSlantEqual;", 0x02A7D },
- { "LessTilde;", 0x02272 },
- { "lfisht;", 0x0297C },
- { "lfloor;", 0x0230A },
- { "Lfr;", 0x1D50F },
- { "lfr;", 0x1D529 },
- { "lg;", 0x02276 },
- { "lgE;", 0x02A91 },
- { "lHar;", 0x02962 },
- { "lhard;", 0x021BD },
- { "lharu;", 0x021BC },
- { "lharul;", 0x0296A },
- { "lhblk;", 0x02584 },
- { "LJcy;", 0x00409 },
- { "ljcy;", 0x00459 },
- { "ll;", 0x0226A },
- { "Ll;", 0x022D8 },
- { "llarr;", 0x021C7 },
- { "llcorner;", 0x0231E },
- { "Lleftarrow;", 0x021DA },
- { "llhard;", 0x0296B },
- { "lltri;", 0x025FA },
- { "Lmidot;", 0x0013F },
- { "lmidot;", 0x00140 },
- { "lmoust;", 0x023B0 },
- { "lmoustache;", 0x023B0 },
- { "lnap;", 0x02A89 },
- { "lnapprox;", 0x02A89 },
- { "lnE;", 0x02268 },
- { "lne;", 0x02A87 },
- { "lneq;", 0x02A87 },
- { "lneqq;", 0x02268 },
- { "lnsim;", 0x022E6 },
- { "loang;", 0x027EC },
- { "loarr;", 0x021FD },
- { "lobrk;", 0x027E6 },
- { "longleftarrow;", 0x027F5 },
- { "LongLeftArrow;", 0x027F5 },
- { "Longleftarrow;", 0x027F8 },
- { "longleftrightarrow;", 0x027F7 },
- { "LongLeftRightArrow;", 0x027F7 },
- { "Longleftrightarrow;", 0x027FA },
- { "longmapsto;", 0x027FC },
- { "longrightarrow;", 0x027F6 },
- { "LongRightArrow;", 0x027F6 },
- { "Longrightarrow;", 0x027F9 },
- { "looparrowleft;", 0x021AB },
- { "looparrowright;", 0x021AC },
- { "lopar;", 0x02985 },
- { "Lopf;", 0x1D543 },
- { "lopf;", 0x1D55D },
- { "loplus;", 0x02A2D },
- { "lotimes;", 0x02A34 },
- { "lowast;", 0x02217 },
- { "lowbar;", 0x0005F },
- { "LowerLeftArrow;", 0x02199 },
- { "LowerRightArrow;", 0x02198 },
- { "loz;", 0x025CA },
- { "lozenge;", 0x025CA },
- { "lozf;", 0x029EB },
- { "lpar;", 0x00028 },
- { "lparlt;", 0x02993 },
- { "lrarr;", 0x021C6 },
- { "lrcorner;", 0x0231F },
- { "lrhar;", 0x021CB },
- { "lrhard;", 0x0296D },
- { "lrm;", 0x0200E },
- { "lrtri;", 0x022BF },
- { "lsaquo;", 0x02039 },
- { "Lscr;", 0x02112 },
- { "lscr;", 0x1D4C1 },
- { "lsh;", 0x021B0 },
- { "Lsh;", 0x021B0 },
- { "lsim;", 0x02272 },
- { "lsime;", 0x02A8D },
- { "lsimg;", 0x02A8F },
- { "lsqb;", 0x0005B },
- { "lsquo;", 0x02018 },
- { "lsquor;", 0x0201A },
- { "Lstrok;", 0x00141 },
- { "lstrok;", 0x00142 },
- { "lt;", 0x0003C },
- { "lt", 0x0003C },
- { "LT;", 0x0003C },
- { "LT", 0x0003C },
- { "Lt;", 0x0226A },
- { "ltcc;", 0x02AA6 },
- { "ltcir;", 0x02A79 },
- { "ltdot;", 0x022D6 },
- { "lthree;", 0x022CB },
- { "ltimes;", 0x022C9 },
- { "ltlarr;", 0x02976 },
- { "ltquest;", 0x02A7B },
- { "ltri;", 0x025C3 },
- { "ltrie;", 0x022B4 },
- { "ltrif;", 0x025C2 },
- { "ltrPar;", 0x02996 },
- { "lurdshar;", 0x0294A },
- { "luruhar;", 0x02966 },
- { "macr;", 0x000AF },
- { "macr", 0x000AF },
- { "male;", 0x02642 },
- { "malt;", 0x02720 },
- { "maltese;", 0x02720 },
- { "map;", 0x021A6 },
- { "Map;", 0x02905 },
- { "mapsto;", 0x021A6 },
- { "mapstodown;", 0x021A7 },
- { "mapstoleft;", 0x021A4 },
- { "mapstoup;", 0x021A5 },
- { "marker;", 0x025AE },
- { "mcomma;", 0x02A29 },
- { "Mcy;", 0x0041C },
- { "mcy;", 0x0043C },
- { "mdash;", 0x02014 },
- { "mDDot;", 0x0223A },
- { "measuredangle;", 0x02221 },
- { "MediumSpace;", 0x0205F },
- { "Mellintrf;", 0x02133 },
- { "Mfr;", 0x1D510 },
- { "mfr;", 0x1D52A },
- { "mho;", 0x02127 },
- { "micro;", 0x000B5 },
- { "micro", 0x000B5 },
- { "mid;", 0x02223 },
- { "midast;", 0x0002A },
- { "midcir;", 0x02AF0 },
- { "middot;", 0x000B7 },
- { "middot", 0x000B7 },
- { "minus;", 0x02212 },
- { "minusb;", 0x0229F },
- { "minusd;", 0x02238 },
- { "minusdu;", 0x02A2A },
- { "MinusPlus;", 0x02213 },
- { "mlcp;", 0x02ADB },
- { "mldr;", 0x02026 },
- { "mnplus;", 0x02213 },
- { "models;", 0x022A7 },
- { "Mopf;", 0x1D544 },
- { "mopf;", 0x1D55E },
- { "mp;", 0x02213 },
- { "Mscr;", 0x02133 },
- { "mscr;", 0x1D4C2 },
- { "mstpos;", 0x0223E },
- { "Mu;", 0x0039C },
- { "mu;", 0x003BC },
- { "multimap;", 0x022B8 },
- { "mumap;", 0x022B8 },
- { "nabla;", 0x02207 },
- { "Nacute;", 0x00143 },
- { "nacute;", 0x00144 },
- { "nap;", 0x02249 },
- { "napos;", 0x00149 },
- { "napprox;", 0x02249 },
- { "natur;", 0x0266E },
- { "natural;", 0x0266E },
- { "naturals;", 0x02115 },
- { "nbsp;", 0x000A0 },
- { "nbsp", 0x000A0 },
- { "ncap;", 0x02A43 },
- { "Ncaron;", 0x00147 },
- { "ncaron;", 0x00148 },
- { "Ncedil;", 0x00145 },
- { "ncedil;", 0x00146 },
- { "ncong;", 0x02247 },
- { "ncup;", 0x02A42 },
- { "Ncy;", 0x0041D },
- { "ncy;", 0x0043D },
- { "ndash;", 0x02013 },
- { "ne;", 0x02260 },
- { "nearhk;", 0x02924 },
- { "nearr;", 0x02197 },
- { "neArr;", 0x021D7 },
- { "nearrow;", 0x02197 },
- { "NegativeMediumSpace;", 0x0200B },
- { "NegativeThickSpace;", 0x0200B },
- { "NegativeThinSpace;", 0x0200B },
- { "NegativeVeryThinSpace;", 0x0200B },
- { "nequiv;", 0x02262 },
- { "nesear;", 0x02928 },
- { "NestedGreaterGreater;", 0x0226B },
- { "NestedLessLess;", 0x0226A },
- { "NewLine;", 0x0000A },
- { "nexist;", 0x02204 },
- { "nexists;", 0x02204 },
- { "Nfr;", 0x1D511 },
- { "nfr;", 0x1D52B },
- { "nge;", 0x02271 },
- { "ngeq;", 0x02271 },
- { "ngsim;", 0x02275 },
- { "ngt;", 0x0226F },
- { "ngtr;", 0x0226F },
- { "nharr;", 0x021AE },
- { "nhArr;", 0x021CE },
- { "nhpar;", 0x02AF2 },
- { "ni;", 0x0220B },
- { "nis;", 0x022FC },
- { "nisd;", 0x022FA },
- { "niv;", 0x0220B },
- { "NJcy;", 0x0040A },
- { "njcy;", 0x0045A },
- { "nlarr;", 0x0219A },
- { "nlArr;", 0x021CD },
- { "nldr;", 0x02025 },
- { "nle;", 0x02270 },
- { "nleftarrow;", 0x0219A },
- { "nLeftarrow;", 0x021CD },
- { "nleftrightarrow;", 0x021AE },
- { "nLeftrightarrow;", 0x021CE },
- { "nleq;", 0x02270 },
- { "nless;", 0x0226E },
- { "nlsim;", 0x02274 },
- { "nlt;", 0x0226E },
- { "nltri;", 0x022EA },
- { "nltrie;", 0x022EC },
- { "nmid;", 0x02224 },
- { "NoBreak;", 0x02060 },
- { "NonBreakingSpace;", 0x000A0 },
- { "Nopf;", 0x02115 },
- { "nopf;", 0x1D55F },
- { "not;", 0x000AC },
- { "not", 0x000AC },
- { "Not;", 0x02AEC },
- { "NotCongruent;", 0x02262 },
- { "NotCupCap;", 0x0226D },
- { "NotDoubleVerticalBar;", 0x02226 },
- { "NotElement;", 0x02209 },
- { "NotEqual;", 0x02260 },
- { "NotExists;", 0x02204 },
- { "NotGreater;", 0x0226F },
- { "NotGreaterEqual;", 0x02271 },
- { "NotGreaterLess;", 0x02279 },
- { "NotGreaterTilde;", 0x02275 },
- { "notin;", 0x02209 },
- { "notinva;", 0x02209 },
- { "notinvb;", 0x022F7 },
- { "notinvc;", 0x022F6 },
- { "NotLeftTriangle;", 0x022EA },
- { "NotLeftTriangleEqual;", 0x022EC },
- { "NotLess;", 0x0226E },
- { "NotLessEqual;", 0x02270 },
- { "NotLessGreater;", 0x02278 },
- { "NotLessTilde;", 0x02274 },
- { "notni;", 0x0220C },
- { "notniva;", 0x0220C },
- { "notnivb;", 0x022FE },
- { "notnivc;", 0x022FD },
- { "NotPrecedes;", 0x02280 },
- { "NotPrecedesSlantEqual;", 0x022E0 },
- { "NotReverseElement;", 0x0220C },
- { "NotRightTriangle;", 0x022EB },
- { "NotRightTriangleEqual;", 0x022ED },
- { "NotSquareSubsetEqual;", 0x022E2 },
- { "NotSquareSupersetEqual;", 0x022E3 },
- { "NotSubsetEqual;", 0x02288 },
- { "NotSucceeds;", 0x02281 },
- { "NotSucceedsSlantEqual;", 0x022E1 },
- { "NotSupersetEqual;", 0x02289 },
- { "NotTilde;", 0x02241 },
- { "NotTildeEqual;", 0x02244 },
- { "NotTildeFullEqual;", 0x02247 },
- { "NotTildeTilde;", 0x02249 },
- { "NotVerticalBar;", 0x02224 },
- { "npar;", 0x02226 },
- { "nparallel;", 0x02226 },
- { "npolint;", 0x02A14 },
- { "npr;", 0x02280 },
- { "nprcue;", 0x022E0 },
- { "nprec;", 0x02280 },
- { "nrarr;", 0x0219B },
- { "nrArr;", 0x021CF },
- { "nrightarrow;", 0x0219B },
- { "nRightarrow;", 0x021CF },
- { "nrtri;", 0x022EB },
- { "nrtrie;", 0x022ED },
- { "nsc;", 0x02281 },
- { "nsccue;", 0x022E1 },
- { "Nscr;", 0x1D4A9 },
- { "nscr;", 0x1D4C3 },
- { "nshortmid;", 0x02224 },
- { "nshortparallel;", 0x02226 },
- { "nsim;", 0x02241 },
- { "nsime;", 0x02244 },
- { "nsimeq;", 0x02244 },
- { "nsmid;", 0x02224 },
- { "nspar;", 0x02226 },
- { "nsqsube;", 0x022E2 },
- { "nsqsupe;", 0x022E3 },
- { "nsub;", 0x02284 },
- { "nsube;", 0x02288 },
- { "nsubseteq;", 0x02288 },
- { "nsucc;", 0x02281 },
- { "nsup;", 0x02285 },
- { "nsupe;", 0x02289 },
- { "nsupseteq;", 0x02289 },
- { "ntgl;", 0x02279 },
- { "Ntilde;", 0x000D1 },
- { "Ntilde", 0x000D1 },
- { "ntilde;", 0x000F1 },
- { "ntilde", 0x000F1 },
- { "ntlg;", 0x02278 },
- { "ntriangleleft;", 0x022EA },
- { "ntrianglelefteq;", 0x022EC },
- { "ntriangleright;", 0x022EB },
- { "ntrianglerighteq;", 0x022ED },
- { "Nu;", 0x0039D },
- { "nu;", 0x003BD },
- { "num;", 0x00023 },
- { "numero;", 0x02116 },
- { "numsp;", 0x02007 },
- { "nvdash;", 0x022AC },
- { "nvDash;", 0x022AD },
- { "nVdash;", 0x022AE },
- { "nVDash;", 0x022AF },
- { "nvHarr;", 0x02904 },
- { "nvinfin;", 0x029DE },
- { "nvlArr;", 0x02902 },
- { "nvrArr;", 0x02903 },
- { "nwarhk;", 0x02923 },
- { "nwarr;", 0x02196 },
- { "nwArr;", 0x021D6 },
- { "nwarrow;", 0x02196 },
- { "nwnear;", 0x02927 },
- { "Oacute;", 0x000D3 },
- { "Oacute", 0x000D3 },
- { "oacute;", 0x000F3 },
- { "oacute", 0x000F3 },
- { "oast;", 0x0229B },
- { "ocir;", 0x0229A },
- { "Ocirc;", 0x000D4 },
- { "Ocirc", 0x000D4 },
- { "ocirc;", 0x000F4 },
- { "ocirc", 0x000F4 },
- { "Ocy;", 0x0041E },
- { "ocy;", 0x0043E },
- { "odash;", 0x0229D },
- { "Odblac;", 0x00150 },
- { "odblac;", 0x00151 },
- { "odiv;", 0x02A38 },
- { "odot;", 0x02299 },
- { "odsold;", 0x029BC },
- { "OElig;", 0x00152 },
- { "oelig;", 0x00153 },
- { "ofcir;", 0x029BF },
- { "Ofr;", 0x1D512 },
- { "ofr;", 0x1D52C },
- { "ogon;", 0x002DB },
- { "Ograve;", 0x000D2 },
- { "Ograve", 0x000D2 },
- { "ograve;", 0x000F2 },
- { "ograve", 0x000F2 },
- { "ogt;", 0x029C1 },
- { "ohbar;", 0x029B5 },
- { "ohm;", 0x02126 },
- { "oint;", 0x0222E },
- { "olarr;", 0x021BA },
- { "olcir;", 0x029BE },
- { "olcross;", 0x029BB },
- { "oline;", 0x0203E },
- { "olt;", 0x029C0 },
- { "Omacr;", 0x0014C },
- { "omacr;", 0x0014D },
- { "Omega;", 0x003A9 },
- { "omega;", 0x003C9 },
- { "Omicron;", 0x0039F },
- { "omicron;", 0x003BF },
- { "omid;", 0x029B6 },
- { "ominus;", 0x02296 },
- { "Oopf;", 0x1D546 },
- { "oopf;", 0x1D560 },
- { "opar;", 0x029B7 },
- { "OpenCurlyDoubleQuote;", 0x0201C },
- { "OpenCurlyQuote;", 0x02018 },
- { "operp;", 0x029B9 },
- { "oplus;", 0x02295 },
- { "or;", 0x02228 },
- { "Or;", 0x02A54 },
- { "orarr;", 0x021BB },
- { "ord;", 0x02A5D },
- { "order;", 0x02134 },
- { "orderof;", 0x02134 },
- { "ordf;", 0x000AA },
- { "ordf", 0x000AA },
- { "ordm;", 0x000BA },
- { "ordm", 0x000BA },
- { "origof;", 0x022B6 },
- { "oror;", 0x02A56 },
- { "orslope;", 0x02A57 },
- { "orv;", 0x02A5B },
- { "oS;", 0x024C8 },
- { "oscr;", 0x02134 },
- { "Oscr;", 0x1D4AA },
- { "Oslash;", 0x000D8 },
- { "Oslash", 0x000D8 },
- { "oslash;", 0x000F8 },
- { "oslash", 0x000F8 },
- { "osol;", 0x02298 },
- { "Otilde;", 0x000D5 },
- { "Otilde", 0x000D5 },
- { "otilde;", 0x000F5 },
- { "otilde", 0x000F5 },
- { "otimes;", 0x02297 },
- { "Otimes;", 0x02A37 },
- { "otimesas;", 0x02A36 },
- { "Ouml;", 0x000D6 },
- { "Ouml", 0x000D6 },
- { "ouml;", 0x000F6 },
- { "ouml", 0x000F6 },
- { "ovbar;", 0x0233D },
- { "OverBar;", 0x000AF },
- { "OverBrace;", 0x023DE },
- { "OverBracket;", 0x023B4 },
- { "OverParenthesis;", 0x023DC },
- { "par;", 0x02225 },
- { "para;", 0x000B6 },
- { "para", 0x000B6 },
- { "parallel;", 0x02225 },
- { "parsim;", 0x02AF3 },
- { "parsl;", 0x02AFD },
- { "part;", 0x02202 },
- { "PartialD;", 0x02202 },
- { "Pcy;", 0x0041F },
- { "pcy;", 0x0043F },
- { "percnt;", 0x00025 },
- { "period;", 0x0002E },
- { "permil;", 0x02030 },
- { "perp;", 0x022A5 },
- { "pertenk;", 0x02031 },
- { "Pfr;", 0x1D513 },
- { "pfr;", 0x1D52D },
- { "Phi;", 0x003A6 },
- { "phi;", 0x003C6 },
- { "phiv;", 0x003C6 },
- { "phmmat;", 0x02133 },
- { "phone;", 0x0260E },
- { "Pi;", 0x003A0 },
- { "pi;", 0x003C0 },
- { "pitchfork;", 0x022D4 },
- { "piv;", 0x003D6 },
- { "planck;", 0x0210F },
- { "planckh;", 0x0210E },
- { "plankv;", 0x0210F },
- { "plus;", 0x0002B },
- { "plusacir;", 0x02A23 },
- { "plusb;", 0x0229E },
- { "pluscir;", 0x02A22 },
- { "plusdo;", 0x02214 },
- { "plusdu;", 0x02A25 },
- { "pluse;", 0x02A72 },
- { "PlusMinus;", 0x000B1 },
- { "plusmn;", 0x000B1 },
- { "plusmn", 0x000B1 },
- { "plussim;", 0x02A26 },
- { "plustwo;", 0x02A27 },
- { "pm;", 0x000B1 },
- { "Poincareplane;", 0x0210C },
- { "pointint;", 0x02A15 },
- { "Popf;", 0x02119 },
- { "popf;", 0x1D561 },
- { "pound;", 0x000A3 },
- { "pound", 0x000A3 },
- { "pr;", 0x0227A },
- { "Pr;", 0x02ABB },
- { "prap;", 0x02AB7 },
- { "prcue;", 0x0227C },
- { "pre;", 0x02AAF },
- { "prE;", 0x02AB3 },
- { "prec;", 0x0227A },
- { "precapprox;", 0x02AB7 },
- { "preccurlyeq;", 0x0227C },
- { "Precedes;", 0x0227A },
- { "PrecedesEqual;", 0x02AAF },
- { "PrecedesSlantEqual;", 0x0227C },
- { "PrecedesTilde;", 0x0227E },
- { "preceq;", 0x02AAF },
- { "precnapprox;", 0x02AB9 },
- { "precneqq;", 0x02AB5 },
- { "precnsim;", 0x022E8 },
- { "precsim;", 0x0227E },
- { "prime;", 0x02032 },
- { "Prime;", 0x02033 },
- { "primes;", 0x02119 },
- { "prnap;", 0x02AB9 },
- { "prnE;", 0x02AB5 },
- { "prnsim;", 0x022E8 },
- { "prod;", 0x0220F },
- { "Product;", 0x0220F },
- { "profalar;", 0x0232E },
- { "profline;", 0x02312 },
- { "profsurf;", 0x02313 },
- { "prop;", 0x0221D },
- { "Proportion;", 0x02237 },
- { "Proportional;", 0x0221D },
- { "propto;", 0x0221D },
- { "prsim;", 0x0227E },
- { "prurel;", 0x022B0 },
- { "Pscr;", 0x1D4AB },
- { "pscr;", 0x1D4C5 },
- { "Psi;", 0x003A8 },
- { "psi;", 0x003C8 },
- { "puncsp;", 0x02008 },
- { "Qfr;", 0x1D514 },
- { "qfr;", 0x1D52E },
- { "qint;", 0x02A0C },
- { "Qopf;", 0x0211A },
- { "qopf;", 0x1D562 },
- { "qprime;", 0x02057 },
- { "Qscr;", 0x1D4AC },
- { "qscr;", 0x1D4C6 },
- { "quaternions;", 0x0210D },
- { "quatint;", 0x02A16 },
- { "quest;", 0x0003F },
- { "questeq;", 0x0225F },
- { "quot;", 0x00022 },
- { "quot", 0x00022 },
- { "QUOT;", 0x00022 },
- { "QUOT", 0x00022 },
- { "rAarr;", 0x021DB },
- { "race;", 0x029DA },
- { "Racute;", 0x00154 },
- { "racute;", 0x00155 },
- { "radic;", 0x0221A },
- { "raemptyv;", 0x029B3 },
- { "rang;", 0x027E9 },
- { "Rang;", 0x027EB },
- { "rangd;", 0x02992 },
- { "range;", 0x029A5 },
- { "rangle;", 0x027E9 },
- { "raquo;", 0x000BB },
- { "raquo", 0x000BB },
- { "rarr;", 0x02192 },
- { "Rarr;", 0x021A0 },
- { "rArr;", 0x021D2 },
- { "rarrap;", 0x02975 },
- { "rarrb;", 0x021E5 },
- { "rarrbfs;", 0x02920 },
- { "rarrc;", 0x02933 },
- { "rarrfs;", 0x0291E },
- { "rarrhk;", 0x021AA },
- { "rarrlp;", 0x021AC },
- { "rarrpl;", 0x02945 },
- { "rarrsim;", 0x02974 },
- { "rarrtl;", 0x021A3 },
- { "Rarrtl;", 0x02916 },
- { "rarrw;", 0x0219D },
- { "ratail;", 0x0291A },
- { "rAtail;", 0x0291C },
- { "ratio;", 0x02236 },
- { "rationals;", 0x0211A },
- { "rbarr;", 0x0290D },
- { "rBarr;", 0x0290F },
- { "RBarr;", 0x02910 },
- { "rbbrk;", 0x02773 },
- { "rbrace;", 0x0007D },
- { "rbrack;", 0x0005D },
- { "rbrke;", 0x0298C },
- { "rbrksld;", 0x0298E },
- { "rbrkslu;", 0x02990 },
- { "Rcaron;", 0x00158 },
- { "rcaron;", 0x00159 },
- { "Rcedil;", 0x00156 },
- { "rcedil;", 0x00157 },
- { "rceil;", 0x02309 },
- { "rcub;", 0x0007D },
- { "Rcy;", 0x00420 },
- { "rcy;", 0x00440 },
- { "rdca;", 0x02937 },
- { "rdldhar;", 0x02969 },
- { "rdquo;", 0x0201D },
- { "rdquor;", 0x0201D },
- { "rdsh;", 0x021B3 },
- { "Re;", 0x0211C },
- { "real;", 0x0211C },
- { "realine;", 0x0211B },
- { "realpart;", 0x0211C },
- { "reals;", 0x0211D },
- { "rect;", 0x025AD },
- { "reg;", 0x000AE },
- { "reg", 0x000AE },
- { "REG;", 0x000AE },
- { "REG", 0x000AE },
- { "ReverseElement;", 0x0220B },
- { "ReverseEquilibrium;", 0x021CB },
- { "ReverseUpEquilibrium;", 0x0296F },
- { "rfisht;", 0x0297D },
- { "rfloor;", 0x0230B },
- { "Rfr;", 0x0211C },
- { "rfr;", 0x1D52F },
- { "rHar;", 0x02964 },
- { "rhard;", 0x021C1 },
- { "rharu;", 0x021C0 },
- { "rharul;", 0x0296C },
- { "Rho;", 0x003A1 },
- { "rho;", 0x003C1 },
- { "rhov;", 0x003F1 },
- { "RightAngleBracket;", 0x027E9 },
- { "rightarrow;", 0x02192 },
- { "RightArrow;", 0x02192 },
- { "Rightarrow;", 0x021D2 },
- { "RightArrowBar;", 0x021E5 },
- { "RightArrowLeftArrow;", 0x021C4 },
- { "rightarrowtail;", 0x021A3 },
- { "RightCeiling;", 0x02309 },
- { "RightDoubleBracket;", 0x027E7 },
- { "RightDownTeeVector;", 0x0295D },
- { "RightDownVector;", 0x021C2 },
- { "RightDownVectorBar;", 0x02955 },
- { "RightFloor;", 0x0230B },
- { "rightharpoondown;", 0x021C1 },
- { "rightharpoonup;", 0x021C0 },
- { "rightleftarrows;", 0x021C4 },
- { "rightleftharpoons;", 0x021CC },
- { "rightrightarrows;", 0x021C9 },
- { "rightsquigarrow;", 0x0219D },
- { "RightTee;", 0x022A2 },
- { "RightTeeArrow;", 0x021A6 },
- { "RightTeeVector;", 0x0295B },
- { "rightthreetimes;", 0x022CC },
- { "RightTriangle;", 0x022B3 },
- { "RightTriangleBar;", 0x029D0 },
- { "RightTriangleEqual;", 0x022B5 },
- { "RightUpDownVector;", 0x0294F },
- { "RightUpTeeVector;", 0x0295C },
- { "RightUpVector;", 0x021BE },
- { "RightUpVectorBar;", 0x02954 },
- { "RightVector;", 0x021C0 },
- { "RightVectorBar;", 0x02953 },
- { "ring;", 0x002DA },
- { "risingdotseq;", 0x02253 },
- { "rlarr;", 0x021C4 },
- { "rlhar;", 0x021CC },
- { "rlm;", 0x0200F },
- { "rmoust;", 0x023B1 },
- { "rmoustache;", 0x023B1 },
- { "rnmid;", 0x02AEE },
- { "roang;", 0x027ED },
- { "roarr;", 0x021FE },
- { "robrk;", 0x027E7 },
- { "ropar;", 0x02986 },
- { "Ropf;", 0x0211D },
- { "ropf;", 0x1D563 },
- { "roplus;", 0x02A2E },
- { "rotimes;", 0x02A35 },
- { "RoundImplies;", 0x02970 },
- { "rpar;", 0x00029 },
- { "rpargt;", 0x02994 },
- { "rppolint;", 0x02A12 },
- { "rrarr;", 0x021C9 },
- { "Rrightarrow;", 0x021DB },
- { "rsaquo;", 0x0203A },
- { "Rscr;", 0x0211B },
- { "rscr;", 0x1D4C7 },
- { "rsh;", 0x021B1 },
- { "Rsh;", 0x021B1 },
- { "rsqb;", 0x0005D },
- { "rsquo;", 0x02019 },
- { "rsquor;", 0x02019 },
- { "rthree;", 0x022CC },
- { "rtimes;", 0x022CA },
- { "rtri;", 0x025B9 },
- { "rtrie;", 0x022B5 },
- { "rtrif;", 0x025B8 },
- { "rtriltri;", 0x029CE },
- { "RuleDelayed;", 0x029F4 },
- { "ruluhar;", 0x02968 },
- { "rx;", 0x0211E },
- { "Sacute;", 0x0015A },
- { "sacute;", 0x0015B },
- { "sbquo;", 0x0201A },
- { "sc;", 0x0227B },
- { "Sc;", 0x02ABC },
- { "scap;", 0x02AB8 },
- { "Scaron;", 0x00160 },
- { "scaron;", 0x00161 },
- { "sccue;", 0x0227D },
- { "sce;", 0x02AB0 },
- { "scE;", 0x02AB4 },
- { "Scedil;", 0x0015E },
- { "scedil;", 0x0015F },
- { "Scirc;", 0x0015C },
- { "scirc;", 0x0015D },
- { "scnap;", 0x02ABA },
- { "scnE;", 0x02AB6 },
- { "scnsim;", 0x022E9 },
- { "scpolint;", 0x02A13 },
- { "scsim;", 0x0227F },
- { "Scy;", 0x00421 },
- { "scy;", 0x00441 },
- { "sdot;", 0x022C5 },
- { "sdotb;", 0x022A1 },
- { "sdote;", 0x02A66 },
- { "searhk;", 0x02925 },
- { "searr;", 0x02198 },
- { "seArr;", 0x021D8 },
- { "searrow;", 0x02198 },
- { "sect;", 0x000A7 },
- { "sect", 0x000A7 },
- { "semi;", 0x0003B },
- { "seswar;", 0x02929 },
- { "setminus;", 0x02216 },
- { "setmn;", 0x02216 },
- { "sext;", 0x02736 },
- { "Sfr;", 0x1D516 },
- { "sfr;", 0x1D530 },
- { "sfrown;", 0x02322 },
- { "sharp;", 0x0266F },
- { "SHCHcy;", 0x00429 },
- { "shchcy;", 0x00449 },
- { "SHcy;", 0x00428 },
- { "shcy;", 0x00448 },
- { "ShortDownArrow;", 0x02193 },
- { "ShortLeftArrow;", 0x02190 },
- { "shortmid;", 0x02223 },
- { "shortparallel;", 0x02225 },
- { "ShortRightArrow;", 0x02192 },
- { "ShortUpArrow;", 0x02191 },
- { "shy;", 0x000AD },
- { "shy", 0x000AD },
- { "Sigma;", 0x003A3 },
- { "sigma;", 0x003C3 },
- { "sigmaf;", 0x003C2 },
- { "sigmav;", 0x003C2 },
- { "sim;", 0x0223C },
- { "simdot;", 0x02A6A },
- { "sime;", 0x02243 },
- { "simeq;", 0x02243 },
- { "simg;", 0x02A9E },
- { "simgE;", 0x02AA0 },
- { "siml;", 0x02A9D },
- { "simlE;", 0x02A9F },
- { "simne;", 0x02246 },
- { "simplus;", 0x02A24 },
- { "simrarr;", 0x02972 },
- { "slarr;", 0x02190 },
- { "SmallCircle;", 0x02218 },
- { "smallsetminus;", 0x02216 },
- { "smashp;", 0x02A33 },
- { "smeparsl;", 0x029E4 },
- { "smid;", 0x02223 },
- { "smile;", 0x02323 },
- { "smt;", 0x02AAA },
- { "smte;", 0x02AAC },
- { "SOFTcy;", 0x0042C },
- { "softcy;", 0x0044C },
- { "sol;", 0x0002F },
- { "solb;", 0x029C4 },
- { "solbar;", 0x0233F },
- { "Sopf;", 0x1D54A },
- { "sopf;", 0x1D564 },
- { "spades;", 0x02660 },
- { "spadesuit;", 0x02660 },
- { "spar;", 0x02225 },
- { "sqcap;", 0x02293 },
- { "sqcup;", 0x02294 },
- { "Sqrt;", 0x0221A },
- { "sqsub;", 0x0228F },
- { "sqsube;", 0x02291 },
- { "sqsubset;", 0x0228F },
- { "sqsubseteq;", 0x02291 },
- { "sqsup;", 0x02290 },
- { "sqsupe;", 0x02292 },
- { "sqsupset;", 0x02290 },
- { "sqsupseteq;", 0x02292 },
- { "squ;", 0x025A1 },
- { "square;", 0x025A1 },
- { "Square;", 0x025A1 },
- { "SquareIntersection;", 0x02293 },
- { "SquareSubset;", 0x0228F },
- { "SquareSubsetEqual;", 0x02291 },
- { "SquareSuperset;", 0x02290 },
- { "SquareSupersetEqual;", 0x02292 },
- { "SquareUnion;", 0x02294 },
- { "squarf;", 0x025AA },
- { "squf;", 0x025AA },
- { "srarr;", 0x02192 },
- { "Sscr;", 0x1D4AE },
- { "sscr;", 0x1D4C8 },
- { "ssetmn;", 0x02216 },
- { "ssmile;", 0x02323 },
- { "sstarf;", 0x022C6 },
- { "Star;", 0x022C6 },
- { "star;", 0x02606 },
- { "starf;", 0x02605 },
- { "straightepsilon;", 0x003F5 },
- { "straightphi;", 0x003D5 },
- { "strns;", 0x000AF },
- { "sub;", 0x02282 },
- { "Sub;", 0x022D0 },
- { "subdot;", 0x02ABD },
- { "sube;", 0x02286 },
- { "subE;", 0x02AC5 },
- { "subedot;", 0x02AC3 },
- { "submult;", 0x02AC1 },
- { "subne;", 0x0228A },
- { "subnE;", 0x02ACB },
- { "subplus;", 0x02ABF },
- { "subrarr;", 0x02979 },
- { "subset;", 0x02282 },
- { "Subset;", 0x022D0 },
- { "subseteq;", 0x02286 },
- { "subseteqq;", 0x02AC5 },
- { "SubsetEqual;", 0x02286 },
- { "subsetneq;", 0x0228A },
- { "subsetneqq;", 0x02ACB },
- { "subsim;", 0x02AC7 },
- { "subsub;", 0x02AD5 },
- { "subsup;", 0x02AD3 },
- { "succ;", 0x0227B },
- { "succapprox;", 0x02AB8 },
- { "succcurlyeq;", 0x0227D },
- { "Succeeds;", 0x0227B },
- { "SucceedsEqual;", 0x02AB0 },
- { "SucceedsSlantEqual;", 0x0227D },
- { "SucceedsTilde;", 0x0227F },
- { "succeq;", 0x02AB0 },
- { "succnapprox;", 0x02ABA },
- { "succneqq;", 0x02AB6 },
- { "succnsim;", 0x022E9 },
- { "succsim;", 0x0227F },
- { "SuchThat;", 0x0220B },
- { "sum;", 0x02211 },
- { "Sum;", 0x02211 },
- { "sung;", 0x0266A },
- { "sup;", 0x02283 },
- { "Sup;", 0x022D1 },
- { "sup1;", 0x000B9 },
- { "sup1", 0x000B9 },
- { "sup2;", 0x000B2 },
- { "sup2", 0x000B2 },
- { "sup3;", 0x000B3 },
- { "sup3", 0x000B3 },
- { "supdot;", 0x02ABE },
- { "supdsub;", 0x02AD8 },
- { "supe;", 0x02287 },
- { "supE;", 0x02AC6 },
- { "supedot;", 0x02AC4 },
- { "Superset;", 0x02283 },
- { "SupersetEqual;", 0x02287 },
- { "suphsub;", 0x02AD7 },
- { "suplarr;", 0x0297B },
- { "supmult;", 0x02AC2 },
- { "supne;", 0x0228B },
- { "supnE;", 0x02ACC },
- { "supplus;", 0x02AC0 },
- { "supset;", 0x02283 },
- { "Supset;", 0x022D1 },
- { "supseteq;", 0x02287 },
- { "supseteqq;", 0x02AC6 },
- { "supsetneq;", 0x0228B },
- { "supsetneqq;", 0x02ACC },
- { "supsim;", 0x02AC8 },
- { "supsub;", 0x02AD4 },
- { "supsup;", 0x02AD6 },
- { "swarhk;", 0x02926 },
- { "swarr;", 0x02199 },
- { "swArr;", 0x021D9 },
- { "swarrow;", 0x02199 },
- { "swnwar;", 0x0292A },
- { "szlig;", 0x000DF },
- { "szlig", 0x000DF },
- { "Tab;", 0x00009 },
- { "target;", 0x02316 },
- { "Tau;", 0x003A4 },
- { "tau;", 0x003C4 },
- { "tbrk;", 0x023B4 },
- { "Tcaron;", 0x00164 },
- { "tcaron;", 0x00165 },
- { "Tcedil;", 0x00162 },
- { "tcedil;", 0x00163 },
- { "Tcy;", 0x00422 },
- { "tcy;", 0x00442 },
- { "tdot;", 0x020DB },
- { "telrec;", 0x02315 },
- { "Tfr;", 0x1D517 },
- { "tfr;", 0x1D531 },
- { "there4;", 0x02234 },
- { "therefore;", 0x02234 },
- { "Therefore;", 0x02234 },
- { "Theta;", 0x00398 },
- { "theta;", 0x003B8 },
- { "thetasym;", 0x003D1 },
- { "thetav;", 0x003D1 },
- { "thickapprox;", 0x02248 },
- { "thicksim;", 0x0223C },
- { "thinsp;", 0x02009 },
- { "ThinSpace;", 0x02009 },
- { "thkap;", 0x02248 },
- { "thksim;", 0x0223C },
- { "THORN;", 0x000DE },
- { "THORN", 0x000DE },
- { "thorn;", 0x000FE },
- { "thorn", 0x000FE },
- { "tilde;", 0x002DC },
- { "Tilde;", 0x0223C },
- { "TildeEqual;", 0x02243 },
- { "TildeFullEqual;", 0x02245 },
- { "TildeTilde;", 0x02248 },
- { "times;", 0x000D7 },
- { "times", 0x000D7 },
- { "timesb;", 0x022A0 },
- { "timesbar;", 0x02A31 },
- { "timesd;", 0x02A30 },
- { "tint;", 0x0222D },
- { "toea;", 0x02928 },
- { "top;", 0x022A4 },
- { "topbot;", 0x02336 },
- { "topcir;", 0x02AF1 },
- { "Topf;", 0x1D54B },
- { "topf;", 0x1D565 },
- { "topfork;", 0x02ADA },
- { "tosa;", 0x02929 },
- { "tprime;", 0x02034 },
- { "trade;", 0x02122 },
- { "TRADE;", 0x02122 },
- { "triangle;", 0x025B5 },
- { "triangledown;", 0x025BF },
- { "triangleleft;", 0x025C3 },
- { "trianglelefteq;", 0x022B4 },
- { "triangleq;", 0x0225C },
- { "triangleright;", 0x025B9 },
- { "trianglerighteq;", 0x022B5 },
- { "tridot;", 0x025EC },
- { "trie;", 0x0225C },
- { "triminus;", 0x02A3A },
- { "TripleDot;", 0x020DB },
- { "triplus;", 0x02A39 },
- { "trisb;", 0x029CD },
- { "tritime;", 0x02A3B },
- { "trpezium;", 0x023E2 },
- { "Tscr;", 0x1D4AF },
- { "tscr;", 0x1D4C9 },
- { "TScy;", 0x00426 },
- { "tscy;", 0x00446 },
- { "TSHcy;", 0x0040B },
- { "tshcy;", 0x0045B },
- { "Tstrok;", 0x00166 },
- { "tstrok;", 0x00167 },
- { "twixt;", 0x0226C },
- { "twoheadleftarrow;", 0x0219E },
- { "twoheadrightarrow;", 0x021A0 },
- { "Uacute;", 0x000DA },
- { "Uacute", 0x000DA },
- { "uacute;", 0x000FA },
- { "uacute", 0x000FA },
- { "uarr;", 0x02191 },
- { "Uarr;", 0x0219F },
- { "uArr;", 0x021D1 },
- { "Uarrocir;", 0x02949 },
- { "Ubrcy;", 0x0040E },
- { "ubrcy;", 0x0045E },
- { "Ubreve;", 0x0016C },
- { "ubreve;", 0x0016D },
- { "Ucirc;", 0x000DB },
- { "Ucirc", 0x000DB },
- { "ucirc;", 0x000FB },
- { "ucirc", 0x000FB },
- { "Ucy;", 0x00423 },
- { "ucy;", 0x00443 },
- { "udarr;", 0x021C5 },
- { "Udblac;", 0x00170 },
- { "udblac;", 0x00171 },
- { "udhar;", 0x0296E },
- { "ufisht;", 0x0297E },
- { "Ufr;", 0x1D518 },
- { "ufr;", 0x1D532 },
- { "Ugrave;", 0x000D9 },
- { "Ugrave", 0x000D9 },
- { "ugrave;", 0x000F9 },
- { "ugrave", 0x000F9 },
- { "uHar;", 0x02963 },
- { "uharl;", 0x021BF },
- { "uharr;", 0x021BE },
- { "uhblk;", 0x02580 },
- { "ulcorn;", 0x0231C },
- { "ulcorner;", 0x0231C },
- { "ulcrop;", 0x0230F },
- { "ultri;", 0x025F8 },
- { "Umacr;", 0x0016A },
- { "umacr;", 0x0016B },
- { "uml;", 0x000A8 },
- { "uml", 0x000A8 },
- { "UnderBar;", 0x00332 },
- { "UnderBrace;", 0x023DF },
- { "UnderBracket;", 0x023B5 },
- { "UnderParenthesis;", 0x023DD },
- { "Union;", 0x022C3 },
- { "UnionPlus;", 0x0228E },
- { "Uogon;", 0x00172 },
- { "uogon;", 0x00173 },
- { "Uopf;", 0x1D54C },
- { "uopf;", 0x1D566 },
- { "uparrow;", 0x02191 },
- { "UpArrow;", 0x02191 },
- { "Uparrow;", 0x021D1 },
- { "UpArrowBar;", 0x02912 },
- { "UpArrowDownArrow;", 0x021C5 },
- { "updownarrow;", 0x02195 },
- { "UpDownArrow;", 0x02195 },
- { "Updownarrow;", 0x021D5 },
- { "UpEquilibrium;", 0x0296E },
- { "upharpoonleft;", 0x021BF },
- { "upharpoonright;", 0x021BE },
- { "uplus;", 0x0228E },
- { "UpperLeftArrow;", 0x02196 },
- { "UpperRightArrow;", 0x02197 },
- { "upsi;", 0x003C5 },
- { "Upsi;", 0x003D2 },
- { "upsih;", 0x003D2 },
- { "Upsilon;", 0x003A5 },
- { "upsilon;", 0x003C5 },
- { "UpTee;", 0x022A5 },
- { "UpTeeArrow;", 0x021A5 },
- { "upuparrows;", 0x021C8 },
- { "urcorn;", 0x0231D },
- { "urcorner;", 0x0231D },
- { "urcrop;", 0x0230E },
- { "Uring;", 0x0016E },
- { "uring;", 0x0016F },
- { "urtri;", 0x025F9 },
- { "Uscr;", 0x1D4B0 },
- { "uscr;", 0x1D4CA },
- { "utdot;", 0x022F0 },
- { "Utilde;", 0x00168 },
- { "utilde;", 0x00169 },
- { "utri;", 0x025B5 },
- { "utrif;", 0x025B4 },
- { "uuarr;", 0x021C8 },
- { "Uuml;", 0x000DC },
- { "Uuml", 0x000DC },
- { "uuml;", 0x000FC },
- { "uuml", 0x000FC },
- { "uwangle;", 0x029A7 },
- { "vangrt;", 0x0299C },
- { "varepsilon;", 0x003B5 },
- { "varkappa;", 0x003F0 },
- { "varnothing;", 0x02205 },
- { "varphi;", 0x003C6 },
- { "varpi;", 0x003D6 },
- { "varpropto;", 0x0221D },
- { "varr;", 0x02195 },
- { "vArr;", 0x021D5 },
- { "varrho;", 0x003F1 },
- { "varsigma;", 0x003C2 },
- { "vartheta;", 0x003D1 },
- { "vartriangleleft;", 0x022B2 },
- { "vartriangleright;", 0x022B3 },
- { "vBar;", 0x02AE8 },
- { "Vbar;", 0x02AEB },
- { "vBarv;", 0x02AE9 },
- { "Vcy;", 0x00412 },
- { "vcy;", 0x00432 },
- { "vdash;", 0x022A2 },
- { "vDash;", 0x022A8 },
- { "Vdash;", 0x022A9 },
- { "VDash;", 0x022AB },
- { "Vdashl;", 0x02AE6 },
- { "vee;", 0x02228 },
- { "Vee;", 0x022C1 },
- { "veebar;", 0x022BB },
- { "veeeq;", 0x0225A },
- { "vellip;", 0x022EE },
- { "verbar;", 0x0007C },
- { "Verbar;", 0x02016 },
- { "vert;", 0x0007C },
- { "Vert;", 0x02016 },
- { "VerticalBar;", 0x02223 },
- { "VerticalLine;", 0x0007C },
- { "VerticalSeparator;", 0x02758 },
- { "VerticalTilde;", 0x02240 },
- { "VeryThinSpace;", 0x0200A },
- { "Vfr;", 0x1D519 },
- { "vfr;", 0x1D533 },
- { "vltri;", 0x022B2 },
- { "Vopf;", 0x1D54D },
- { "vopf;", 0x1D567 },
- { "vprop;", 0x0221D },
- { "vrtri;", 0x022B3 },
- { "Vscr;", 0x1D4B1 },
- { "vscr;", 0x1D4CB },
- { "Vvdash;", 0x022AA },
- { "vzigzag;", 0x0299A },
- { "Wcirc;", 0x00174 },
- { "wcirc;", 0x00175 },
- { "wedbar;", 0x02A5F },
- { "wedge;", 0x02227 },
- { "Wedge;", 0x022C0 },
- { "wedgeq;", 0x02259 },
- { "weierp;", 0x02118 },
- { "Wfr;", 0x1D51A },
- { "wfr;", 0x1D534 },
- { "Wopf;", 0x1D54E },
- { "wopf;", 0x1D568 },
- { "wp;", 0x02118 },
- { "wr;", 0x02240 },
- { "wreath;", 0x02240 },
- { "Wscr;", 0x1D4B2 },
- { "wscr;", 0x1D4CC },
- { "xcap;", 0x022C2 },
- { "xcirc;", 0x025EF },
- { "xcup;", 0x022C3 },
- { "xdtri;", 0x025BD },
- { "Xfr;", 0x1D51B },
- { "xfr;", 0x1D535 },
- { "xharr;", 0x027F7 },
- { "xhArr;", 0x027FA },
- { "Xi;", 0x0039E },
- { "xi;", 0x003BE },
- { "xlarr;", 0x027F5 },
- { "xlArr;", 0x027F8 },
- { "xmap;", 0x027FC },
- { "xnis;", 0x022FB },
- { "xodot;", 0x02A00 },
- { "Xopf;", 0x1D54F },
- { "xopf;", 0x1D569 },
- { "xoplus;", 0x02A01 },
- { "xotime;", 0x02A02 },
- { "xrarr;", 0x027F6 },
- { "xrArr;", 0x027F9 },
- { "Xscr;", 0x1D4B3 },
- { "xscr;", 0x1D4CD },
- { "xsqcup;", 0x02A06 },
- { "xuplus;", 0x02A04 },
- { "xutri;", 0x025B3 },
- { "xvee;", 0x022C1 },
- { "xwedge;", 0x022C0 },
- { "Yacute;", 0x000DD },
- { "Yacute", 0x000DD },
- { "yacute;", 0x000FD },
- { "yacute", 0x000FD },
- { "YAcy;", 0x0042F },
- { "yacy;", 0x0044F },
- { "Ycirc;", 0x00176 },
- { "ycirc;", 0x00177 },
- { "Ycy;", 0x0042B },
- { "ycy;", 0x0044B },
- { "yen;", 0x000A5 },
- { "yen", 0x000A5 },
- { "Yfr;", 0x1D51C },
- { "yfr;", 0x1D536 },
- { "YIcy;", 0x00407 },
- { "yicy;", 0x00457 },
- { "Yopf;", 0x1D550 },
- { "yopf;", 0x1D56A },
- { "Yscr;", 0x1D4B4 },
- { "yscr;", 0x1D4CE },
- { "YUcy;", 0x0042E },
- { "yucy;", 0x0044E },
- { "yuml;", 0x000FF },
- { "yuml", 0x000FF },
- { "Yuml;", 0x00178 },
- { "Zacute;", 0x00179 },
- { "zacute;", 0x0017A },
- { "Zcaron;", 0x0017D },
- { "zcaron;", 0x0017E },
- { "Zcy;", 0x00417 },
- { "zcy;", 0x00437 },
- { "Zdot;", 0x0017B },
- { "zdot;", 0x0017C },
- { "zeetrf;", 0x02128 },
- { "ZeroWidthSpace;", 0x0200B },
- { "Zeta;", 0x00396 },
- { "zeta;", 0x003B6 },
- { "Zfr;", 0x02128 },
- { "zfr;", 0x1D537 },
- { "ZHcy;", 0x00416 },
- { "zhcy;", 0x00436 },
- { "zigrarr;", 0x021DD },
- { "Zopf;", 0x02124 },
- { "zopf;", 0x1D56B },
- { "Zscr;", 0x1D4B5 },
- { "zscr;", 0x1D4CF },
- { "zwj;", 0x0200D },
- { "zwnj;", 0x0200C },
-};
-
-static hubbub_dict *dict;
+#include "entities.inc"
/**
- * Create the entities dictionary
+ * Step-wise search for a key in our entity tree
+ *
+ * \param c Character to look for
+ * \param result Pointer to location for result
+ * \param context Pointer to location for search context
+ * \return HUBBUB_OK if key found,
+ * HUBBUB_NEEDDATA if more steps are required
+ * HUBBUB_INVALID if nothing matches
*
- * \param alloc Memory (de)allocation function
- * \param pw Pointer to client-specific private data (may be NULL)
- * \return HUBBUB_OK on success, appropriate error otherwise
+ * The value pointed to by ::context must be NULL for the first call.
+ * Thereafter, pass in the same value as returned by the previous call.
+ * The context is opaque to the caller and should not be inspected.
+ *
+ * The location pointed to by ::result will be set to NULL unless a match
+ * is found.
*/
-hubbub_error hubbub_entities_create(hubbub_allocator_fn alloc, void *pw)
+static hubbub_error hubbub_entity_tree_search_step(uint8_t c,
+ uint32_t *result, int32_t *context)
{
- hubbub_error error;
- size_t i;
+ bool match = false;
+ int32_t p;
- if (alloc == NULL)
+ if (result == NULL || context == NULL)
return HUBBUB_BADPARM;
- error = hubbub_dict_create(alloc, pw, &dict);
- if (error != HUBBUB_OK)
- return error;
+ if (*context == -1) {
+ p = dict_root;
+ } else {
+ p = *context;
+ }
- for (i = 0; i < sizeof(entities) / sizeof(entities[0]); i++) {
- error = hubbub_dict_insert(dict, entities[i].name,
- &entities[i]);
- if (error != HUBBUB_OK) {
- hubbub_dict_destroy(dict);
- return error;
+ while (p != -1) {
+ if (c < dict[p].split) {
+ p = dict[p].lt;
+ } else if (c == dict[p].split) {
+ if (dict[p].split == '\0') {
+ match = true;
+ p = -1;
+ } else if (dict[p].eq != -1 && dict[dict[p].eq].split == '\0') {
+ match = true;
+ *result = dict[dict[p].eq].value;
+ p = dict[p].eq;
+ } else if (dict[p].value != 0) {
+ match = true;
+ *result = dict[p].value;
+ p = dict[p].eq;
+ } else {
+ p = dict[p].eq;
+ }
+
+ break;
+ } else {
+ p = dict[p].gt;
}
}
- return HUBBUB_OK;
-}
+ *context = p;
-/**
- * Destroy the entities dictionary
- *
- * \param alloc Memory (de)allocation function
- * \param pw Pointer to client-specific private data (may be NULL)
- */
-void hubbub_entities_destroy(hubbub_allocator_fn alloc, void *pw)
-{
- UNUSED(alloc);
- UNUSED(pw);
-
- hubbub_dict_destroy(dict);
+ return (match) ? HUBBUB_OK :
+ (p == -1) ? HUBBUB_INVALID : HUBBUB_NEEDDATA;
}
/**
@@ -2214,7 +93,7 @@ void hubbub_entities_destroy(hubbub_allocator_fn alloc, void *pw)
* HUBBUB_NEEDDATA if more steps are required
* HUBBUB_INVALID if nothing matches
*
- * The value pointed to by ::context should be NULL for the first call.
+ * The value pointed to by ::context should be -1 for the first call.
* Thereafter, pass in the same value as returned by the previous call.
* The context is opaque to the caller and should not be inspected.
*
@@ -2222,23 +101,12 @@ void hubbub_entities_destroy(hubbub_allocator_fn alloc, void *pw)
* is found.
*/
hubbub_error hubbub_entities_search_step(uint8_t c, uint32_t *result,
- void **context)
+ int32_t *context)
{
- const hubbub_entity *e;
- hubbub_error error;
-
- if (result == NULL || context == NULL)
+ if (result == NULL)
return HUBBUB_BADPARM;
- error = hubbub_dict_search_step(dict, c,
- (const void **) (const void *) &e,
- context);
- if (error != HUBBUB_OK) {
- *result = 0xFFFD;
- return error;
- }
-
- *result = e->ucs4;
-
- return HUBBUB_OK;
+ *result = 0xFFFD;
+
+ return hubbub_entity_tree_search_step(c, result, context);
}
diff --git a/src/tokeniser/entities.h b/src/tokeniser/entities.h
index 1cc091a..0703b37 100644
--- a/src/tokeniser/entities.h
+++ b/src/tokeniser/entities.h
@@ -13,13 +13,8 @@
#include <hubbub/errors.h>
#include <hubbub/functypes.h>
-/* Create the entities dictionary */
-hubbub_error hubbub_entities_create(hubbub_allocator_fn alloc, void *pw);
-/* Destroy the entities dictionary */
-void hubbub_entities_destroy(hubbub_allocator_fn alloc, void *pw);
-
/* Step-wise search for an entity in the dictionary */
hubbub_error hubbub_entities_search_step(uint8_t c, uint32_t *result,
- void **context);
+ int32_t *context);
#endif
diff --git a/src/tokeniser/tokeniser.c b/src/tokeniser/tokeniser.c
index e75621d..7eb6bc1 100644
--- a/src/tokeniser/tokeniser.c
+++ b/src/tokeniser/tokeniser.c
@@ -135,7 +135,7 @@ typedef struct hubbub_tokeniser_context {
* character references */
uint8_t base; /**< Base for numeric
* entities */
- void *context; /**< Context for named
+ int32_t context; /**< Context for named
* entity search */
size_t prev_len; /**< Previous byte length
* of str */
@@ -2870,7 +2870,7 @@ hubbub_error hubbub_tokeniser_consume_character_reference(
tokeniser->context.match_entity.return_state = tokeniser->state;
tokeniser->context.match_entity.complete = false;
tokeniser->context.match_entity.overflow = false;
- tokeniser->context.match_entity.context = NULL;
+ tokeniser->context.match_entity.context = -1;
tokeniser->context.match_entity.prev_len = len;
/* Reset allowed character for future calls */
diff --git a/src/utils/Makefile b/src/utils/Makefile
index 3918256..237c2bd 100644
--- a/src/utils/Makefile
+++ b/src/utils/Makefile
@@ -1,4 +1,4 @@
# Sources
-DIR_SOURCES := dict.c errors.c string.c
+DIR_SOURCES := errors.c string.c
include build/makefiles/Makefile.subdir
diff --git a/src/utils/dict.c b/src/utils/dict.c
deleted file mode 100644
index 8dd6adf..0000000
--- a/src/utils/dict.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * This file is part of Hubbub.
- * Licensed under the MIT License,
- * http://www.opensource.org/licenses/mit-license.php
- * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
- */
-
-#include <stdbool.h>
-
-#include "utils/dict.h"
-
-/** Node in a dictionary tree */
-typedef struct hubbub_dict_node {
- uint8_t split; /**< Data to split on */
- struct hubbub_dict_node *lt; /**< Subtree for data less than
- * split */
- struct hubbub_dict_node *eq; /**< Subtree for data equal to split */
- struct hubbub_dict_node *gt; /**< Subtree for data greater than
- * split */
-
- const void *value; /**< Data for this node */
-} hubbub_dict_node;
-
-/** Dictionary object */
-struct hubbub_dict {
- hubbub_dict_node *dict; /**< Root of tree */
-
- hubbub_allocator_fn alloc; /**< Memory (de)allocation function */
- void *pw; /**< Pointer to client data */
-};
-
-static void hubbub_dict_destroy_internal(hubbub_dict *dict,
- hubbub_dict_node *root);
-static hubbub_dict_node *hubbub_dict_insert_internal(hubbub_dict *dict,
- hubbub_dict_node *parent, const char *key,
- const void *value);
-
-
-/**
- * Create a dictionary
- *
- * \param alloc Memory (de)allocation function
- * \param pw Pointer to client-specific private data (may be NULL)
- * \param dict Pointer to location to receive dictionary instance
- * \return HUBBUB_OK on success,
- * HUBBUB_BADPARM on bad parameters,
- * HUBBUB_NOMEM on memory exhaustion
- */
-hubbub_error hubbub_dict_create(hubbub_allocator_fn alloc, void *pw,
- hubbub_dict **dict)
-{
- hubbub_dict *d;
-
- if (alloc == NULL || dict == NULL)
- return HUBBUB_BADPARM;
-
- d = alloc(NULL, sizeof(hubbub_dict), pw);
- if (d == NULL)
- return HUBBUB_NOMEM;
-
- d->dict = NULL;
-
- d->alloc = alloc;
- d->pw = pw;
-
- *dict = d;
-
- return HUBBUB_OK;
-}
-
-/**
- * Destroy a dictionary
- *
- * \param dict Dictionary to destroy
- * \return HUBBUB_OK on success, appropriate error otherwise
- */
-hubbub_error hubbub_dict_destroy(hubbub_dict *dict)
-{
- if (dict == NULL)
- return HUBBUB_BADPARM;
-
- hubbub_dict_destroy_internal(dict, dict->dict);
-
- dict->alloc(dict, 0, dict->pw);
-
- return HUBBUB_OK;
-}
-
-/**
- * Helper routine for dictionary destruction
- *
- * \param dict Dictionary being destroyed
- * \param root Root node of dictionary (sub)tree to destroy
- */
-void hubbub_dict_destroy_internal(hubbub_dict *dict, hubbub_dict_node *root)
-{
- if (root == NULL)
- return;
-
- hubbub_dict_destroy_internal(dict, root->lt);
- if (root->split != '\0')
- hubbub_dict_destroy_internal(dict, root->eq);
- hubbub_dict_destroy_internal(dict, root->gt);
-
- dict->alloc(root, 0, dict->pw);
-}
-
-/**
- * Insert a key-value pair into a dictionary
- *
- * \param dict Dictionary to insert into
- * \param key Key string
- * \param value Value to associate with key (may be NULL)
- * \return HUBBUB_OK on success, appropriate error otherwise
- */
-hubbub_error hubbub_dict_insert(hubbub_dict *dict, const char *key,
- const void *value)
-{
- if (dict == NULL || key == NULL)
- return HUBBUB_BADPARM;
-
- dict->dict = hubbub_dict_insert_internal(dict, dict->dict,
- key, value);
-
- return HUBBUB_OK;
-}
-
-/**
- * Helper routine for insertion into dictionary
- *
- * \param dict Dictionary being inserted into
- * \param parent Parent node of subtree to insert into
- * \param key Key string
- * \param value Value to associate with key
- * \return Pointer to root of tree created
- */
-hubbub_dict_node *hubbub_dict_insert_internal(hubbub_dict *dict,
- hubbub_dict_node *parent, const char *key, const void *value)
-{
- if (parent == NULL) {
- parent = dict->alloc(NULL,
- sizeof(hubbub_dict_node), dict->pw);
- if (parent == NULL)
- return NULL;
- parent->split = (uint8_t) key[0];
- parent->lt = parent->eq = parent->gt = NULL;
- parent->value = NULL;
- }
-
- if ((uint8_t) key[0] < parent->split) {
- parent->lt = hubbub_dict_insert_internal(dict,
- parent->lt, key, value);
- } else if ((uint8_t) key[0] == parent->split) {
- if (key[0] == '\0') {
- parent->value = value;
- } else if (key[1] == '\0') {
- parent->value = value;
- parent->eq = hubbub_dict_insert_internal(dict,
- parent->eq, key + 1, value);
- } else {
- parent->eq = hubbub_dict_insert_internal(dict,
- parent->eq, key + 1, value);
- }
- } else {
- parent->gt = hubbub_dict_insert_internal(dict,
- parent->gt, key, value);
- }
-
- return parent;
-}
-
-/**
- * Step-wise search for a key in a dictionary
- *
- * \param dict Dictionary to search
- * \param c Character to look for
- * \param result Pointer to location for result
- * \param context Pointer to location for search context
- * \return HUBBUB_OK if key found,
- * HUBBUB_NEEDDATA if more steps are required
- * HUBBUB_INVALID if nothing matches
- *
- * The value pointed to by ::context must be NULL for the first call.
- * Thereafter, pass in the same value as returned by the previous call.
- * The context is opaque to the caller and should not be inspected.
- *
- * The location pointed to by ::result will be set to NULL unless a match
- * is found.
- */
-hubbub_error hubbub_dict_search_step(hubbub_dict *dict, uint8_t c,
- const void **result, void **context)
-{
- bool match = false;
- hubbub_dict_node *p;
-
- if (dict == NULL || result == NULL || context == NULL)
- return HUBBUB_BADPARM;
-
- *result = NULL;
-
- if (*context == NULL) {
- p = dict->dict;
- } else {
- p = (hubbub_dict_node *) *context;
- }
-
- while (p != NULL) {
- if (c < p->split) {
- p = p->lt;
- } else if (c == p->split) {
- if (p->split == '\0') {
- match = true;
- p = NULL;
- } else if (p->eq != NULL && p->eq->split == '\0') {
- match = true;
- *result = p->eq->value;
- p = p->eq;
- } else if (p->value) {
- match = true;
- *result = p->value;
- p = p->eq;
- } else {
- p = p->eq;
- }
-
- break;
- } else {
- p = p->gt;
- }
- }
-
- *context = (void *) p;
-
- return (match) ? HUBBUB_OK :
- (p == NULL) ? HUBBUB_INVALID : HUBBUB_NEEDDATA;
-}
diff --git a/src/utils/dict.h b/src/utils/dict.h
deleted file mode 100644
index 9718542..0000000
--- a/src/utils/dict.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * This file is part of Hubbub.
- * Licensed under the MIT License,
- * http://www.opensource.org/licenses/mit-license.php
- * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
- */
-
-#ifndef hubbub_utils_dict_h_
-#define hubbub_utils_dict_h_
-
-#include <inttypes.h>
-
-#include <hubbub/errors.h>
-#include <hubbub/hubbub.h>
-
-typedef struct hubbub_dict hubbub_dict;
-
-/* Create a dictionary */
-hubbub_error hubbub_dict_create(hubbub_allocator_fn alloc, void *pw,
- hubbub_dict **dict);
-/* Destroy a dictionary */
-hubbub_error hubbub_dict_destroy(hubbub_dict *dict);
-
-/* Insert a key-value pair into a dictionary */
-hubbub_error hubbub_dict_insert(hubbub_dict *dict, const char *key,
- const void *value);
-
-/* Step-wise search for a key in a dictionary */
-hubbub_error hubbub_dict_search_step(hubbub_dict *dict, uint8_t c,
- const void **result, void **context);
-
-#endif
diff --git a/test/INDEX b/test/INDEX
index 94ba83b..a89931b 100644
--- a/test/INDEX
+++ b/test/INDEX
@@ -2,8 +2,6 @@
#
# Test Description DataDir
-hubbub Library initialisation/finalisation
-dict Generic string dictionary
entities Named entity dictionary
csdetect Charset detection csdetect
parser Public parser API html
diff --git a/test/Makefile b/test/Makefile
index db3f9fe..916b89f 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -1,6 +1,6 @@
# Tests
-DIR_TEST_ITEMS := csdetect:csdetect.c dict:dict.c entities:entities.c \
- hubbub:hubbub.c parser:parser.c tokeniser:tokeniser.c \
+DIR_TEST_ITEMS := csdetect:csdetect.c entities:entities.c \
+ parser:parser.c tokeniser:tokeniser.c \
tokeniser2:tokeniser2.c tokeniser3:tokeniser3.c tree:tree.c \
tree2:tree2.c tree-buf:tree-buf.c
diff --git a/test/csdetect.c b/test/csdetect.c
index d02efcb..de94852 100644
--- a/test/csdetect.c
+++ b/test/csdetect.c
@@ -25,13 +25,6 @@ typedef struct line_ctx {
static bool handle_line(const char *data, size_t datalen, void *pw);
static void run_test(const uint8_t *data, size_t len, char *expected);
-static void *myrealloc(void *ptr, size_t len, void *pw)
-{
- UNUSED(pw);
-
- return realloc(ptr, len);
-}
-
int main(int argc, char **argv)
{
line_ctx ctx;
@@ -41,8 +34,6 @@ int main(int argc, char **argv)
return 1;
}
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
ctx.buflen = parse_filesize(argv[2]);
if (ctx.buflen == 0)
return 1;
@@ -70,8 +61,6 @@ int main(int argc, char **argv)
free(ctx.buf);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
printf("PASS\n");
return 0;
diff --git a/test/dict.c b/test/dict.c
deleted file mode 100644
index 9ba05fd..0000000
--- a/test/dict.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "utils/dict.h"
-
-#include "testutils.h"
-
-static void *myrealloc(void *ptr, size_t len, void *pw)
-{
- UNUSED(pw);
-
- return realloc(ptr, len);
-}
-
-int main(int argc, char **argv)
-{
- hubbub_dict *dict;
- const void *result;
- void *context = NULL;
-
- UNUSED(argc);
- UNUSED(argv);
-
- assert(hubbub_dict_create(myrealloc, NULL, &dict) == HUBBUB_OK);
-
- assert(hubbub_dict_insert(dict, "Hello", (const void *) 123) ==
- HUBBUB_OK);
- assert(hubbub_dict_insert(dict, "Hello1", (const void *) 456) ==
- HUBBUB_OK);
-
- assert(hubbub_dict_search_step(dict, 'H', &result, &context) ==
- HUBBUB_NEEDDATA);
- assert(hubbub_dict_search_step(dict, 'e', &result, &context) ==
- HUBBUB_NEEDDATA);
- assert(hubbub_dict_search_step(dict, 'l', &result, &context) ==
- HUBBUB_NEEDDATA);
- assert(hubbub_dict_search_step(dict, 'l', &result, &context) ==
- HUBBUB_NEEDDATA);
- assert(hubbub_dict_search_step(dict, 'o', &result, &context) ==
- HUBBUB_OK);
- assert(result == (const void *) 123);
- assert(hubbub_dict_search_step(dict, '1', &result, &context) ==
- HUBBUB_OK);
- assert(result == (const void *) 456);
- assert(hubbub_dict_search_step(dict, '\0', &result, &context) ==
- HUBBUB_OK);
- assert(hubbub_dict_search_step(dict, 'x', &result, &context) ==
- HUBBUB_INVALID);
-
- hubbub_dict_destroy(dict);
-
- printf("PASS\n");
-
- return 0;
-}
diff --git a/test/entities.c b/test/entities.c
index f340a58..f730f17 100644
--- a/test/entities.c
+++ b/test/entities.c
@@ -2,23 +2,14 @@
#include "testutils.h"
-static void *myrealloc(void *ptr, size_t len, void *pw)
-{
- UNUSED(pw);
-
- return realloc(ptr, len);
-}
-
int main(int argc, char **argv)
{
uint32_t result;
- void *context = NULL;
+ int32_t context = -1;
UNUSED(argc);
UNUSED(argv);
- assert(hubbub_entities_create(myrealloc, NULL) == HUBBUB_OK);
-
assert(hubbub_entities_search_step('A', &result, &context) ==
HUBBUB_NEEDDATA);
@@ -40,8 +31,6 @@ int main(int argc, char **argv)
assert(hubbub_entities_search_step('z', &result, &context) ==
HUBBUB_INVALID);
- hubbub_entities_destroy(myrealloc, NULL);
-
printf("PASS\n");
return 0;
diff --git a/test/hubbub.c b/test/hubbub.c
deleted file mode 100644
index ed61bb3..0000000
--- a/test/hubbub.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <hubbub/hubbub.h>
-
-#include "testutils.h"
-
-static void *myrealloc(void *ptr, size_t len, void *pw)
-{
- UNUSED(pw);
-
- return realloc(ptr, len);
-}
-
-int main(int argc, char **argv)
-{
- if (argc != 2) {
- printf("Usage: %s <filename>\n", argv[0]);
- return 1;
- }
-
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
- assert (hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
- printf("PASS\n");
-
- return 0;
-}
diff --git a/test/parser.c b/test/parser.c
index 1f7010a..291587e 100644
--- a/test/parser.c
+++ b/test/parser.c
@@ -31,9 +31,6 @@ static int run_test(int argc, char **argv, unsigned int CHUNK_SIZE)
UNUSED(argc);
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
assert(hubbub_parser_create("UTF-8", false, myrealloc, NULL, &parser) ==
HUBBUB_OK);
@@ -74,8 +71,6 @@ static int run_test(int argc, char **argv, unsigned int CHUNK_SIZE)
hubbub_parser_destroy(parser);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
printf("PASS\n");
return 0;
diff --git a/test/tokeniser.c b/test/tokeniser.c
index 29a2a7e..17c60f4 100644
--- a/test/tokeniser.c
+++ b/test/tokeniser.c
@@ -35,9 +35,6 @@ int main(int argc, char **argv)
return 1;
}
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
assert(parserutils_inputstream_create("UTF-8", 0, NULL,
myrealloc, NULL, &stream) == PARSERUTILS_OK);
@@ -81,8 +78,6 @@ int main(int argc, char **argv)
parserutils_inputstream_destroy(stream);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
printf("PASS\n");
return 0;
diff --git a/test/tokeniser2.c b/test/tokeniser2.c
index 82cbea0..a584f49 100644
--- a/test/tokeniser2.c
+++ b/test/tokeniser2.c
@@ -54,9 +54,6 @@ int main(int argc, char **argv)
return 1;
}
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
json = json_object_from_file(argv[2]);
assert(!is_error(json));
@@ -113,8 +110,6 @@ int main(int argc, char **argv)
json_object_put(json);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
printf("PASS\n");
return 0;
diff --git a/test/tokeniser3.c b/test/tokeniser3.c
index 70e1e53..8e8795e 100644
--- a/test/tokeniser3.c
+++ b/test/tokeniser3.c
@@ -52,9 +52,6 @@ int main(int argc, char **argv)
return 1;
}
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
json = json_object_from_file(argv[2]);
assert(!is_error(json));
@@ -109,8 +106,6 @@ int main(int argc, char **argv)
run_test(&ctx);
}
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
printf("PASS\n");
return 0;
diff --git a/test/tree-buf.c b/test/tree-buf.c
index 404c8f7..bfbf0a0 100644
--- a/test/tree-buf.c
+++ b/test/tree-buf.c
@@ -208,9 +208,6 @@ int main(int argc, char **argv)
return 1;
}
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
fp = fopen(argv[2], "rb");
if (fp == NULL) {
printf("Failed opening %s\n", argv[2]);
@@ -271,8 +268,6 @@ int main(int argc, char **argv)
free(got.buf);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
return 0;
}
diff --git a/test/tree.c b/test/tree.c
index 9f48922..3cfb849 100644
--- a/test/tree.c
+++ b/test/tree.c
@@ -174,16 +174,11 @@ int main(int argc, char **argv)
return 1;
}
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
#define DO_TEST(n) if ((ret = run_test(argc, argv, (n))) != 0) return ret
for (shift = 0; (1 << shift) != 16384; shift++)
for (offset = 0; offset < 10; offset += 3)
DO_TEST((1 << shift) + offset);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
return 0;
#undef DO_TEST
}
diff --git a/test/tree2.c b/test/tree2.c
index ee24655..9c5a4a3 100644
--- a/test/tree2.c
+++ b/test/tree2.c
@@ -229,9 +229,6 @@ int main(int argc, char **argv)
return 1;
}
- /* Initialise library */
- assert(hubbub_initialise(argv[1], myrealloc, NULL) == HUBBUB_OK);
-
fp = fopen(argv[2], "rb");
if (fp == NULL) {
printf("Failed opening %s\n", argv[2]);
@@ -350,8 +347,6 @@ int main(int argc, char **argv)
free(got.buf);
free(expected.buf);
- assert(hubbub_finalise(myrealloc, NULL) == HUBBUB_OK);
-
return 0;
}