char_ref.c 79 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561
  1. // Copyright 2011 Google Inc. All Rights Reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. //
  15. // Author: [email protected] (Jonathan Tang)
  16. #include "char_ref.h"
  17. #include <assert.h>
  18. #include <ctype.h>
  19. #include <stddef.h>
  20. #include <string.h> // Only for debug assertions at present.
  21. #include "error.h"
  22. #include "string_piece.h"
  23. #include "utf8.h"
  24. #include "util.h"
  25. struct GumboInternalParser;
  26. const int kGumboNoChar = -1;
  27. // Table of named character entities, and functions for looking them up.
  28. // http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html
  29. //
  30. // TODO(jdtang): I'd thought of using more efficient means of this, eg. binary
  31. // searching the table (which can only be done if we know for sure that there's
  32. // enough room in the buffer for our memcmps, otherwise we need to fall back on
  33. // linear search) or compiling the list of named entities to a Ragel state
  34. // machine. But I'll start with the simple approach and optimize only if
  35. // profiling calls for it. The one concession to efficiency is to store the
  36. // length of the entity with it, so that we don't need to run a strlen to detect
  37. // potential buffer overflows.
  38. typedef struct {
  39. const char* name;
  40. size_t length;
  41. OneOrTwoCodepoints codepoints;
  42. } NamedCharRef;
  43. #define CHAR_REF(name, codepoint) { name, sizeof(name) - 1, { codepoint, -1 } }
  44. #define MULTI_CHAR_REF(name, code_point, code_point2) \
  45. { name, sizeof(name) - 1, { code_point, code_point2 } }
  46. // Versions with the semicolon must come before versions without the semicolon,
  47. // otherwise they'll match the invalid name first and record a parse error.
  48. // TODO(jdtang): Replace with a FSM that'll do longest-match-first and probably
  49. // give better performance besides.
  50. static const NamedCharRef kNamedEntities[] = {
  51. CHAR_REF("AElig", 0xc6),
  52. CHAR_REF("AMP;", 0x26),
  53. CHAR_REF("AMP", 0x26),
  54. CHAR_REF("Aacute;", 0xc1),
  55. CHAR_REF("Aacute", 0xc1),
  56. CHAR_REF("Abreve;", 0x0102),
  57. CHAR_REF("Acirc;", 0xc2),
  58. CHAR_REF("Acirc", 0xc2),
  59. CHAR_REF("Acy;", 0x0410),
  60. CHAR_REF("Afr;", 0x0001d504),
  61. CHAR_REF("Agrave", 0xc0),
  62. CHAR_REF("Agrave;", 0xc0),
  63. CHAR_REF("Alpha;", 0x0391),
  64. CHAR_REF("Amacr;", 0x0100),
  65. CHAR_REF("And;", 0x2a53),
  66. CHAR_REF("Aogon;", 0x0104),
  67. CHAR_REF("Aopf;", 0x0001d538),
  68. CHAR_REF("ApplyFunction;", 0x2061),
  69. CHAR_REF("Aring;", 0xc5),
  70. CHAR_REF("Aring", 0xc5),
  71. CHAR_REF("Ascr;", 0x0001d49c),
  72. CHAR_REF("Assign;", 0x2254),
  73. CHAR_REF("Atilde;", 0xc3),
  74. CHAR_REF("Atilde", 0xc3),
  75. CHAR_REF("Auml;", 0xc4),
  76. CHAR_REF("Auml", 0xc4),
  77. CHAR_REF("Backslash;", 0x2216),
  78. CHAR_REF("Barv;", 0x2ae7),
  79. CHAR_REF("Barwed;", 0x2306),
  80. CHAR_REF("Bcy;", 0x0411),
  81. CHAR_REF("Because;", 0x2235),
  82. CHAR_REF("Bernoullis;", 0x212c),
  83. CHAR_REF("Beta;", 0x0392),
  84. CHAR_REF("Bfr;", 0x0001d505),
  85. CHAR_REF("Bopf;", 0x0001d539),
  86. CHAR_REF("Breve;", 0x02d8),
  87. CHAR_REF("Bscr;", 0x212c),
  88. CHAR_REF("Bumpeq;", 0x224e),
  89. CHAR_REF("CHcy;", 0x0427),
  90. CHAR_REF("COPY;", 0xa9),
  91. CHAR_REF("COPY", 0xa9),
  92. CHAR_REF("Cacute;", 0x0106),
  93. CHAR_REF("Cap;", 0x22d2),
  94. CHAR_REF("CapitalDifferentialD;", 0x2145),
  95. CHAR_REF("Cayleys;", 0x212d),
  96. CHAR_REF("Ccaron;", 0x010c),
  97. CHAR_REF("Ccedil;", 0xc7),
  98. CHAR_REF("Ccedil", 0xc7),
  99. CHAR_REF("Ccirc;", 0x0108),
  100. CHAR_REF("Cconint;", 0x2230),
  101. CHAR_REF("Cdot;", 0x010a),
  102. CHAR_REF("Cedilla;", 0xb8),
  103. CHAR_REF("CenterDot;", 0xb7),
  104. CHAR_REF("Cfr;", 0x212d),
  105. CHAR_REF("Chi;", 0x03a7),
  106. CHAR_REF("CircleDot;", 0x2299),
  107. CHAR_REF("CircleMinus;", 0x2296),
  108. CHAR_REF("CirclePlus;", 0x2295),
  109. CHAR_REF("CircleTimes;", 0x2297),
  110. CHAR_REF("ClockwiseContourIntegral;", 0x2232),
  111. CHAR_REF("CloseCurlyDoubleQuote;", 0x201d),
  112. CHAR_REF("CloseCurlyQuote;", 0x2019),
  113. CHAR_REF("Colon;", 0x2237),
  114. CHAR_REF("Colone;", 0x2a74),
  115. CHAR_REF("Congruent;", 0x2261),
  116. CHAR_REF("Conint;", 0x222f),
  117. CHAR_REF("ContourIntegral;", 0x222e),
  118. CHAR_REF("Copf;", 0x2102),
  119. CHAR_REF("Coproduct;", 0x2210),
  120. CHAR_REF("CounterClockwiseContourIntegral;", 0x2233),
  121. CHAR_REF("Cross;", 0x2a2f),
  122. CHAR_REF("Cscr;", 0x0001d49e),
  123. CHAR_REF("Cup;", 0x22d3),
  124. CHAR_REF("CupCap;", 0x224d),
  125. CHAR_REF("DD;", 0x2145),
  126. CHAR_REF("DDotrahd;", 0x2911),
  127. CHAR_REF("DJcy;", 0x0402),
  128. CHAR_REF("DScy;", 0x0405),
  129. CHAR_REF("DZcy;", 0x040f),
  130. CHAR_REF("Dagger;", 0x2021),
  131. CHAR_REF("Darr;", 0x21a1),
  132. CHAR_REF("Dashv;", 0x2ae4),
  133. CHAR_REF("Dcaron;", 0x010e),
  134. CHAR_REF("Dcy;", 0x0414),
  135. CHAR_REF("Del;", 0x2207),
  136. CHAR_REF("Delta;", 0x0394),
  137. CHAR_REF("Dfr;", 0x0001d507),
  138. CHAR_REF("DiacriticalAcute;", 0xb4),
  139. CHAR_REF("DiacriticalDot;", 0x02d9),
  140. CHAR_REF("DiacriticalDoubleAcute;", 0x02dd),
  141. CHAR_REF("DiacriticalGrave;", 0x60),
  142. CHAR_REF("DiacriticalTilde;", 0x02dc),
  143. CHAR_REF("Diamond;", 0x22c4),
  144. CHAR_REF("DifferentialD;", 0x2146),
  145. CHAR_REF("Dopf;", 0x0001d53b),
  146. CHAR_REF("Dot;", 0xa8),
  147. CHAR_REF("DotDot;", 0x20dc),
  148. CHAR_REF("DotEqual;", 0x2250),
  149. CHAR_REF("DoubleContourIntegral;", 0x222f),
  150. CHAR_REF("DoubleDot;", 0xa8),
  151. CHAR_REF("DoubleDownArrow;", 0x21d3),
  152. CHAR_REF("DoubleLeftArrow;", 0x21d0),
  153. CHAR_REF("DoubleLeftRightArrow;", 0x21d4),
  154. CHAR_REF("DoubleLeftTee;", 0x2ae4),
  155. CHAR_REF("DoubleLongLeftArrow;", 0x27f8),
  156. CHAR_REF("DoubleLongLeftRightArrow;", 0x27fa),
  157. CHAR_REF("DoubleLongRightArrow;", 0x27f9),
  158. CHAR_REF("DoubleRightArrow;", 0x21d2),
  159. CHAR_REF("DoubleRightTee;", 0x22a8),
  160. CHAR_REF("DoubleUpArrow;", 0x21d1),
  161. CHAR_REF("DoubleUpDownArrow;", 0x21d5),
  162. CHAR_REF("DoubleVerticalBar;", 0x2225),
  163. CHAR_REF("DownArrow;", 0x2193),
  164. CHAR_REF("DownArrowBar;", 0x2913),
  165. CHAR_REF("DownArrowUpArrow;", 0x21f5),
  166. CHAR_REF("DownBreve;", 0x0311),
  167. CHAR_REF("DownLeftRightVector;", 0x2950),
  168. CHAR_REF("DownLeftTeeVector;", 0x295e),
  169. CHAR_REF("DownLeftVector;", 0x21bd),
  170. CHAR_REF("DownLeftVectorBar;", 0x2956),
  171. CHAR_REF("DownRightTeeVector;", 0x295f),
  172. CHAR_REF("DownRightVector;", 0x21c1),
  173. CHAR_REF("DownRightVectorBar;", 0x2957),
  174. CHAR_REF("DownTee;", 0x22a4),
  175. CHAR_REF("DownTeeArrow;", 0x21a7),
  176. CHAR_REF("Downarrow;", 0x21d3),
  177. CHAR_REF("Dscr;", 0x0001d49f),
  178. CHAR_REF("Dstrok;", 0x0110),
  179. CHAR_REF("ENG;", 0x014a),
  180. CHAR_REF("ETH;", 0xd0),
  181. CHAR_REF("ETH", 0xd0),
  182. CHAR_REF("Eacute;", 0xc9),
  183. CHAR_REF("Eacute", 0xc9),
  184. CHAR_REF("Ecaron;", 0x011a),
  185. CHAR_REF("Ecirc;", 0xca),
  186. CHAR_REF("Ecirc", 0xca),
  187. CHAR_REF("Ecy;", 0x042d),
  188. CHAR_REF("Edot;", 0x0116),
  189. CHAR_REF("Efr;", 0x0001d508),
  190. CHAR_REF("Egrave;", 0xc8),
  191. CHAR_REF("Egrave", 0xc8),
  192. CHAR_REF("Element;", 0x2208),
  193. CHAR_REF("Emacr;", 0x0112),
  194. CHAR_REF("EmptySmallSquare;", 0x25fb),
  195. CHAR_REF("EmptyVerySmallSquare;", 0x25ab),
  196. CHAR_REF("Eogon;", 0x0118),
  197. CHAR_REF("Eopf;", 0x0001d53c),
  198. CHAR_REF("Epsilon;", 0x0395),
  199. CHAR_REF("Equal;", 0x2a75),
  200. CHAR_REF("EqualTilde;", 0x2242),
  201. CHAR_REF("Equilibrium;", 0x21cc),
  202. CHAR_REF("Escr;", 0x2130),
  203. CHAR_REF("Esim;", 0x2a73),
  204. CHAR_REF("Eta;", 0x0397),
  205. CHAR_REF("Euml;", 0xcb),
  206. CHAR_REF("Euml", 0xcb),
  207. CHAR_REF("Exists;", 0x2203),
  208. CHAR_REF("ExponentialE;", 0x2147),
  209. CHAR_REF("Fcy;", 0x0424),
  210. CHAR_REF("Ffr;", 0x0001d509),
  211. CHAR_REF("FilledSmallSquare;", 0x25fc),
  212. CHAR_REF("FilledVerySmallSquare;", 0x25aa),
  213. CHAR_REF("Fopf;", 0x0001d53d),
  214. CHAR_REF("ForAll;", 0x2200),
  215. CHAR_REF("Fouriertrf;", 0x2131),
  216. CHAR_REF("Fscr;", 0x2131),
  217. CHAR_REF("GJcy;", 0x0403),
  218. CHAR_REF("GT;", 0x3e),
  219. CHAR_REF("GT", 0x3e),
  220. CHAR_REF("Gamma;", 0x0393),
  221. CHAR_REF("Gammad;", 0x03dc),
  222. CHAR_REF("Gbreve;", 0x011e),
  223. CHAR_REF("Gcedil;", 0x0122),
  224. CHAR_REF("Gcirc;", 0x011c),
  225. CHAR_REF("Gcy;", 0x0413),
  226. CHAR_REF("Gdot;", 0x0120),
  227. CHAR_REF("Gfr;", 0x0001d50a),
  228. CHAR_REF("Gg;", 0x22d9),
  229. CHAR_REF("Gopf;", 0x0001d53e),
  230. CHAR_REF("GreaterEqual;", 0x2265),
  231. CHAR_REF("GreaterEqualLess;", 0x22db),
  232. CHAR_REF("GreaterFullEqual;", 0x2267),
  233. CHAR_REF("GreaterGreater;", 0x2aa2),
  234. CHAR_REF("GreaterLess;", 0x2277),
  235. CHAR_REF("GreaterSlantEqual;", 0x2a7e),
  236. CHAR_REF("GreaterTilde;", 0x2273),
  237. CHAR_REF("Gscr;", 0x0001d4a2),
  238. CHAR_REF("Gt;", 0x226b),
  239. CHAR_REF("HARDcy;", 0x042a),
  240. CHAR_REF("Hacek;", 0x02c7),
  241. CHAR_REF("Hat;", 0x5e),
  242. CHAR_REF("Hcirc;", 0x0124),
  243. CHAR_REF("Hfr;", 0x210c),
  244. CHAR_REF("HilbertSpace;", 0x210b),
  245. CHAR_REF("Hopf;", 0x210d),
  246. CHAR_REF("HorizontalLine;", 0x2500),
  247. CHAR_REF("Hscr;", 0x210b),
  248. CHAR_REF("Hstrok;", 0x0126),
  249. CHAR_REF("HumpDownHump;", 0x224e),
  250. CHAR_REF("HumpEqual;", 0x224f),
  251. CHAR_REF("IEcy;", 0x0415),
  252. CHAR_REF("IJlig;", 0x0132),
  253. CHAR_REF("IOcy;", 0x0401),
  254. CHAR_REF("Iacute;", 0xcd),
  255. CHAR_REF("Iacute", 0xcd),
  256. CHAR_REF("Icirc;", 0xce),
  257. CHAR_REF("Icirc", 0xce),
  258. CHAR_REF("Icy;", 0x0418),
  259. CHAR_REF("Idot;", 0x0130),
  260. CHAR_REF("Ifr;", 0x2111),
  261. CHAR_REF("Igrave;", 0xcc),
  262. CHAR_REF("Igrave", 0xcc),
  263. CHAR_REF("Im;", 0x2111),
  264. CHAR_REF("Imacr;", 0x012a),
  265. CHAR_REF("ImaginaryI;", 0x2148),
  266. CHAR_REF("Implies;", 0x21d2),
  267. CHAR_REF("Int;", 0x222c),
  268. CHAR_REF("Integral;", 0x222b),
  269. CHAR_REF("Intersection;", 0x22c2),
  270. CHAR_REF("InvisibleComma;", 0x2063),
  271. CHAR_REF("InvisibleTimes;", 0x2062),
  272. CHAR_REF("Iogon;", 0x012e),
  273. CHAR_REF("Iopf;", 0x0001d540),
  274. CHAR_REF("Iota;", 0x0399),
  275. CHAR_REF("Iscr;", 0x2110),
  276. CHAR_REF("Itilde;", 0x0128),
  277. CHAR_REF("Iukcy;", 0x0406),
  278. CHAR_REF("Iuml;", 0xcf),
  279. CHAR_REF("Iuml", 0xcf),
  280. CHAR_REF("Jcirc;", 0x0134),
  281. CHAR_REF("Jcy;", 0x0419),
  282. CHAR_REF("Jfr;", 0x0001d50d),
  283. CHAR_REF("Jopf;", 0x0001d541),
  284. CHAR_REF("Jscr;", 0x0001d4a5),
  285. CHAR_REF("Jsercy;", 0x0408),
  286. CHAR_REF("Jukcy;", 0x0404),
  287. CHAR_REF("KHcy;", 0x0425),
  288. CHAR_REF("KJcy;", 0x040c),
  289. CHAR_REF("Kappa;", 0x039a),
  290. CHAR_REF("Kcedil;", 0x0136),
  291. CHAR_REF("Kcy;", 0x041a),
  292. CHAR_REF("Kfr;", 0x0001d50e),
  293. CHAR_REF("Kopf;", 0x0001d542),
  294. CHAR_REF("Kscr;", 0x0001d4a6),
  295. CHAR_REF("LJcy;", 0x0409),
  296. CHAR_REF("LT;", 0x3c),
  297. CHAR_REF("LT", 0x3c),
  298. CHAR_REF("Lacute;", 0x0139),
  299. CHAR_REF("Lambda;", 0x039b),
  300. CHAR_REF("Lang;", 0x27ea),
  301. CHAR_REF("Laplacetrf;", 0x2112),
  302. CHAR_REF("Larr;", 0x219e),
  303. CHAR_REF("Lcaron;", 0x013d),
  304. CHAR_REF("Lcedil;", 0x013b),
  305. CHAR_REF("Lcy;", 0x041b),
  306. CHAR_REF("LeftAngleBracket;", 0x27e8),
  307. CHAR_REF("LeftArrow;", 0x2190),
  308. CHAR_REF("LeftArrowBar;", 0x21e4),
  309. CHAR_REF("LeftArrowRightArrow;", 0x21c6),
  310. CHAR_REF("LeftCeiling;", 0x2308),
  311. CHAR_REF("LeftDoubleBracket;", 0x27e6),
  312. CHAR_REF("LeftDownTeeVector;", 0x2961),
  313. CHAR_REF("LeftDownVector;", 0x21c3),
  314. CHAR_REF("LeftDownVectorBar;", 0x2959),
  315. CHAR_REF("LeftFloor;", 0x230a),
  316. CHAR_REF("LeftRightArrow;", 0x2194),
  317. CHAR_REF("LeftRightVector;", 0x294e),
  318. CHAR_REF("LeftTee;", 0x22a3),
  319. CHAR_REF("LeftTeeArrow;", 0x21a4),
  320. CHAR_REF("LeftTeeVector;", 0x295a),
  321. CHAR_REF("LeftTriangle;", 0x22b2),
  322. CHAR_REF("LeftTriangleBar;", 0x29cf),
  323. CHAR_REF("LeftTriangleEqual;", 0x22b4),
  324. CHAR_REF("LeftUpDownVector;", 0x2951),
  325. CHAR_REF("LeftUpTeeVector;", 0x2960),
  326. CHAR_REF("LeftUpVector;", 0x21bf),
  327. CHAR_REF("LeftUpVectorBar;", 0x2958),
  328. CHAR_REF("LeftVector;", 0x21bc),
  329. CHAR_REF("LeftVectorBar;", 0x2952),
  330. CHAR_REF("Leftarrow;", 0x21d0),
  331. CHAR_REF("Leftrightarrow;", 0x21d4),
  332. CHAR_REF("LessEqualGreater;", 0x22da),
  333. CHAR_REF("LessFullEqual;", 0x2266),
  334. CHAR_REF("LessGreater;", 0x2276),
  335. CHAR_REF("LessLess;", 0x2aa1),
  336. CHAR_REF("LessSlantEqual;", 0x2a7d),
  337. CHAR_REF("LessTilde;", 0x2272),
  338. CHAR_REF("Lfr;", 0x0001d50f),
  339. CHAR_REF("Ll;", 0x22d8),
  340. CHAR_REF("Lleftarrow;", 0x21da),
  341. CHAR_REF("Lmidot;", 0x013f),
  342. CHAR_REF("LongLeftArrow;", 0x27f5),
  343. CHAR_REF("LongLeftRightArrow;", 0x27f7),
  344. CHAR_REF("LongRightArrow;", 0x27f6),
  345. CHAR_REF("Longleftarrow;", 0x27f8),
  346. CHAR_REF("Longleftrightarrow;", 0x27fa),
  347. CHAR_REF("Longrightarrow;", 0x27f9),
  348. CHAR_REF("Lopf;", 0x0001d543),
  349. CHAR_REF("LowerLeftArrow;", 0x2199),
  350. CHAR_REF("LowerRightArrow;", 0x2198),
  351. CHAR_REF("Lscr;", 0x2112),
  352. CHAR_REF("Lsh;", 0x21b0),
  353. CHAR_REF("Lstrok;", 0x0141),
  354. CHAR_REF("Lt;", 0x226a),
  355. CHAR_REF("Map;", 0x2905),
  356. CHAR_REF("Mcy;", 0x041c),
  357. CHAR_REF("MediumSpace;", 0x205f),
  358. CHAR_REF("Mellintrf;", 0x2133),
  359. CHAR_REF("Mfr;", 0x0001d510),
  360. CHAR_REF("MinusPlus;", 0x2213),
  361. CHAR_REF("Mopf;", 0x0001d544),
  362. CHAR_REF("Mscr;", 0x2133),
  363. CHAR_REF("Mu;", 0x039c),
  364. CHAR_REF("NJcy;", 0x040a),
  365. CHAR_REF("Nacute;", 0x0143),
  366. CHAR_REF("Ncaron;", 0x0147),
  367. CHAR_REF("Ncedil;", 0x0145),
  368. CHAR_REF("Ncy;", 0x041d),
  369. CHAR_REF("NegativeMediumSpace;", 0x200b),
  370. CHAR_REF("NegativeThickSpace;", 0x200b),
  371. CHAR_REF("NegativeThinSpace;", 0x200b),
  372. CHAR_REF("NegativeVeryThinSpace;", 0x200b),
  373. CHAR_REF("NestedGreaterGreater;", 0x226b),
  374. CHAR_REF("NestedLessLess;", 0x226a),
  375. CHAR_REF("NewLine;", 0x0a),
  376. CHAR_REF("Nfr;", 0x0001d511),
  377. CHAR_REF("NoBreak;", 0x2060),
  378. CHAR_REF("NonBreakingSpace;", 0xa0),
  379. CHAR_REF("Nopf;", 0x2115),
  380. CHAR_REF("Not;", 0x2aec),
  381. CHAR_REF("NotCongruent;", 0x2262),
  382. CHAR_REF("NotCupCap;", 0x226d),
  383. CHAR_REF("NotDoubleVerticalBar;", 0x2226),
  384. CHAR_REF("NotElement;", 0x2209),
  385. CHAR_REF("NotEqual;", 0x2260),
  386. MULTI_CHAR_REF("NotEqualTilde;", 0x2242, 0x0338),
  387. CHAR_REF("NotExists;", 0x2204),
  388. CHAR_REF("NotGreater;", 0x226f),
  389. CHAR_REF("NotGreaterEqual;", 0x2271),
  390. MULTI_CHAR_REF("NotGreaterFullEqual;", 0x2267, 0x0338),
  391. MULTI_CHAR_REF("NotGreaterGreater;", 0x226b, 0x0338),
  392. CHAR_REF("NotGreaterLess;", 0x2279),
  393. MULTI_CHAR_REF("NotGreaterSlantEqual;", 0x2a7e, 0x0338),
  394. CHAR_REF("NotGreaterTilde;", 0x2275),
  395. MULTI_CHAR_REF("NotHumpDownHump;", 0x224e, 0x0338),
  396. MULTI_CHAR_REF("NotHumpEqual;", 0x224f, 0x0338),
  397. CHAR_REF("NotLeftTriangle;", 0x22ea),
  398. MULTI_CHAR_REF("NotLeftTriangleBar;", 0x29cf, 0x0338),
  399. CHAR_REF("NotLeftTriangleEqual;", 0x22ec),
  400. CHAR_REF("NotLess;", 0x226e),
  401. CHAR_REF("NotLessEqual;", 0x2270),
  402. CHAR_REF("NotLessGreater;", 0x2278),
  403. MULTI_CHAR_REF("NotLessLess;", 0x226a, 0x0338),
  404. MULTI_CHAR_REF("NotLessSlantEqual;", 0x2a7d, 0x0338),
  405. CHAR_REF("NotLessTilde;", 0x2274),
  406. MULTI_CHAR_REF("NotNestedGreaterGreater;", 0x2aa2, 0x0338),
  407. MULTI_CHAR_REF("NotNestedLessLess;", 0x2aa1, 0x0338),
  408. CHAR_REF("NotPrecedes;", 0x2280),
  409. MULTI_CHAR_REF("NotPrecedesEqual;", 0x2aaf, 0x0338),
  410. CHAR_REF("NotPrecedesSlantEqual;", 0x22e0),
  411. CHAR_REF("NotReverseElement;", 0x220c),
  412. CHAR_REF("NotRightTriangle;", 0x22eb),
  413. MULTI_CHAR_REF("NotRightTriangleBar;", 0x29d0, 0x0338),
  414. CHAR_REF("NotRightTriangleEqual;", 0x22ed),
  415. MULTI_CHAR_REF("NotSquareSubset;", 0x228f, 0x0338),
  416. CHAR_REF("NotSquareSubsetEqual;", 0x22e2),
  417. MULTI_CHAR_REF("NotSquareSuperset;", 0x2290, 0x0338),
  418. CHAR_REF("NotSquareSupersetEqual;", 0x22e3),
  419. MULTI_CHAR_REF("NotSubset;", 0x2282, 0x20d2),
  420. CHAR_REF("NotSubsetEqual;", 0x2288),
  421. CHAR_REF("NotSucceeds;", 0x2281),
  422. MULTI_CHAR_REF("NotSucceedsEqual;", 0x2ab0, 0x0338),
  423. CHAR_REF("NotSucceedsSlantEqual;", 0x22e1),
  424. MULTI_CHAR_REF("NotSucceedsTilde;", 0x227f, 0x0338),
  425. MULTI_CHAR_REF("NotSuperset;", 0x2283, 0x20d2),
  426. CHAR_REF("NotSupersetEqual;", 0x2289),
  427. CHAR_REF("NotTilde;", 0x2241),
  428. CHAR_REF("NotTildeEqual;", 0x2244),
  429. CHAR_REF("NotTildeFullEqual;", 0x2247),
  430. CHAR_REF("NotTildeTilde;", 0x2249),
  431. CHAR_REF("NotVerticalBar;", 0x2224),
  432. CHAR_REF("Nscr;", 0x0001d4a9),
  433. CHAR_REF("Ntilde;", 0xd1),
  434. CHAR_REF("Ntilde", 0xd1),
  435. CHAR_REF("Nu;", 0x039d),
  436. CHAR_REF("OElig;", 0x0152),
  437. CHAR_REF("Oacute;", 0xd3),
  438. CHAR_REF("Oacute", 0xd3),
  439. CHAR_REF("Ocirc;", 0xd4),
  440. CHAR_REF("Ocirc", 0xd4),
  441. CHAR_REF("Ocy;", 0x041e),
  442. CHAR_REF("Odblac;", 0x0150),
  443. CHAR_REF("Ofr;", 0x0001d512),
  444. CHAR_REF("Ograve;", 0xd2),
  445. CHAR_REF("Ograve", 0xd2),
  446. CHAR_REF("Omacr;", 0x014c),
  447. CHAR_REF("Omega;", 0x03a9),
  448. CHAR_REF("Omicron;", 0x039f),
  449. CHAR_REF("Oopf;", 0x0001d546),
  450. CHAR_REF("OpenCurlyDoubleQuote;", 0x201c),
  451. CHAR_REF("OpenCurlyQuote;", 0x2018),
  452. CHAR_REF("Or;", 0x2a54),
  453. CHAR_REF("Oscr;", 0x0001d4aa),
  454. CHAR_REF("Oslash;", 0xd8),
  455. CHAR_REF("Oslash", 0xd8),
  456. CHAR_REF("Otilde;", 0xd5),
  457. CHAR_REF("Otilde", 0xd5),
  458. CHAR_REF("Otimes;", 0x2a37),
  459. CHAR_REF("Ouml", 0xd6),
  460. CHAR_REF("Ouml;", 0xd6),
  461. CHAR_REF("OverBar;", 0x203e),
  462. CHAR_REF("OverBrace;", 0x23de),
  463. CHAR_REF("OverBracket;", 0x23b4),
  464. CHAR_REF("OverParenthesis;", 0x23dc),
  465. CHAR_REF("PartialD;", 0x2202),
  466. CHAR_REF("Pcy;", 0x041f),
  467. CHAR_REF("Pfr;", 0x0001d513),
  468. CHAR_REF("Phi;", 0x03a6),
  469. CHAR_REF("Pi;", 0x03a0),
  470. CHAR_REF("PlusMinus;", 0xb1),
  471. CHAR_REF("Poincareplane;", 0x210c),
  472. CHAR_REF("Popf;", 0x2119),
  473. CHAR_REF("Pr;", 0x2abb),
  474. CHAR_REF("Precedes;", 0x227a),
  475. CHAR_REF("PrecedesEqual;", 0x2aaf),
  476. CHAR_REF("PrecedesSlantEqual;", 0x227c),
  477. CHAR_REF("PrecedesTilde;", 0x227e),
  478. CHAR_REF("Prime;", 0x2033),
  479. CHAR_REF("Product;", 0x220f),
  480. CHAR_REF("Proportion;", 0x2237),
  481. CHAR_REF("Proportional;", 0x221d),
  482. CHAR_REF("Pscr;", 0x0001d4ab),
  483. CHAR_REF("Psi;", 0x03a8),
  484. CHAR_REF("QUOT;", 0x22),
  485. CHAR_REF("QUOT", 0x22),
  486. CHAR_REF("Qfr;", 0x0001d514),
  487. CHAR_REF("Qopf;", 0x211a),
  488. CHAR_REF("Qscr;", 0x0001d4ac),
  489. CHAR_REF("RBarr;", 0x2910),
  490. CHAR_REF("REG;", 0xae),
  491. CHAR_REF("REG", 0xae),
  492. CHAR_REF("Racute;", 0x0154),
  493. CHAR_REF("Rang;", 0x27eb),
  494. CHAR_REF("Rarr;", 0x21a0),
  495. CHAR_REF("Rarrtl;", 0x2916),
  496. CHAR_REF("Rcaron;", 0x0158),
  497. CHAR_REF("Rcedil;", 0x0156),
  498. CHAR_REF("Rcy;", 0x0420),
  499. CHAR_REF("Re;", 0x211c),
  500. CHAR_REF("ReverseElement;", 0x220b),
  501. CHAR_REF("ReverseEquilibrium;", 0x21cb),
  502. CHAR_REF("ReverseUpEquilibrium;", 0x296f),
  503. CHAR_REF("Rfr;", 0x211c),
  504. CHAR_REF("Rho;", 0x03a1),
  505. CHAR_REF("RightAngleBracket;", 0x27e9),
  506. CHAR_REF("RightArrow;", 0x2192),
  507. CHAR_REF("RightArrowBar;", 0x21e5),
  508. CHAR_REF("RightArrowLeftArrow;", 0x21c4),
  509. CHAR_REF("RightCeiling;", 0x2309),
  510. CHAR_REF("RightDoubleBracket;", 0x27e7),
  511. CHAR_REF("RightDownTeeVector;", 0x295d),
  512. CHAR_REF("RightDownVector;", 0x21c2),
  513. CHAR_REF("RightDownVectorBar;", 0x2955),
  514. CHAR_REF("RightFloor;", 0x230b),
  515. CHAR_REF("RightTee;", 0x22a2),
  516. CHAR_REF("RightTeeArrow;", 0x21a6),
  517. CHAR_REF("RightTeeVector;", 0x295b),
  518. CHAR_REF("RightTriangle;", 0x22b3),
  519. CHAR_REF("RightTriangleBar;", 0x29d0),
  520. CHAR_REF("RightTriangleEqual;", 0x22b5),
  521. CHAR_REF("RightUpDownVector;", 0x294f),
  522. CHAR_REF("RightUpTeeVector;", 0x295c),
  523. CHAR_REF("RightUpVector;", 0x21be),
  524. CHAR_REF("RightUpVectorBar;", 0x2954),
  525. CHAR_REF("RightVector;", 0x21c0),
  526. CHAR_REF("RightVectorBar;", 0x2953),
  527. CHAR_REF("Rightarrow;", 0x21d2),
  528. CHAR_REF("Ropf;", 0x211d),
  529. CHAR_REF("RoundImplies;", 0x2970),
  530. CHAR_REF("Rrightarrow;", 0x21db),
  531. CHAR_REF("Rscr;", 0x211b),
  532. CHAR_REF("Rsh;", 0x21b1),
  533. CHAR_REF("RuleDelayed;", 0x29f4),
  534. CHAR_REF("SHCHcy;", 0x0429),
  535. CHAR_REF("SHcy;", 0x0428),
  536. CHAR_REF("SOFTcy;", 0x042c),
  537. CHAR_REF("Sacute;", 0x015a),
  538. CHAR_REF("Sc;", 0x2abc),
  539. CHAR_REF("Scaron;", 0x0160),
  540. CHAR_REF("Scedil;", 0x015e),
  541. CHAR_REF("Scirc;", 0x015c),
  542. CHAR_REF("Scy;", 0x0421),
  543. CHAR_REF("Sfr;", 0x0001d516),
  544. CHAR_REF("ShortDownArrow;", 0x2193),
  545. CHAR_REF("ShortLeftArrow;", 0x2190),
  546. CHAR_REF("ShortRightArrow;", 0x2192),
  547. CHAR_REF("ShortUpArrow;", 0x2191),
  548. CHAR_REF("Sigma;", 0x03a3),
  549. CHAR_REF("SmallCircle;", 0x2218),
  550. CHAR_REF("Sopf;", 0x0001d54a),
  551. CHAR_REF("Sqrt;", 0x221a),
  552. CHAR_REF("Square;", 0x25a1),
  553. CHAR_REF("SquareIntersection;", 0x2293),
  554. CHAR_REF("SquareSubset;", 0x228f),
  555. CHAR_REF("SquareSubsetEqual;", 0x2291),
  556. CHAR_REF("SquareSuperset;", 0x2290),
  557. CHAR_REF("SquareSupersetEqual;", 0x2292),
  558. CHAR_REF("SquareUnion;", 0x2294),
  559. CHAR_REF("Sscr;", 0x0001d4ae),
  560. CHAR_REF("Star;", 0x22c6),
  561. CHAR_REF("Sub;", 0x22d0),
  562. CHAR_REF("Subset;", 0x22d0),
  563. CHAR_REF("SubsetEqual;", 0x2286),
  564. CHAR_REF("Succeeds;", 0x227b),
  565. CHAR_REF("SucceedsEqual;", 0x2ab0),
  566. CHAR_REF("SucceedsSlantEqual;", 0x227d),
  567. CHAR_REF("SucceedsTilde;", 0x227f),
  568. CHAR_REF("SuchThat;", 0x220b),
  569. CHAR_REF("Sum;", 0x2211),
  570. CHAR_REF("Sup;", 0x22d1),
  571. CHAR_REF("Superset;", 0x2283),
  572. CHAR_REF("SupersetEqual;", 0x2287),
  573. CHAR_REF("Supset;", 0x22d1),
  574. CHAR_REF("THORN;", 0xde),
  575. CHAR_REF("THORN", 0xde),
  576. CHAR_REF("TRADE;", 0x2122),
  577. CHAR_REF("TSHcy;", 0x040b),
  578. CHAR_REF("TScy;", 0x0426),
  579. CHAR_REF("Tab;", 0x09),
  580. CHAR_REF("Tau;", 0x03a4),
  581. CHAR_REF("Tcaron;", 0x0164),
  582. CHAR_REF("Tcedil;", 0x0162),
  583. CHAR_REF("Tcy;", 0x0422),
  584. CHAR_REF("Tfr;", 0x0001d517),
  585. CHAR_REF("Therefore;", 0x2234),
  586. CHAR_REF("Theta;", 0x0398),
  587. MULTI_CHAR_REF("ThickSpace;", 0x205f, 0x200a),
  588. CHAR_REF("ThinSpace;", 0x2009),
  589. CHAR_REF("Tilde;", 0x223c),
  590. CHAR_REF("TildeEqual;", 0x2243),
  591. CHAR_REF("TildeFullEqual;", 0x2245),
  592. CHAR_REF("TildeTilde;", 0x2248),
  593. CHAR_REF("Topf;", 0x0001d54b),
  594. CHAR_REF("TripleDot;", 0x20db),
  595. CHAR_REF("Tscr;", 0x0001d4af),
  596. CHAR_REF("Tstrok;", 0x0166),
  597. CHAR_REF("Uacute;", 0xda),
  598. CHAR_REF("Uacute", 0xda),
  599. CHAR_REF("Uarr;", 0x219f),
  600. CHAR_REF("Uarrocir;", 0x2949),
  601. CHAR_REF("Ubrcy;", 0x040e),
  602. CHAR_REF("Ubreve;", 0x016c),
  603. CHAR_REF("Ucirc;", 0xdb),
  604. CHAR_REF("Ucirc", 0xdb),
  605. CHAR_REF("Ucy;", 0x0423),
  606. CHAR_REF("Udblac;", 0x0170),
  607. CHAR_REF("Ufr;", 0x0001d518),
  608. CHAR_REF("Ugrave;", 0xd9),
  609. CHAR_REF("Ugrave", 0xd9),
  610. CHAR_REF("Umacr;", 0x016a),
  611. CHAR_REF("UnderBar;", 0x5f),
  612. CHAR_REF("UnderBrace;", 0x23df),
  613. CHAR_REF("UnderBracket;", 0x23b5),
  614. CHAR_REF("UnderParenthesis;", 0x23dd),
  615. CHAR_REF("Union;", 0x22c3),
  616. CHAR_REF("UnionPlus;", 0x228e),
  617. CHAR_REF("Uogon;", 0x0172),
  618. CHAR_REF("Uopf;", 0x0001d54c),
  619. CHAR_REF("UpArrow;", 0x2191),
  620. CHAR_REF("UpArrowBar;", 0x2912),
  621. CHAR_REF("UpArrowDownArrow;", 0x21c5),
  622. CHAR_REF("UpDownArrow;", 0x2195),
  623. CHAR_REF("UpEquilibrium;", 0x296e),
  624. CHAR_REF("UpTee;", 0x22a5),
  625. CHAR_REF("UpTeeArrow;", 0x21a5),
  626. CHAR_REF("Uparrow;", 0x21d1),
  627. CHAR_REF("Updownarrow;", 0x21d5),
  628. CHAR_REF("UpperLeftArrow;", 0x2196),
  629. CHAR_REF("UpperRightArrow;", 0x2197),
  630. CHAR_REF("Upsi;", 0x03d2),
  631. CHAR_REF("Upsilon;", 0x03a5),
  632. CHAR_REF("Uring;", 0x016e),
  633. CHAR_REF("Uscr;", 0x0001d4b0),
  634. CHAR_REF("Utilde;", 0x0168),
  635. CHAR_REF("Uuml;", 0xdc),
  636. CHAR_REF("Uuml", 0xdc),
  637. CHAR_REF("VDash;", 0x22ab),
  638. CHAR_REF("Vbar;", 0x2aeb),
  639. CHAR_REF("Vcy;", 0x0412),
  640. CHAR_REF("Vdash;", 0x22a9),
  641. CHAR_REF("Vdashl;", 0x2ae6),
  642. CHAR_REF("Vee;", 0x22c1),
  643. CHAR_REF("Verbar;", 0x2016),
  644. CHAR_REF("Vert;", 0x2016),
  645. CHAR_REF("VerticalBar;", 0x2223),
  646. CHAR_REF("VerticalLine;", 0x7c),
  647. CHAR_REF("VerticalSeparator;", 0x2758),
  648. CHAR_REF("VerticalTilde;", 0x2240),
  649. CHAR_REF("VeryThinSpace;", 0x200a),
  650. CHAR_REF("Vfr;", 0x0001d519),
  651. CHAR_REF("Vopf;", 0x0001d54d),
  652. CHAR_REF("Vscr;", 0x0001d4b1),
  653. CHAR_REF("Vvdash;", 0x22aa),
  654. CHAR_REF("Wcirc;", 0x0174),
  655. CHAR_REF("Wedge;", 0x22c0),
  656. CHAR_REF("Wfr;", 0x0001d51a),
  657. CHAR_REF("Wopf;", 0x0001d54e),
  658. CHAR_REF("Wscr;", 0x0001d4b2),
  659. CHAR_REF("Xfr;", 0x0001d51b),
  660. CHAR_REF("Xi;", 0x039e),
  661. CHAR_REF("Xopf;", 0x0001d54f),
  662. CHAR_REF("Xscr;", 0x0001d4b3),
  663. CHAR_REF("YAcy;", 0x042f),
  664. CHAR_REF("YIcy;", 0x0407),
  665. CHAR_REF("YUcy;", 0x042e),
  666. CHAR_REF("Yacute", 0xdd),
  667. CHAR_REF("Yacute;", 0xdd),
  668. CHAR_REF("Ycirc;", 0x0176),
  669. CHAR_REF("Ycy;", 0x042b),
  670. CHAR_REF("Yfr;", 0x0001d51c),
  671. CHAR_REF("Yopf;", 0x0001d550),
  672. CHAR_REF("Yscr;", 0x0001d4b4),
  673. CHAR_REF("Yuml;", 0x0178),
  674. CHAR_REF("ZHcy;", 0x0416),
  675. CHAR_REF("Zacute;", 0x0179),
  676. CHAR_REF("Zcaron;", 0x017d),
  677. CHAR_REF("Zcy;", 0x0417),
  678. CHAR_REF("Zdot;", 0x017b),
  679. CHAR_REF("ZeroWidthSpace;", 0x200b),
  680. CHAR_REF("Zeta;", 0x0396),
  681. CHAR_REF("Zfr;", 0x2128),
  682. CHAR_REF("Zopf;", 0x2124),
  683. CHAR_REF("Zscr;", 0x0001d4b5),
  684. CHAR_REF("aacute;", 0xe1),
  685. CHAR_REF("aacute", 0xe1),
  686. CHAR_REF("abreve;", 0x0103),
  687. CHAR_REF("ac;", 0x223e),
  688. MULTI_CHAR_REF("acE;", 0x223e, 0x0333),
  689. CHAR_REF("acd;", 0x223f),
  690. CHAR_REF("acirc;", 0xe2),
  691. CHAR_REF("acirc", 0xe2),
  692. CHAR_REF("acute;", 0xb4),
  693. CHAR_REF("acute", 0xb4),
  694. CHAR_REF("acy;", 0x0430),
  695. CHAR_REF("aelig;", 0xe6),
  696. CHAR_REF("aelig", 0xe6),
  697. CHAR_REF("af;", 0x2061),
  698. CHAR_REF("afr;", 0x0001d51e),
  699. CHAR_REF("agrave;", 0xe0),
  700. CHAR_REF("agrave", 0xe0),
  701. CHAR_REF("alefsym;", 0x2135),
  702. CHAR_REF("aleph;", 0x2135),
  703. CHAR_REF("alpha;", 0x03b1),
  704. CHAR_REF("amacr;", 0x0101),
  705. CHAR_REF("amalg;", 0x2a3f),
  706. CHAR_REF("amp;", 0x26),
  707. CHAR_REF("amp", 0x26),
  708. CHAR_REF("and;", 0x2227),
  709. CHAR_REF("andand;", 0x2a55),
  710. CHAR_REF("andd;", 0x2a5c),
  711. CHAR_REF("andslope;", 0x2a58),
  712. CHAR_REF("andv;", 0x2a5a),
  713. CHAR_REF("ang;", 0x2220),
  714. CHAR_REF("ange;", 0x29a4),
  715. CHAR_REF("angle;", 0x2220),
  716. CHAR_REF("angmsd;", 0x2221),
  717. CHAR_REF("angmsdaa;", 0x29a8),
  718. CHAR_REF("angmsdab;", 0x29a9),
  719. CHAR_REF("angmsdac;", 0x29aa),
  720. CHAR_REF("angmsdad;", 0x29ab),
  721. CHAR_REF("angmsdae;", 0x29ac),
  722. CHAR_REF("angmsdaf;", 0x29ad),
  723. CHAR_REF("angmsdag;", 0x29ae),
  724. CHAR_REF("angmsdah;", 0x29af),
  725. CHAR_REF("angrt;", 0x221f),
  726. CHAR_REF("angrtvb;", 0x22be),
  727. CHAR_REF("angrtvbd;", 0x299d),
  728. CHAR_REF("angsph;", 0x2222),
  729. CHAR_REF("angst;", 0xc5),
  730. CHAR_REF("angzarr;", 0x237c),
  731. CHAR_REF("aogon;", 0x0105),
  732. CHAR_REF("aopf;", 0x0001d552),
  733. CHAR_REF("ap;", 0x2248),
  734. CHAR_REF("apE;", 0x2a70),
  735. CHAR_REF("apacir;", 0x2a6f),
  736. CHAR_REF("ape;", 0x224a),
  737. CHAR_REF("apid;", 0x224b),
  738. CHAR_REF("apos;", 0x27),
  739. CHAR_REF("approx;", 0x2248),
  740. CHAR_REF("approxeq;", 0x224a),
  741. CHAR_REF("aring;", 0xe5),
  742. CHAR_REF("aring", 0xe5),
  743. CHAR_REF("ascr;", 0x0001d4b6),
  744. CHAR_REF("ast;", 0x2a),
  745. CHAR_REF("asymp;", 0x2248),
  746. CHAR_REF("asympeq;", 0x224d),
  747. CHAR_REF("atilde;", 0xe3),
  748. CHAR_REF("atilde", 0xe3),
  749. CHAR_REF("auml;", 0xe4),
  750. CHAR_REF("auml", 0xe4),
  751. CHAR_REF("awconint;", 0x2233),
  752. CHAR_REF("awint;", 0x2a11),
  753. CHAR_REF("bNot;", 0x2aed),
  754. CHAR_REF("backcong;", 0x224c),
  755. CHAR_REF("backepsilon;", 0x03f6),
  756. CHAR_REF("backprime;", 0x2035),
  757. CHAR_REF("backsim;", 0x223d),
  758. CHAR_REF("backsimeq;", 0x22cd),
  759. CHAR_REF("barvee;", 0x22bd),
  760. CHAR_REF("barwed;", 0x2305),
  761. CHAR_REF("barwedge;", 0x2305),
  762. CHAR_REF("bbrk;", 0x23b5),
  763. CHAR_REF("bbrktbrk;", 0x23b6),
  764. CHAR_REF("bcong;", 0x224c),
  765. CHAR_REF("bcy;", 0x0431),
  766. CHAR_REF("bdquo;", 0x201e),
  767. CHAR_REF("becaus;", 0x2235),
  768. CHAR_REF("because;", 0x2235),
  769. CHAR_REF("bemptyv;", 0x29b0),
  770. CHAR_REF("bepsi;", 0x03f6),
  771. CHAR_REF("bernou;", 0x212c),
  772. CHAR_REF("beta;", 0x03b2),
  773. CHAR_REF("beth;", 0x2136),
  774. CHAR_REF("between;", 0x226c),
  775. CHAR_REF("bfr;", 0x0001d51f),
  776. CHAR_REF("bigcap;", 0x22c2),
  777. CHAR_REF("bigcirc;", 0x25ef),
  778. CHAR_REF("bigcup;", 0x22c3),
  779. CHAR_REF("bigodot;", 0x2a00),
  780. CHAR_REF("bigoplus;", 0x2a01),
  781. CHAR_REF("bigotimes;", 0x2a02),
  782. CHAR_REF("bigsqcup;", 0x2a06),
  783. CHAR_REF("bigstar;", 0x2605),
  784. CHAR_REF("bigtriangledown;", 0x25bd),
  785. CHAR_REF("bigtriangleup;", 0x25b3),
  786. CHAR_REF("biguplus;", 0x2a04),
  787. CHAR_REF("bigvee;", 0x22c1),
  788. CHAR_REF("bigwedge;", 0x22c0),
  789. CHAR_REF("bkarow;", 0x290d),
  790. CHAR_REF("blacklozenge;", 0x29eb),
  791. CHAR_REF("blacksquare;", 0x25aa),
  792. CHAR_REF("blacktriangle;", 0x25b4),
  793. CHAR_REF("blacktriangledown;", 0x25be),
  794. CHAR_REF("blacktriangleleft;", 0x25c2),
  795. CHAR_REF("blacktriangleright;", 0x25b8),
  796. CHAR_REF("blank;", 0x2423),
  797. CHAR_REF("blk12;", 0x2592),
  798. CHAR_REF("blk14;", 0x2591),
  799. CHAR_REF("blk34;", 0x2593),
  800. CHAR_REF("block;", 0x2588),
  801. MULTI_CHAR_REF("bne;", 0x3d, 0x20e5),
  802. MULTI_CHAR_REF("bnequiv;", 0x2261, 0x20e5),
  803. CHAR_REF("bnot;", 0x2310),
  804. CHAR_REF("bopf;", 0x0001d553),
  805. CHAR_REF("bot;", 0x22a5),
  806. CHAR_REF("bottom;", 0x22a5),
  807. CHAR_REF("bowtie;", 0x22c8),
  808. CHAR_REF("boxDL;", 0x2557),
  809. CHAR_REF("boxDR;", 0x2554),
  810. CHAR_REF("boxDl;", 0x2556),
  811. CHAR_REF("boxDr;", 0x2553),
  812. CHAR_REF("boxH;", 0x2550),
  813. CHAR_REF("boxHD;", 0x2566),
  814. CHAR_REF("boxHU;", 0x2569),
  815. CHAR_REF("boxHd;", 0x2564),
  816. CHAR_REF("boxHu;", 0x2567),
  817. CHAR_REF("boxUL;", 0x255d),
  818. CHAR_REF("boxUR;", 0x255a),
  819. CHAR_REF("boxUl;", 0x255c),
  820. CHAR_REF("boxUr;", 0x2559),
  821. CHAR_REF("boxV;", 0x2551),
  822. CHAR_REF("boxVH;", 0x256c),
  823. CHAR_REF("boxVL;", 0x2563),
  824. CHAR_REF("boxVR;", 0x2560),
  825. CHAR_REF("boxVh;", 0x256b),
  826. CHAR_REF("boxVl;", 0x2562),
  827. CHAR_REF("boxVr;", 0x255f),
  828. CHAR_REF("boxbox;", 0x29c9),
  829. CHAR_REF("boxdL;", 0x2555),
  830. CHAR_REF("boxdR;", 0x2552),
  831. CHAR_REF("boxdl;", 0x2510),
  832. CHAR_REF("boxdr;", 0x250c),
  833. CHAR_REF("boxh;", 0x2500),
  834. CHAR_REF("boxhD;", 0x2565),
  835. CHAR_REF("boxhU;", 0x2568),
  836. CHAR_REF("boxhd;", 0x252c),
  837. CHAR_REF("boxhu;", 0x2534),
  838. CHAR_REF("boxminus;", 0x229f),
  839. CHAR_REF("boxplus;", 0x229e),
  840. CHAR_REF("boxtimes;", 0x22a0),
  841. CHAR_REF("boxuL;", 0x255b),
  842. CHAR_REF("boxuR;", 0x2558),
  843. CHAR_REF("boxul;", 0x2518),
  844. CHAR_REF("boxur;", 0x2514),
  845. CHAR_REF("boxv;", 0x2502),
  846. CHAR_REF("boxvH;", 0x256a),
  847. CHAR_REF("boxvL;", 0x2561),
  848. CHAR_REF("boxvR;", 0x255e),
  849. CHAR_REF("boxvh;", 0x253c),
  850. CHAR_REF("boxvl;", 0x2524),
  851. CHAR_REF("boxvr;", 0x251c),
  852. CHAR_REF("bprime;", 0x2035),
  853. CHAR_REF("breve;", 0x02d8),
  854. CHAR_REF("brvbar;", 0xa6),
  855. CHAR_REF("brvbar", 0xa6),
  856. CHAR_REF("bscr;", 0x0001d4b7),
  857. CHAR_REF("bsemi;", 0x204f),
  858. CHAR_REF("bsim;", 0x223d),
  859. CHAR_REF("bsime;", 0x22cd),
  860. CHAR_REF("bsol;", 0x5c),
  861. CHAR_REF("bsolb;", 0x29c5),
  862. CHAR_REF("bsolhsub;", 0x27c8),
  863. CHAR_REF("bull;", 0x2022),
  864. CHAR_REF("bullet;", 0x2022),
  865. CHAR_REF("bump;", 0x224e),
  866. CHAR_REF("bumpE;", 0x2aae),
  867. CHAR_REF("bumpe;", 0x224f),
  868. CHAR_REF("bumpeq;", 0x224f),
  869. CHAR_REF("cacute;", 0x0107),
  870. CHAR_REF("cap;", 0x2229),
  871. CHAR_REF("capand;", 0x2a44),
  872. CHAR_REF("capbrcup;", 0x2a49),
  873. CHAR_REF("capcap;", 0x2a4b),
  874. CHAR_REF("capcup;", 0x2a47),
  875. CHAR_REF("capdot;", 0x2a40),
  876. MULTI_CHAR_REF("caps;", 0x2229, 0xfe00),
  877. CHAR_REF("caret;", 0x2041),
  878. CHAR_REF("caron;", 0x02c7),
  879. CHAR_REF("ccaps;", 0x2a4d),
  880. CHAR_REF("ccaron;", 0x010d),
  881. CHAR_REF("ccedil;", 0xe7),
  882. CHAR_REF("ccedil", 0xe7),
  883. CHAR_REF("ccirc;", 0x0109),
  884. CHAR_REF("ccups;", 0x2a4c),
  885. CHAR_REF("ccupssm;", 0x2a50),
  886. CHAR_REF("cdot;", 0x010b),
  887. CHAR_REF("cedil;", 0xb8),
  888. CHAR_REF("cedil", 0xb8),
  889. CHAR_REF("cemptyv;", 0x29b2),
  890. CHAR_REF("cent;", 0xa2),
  891. CHAR_REF("cent", 0xa2),
  892. CHAR_REF("centerdot;", 0xb7),
  893. CHAR_REF("cfr;", 0x0001d520),
  894. CHAR_REF("chcy;", 0x0447),
  895. CHAR_REF("check;", 0x2713),
  896. CHAR_REF("checkmark;", 0x2713),
  897. CHAR_REF("chi;", 0x03c7),
  898. CHAR_REF("cir;", 0x25cb),
  899. CHAR_REF("cirE;", 0x29c3),
  900. CHAR_REF("circ;", 0x02c6),
  901. CHAR_REF("circeq;", 0x2257),
  902. CHAR_REF("circlearrowleft;", 0x21ba),
  903. CHAR_REF("circlearrowright;", 0x21bb),
  904. CHAR_REF("circledR;", 0xae),
  905. CHAR_REF("circledS;", 0x24c8),
  906. CHAR_REF("circledast;", 0x229b),
  907. CHAR_REF("circledcirc;", 0x229a),
  908. CHAR_REF("circleddash;", 0x229d),
  909. CHAR_REF("cire;", 0x2257),
  910. CHAR_REF("cirfnint;", 0x2a10),
  911. CHAR_REF("cirmid;", 0x2aef),
  912. CHAR_REF("cirscir;", 0x29c2),
  913. CHAR_REF("clubs;", 0x2663),
  914. CHAR_REF("clubsuit;", 0x2663),
  915. CHAR_REF("colon;", 0x3a),
  916. CHAR_REF("colone;", 0x2254),
  917. CHAR_REF("coloneq;", 0x2254),
  918. CHAR_REF("comma;", 0x2c),
  919. CHAR_REF("commat;", 0x40),
  920. CHAR_REF("comp;", 0x2201),
  921. CHAR_REF("compfn;", 0x2218),
  922. CHAR_REF("complement;", 0x2201),
  923. CHAR_REF("complexes;", 0x2102),
  924. CHAR_REF("cong;", 0x2245),
  925. CHAR_REF("congdot;", 0x2a6d),
  926. CHAR_REF("conint;", 0x222e),
  927. CHAR_REF("copf;", 0x0001d554),
  928. CHAR_REF("coprod;", 0x2210),
  929. CHAR_REF("copy;", 0xa9),
  930. CHAR_REF("copy", 0xa9),
  931. CHAR_REF("copysr;", 0x2117),
  932. CHAR_REF("crarr;", 0x21b5),
  933. CHAR_REF("cross;", 0x2717),
  934. CHAR_REF("cscr;", 0x0001d4b8),
  935. CHAR_REF("csub;", 0x2acf),
  936. CHAR_REF("csube;", 0x2ad1),
  937. CHAR_REF("csup;", 0x2ad0),
  938. CHAR_REF("csupe;", 0x2ad2),
  939. CHAR_REF("ctdot;", 0x22ef),
  940. CHAR_REF("cudarrl;", 0x2938),
  941. CHAR_REF("cudarrr;", 0x2935),
  942. CHAR_REF("cuepr;", 0x22de),
  943. CHAR_REF("cuesc;", 0x22df),
  944. CHAR_REF("cularr;", 0x21b6),
  945. CHAR_REF("cularrp;", 0x293d),
  946. CHAR_REF("cup;", 0x222a),
  947. CHAR_REF("cupbrcap;", 0x2a48),
  948. CHAR_REF("cupcap;", 0x2a46),
  949. CHAR_REF("cupcup;", 0x2a4a),
  950. CHAR_REF("cupdot;", 0x228d),
  951. CHAR_REF("cupor;", 0x2a45),
  952. MULTI_CHAR_REF("cups;", 0x222a, 0xfe00),
  953. CHAR_REF("curarr;", 0x21b7),
  954. CHAR_REF("curarrm;", 0x293c),
  955. CHAR_REF("curlyeqprec;", 0x22de),
  956. CHAR_REF("curlyeqsucc;", 0x22df),
  957. CHAR_REF("curlyvee;", 0x22ce),
  958. CHAR_REF("curlywedge;", 0x22cf),
  959. CHAR_REF("curren;", 0xa4),
  960. CHAR_REF("curren", 0xa4),
  961. CHAR_REF("curvearrowleft;", 0x21b6),
  962. CHAR_REF("curvearrowright;", 0x21b7),
  963. CHAR_REF("cuvee;", 0x22ce),
  964. CHAR_REF("cuwed;", 0x22cf),
  965. CHAR_REF("cwconint;", 0x2232),
  966. CHAR_REF("cwint;", 0x2231),
  967. CHAR_REF("cylcty;", 0x232d),
  968. CHAR_REF("dArr;", 0x21d3),
  969. CHAR_REF("dHar;", 0x2965),
  970. CHAR_REF("dagger;", 0x2020),
  971. CHAR_REF("daleth;", 0x2138),
  972. CHAR_REF("darr;", 0x2193),
  973. CHAR_REF("dash;", 0x2010),
  974. CHAR_REF("dashv;", 0x22a3),
  975. CHAR_REF("dbkarow;", 0x290f),
  976. CHAR_REF("dblac;", 0x02dd),
  977. CHAR_REF("dcaron;", 0x010f),
  978. CHAR_REF("dcy;", 0x0434),
  979. CHAR_REF("dd;", 0x2146),
  980. CHAR_REF("ddagger;", 0x2021),
  981. CHAR_REF("ddarr;", 0x21ca),
  982. CHAR_REF("ddotseq;", 0x2a77),
  983. CHAR_REF("deg;", 0xb0),
  984. CHAR_REF("deg", 0xb0),
  985. CHAR_REF("delta;", 0x03b4),
  986. CHAR_REF("demptyv;", 0x29b1),
  987. CHAR_REF("dfisht;", 0x297f),
  988. CHAR_REF("dfr;", 0x0001d521),
  989. CHAR_REF("dharl;", 0x21c3),
  990. CHAR_REF("dharr;", 0x21c2),
  991. CHAR_REF("diam;", 0x22c4),
  992. CHAR_REF("diamond;", 0x22c4),
  993. CHAR_REF("diamondsuit;", 0x2666),
  994. CHAR_REF("diams;", 0x2666),
  995. CHAR_REF("die;", 0xa8),
  996. CHAR_REF("digamma;", 0x03dd),
  997. CHAR_REF("disin;", 0x22f2),
  998. CHAR_REF("div;", 0xf7),
  999. CHAR_REF("divide;", 0xf7),
  1000. CHAR_REF("divide", 0xf7),
  1001. CHAR_REF("divideontimes;", 0x22c7),
  1002. CHAR_REF("divonx;", 0x22c7),
  1003. CHAR_REF("djcy;", 0x0452),
  1004. CHAR_REF("dlcorn;", 0x231e),
  1005. CHAR_REF("dlcrop;", 0x230d),
  1006. CHAR_REF("dollar;", 0x24),
  1007. CHAR_REF("dopf;", 0x0001d555),
  1008. CHAR_REF("dot;", 0x02d9),
  1009. CHAR_REF("doteq;", 0x2250),
  1010. CHAR_REF("doteqdot;", 0x2251),
  1011. CHAR_REF("dotminus;", 0x2238),
  1012. CHAR_REF("dotplus;", 0x2214),
  1013. CHAR_REF("dotsquare;", 0x22a1),
  1014. CHAR_REF("doublebarwedge;", 0x2306),
  1015. CHAR_REF("downarrow;", 0x2193),
  1016. CHAR_REF("downdownarrows;", 0x21ca),
  1017. CHAR_REF("downharpoonleft;", 0x21c3),
  1018. CHAR_REF("downharpoonright;", 0x21c2),
  1019. CHAR_REF("drbkarow;", 0x2910),
  1020. CHAR_REF("drcorn;", 0x231f),
  1021. CHAR_REF("drcrop;", 0x230c),
  1022. CHAR_REF("dscr;", 0x0001d4b9),
  1023. CHAR_REF("dscy;", 0x0455),
  1024. CHAR_REF("dsol;", 0x29f6),
  1025. CHAR_REF("dstrok;", 0x0111),
  1026. CHAR_REF("dtdot;", 0x22f1),
  1027. CHAR_REF("dtri;", 0x25bf),
  1028. CHAR_REF("dtrif;", 0x25be),
  1029. CHAR_REF("duarr;", 0x21f5),
  1030. CHAR_REF("duhar;", 0x296f),
  1031. CHAR_REF("dwangle;", 0x29a6),
  1032. CHAR_REF("dzcy;", 0x045f),
  1033. CHAR_REF("dzigrarr;", 0x27ff),
  1034. CHAR_REF("eDDot;", 0x2a77),
  1035. CHAR_REF("eDot;", 0x2251),
  1036. CHAR_REF("eacute;", 0xe9),
  1037. CHAR_REF("eacute", 0xe9),
  1038. CHAR_REF("easter;", 0x2a6e),
  1039. CHAR_REF("ecaron;", 0x011b),
  1040. CHAR_REF("ecir;", 0x2256),
  1041. CHAR_REF("ecirc;", 0xea),
  1042. CHAR_REF("ecirc", 0xea),
  1043. CHAR_REF("ecolon;", 0x2255),
  1044. CHAR_REF("ecy;", 0x044d),
  1045. CHAR_REF("edot;", 0x0117),
  1046. CHAR_REF("ee;", 0x2147),
  1047. CHAR_REF("efDot;", 0x2252),
  1048. CHAR_REF("efr;", 0x0001d522),
  1049. CHAR_REF("eg;", 0x2a9a),
  1050. CHAR_REF("egrave;", 0xe8),
  1051. CHAR_REF("egrave", 0xe8),
  1052. CHAR_REF("egs;", 0x2a96),
  1053. CHAR_REF("egsdot;", 0x2a98),
  1054. CHAR_REF("el;", 0x2a99),
  1055. CHAR_REF("elinters;", 0x23e7),
  1056. CHAR_REF("ell;", 0x2113),
  1057. CHAR_REF("els;", 0x2a95),
  1058. CHAR_REF("elsdot;", 0x2a97),
  1059. CHAR_REF("emacr;", 0x0113),
  1060. CHAR_REF("empty;", 0x2205),
  1061. CHAR_REF("emptyset;", 0x2205),
  1062. CHAR_REF("emptyv;", 0x2205),
  1063. CHAR_REF("emsp13;", 0x2004),
  1064. CHAR_REF("emsp14;", 0x2005),
  1065. CHAR_REF("emsp;", 0x2003),
  1066. CHAR_REF("eng;", 0x014b),
  1067. CHAR_REF("ensp;", 0x2002),
  1068. CHAR_REF("eogon;", 0x0119),
  1069. CHAR_REF("eopf;", 0x0001d556),
  1070. CHAR_REF("epar;", 0x22d5),
  1071. CHAR_REF("eparsl;", 0x29e3),
  1072. CHAR_REF("eplus;", 0x2a71),
  1073. CHAR_REF("epsi;", 0x03b5),
  1074. CHAR_REF("epsilon;", 0x03b5),
  1075. CHAR_REF("epsiv;", 0x03f5),
  1076. CHAR_REF("eqcirc;", 0x2256),
  1077. CHAR_REF("eqcolon;", 0x2255),
  1078. CHAR_REF("eqsim;", 0x2242),
  1079. CHAR_REF("eqslantgtr;", 0x2a96),
  1080. CHAR_REF("eqslantless;", 0x2a95),
  1081. CHAR_REF("equals;", 0x3d),
  1082. CHAR_REF("equest;", 0x225f),
  1083. CHAR_REF("equiv;", 0x2261),
  1084. CHAR_REF("equivDD;", 0x2a78),
  1085. CHAR_REF("eqvparsl;", 0x29e5),
  1086. CHAR_REF("erDot;", 0x2253),
  1087. CHAR_REF("erarr;", 0x2971),
  1088. CHAR_REF("escr;", 0x212f),
  1089. CHAR_REF("esdot;", 0x2250),
  1090. CHAR_REF("esim;", 0x2242),
  1091. CHAR_REF("eta;", 0x03b7),
  1092. CHAR_REF("eth;", 0xf0),
  1093. CHAR_REF("eth", 0xf0),
  1094. CHAR_REF("euml;", 0xeb),
  1095. CHAR_REF("euml", 0xeb),
  1096. CHAR_REF("euro;", 0x20ac),
  1097. CHAR_REF("excl;", 0x21),
  1098. CHAR_REF("exist;", 0x2203),
  1099. CHAR_REF("expectation;", 0x2130),
  1100. CHAR_REF("exponentiale;", 0x2147),
  1101. CHAR_REF("fallingdotseq;", 0x2252),
  1102. CHAR_REF("fcy;", 0x0444),
  1103. CHAR_REF("female;", 0x2640),
  1104. CHAR_REF("ffilig;", 0xfb03),
  1105. CHAR_REF("fflig;", 0xfb00),
  1106. CHAR_REF("ffllig;", 0xfb04),
  1107. CHAR_REF("ffr;", 0x0001d523),
  1108. CHAR_REF("filig;", 0xfb01),
  1109. MULTI_CHAR_REF("fjlig;", 0x66, 0x6a),
  1110. CHAR_REF("flat;", 0x266d),
  1111. CHAR_REF("fllig;", 0xfb02),
  1112. CHAR_REF("fltns;", 0x25b1),
  1113. CHAR_REF("fnof;", 0x0192),
  1114. CHAR_REF("fopf;", 0x0001d557),
  1115. CHAR_REF("forall;", 0x2200),
  1116. CHAR_REF("fork;", 0x22d4),
  1117. CHAR_REF("forkv;", 0x2ad9),
  1118. CHAR_REF("fpartint;", 0x2a0d),
  1119. CHAR_REF("frac12", 0xbd),
  1120. CHAR_REF("frac12;", 0xbd),
  1121. CHAR_REF("frac13;", 0x2153),
  1122. CHAR_REF("frac14", 0xbc),
  1123. CHAR_REF("frac14;", 0xbc),
  1124. CHAR_REF("frac15;", 0x2155),
  1125. CHAR_REF("frac16;", 0x2159),
  1126. CHAR_REF("frac18;", 0x215b),
  1127. CHAR_REF("frac23;", 0x2154),
  1128. CHAR_REF("frac25;", 0x2156),
  1129. CHAR_REF("frac34", 0xbe),
  1130. CHAR_REF("frac34;", 0xbe),
  1131. CHAR_REF("frac35;", 0x2157),
  1132. CHAR_REF("frac38;", 0x215c),
  1133. CHAR_REF("frac45;", 0x2158),
  1134. CHAR_REF("frac56;", 0x215a),
  1135. CHAR_REF("frac58;", 0x215d),
  1136. CHAR_REF("frac78;", 0x215e),
  1137. CHAR_REF("frasl;", 0x2044),
  1138. CHAR_REF("frown;", 0x2322),
  1139. CHAR_REF("fscr;", 0x0001d4bb),
  1140. CHAR_REF("gE;", 0x2267),
  1141. CHAR_REF("gEl;", 0x2a8c),
  1142. CHAR_REF("gacute;", 0x01f5),
  1143. CHAR_REF("gamma;", 0x03b3),
  1144. CHAR_REF("gammad;", 0x03dd),
  1145. CHAR_REF("gap;", 0x2a86),
  1146. CHAR_REF("gbreve;", 0x011f),
  1147. CHAR_REF("gcirc;", 0x011d),
  1148. CHAR_REF("gcy;", 0x0433),
  1149. CHAR_REF("gdot;", 0x0121),
  1150. CHAR_REF("ge;", 0x2265),
  1151. CHAR_REF("gel;", 0x22db),
  1152. CHAR_REF("geq;", 0x2265),
  1153. CHAR_REF("geqq;", 0x2267),
  1154. CHAR_REF("geqslant;", 0x2a7e),
  1155. CHAR_REF("ges;", 0x2a7e),
  1156. CHAR_REF("gescc;", 0x2aa9),
  1157. CHAR_REF("gesdot;", 0x2a80),
  1158. CHAR_REF("gesdoto;", 0x2a82),
  1159. CHAR_REF("gesdotol;", 0x2a84),
  1160. MULTI_CHAR_REF("gesl;", 0x22db, 0xfe00),
  1161. CHAR_REF("gesles;", 0x2a94),
  1162. CHAR_REF("gfr;", 0x0001d524),
  1163. CHAR_REF("gg;", 0x226b),
  1164. CHAR_REF("ggg;", 0x22d9),
  1165. CHAR_REF("gimel;", 0x2137),
  1166. CHAR_REF("gjcy;", 0x0453),
  1167. CHAR_REF("gl;", 0x2277),
  1168. CHAR_REF("glE;", 0x2a92),
  1169. CHAR_REF("gla;", 0x2aa5),
  1170. CHAR_REF("glj;", 0x2aa4),
  1171. CHAR_REF("gnE;", 0x2269),
  1172. CHAR_REF("gnap;", 0x2a8a),
  1173. CHAR_REF("gnapprox;", 0x2a8a),
  1174. CHAR_REF("gne;", 0x2a88),
  1175. CHAR_REF("gneq;", 0x2a88),
  1176. CHAR_REF("gneqq;", 0x2269),
  1177. CHAR_REF("gnsim;", 0x22e7),
  1178. CHAR_REF("gopf;", 0x0001d558),
  1179. CHAR_REF("grave;", 0x60),
  1180. CHAR_REF("gscr;", 0x210a),
  1181. CHAR_REF("gsim;", 0x2273),
  1182. CHAR_REF("gsime;", 0x2a8e),
  1183. CHAR_REF("gsiml;", 0x2a90),
  1184. CHAR_REF("gt;", 0x3e),
  1185. CHAR_REF("gt", 0x3e),
  1186. CHAR_REF("gtcc;", 0x2aa7),
  1187. CHAR_REF("gtcir;", 0x2a7a),
  1188. CHAR_REF("gtdot;", 0x22d7),
  1189. CHAR_REF("gtlPar;", 0x2995),
  1190. CHAR_REF("gtquest;", 0x2a7c),
  1191. CHAR_REF("gtrapprox;", 0x2a86),
  1192. CHAR_REF("gtrarr;", 0x2978),
  1193. CHAR_REF("gtrdot;", 0x22d7),
  1194. CHAR_REF("gtreqless;", 0x22db),
  1195. CHAR_REF("gtreqqless;", 0x2a8c),
  1196. CHAR_REF("gtrless;", 0x2277),
  1197. CHAR_REF("gtrsim;", 0x2273),
  1198. MULTI_CHAR_REF("gvertneqq;", 0x2269, 0xfe00),
  1199. MULTI_CHAR_REF("gvnE;", 0x2269, 0xfe00),
  1200. CHAR_REF("hArr;", 0x21d4),
  1201. CHAR_REF("hairsp;", 0x200a),
  1202. CHAR_REF("half;", 0xbd),
  1203. CHAR_REF("hamilt;", 0x210b),
  1204. CHAR_REF("hardcy;", 0x044a),
  1205. CHAR_REF("harr;", 0x2194),
  1206. CHAR_REF("harrcir;", 0x2948),
  1207. CHAR_REF("harrw;", 0x21ad),
  1208. CHAR_REF("hbar;", 0x210f),
  1209. CHAR_REF("hcirc;", 0x0125),
  1210. CHAR_REF("hearts;", 0x2665),
  1211. CHAR_REF("heartsuit;", 0x2665),
  1212. CHAR_REF("hellip;", 0x2026),
  1213. CHAR_REF("hercon;", 0x22b9),
  1214. CHAR_REF("hfr;", 0x0001d525),
  1215. CHAR_REF("hksearow;", 0x2925),
  1216. CHAR_REF("hkswarow;", 0x2926),
  1217. CHAR_REF("hoarr;", 0x21ff),
  1218. CHAR_REF("homtht;", 0x223b),
  1219. CHAR_REF("hookleftarrow;", 0x21a9),
  1220. CHAR_REF("hookrightarrow;", 0x21aa),
  1221. CHAR_REF("hopf;", 0x0001d559),
  1222. CHAR_REF("horbar;", 0x2015),
  1223. CHAR_REF("hscr;", 0x0001d4bd),
  1224. CHAR_REF("hslash;", 0x210f),
  1225. CHAR_REF("hstrok;", 0x0127),
  1226. CHAR_REF("hybull;", 0x2043),
  1227. CHAR_REF("hyphen;", 0x2010),
  1228. CHAR_REF("iacute;", 0xed),
  1229. CHAR_REF("iacute", 0xed),
  1230. CHAR_REF("ic;", 0x2063),
  1231. CHAR_REF("icirc;", 0xee),
  1232. CHAR_REF("icirc", 0xee),
  1233. CHAR_REF("icy;", 0x0438),
  1234. CHAR_REF("iecy;", 0x0435),
  1235. CHAR_REF("iexcl;", 0xa1),
  1236. CHAR_REF("iexcl", 0xa1),
  1237. CHAR_REF("iff;", 0x21d4),
  1238. CHAR_REF("ifr;", 0x0001d526),
  1239. CHAR_REF("igrave;", 0xec),
  1240. CHAR_REF("igrave", 0xec),
  1241. CHAR_REF("ii;", 0x2148),
  1242. CHAR_REF("iiiint;", 0x2a0c),
  1243. CHAR_REF("iiint;", 0x222d),
  1244. CHAR_REF("iinfin;", 0x29dc),
  1245. CHAR_REF("iiota;", 0x2129),
  1246. CHAR_REF("ijlig;", 0x0133),
  1247. CHAR_REF("imacr;", 0x012b),
  1248. CHAR_REF("image;", 0x2111),
  1249. CHAR_REF("imagline;", 0x2110),
  1250. CHAR_REF("imagpart;", 0x2111),
  1251. CHAR_REF("imath;", 0x0131),
  1252. CHAR_REF("imof;", 0x22b7),
  1253. CHAR_REF("imped;", 0x01b5),
  1254. CHAR_REF("in;", 0x2208),
  1255. CHAR_REF("incare;", 0x2105),
  1256. CHAR_REF("infin;", 0x221e),
  1257. CHAR_REF("infintie;", 0x29dd),
  1258. CHAR_REF("inodot;", 0x0131),
  1259. CHAR_REF("int;", 0x222b),
  1260. CHAR_REF("intcal;", 0x22ba),
  1261. CHAR_REF("integers;", 0x2124),
  1262. CHAR_REF("intercal;", 0x22ba),
  1263. CHAR_REF("intlarhk;", 0x2a17),
  1264. CHAR_REF("intprod;", 0x2a3c),
  1265. CHAR_REF("iocy;", 0x0451),
  1266. CHAR_REF("iogon;", 0x012f),
  1267. CHAR_REF("iopf;", 0x0001d55a),
  1268. CHAR_REF("iota;", 0x03b9),
  1269. CHAR_REF("iprod;", 0x2a3c),
  1270. CHAR_REF("iquest;", 0xbf),
  1271. CHAR_REF("iquest", 0xbf),
  1272. CHAR_REF("iscr;", 0x0001d4be),
  1273. CHAR_REF("isin;", 0x2208),
  1274. CHAR_REF("isinE;", 0x22f9),
  1275. CHAR_REF("isindot;", 0x22f5),
  1276. CHAR_REF("isins;", 0x22f4),
  1277. CHAR_REF("isinsv;", 0x22f3),
  1278. CHAR_REF("isinv;", 0x2208),
  1279. CHAR_REF("it;", 0x2062),
  1280. CHAR_REF("itilde;", 0x0129),
  1281. CHAR_REF("iukcy;", 0x0456),
  1282. CHAR_REF("iuml;", 0xef),
  1283. CHAR_REF("iuml", 0xef),
  1284. CHAR_REF("jcirc;", 0x0135),
  1285. CHAR_REF("jcy;", 0x0439),
  1286. CHAR_REF("jfr;", 0x0001d527),
  1287. CHAR_REF("jmath;", 0x0237),
  1288. CHAR_REF("jopf;", 0x0001d55b),
  1289. CHAR_REF("jscr;", 0x0001d4bf),
  1290. CHAR_REF("jsercy;", 0x0458),
  1291. CHAR_REF("jukcy;", 0x0454),
  1292. CHAR_REF("kappa;", 0x03ba),
  1293. CHAR_REF("kappav;", 0x03f0),
  1294. CHAR_REF("kcedil;", 0x0137),
  1295. CHAR_REF("kcy;", 0x043a),
  1296. CHAR_REF("kfr;", 0x0001d528),
  1297. CHAR_REF("kgreen;", 0x0138),
  1298. CHAR_REF("khcy;", 0x0445),
  1299. CHAR_REF("kjcy;", 0x045c),
  1300. CHAR_REF("kopf;", 0x0001d55c),
  1301. CHAR_REF("kscr;", 0x0001d4c0),
  1302. CHAR_REF("lAarr;", 0x21da),
  1303. CHAR_REF("lArr;", 0x21d0),
  1304. CHAR_REF("lAtail;", 0x291b),
  1305. CHAR_REF("lBarr;", 0x290e),
  1306. CHAR_REF("lE;", 0x2266),
  1307. CHAR_REF("lEg;", 0x2a8b),
  1308. CHAR_REF("lHar;", 0x2962),
  1309. CHAR_REF("lacute;", 0x013a),
  1310. CHAR_REF("laemptyv;", 0x29b4),
  1311. CHAR_REF("lagran;", 0x2112),
  1312. CHAR_REF("lambda;", 0x03bb),
  1313. CHAR_REF("lang;", 0x27e8),
  1314. CHAR_REF("langd;", 0x2991),
  1315. CHAR_REF("langle;", 0x27e8),
  1316. CHAR_REF("lap;", 0x2a85),
  1317. CHAR_REF("laquo;", 0xab),
  1318. CHAR_REF("laquo", 0xab),
  1319. CHAR_REF("larr;", 0x2190),
  1320. CHAR_REF("larrb;", 0x21e4),
  1321. CHAR_REF("larrbfs;", 0x291f),
  1322. CHAR_REF("larrfs;", 0x291d),
  1323. CHAR_REF("larrhk;", 0x21a9),
  1324. CHAR_REF("larrlp;", 0x21ab),
  1325. CHAR_REF("larrpl;", 0x2939),
  1326. CHAR_REF("larrsim;", 0x2973),
  1327. CHAR_REF("larrtl;", 0x21a2),
  1328. CHAR_REF("lat;", 0x2aab),
  1329. CHAR_REF("latail;", 0x2919),
  1330. CHAR_REF("late;", 0x2aad),
  1331. MULTI_CHAR_REF("lates;", 0x2aad, 0xfe00),
  1332. CHAR_REF("lbarr;", 0x290c),
  1333. CHAR_REF("lbbrk;", 0x2772),
  1334. CHAR_REF("lbrace;", 0x7b),
  1335. CHAR_REF("lbrack;", 0x5b),
  1336. CHAR_REF("lbrke;", 0x298b),
  1337. CHAR_REF("lbrksld;", 0x298f),
  1338. CHAR_REF("lbrkslu;", 0x298d),
  1339. CHAR_REF("lcaron;", 0x013e),
  1340. CHAR_REF("lcedil;", 0x013c),
  1341. CHAR_REF("lceil;", 0x2308),
  1342. CHAR_REF("lcub;", 0x7b),
  1343. CHAR_REF("lcy;", 0x043b),
  1344. CHAR_REF("ldca;", 0x2936),
  1345. CHAR_REF("ldquo;", 0x201c),
  1346. CHAR_REF("ldquor;", 0x201e),
  1347. CHAR_REF("ldrdhar;", 0x2967),
  1348. CHAR_REF("ldrushar;", 0x294b),
  1349. CHAR_REF("ldsh;", 0x21b2),
  1350. CHAR_REF("le;", 0x2264),
  1351. CHAR_REF("leftarrow;", 0x2190),
  1352. CHAR_REF("leftarrowtail;", 0x21a2),
  1353. CHAR_REF("leftharpoondown;", 0x21bd),
  1354. CHAR_REF("leftharpoonup;", 0x21bc),
  1355. CHAR_REF("leftleftarrows;", 0x21c7),
  1356. CHAR_REF("leftrightarrow;", 0x2194),
  1357. CHAR_REF("leftrightarrows;", 0x21c6),
  1358. CHAR_REF("leftrightharpoons;", 0x21cb),
  1359. CHAR_REF("leftrightsquigarrow;", 0x21ad),
  1360. CHAR_REF("leftthreetimes;", 0x22cb),
  1361. CHAR_REF("leg;", 0x22da),
  1362. CHAR_REF("leq;", 0x2264),
  1363. CHAR_REF("leqq;", 0x2266),
  1364. CHAR_REF("leqslant;", 0x2a7d),
  1365. CHAR_REF("les;", 0x2a7d),
  1366. CHAR_REF("lescc;", 0x2aa8),
  1367. CHAR_REF("lesdot;", 0x2a7f),
  1368. CHAR_REF("lesdoto;", 0x2a81),
  1369. CHAR_REF("lesdotor;", 0x2a83),
  1370. MULTI_CHAR_REF("lesg;", 0x22da, 0xfe00),
  1371. CHAR_REF("lesges;", 0x2a93),
  1372. CHAR_REF("lessapprox;", 0x2a85),
  1373. CHAR_REF("lessdot;", 0x22d6),
  1374. CHAR_REF("lesseqgtr;", 0x22da),
  1375. CHAR_REF("lesseqqgtr;", 0x2a8b),
  1376. CHAR_REF("lessgtr;", 0x2276),
  1377. CHAR_REF("lesssim;", 0x2272),
  1378. CHAR_REF("lfisht;", 0x297c),
  1379. CHAR_REF("lfloor;", 0x230a),
  1380. CHAR_REF("lfr;", 0x0001d529),
  1381. CHAR_REF("lg;", 0x2276),
  1382. CHAR_REF("lgE;", 0x2a91),
  1383. CHAR_REF("lhard;", 0x21bd),
  1384. CHAR_REF("lharu;", 0x21bc),
  1385. CHAR_REF("lharul;", 0x296a),
  1386. CHAR_REF("lhblk;", 0x2584),
  1387. CHAR_REF("ljcy;", 0x0459),
  1388. CHAR_REF("ll;", 0x226a),
  1389. CHAR_REF("llarr;", 0x21c7),
  1390. CHAR_REF("llcorner;", 0x231e),
  1391. CHAR_REF("llhard;", 0x296b),
  1392. CHAR_REF("lltri;", 0x25fa),
  1393. CHAR_REF("lmidot;", 0x0140),
  1394. CHAR_REF("lmoust;", 0x23b0),
  1395. CHAR_REF("lmoustache;", 0x23b0),
  1396. CHAR_REF("lnE;", 0x2268),
  1397. CHAR_REF("lnap;", 0x2a89),
  1398. CHAR_REF("lnapprox;", 0x2a89),
  1399. CHAR_REF("lne;", 0x2a87),
  1400. CHAR_REF("lneq;", 0x2a87),
  1401. CHAR_REF("lneqq;", 0x2268),
  1402. CHAR_REF("lnsim;", 0x22e6),
  1403. CHAR_REF("loang;", 0x27ec),
  1404. CHAR_REF("loarr;", 0x21fd),
  1405. CHAR_REF("lobrk;", 0x27e6),
  1406. CHAR_REF("longleftarrow;", 0x27f5),
  1407. CHAR_REF("longleftrightarrow;", 0x27f7),
  1408. CHAR_REF("longmapsto;", 0x27fc),
  1409. CHAR_REF("longrightarrow;", 0x27f6),
  1410. CHAR_REF("looparrowleft;", 0x21ab),
  1411. CHAR_REF("looparrowright;", 0x21ac),
  1412. CHAR_REF("lopar;", 0x2985),
  1413. CHAR_REF("lopf;", 0x0001d55d),
  1414. CHAR_REF("loplus;", 0x2a2d),
  1415. CHAR_REF("lotimes;", 0x2a34),
  1416. CHAR_REF("lowast;", 0x2217),
  1417. CHAR_REF("lowbar;", 0x5f),
  1418. CHAR_REF("loz;", 0x25ca),
  1419. CHAR_REF("lozenge;", 0x25ca),
  1420. CHAR_REF("lozf;", 0x29eb),
  1421. CHAR_REF("lpar;", 0x28),
  1422. CHAR_REF("lparlt;", 0x2993),
  1423. CHAR_REF("lrarr;", 0x21c6),
  1424. CHAR_REF("lrcorner;", 0x231f),
  1425. CHAR_REF("lrhar;", 0x21cb),
  1426. CHAR_REF("lrhard;", 0x296d),
  1427. CHAR_REF("lrm;", 0x200e),
  1428. CHAR_REF("lrtri;", 0x22bf),
  1429. CHAR_REF("lsaquo;", 0x2039),
  1430. CHAR_REF("lscr;", 0x0001d4c1),
  1431. CHAR_REF("lsh;", 0x21b0),
  1432. CHAR_REF("lsim;", 0x2272),
  1433. CHAR_REF("lsime;", 0x2a8d),
  1434. CHAR_REF("lsimg;", 0x2a8f),
  1435. CHAR_REF("lsqb;", 0x5b),
  1436. CHAR_REF("lsquo;", 0x2018),
  1437. CHAR_REF("lsquor;", 0x201a),
  1438. CHAR_REF("lstrok;", 0x0142),
  1439. CHAR_REF("lt;", 0x3c),
  1440. CHAR_REF("lt", 0x3c),
  1441. CHAR_REF("ltcc;", 0x2aa6),
  1442. CHAR_REF("ltcir;", 0x2a79),
  1443. CHAR_REF("ltdot;", 0x22d6),
  1444. CHAR_REF("lthree;", 0x22cb),
  1445. CHAR_REF("ltimes;", 0x22c9),
  1446. CHAR_REF("ltlarr;", 0x2976),
  1447. CHAR_REF("ltquest;", 0x2a7b),
  1448. CHAR_REF("ltrPar;", 0x2996),
  1449. CHAR_REF("ltri;", 0x25c3),
  1450. CHAR_REF("ltrie;", 0x22b4),
  1451. CHAR_REF("ltrif;", 0x25c2),
  1452. CHAR_REF("lurdshar;", 0x294a),
  1453. CHAR_REF("luruhar;", 0x2966),
  1454. MULTI_CHAR_REF("lvertneqq;", 0x2268, 0xfe00),
  1455. MULTI_CHAR_REF("lvnE;", 0x2268, 0xfe00),
  1456. CHAR_REF("mDDot;", 0x223a),
  1457. CHAR_REF("macr;", 0xaf),
  1458. CHAR_REF("macr", 0xaf),
  1459. CHAR_REF("male;", 0x2642),
  1460. CHAR_REF("malt;", 0x2720),
  1461. CHAR_REF("maltese;", 0x2720),
  1462. CHAR_REF("map;", 0x21a6),
  1463. CHAR_REF("mapsto;", 0x21a6),
  1464. CHAR_REF("mapstodown;", 0x21a7),
  1465. CHAR_REF("mapstoleft;", 0x21a4),
  1466. CHAR_REF("mapstoup;", 0x21a5),
  1467. CHAR_REF("marker;", 0x25ae),
  1468. CHAR_REF("mcomma;", 0x2a29),
  1469. CHAR_REF("mcy;", 0x043c),
  1470. CHAR_REF("mdash;", 0x2014),
  1471. CHAR_REF("measuredangle;", 0x2221),
  1472. CHAR_REF("mfr;", 0x0001d52a),
  1473. CHAR_REF("mho;", 0x2127),
  1474. CHAR_REF("micro;", 0xb5),
  1475. CHAR_REF("micro", 0xb5),
  1476. CHAR_REF("mid;", 0x2223),
  1477. CHAR_REF("midast;", 0x2a),
  1478. CHAR_REF("midcir;", 0x2af0),
  1479. CHAR_REF("middot;", 0xb7),
  1480. CHAR_REF("middot", 0xb7),
  1481. CHAR_REF("minus;", 0x2212),
  1482. CHAR_REF("minusb;", 0x229f),
  1483. CHAR_REF("minusd;", 0x2238),
  1484. CHAR_REF("minusdu;", 0x2a2a),
  1485. CHAR_REF("mlcp;", 0x2adb),
  1486. CHAR_REF("mldr;", 0x2026),
  1487. CHAR_REF("mnplus;", 0x2213),
  1488. CHAR_REF("models;", 0x22a7),
  1489. CHAR_REF("mopf;", 0x0001d55e),
  1490. CHAR_REF("mp;", 0x2213),
  1491. CHAR_REF("mscr;", 0x0001d4c2),
  1492. CHAR_REF("mstpos;", 0x223e),
  1493. CHAR_REF("mu;", 0x03bc),
  1494. CHAR_REF("multimap;", 0x22b8),
  1495. CHAR_REF("mumap;", 0x22b8),
  1496. MULTI_CHAR_REF("nGg;", 0x22d9, 0x0338),
  1497. MULTI_CHAR_REF("nGt;", 0x226b, 0x20d2),
  1498. MULTI_CHAR_REF("nGtv;", 0x226b, 0x0338),
  1499. CHAR_REF("nLeftarrow;", 0x21cd),
  1500. CHAR_REF("nLeftrightarrow;", 0x21ce),
  1501. MULTI_CHAR_REF("nLl;", 0x22d8, 0x0338),
  1502. MULTI_CHAR_REF("nLt;", 0x226a, 0x20d2),
  1503. MULTI_CHAR_REF("nLtv;", 0x226a, 0x0338),
  1504. CHAR_REF("nRightarrow;", 0x21cf),
  1505. CHAR_REF("nVDash;", 0x22af),
  1506. CHAR_REF("nVdash;", 0x22ae),
  1507. CHAR_REF("nabla;", 0x2207),
  1508. CHAR_REF("nacute;", 0x0144),
  1509. MULTI_CHAR_REF("nang;", 0x2220, 0x20d2),
  1510. CHAR_REF("nap;", 0x2249),
  1511. MULTI_CHAR_REF("napE;", 0x2a70, 0x0338),
  1512. MULTI_CHAR_REF("napid;", 0x224b, 0x0338),
  1513. CHAR_REF("napos;", 0x0149),
  1514. CHAR_REF("napprox;", 0x2249),
  1515. CHAR_REF("natur;", 0x266e),
  1516. CHAR_REF("natural;", 0x266e),
  1517. CHAR_REF("naturals;", 0x2115),
  1518. CHAR_REF("nbsp;", 0xa0),
  1519. CHAR_REF("nbsp", 0xa0),
  1520. MULTI_CHAR_REF("nbump;", 0x224e, 0x0338),
  1521. MULTI_CHAR_REF("nbumpe;", 0x224f, 0x0338),
  1522. CHAR_REF("ncap;", 0x2a43),
  1523. CHAR_REF("ncaron;", 0x0148),
  1524. CHAR_REF("ncedil;", 0x0146),
  1525. CHAR_REF("ncong;", 0x2247),
  1526. MULTI_CHAR_REF("ncongdot;", 0x2a6d, 0x0338),
  1527. CHAR_REF("ncup;", 0x2a42),
  1528. CHAR_REF("ncy;", 0x043d),
  1529. CHAR_REF("ndash;", 0x2013),
  1530. CHAR_REF("ne;", 0x2260),
  1531. CHAR_REF("neArr;", 0x21d7),
  1532. CHAR_REF("nearhk;", 0x2924),
  1533. CHAR_REF("nearr;", 0x2197),
  1534. CHAR_REF("nearrow;", 0x2197),
  1535. MULTI_CHAR_REF("nedot;", 0x2250, 0x0338),
  1536. CHAR_REF("nequiv;", 0x2262),
  1537. CHAR_REF("nesear;", 0x2928),
  1538. MULTI_CHAR_REF("nesim;", 0x2242, 0x0338),
  1539. CHAR_REF("nexist;", 0x2204),
  1540. CHAR_REF("nexists;", 0x2204),
  1541. CHAR_REF("nfr;", 0x0001d52b),
  1542. MULTI_CHAR_REF("ngE;", 0x2267, 0x0338),
  1543. CHAR_REF("nge;", 0x2271),
  1544. CHAR_REF("ngeq;", 0x2271),
  1545. MULTI_CHAR_REF("ngeqq;", 0x2267, 0x0338),
  1546. MULTI_CHAR_REF("ngeqslant;", 0x2a7e, 0x0338),
  1547. MULTI_CHAR_REF("nges;", 0x2a7e, 0x0338),
  1548. CHAR_REF("ngsim;", 0x2275),
  1549. CHAR_REF("ngt;", 0x226f),
  1550. CHAR_REF("ngtr;", 0x226f),
  1551. CHAR_REF("nhArr;", 0x21ce),
  1552. CHAR_REF("nharr;", 0x21ae),
  1553. CHAR_REF("nhpar;", 0x2af2),
  1554. CHAR_REF("ni;", 0x220b),
  1555. CHAR_REF("nis;", 0x22fc),
  1556. CHAR_REF("nisd;", 0x22fa),
  1557. CHAR_REF("niv;", 0x220b),
  1558. CHAR_REF("njcy;", 0x045a),
  1559. CHAR_REF("nlArr;", 0x21cd),
  1560. MULTI_CHAR_REF("nlE;", 0x2266, 0x0338),
  1561. CHAR_REF("nlarr;", 0x219a),
  1562. CHAR_REF("nldr;", 0x2025),
  1563. CHAR_REF("nle;", 0x2270),
  1564. CHAR_REF("nleftarrow;", 0x219a),
  1565. CHAR_REF("nleftrightarrow;", 0x21ae),
  1566. CHAR_REF("nleq;", 0x2270),
  1567. MULTI_CHAR_REF("nleqq;", 0x2266, 0x0338),
  1568. MULTI_CHAR_REF("nleqslant;", 0x2a7d, 0x0338),
  1569. MULTI_CHAR_REF("nles;", 0x2a7d, 0x0338),
  1570. CHAR_REF("nless;", 0x226e),
  1571. CHAR_REF("nlsim;", 0x2274),
  1572. CHAR_REF("nlt;", 0x226e),
  1573. CHAR_REF("nltri;", 0x22ea),
  1574. CHAR_REF("nltrie;", 0x22ec),
  1575. CHAR_REF("nmid;", 0x2224),
  1576. CHAR_REF("nopf;", 0x0001d55f),
  1577. CHAR_REF("not;", 0xac),
  1578. CHAR_REF("notin;", 0x2209),
  1579. MULTI_CHAR_REF("notinE;", 0x22f9, 0x0338),
  1580. MULTI_CHAR_REF("notindot;", 0x22f5, 0x0338),
  1581. CHAR_REF("notinva;", 0x2209),
  1582. CHAR_REF("notinvb;", 0x22f7),
  1583. CHAR_REF("notinvc;", 0x22f6),
  1584. CHAR_REF("notni;", 0x220c),
  1585. CHAR_REF("notniva;", 0x220c),
  1586. CHAR_REF("notnivb;", 0x22fe),
  1587. CHAR_REF("notnivc;", 0x22fd),
  1588. CHAR_REF("not", 0xac),
  1589. CHAR_REF("npar;", 0x2226),
  1590. CHAR_REF("nparallel;", 0x2226),
  1591. MULTI_CHAR_REF("nparsl;", 0x2afd, 0x20e5),
  1592. MULTI_CHAR_REF("npart;", 0x2202, 0x0338),
  1593. CHAR_REF("npolint;", 0x2a14),
  1594. CHAR_REF("npr;", 0x2280),
  1595. CHAR_REF("nprcue;", 0x22e0),
  1596. MULTI_CHAR_REF("npre;", 0x2aaf, 0x0338),
  1597. CHAR_REF("nprec;", 0x2280),
  1598. MULTI_CHAR_REF("npreceq;", 0x2aaf, 0x0338),
  1599. CHAR_REF("nrArr;", 0x21cf),
  1600. CHAR_REF("nrarr;", 0x219b),
  1601. MULTI_CHAR_REF("nrarrc;", 0x2933, 0x0338),
  1602. MULTI_CHAR_REF("nrarrw;", 0x219d, 0x0338),
  1603. CHAR_REF("nrightarrow;", 0x219b),
  1604. CHAR_REF("nrtri;", 0x22eb),
  1605. CHAR_REF("nrtrie;", 0x22ed),
  1606. CHAR_REF("nsc;", 0x2281),
  1607. CHAR_REF("nsccue;", 0x22e1),
  1608. MULTI_CHAR_REF("nsce;", 0x2ab0, 0x0338),
  1609. CHAR_REF("nscr;", 0x0001d4c3),
  1610. CHAR_REF("nshortmid;", 0x2224),
  1611. CHAR_REF("nshortparallel;", 0x2226),
  1612. CHAR_REF("nsim;", 0x2241),
  1613. CHAR_REF("nsime;", 0x2244),
  1614. CHAR_REF("nsimeq;", 0x2244),
  1615. CHAR_REF("nsmid;", 0x2224),
  1616. CHAR_REF("nspar;", 0x2226),
  1617. CHAR_REF("nsqsube;", 0x22e2),
  1618. CHAR_REF("nsqsupe;", 0x22e3),
  1619. CHAR_REF("nsub;", 0x2284),
  1620. MULTI_CHAR_REF("nsubE;", 0x2ac5, 0x0338),
  1621. CHAR_REF("nsube;", 0x2288),
  1622. MULTI_CHAR_REF("nsubset;", 0x2282, 0x20d2),
  1623. CHAR_REF("nsubseteq;", 0x2288),
  1624. MULTI_CHAR_REF("nsubseteqq;", 0x2ac5, 0x0338),
  1625. CHAR_REF("nsucc;", 0x2281),
  1626. MULTI_CHAR_REF("nsucceq;", 0x2ab0, 0x0338),
  1627. CHAR_REF("nsup;", 0x2285),
  1628. MULTI_CHAR_REF("nsupE;", 0x2ac6, 0x0338),
  1629. CHAR_REF("nsupe;", 0x2289),
  1630. MULTI_CHAR_REF("nsupset;", 0x2283, 0x20d2),
  1631. CHAR_REF("nsupseteq;", 0x2289),
  1632. MULTI_CHAR_REF("nsupseteqq;", 0x2ac6, 0x0338),
  1633. CHAR_REF("ntgl;", 0x2279),
  1634. CHAR_REF("ntilde;", 0xf1),
  1635. CHAR_REF("ntilde", 0xf1),
  1636. CHAR_REF("ntlg;", 0x2278),
  1637. CHAR_REF("ntriangleleft;", 0x22ea),
  1638. CHAR_REF("ntrianglelefteq;", 0x22ec),
  1639. CHAR_REF("ntriangleright;", 0x22eb),
  1640. CHAR_REF("ntrianglerighteq;", 0x22ed),
  1641. CHAR_REF("nu;", 0x03bd),
  1642. CHAR_REF("num;", 0x23),
  1643. CHAR_REF("numero;", 0x2116),
  1644. CHAR_REF("numsp;", 0x2007),
  1645. CHAR_REF("nvDash;", 0x22ad),
  1646. CHAR_REF("nvHarr;", 0x2904),
  1647. MULTI_CHAR_REF("nvap;", 0x224d, 0x20d2),
  1648. CHAR_REF("nvdash;", 0x22ac),
  1649. MULTI_CHAR_REF("nvge;", 0x2265, 0x20d2),
  1650. MULTI_CHAR_REF("nvgt;", 0x3e, 0x20d2),
  1651. CHAR_REF("nvinfin;", 0x29de),
  1652. CHAR_REF("nvlArr;", 0x2902),
  1653. MULTI_CHAR_REF("nvle;", 0x2264, 0x20d2),
  1654. MULTI_CHAR_REF("nvlt;", 0x3c, 0x20d2),
  1655. MULTI_CHAR_REF("nvltrie;", 0x22b4, 0x20d2),
  1656. CHAR_REF("nvrArr;", 0x2903),
  1657. MULTI_CHAR_REF("nvrtrie;", 0x22b5, 0x20d2),
  1658. MULTI_CHAR_REF("nvsim;", 0x223c, 0x20d2),
  1659. CHAR_REF("nwArr;", 0x21d6),
  1660. CHAR_REF("nwarhk;", 0x2923),
  1661. CHAR_REF("nwarr;", 0x2196),
  1662. CHAR_REF("nwarrow;", 0x2196),
  1663. CHAR_REF("nwnear;", 0x2927),
  1664. CHAR_REF("oS;", 0x24c8),
  1665. CHAR_REF("oacute;", 0xf3),
  1666. CHAR_REF("oacute", 0xf3),
  1667. CHAR_REF("oast;", 0x229b),
  1668. CHAR_REF("ocir;", 0x229a),
  1669. CHAR_REF("ocirc;", 0xf4),
  1670. CHAR_REF("ocirc", 0xf4),
  1671. CHAR_REF("ocy;", 0x043e),
  1672. CHAR_REF("odash;", 0x229d),
  1673. CHAR_REF("odblac;", 0x0151),
  1674. CHAR_REF("odiv;", 0x2a38),
  1675. CHAR_REF("odot;", 0x2299),
  1676. CHAR_REF("odsold;", 0x29bc),
  1677. CHAR_REF("oelig;", 0x0153),
  1678. CHAR_REF("ofcir;", 0x29bf),
  1679. CHAR_REF("ofr;", 0x0001d52c),
  1680. CHAR_REF("ogon;", 0x02db),
  1681. CHAR_REF("ograve;", 0xf2),
  1682. CHAR_REF("ograve", 0xf2),
  1683. CHAR_REF("ogt;", 0x29c1),
  1684. CHAR_REF("ohbar;", 0x29b5),
  1685. CHAR_REF("ohm;", 0x03a9),
  1686. CHAR_REF("oint;", 0x222e),
  1687. CHAR_REF("olarr;", 0x21ba),
  1688. CHAR_REF("olcir;", 0x29be),
  1689. CHAR_REF("olcross;", 0x29bb),
  1690. CHAR_REF("oline;", 0x203e),
  1691. CHAR_REF("olt;", 0x29c0),
  1692. CHAR_REF("omacr;", 0x014d),
  1693. CHAR_REF("omega;", 0x03c9),
  1694. CHAR_REF("omicron;", 0x03bf),
  1695. CHAR_REF("omid;", 0x29b6),
  1696. CHAR_REF("ominus;", 0x2296),
  1697. CHAR_REF("oopf;", 0x0001d560),
  1698. CHAR_REF("opar;", 0x29b7),
  1699. CHAR_REF("operp;", 0x29b9),
  1700. CHAR_REF("oplus;", 0x2295),
  1701. CHAR_REF("or;", 0x2228),
  1702. CHAR_REF("orarr;", 0x21bb),
  1703. CHAR_REF("ord;", 0x2a5d),
  1704. CHAR_REF("order;", 0x2134),
  1705. CHAR_REF("orderof;", 0x2134),
  1706. CHAR_REF("ordf;", 0xaa),
  1707. CHAR_REF("ordf", 0xaa),
  1708. CHAR_REF("ordm;", 0xba),
  1709. CHAR_REF("ordm", 0xba),
  1710. CHAR_REF("origof;", 0x22b6),
  1711. CHAR_REF("oror;", 0x2a56),
  1712. CHAR_REF("orslope;", 0x2a57),
  1713. CHAR_REF("orv;", 0x2a5b),
  1714. CHAR_REF("oscr;", 0x2134),
  1715. CHAR_REF("oslash;", 0xf8),
  1716. CHAR_REF("oslash", 0xf8),
  1717. CHAR_REF("osol;", 0x2298),
  1718. CHAR_REF("otilde;", 0xf5),
  1719. CHAR_REF("otilde", 0xf5),
  1720. CHAR_REF("otimes;", 0x2297),
  1721. CHAR_REF("otimesas;", 0x2a36),
  1722. CHAR_REF("ouml;", 0xf6),
  1723. CHAR_REF("ouml", 0xf6),
  1724. CHAR_REF("ovbar;", 0x233d),
  1725. CHAR_REF("par;", 0x2225),
  1726. CHAR_REF("para;", 0xb6),
  1727. CHAR_REF("para", 0xb6),
  1728. CHAR_REF("parallel;", 0x2225),
  1729. CHAR_REF("parsim;", 0x2af3),
  1730. CHAR_REF("parsl;", 0x2afd),
  1731. CHAR_REF("part;", 0x2202),
  1732. CHAR_REF("pcy;", 0x043f),
  1733. CHAR_REF("percnt;", 0x25),
  1734. CHAR_REF("period;", 0x2e),
  1735. CHAR_REF("permil;", 0x2030),
  1736. CHAR_REF("perp;", 0x22a5),
  1737. CHAR_REF("pertenk;", 0x2031),
  1738. CHAR_REF("pfr;", 0x0001d52d),
  1739. CHAR_REF("phi;", 0x03c6),
  1740. CHAR_REF("phiv;", 0x03d5),
  1741. CHAR_REF("phmmat;", 0x2133),
  1742. CHAR_REF("phone;", 0x260e),
  1743. CHAR_REF("pi;", 0x03c0),
  1744. CHAR_REF("pitchfork;", 0x22d4),
  1745. CHAR_REF("piv;", 0x03d6),
  1746. CHAR_REF("planck;", 0x210f),
  1747. CHAR_REF("planckh;", 0x210e),
  1748. CHAR_REF("plankv;", 0x210f),
  1749. CHAR_REF("plus;", 0x2b),
  1750. CHAR_REF("plusacir;", 0x2a23),
  1751. CHAR_REF("plusb;", 0x229e),
  1752. CHAR_REF("pluscir;", 0x2a22),
  1753. CHAR_REF("plusdo;", 0x2214),
  1754. CHAR_REF("plusdu;", 0x2a25),
  1755. CHAR_REF("pluse;", 0x2a72),
  1756. CHAR_REF("plusmn;", 0xb1),
  1757. CHAR_REF("plusmn", 0xb1),
  1758. CHAR_REF("plussim;", 0x2a26),
  1759. CHAR_REF("plustwo;", 0x2a27),
  1760. CHAR_REF("pm;", 0xb1),
  1761. CHAR_REF("pointint;", 0x2a15),
  1762. CHAR_REF("popf;", 0x0001d561),
  1763. CHAR_REF("pound;", 0xa3),
  1764. CHAR_REF("pound", 0xa3),
  1765. CHAR_REF("pr;", 0x227a),
  1766. CHAR_REF("prE;", 0x2ab3),
  1767. CHAR_REF("prap;", 0x2ab7),
  1768. CHAR_REF("prcue;", 0x227c),
  1769. CHAR_REF("pre;", 0x2aaf),
  1770. CHAR_REF("prec;", 0x227a),
  1771. CHAR_REF("precapprox;", 0x2ab7),
  1772. CHAR_REF("preccurlyeq;", 0x227c),
  1773. CHAR_REF("preceq;", 0x2aaf),
  1774. CHAR_REF("precnapprox;", 0x2ab9),
  1775. CHAR_REF("precneqq;", 0x2ab5),
  1776. CHAR_REF("precnsim;", 0x22e8),
  1777. CHAR_REF("precsim;", 0x227e),
  1778. CHAR_REF("prime;", 0x2032),
  1779. CHAR_REF("primes;", 0x2119),
  1780. CHAR_REF("prnE;", 0x2ab5),
  1781. CHAR_REF("prnap;", 0x2ab9),
  1782. CHAR_REF("prnsim;", 0x22e8),
  1783. CHAR_REF("prod;", 0x220f),
  1784. CHAR_REF("profalar;", 0x232e),
  1785. CHAR_REF("profline;", 0x2312),
  1786. CHAR_REF("profsurf;", 0x2313),
  1787. CHAR_REF("prop;", 0x221d),
  1788. CHAR_REF("propto;", 0x221d),
  1789. CHAR_REF("prsim;", 0x227e),
  1790. CHAR_REF("prurel;", 0x22b0),
  1791. CHAR_REF("pscr;", 0x0001d4c5),
  1792. CHAR_REF("psi;", 0x03c8),
  1793. CHAR_REF("puncsp;", 0x2008),
  1794. CHAR_REF("qfr;", 0x0001d52e),
  1795. CHAR_REF("qint;", 0x2a0c),
  1796. CHAR_REF("qopf;", 0x0001d562),
  1797. CHAR_REF("qprime;", 0x2057),
  1798. CHAR_REF("qscr;", 0x0001d4c6),
  1799. CHAR_REF("quaternions;", 0x210d),
  1800. CHAR_REF("quatint;", 0x2a16),
  1801. CHAR_REF("quest;", 0x3f),
  1802. CHAR_REF("questeq;", 0x225f),
  1803. CHAR_REF("quot;", 0x22),
  1804. CHAR_REF("quot", 0x22),
  1805. CHAR_REF("rAarr;", 0x21db),
  1806. CHAR_REF("rArr;", 0x21d2),
  1807. CHAR_REF("rAtail;", 0x291c),
  1808. CHAR_REF("rBarr;", 0x290f),
  1809. CHAR_REF("rHar;", 0x2964),
  1810. MULTI_CHAR_REF("race;", 0x223d, 0x0331),
  1811. CHAR_REF("racute;", 0x0155),
  1812. CHAR_REF("radic;", 0x221a),
  1813. CHAR_REF("raemptyv;", 0x29b3),
  1814. CHAR_REF("rang;", 0x27e9),
  1815. CHAR_REF("rangd;", 0x2992),
  1816. CHAR_REF("range;", 0x29a5),
  1817. CHAR_REF("rangle;", 0x27e9),
  1818. CHAR_REF("raquo;", 0xbb),
  1819. CHAR_REF("raquo", 0xbb),
  1820. CHAR_REF("rarr;", 0x2192),
  1821. CHAR_REF("rarrap;", 0x2975),
  1822. CHAR_REF("rarrb;", 0x21e5),
  1823. CHAR_REF("rarrbfs;", 0x2920),
  1824. CHAR_REF("rarrc;", 0x2933),
  1825. CHAR_REF("rarrfs;", 0x291e),
  1826. CHAR_REF("rarrhk;", 0x21aa),
  1827. CHAR_REF("rarrlp;", 0x21ac),
  1828. CHAR_REF("rarrpl;", 0x2945),
  1829. CHAR_REF("rarrsim;", 0x2974),
  1830. CHAR_REF("rarrtl;", 0x21a3),
  1831. CHAR_REF("rarrw;", 0x219d),
  1832. CHAR_REF("ratail;", 0x291a),
  1833. CHAR_REF("ratio;", 0x2236),
  1834. CHAR_REF("rationals;", 0x211a),
  1835. CHAR_REF("rbarr;", 0x290d),
  1836. CHAR_REF("rbbrk;", 0x2773),
  1837. CHAR_REF("rbrace;", 0x7d),
  1838. CHAR_REF("rbrack;", 0x5d),
  1839. CHAR_REF("rbrke;", 0x298c),
  1840. CHAR_REF("rbrksld;", 0x298e),
  1841. CHAR_REF("rbrkslu;", 0x2990),
  1842. CHAR_REF("rcaron;", 0x0159),
  1843. CHAR_REF("rcedil;", 0x0157),
  1844. CHAR_REF("rceil;", 0x2309),
  1845. CHAR_REF("rcub;", 0x7d),
  1846. CHAR_REF("rcy;", 0x0440),
  1847. CHAR_REF("rdca;", 0x2937),
  1848. CHAR_REF("rdldhar;", 0x2969),
  1849. CHAR_REF("rdquo;", 0x201d),
  1850. CHAR_REF("rdquor;", 0x201d),
  1851. CHAR_REF("rdsh;", 0x21b3),
  1852. CHAR_REF("real;", 0x211c),
  1853. CHAR_REF("realine;", 0x211b),
  1854. CHAR_REF("realpart;", 0x211c),
  1855. CHAR_REF("reals;", 0x211d),
  1856. CHAR_REF("rect;", 0x25ad),
  1857. CHAR_REF("reg;", 0xae),
  1858. CHAR_REF("reg", 0xae),
  1859. CHAR_REF("rfisht;", 0x297d),
  1860. CHAR_REF("rfloor;", 0x230b),
  1861. CHAR_REF("rfr;", 0x0001d52f),
  1862. CHAR_REF("rhard;", 0x21c1),
  1863. CHAR_REF("rharu;", 0x21c0),
  1864. CHAR_REF("rharul;", 0x296c),
  1865. CHAR_REF("rho;", 0x03c1),
  1866. CHAR_REF("rhov;", 0x03f1),
  1867. CHAR_REF("rightarrow;", 0x2192),
  1868. CHAR_REF("rightarrowtail;", 0x21a3),
  1869. CHAR_REF("rightharpoondown;", 0x21c1),
  1870. CHAR_REF("rightharpoonup;", 0x21c0),
  1871. CHAR_REF("rightleftarrows;", 0x21c4),
  1872. CHAR_REF("rightleftharpoons;", 0x21cc),
  1873. CHAR_REF("rightrightarrows;", 0x21c9),
  1874. CHAR_REF("rightsquigarrow;", 0x219d),
  1875. CHAR_REF("rightthreetimes;", 0x22cc),
  1876. CHAR_REF("ring;", 0x02da),
  1877. CHAR_REF("risingdotseq;", 0x2253),
  1878. CHAR_REF("rlarr;", 0x21c4),
  1879. CHAR_REF("rlhar;", 0x21cc),
  1880. CHAR_REF("rlm;", 0x200f),
  1881. CHAR_REF("rmoust;", 0x23b1),
  1882. CHAR_REF("rmoustache;", 0x23b1),
  1883. CHAR_REF("rnmid;", 0x2aee),
  1884. CHAR_REF("roang;", 0x27ed),
  1885. CHAR_REF("roarr;", 0x21fe),
  1886. CHAR_REF("robrk;", 0x27e7),
  1887. CHAR_REF("ropar;", 0x2986),
  1888. CHAR_REF("ropf;", 0x0001d563),
  1889. CHAR_REF("roplus;", 0x2a2e),
  1890. CHAR_REF("rotimes;", 0x2a35),
  1891. CHAR_REF("rpar;", 0x29),
  1892. CHAR_REF("rpargt;", 0x2994),
  1893. CHAR_REF("rppolint;", 0x2a12),
  1894. CHAR_REF("rrarr;", 0x21c9),
  1895. CHAR_REF("rsaquo;", 0x203a),
  1896. CHAR_REF("rscr;", 0x0001d4c7),
  1897. CHAR_REF("rsh;", 0x21b1),
  1898. CHAR_REF("rsqb;", 0x5d),
  1899. CHAR_REF("rsquo;", 0x2019),
  1900. CHAR_REF("rsquor;", 0x2019),
  1901. CHAR_REF("rthree;", 0x22cc),
  1902. CHAR_REF("rtimes;", 0x22ca),
  1903. CHAR_REF("rtri;", 0x25b9),
  1904. CHAR_REF("rtrie;", 0x22b5),
  1905. CHAR_REF("rtrif;", 0x25b8),
  1906. CHAR_REF("rtriltri;", 0x29ce),
  1907. CHAR_REF("ruluhar;", 0x2968),
  1908. CHAR_REF("rx;", 0x211e),
  1909. CHAR_REF("sacute;", 0x015b),
  1910. CHAR_REF("sbquo;", 0x201a),
  1911. CHAR_REF("sc;", 0x227b),
  1912. CHAR_REF("scE;", 0x2ab4),
  1913. CHAR_REF("scap;", 0x2ab8),
  1914. CHAR_REF("scaron;", 0x0161),
  1915. CHAR_REF("sccue;", 0x227d),
  1916. CHAR_REF("sce;", 0x2ab0),
  1917. CHAR_REF("scedil;", 0x015f),
  1918. CHAR_REF("scirc;", 0x015d),
  1919. CHAR_REF("scnE;", 0x2ab6),
  1920. CHAR_REF("scnap;", 0x2aba),
  1921. CHAR_REF("scnsim;", 0x22e9),
  1922. CHAR_REF("scpolint;", 0x2a13),
  1923. CHAR_REF("scsim;", 0x227f),
  1924. CHAR_REF("scy;", 0x0441),
  1925. CHAR_REF("sdot;", 0x22c5),
  1926. CHAR_REF("sdotb;", 0x22a1),
  1927. CHAR_REF("sdote;", 0x2a66),
  1928. CHAR_REF("seArr;", 0x21d8),
  1929. CHAR_REF("searhk;", 0x2925),
  1930. CHAR_REF("searr;", 0x2198),
  1931. CHAR_REF("searrow;", 0x2198),
  1932. CHAR_REF("sect;", 0xa7),
  1933. CHAR_REF("sect", 0xa7),
  1934. CHAR_REF("semi;", 0x3b),
  1935. CHAR_REF("seswar;", 0x2929),
  1936. CHAR_REF("setminus;", 0x2216),
  1937. CHAR_REF("setmn;", 0x2216),
  1938. CHAR_REF("sext;", 0x2736),
  1939. CHAR_REF("sfr;", 0x0001d530),
  1940. CHAR_REF("sfrown;", 0x2322),
  1941. CHAR_REF("sharp;", 0x266f),
  1942. CHAR_REF("shchcy;", 0x0449),
  1943. CHAR_REF("shcy;", 0x0448),
  1944. CHAR_REF("shortmid;", 0x2223),
  1945. CHAR_REF("shortparallel;", 0x2225),
  1946. CHAR_REF("shy;", 0xad),
  1947. CHAR_REF("shy", 0xad),
  1948. CHAR_REF("sigma;", 0x03c3),
  1949. CHAR_REF("sigmaf;", 0x03c2),
  1950. CHAR_REF("sigmav;", 0x03c2),
  1951. CHAR_REF("sim;", 0x223c),
  1952. CHAR_REF("simdot;", 0x2a6a),
  1953. CHAR_REF("sime;", 0x2243),
  1954. CHAR_REF("simeq;", 0x2243),
  1955. CHAR_REF("simg;", 0x2a9e),
  1956. CHAR_REF("simgE;", 0x2aa0),
  1957. CHAR_REF("siml;", 0x2a9d),
  1958. CHAR_REF("simlE;", 0x2a9f),
  1959. CHAR_REF("simne;", 0x2246),
  1960. CHAR_REF("simplus;", 0x2a24),
  1961. CHAR_REF("simrarr;", 0x2972),
  1962. CHAR_REF("slarr;", 0x2190),
  1963. CHAR_REF("smallsetminus;", 0x2216),
  1964. CHAR_REF("smashp;", 0x2a33),
  1965. CHAR_REF("smeparsl;", 0x29e4),
  1966. CHAR_REF("smid;", 0x2223),
  1967. CHAR_REF("smile;", 0x2323),
  1968. CHAR_REF("smt;", 0x2aaa),
  1969. CHAR_REF("smte;", 0x2aac),
  1970. MULTI_CHAR_REF("smtes;", 0x2aac, 0xfe00),
  1971. CHAR_REF("softcy;", 0x044c),
  1972. CHAR_REF("sol;", 0x2f),
  1973. CHAR_REF("solb;", 0x29c4),
  1974. CHAR_REF("solbar;", 0x233f),
  1975. CHAR_REF("sopf;", 0x0001d564),
  1976. CHAR_REF("spades;", 0x2660),
  1977. CHAR_REF("spadesuit;", 0x2660),
  1978. CHAR_REF("spar;", 0x2225),
  1979. CHAR_REF("sqcap;", 0x2293),
  1980. MULTI_CHAR_REF("sqcaps;", 0x2293, 0xfe00),
  1981. CHAR_REF("sqcup;", 0x2294),
  1982. MULTI_CHAR_REF("sqcups;", 0x2294, 0xfe00),
  1983. CHAR_REF("sqsub;", 0x228f),
  1984. CHAR_REF("sqsube;", 0x2291),
  1985. CHAR_REF("sqsubset;", 0x228f),
  1986. CHAR_REF("sqsubseteq;", 0x2291),
  1987. CHAR_REF("sqsup;", 0x2290),
  1988. CHAR_REF("sqsupe;", 0x2292),
  1989. CHAR_REF("sqsupset;", 0x2290),
  1990. CHAR_REF("sqsupseteq;", 0x2292),
  1991. CHAR_REF("squ;", 0x25a1),
  1992. CHAR_REF("square;", 0x25a1),
  1993. CHAR_REF("squarf;", 0x25aa),
  1994. CHAR_REF("squf;", 0x25aa),
  1995. CHAR_REF("srarr;", 0x2192),
  1996. CHAR_REF("sscr;", 0x0001d4c8),
  1997. CHAR_REF("ssetmn;", 0x2216),
  1998. CHAR_REF("ssmile;", 0x2323),
  1999. CHAR_REF("sstarf;", 0x22c6),
  2000. CHAR_REF("star;", 0x2606),
  2001. CHAR_REF("starf;", 0x2605),
  2002. CHAR_REF("straightepsilon;", 0x03f5),
  2003. CHAR_REF("straightphi;", 0x03d5),
  2004. CHAR_REF("strns;", 0xaf),
  2005. CHAR_REF("sub;", 0x2282),
  2006. CHAR_REF("subE;", 0x2ac5),
  2007. CHAR_REF("subdot;", 0x2abd),
  2008. CHAR_REF("sube;", 0x2286),
  2009. CHAR_REF("subedot;", 0x2ac3),
  2010. CHAR_REF("submult;", 0x2ac1),
  2011. CHAR_REF("subnE;", 0x2acb),
  2012. CHAR_REF("subne;", 0x228a),
  2013. CHAR_REF("subplus;", 0x2abf),
  2014. CHAR_REF("subrarr;", 0x2979),
  2015. CHAR_REF("subset;", 0x2282),
  2016. CHAR_REF("subseteq;", 0x2286),
  2017. CHAR_REF("subseteqq;", 0x2ac5),
  2018. CHAR_REF("subsetneq;", 0x228a),
  2019. CHAR_REF("subsetneqq;", 0x2acb),
  2020. CHAR_REF("subsim;", 0x2ac7),
  2021. CHAR_REF("subsub;", 0x2ad5),
  2022. CHAR_REF("subsup;", 0x2ad3),
  2023. CHAR_REF("succ;", 0x227b),
  2024. CHAR_REF("succapprox;", 0x2ab8),
  2025. CHAR_REF("succcurlyeq;", 0x227d),
  2026. CHAR_REF("succeq;", 0x2ab0),
  2027. CHAR_REF("succnapprox;", 0x2aba),
  2028. CHAR_REF("succneqq;", 0x2ab6),
  2029. CHAR_REF("succnsim;", 0x22e9),
  2030. CHAR_REF("succsim;", 0x227f),
  2031. CHAR_REF("sum;", 0x2211),
  2032. CHAR_REF("sung;", 0x266a),
  2033. CHAR_REF("sup1;", 0xb9),
  2034. CHAR_REF("sup1", 0xb9),
  2035. CHAR_REF("sup2;", 0xb2),
  2036. CHAR_REF("sup2", 0xb2),
  2037. CHAR_REF("sup3;", 0xb3),
  2038. CHAR_REF("sup3", 0xb3),
  2039. CHAR_REF("sup;", 0x2283),
  2040. CHAR_REF("supE;", 0x2ac6),
  2041. CHAR_REF("supdot;", 0x2abe),
  2042. CHAR_REF("supdsub;", 0x2ad8),
  2043. CHAR_REF("supe;", 0x2287),
  2044. CHAR_REF("supedot;", 0x2ac4),
  2045. CHAR_REF("suphsol;", 0x27c9),
  2046. CHAR_REF("suphsub;", 0x2ad7),
  2047. CHAR_REF("suplarr;", 0x297b),
  2048. CHAR_REF("supmult;", 0x2ac2),
  2049. CHAR_REF("supnE;", 0x2acc),
  2050. CHAR_REF("supne;", 0x228b),
  2051. CHAR_REF("supplus;", 0x2ac0),
  2052. CHAR_REF("supset;", 0x2283),
  2053. CHAR_REF("supseteq;", 0x2287),
  2054. CHAR_REF("supseteqq;", 0x2ac6),
  2055. CHAR_REF("supsetneq;", 0x228b),
  2056. CHAR_REF("supsetneqq;", 0x2acc),
  2057. CHAR_REF("supsim;", 0x2ac8),
  2058. CHAR_REF("supsub;", 0x2ad4),
  2059. CHAR_REF("supsup;", 0x2ad6),
  2060. CHAR_REF("swArr;", 0x21d9),
  2061. CHAR_REF("swarhk;", 0x2926),
  2062. CHAR_REF("swarr;", 0x2199),
  2063. CHAR_REF("swarrow;", 0x2199),
  2064. CHAR_REF("swnwar;", 0x292a),
  2065. CHAR_REF("szlig;", 0xdf),
  2066. CHAR_REF("szlig", 0xdf),
  2067. CHAR_REF("target;", 0x2316),
  2068. CHAR_REF("tau;", 0x03c4),
  2069. CHAR_REF("tbrk;", 0x23b4),
  2070. CHAR_REF("tcaron;", 0x0165),
  2071. CHAR_REF("tcedil;", 0x0163),
  2072. CHAR_REF("tcy;", 0x0442),
  2073. CHAR_REF("tdot;", 0x20db),
  2074. CHAR_REF("telrec;", 0x2315),
  2075. CHAR_REF("tfr;", 0x0001d531),
  2076. CHAR_REF("there4;", 0x2234),
  2077. CHAR_REF("therefore;", 0x2234),
  2078. CHAR_REF("theta;", 0x03b8),
  2079. CHAR_REF("thetasym;", 0x03d1),
  2080. CHAR_REF("thetav;", 0x03d1),
  2081. CHAR_REF("thickapprox;", 0x2248),
  2082. CHAR_REF("thicksim;", 0x223c),
  2083. CHAR_REF("thinsp;", 0x2009),
  2084. CHAR_REF("thkap;", 0x2248),
  2085. CHAR_REF("thksim;", 0x223c),
  2086. CHAR_REF("thorn;", 0xfe),
  2087. CHAR_REF("thorn", 0xfe),
  2088. CHAR_REF("tilde;", 0x02dc),
  2089. CHAR_REF("times;", 0xd7),
  2090. CHAR_REF("times", 0xd7),
  2091. CHAR_REF("timesb;", 0x22a0),
  2092. CHAR_REF("timesbar;", 0x2a31),
  2093. CHAR_REF("timesd;", 0x2a30),
  2094. CHAR_REF("tint;", 0x222d),
  2095. CHAR_REF("toea;", 0x2928),
  2096. CHAR_REF("top;", 0x22a4),
  2097. CHAR_REF("topbot;", 0x2336),
  2098. CHAR_REF("topcir;", 0x2af1),
  2099. CHAR_REF("topf;", 0x0001d565),
  2100. CHAR_REF("topfork;", 0x2ada),
  2101. CHAR_REF("tosa;", 0x2929),
  2102. CHAR_REF("tprime;", 0x2034),
  2103. CHAR_REF("trade;", 0x2122),
  2104. CHAR_REF("triangle;", 0x25b5),
  2105. CHAR_REF("triangledown;", 0x25bf),
  2106. CHAR_REF("triangleleft;", 0x25c3),
  2107. CHAR_REF("trianglelefteq;", 0x22b4),
  2108. CHAR_REF("triangleq;", 0x225c),
  2109. CHAR_REF("triangleright;", 0x25b9),
  2110. CHAR_REF("trianglerighteq;", 0x22b5),
  2111. CHAR_REF("tridot;", 0x25ec),
  2112. CHAR_REF("trie;", 0x225c),
  2113. CHAR_REF("triminus;", 0x2a3a),
  2114. CHAR_REF("triplus;", 0x2a39),
  2115. CHAR_REF("trisb;", 0x29cd),
  2116. CHAR_REF("tritime;", 0x2a3b),
  2117. CHAR_REF("trpezium;", 0x23e2),
  2118. CHAR_REF("tscr;", 0x0001d4c9),
  2119. CHAR_REF("tscy;", 0x0446),
  2120. CHAR_REF("tshcy;", 0x045b),
  2121. CHAR_REF("tstrok;", 0x0167),
  2122. CHAR_REF("twixt;", 0x226c),
  2123. CHAR_REF("twoheadleftarrow;", 0x219e),
  2124. CHAR_REF("twoheadrightarrow;", 0x21a0),
  2125. CHAR_REF("uArr;", 0x21d1),
  2126. CHAR_REF("uHar;", 0x2963),
  2127. CHAR_REF("uacute;", 0xfa),
  2128. CHAR_REF("uacute", 0xfa),
  2129. CHAR_REF("uarr;", 0x2191),
  2130. CHAR_REF("ubrcy;", 0x045e),
  2131. CHAR_REF("ubreve;", 0x016d),
  2132. CHAR_REF("ucirc;", 0xfb),
  2133. CHAR_REF("ucirc", 0xfb),
  2134. CHAR_REF("ucy;", 0x0443),
  2135. CHAR_REF("udarr;", 0x21c5),
  2136. CHAR_REF("udblac;", 0x0171),
  2137. CHAR_REF("udhar;", 0x296e),
  2138. CHAR_REF("ufisht;", 0x297e),
  2139. CHAR_REF("ufr;", 0x0001d532),
  2140. CHAR_REF("ugrave;", 0xf9),
  2141. CHAR_REF("ugrave", 0xf9),
  2142. CHAR_REF("uharl;", 0x21bf),
  2143. CHAR_REF("uharr;", 0x21be),
  2144. CHAR_REF("uhblk;", 0x2580),
  2145. CHAR_REF("ulcorn;", 0x231c),
  2146. CHAR_REF("ulcorner;", 0x231c),
  2147. CHAR_REF("ulcrop;", 0x230f),
  2148. CHAR_REF("ultri;", 0x25f8),
  2149. CHAR_REF("umacr;", 0x016b),
  2150. CHAR_REF("uml;", 0xa8),
  2151. CHAR_REF("uml", 0xa8),
  2152. CHAR_REF("uogon;", 0x0173),
  2153. CHAR_REF("uopf;", 0x0001d566),
  2154. CHAR_REF("uparrow;", 0x2191),
  2155. CHAR_REF("updownarrow;", 0x2195),
  2156. CHAR_REF("upharpoonleft;", 0x21bf),
  2157. CHAR_REF("upharpoonright;", 0x21be),
  2158. CHAR_REF("uplus;", 0x228e),
  2159. CHAR_REF("upsi;", 0x03c5),
  2160. CHAR_REF("upsih;", 0x03d2),
  2161. CHAR_REF("upsilon;", 0x03c5),
  2162. CHAR_REF("upuparrows;", 0x21c8),
  2163. CHAR_REF("urcorn;", 0x231d),
  2164. CHAR_REF("urcorner;", 0x231d),
  2165. CHAR_REF("urcrop;", 0x230e),
  2166. CHAR_REF("uring;", 0x016f),
  2167. CHAR_REF("urtri;", 0x25f9),
  2168. CHAR_REF("uscr;", 0x0001d4ca),
  2169. CHAR_REF("utdot;", 0x22f0),
  2170. CHAR_REF("utilde;", 0x0169),
  2171. CHAR_REF("utri;", 0x25b5),
  2172. CHAR_REF("utrif;", 0x25b4),
  2173. CHAR_REF("uuarr;", 0x21c8),
  2174. CHAR_REF("uuml;", 0xfc),
  2175. CHAR_REF("uuml", 0xfc),
  2176. CHAR_REF("uwangle;", 0x29a7),
  2177. CHAR_REF("vArr;", 0x21d5),
  2178. CHAR_REF("vBar;", 0x2ae8),
  2179. CHAR_REF("vBarv;", 0x2ae9),
  2180. CHAR_REF("vDash;", 0x22a8),
  2181. CHAR_REF("vangrt;", 0x299c),
  2182. CHAR_REF("varepsilon;", 0x03f5),
  2183. CHAR_REF("varkappa;", 0x03f0),
  2184. CHAR_REF("varnothing;", 0x2205),
  2185. CHAR_REF("varphi;", 0x03d5),
  2186. CHAR_REF("varpi;", 0x03d6),
  2187. CHAR_REF("varpropto;", 0x221d),
  2188. CHAR_REF("varr;", 0x2195),
  2189. CHAR_REF("varrho;", 0x03f1),
  2190. CHAR_REF("varsigma;", 0x03c2),
  2191. MULTI_CHAR_REF("varsubsetneq;", 0x228a, 0xfe00),
  2192. MULTI_CHAR_REF("varsubsetneqq;", 0x2acb, 0xfe00),
  2193. MULTI_CHAR_REF("varsupsetneq;", 0x228b, 0xfe00),
  2194. MULTI_CHAR_REF("varsupsetneqq;", 0x2acc, 0xfe00),
  2195. CHAR_REF("vartheta;", 0x03d1),
  2196. CHAR_REF("vartriangleleft;", 0x22b2),
  2197. CHAR_REF("vartriangleright;", 0x22b3),
  2198. CHAR_REF("vcy;", 0x0432),
  2199. CHAR_REF("vdash;", 0x22a2),
  2200. CHAR_REF("vee;", 0x2228),
  2201. CHAR_REF("veebar;", 0x22bb),
  2202. CHAR_REF("veeeq;", 0x225a),
  2203. CHAR_REF("vellip;", 0x22ee),
  2204. CHAR_REF("verbar;", 0x7c),
  2205. CHAR_REF("vert;", 0x7c),
  2206. CHAR_REF("vfr;", 0x0001d533),
  2207. CHAR_REF("vltri;", 0x22b2),
  2208. MULTI_CHAR_REF("vnsub;", 0x2282, 0x20d2),
  2209. MULTI_CHAR_REF("vnsup;", 0x2283, 0x20d2),
  2210. CHAR_REF("vopf;", 0x0001d567),
  2211. CHAR_REF("vprop;", 0x221d),
  2212. CHAR_REF("vrtri;", 0x22b3),
  2213. CHAR_REF("vscr;", 0x0001d4cb),
  2214. MULTI_CHAR_REF("vsubnE;", 0x2acb, 0xfe00),
  2215. MULTI_CHAR_REF("vsubne;", 0x228a, 0xfe00),
  2216. MULTI_CHAR_REF("vsupnE;", 0x2acc, 0xfe00),
  2217. MULTI_CHAR_REF("vsupne;", 0x228b, 0xfe00),
  2218. CHAR_REF("vzigzag;", 0x299a),
  2219. CHAR_REF("wcirc;", 0x0175),
  2220. CHAR_REF("wedbar;", 0x2a5f),
  2221. CHAR_REF("wedge;", 0x2227),
  2222. CHAR_REF("wedgeq;", 0x2259),
  2223. CHAR_REF("weierp;", 0x2118),
  2224. CHAR_REF("wfr;", 0x0001d534),
  2225. CHAR_REF("wopf;", 0x0001d568),
  2226. CHAR_REF("wp;", 0x2118),
  2227. CHAR_REF("wr;", 0x2240),
  2228. CHAR_REF("wreath;", 0x2240),
  2229. CHAR_REF("wscr;", 0x0001d4cc),
  2230. CHAR_REF("xcap;", 0x22c2),
  2231. CHAR_REF("xcirc;", 0x25ef),
  2232. CHAR_REF("xcup;", 0x22c3),
  2233. CHAR_REF("xdtri;", 0x25bd),
  2234. CHAR_REF("xfr;", 0x0001d535),
  2235. CHAR_REF("xhArr;", 0x27fa),
  2236. CHAR_REF("xharr;", 0x27f7),
  2237. CHAR_REF("xi;", 0x03be),
  2238. CHAR_REF("xlArr;", 0x27f8),
  2239. CHAR_REF("xlarr;", 0x27f5),
  2240. CHAR_REF("xmap;", 0x27fc),
  2241. CHAR_REF("xnis;", 0x22fb),
  2242. CHAR_REF("xodot;", 0x2a00),
  2243. CHAR_REF("xopf;", 0x0001d569),
  2244. CHAR_REF("xoplus;", 0x2a01),
  2245. CHAR_REF("xotime;", 0x2a02),
  2246. CHAR_REF("xrArr;", 0x27f9),
  2247. CHAR_REF("xrarr;", 0x27f6),
  2248. CHAR_REF("xscr;", 0x0001d4cd),
  2249. CHAR_REF("xsqcup;", 0x2a06),
  2250. CHAR_REF("xuplus;", 0x2a04),
  2251. CHAR_REF("xutri;", 0x25b3),
  2252. CHAR_REF("xvee;", 0x22c1),
  2253. CHAR_REF("xwedge;", 0x22c0),
  2254. CHAR_REF("yacute;", 0xfd),
  2255. CHAR_REF("yacute", 0xfd),
  2256. CHAR_REF("yacy;", 0x044f),
  2257. CHAR_REF("ycirc;", 0x0177),
  2258. CHAR_REF("ycy;", 0x044b),
  2259. CHAR_REF("yen;", 0xa5),
  2260. CHAR_REF("yen", 0xa5),
  2261. CHAR_REF("yfr;", 0x0001d536),
  2262. CHAR_REF("yicy;", 0x0457),
  2263. CHAR_REF("yopf;", 0x0001d56a),
  2264. CHAR_REF("yscr;", 0x0001d4ce),
  2265. CHAR_REF("yucy;", 0x044e),
  2266. CHAR_REF("yuml;", 0xff),
  2267. CHAR_REF("yuml", 0xff),
  2268. CHAR_REF("zacute;", 0x017a),
  2269. CHAR_REF("zcaron;", 0x017e),
  2270. CHAR_REF("zcy;", 0x0437),
  2271. CHAR_REF("zdot;", 0x017c),
  2272. CHAR_REF("zeetrf;", 0x2128),
  2273. CHAR_REF("zeta;", 0x03b6),
  2274. CHAR_REF("zfr;", 0x0001d537),
  2275. CHAR_REF("zhcy;", 0x0436),
  2276. CHAR_REF("zigrarr;", 0x21dd),
  2277. CHAR_REF("zopf;", 0x0001d56b),
  2278. CHAR_REF("zscr;", 0x0001d4cf),
  2279. CHAR_REF("zwj;", 0x200d),
  2280. CHAR_REF("zwnj;", 0x200c),
  2281. // Terminator.
  2282. CHAR_REF("", -1)
  2283. };
  2284. // Table of replacement characters. The spec specifies that any occurrence of
  2285. // the first character should be replaced by the second character, and a parse
  2286. // error recorded.
  2287. typedef struct {
  2288. int from_char;
  2289. int to_char;
  2290. } CharReplacement;
  2291. static const CharReplacement kCharReplacements[] = {
  2292. { 0x00, 0xfffd },
  2293. { 0x0d, 0x000d },
  2294. { 0x80, 0x20ac },
  2295. { 0x81, 0x0081 },
  2296. { 0x82, 0x201A },
  2297. { 0x83, 0x0192 },
  2298. { 0x84, 0x201E },
  2299. { 0x85, 0x2026 },
  2300. { 0x86, 0x2020 },
  2301. { 0x87, 0x2021 },
  2302. { 0x88, 0x02C6 },
  2303. { 0x89, 0x2030 },
  2304. { 0x8A, 0x0160 },
  2305. { 0x8B, 0x2039 },
  2306. { 0x8C, 0x0152 },
  2307. { 0x8D, 0x008D },
  2308. { 0x8E, 0x017D },
  2309. { 0x8F, 0x008F },
  2310. { 0x90, 0x0090 },
  2311. { 0x91, 0x2018 },
  2312. { 0x92, 0x2019 },
  2313. { 0x93, 0x201C },
  2314. { 0x94, 0x201D },
  2315. { 0x95, 0x2022 },
  2316. { 0x96, 0x2013 },
  2317. { 0x97, 0x2014 },
  2318. { 0x98, 0x02DC },
  2319. { 0x99, 0x2122 },
  2320. { 0x9A, 0x0161 },
  2321. { 0x9B, 0x203A },
  2322. { 0x9C, 0x0153 },
  2323. { 0x9D, 0x009D },
  2324. { 0x9E, 0x017E },
  2325. { 0x9F, 0x0178 },
  2326. // Terminator.
  2327. { -1, -1 }
  2328. };
  2329. static int parse_digit(int c, bool allow_hex) {
  2330. if (c >= '0' && c <= '9') {
  2331. return c - '0';
  2332. }
  2333. if (allow_hex && c >= 'a' && c <= 'f') {
  2334. return c - 'a' + 10;
  2335. }
  2336. if (allow_hex && c >= 'A' && c <= 'F') {
  2337. return c - 'A' + 10;
  2338. }
  2339. return -1;
  2340. }
  2341. static void add_no_digit_error(
  2342. struct GumboInternalParser* parser, Utf8Iterator* input) {
  2343. GumboError* error = gumbo_add_error(parser);
  2344. if (!error) {
  2345. return;
  2346. }
  2347. utf8iterator_fill_error_at_mark(input, error);
  2348. error->type = GUMBO_ERR_NUMERIC_CHAR_REF_NO_DIGITS;
  2349. }
  2350. static void add_codepoint_error(
  2351. struct GumboInternalParser* parser, Utf8Iterator* input,
  2352. GumboErrorType type, int codepoint) {
  2353. GumboError* error = gumbo_add_error(parser);
  2354. if (!error) {
  2355. return;
  2356. }
  2357. utf8iterator_fill_error_at_mark(input, error);
  2358. error->type = type;
  2359. error->v.codepoint = codepoint;
  2360. }
  2361. static void add_named_reference_error(
  2362. struct GumboInternalParser* parser, Utf8Iterator* input,
  2363. GumboErrorType type, GumboStringPiece text) {
  2364. GumboError* error = gumbo_add_error(parser);
  2365. if (!error) {
  2366. return;
  2367. }
  2368. utf8iterator_fill_error_at_mark(input, error);
  2369. error->type = type;
  2370. error->v.text = text;
  2371. }
  2372. static int maybe_replace_codepoint(int codepoint) {
  2373. for (int i = 0; kCharReplacements[i].from_char != -1; ++i) {
  2374. if (kCharReplacements[i].from_char == codepoint) {
  2375. return kCharReplacements[i].to_char;
  2376. }
  2377. }
  2378. return -1;
  2379. }
  2380. static bool consume_numeric_ref(
  2381. struct GumboInternalParser* parser, Utf8Iterator* input, int* output) {
  2382. utf8iterator_next(input);
  2383. bool is_hex = false;
  2384. int c = utf8iterator_current(input);
  2385. if (c == 'x' || c == 'X') {
  2386. is_hex = true;
  2387. utf8iterator_next(input);
  2388. c = utf8iterator_current(input);
  2389. }
  2390. int digit = parse_digit(c, is_hex);
  2391. if (digit == -1) {
  2392. // First digit was invalid; add a parse error and return.
  2393. add_no_digit_error(parser, input);
  2394. utf8iterator_reset(input);
  2395. *output = kGumboNoChar;
  2396. return false;
  2397. }
  2398. int codepoint = 0;
  2399. bool status = true;
  2400. do {
  2401. codepoint = (codepoint * (is_hex ? 16 : 10)) + digit;
  2402. utf8iterator_next(input);
  2403. digit = parse_digit(utf8iterator_current(input), is_hex);
  2404. } while (digit != -1);
  2405. if (utf8iterator_current(input) != ';') {
  2406. add_codepoint_error(
  2407. parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_WITHOUT_SEMICOLON, codepoint);
  2408. status = false;
  2409. } else {
  2410. utf8iterator_next(input);
  2411. }
  2412. int replacement = maybe_replace_codepoint(codepoint);
  2413. if (replacement != -1) {
  2414. add_codepoint_error(
  2415. parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_INVALID, codepoint);
  2416. *output = replacement;
  2417. return false;
  2418. }
  2419. if ((codepoint >= 0xd800 && codepoint <= 0xdfff) || codepoint > 0x10ffff) {
  2420. add_codepoint_error(
  2421. parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_INVALID, codepoint);
  2422. *output = 0xfffd;
  2423. return false;
  2424. }
  2425. if (utf8_is_invalid_code_point(codepoint) || codepoint == 0xb) {
  2426. add_codepoint_error(
  2427. parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_INVALID, codepoint);
  2428. status = false;
  2429. // But return it anyway, per spec.
  2430. }
  2431. *output = codepoint;
  2432. return status;
  2433. }
  2434. static const NamedCharRef* find_named_char_ref(Utf8Iterator* input) {
  2435. for (int i = 0; kNamedEntities[i].codepoints.first != -1; ++i) {
  2436. const NamedCharRef* current = &kNamedEntities[i];
  2437. assert(strlen(current->name) == current->length);
  2438. if (utf8iterator_maybe_consume_match(
  2439. input, current->name, current->length, true)) {
  2440. assert(current->name != NULL);
  2441. assert(current->length > 0);
  2442. assert(current->codepoints.first != kGumboNoChar);
  2443. return current;
  2444. }
  2445. }
  2446. return NULL;
  2447. }
  2448. static bool is_legal_attribute_char_next(Utf8Iterator* input) {
  2449. int c = utf8iterator_current(input);
  2450. return c == '=' || isalnum(c);
  2451. }
  2452. static bool maybe_add_invalid_named_reference(
  2453. struct GumboInternalParser* parser, Utf8Iterator* input) {
  2454. // The iterator will always be reset in this code path, so we don't need to
  2455. // worry about consuming characters.
  2456. const char* start = utf8iterator_get_char_pointer(input);
  2457. int c = utf8iterator_current(input);
  2458. while ((c >= 'a' && c <= 'z') ||
  2459. (c >= 'A' && c <= 'Z') ||
  2460. (c >= '0' && c <= '9')) {
  2461. utf8iterator_next(input);
  2462. c = utf8iterator_current(input);
  2463. }
  2464. if (c == ';') {
  2465. GumboStringPiece bad_ref;
  2466. bad_ref.data = start;
  2467. bad_ref.length = utf8iterator_get_char_pointer(input) - start;
  2468. add_named_reference_error(
  2469. parser, input, GUMBO_ERR_NAMED_CHAR_REF_INVALID, bad_ref);
  2470. return false;
  2471. }
  2472. return true;
  2473. }
  2474. static bool consume_named_ref(
  2475. struct GumboInternalParser* parser, Utf8Iterator* input, bool is_in_attribute,
  2476. OneOrTwoCodepoints* output) {
  2477. assert(output->first == kGumboNoChar);
  2478. const NamedCharRef* char_ref = find_named_char_ref(input);
  2479. if (char_ref) {
  2480. assert(char_ref->length == strlen(char_ref->name));
  2481. char last_char = char_ref->name[char_ref->length - 1];
  2482. if (last_char == ';') {
  2483. *output = char_ref->codepoints;
  2484. assert(output->first != kGumboNoChar);
  2485. return true;
  2486. } else if (is_in_attribute && is_legal_attribute_char_next(input)) {
  2487. utf8iterator_reset(input);
  2488. return true;
  2489. } else {
  2490. GumboStringPiece bad_ref;
  2491. bad_ref.data = char_ref->name;
  2492. bad_ref.length = char_ref->length;
  2493. add_named_reference_error(
  2494. parser, input, GUMBO_ERR_NAMED_CHAR_REF_WITHOUT_SEMICOLON, bad_ref);
  2495. *output = char_ref->codepoints;
  2496. assert(output->first != kGumboNoChar);
  2497. return false;
  2498. }
  2499. } else {
  2500. bool status = maybe_add_invalid_named_reference(parser, input);
  2501. utf8iterator_reset(input);
  2502. return status;
  2503. }
  2504. }
  2505. bool consume_char_ref(
  2506. struct GumboInternalParser* parser, struct GumboInternalUtf8Iterator* input,
  2507. int additional_allowed_char, bool is_in_attribute,
  2508. OneOrTwoCodepoints* output) {
  2509. utf8iterator_mark(input);
  2510. utf8iterator_next(input);
  2511. int c = utf8iterator_current(input);
  2512. output->first = kGumboNoChar;
  2513. output->second = kGumboNoChar;
  2514. if (c == additional_allowed_char) {
  2515. utf8iterator_reset(input);
  2516. output->first = kGumboNoChar;
  2517. return true;
  2518. }
  2519. switch (utf8iterator_current(input)) {
  2520. case '\t':
  2521. case '\n':
  2522. case '\f':
  2523. case ' ':
  2524. case '<':
  2525. case '&':
  2526. case -1:
  2527. utf8iterator_reset(input);
  2528. return true;
  2529. case '#':
  2530. return consume_numeric_ref(parser, input, &output->first);
  2531. default:
  2532. return consume_named_ref(parser, input, is_in_attribute, output);
  2533. }
  2534. }