inquisition 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Alexander Rakoczy
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,28 @@
1
+ = inquisition
2
+
3
+ == Introduction
4
+
5
+ Inquisition will sanitize HTML as to help avoid cross site scripting attacks!
6
+ It keeps your strings heresy-free.
7
+
8
+ == How
9
+
10
+ Inquisition offers you three methods on Object:
11
+
12
+ cleanse_attr *attributes
13
+ cleanse_attr_reader *attributes
14
+ cleanse_attr_writer *attributes
15
+
16
+ These methods will wrap your getters and/or setters for an attribute through a
17
+ HTML5 Sanitizer. This should help to protect against most kinds of cross site
18
+ scripting attacks.
19
+
20
+ == Installation
21
+
22
+ sudo gem install thumblemonks-inquisition
23
+
24
+ == Copyright
25
+
26
+ lib/html5lib_sanitize.rb Copyright (c) Jacques Distler
27
+
28
+ Everything else is Copyright (c) 2009 Alexander Rakoczy. See LICENSE for details.
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "inquisition"
8
+ gem.summary = %Q{TODO}
9
+ gem.email = "scissorjammer@gmail.com"
10
+ gem.homepage = "http://github.com/toothrot/inquisition"
11
+ gem.authors = ["toothrot"]
12
+
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
+ end
18
+
19
+ require 'rake/testtask'
20
+ Rake::TestTask.new(:test) do |test|
21
+ test.libs << 'lib' << 'test'
22
+ test.pattern = 'test/**/*_test.rb'
23
+ test.verbose = false
24
+ end
25
+
26
+ begin
27
+ require 'rcov/rcovtask'
28
+ Rcov::RcovTask.new do |test|
29
+ test.libs << 'test'
30
+ test.pattern = 'test/**/*_test.rb'
31
+ test.verbose = true
32
+ end
33
+ rescue LoadError
34
+ task :rcov do
35
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
36
+ end
37
+ end
38
+
39
+
40
+ task :default => :test
41
+
42
+ require 'rake/rdoctask'
43
+ Rake::RDocTask.new do |rdoc|
44
+ if File.exist?('VERSION.yml')
45
+ config = YAML.load(File.read('VERSION.yml'))
46
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
47
+ else
48
+ version = ""
49
+ end
50
+
51
+ rdoc.rdoc_dir = 'rdoc'
52
+ rdoc.title = "inquisition #{version}"
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
56
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 1
3
+ :patch: 4
4
+ :major: 0
@@ -0,0 +1,2453 @@
1
+ # == Introduction
2
+ #
3
+ # This module provides sanitization of XHTML+MathML+SVG
4
+ # and of inline style attributes. Its genesis is {described here}[http://golem.ph.utexas.edu/~distler/blog/archives/001181.html].
5
+ #
6
+ # Uses the {HTML5lib parser}[http://code.google.com/p/html5lib/], so that the parsing behaviour should
7
+ # resemble that of browsers.
8
+ #
9
+ # sanitize_xhtml() is a case-sensitive sanitizer, suitable for XHTML
10
+ # sanitize_html() is a case-insensitive sanitizer suitable for HTML
11
+ # sanitize_rexml() sanitizes a REXML tree, returning a string
12
+ #
13
+ # == Files
14
+ #
15
+ # {sanitize.rb}[http://golem.ph.utexas.edu/~distler/code/instiki/svn/lib/sanitize.rb],
16
+ # {HTML5lib}[http://golem.ph.utexas.edu/~distler/code/instiki/svn/vendor/plugins/HTML5lib/]
17
+ #
18
+ # == Author
19
+ #
20
+ # {Jacques Distler}[http://golem.ph.utexas.edu/~distler/]
21
+ #
22
+ # == License
23
+ #
24
+ # Ruby License
25
+
26
+ class HTML5libSanitize
27
+
28
+ require 'html5/html5parser'
29
+ require 'html5/liberalxmlparser'
30
+ require 'html5/treewalkers'
31
+ require 'html5/treebuilders'
32
+ require 'html5/serializer'
33
+ require 'html5/sanitizer'
34
+
35
+ include HTML5
36
+
37
+ # Sanitize a string, parsed using XHTML parsing rules.
38
+ #
39
+ # :call-seq:
40
+ # sanitize_xhtml(string) -> string
41
+ # sanitize_xhtml(string, {:encoding => 'iso-8859-1', :to_tree => true}) -> REXML::Document
42
+ #
43
+ # Unless otherwise specified, the string is assumed to be utf-8 encoded.
44
+ # By default, the output is a string. But, optionally, you can return a REXML tree.
45
+ #
46
+ # The string returned is utf-8 encoded. If you want, you can use iconv to convert it to some other encoding.
47
+ # (REXML trees are always utf-8 encoded.)
48
+ def self.sanitize_xhtml(html, options = {})
49
+ @encoding = 'utf-8'
50
+ @treebuilder = TreeBuilders::REXML::TreeBuilder
51
+ @to_tree = false
52
+ options.each do |name, value|
53
+ next unless %w(encoding treebuilder to_tree).include? name.to_s
54
+ if name.to_s == 'treebuilder'
55
+ @treebuilder = HTML5lib::TreeBuilders.get_tree_builder(value)
56
+ else
57
+ instance_variable_set("@#{name}", value)
58
+ end
59
+ end
60
+ if @encoding == 'utf-8'
61
+ parsed = XHTMLParser.parse_fragment(html.to_utf8, {:tokenizer => HTMLSanitizer,
62
+ :lowercase_element_name => false, :lowercase_attr_name => false,
63
+ :encoding => @encoding, :tree => @treebuilder })
64
+ else
65
+ parsed = XHTMLParser.parse_fragment(html.to_ncr, {:tokenizer => HTMLSanitizer,
66
+ :lowercase_element_name => false, :lowercase_attr_name => false,
67
+ :encoding => @encoding, :tree => @treebuilder })
68
+ end
69
+ return parsed if @to_tree
70
+ return parsed.to_s
71
+ end
72
+
73
+ # Sanitize a string, parsed using HTML parsing rules.
74
+ #
75
+ # :call-seq:
76
+ # sanitize_html( string ) -> string
77
+ # sanitize_html( string, {:encoding => 'iso-8859-1', :to_tree => true} ) -> REXML::Document
78
+ #
79
+ # Unless otherwise specified, the string is assumed to be utf-8 encoded.
80
+ # By default, the output is a string. But, optionally, you can return a REXML tree.
81
+ #
82
+ # The string returned is utf-8 encoded. If you want, you can use iconv to convert it to some other encoding.
83
+ # (REXML trees are always utf-8 encoded.)
84
+ def self.sanitize_html(html, options = {})
85
+ @encoding = 'utf-8'
86
+ @treebuilder = TreeBuilders::REXML::TreeBuilder
87
+ @to_tree = false
88
+ options.each do |name, value|
89
+ next unless %w(encoding treebuilder to_tree).include? name.to_s
90
+ if name.to_s == 'treebuilder'
91
+ @treebuilder = HTML5lib::TreeBuilders.get_tree_builder(value)
92
+ else
93
+ instance_variable_set("@#{name}", value)
94
+ end
95
+ end
96
+ if @encoding == 'utf-8'
97
+ parsed = HTMLParser.parse_fragment(html.to_utf8, {:tokenizer => HTMLSanitizer,
98
+ :encoding => @encoding, :tree => @treebuilder })
99
+ else
100
+ parsed = HTMLParser.parse_fragment(html.to_ncr, {:tokenizer => HTMLSanitizer,
101
+ :encoding => @encoding, :tree => @treebuilder })
102
+ end
103
+ return parsed if @to_tree
104
+ return parsed.to_s
105
+ end
106
+
107
+ # Sanitize a REXML tree. The output is a string.
108
+ #
109
+ # :call-seq:
110
+ # sanitize_rexml(tree) -> string
111
+ #
112
+ def self.sanitize_rexml(tree)
113
+ tokens = TreeWalkers.get_tree_walker('rexml2').new(tree)
114
+ XHTMLSerializer.serialize(tokens, {:encoding=>'utf-8',
115
+ :space_before_trailing_solidus => true,
116
+ :inject_meta_charset => false,
117
+ :sanitize => true})
118
+ end
119
+ end
120
+
121
+ # Some useful additions to the String class
122
+
123
+ class String
124
+
125
+ # Check whether a string is valid utf-8
126
+ #
127
+ # :call-seq:
128
+ # string.is_utf8? -> boolean
129
+ #
130
+ # returns true if the sequence of bytes in string is valid utf-8
131
+ #--
132
+ def is_utf8?
133
+ #expand NCRs to utf-8
134
+ text = self.gsub(/&#x([a-fA-F0-9]+);/) {|m| [$1.hex].pack('U*') }
135
+ text.gsub!(/&#(\d+);/) {|m| [$1.to_i].pack('U*') }
136
+ #ensure the resulting string of bytes is valid utf-8
137
+ text =~ /\A(
138
+ [\x09\x0A\x0D\x20-\x7E] # ASCII
139
+ | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
140
+ | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
141
+ | [\xE1-\xEC\xEE][\x80-\xBF]{2} # straight 3-byte
142
+ | \xEF[\x80-\xBE]{2} #
143
+ | \xEF\xBF[\x80-\xBD] # excluding U+fffe and U+ffff
144
+ | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
145
+ | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
146
+ | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
147
+ | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
148
+ )*\Z/x;
149
+ end
150
+ #++
151
+
152
+ #:stopdoc:
153
+ MATHML_ENTITIES = {
154
+ 'Alpha' => '&#x0391;',
155
+ 'Beta' => '&#x0392;',
156
+ 'Epsilon' => '&#x0395;',
157
+ 'Zeta' => '&#x0396;',
158
+ 'Eta' => '&#x0397;',
159
+ 'Iota' => '&#x0399;',
160
+ 'Kappa' => '&#x039A;',
161
+ 'Mu' => '&#x039C;',
162
+ 'Nu' => '&#x039D;',
163
+ 'Omicron' => '&#x039F;',
164
+ 'Rho' => '&#x03A1;',
165
+ 'Tau' => '&#x03A4;',
166
+ 'Chi' => '&#x03A7;',
167
+ 'epsilon' => '&#x03B5;',
168
+ 'zeta' => '&#x03B6;',
169
+ 'omicron' => '&#x03BF;',
170
+ 'sigmaf' => '&#x03C2;',
171
+ 'thetasym' => '&#x03D1;',
172
+ 'upsih' => '&#x03D2;',
173
+ 'oline' => '&#x203E;',
174
+ 'frasl' => '&#x2044;',
175
+ 'alefsym' => '&#x2135;',
176
+ 'crarr' => '&#x21B5;',
177
+ 'empty' => '&#x2205;',
178
+ 'amp' => '&#x0026;',
179
+ 'lt' => '&#x003C;',
180
+ 'zwnj' => '&#x200C;',
181
+ 'zwj' => '&#x200D;',
182
+ 'lrm' => '&#x200E;',
183
+ 'rlm' => '&#x200F;',
184
+ 'sbquo' => '&#x201A;',
185
+ 'bdquo' => '&#x201E;',
186
+ 'lsaquo' => '&#x2039;',
187
+ 'rsaquo' => '&#x203A;',
188
+ 'euro' => '&#x20AC;',
189
+ 'angzarr' => '&#x0237C;',
190
+ 'cirmid' => '&#x02AEF;',
191
+ 'cudarrl' => '&#x02938;',
192
+ 'cudarrr' => '&#x02935;',
193
+ 'cularr' => '&#x021B6;',
194
+ 'cularrp' => '&#x0293D;',
195
+ 'curarr' => '&#x021B7;',
196
+ 'curarrm' => '&#x0293C;',
197
+ 'Darr' => '&#x021A1;',
198
+ 'dArr' => '&#x021D3;',
199
+ 'ddarr' => '&#x021CA;',
200
+ 'DDotrahd' => '&#x02911;',
201
+ 'dfisht' => '&#x0297F;',
202
+ 'dHar' => '&#x02965;',
203
+ 'dharl' => '&#x021C3;',
204
+ 'dharr' => '&#x021C2;',
205
+ 'duarr' => '&#x021F5;',
206
+ 'duhar' => '&#x0296F;',
207
+ 'dzigrarr' => '&#x027FF;',
208
+ 'erarr' => '&#x02971;',
209
+ 'hArr' => '&#x021D4;',
210
+ 'harr' => '&#x02194;',
211
+ 'harrcir' => '&#x02948;',
212
+ 'harrw' => '&#x021AD;',
213
+ 'hoarr' => '&#x021FF;',
214
+ 'imof' => '&#x022B7;',
215
+ 'lAarr' => '&#x021DA;',
216
+ 'Larr' => '&#x0219E;',
217
+ 'larrbfs' => '&#x0291F;',
218
+ 'larrfs' => '&#x0291D;',
219
+ 'larrhk' => '&#x021A9;',
220
+ 'larrlp' => '&#x021AB;',
221
+ 'larrpl' => '&#x02939;',
222
+ 'larrsim' => '&#x02973;',
223
+ 'larrtl' => '&#x021A2;',
224
+ 'lAtail' => '&#x0291B;',
225
+ 'latail' => '&#x02919;',
226
+ 'lBarr' => '&#x0290E;',
227
+ 'lbarr' => '&#x0290C;',
228
+ 'ldca' => '&#x02936;',
229
+ 'ldrdhar' => '&#x02967;',
230
+ 'ldrushar' => '&#x0294B;',
231
+ 'ldsh' => '&#x021B2;',
232
+ 'lfisht' => '&#x0297C;',
233
+ 'lHar' => '&#x02962;',
234
+ 'lhard' => '&#x021BD;',
235
+ 'lharu' => '&#x021BC;',
236
+ 'lharul' => '&#x0296A;',
237
+ 'llarr' => '&#x021C7;',
238
+ 'llhard' => '&#x0296B;',
239
+ 'loarr' => '&#x021FD;',
240
+ 'lrarr' => '&#x021C6;',
241
+ 'lrhar' => '&#x021CB;',
242
+ 'lrhard' => '&#x0296D;',
243
+ 'lsh' => '&#x021B0;',
244
+ 'lurdshar' => '&#x0294A;',
245
+ 'luruhar' => '&#x02966;',
246
+ 'Map' => '&#x02905;',
247
+ 'map' => '&#x021A6;',
248
+ 'midcir' => '&#x02AF0;',
249
+ 'mumap' => '&#x022B8;',
250
+ 'nearhk' => '&#x02924;',
251
+ 'neArr' => '&#x021D7;',
252
+ 'nearr' => '&#x02197;',
253
+ 'nesear' => '&#x02928;',
254
+ 'nhArr' => '&#x021CE;',
255
+ 'nharr' => '&#x021AE;',
256
+ 'nlArr' => '&#x021CD;',
257
+ 'nlarr' => '&#x0219A;',
258
+ 'nrArr' => '&#x021CF;',
259
+ 'nrarr' => '&#x0219B;',
260
+ 'nrarrc' => '&#x02933;&#x00338;',
261
+ 'nrarrw' => '&#x0219D;&#x00338;',
262
+ 'nvHarr' => '&#x02904;',
263
+ 'nvlArr' => '&#x02902;',
264
+ 'nvrArr' => '&#x02903;',
265
+ 'nwarhk' => '&#x02923;',
266
+ 'nwArr' => '&#x021D6;',
267
+ 'nwarr' => '&#x02196;',
268
+ 'nwnear' => '&#x02927;',
269
+ 'olarr' => '&#x021BA;',
270
+ 'orarr' => '&#x021BB;',
271
+ 'origof' => '&#x022B6;',
272
+ 'rAarr' => '&#x021DB;',
273
+ 'Rarr' => '&#x021A0;',
274
+ 'rarrap' => '&#x02975;',
275
+ 'rarrbfs' => '&#x02920;',
276
+ 'rarrc' => '&#x02933;',
277
+ 'rarrfs' => '&#x0291E;',
278
+ 'rarrhk' => '&#x021AA;',
279
+ 'rarrlp' => '&#x021AC;',
280
+ 'rarrpl' => '&#x02945;',
281
+ 'rarrsim' => '&#x02974;',
282
+ 'Rarrtl' => '&#x02916;',
283
+ 'rarrtl' => '&#x021A3;',
284
+ 'rarrw' => '&#x0219D;',
285
+ 'rAtail' => '&#x0291C;',
286
+ 'ratail' => '&#x0291A;',
287
+ 'RBarr' => '&#x02910;',
288
+ 'rBarr' => '&#x0290F;',
289
+ 'rbarr' => '&#x0290D;',
290
+ 'rdca' => '&#x02937;',
291
+ 'rdldhar' => '&#x02969;',
292
+ 'rdsh' => '&#x021B3;',
293
+ 'rfisht' => '&#x0297D;',
294
+ 'rHar' => '&#x02964;',
295
+ 'rhard' => '&#x021C1;',
296
+ 'rharu' => '&#x021C0;',
297
+ 'rharul' => '&#x0296C;',
298
+ 'rlarr' => '&#x021C4;',
299
+ 'rlhar' => '&#x021CC;',
300
+ 'roarr' => '&#x021FE;',
301
+ 'rrarr' => '&#x021C9;',
302
+ 'rsh' => '&#x021B1;',
303
+ 'ruluhar' => '&#x02968;',
304
+ 'searhk' => '&#x02925;',
305
+ 'seArr' => '&#x021D8;',
306
+ 'searr' => '&#x02198;',
307
+ 'seswar' => '&#x02929;',
308
+ 'simrarr' => '&#x02972;',
309
+ 'slarr' => '&#x02190;',
310
+ 'srarr' => '&#x02192;',
311
+ 'swarhk' => '&#x02926;',
312
+ 'swArr' => '&#x021D9;',
313
+ 'swarr' => '&#x02199;',
314
+ 'swnwar' => '&#x0292A;',
315
+ 'Uarr' => '&#x0219F;',
316
+ 'uArr' => '&#x021D1;',
317
+ 'Uarrocir' => '&#x02949;',
318
+ 'udarr' => '&#x021C5;',
319
+ 'udhar' => '&#x0296E;',
320
+ 'ufisht' => '&#x0297E;',
321
+ 'uHar' => '&#x02963;',
322
+ 'uharl' => '&#x021BF;',
323
+ 'uharr' => '&#x021BE;',
324
+ 'uuarr' => '&#x021C8;',
325
+ 'vArr' => '&#x021D5;',
326
+ 'varr' => '&#x02195;',
327
+ 'xhArr' => '&#x027FA;',
328
+ 'xharr' => '&#x027F7;',
329
+ 'xlArr' => '&#x027F8;',
330
+ 'xlarr' => '&#x027F5;',
331
+ 'xmap' => '&#x027FC;',
332
+ 'xrArr' => '&#x027F9;',
333
+ 'xrarr' => '&#x027F6;',
334
+ 'zigrarr' => '&#x021DD;',
335
+ 'ac' => '&#x0223E;',
336
+ 'acE' => '&#x0223E;&#x00333;',
337
+ 'amalg' => '&#x02A3F;',
338
+ 'barvee' => '&#x022BD;',
339
+ 'Barwed' => '&#x02306;',
340
+ 'barwed' => '&#x02305;',
341
+ 'bsolb' => '&#x029C5;',
342
+ 'Cap' => '&#x022D2;',
343
+ 'capand' => '&#x02A44;',
344
+ 'capbrcup' => '&#x02A49;',
345
+ 'capcap' => '&#x02A4B;',
346
+ 'capcup' => '&#x02A47;',
347
+ 'capdot' => '&#x02A40;',
348
+ 'caps' => '&#x02229;&#x0FE00;',
349
+ 'ccaps' => '&#x02A4D;',
350
+ 'ccups' => '&#x02A4C;',
351
+ 'ccupssm' => '&#x02A50;',
352
+ 'coprod' => '&#x02210;',
353
+ 'Cup' => '&#x022D3;',
354
+ 'cupbrcap' => '&#x02A48;',
355
+ 'cupcap' => '&#x02A46;',
356
+ 'cupcup' => '&#x02A4A;',
357
+ 'cupdot' => '&#x0228D;',
358
+ 'cupor' => '&#x02A45;',
359
+ 'cups' => '&#x0222A;&#x0FE00;',
360
+ 'cuvee' => '&#x022CE;',
361
+ 'cuwed' => '&#x022CF;',
362
+ 'Dagger' => '&#x02021;',
363
+ 'dagger' => '&#x02020;',
364
+ 'diam' => '&#x022C4;',
365
+ 'divonx' => '&#x022C7;',
366
+ 'eplus' => '&#x02A71;',
367
+ 'hercon' => '&#x022B9;',
368
+ 'intcal' => '&#x022BA;',
369
+ 'iprod' => '&#x02A3C;',
370
+ 'loplus' => '&#x02A2D;',
371
+ 'lotimes' => '&#x02A34;',
372
+ 'lthree' => '&#x022CB;',
373
+ 'ltimes' => '&#x022C9;',
374
+ 'midast' => '&#x0002A;',
375
+ 'minusb' => '&#x0229F;',
376
+ 'minusd' => '&#x02238;',
377
+ 'minusdu' => '&#x02A2A;',
378
+ 'ncap' => '&#x02A43;',
379
+ 'ncup' => '&#x02A42;',
380
+ 'oast' => '&#x0229B;',
381
+ 'ocir' => '&#x0229A;',
382
+ 'odash' => '&#x0229D;',
383
+ 'odiv' => '&#x02A38;',
384
+ 'odot' => '&#x02299;',
385
+ 'odsold' => '&#x029BC;',
386
+ 'ofcir' => '&#x029BF;',
387
+ 'ogt' => '&#x029C1;',
388
+ 'ohbar' => '&#x029B5;',
389
+ 'olcir' => '&#x029BE;',
390
+ 'olt' => '&#x029C0;',
391
+ 'omid' => '&#x029B6;',
392
+ 'ominus' => '&#x02296;',
393
+ 'opar' => '&#x029B7;',
394
+ 'operp' => '&#x029B9;',
395
+ 'oplus' => '&#x02295;',
396
+ 'osol' => '&#x02298;',
397
+ 'Otimes' => '&#x02A37;',
398
+ 'otimes' => '&#x02297;',
399
+ 'otimesas' => '&#x02A36;',
400
+ 'ovbar' => '&#x0233D;',
401
+ 'plusacir' => '&#x02A23;',
402
+ 'plusb' => '&#x0229E;',
403
+ 'pluscir' => '&#x02A22;',
404
+ 'plusdo' => '&#x02214;',
405
+ 'plusdu' => '&#x02A25;',
406
+ 'pluse' => '&#x02A72;',
407
+ 'plussim' => '&#x02A26;',
408
+ 'plustwo' => '&#x02A27;',
409
+ 'prod' => '&#x0220F;',
410
+ 'race' => '&#x029DA;',
411
+ 'roplus' => '&#x02A2E;',
412
+ 'rotimes' => '&#x02A35;',
413
+ 'rthree' => '&#x022CC;',
414
+ 'rtimes' => '&#x022CA;',
415
+ 'sdot' => '&#x022C5;',
416
+ 'sdotb' => '&#x022A1;',
417
+ 'setmn' => '&#x02216;',
418
+ 'simplus' => '&#x02A24;',
419
+ 'smashp' => '&#x02A33;',
420
+ 'solb' => '&#x029C4;',
421
+ 'sqcap' => '&#x02293;',
422
+ 'sqcaps' => '&#x02293;&#x0FE00;',
423
+ 'sqcup' => '&#x02294;',
424
+ 'sqcups' => '&#x02294;&#x0FE00;',
425
+ 'ssetmn' => '&#x02216;',
426
+ 'sstarf' => '&#x022C6;',
427
+ 'subdot' => '&#x02ABD;',
428
+ 'sum' => '&#x02211;',
429
+ 'supdot' => '&#x02ABE;',
430
+ 'timesb' => '&#x022A0;',
431
+ 'timesbar' => '&#x02A31;',
432
+ 'timesd' => '&#x02A30;',
433
+ 'tridot' => '&#x025EC;',
434
+ 'triminus' => '&#x02A3A;',
435
+ 'triplus' => '&#x02A39;',
436
+ 'trisb' => '&#x029CD;',
437
+ 'tritime' => '&#x02A3B;',
438
+ 'uplus' => '&#x0228E;',
439
+ 'veebar' => '&#x022BB;',
440
+ 'wedbar' => '&#x02A5F;',
441
+ 'wreath' => '&#x02240;',
442
+ 'xcap' => '&#x022C2;',
443
+ 'xcirc' => '&#x025EF;',
444
+ 'xcup' => '&#x022C3;',
445
+ 'xdtri' => '&#x025BD;',
446
+ 'xodot' => '&#x02A00;',
447
+ 'xoplus' => '&#x02A01;',
448
+ 'xotime' => '&#x02A02;',
449
+ 'xsqcup' => '&#x02A06;',
450
+ 'xuplus' => '&#x02A04;',
451
+ 'xutri' => '&#x025B3;',
452
+ 'xvee' => '&#x022C1;',
453
+ 'xwedge' => '&#x022C0;',
454
+ 'dlcorn' => '&#x0231E;',
455
+ 'drcorn' => '&#x0231F;',
456
+ 'gtlPar' => '&#x02995;',
457
+ 'langd' => '&#x02991;',
458
+ 'lbrke' => '&#x0298B;',
459
+ 'lbrksld' => '&#x0298F;',
460
+ 'lbrkslu' => '&#x0298D;',
461
+ 'lceil' => '&#x02308;',
462
+ 'lfloor' => '&#x0230A;',
463
+ 'lmoust' => '&#x023B0;',
464
+ 'lparlt' => '&#x02993;',
465
+ 'ltrPar' => '&#x02996;',
466
+ 'rangd' => '&#x02992;',
467
+ 'rbrke' => '&#x0298C;',
468
+ 'rbrksld' => '&#x0298E;',
469
+ 'rbrkslu' => '&#x02990;',
470
+ 'rceil' => '&#x02309;',
471
+ 'rfloor' => '&#x0230B;',
472
+ 'rmoust' => '&#x023B1;',
473
+ 'rpargt' => '&#x02994;',
474
+ 'ulcorn' => '&#x0231C;',
475
+ 'urcorn' => '&#x0231D;',
476
+ 'gnap' => '&#x02A8A;',
477
+ 'gnE' => '&#x02269;',
478
+ 'gne' => '&#x02A88;',
479
+ 'gnsim' => '&#x022E7;',
480
+ 'gvnE' => '&#x02269;&#x0FE00;',
481
+ 'lnap' => '&#x02A89;',
482
+ 'lnE' => '&#x02268;',
483
+ 'lne' => '&#x02A87;',
484
+ 'lnsim' => '&#x022E6;',
485
+ 'lvnE' => '&#x02268;&#x0FE00;',
486
+ 'nap' => '&#x02249;',
487
+ 'napE' => '&#x02A70;&#x00338;',
488
+ 'napid' => '&#x0224B;&#x00338;',
489
+ 'ncong' => '&#x02247;',
490
+ 'ncongdot' => '&#x02A6D;&#x00338;',
491
+ 'nequiv' => '&#x02262;',
492
+ 'ngE' => '&#x02267;&#x00338;',
493
+ 'nge' => '&#x02271;',
494
+ 'nges' => '&#x02A7E;&#x00338;',
495
+ 'nGg' => '&#x022D9;&#x00338;',
496
+ 'ngsim' => '&#x02275;',
497
+ 'nGt' => '&#x0226B;&#x020D2;',
498
+ 'ngt' => '&#x0226F;',
499
+ 'nGtv' => '&#x0226B;&#x00338;',
500
+ 'nlE' => '&#x02266;&#x00338;',
501
+ 'nle' => '&#x02270;',
502
+ 'nles' => '&#x02A7D;&#x00338;',
503
+ 'nLl' => '&#x022D8;&#x00338;',
504
+ 'nlsim' => '&#x02274;',
505
+ 'nLt' => '&#x0226A;&#x020D2;',
506
+ 'nlt' => '&#x0226E;',
507
+ 'nltri' => '&#x022EA;',
508
+ 'nltrie' => '&#x022EC;',
509
+ 'nLtv' => '&#x0226A;&#x00338;',
510
+ 'nmid' => '&#x02224;',
511
+ 'npar' => '&#x02226;',
512
+ 'npr' => '&#x02280;',
513
+ 'nprcue' => '&#x022E0;',
514
+ 'npre' => '&#x02AAF;&#x00338;',
515
+ 'nrtri' => '&#x022EB;',
516
+ 'nrtrie' => '&#x022ED;',
517
+ 'nsc' => '&#x02281;',
518
+ 'nsccue' => '&#x022E1;',
519
+ 'nsce' => '&#x02AB0;&#x00338;',
520
+ 'nsim' => '&#x02241;',
521
+ 'nsime' => '&#x02244;',
522
+ 'nsmid' => '&#x02224;',
523
+ 'nspar' => '&#x02226;',
524
+ 'nsqsube' => '&#x022E2;',
525
+ 'nsqsupe' => '&#x022E3;',
526
+ 'nsub' => '&#x02284;',
527
+ 'nsubE' => '&#x02AC5;&#x00338;',
528
+ 'nsube' => '&#x02288;',
529
+ 'nsup' => '&#x02285;',
530
+ 'nsupE' => '&#x02AC6;&#x00338;',
531
+ 'nsupe' => '&#x02289;',
532
+ 'ntgl' => '&#x02279;',
533
+ 'ntlg' => '&#x02278;',
534
+ 'nvap' => '&#x0224D;&#x020D2;',
535
+ 'nVDash' => '&#x022AF;',
536
+ 'nVdash' => '&#x022AE;',
537
+ 'nvDash' => '&#x022AD;',
538
+ 'nvdash' => '&#x022AC;',
539
+ 'nvge' => '&#x02265;&#x020D2;',
540
+ 'nvgt' => '&#x0003E;&#x020D2;',
541
+ 'nvle' => '&#x02264;&#x020D2;',
542
+ 'nvltrie' => '&#x022B4;&#x020D2;',
543
+ 'nvrtrie' => '&#x022B5;&#x020D2;',
544
+ 'nvsim' => '&#x0223C;&#x020D2;',
545
+ 'parsim' => '&#x02AF3;',
546
+ 'prnap' => '&#x02AB9;',
547
+ 'prnE' => '&#x02AB5;',
548
+ 'prnsim' => '&#x022E8;',
549
+ 'rnmid' => '&#x02AEE;',
550
+ 'scnap' => '&#x02ABA;',
551
+ 'scnE' => '&#x02AB6;',
552
+ 'scnsim' => '&#x022E9;',
553
+ 'simne' => '&#x02246;',
554
+ 'solbar' => '&#x0233F;',
555
+ 'subnE' => '&#x02ACB;',
556
+ 'subne' => '&#x0228A;',
557
+ 'supnE' => '&#x02ACC;',
558
+ 'supne' => '&#x0228B;',
559
+ 'vnsub' => '&#x02282;&#x020D2;',
560
+ 'vnsup' => '&#x02283;&#x020D2;',
561
+ 'vsubnE' => '&#x02ACB;&#x0FE00;',
562
+ 'vsubne' => '&#x0228A;&#x0FE00;',
563
+ 'vsupnE' => '&#x02ACC;&#x0FE00;',
564
+ 'vsupne' => '&#x0228B;&#x0FE00;',
565
+ 'ang' => '&#x02220;',
566
+ 'ange' => '&#x029A4;',
567
+ 'angmsd' => '&#x02221;',
568
+ 'angmsdaa' => '&#x029A8;',
569
+ 'angmsdab' => '&#x029A9;',
570
+ 'angmsdac' => '&#x029AA;',
571
+ 'angmsdad' => '&#x029AB;',
572
+ 'angmsdae' => '&#x029AC;',
573
+ 'angmsdaf' => '&#x029AD;',
574
+ 'angmsdag' => '&#x029AE;',
575
+ 'angmsdah' => '&#x029AF;',
576
+ 'angrtvb' => '&#x022BE;',
577
+ 'angrtvbd' => '&#x0299D;',
578
+ 'bbrk' => '&#x023B5;',
579
+ 'bbrktbrk' => '&#x023B6;',
580
+ 'bemptyv' => '&#x029B0;',
581
+ 'beth' => '&#x02136;',
582
+ 'boxbox' => '&#x029C9;',
583
+ 'bprime' => '&#x02035;',
584
+ 'bsemi' => '&#x0204F;',
585
+ 'cemptyv' => '&#x029B2;',
586
+ 'cirE' => '&#x029C3;',
587
+ 'cirscir' => '&#x029C2;',
588
+ 'comp' => '&#x02201;',
589
+ 'daleth' => '&#x02138;',
590
+ 'demptyv' => '&#x029B1;',
591
+ 'ell' => '&#x02113;',
592
+ 'empty' => '&#x02205;',
593
+ 'emptyv' => '&#x02205;',
594
+ 'gimel' => '&#x02137;',
595
+ 'iiota' => '&#x02129;',
596
+ 'image' => '&#x02111;',
597
+ 'imath' => '&#x00131;',
598
+ 'jmath' => '&#x0006A;',
599
+ 'laemptyv' => '&#x029B4;',
600
+ 'lltri' => '&#x025FA;',
601
+ 'lrtri' => '&#x022BF;',
602
+ 'mho' => '&#x02127;',
603
+ 'nang' => '&#x02220;&#x020D2;',
604
+ 'nexist' => '&#x02204;',
605
+ 'oS' => '&#x024C8;',
606
+ 'planck' => '&#x0210F;',
607
+ 'plankv' => '&#x0210F;',
608
+ 'raemptyv' => '&#x029B3;',
609
+ 'range' => '&#x029A5;',
610
+ 'real' => '&#x0211C;',
611
+ 'tbrk' => '&#x023B4;',
612
+ 'trpezium' => '&#x0FFFD;',
613
+ 'ultri' => '&#x025F8;',
614
+ 'urtri' => '&#x025F9;',
615
+ 'vzigzag' => '&#x0299A;',
616
+ 'weierp' => '&#x02118;',
617
+ 'apE' => '&#x02A70;',
618
+ 'ape' => '&#x0224A;',
619
+ 'apid' => '&#x0224B;',
620
+ 'asymp' => '&#x02248;',
621
+ 'Barv' => '&#x02AE7;',
622
+ 'bcong' => '&#x0224C;',
623
+ 'bepsi' => '&#x003F6;',
624
+ 'bowtie' => '&#x022C8;',
625
+ 'bsim' => '&#x0223D;',
626
+ 'bsime' => '&#x022CD;',
627
+ 'bsolhsub' => '&#x0005C;&#x02282;',
628
+ 'bump' => '&#x0224E;',
629
+ 'bumpE' => '&#x02AAE;',
630
+ 'bumpe' => '&#x0224F;',
631
+ 'cire' => '&#x02257;',
632
+ 'Colon' => '&#x02237;',
633
+ 'Colone' => '&#x02A74;',
634
+ 'colone' => '&#x02254;',
635
+ 'congdot' => '&#x02A6D;',
636
+ 'csub' => '&#x02ACF;',
637
+ 'csube' => '&#x02AD1;',
638
+ 'csup' => '&#x02AD0;',
639
+ 'csupe' => '&#x02AD2;',
640
+ 'cuepr' => '&#x022DE;',
641
+ 'cuesc' => '&#x022DF;',
642
+ 'Dashv' => '&#x02AE4;',
643
+ 'dashv' => '&#x022A3;',
644
+ 'easter' => '&#x02A6E;',
645
+ 'ecir' => '&#x02256;',
646
+ 'ecolon' => '&#x02255;',
647
+ 'eDDot' => '&#x02A77;',
648
+ 'eDot' => '&#x02251;',
649
+ 'efDot' => '&#x02252;',
650
+ 'eg' => '&#x02A9A;',
651
+ 'egs' => '&#x02A96;',
652
+ 'egsdot' => '&#x02A98;',
653
+ 'el' => '&#x02A99;',
654
+ 'els' => '&#x02A95;',
655
+ 'elsdot' => '&#x02A97;',
656
+ 'equest' => '&#x0225F;',
657
+ 'equivDD' => '&#x02A78;',
658
+ 'erDot' => '&#x02253;',
659
+ 'esdot' => '&#x02250;',
660
+ 'Esim' => '&#x02A73;',
661
+ 'esim' => '&#x02242;',
662
+ 'fork' => '&#x022D4;',
663
+ 'forkv' => '&#x02AD9;',
664
+ 'frown' => '&#x02322;',
665
+ 'gap' => '&#x02A86;',
666
+ 'gE' => '&#x02267;',
667
+ 'gEl' => '&#x02A8C;',
668
+ 'gel' => '&#x022DB;',
669
+ 'ges' => '&#x02A7E;',
670
+ 'gescc' => '&#x02AA9;',
671
+ 'gesdot' => '&#x02A80;',
672
+ 'gesdoto' => '&#x02A82;',
673
+ 'gesdotol' => '&#x02A84;',
674
+ 'gesl' => '&#x022DB;&#x0FE00;',
675
+ 'gesles' => '&#x02A94;',
676
+ 'Gg' => '&#x022D9;',
677
+ 'gl' => '&#x02277;',
678
+ 'gla' => '&#x02AA5;',
679
+ 'glE' => '&#x02A92;',
680
+ 'glj' => '&#x02AA4;',
681
+ 'gsim' => '&#x02273;',
682
+ 'gsime' => '&#x02A8E;',
683
+ 'gsiml' => '&#x02A90;',
684
+ 'Gt' => '&#x0226B;',
685
+ 'gtcc' => '&#x02AA7;',
686
+ 'gtcir' => '&#x02A7A;',
687
+ 'gtdot' => '&#x022D7;',
688
+ 'gtquest' => '&#x02A7C;',
689
+ 'gtrarr' => '&#x02978;',
690
+ 'homtht' => '&#x0223B;',
691
+ 'lap' => '&#x02A85;',
692
+ 'lat' => '&#x02AAB;',
693
+ 'late' => '&#x02AAD;',
694
+ 'lates' => '&#x02AAD;&#x0FE00;',
695
+ 'lE' => '&#x02266;',
696
+ 'lEg' => '&#x02A8B;',
697
+ 'leg' => '&#x022DA;',
698
+ 'les' => '&#x02A7D;',
699
+ 'lescc' => '&#x02AA8;',
700
+ 'lesdot' => '&#x02A7F;',
701
+ 'lesdoto' => '&#x02A81;',
702
+ 'lesdotor' => '&#x02A83;',
703
+ 'lesg' => '&#x022DA;&#x0FE00;',
704
+ 'lesges' => '&#x02A93;',
705
+ 'lg' => '&#x02276;',
706
+ 'lgE' => '&#x02A91;',
707
+ 'Ll' => '&#x022D8;',
708
+ 'lsim' => '&#x02272;',
709
+ 'lsime' => '&#x02A8D;',
710
+ 'lsimg' => '&#x02A8F;',
711
+ 'Lt' => '&#x0226A;',
712
+ 'ltcc' => '&#x02AA6;',
713
+ 'ltcir' => '&#x02A79;',
714
+ 'ltdot' => '&#x022D6;',
715
+ 'ltlarr' => '&#x02976;',
716
+ 'ltquest' => '&#x02A7B;',
717
+ 'ltrie' => '&#x022B4;',
718
+ 'mcomma' => '&#x02A29;',
719
+ 'mDDot' => '&#x0223A;',
720
+ 'mid' => '&#x02223;',
721
+ 'mlcp' => '&#x02ADB;',
722
+ 'models' => '&#x022A7;',
723
+ 'mstpos' => '&#x0223E;',
724
+ 'Pr' => '&#x02ABB;',
725
+ 'pr' => '&#x0227A;',
726
+ 'prap' => '&#x02AB7;',
727
+ 'prcue' => '&#x0227C;',
728
+ 'prE' => '&#x02AB3;',
729
+ 'pre' => '&#x02AAF;',
730
+ 'prsim' => '&#x0227E;',
731
+ 'prurel' => '&#x022B0;',
732
+ 'ratio' => '&#x02236;',
733
+ 'rtrie' => '&#x022B5;',
734
+ 'rtriltri' => '&#x029CE;',
735
+ 'Sc' => '&#x02ABC;',
736
+ 'sc' => '&#x0227B;',
737
+ 'scap' => '&#x02AB8;',
738
+ 'sccue' => '&#x0227D;',
739
+ 'scE' => '&#x02AB4;',
740
+ 'sce' => '&#x02AB0;',
741
+ 'scsim' => '&#x0227F;',
742
+ 'sdote' => '&#x02A66;',
743
+ 'sfrown' => '&#x02322;',
744
+ 'simg' => '&#x02A9E;',
745
+ 'simgE' => '&#x02AA0;',
746
+ 'siml' => '&#x02A9D;',
747
+ 'simlE' => '&#x02A9F;',
748
+ 'smid' => '&#x02223;',
749
+ 'smile' => '&#x02323;',
750
+ 'smt' => '&#x02AAA;',
751
+ 'smte' => '&#x02AAC;',
752
+ 'smtes' => '&#x02AAC;&#x0FE00;',
753
+ 'spar' => '&#x02225;',
754
+ 'sqsub' => '&#x0228F;',
755
+ 'sqsube' => '&#x02291;',
756
+ 'sqsup' => '&#x02290;',
757
+ 'sqsupe' => '&#x02292;',
758
+ 'ssmile' => '&#x02323;',
759
+ 'Sub' => '&#x022D0;',
760
+ 'subE' => '&#x02AC5;',
761
+ 'subedot' => '&#x02AC3;',
762
+ 'submult' => '&#x02AC1;',
763
+ 'subplus' => '&#x02ABF;',
764
+ 'subrarr' => '&#x02979;',
765
+ 'subsim' => '&#x02AC7;',
766
+ 'subsub' => '&#x02AD5;',
767
+ 'subsup' => '&#x02AD3;',
768
+ 'Sup' => '&#x022D1;',
769
+ 'supdsub' => '&#x02AD8;',
770
+ 'supE' => '&#x02AC6;',
771
+ 'supedot' => '&#x02AC4;',
772
+ 'suphsol' => '&#x02283;&#x0002F;',
773
+ 'suphsub' => '&#x02AD7;',
774
+ 'suplarr' => '&#x0297B;',
775
+ 'supmult' => '&#x02AC2;',
776
+ 'supplus' => '&#x02AC0;',
777
+ 'supsim' => '&#x02AC8;',
778
+ 'supsub' => '&#x02AD4;',
779
+ 'supsup' => '&#x02AD6;',
780
+ 'thkap' => '&#x02248;',
781
+ 'thksim' => '&#x0223C;',
782
+ 'topfork' => '&#x02ADA;',
783
+ 'trie' => '&#x0225C;',
784
+ 'twixt' => '&#x0226C;',
785
+ 'Vbar' => '&#x02AEB;',
786
+ 'vBar' => '&#x02AE8;',
787
+ 'vBarv' => '&#x02AE9;',
788
+ 'VDash' => '&#x022AB;',
789
+ 'Vdash' => '&#x022A9;',
790
+ 'vDash' => '&#x022A8;',
791
+ 'vdash' => '&#x022A2;',
792
+ 'Vdashl' => '&#x02AE6;',
793
+ 'vltri' => '&#x022B2;',
794
+ 'vprop' => '&#x0221D;',
795
+ 'vrtri' => '&#x022B3;',
796
+ 'Vvdash' => '&#x022AA;',
797
+ 'alpha' => '&#x003B1;',
798
+ 'beta' => '&#x003B2;',
799
+ 'chi' => '&#x003C7;',
800
+ 'Delta' => '&#x00394;',
801
+ 'delta' => '&#x003B4;',
802
+ 'epsi' => '&#x003F5;',
803
+ 'epsiv' => '&#x003B5;',
804
+ 'eta' => '&#x003B7;',
805
+ 'Gamma' => '&#x00393;',
806
+ 'gamma' => '&#x003B3;',
807
+ 'Gammad' => '&#x003DC;',
808
+ 'gammad' => '&#x003DD;',
809
+ 'iota' => '&#x003B9;',
810
+ 'kappa' => '&#x003BA;',
811
+ 'kappav' => '&#x003F0;',
812
+ 'Lambda' => '&#x0039B;',
813
+ 'lambda' => '&#x003BB;',
814
+ 'mu' => '&#x003BC;',
815
+ 'nu' => '&#x003BD;',
816
+ 'Omega' => '&#x003A9;',
817
+ 'omega' => '&#x003C9;',
818
+ 'Phi' => '&#x003A6;',
819
+ 'phi' => '&#x003D5;',
820
+ 'phiv' => '&#x003C6;',
821
+ 'Pi' => '&#x003A0;',
822
+ 'pi' => '&#x003C0;',
823
+ 'piv' => '&#x003D6;',
824
+ 'Psi' => '&#x003A8;',
825
+ 'psi' => '&#x003C8;',
826
+ 'rho' => '&#x003C1;',
827
+ 'rhov' => '&#x003F1;',
828
+ 'Sigma' => '&#x003A3;',
829
+ 'sigma' => '&#x003C3;',
830
+ 'sigmav' => '&#x003C2;',
831
+ 'tau' => '&#x003C4;',
832
+ 'Theta' => '&#x00398;',
833
+ 'theta' => '&#x003B8;',
834
+ 'thetav' => '&#x003D1;',
835
+ 'Upsi' => '&#x003D2;',
836
+ 'upsi' => '&#x003C5;',
837
+ 'Xi' => '&#x0039E;',
838
+ 'xi' => '&#x003BE;',
839
+ 'zeta' => '&#x003B6;',
840
+ 'Afr' => '&#x1D504;',
841
+ 'afr' => '&#x1D51E;',
842
+ 'Bfr' => '&#x1D505;',
843
+ 'bfr' => '&#x1D51F;',
844
+ 'Cfr' => '&#x0212D;',
845
+ 'cfr' => '&#x1D520;',
846
+ 'Dfr' => '&#x1D507;',
847
+ 'dfr' => '&#x1D521;',
848
+ 'Efr' => '&#x1D508;',
849
+ 'efr' => '&#x1D522;',
850
+ 'Ffr' => '&#x1D509;',
851
+ 'ffr' => '&#x1D523;',
852
+ 'Gfr' => '&#x1D50A;',
853
+ 'gfr' => '&#x1D524;',
854
+ 'Hfr' => '&#x0210C;',
855
+ 'hfr' => '&#x1D525;',
856
+ 'Ifr' => '&#x02111;',
857
+ 'ifr' => '&#x1D526;',
858
+ 'Jfr' => '&#x1D50D;',
859
+ 'jfr' => '&#x1D527;',
860
+ 'Kfr' => '&#x1D50E;',
861
+ 'kfr' => '&#x1D528;',
862
+ 'Lfr' => '&#x1D50F;',
863
+ 'lfr' => '&#x1D529;',
864
+ 'Mfr' => '&#x1D510;',
865
+ 'mfr' => '&#x1D52A;',
866
+ 'Nfr' => '&#x1D511;',
867
+ 'nfr' => '&#x1D52B;',
868
+ 'Ofr' => '&#x1D512;',
869
+ 'ofr' => '&#x1D52C;',
870
+ 'Pfr' => '&#x1D513;',
871
+ 'pfr' => '&#x1D52D;',
872
+ 'Qfr' => '&#x1D514;',
873
+ 'qfr' => '&#x1D52E;',
874
+ 'Rfr' => '&#x0211C;',
875
+ 'rfr' => '&#x1D52F;',
876
+ 'Sfr' => '&#x1D516;',
877
+ 'sfr' => '&#x1D530;',
878
+ 'Tfr' => '&#x1D517;',
879
+ 'tfr' => '&#x1D531;',
880
+ 'Ufr' => '&#x1D518;',
881
+ 'ufr' => '&#x1D532;',
882
+ 'Vfr' => '&#x1D519;',
883
+ 'vfr' => '&#x1D533;',
884
+ 'Wfr' => '&#x1D51A;',
885
+ 'wfr' => '&#x1D534;',
886
+ 'Xfr' => '&#x1D51B;',
887
+ 'xfr' => '&#x1D535;',
888
+ 'Yfr' => '&#x1D51C;',
889
+ 'yfr' => '&#x1D536;',
890
+ 'Zfr' => '&#x02128;',
891
+ 'zfr' => '&#x1D537;',
892
+ 'Aopf' => '&#x1D538;',
893
+ 'Bopf' => '&#x1D539;',
894
+ 'Copf' => '&#x02102;',
895
+ 'Dopf' => '&#x1D53B;',
896
+ 'Eopf' => '&#x1D53C;',
897
+ 'Fopf' => '&#x1D53D;',
898
+ 'Gopf' => '&#x1D53E;',
899
+ 'Hopf' => '&#x0210D;',
900
+ 'Iopf' => '&#x1D540;',
901
+ 'Jopf' => '&#x1D541;',
902
+ 'Kopf' => '&#x1D542;',
903
+ 'Lopf' => '&#x1D543;',
904
+ 'Mopf' => '&#x1D544;',
905
+ 'Nopf' => '&#x02115;',
906
+ 'Oopf' => '&#x1D546;',
907
+ 'Popf' => '&#x02119;',
908
+ 'Qopf' => '&#x0211A;',
909
+ 'Ropf' => '&#x0211D;',
910
+ 'Sopf' => '&#x1D54A;',
911
+ 'Topf' => '&#x1D54B;',
912
+ 'Uopf' => '&#x1D54C;',
913
+ 'Vopf' => '&#x1D54D;',
914
+ 'Wopf' => '&#x1D54E;',
915
+ 'Xopf' => '&#x1D54F;',
916
+ 'Yopf' => '&#x1D550;',
917
+ 'Zopf' => '&#x02124;',
918
+ 'Ascr' => '&#x1D49C;',
919
+ 'ascr' => '&#x1D4B6;',
920
+ 'Bscr' => '&#x0212C;',
921
+ 'bscr' => '&#x1D4B7;',
922
+ 'Cscr' => '&#x1D49E;',
923
+ 'cscr' => '&#x1D4B8;',
924
+ 'Dscr' => '&#x1D49F;',
925
+ 'dscr' => '&#x1D4B9;',
926
+ 'Escr' => '&#x02130;',
927
+ 'escr' => '&#x0212F;',
928
+ 'Fscr' => '&#x02131;',
929
+ 'fscr' => '&#x1D4BB;',
930
+ 'Gscr' => '&#x1D4A2;',
931
+ 'gscr' => '&#x0210A;',
932
+ 'Hscr' => '&#x0210B;',
933
+ 'hscr' => '&#x1D4BD;',
934
+ 'Iscr' => '&#x02110;',
935
+ 'iscr' => '&#x1D4BE;',
936
+ 'Jscr' => '&#x1D4A5;',
937
+ 'jscr' => '&#x1D4BF;',
938
+ 'Kscr' => '&#x1D4A6;',
939
+ 'kscr' => '&#x1D4C0;',
940
+ 'Lscr' => '&#x02112;',
941
+ 'lscr' => '&#x1D4C1;',
942
+ 'Mscr' => '&#x02133;',
943
+ 'mscr' => '&#x1D4C2;',
944
+ 'Nscr' => '&#x1D4A9;',
945
+ 'nscr' => '&#x1D4C3;',
946
+ 'Oscr' => '&#x1D4AA;',
947
+ 'oscr' => '&#x02134;',
948
+ 'Pscr' => '&#x1D4AB;',
949
+ 'pscr' => '&#x1D4C5;',
950
+ 'Qscr' => '&#x1D4AC;',
951
+ 'qscr' => '&#x1D4C6;',
952
+ 'Rscr' => '&#x0211B;',
953
+ 'rscr' => '&#x1D4C7;',
954
+ 'Sscr' => '&#x1D4AE;',
955
+ 'sscr' => '&#x1D4C8;',
956
+ 'Tscr' => '&#x1D4AF;',
957
+ 'tscr' => '&#x1D4C9;',
958
+ 'Uscr' => '&#x1D4B0;',
959
+ 'uscr' => '&#x1D4CA;',
960
+ 'Vscr' => '&#x1D4B1;',
961
+ 'vscr' => '&#x1D4CB;',
962
+ 'Wscr' => '&#x1D4B2;',
963
+ 'wscr' => '&#x1D4CC;',
964
+ 'Xscr' => '&#x1D4B3;',
965
+ 'xscr' => '&#x1D4CD;',
966
+ 'Yscr' => '&#x1D4B4;',
967
+ 'yscr' => '&#x1D4CE;',
968
+ 'Zscr' => '&#x1D4B5;',
969
+ 'zscr' => '&#x1D4CF;',
970
+ 'acd' => '&#x0223F;',
971
+ 'aleph' => '&#x02135;',
972
+ 'And' => '&#x02A53;',
973
+ 'and' => '&#x02227;',
974
+ 'andand' => '&#x02A55;',
975
+ 'andd' => '&#x02A5C;',
976
+ 'andslope' => '&#x02A58;',
977
+ 'andv' => '&#x02A5A;',
978
+ 'angrt' => '&#x0221F;',
979
+ 'angsph' => '&#x02222;',
980
+ 'angst' => '&#x0212B;',
981
+ 'ap' => '&#x02248;',
982
+ 'apacir' => '&#x02A6F;',
983
+ 'awconint' => '&#x02233;',
984
+ 'awint' => '&#x02A11;',
985
+ 'becaus' => '&#x02235;',
986
+ 'bernou' => '&#x0212C;',
987
+ 'bne' => '&#x0003D;&#x020E5;',
988
+ 'bnequiv' => '&#x02261;&#x020E5;',
989
+ 'bNot' => '&#x02AED;',
990
+ 'bnot' => '&#x02310;',
991
+ 'bottom' => '&#x022A5;',
992
+ 'cap' => '&#x02229;',
993
+ 'Cconint' => '&#x02230;',
994
+ 'cirfnint' => '&#x02A10;',
995
+ 'compfn' => '&#x02218;',
996
+ 'cong' => '&#x02245;',
997
+ 'Conint' => '&#x0222F;',
998
+ 'conint' => '&#x0222E;',
999
+ 'ctdot' => '&#x022EF;',
1000
+ 'cup' => '&#x0222A;',
1001
+ 'cwconint' => '&#x02232;',
1002
+ 'cwint' => '&#x02231;',
1003
+ 'cylcty' => '&#x0232D;',
1004
+ 'disin' => '&#x022F2;',
1005
+ 'Dot' => '&#x000A8;',
1006
+ 'DotDot' => '&#x020DC;',
1007
+ 'dsol' => '&#x029F6;',
1008
+ 'dtdot' => '&#x022F1;',
1009
+ 'dwangle' => '&#x029A6;',
1010
+ 'elinters' => '&#x0FFFD;',
1011
+ 'epar' => '&#x022D5;',
1012
+ 'eparsl' => '&#x029E3;',
1013
+ 'equiv' => '&#x02261;',
1014
+ 'eqvparsl' => '&#x029E5;',
1015
+ 'exist' => '&#x02203;',
1016
+ 'fltns' => '&#x025B1;',
1017
+ 'fnof' => '&#x00192;',
1018
+ 'forall' => '&#x02200;',
1019
+ 'fpartint' => '&#x02A0D;',
1020
+ 'ge' => '&#x02265;',
1021
+ 'hamilt' => '&#x0210B;',
1022
+ 'iff' => '&#x021D4;',
1023
+ 'iinfin' => '&#x029DC;',
1024
+ 'imped' => '&#x001B5;',
1025
+ 'infin' => '&#x0221E;',
1026
+ 'infintie' => '&#x029DD;',
1027
+ 'Int' => '&#x0222C;',
1028
+ 'int' => '&#x0222B;',
1029
+ 'intlarhk' => '&#x02A17;',
1030
+ 'isin' => '&#x02208;',
1031
+ 'isindot' => '&#x022F5;',
1032
+ 'isinE' => '&#x022F9;',
1033
+ 'isins' => '&#x022F4;',
1034
+ 'isinsv' => '&#x022F3;',
1035
+ 'isinv' => '&#x02208;',
1036
+ 'lagran' => '&#x02112;',
1037
+ 'Lang' => '&#x0300A;',
1038
+ 'lang' => '&#x02329;',
1039
+ 'lArr' => '&#x021D0;',
1040
+ 'lbbrk' => '&#x03014;',
1041
+ 'le' => '&#x02264;',
1042
+ 'loang' => '&#x03018;',
1043
+ 'lobrk' => '&#x0301A;',
1044
+ 'lopar' => '&#x02985;',
1045
+ 'lowast' => '&#x02217;',
1046
+ 'minus' => '&#x02212;',
1047
+ 'mnplus' => '&#x02213;',
1048
+ 'nabla' => '&#x02207;',
1049
+ 'ne' => '&#x02260;',
1050
+ 'nedot' => '&#x02250;&#x00338;',
1051
+ 'nhpar' => '&#x02AF2;',
1052
+ 'ni' => '&#x0220B;',
1053
+ 'nis' => '&#x022FC;',
1054
+ 'nisd' => '&#x022FA;',
1055
+ 'niv' => '&#x0220B;',
1056
+ 'Not' => '&#x02AEC;',
1057
+ 'notin' => '&#x02209;',
1058
+ 'notindot' => '&#x022F5;&#x00338;',
1059
+ 'notinE' => '&#x022F9;&#x00338;',
1060
+ 'notinva' => '&#x02209;',
1061
+ 'notinvb' => '&#x022F7;',
1062
+ 'notinvc' => '&#x022F6;',
1063
+ 'notni' => '&#x0220C;',
1064
+ 'notniva' => '&#x0220C;',
1065
+ 'notnivb' => '&#x022FE;',
1066
+ 'notnivc' => '&#x022FD;',
1067
+ 'nparsl' => '&#x02AFD;&#x020E5;',
1068
+ 'npart' => '&#x02202;&#x00338;',
1069
+ 'npolint' => '&#x02A14;',
1070
+ 'nvinfin' => '&#x029DE;',
1071
+ 'olcross' => '&#x029BB;',
1072
+ 'Or' => '&#x02A54;',
1073
+ 'or' => '&#x02228;',
1074
+ 'ord' => '&#x02A5D;',
1075
+ 'order' => '&#x02134;',
1076
+ 'oror' => '&#x02A56;',
1077
+ 'orslope' => '&#x02A57;',
1078
+ 'orv' => '&#x02A5B;',
1079
+ 'par' => '&#x02225;',
1080
+ 'parsl' => '&#x02AFD;',
1081
+ 'part' => '&#x02202;',
1082
+ 'permil' => '&#x02030;',
1083
+ 'perp' => '&#x022A5;',
1084
+ 'pertenk' => '&#x02031;',
1085
+ 'phmmat' => '&#x02133;',
1086
+ 'pointint' => '&#x02A15;',
1087
+ 'Prime' => '&#x02033;',
1088
+ 'prime' => '&#x02032;',
1089
+ 'profalar' => '&#x0232E;',
1090
+ 'profline' => '&#x02312;',
1091
+ 'profsurf' => '&#x02313;',
1092
+ 'prop' => '&#x0221D;',
1093
+ 'qint' => '&#x02A0C;',
1094
+ 'qprime' => '&#x02057;',
1095
+ 'quatint' => '&#x02A16;',
1096
+ 'radic' => '&#x0221A;',
1097
+ 'Rang' => '&#x0300B;',
1098
+ 'rang' => '&#x0232A;',
1099
+ 'rArr' => '&#x021D2;',
1100
+ 'rbbrk' => '&#x03015;',
1101
+ 'roang' => '&#x03019;',
1102
+ 'robrk' => '&#x0301B;',
1103
+ 'ropar' => '&#x02986;',
1104
+ 'rppolint' => '&#x02A12;',
1105
+ 'scpolint' => '&#x02A13;',
1106
+ 'sim' => '&#x0223C;',
1107
+ 'simdot' => '&#x02A6A;',
1108
+ 'sime' => '&#x02243;',
1109
+ 'smeparsl' => '&#x029E4;',
1110
+ 'square' => '&#x025A1;',
1111
+ 'squarf' => '&#x025AA;',
1112
+ 'strns' => '&#x000AF;',
1113
+ 'sub' => '&#x02282;',
1114
+ 'sube' => '&#x02286;',
1115
+ 'sup' => '&#x02283;',
1116
+ 'supe' => '&#x02287;',
1117
+ 'tdot' => '&#x020DB;',
1118
+ 'there4' => '&#x02234;',
1119
+ 'tint' => '&#x0222D;',
1120
+ 'top' => '&#x022A4;',
1121
+ 'topbot' => '&#x02336;',
1122
+ 'topcir' => '&#x02AF1;',
1123
+ 'tprime' => '&#x02034;',
1124
+ 'utdot' => '&#x022F0;',
1125
+ 'uwangle' => '&#x029A7;',
1126
+ 'vangrt' => '&#x0299C;',
1127
+ 'veeeq' => '&#x0225A;',
1128
+ 'Verbar' => '&#x02016;',
1129
+ 'wedgeq' => '&#x02259;',
1130
+ 'xnis' => '&#x022FB;',
1131
+ 'boxDL' => '&#x02557;',
1132
+ 'boxDl' => '&#x02556;',
1133
+ 'boxdL' => '&#x02555;',
1134
+ 'boxdl' => '&#x02510;',
1135
+ 'boxDR' => '&#x02554;',
1136
+ 'boxDr' => '&#x02553;',
1137
+ 'boxdR' => '&#x02552;',
1138
+ 'boxdr' => '&#x0250C;',
1139
+ 'boxH' => '&#x02550;',
1140
+ 'boxh' => '&#x02500;',
1141
+ 'boxHD' => '&#x02566;',
1142
+ 'boxHd' => '&#x02564;',
1143
+ 'boxhD' => '&#x02565;',
1144
+ 'boxhd' => '&#x0252C;',
1145
+ 'boxHU' => '&#x02569;',
1146
+ 'boxHu' => '&#x02567;',
1147
+ 'boxhU' => '&#x02568;',
1148
+ 'boxhu' => '&#x02534;',
1149
+ 'boxUL' => '&#x0255D;',
1150
+ 'boxUl' => '&#x0255C;',
1151
+ 'boxuL' => '&#x0255B;',
1152
+ 'boxul' => '&#x02518;',
1153
+ 'boxUR' => '&#x0255A;',
1154
+ 'boxUr' => '&#x02559;',
1155
+ 'boxuR' => '&#x02558;',
1156
+ 'boxur' => '&#x02514;',
1157
+ 'boxV' => '&#x02551;',
1158
+ 'boxv' => '&#x02502;',
1159
+ 'boxVH' => '&#x0256C;',
1160
+ 'boxVh' => '&#x0256B;',
1161
+ 'boxvH' => '&#x0256A;',
1162
+ 'boxvh' => '&#x0253C;',
1163
+ 'boxVL' => '&#x02563;',
1164
+ 'boxVl' => '&#x02562;',
1165
+ 'boxvL' => '&#x02561;',
1166
+ 'boxvl' => '&#x02524;',
1167
+ 'boxVR' => '&#x02560;',
1168
+ 'boxVr' => '&#x0255F;',
1169
+ 'boxvR' => '&#x0255E;',
1170
+ 'boxvr' => '&#x0251C;',
1171
+ 'Acy' => '&#x00410;',
1172
+ 'acy' => '&#x00430;',
1173
+ 'Bcy' => '&#x00411;',
1174
+ 'bcy' => '&#x00431;',
1175
+ 'CHcy' => '&#x00427;',
1176
+ 'chcy' => '&#x00447;',
1177
+ 'Dcy' => '&#x00414;',
1178
+ 'dcy' => '&#x00434;',
1179
+ 'Ecy' => '&#x0042D;',
1180
+ 'ecy' => '&#x0044D;',
1181
+ 'Fcy' => '&#x00424;',
1182
+ 'fcy' => '&#x00444;',
1183
+ 'Gcy' => '&#x00413;',
1184
+ 'gcy' => '&#x00433;',
1185
+ 'HARDcy' => '&#x0042A;',
1186
+ 'hardcy' => '&#x0044A;',
1187
+ 'Icy' => '&#x00418;',
1188
+ 'icy' => '&#x00438;',
1189
+ 'IEcy' => '&#x00415;',
1190
+ 'iecy' => '&#x00435;',
1191
+ 'IOcy' => '&#x00401;',
1192
+ 'iocy' => '&#x00451;',
1193
+ 'Jcy' => '&#x00419;',
1194
+ 'jcy' => '&#x00439;',
1195
+ 'Kcy' => '&#x0041A;',
1196
+ 'kcy' => '&#x0043A;',
1197
+ 'KHcy' => '&#x00425;',
1198
+ 'khcy' => '&#x00445;',
1199
+ 'Lcy' => '&#x0041B;',
1200
+ 'lcy' => '&#x0043B;',
1201
+ 'Mcy' => '&#x0041C;',
1202
+ 'mcy' => '&#x0043C;',
1203
+ 'Ncy' => '&#x0041D;',
1204
+ 'ncy' => '&#x0043D;',
1205
+ 'numero' => '&#x02116;',
1206
+ 'Ocy' => '&#x0041E;',
1207
+ 'ocy' => '&#x0043E;',
1208
+ 'Pcy' => '&#x0041F;',
1209
+ 'pcy' => '&#x0043F;',
1210
+ 'Rcy' => '&#x00420;',
1211
+ 'rcy' => '&#x00440;',
1212
+ 'Scy' => '&#x00421;',
1213
+ 'scy' => '&#x00441;',
1214
+ 'SHCHcy' => '&#x00429;',
1215
+ 'shchcy' => '&#x00449;',
1216
+ 'SHcy' => '&#x00428;',
1217
+ 'shcy' => '&#x00448;',
1218
+ 'SOFTcy' => '&#x0042C;',
1219
+ 'softcy' => '&#x0044C;',
1220
+ 'Tcy' => '&#x00422;',
1221
+ 'tcy' => '&#x00442;',
1222
+ 'TScy' => '&#x00426;',
1223
+ 'tscy' => '&#x00446;',
1224
+ 'Ucy' => '&#x00423;',
1225
+ 'ucy' => '&#x00443;',
1226
+ 'Vcy' => '&#x00412;',
1227
+ 'vcy' => '&#x00432;',
1228
+ 'YAcy' => '&#x0042F;',
1229
+ 'yacy' => '&#x0044F;',
1230
+ 'Ycy' => '&#x0042B;',
1231
+ 'ycy' => '&#x0044B;',
1232
+ 'YUcy' => '&#x0042E;',
1233
+ 'yucy' => '&#x0044E;',
1234
+ 'Zcy' => '&#x00417;',
1235
+ 'zcy' => '&#x00437;',
1236
+ 'ZHcy' => '&#x00416;',
1237
+ 'zhcy' => '&#x00436;',
1238
+ 'DJcy' => '&#x00402;',
1239
+ 'djcy' => '&#x00452;',
1240
+ 'DScy' => '&#x00405;',
1241
+ 'dscy' => '&#x00455;',
1242
+ 'DZcy' => '&#x0040F;',
1243
+ 'dzcy' => '&#x0045F;',
1244
+ 'GJcy' => '&#x00403;',
1245
+ 'gjcy' => '&#x00453;',
1246
+ 'Iukcy' => '&#x00406;',
1247
+ 'iukcy' => '&#x00456;',
1248
+ 'Jsercy' => '&#x00408;',
1249
+ 'jsercy' => '&#x00458;',
1250
+ 'Jukcy' => '&#x00404;',
1251
+ 'jukcy' => '&#x00454;',
1252
+ 'KJcy' => '&#x0040C;',
1253
+ 'kjcy' => '&#x0045C;',
1254
+ 'LJcy' => '&#x00409;',
1255
+ 'ljcy' => '&#x00459;',
1256
+ 'NJcy' => '&#x0040A;',
1257
+ 'njcy' => '&#x0045A;',
1258
+ 'TSHcy' => '&#x0040B;',
1259
+ 'tshcy' => '&#x0045B;',
1260
+ 'Ubrcy' => '&#x0040E;',
1261
+ 'ubrcy' => '&#x0045E;',
1262
+ 'YIcy' => '&#x00407;',
1263
+ 'yicy' => '&#x00457;',
1264
+ 'acute' => '&#x000B4;',
1265
+ 'breve' => '&#x002D8;',
1266
+ 'caron' => '&#x002C7;',
1267
+ 'cedil' => '&#x000B8;',
1268
+ 'circ' => '&#x002C6;',
1269
+ 'dblac' => '&#x002DD;',
1270
+ 'die' => '&#x000A8;',
1271
+ 'dot' => '&#x002D9;',
1272
+ 'grave' => '&#x00060;',
1273
+ 'macr' => '&#x000AF;',
1274
+ 'ogon' => '&#x002DB;',
1275
+ 'ring' => '&#x002DA;',
1276
+ 'tilde' => '&#x002DC;',
1277
+ 'uml' => '&#x000A8;',
1278
+ 'Aacute' => '&#x000C1;',
1279
+ 'aacute' => '&#x000E1;',
1280
+ 'Acirc' => '&#x000C2;',
1281
+ 'acirc' => '&#x000E2;',
1282
+ 'AElig' => '&#x000C6;',
1283
+ 'aelig' => '&#x000E6;',
1284
+ 'Agrave' => '&#x000C0;',
1285
+ 'agrave' => '&#x000E0;',
1286
+ 'Aring' => '&#x000C5;',
1287
+ 'aring' => '&#x000E5;',
1288
+ 'Atilde' => '&#x000C3;',
1289
+ 'atilde' => '&#x000E3;',
1290
+ 'Auml' => '&#x000C4;',
1291
+ 'auml' => '&#x000E4;',
1292
+ 'Ccedil' => '&#x000C7;',
1293
+ 'ccedil' => '&#x000E7;',
1294
+ 'Eacute' => '&#x000C9;',
1295
+ 'eacute' => '&#x000E9;',
1296
+ 'Ecirc' => '&#x000CA;',
1297
+ 'ecirc' => '&#x000EA;',
1298
+ 'Egrave' => '&#x000C8;',
1299
+ 'egrave' => '&#x000E8;',
1300
+ 'ETH' => '&#x000D0;',
1301
+ 'eth' => '&#x000F0;',
1302
+ 'Euml' => '&#x000CB;',
1303
+ 'euml' => '&#x000EB;',
1304
+ 'Iacute' => '&#x000CD;',
1305
+ 'iacute' => '&#x000ED;',
1306
+ 'Icirc' => '&#x000CE;',
1307
+ 'icirc' => '&#x000EE;',
1308
+ 'Igrave' => '&#x000CC;',
1309
+ 'igrave' => '&#x000EC;',
1310
+ 'Iuml' => '&#x000CF;',
1311
+ 'iuml' => '&#x000EF;',
1312
+ 'Ntilde' => '&#x000D1;',
1313
+ 'ntilde' => '&#x000F1;',
1314
+ 'Oacute' => '&#x000D3;',
1315
+ 'oacute' => '&#x000F3;',
1316
+ 'Ocirc' => '&#x000D4;',
1317
+ 'ocirc' => '&#x000F4;',
1318
+ 'Ograve' => '&#x000D2;',
1319
+ 'ograve' => '&#x000F2;',
1320
+ 'Oslash' => '&#x000D8;',
1321
+ 'oslash' => '&#x000F8;',
1322
+ 'Otilde' => '&#x000D5;',
1323
+ 'otilde' => '&#x000F5;',
1324
+ 'Ouml' => '&#x000D6;',
1325
+ 'ouml' => '&#x000F6;',
1326
+ 'szlig' => '&#x000DF;',
1327
+ 'THORN' => '&#x000DE;',
1328
+ 'thorn' => '&#x000FE;',
1329
+ 'Uacute' => '&#x000DA;',
1330
+ 'uacute' => '&#x000FA;',
1331
+ 'Ucirc' => '&#x000DB;',
1332
+ 'ucirc' => '&#x000FB;',
1333
+ 'Ugrave' => '&#x000D9;',
1334
+ 'ugrave' => '&#x000F9;',
1335
+ 'Uuml' => '&#x000DC;',
1336
+ 'uuml' => '&#x000FC;',
1337
+ 'Yacute' => '&#x000DD;',
1338
+ 'yacute' => '&#x000FD;',
1339
+ 'yuml' => '&#x000FF;',
1340
+ 'Abreve' => '&#x00102;',
1341
+ 'abreve' => '&#x00103;',
1342
+ 'Amacr' => '&#x00100;',
1343
+ 'amacr' => '&#x00101;',
1344
+ 'Aogon' => '&#x00104;',
1345
+ 'aogon' => '&#x00105;',
1346
+ 'Cacute' => '&#x00106;',
1347
+ 'cacute' => '&#x00107;',
1348
+ 'Ccaron' => '&#x0010C;',
1349
+ 'ccaron' => '&#x0010D;',
1350
+ 'Ccirc' => '&#x00108;',
1351
+ 'ccirc' => '&#x00109;',
1352
+ 'Cdot' => '&#x0010A;',
1353
+ 'cdot' => '&#x0010B;',
1354
+ 'Dcaron' => '&#x0010E;',
1355
+ 'dcaron' => '&#x0010F;',
1356
+ 'Dstrok' => '&#x00110;',
1357
+ 'dstrok' => '&#x00111;',
1358
+ 'Ecaron' => '&#x0011A;',
1359
+ 'ecaron' => '&#x0011B;',
1360
+ 'Edot' => '&#x00116;',
1361
+ 'edot' => '&#x00117;',
1362
+ 'Emacr' => '&#x00112;',
1363
+ 'emacr' => '&#x00113;',
1364
+ 'ENG' => '&#x0014A;',
1365
+ 'eng' => '&#x0014B;',
1366
+ 'Eogon' => '&#x00118;',
1367
+ 'eogon' => '&#x00119;',
1368
+ 'gacute' => '&#x001F5;',
1369
+ 'Gbreve' => '&#x0011E;',
1370
+ 'gbreve' => '&#x0011F;',
1371
+ 'Gcedil' => '&#x00122;',
1372
+ 'Gcirc' => '&#x0011C;',
1373
+ 'gcirc' => '&#x0011D;',
1374
+ 'Gdot' => '&#x00120;',
1375
+ 'gdot' => '&#x00121;',
1376
+ 'Hcirc' => '&#x00124;',
1377
+ 'hcirc' => '&#x00125;',
1378
+ 'Hstrok' => '&#x00126;',
1379
+ 'hstrok' => '&#x00127;',
1380
+ 'Idot' => '&#x00130;',
1381
+ 'IJlig' => '&#x00132;',
1382
+ 'ijlig' => '&#x00133;',
1383
+ 'Imacr' => '&#x0012A;',
1384
+ 'imacr' => '&#x0012B;',
1385
+ 'inodot' => '&#x00131;',
1386
+ 'Iogon' => '&#x0012E;',
1387
+ 'iogon' => '&#x0012F;',
1388
+ 'Itilde' => '&#x00128;',
1389
+ 'itilde' => '&#x00129;',
1390
+ 'Jcirc' => '&#x00134;',
1391
+ 'jcirc' => '&#x00135;',
1392
+ 'Kcedil' => '&#x00136;',
1393
+ 'kcedil' => '&#x00137;',
1394
+ 'kgreen' => '&#x00138;',
1395
+ 'Lacute' => '&#x00139;',
1396
+ 'lacute' => '&#x0013A;',
1397
+ 'Lcaron' => '&#x0013D;',
1398
+ 'lcaron' => '&#x0013E;',
1399
+ 'Lcedil' => '&#x0013B;',
1400
+ 'lcedil' => '&#x0013C;',
1401
+ 'Lmidot' => '&#x0013F;',
1402
+ 'lmidot' => '&#x00140;',
1403
+ 'Lstrok' => '&#x00141;',
1404
+ 'lstrok' => '&#x00142;',
1405
+ 'Nacute' => '&#x00143;',
1406
+ 'nacute' => '&#x00144;',
1407
+ 'napos' => '&#x00149;',
1408
+ 'Ncaron' => '&#x00147;',
1409
+ 'ncaron' => '&#x00148;',
1410
+ 'Ncedil' => '&#x00145;',
1411
+ 'ncedil' => '&#x00146;',
1412
+ 'Odblac' => '&#x00150;',
1413
+ 'odblac' => '&#x00151;',
1414
+ 'OElig' => '&#x00152;',
1415
+ 'oelig' => '&#x00153;',
1416
+ 'Omacr' => '&#x0014C;',
1417
+ 'omacr' => '&#x0014D;',
1418
+ 'Racute' => '&#x00154;',
1419
+ 'racute' => '&#x00155;',
1420
+ 'Rcaron' => '&#x00158;',
1421
+ 'rcaron' => '&#x00159;',
1422
+ 'Rcedil' => '&#x00156;',
1423
+ 'rcedil' => '&#x00157;',
1424
+ 'Sacute' => '&#x0015A;',
1425
+ 'sacute' => '&#x0015B;',
1426
+ 'Scaron' => '&#x00160;',
1427
+ 'scaron' => '&#x00161;',
1428
+ 'Scedil' => '&#x0015E;',
1429
+ 'scedil' => '&#x0015F;',
1430
+ 'Scirc' => '&#x0015C;',
1431
+ 'scirc' => '&#x0015D;',
1432
+ 'Tcaron' => '&#x00164;',
1433
+ 'tcaron' => '&#x00165;',
1434
+ 'Tcedil' => '&#x00162;',
1435
+ 'tcedil' => '&#x00163;',
1436
+ 'Tstrok' => '&#x00166;',
1437
+ 'tstrok' => '&#x00167;',
1438
+ 'Ubreve' => '&#x0016C;',
1439
+ 'ubreve' => '&#x0016D;',
1440
+ 'Udblac' => '&#x00170;',
1441
+ 'udblac' => '&#x00171;',
1442
+ 'Umacr' => '&#x0016A;',
1443
+ 'umacr' => '&#x0016B;',
1444
+ 'Uogon' => '&#x00172;',
1445
+ 'uogon' => '&#x00173;',
1446
+ 'Uring' => '&#x0016E;',
1447
+ 'uring' => '&#x0016F;',
1448
+ 'Utilde' => '&#x00168;',
1449
+ 'utilde' => '&#x00169;',
1450
+ 'Wcirc' => '&#x00174;',
1451
+ 'wcirc' => '&#x00175;',
1452
+ 'Ycirc' => '&#x00176;',
1453
+ 'ycirc' => '&#x00177;',
1454
+ 'Yuml' => '&#x00178;',
1455
+ 'Zacute' => '&#x00179;',
1456
+ 'zacute' => '&#x0017A;',
1457
+ 'Zcaron' => '&#x0017D;',
1458
+ 'zcaron' => '&#x0017E;',
1459
+ 'Zdot' => '&#x0017B;',
1460
+ 'zdot' => '&#x0017C;',
1461
+ 'apos' => '&#x00027;',
1462
+ 'ast' => '&#x0002A;',
1463
+ 'brvbar' => '&#x000A6;',
1464
+ 'bsol' => '&#x0005C;',
1465
+ 'cent' => '&#x000A2;',
1466
+ 'colon' => '&#x0003A;',
1467
+ 'comma' => '&#x0002C;',
1468
+ 'commat' => '&#x00040;',
1469
+ 'copy' => '&#x000A9;',
1470
+ 'curren' => '&#x000A4;',
1471
+ 'darr' => '&#x02193;',
1472
+ 'deg' => '&#x000B0;',
1473
+ 'divide' => '&#x000F7;',
1474
+ 'dollar' => '&#x00024;',
1475
+ 'equals' => '&#x0003D;',
1476
+ 'excl' => '&#x00021;',
1477
+ 'frac12' => '&#x000BD;',
1478
+ 'frac14' => '&#x000BC;',
1479
+ 'frac18' => '&#x0215B;',
1480
+ 'frac34' => '&#x000BE;',
1481
+ 'frac38' => '&#x0215C;',
1482
+ 'frac58' => '&#x0215D;',
1483
+ 'frac78' => '&#x0215E;',
1484
+ 'gt' => '&#x0003E;',
1485
+ 'half' => '&#x000BD;',
1486
+ 'horbar' => '&#x02015;',
1487
+ 'hyphen' => '&#x02010;',
1488
+ 'iexcl' => '&#x000A1;',
1489
+ 'iquest' => '&#x000BF;',
1490
+ 'laquo' => '&#x000AB;',
1491
+ 'larr' => '&#x02190;',
1492
+ 'lcub' => '&#x0007B;',
1493
+ 'ldquo' => '&#x0201C;',
1494
+ 'lowbar' => '&#x0005F;',
1495
+ 'lpar' => '&#x00028;',
1496
+ 'lsqb' => '&#x0005B;',
1497
+ 'lsquo' => '&#x02018;',
1498
+ 'micro' => '&#x000B5;',
1499
+ 'middot' => '&#x000B7;',
1500
+ 'nbsp' => '&#x000A0;',
1501
+ 'not' => '&#x000AC;',
1502
+ 'num' => '&#x00023;',
1503
+ 'ohm' => '&#x02126;',
1504
+ 'ordf' => '&#x000AA;',
1505
+ 'ordm' => '&#x000BA;',
1506
+ 'para' => '&#x000B6;',
1507
+ 'percnt' => '&#x00025;',
1508
+ 'period' => '&#x0002E;',
1509
+ 'plus' => '&#x0002B;',
1510
+ 'plusmn' => '&#x000B1;',
1511
+ 'pound' => '&#x000A3;',
1512
+ 'quest' => '&#x0003F;',
1513
+ 'quot' => '&#x00022;',
1514
+ 'raquo' => '&#x000BB;',
1515
+ 'rarr' => '&#x02192;',
1516
+ 'rcub' => '&#x0007D;',
1517
+ 'rdquo' => '&#x0201D;',
1518
+ 'reg' => '&#x000AE;',
1519
+ 'rpar' => '&#x00029;',
1520
+ 'rsqb' => '&#x0005D;',
1521
+ 'rsquo' => '&#x02019;',
1522
+ 'sect' => '&#x000A7;',
1523
+ 'semi' => '&#x0003B;',
1524
+ 'shy' => '&#x000AD;',
1525
+ 'sol' => '&#x0002F;',
1526
+ 'sung' => '&#x0266A;',
1527
+ 'sup1' => '&#x000B9;',
1528
+ 'sup2' => '&#x000B2;',
1529
+ 'sup3' => '&#x000B3;',
1530
+ 'times' => '&#x000D7;',
1531
+ 'trade' => '&#x02122;',
1532
+ 'uarr' => '&#x02191;',
1533
+ 'verbar' => '&#x0007C;',
1534
+ 'yen' => '&#x000A5;',
1535
+ 'blank' => '&#x02423;',
1536
+ 'blk12' => '&#x02592;',
1537
+ 'blk14' => '&#x02591;',
1538
+ 'blk34' => '&#x02593;',
1539
+ 'block' => '&#x02588;',
1540
+ 'bull' => '&#x02022;',
1541
+ 'caret' => '&#x02041;',
1542
+ 'check' => '&#x02713;',
1543
+ 'cir' => '&#x025CB;',
1544
+ 'clubs' => '&#x02663;',
1545
+ 'copysr' => '&#x02117;',
1546
+ 'cross' => '&#x02717;',
1547
+ 'Dagger' => '&#x02021;',
1548
+ 'dagger' => '&#x02020;',
1549
+ 'dash' => '&#x02010;',
1550
+ 'diams' => '&#x02666;',
1551
+ 'dlcrop' => '&#x0230D;',
1552
+ 'drcrop' => '&#x0230C;',
1553
+ 'dtri' => '&#x025BF;',
1554
+ 'dtrif' => '&#x025BE;',
1555
+ 'emsp' => '&#x02003;',
1556
+ 'emsp13' => '&#x02004;',
1557
+ 'emsp14' => '&#x02005;',
1558
+ 'ensp' => '&#x02002;',
1559
+ 'female' => '&#x02640;',
1560
+ 'ffilig' => '&#x0FB03;',
1561
+ 'fflig' => '&#x0FB00;',
1562
+ 'ffllig' => '&#x0FB04;',
1563
+ 'filig' => '&#x0FB01;',
1564
+ 'flat' => '&#x0266D;',
1565
+ 'fllig' => '&#x0FB02;',
1566
+ 'frac13' => '&#x02153;',
1567
+ 'frac15' => '&#x02155;',
1568
+ 'frac16' => '&#x02159;',
1569
+ 'frac23' => '&#x02154;',
1570
+ 'frac25' => '&#x02156;',
1571
+ 'frac35' => '&#x02157;',
1572
+ 'frac45' => '&#x02158;',
1573
+ 'frac56' => '&#x0215A;',
1574
+ 'hairsp' => '&#x0200A;',
1575
+ 'hearts' => '&#x02665;',
1576
+ 'hellip' => '&#x02026;',
1577
+ 'hybull' => '&#x02043;',
1578
+ 'incare' => '&#x02105;',
1579
+ 'ldquor' => '&#x0201E;',
1580
+ 'lhblk' => '&#x02584;',
1581
+ 'loz' => '&#x025CA;',
1582
+ 'lozf' => '&#x029EB;',
1583
+ 'lsquor' => '&#x0201A;',
1584
+ 'ltri' => '&#x025C3;',
1585
+ 'ltrif' => '&#x025C2;',
1586
+ 'male' => '&#x02642;',
1587
+ 'malt' => '&#x02720;',
1588
+ 'marker' => '&#x025AE;',
1589
+ 'mdash' => '&#x02014;',
1590
+ 'mldr' => '&#x02026;',
1591
+ 'natur' => '&#x0266E;',
1592
+ 'ndash' => '&#x02013;',
1593
+ 'nldr' => '&#x02025;',
1594
+ 'numsp' => '&#x02007;',
1595
+ 'phone' => '&#x0260E;',
1596
+ 'puncsp' => '&#x02008;',
1597
+ 'rdquor' => '&#x0201D;',
1598
+ 'rect' => '&#x025AD;',
1599
+ 'rsquor' => '&#x02019;',
1600
+ 'rtri' => '&#x025B9;',
1601
+ 'rtrif' => '&#x025B8;',
1602
+ 'rx' => '&#x0211E;',
1603
+ 'sext' => '&#x02736;',
1604
+ 'sharp' => '&#x0266F;',
1605
+ 'spades' => '&#x02660;',
1606
+ 'squ' => '&#x025A1;',
1607
+ 'squf' => '&#x025AA;',
1608
+ 'star' => '&#x02606;',
1609
+ 'starf' => '&#x02605;',
1610
+ 'target' => '&#x02316;',
1611
+ 'telrec' => '&#x02315;',
1612
+ 'thinsp' => '&#x02009;',
1613
+ 'uhblk' => '&#x02580;',
1614
+ 'ulcrop' => '&#x0230F;',
1615
+ 'urcrop' => '&#x0230E;',
1616
+ 'utri' => '&#x025B5;',
1617
+ 'utrif' => '&#x025B4;',
1618
+ 'vellip' => '&#x022EE;',
1619
+ 'af' => '&#x02061;',
1620
+ 'aopf' => '&#x1D552;',
1621
+ 'asympeq' => '&#x0224D;',
1622
+ 'bopf' => '&#x1D553;',
1623
+ 'copf' => '&#x1D554;',
1624
+ 'Cross' => '&#x02A2F;',
1625
+ 'DD' => '&#x02145;',
1626
+ 'dd' => '&#x02146;',
1627
+ 'dopf' => '&#x1D555;',
1628
+ 'DownArrowBar' => '&#x02913;',
1629
+ 'DownBreve' => '&#x00311;',
1630
+ 'DownLeftRightVector' => '&#x02950;',
1631
+ 'DownLeftTeeVector' => '&#x0295E;',
1632
+ 'DownLeftVectorBar' => '&#x02956;',
1633
+ 'DownRightTeeVector' => '&#x0295F;',
1634
+ 'DownRightVectorBar' => '&#x02957;',
1635
+ 'ee' => '&#x02147;',
1636
+ 'EmptySmallSquare' => '&#x025FB;',
1637
+ 'EmptyVerySmallSquare' => '&#x025AB;',
1638
+ 'eopf' => '&#x1D556;',
1639
+ 'Equal' => '&#x02A75;',
1640
+ 'FilledSmallSquare' => '&#x025FC;',
1641
+ 'FilledVerySmallSquare' => '&#x025AA;',
1642
+ 'fopf' => '&#x1D557;',
1643
+ 'gopf' => '&#x1D558;',
1644
+ 'GreaterGreater' => '&#x02AA2;',
1645
+ 'Hat' => '&#x0005E;',
1646
+ 'hopf' => '&#x1D559;',
1647
+ 'HorizontalLine' => '&#x02500;',
1648
+ 'ic' => '&#x02063;',
1649
+ 'ii' => '&#x02148;',
1650
+ 'iopf' => '&#x1D55A;',
1651
+ 'it' => '&#x02062;',
1652
+ 'jopf' => '&#x1D55B;',
1653
+ 'kopf' => '&#x1D55C;',
1654
+ 'larrb' => '&#x021E4;',
1655
+ 'LeftDownTeeVector' => '&#x02961;',
1656
+ 'LeftDownVectorBar' => '&#x02959;',
1657
+ 'LeftRightVector' => '&#x0294E;',
1658
+ 'LeftTeeVector' => '&#x0295A;',
1659
+ 'LeftTriangleBar' => '&#x029CF;',
1660
+ 'LeftUpDownVector' => '&#x02951;',
1661
+ 'LeftUpTeeVector' => '&#x02960;',
1662
+ 'LeftUpVectorBar' => '&#x02958;',
1663
+ 'LeftVectorBar' => '&#x02952;',
1664
+ 'LessLess' => '&#x02AA1;',
1665
+ 'lopf' => '&#x1D55D;',
1666
+ 'mapstodown' => '&#x021A7;',
1667
+ 'mapstoleft' => '&#x021A4;',
1668
+ 'mapstoup' => '&#x021A5;',
1669
+ 'MediumSpace' => '&#x0205F;',
1670
+ 'mopf' => '&#x1D55E;',
1671
+ 'nbump' => '&#x0224E;&#x00338;',
1672
+ 'nbumpe' => '&#x0224F;&#x00338;',
1673
+ 'nesim' => '&#x02242;&#x00338;',
1674
+ 'NewLine' => '&#x0000A;',
1675
+ 'NoBreak' => '&#x02060;',
1676
+ 'nopf' => '&#x1D55F;',
1677
+ 'NotCupCap' => '&#x0226D;',
1678
+ 'NotHumpEqual' => '&#x0224F;&#x00338;',
1679
+ 'NotLeftTriangleBar' => '&#x029CF;&#x00338;',
1680
+ 'NotNestedGreaterGreater' => '&#x02AA2;&#x00338;',
1681
+ 'NotNestedLessLess' => '&#x02AA1;&#x00338;',
1682
+ 'NotRightTriangleBar' => '&#x029D0;&#x00338;',
1683
+ 'NotSquareSubset' => '&#x0228F;&#x00338;',
1684
+ 'NotSquareSuperset' => '&#x02290;&#x00338;',
1685
+ 'NotSucceedsTilde' => '&#x0227F;&#x00338;',
1686
+ 'oopf' => '&#x1D560;',
1687
+ 'OverBar' => '&#x000AF;',
1688
+ 'OverBrace' => '&#x0FE37;',
1689
+ 'OverBracket' => '&#x023B4;',
1690
+ 'OverParenthesis' => '&#x0FE35;',
1691
+ 'planckh' => '&#x0210E;',
1692
+ 'popf' => '&#x1D561;',
1693
+ 'Product' => '&#x0220F;',
1694
+ 'qopf' => '&#x1D562;',
1695
+ 'rarrb' => '&#x021E5;',
1696
+ 'RightDownTeeVector' => '&#x0295D;',
1697
+ 'RightDownVectorBar' => '&#x02955;',
1698
+ 'RightTeeVector' => '&#x0295B;',
1699
+ 'RightTriangleBar' => '&#x029D0;',
1700
+ 'RightUpDownVector' => '&#x0294F;',
1701
+ 'RightUpTeeVector' => '&#x0295C;',
1702
+ 'RightUpVectorBar' => '&#x02954;',
1703
+ 'RightVectorBar' => '&#x02953;',
1704
+ 'ropf' => '&#x1D563;',
1705
+ 'RoundImplies' => '&#x02970;',
1706
+ 'RuleDelayed' => '&#x029F4;',
1707
+ 'sopf' => '&#x1D564;',
1708
+ 'Tab' => '&#x00009;',
1709
+ 'ThickSpace' => '&#x02009;&#x0200A;&#x0200A;',
1710
+ 'topf' => '&#x1D565;',
1711
+ 'UnderBar' => '&#x00332;',
1712
+ 'UnderBrace' => '&#x0FE38;',
1713
+ 'UnderBracket' => '&#x023B5;',
1714
+ 'UnderParenthesis' => '&#x0FE36;',
1715
+ 'uopf' => '&#x1D566;',
1716
+ 'UpArrowBar' => '&#x02912;',
1717
+ 'Upsilon' => '&#x003A5;',
1718
+ 'VerticalLine' => '&#x0007C;',
1719
+ 'VerticalSeparator' => '&#x02758;',
1720
+ 'vopf' => '&#x1D567;',
1721
+ 'wopf' => '&#x1D568;',
1722
+ 'xopf' => '&#x1D569;',
1723
+ 'yopf' => '&#x1D56A;',
1724
+ 'ZeroWidthSpace' => '&#x0200B;',
1725
+ 'zopf' => '&#x1D56B;',
1726
+ 'angle' => '&#x02220;',
1727
+ 'ApplyFunction' => '&#x02061;',
1728
+ 'approx' => '&#x02248;',
1729
+ 'approxeq' => '&#x0224A;',
1730
+ 'Assign' => '&#x02254;',
1731
+ 'backcong' => '&#x0224C;',
1732
+ 'backepsilon' => '&#x003F6;',
1733
+ 'backprime' => '&#x02035;',
1734
+ 'backsim' => '&#x0223D;',
1735
+ 'backsimeq' => '&#x022CD;',
1736
+ 'Backslash' => '&#x02216;',
1737
+ 'barwedge' => '&#x02305;',
1738
+ 'Because' => '&#x02235;',
1739
+ 'because' => '&#x02235;',
1740
+ 'Bernoullis' => '&#x0212C;',
1741
+ 'between' => '&#x0226C;',
1742
+ 'bigcap' => '&#x022C2;',
1743
+ 'bigcirc' => '&#x025EF;',
1744
+ 'bigcup' => '&#x022C3;',
1745
+ 'bigodot' => '&#x02A00;',
1746
+ 'bigoplus' => '&#x02A01;',
1747
+ 'bigotimes' => '&#x02A02;',
1748
+ 'bigsqcup' => '&#x02A06;',
1749
+ 'bigstar' => '&#x02605;',
1750
+ 'bigtriangledown' => '&#x025BD;',
1751
+ 'bigtriangleup' => '&#x025B3;',
1752
+ 'biguplus' => '&#x02A04;',
1753
+ 'bigvee' => '&#x022C1;',
1754
+ 'bigwedge' => '&#x022C0;',
1755
+ 'bkarow' => '&#x0290D;',
1756
+ 'blacklozenge' => '&#x029EB;',
1757
+ 'blacksquare' => '&#x025AA;',
1758
+ 'blacktriangle' => '&#x025B4;',
1759
+ 'blacktriangledown' => '&#x025BE;',
1760
+ 'blacktriangleleft' => '&#x025C2;',
1761
+ 'blacktriangleright' => '&#x025B8;',
1762
+ 'bot' => '&#x022A5;',
1763
+ 'boxminus' => '&#x0229F;',
1764
+ 'boxplus' => '&#x0229E;',
1765
+ 'boxtimes' => '&#x022A0;',
1766
+ 'Breve' => '&#x002D8;',
1767
+ 'bullet' => '&#x02022;',
1768
+ 'Bumpeq' => '&#x0224E;',
1769
+ 'bumpeq' => '&#x0224F;',
1770
+ 'CapitalDifferentialD' => '&#x02145;',
1771
+ 'Cayleys' => '&#x0212D;',
1772
+ 'Cedilla' => '&#x000B8;',
1773
+ 'CenterDot' => '&#x000B7;',
1774
+ 'centerdot' => '&#x000B7;',
1775
+ 'checkmark' => '&#x02713;',
1776
+ 'circeq' => '&#x02257;',
1777
+ 'circlearrowleft' => '&#x021BA;',
1778
+ 'circlearrowright' => '&#x021BB;',
1779
+ 'circledast' => '&#x0229B;',
1780
+ 'circledcirc' => '&#x0229A;',
1781
+ 'circleddash' => '&#x0229D;',
1782
+ 'CircleDot' => '&#x02299;',
1783
+ 'circledR' => '&#x000AE;',
1784
+ 'circledS' => '&#x024C8;',
1785
+ 'CircleMinus' => '&#x02296;',
1786
+ 'CirclePlus' => '&#x02295;',
1787
+ 'CircleTimes' => '&#x02297;',
1788
+ 'ClockwiseContourIntegral' => '&#x02232;',
1789
+ 'CloseCurlyDoubleQuote' => '&#x0201D;',
1790
+ 'CloseCurlyQuote' => '&#x02019;',
1791
+ 'clubsuit' => '&#x02663;',
1792
+ 'coloneq' => '&#x02254;',
1793
+ 'complement' => '&#x02201;',
1794
+ 'complexes' => '&#x02102;',
1795
+ 'Congruent' => '&#x02261;',
1796
+ 'ContourIntegral' => '&#x0222E;',
1797
+ 'Coproduct' => '&#x02210;',
1798
+ 'CounterClockwiseContourIntegral' => '&#x02233;',
1799
+ 'CupCap' => '&#x0224D;',
1800
+ 'curlyeqprec' => '&#x022DE;',
1801
+ 'curlyeqsucc' => '&#x022DF;',
1802
+ 'curlyvee' => '&#x022CE;',
1803
+ 'curlywedge' => '&#x022CF;',
1804
+ 'curvearrowleft' => '&#x021B6;',
1805
+ 'curvearrowright' => '&#x021B7;',
1806
+ 'dbkarow' => '&#x0290F;',
1807
+ 'ddagger' => '&#x02021;',
1808
+ 'ddotseq' => '&#x02A77;',
1809
+ 'Del' => '&#x02207;',
1810
+ 'DiacriticalAcute' => '&#x000B4;',
1811
+ 'DiacriticalDot' => '&#x002D9;',
1812
+ 'DiacriticalDoubleAcute' => '&#x002DD;',
1813
+ 'DiacriticalGrave' => '&#x00060;',
1814
+ 'DiacriticalTilde' => '&#x002DC;',
1815
+ 'Diamond' => '&#x022C4;',
1816
+ 'diamond' => '&#x022C4;',
1817
+ 'diamondsuit' => '&#x02666;',
1818
+ 'DifferentialD' => '&#x02146;',
1819
+ 'digamma' => '&#x003DD;',
1820
+ 'div' => '&#x000F7;',
1821
+ 'divideontimes' => '&#x022C7;',
1822
+ 'doteq' => '&#x02250;',
1823
+ 'doteqdot' => '&#x02251;',
1824
+ 'DotEqual' => '&#x02250;',
1825
+ 'dotminus' => '&#x02238;',
1826
+ 'dotplus' => '&#x02214;',
1827
+ 'dotsquare' => '&#x022A1;',
1828
+ 'doublebarwedge' => '&#x02306;',
1829
+ 'DoubleContourIntegral' => '&#x0222F;',
1830
+ 'DoubleDot' => '&#x000A8;',
1831
+ 'DoubleDownArrow' => '&#x021D3;',
1832
+ 'DoubleLeftArrow' => '&#x021D0;',
1833
+ 'DoubleLeftRightArrow' => '&#x021D4;',
1834
+ 'DoubleLeftTee' => '&#x02AE4;',
1835
+ 'DoubleLongLeftArrow' => '&#x027F8;',
1836
+ 'DoubleLongLeftRightArrow' => '&#x027FA;',
1837
+ 'DoubleLongRightArrow' => '&#x027F9;',
1838
+ 'DoubleRightArrow' => '&#x021D2;',
1839
+ 'DoubleRightTee' => '&#x022A8;',
1840
+ 'DoubleUpArrow' => '&#x021D1;',
1841
+ 'DoubleUpDownArrow' => '&#x021D5;',
1842
+ 'DoubleVerticalBar' => '&#x02225;',
1843
+ 'DownArrow' => '&#x02193;',
1844
+ 'Downarrow' => '&#x021D3;',
1845
+ 'downarrow' => '&#x02193;',
1846
+ 'DownArrowUpArrow' => '&#x021F5;',
1847
+ 'downdownarrows' => '&#x021CA;',
1848
+ 'downharpoonleft' => '&#x021C3;',
1849
+ 'downharpoonright' => '&#x021C2;',
1850
+ 'DownLeftVector' => '&#x021BD;',
1851
+ 'DownRightVector' => '&#x021C1;',
1852
+ 'DownTee' => '&#x022A4;',
1853
+ 'DownTeeArrow' => '&#x021A7;',
1854
+ 'drbkarow' => '&#x02910;',
1855
+ 'Element' => '&#x02208;',
1856
+ 'emptyset' => '&#x02205;',
1857
+ 'eqcirc' => '&#x02256;',
1858
+ 'eqcolon' => '&#x02255;',
1859
+ 'eqsim' => '&#x02242;',
1860
+ 'eqslantgtr' => '&#x02A96;',
1861
+ 'eqslantless' => '&#x02A95;',
1862
+ 'EqualTilde' => '&#x02242;',
1863
+ 'Equilibrium' => '&#x021CC;',
1864
+ 'Exists' => '&#x02203;',
1865
+ 'expectation' => '&#x02130;',
1866
+ 'ExponentialE' => '&#x02147;',
1867
+ 'exponentiale' => '&#x02147;',
1868
+ 'fallingdotseq' => '&#x02252;',
1869
+ 'ForAll' => '&#x02200;',
1870
+ 'Fouriertrf' => '&#x02131;',
1871
+ 'geq' => '&#x02265;',
1872
+ 'geqq' => '&#x02267;',
1873
+ 'geqslant' => '&#x02A7E;',
1874
+ 'gg' => '&#x0226B;',
1875
+ 'ggg' => '&#x022D9;',
1876
+ 'gnapprox' => '&#x02A8A;',
1877
+ 'gneq' => '&#x02A88;',
1878
+ 'gneqq' => '&#x02269;',
1879
+ 'GreaterEqual' => '&#x02265;',
1880
+ 'GreaterEqualLess' => '&#x022DB;',
1881
+ 'GreaterFullEqual' => '&#x02267;',
1882
+ 'GreaterLess' => '&#x02277;',
1883
+ 'GreaterSlantEqual' => '&#x02A7E;',
1884
+ 'GreaterTilde' => '&#x02273;',
1885
+ 'gtrapprox' => '&#x02A86;',
1886
+ 'gtrdot' => '&#x022D7;',
1887
+ 'gtreqless' => '&#x022DB;',
1888
+ 'gtreqqless' => '&#x02A8C;',
1889
+ 'gtrless' => '&#x02277;',
1890
+ 'gtrsim' => '&#x02273;',
1891
+ 'gvertneqq' => '&#x02269;&#x0FE00;',
1892
+ 'Hacek' => '&#x002C7;',
1893
+ 'hbar' => '&#x0210F;',
1894
+ 'heartsuit' => '&#x02665;',
1895
+ 'HilbertSpace' => '&#x0210B;',
1896
+ 'hksearow' => '&#x02925;',
1897
+ 'hkswarow' => '&#x02926;',
1898
+ 'hookleftarrow' => '&#x021A9;',
1899
+ 'hookrightarrow' => '&#x021AA;',
1900
+ 'hslash' => '&#x0210F;',
1901
+ 'HumpDownHump' => '&#x0224E;',
1902
+ 'HumpEqual' => '&#x0224F;',
1903
+ 'iiiint' => '&#x02A0C;',
1904
+ 'iiint' => '&#x0222D;',
1905
+ 'Im' => '&#x02111;',
1906
+ 'ImaginaryI' => '&#x02148;',
1907
+ 'imagline' => '&#x02110;',
1908
+ 'imagpart' => '&#x02111;',
1909
+ 'Implies' => '&#x021D2;',
1910
+ 'in' => '&#x02208;',
1911
+ 'integers' => '&#x02124;',
1912
+ 'Integral' => '&#x0222B;',
1913
+ 'intercal' => '&#x022BA;',
1914
+ 'Intersection' => '&#x022C2;',
1915
+ 'intprod' => '&#x02A3C;',
1916
+ 'InvisibleComma' => '&#x02063;',
1917
+ 'InvisibleTimes' => '&#x02062;',
1918
+ 'langle' => '&#x02329;',
1919
+ 'Laplacetrf' => '&#x02112;',
1920
+ 'lbrace' => '&#x0007B;',
1921
+ 'lbrack' => '&#x0005B;',
1922
+ 'LeftAngleBracket' => '&#x02329;',
1923
+ 'LeftArrow' => '&#x02190;',
1924
+ 'Leftarrow' => '&#x021D0;',
1925
+ 'leftarrow' => '&#x02190;',
1926
+ 'LeftArrowBar' => '&#x021E4;',
1927
+ 'LeftArrowRightArrow' => '&#x021C6;',
1928
+ 'leftarrowtail' => '&#x021A2;',
1929
+ 'LeftCeiling' => '&#x02308;',
1930
+ 'LeftDoubleBracket' => '&#x0301A;',
1931
+ 'LeftDownVector' => '&#x021C3;',
1932
+ 'LeftFloor' => '&#x0230A;',
1933
+ 'leftharpoondown' => '&#x021BD;',
1934
+ 'leftharpoonup' => '&#x021BC;',
1935
+ 'leftleftarrows' => '&#x021C7;',
1936
+ 'LeftRightArrow' => '&#x02194;',
1937
+ 'Leftrightarrow' => '&#x021D4;',
1938
+ 'leftrightarrow' => '&#x02194;',
1939
+ 'leftrightarrows' => '&#x021C6;',
1940
+ 'leftrightharpoons' => '&#x021CB;',
1941
+ 'leftrightsquigarrow' => '&#x021AD;',
1942
+ 'LeftTee' => '&#x022A3;',
1943
+ 'LeftTeeArrow' => '&#x021A4;',
1944
+ 'leftthreetimes' => '&#x022CB;',
1945
+ 'LeftTriangle' => '&#x022B2;',
1946
+ 'LeftTriangleEqual' => '&#x022B4;',
1947
+ 'LeftUpVector' => '&#x021BF;',
1948
+ 'LeftVector' => '&#x021BC;',
1949
+ 'leq' => '&#x02264;',
1950
+ 'leqq' => '&#x02266;',
1951
+ 'leqslant' => '&#x02A7D;',
1952
+ 'lessapprox' => '&#x02A85;',
1953
+ 'lessdot' => '&#x022D6;',
1954
+ 'lesseqgtr' => '&#x022DA;',
1955
+ 'lesseqqgtr' => '&#x02A8B;',
1956
+ 'LessEqualGreater' => '&#x022DA;',
1957
+ 'LessFullEqual' => '&#x02266;',
1958
+ 'LessGreater' => '&#x02276;',
1959
+ 'lessgtr' => '&#x02276;',
1960
+ 'lesssim' => '&#x02272;',
1961
+ 'LessSlantEqual' => '&#x02A7D;',
1962
+ 'LessTilde' => '&#x02272;',
1963
+ 'll' => '&#x0226A;',
1964
+ 'llcorner' => '&#x0231E;',
1965
+ 'Lleftarrow' => '&#x021DA;',
1966
+ 'lmoustache' => '&#x023B0;',
1967
+ 'lnapprox' => '&#x02A89;',
1968
+ 'lneq' => '&#x02A87;',
1969
+ 'lneqq' => '&#x02268;',
1970
+ 'LongLeftArrow' => '&#x027F5;',
1971
+ 'Longleftarrow' => '&#x027F8;',
1972
+ 'longleftarrow' => '&#x027F5;',
1973
+ 'LongLeftRightArrow' => '&#x027F7;',
1974
+ 'Longleftrightarrow' => '&#x027FA;',
1975
+ 'longleftrightarrow' => '&#x027F7;',
1976
+ 'longmapsto' => '&#x027FC;',
1977
+ 'LongRightArrow' => '&#x027F6;',
1978
+ 'Longrightarrow' => '&#x027F9;',
1979
+ 'longrightarrow' => '&#x027F6;',
1980
+ 'looparrowleft' => '&#x021AB;',
1981
+ 'looparrowright' => '&#x021AC;',
1982
+ 'LowerLeftArrow' => '&#x02199;',
1983
+ 'LowerRightArrow' => '&#x02198;',
1984
+ 'lozenge' => '&#x025CA;',
1985
+ 'lrcorner' => '&#x0231F;',
1986
+ 'Lsh' => '&#x021B0;',
1987
+ 'lvertneqq' => '&#x02268;&#x0FE00;',
1988
+ 'maltese' => '&#x02720;',
1989
+ 'mapsto' => '&#x021A6;',
1990
+ 'measuredangle' => '&#x02221;',
1991
+ 'Mellintrf' => '&#x02133;',
1992
+ 'MinusPlus' => '&#x02213;',
1993
+ 'mp' => '&#x02213;',
1994
+ 'multimap' => '&#x022B8;',
1995
+ 'napprox' => '&#x02249;',
1996
+ 'natural' => '&#x0266E;',
1997
+ 'naturals' => '&#x02115;',
1998
+ 'nearrow' => '&#x02197;',
1999
+ 'NegativeMediumSpace' => '&#x0200B;',
2000
+ 'NegativeThickSpace' => '&#x0200B;',
2001
+ 'NegativeThinSpace' => '&#x0200B;',
2002
+ 'NegativeVeryThinSpace' => '&#x0200B;',
2003
+ 'NestedGreaterGreater' => '&#x0226B;',
2004
+ 'NestedLessLess' => '&#x0226A;',
2005
+ 'nexists' => '&#x02204;',
2006
+ 'ngeq' => '&#x02271;',
2007
+ 'ngeqq' => '&#x02267;&#x00338;',
2008
+ 'ngeqslant' => '&#x02A7E;&#x00338;',
2009
+ 'ngtr' => '&#x0226F;',
2010
+ 'nLeftarrow' => '&#x021CD;',
2011
+ 'nleftarrow' => '&#x0219A;',
2012
+ 'nLeftrightarrow' => '&#x021CE;',
2013
+ 'nleftrightarrow' => '&#x021AE;',
2014
+ 'nleq' => '&#x02270;',
2015
+ 'nleqq' => '&#x02266;&#x00338;',
2016
+ 'nleqslant' => '&#x02A7D;&#x00338;',
2017
+ 'nless' => '&#x0226E;',
2018
+ 'NonBreakingSpace' => '&#x000A0;',
2019
+ 'NotCongruent' => '&#x02262;',
2020
+ 'NotDoubleVerticalBar' => '&#x02226;',
2021
+ 'NotElement' => '&#x02209;',
2022
+ 'NotEqual' => '&#x02260;',
2023
+ 'NotEqualTilde' => '&#x02242;&#x00338;',
2024
+ 'NotExists' => '&#x02204;',
2025
+ 'NotGreater' => '&#x0226F;',
2026
+ 'NotGreaterEqual' => '&#x02271;',
2027
+ 'NotGreaterFullEqual' => '&#x02266;&#x00338;',
2028
+ 'NotGreaterGreater' => '&#x0226B;&#x00338;',
2029
+ 'NotGreaterLess' => '&#x02279;',
2030
+ 'NotGreaterSlantEqual' => '&#x02A7E;&#x00338;',
2031
+ 'NotGreaterTilde' => '&#x02275;',
2032
+ 'NotHumpDownHump' => '&#x0224E;&#x00338;',
2033
+ 'NotLeftTriangle' => '&#x022EA;',
2034
+ 'NotLeftTriangleEqual' => '&#x022EC;',
2035
+ 'NotLess' => '&#x0226E;',
2036
+ 'NotLessEqual' => '&#x02270;',
2037
+ 'NotLessGreater' => '&#x02278;',
2038
+ 'NotLessLess' => '&#x0226A;&#x00338;',
2039
+ 'NotLessSlantEqual' => '&#x02A7D;&#x00338;',
2040
+ 'NotLessTilde' => '&#x02274;',
2041
+ 'NotPrecedes' => '&#x02280;',
2042
+ 'NotPrecedesEqual' => '&#x02AAF;&#x00338;',
2043
+ 'NotPrecedesSlantEqual' => '&#x022E0;',
2044
+ 'NotReverseElement' => '&#x0220C;',
2045
+ 'NotRightTriangle' => '&#x022EB;',
2046
+ 'NotRightTriangleEqual' => '&#x022ED;',
2047
+ 'NotSquareSubsetEqual' => '&#x022E2;',
2048
+ 'NotSquareSupersetEqual' => '&#x022E3;',
2049
+ 'NotSubset' => '&#x02282;&#x020D2;',
2050
+ 'NotSubsetEqual' => '&#x02288;',
2051
+ 'NotSucceeds' => '&#x02281;',
2052
+ 'NotSucceedsEqual' => '&#x02AB0;&#x00338;',
2053
+ 'NotSucceedsSlantEqual' => '&#x022E1;',
2054
+ 'NotSuperset' => '&#x02283;&#x020D2;',
2055
+ 'NotSupersetEqual' => '&#x02289;',
2056
+ 'NotTilde' => '&#x02241;',
2057
+ 'NotTildeEqual' => '&#x02244;',
2058
+ 'NotTildeFullEqual' => '&#x02247;',
2059
+ 'NotTildeTilde' => '&#x02249;',
2060
+ 'NotVerticalBar' => '&#x02224;',
2061
+ 'nparallel' => '&#x02226;',
2062
+ 'nprec' => '&#x02280;',
2063
+ 'npreceq' => '&#x02AAF;&#x00338;',
2064
+ 'nRightarrow' => '&#x021CF;',
2065
+ 'nrightarrow' => '&#x0219B;',
2066
+ 'nshortmid' => '&#x02224;',
2067
+ 'nshortparallel' => '&#x02226;',
2068
+ 'nsimeq' => '&#x02244;',
2069
+ 'nsubset' => '&#x02282;&#x020D2;',
2070
+ 'nsubseteq' => '&#x02288;',
2071
+ 'nsubseteqq' => '&#x02AC5;&#x00338;',
2072
+ 'nsucc' => '&#x02281;',
2073
+ 'nsucceq' => '&#x02AB0;&#x00338;',
2074
+ 'nsupset' => '&#x02283;&#x020D2;',
2075
+ 'nsupseteq' => '&#x02289;',
2076
+ 'nsupseteqq' => '&#x02AC6;&#x00338;',
2077
+ 'ntriangleleft' => '&#x022EA;',
2078
+ 'ntrianglelefteq' => '&#x022EC;',
2079
+ 'ntriangleright' => '&#x022EB;',
2080
+ 'ntrianglerighteq' => '&#x022ED;',
2081
+ 'nwarrow' => '&#x02196;',
2082
+ 'oint' => '&#x0222E;',
2083
+ 'OpenCurlyDoubleQuote' => '&#x0201C;',
2084
+ 'OpenCurlyQuote' => '&#x02018;',
2085
+ 'orderof' => '&#x02134;',
2086
+ 'parallel' => '&#x02225;',
2087
+ 'PartialD' => '&#x02202;',
2088
+ 'pitchfork' => '&#x022D4;',
2089
+ 'PlusMinus' => '&#x000B1;',
2090
+ 'pm' => '&#x000B1;',
2091
+ 'Poincareplane' => '&#x0210C;',
2092
+ 'prec' => '&#x0227A;',
2093
+ 'precapprox' => '&#x02AB7;',
2094
+ 'preccurlyeq' => '&#x0227C;',
2095
+ 'Precedes' => '&#x0227A;',
2096
+ 'PrecedesEqual' => '&#x02AAF;',
2097
+ 'PrecedesSlantEqual' => '&#x0227C;',
2098
+ 'PrecedesTilde' => '&#x0227E;',
2099
+ 'preceq' => '&#x02AAF;',
2100
+ 'precnapprox' => '&#x02AB9;',
2101
+ 'precneqq' => '&#x02AB5;',
2102
+ 'precnsim' => '&#x022E8;',
2103
+ 'precsim' => '&#x0227E;',
2104
+ 'primes' => '&#x02119;',
2105
+ 'Proportion' => '&#x02237;',
2106
+ 'Proportional' => '&#x0221D;',
2107
+ 'propto' => '&#x0221D;',
2108
+ 'quaternions' => '&#x0210D;',
2109
+ 'questeq' => '&#x0225F;',
2110
+ 'rangle' => '&#x0232A;',
2111
+ 'rationals' => '&#x0211A;',
2112
+ 'rbrace' => '&#x0007D;',
2113
+ 'rbrack' => '&#x0005D;',
2114
+ 'Re' => '&#x0211C;',
2115
+ 'realine' => '&#x0211B;',
2116
+ 'realpart' => '&#x0211C;',
2117
+ 'reals' => '&#x0211D;',
2118
+ 'ReverseElement' => '&#x0220B;',
2119
+ 'ReverseEquilibrium' => '&#x021CB;',
2120
+ 'ReverseUpEquilibrium' => '&#x0296F;',
2121
+ 'RightAngleBracket' => '&#x0232A;',
2122
+ 'RightArrow' => '&#x02192;',
2123
+ 'Rightarrow' => '&#x021D2;',
2124
+ 'rightarrow' => '&#x02192;',
2125
+ 'RightArrowBar' => '&#x021E5;',
2126
+ 'RightArrowLeftArrow' => '&#x021C4;',
2127
+ 'rightarrowtail' => '&#x021A3;',
2128
+ 'RightCeiling' => '&#x02309;',
2129
+ 'RightDoubleBracket' => '&#x0301B;',
2130
+ 'RightDownVector' => '&#x021C2;',
2131
+ 'RightFloor' => '&#x0230B;',
2132
+ 'rightharpoondown' => '&#x021C1;',
2133
+ 'rightharpoonup' => '&#x021C0;',
2134
+ 'rightleftarrows' => '&#x021C4;',
2135
+ 'rightleftharpoons' => '&#x021CC;',
2136
+ 'rightrightarrows' => '&#x021C9;',
2137
+ 'rightsquigarrow' => '&#x0219D;',
2138
+ 'RightTee' => '&#x022A2;',
2139
+ 'RightTeeArrow' => '&#x021A6;',
2140
+ 'rightthreetimes' => '&#x022CC;',
2141
+ 'RightTriangle' => '&#x022B3;',
2142
+ 'RightTriangleEqual' => '&#x022B5;',
2143
+ 'RightUpVector' => '&#x021BE;',
2144
+ 'RightVector' => '&#x021C0;',
2145
+ 'risingdotseq' => '&#x02253;',
2146
+ 'rmoustache' => '&#x023B1;',
2147
+ 'Rrightarrow' => '&#x021DB;',
2148
+ 'Rsh' => '&#x021B1;',
2149
+ 'searrow' => '&#x02198;',
2150
+ 'setminus' => '&#x02216;',
2151
+ 'ShortDownArrow' => '&#x02193;',
2152
+ 'ShortLeftArrow' => '&#x02190;',
2153
+ 'shortmid' => '&#x02223;',
2154
+ 'shortparallel' => '&#x02225;',
2155
+ 'ShortRightArrow' => '&#x02192;',
2156
+ 'ShortUpArrow' => '&#x02191;',
2157
+ 'simeq' => '&#x02243;',
2158
+ 'SmallCircle' => '&#x02218;',
2159
+ 'smallsetminus' => '&#x02216;',
2160
+ 'spadesuit' => '&#x02660;',
2161
+ 'Sqrt' => '&#x0221A;',
2162
+ 'sqsubset' => '&#x0228F;',
2163
+ 'sqsubseteq' => '&#x02291;',
2164
+ 'sqsupset' => '&#x02290;',
2165
+ 'sqsupseteq' => '&#x02292;',
2166
+ 'Square' => '&#x025A1;',
2167
+ 'SquareIntersection' => '&#x02293;',
2168
+ 'SquareSubset' => '&#x0228F;',
2169
+ 'SquareSubsetEqual' => '&#x02291;',
2170
+ 'SquareSuperset' => '&#x02290;',
2171
+ 'SquareSupersetEqual' => '&#x02292;',
2172
+ 'SquareUnion' => '&#x02294;',
2173
+ 'Star' => '&#x022C6;',
2174
+ 'straightepsilon' => '&#x003F5;',
2175
+ 'straightphi' => '&#x003D5;',
2176
+ 'Subset' => '&#x022D0;',
2177
+ 'subset' => '&#x02282;',
2178
+ 'subseteq' => '&#x02286;',
2179
+ 'subseteqq' => '&#x02AC5;',
2180
+ 'SubsetEqual' => '&#x02286;',
2181
+ 'subsetneq' => '&#x0228A;',
2182
+ 'subsetneqq' => '&#x02ACB;',
2183
+ 'succ' => '&#x0227B;',
2184
+ 'succapprox' => '&#x02AB8;',
2185
+ 'succcurlyeq' => '&#x0227D;',
2186
+ 'Succeeds' => '&#x0227B;',
2187
+ 'SucceedsEqual' => '&#x02AB0;',
2188
+ 'SucceedsSlantEqual' => '&#x0227D;',
2189
+ 'SucceedsTilde' => '&#x0227F;',
2190
+ 'succeq' => '&#x02AB0;',
2191
+ 'succnapprox' => '&#x02ABA;',
2192
+ 'succneqq' => '&#x02AB6;',
2193
+ 'succnsim' => '&#x022E9;',
2194
+ 'succsim' => '&#x0227F;',
2195
+ 'SuchThat' => '&#x0220B;',
2196
+ 'Sum' => '&#x02211;',
2197
+ 'Superset' => '&#x02283;',
2198
+ 'SupersetEqual' => '&#x02287;',
2199
+ 'Supset' => '&#x022D1;',
2200
+ 'supset' => '&#x02283;',
2201
+ 'supseteq' => '&#x02287;',
2202
+ 'supseteqq' => '&#x02AC6;',
2203
+ 'supsetneq' => '&#x0228B;',
2204
+ 'supsetneqq' => '&#x02ACC;',
2205
+ 'swarrow' => '&#x02199;',
2206
+ 'Therefore' => '&#x02234;',
2207
+ 'therefore' => '&#x02234;',
2208
+ 'thickapprox' => '&#x02248;',
2209
+ 'thicksim' => '&#x0223C;',
2210
+ 'ThinSpace' => '&#x02009;',
2211
+ 'Tilde' => '&#x0223C;',
2212
+ 'TildeEqual' => '&#x02243;',
2213
+ 'TildeFullEqual' => '&#x02245;',
2214
+ 'TildeTilde' => '&#x02248;',
2215
+ 'toea' => '&#x02928;',
2216
+ 'tosa' => '&#x02929;',
2217
+ 'triangle' => '&#x025B5;',
2218
+ 'triangledown' => '&#x025BF;',
2219
+ 'triangleleft' => '&#x025C3;',
2220
+ 'trianglelefteq' => '&#x022B4;',
2221
+ 'triangleq' => '&#x0225C;',
2222
+ 'triangleright' => '&#x025B9;',
2223
+ 'trianglerighteq' => '&#x022B5;',
2224
+ 'TripleDot' => '&#x020DB;',
2225
+ 'twoheadleftarrow' => '&#x0219E;',
2226
+ 'twoheadrightarrow' => '&#x021A0;',
2227
+ 'ulcorner' => '&#x0231C;',
2228
+ 'Union' => '&#x022C3;',
2229
+ 'UnionPlus' => '&#x0228E;',
2230
+ 'UpArrow' => '&#x02191;',
2231
+ 'Uparrow' => '&#x021D1;',
2232
+ 'uparrow' => '&#x02191;',
2233
+ 'UpArrowDownArrow' => '&#x021C5;',
2234
+ 'UpDownArrow' => '&#x02195;',
2235
+ 'Updownarrow' => '&#x021D5;',
2236
+ 'updownarrow' => '&#x02195;',
2237
+ 'UpEquilibrium' => '&#x0296E;',
2238
+ 'upharpoonleft' => '&#x021BF;',
2239
+ 'upharpoonright' => '&#x021BE;',
2240
+ 'UpperLeftArrow' => '&#x02196;',
2241
+ 'UpperRightArrow' => '&#x02197;',
2242
+ 'upsilon' => '&#x003C5;',
2243
+ 'UpTee' => '&#x022A5;',
2244
+ 'UpTeeArrow' => '&#x021A5;',
2245
+ 'upuparrows' => '&#x021C8;',
2246
+ 'urcorner' => '&#x0231D;',
2247
+ 'varepsilon' => '&#x003B5;',
2248
+ 'varkappa' => '&#x003F0;',
2249
+ 'varnothing' => '&#x02205;',
2250
+ 'varphi' => '&#x003C6;',
2251
+ 'varpi' => '&#x003D6;',
2252
+ 'varpropto' => '&#x0221D;',
2253
+ 'varrho' => '&#x003F1;',
2254
+ 'varsigma' => '&#x003C2;',
2255
+ 'varsubsetneq' => '&#x0228A;&#x0FE00;',
2256
+ 'varsubsetneqq' => '&#x02ACB;&#x0FE00;',
2257
+ 'varsupsetneq' => '&#x0228B;&#x0FE00;',
2258
+ 'varsupsetneqq' => '&#x02ACC;&#x0FE00;',
2259
+ 'vartheta' => '&#x003D1;',
2260
+ 'vartriangleleft' => '&#x022B2;',
2261
+ 'vartriangleright' => '&#x022B3;',
2262
+ 'Vee' => '&#x022C1;',
2263
+ 'vee' => '&#x02228;',
2264
+ 'Vert' => '&#x02016;',
2265
+ 'vert' => '&#x0007C;',
2266
+ 'VerticalBar' => '&#x02223;',
2267
+ 'VerticalTilde' => '&#x02240;',
2268
+ 'VeryThinSpace' => '&#x0200A;',
2269
+ 'Wedge' => '&#x022C0;',
2270
+ 'wedge' => '&#x02227;',
2271
+ 'wp' => '&#x02118;',
2272
+ 'wr' => '&#x02240;',
2273
+ 'zeetrf' => '&#x02128;'
2274
+ }
2275
+ #:startdoc:
2276
+
2277
+ # Converts XHTML+MathML named entities in string to Numeric Character References
2278
+ #
2279
+ # :call-seq:
2280
+ # string.to_ncr -> string
2281
+ #
2282
+ def to_ncr
2283
+ self.gsub(/&(?:(lt|gt|amp|quot|apos)|[a-zA-Z0-9]+);/){|s| $1 ? s : s.convert_to_ncr}
2284
+ end
2285
+
2286
+ # Converts XHTML+MathML named entities in string to Numeric Character References
2287
+ #
2288
+ # :call-seq:
2289
+ # string.to_ncr! -> str or nil
2290
+ #
2291
+ # Substitution is done in-place.
2292
+ #
2293
+ def to_ncr!
2294
+ self.gsub!(/&(?:(lt|gt|amp|quot|apos)|[a-zA-Z0-9]+);/){|s| $1 ? s : s.convert_to_ncr}
2295
+ end
2296
+
2297
+ # Converts XHTML+MathML named entities in string to UTF-8
2298
+ #
2299
+ # :call-seq:
2300
+ # string.to_utf8 -> string
2301
+ #
2302
+ def to_utf8
2303
+ self.gsub(/&(?:(lt|gt|amp|quot|apos)|[a-zA-Z0-9]+);/){|s| $1 ? s : s.convert_to_utf8}
2304
+ end
2305
+
2306
+ # Converts XHTML+MathML named entities in string to UTF-8
2307
+ #
2308
+ # :call-seq:
2309
+ # string.to_ncr! -> str or nil
2310
+ #
2311
+ # Substitution is done in-place.
2312
+ #
2313
+ def to_utf8!
2314
+ self.gsub!(/&(?:(lt|gt|amp|quot|apos)|[a-zA-Z0-9]+);/){|s| $1 ? s : s.convert_to_utf8}
2315
+ end
2316
+
2317
+ protected
2318
+
2319
+ def convert_to_ncr #:nodoc:
2320
+ self =~ /^&([a-zA-Z0-9]+);$/
2321
+ name = $1
2322
+ return MATHML_ENTITIES.has_key?(name) ? MATHML_ENTITIES[name] : "&amp;" + name + ";"
2323
+ end
2324
+
2325
+ def convert_to_utf8 #:nodoc:
2326
+ self =~ /^&([a-zA-Z0-9]+);$/
2327
+ name = $1
2328
+ return MATHML_ENTITIES.has_key?(name) ? MATHML_ENTITIES[name].split(';').collect {|s| s.gsub(/^&#x([A-F0-9]+)$/, '\1').hex }.pack('U*') : "&amp;" + name + ";"
2329
+ end
2330
+
2331
+
2332
+ end
2333
+
2334
+ require 'rexml/element'
2335
+ module REXML #:nodoc:
2336
+ class Element
2337
+
2338
+ # Convert XHTML+MathML Named Entities in a REXML::Element to Numeric Character References
2339
+ #
2340
+ # :call-seq:
2341
+ # tree.to_ncr -> REXML::Element
2342
+ #
2343
+ # REXML, typically, converts NCRs to utf-8 characters, which is what you'll see when you
2344
+ # access the resulting REXML document.
2345
+ #
2346
+ # Note that this method needs to traverse the entire tree, converting text nodes and attributes
2347
+ # for each element. This can be SLOW. It will often be faster to serialize to a string and then
2348
+ # use String.to_ncr instead.
2349
+ #
2350
+ def to_ncr
2351
+ self.each_element { |el|
2352
+ el.texts.each_index {|i|
2353
+ el.texts[i].value = el.texts[i].to_s.to_ncr
2354
+ }
2355
+ el.attributes.each { |name,val|
2356
+ el.attributes[name] = val.to_ncr
2357
+ }
2358
+ el.to_ncr if el.has_elements?
2359
+ }
2360
+ return self
2361
+ end
2362
+
2363
+ # Convert XHTML+MathML Named Entities in a REXML::Element to UTF-8
2364
+ #
2365
+ # :call-seq:
2366
+ # tree.to_utf8 -> REXML::Element
2367
+ #
2368
+ # Note that this method needs to traverse the entire tree, converting text nodes and attributes
2369
+ # for each element. This can be SLOW. It will often be faster to serialize to a string and then
2370
+ # use String.to_utf8 instead.
2371
+ #
2372
+ def to_utf8
2373
+ self.each_element { |el|
2374
+ el.texts.each_index {|i|
2375
+ el.texts[i].value = el.texts[i].to_s.to_utf8
2376
+ }
2377
+ el.attributes.each { |name,val|
2378
+ el.attributes[name] = val.to_utf8
2379
+ }
2380
+ el.to_utf8 if el.has_elements?
2381
+ }
2382
+ return self
2383
+ end
2384
+
2385
+ end
2386
+ end
2387
+
2388
+ module HTML5 #:nodoc: all
2389
+ module TreeWalkers
2390
+
2391
+ private
2392
+
2393
+ class << self
2394
+ def [](name)
2395
+ case name.to_s.downcase
2396
+ when 'rexml'
2397
+ require 'html5/treewalkers/rexml'
2398
+ REXML::TreeWalker
2399
+ when 'rexml2'
2400
+ REXML2::TreeWalker
2401
+ else
2402
+ raise "Unknown TreeWalker #{name}"
2403
+ end
2404
+ end
2405
+
2406
+ alias :get_tree_walker :[]
2407
+ end
2408
+
2409
+ module REXML2
2410
+ class TreeWalker < HTML5::TreeWalkers::NonRecursiveTreeWalker
2411
+
2412
+ private
2413
+
2414
+ def node_details(node)
2415
+ case node
2416
+ when ::REXML::Document
2417
+ [:DOCUMENT]
2418
+ when ::REXML::Element
2419
+ if !node.name
2420
+ [:DOCUMENT_FRAGMENT]
2421
+ else
2422
+ [:ELEMENT, node.name,
2423
+ node.attributes.map {|name,value| [name,value.to_utf8]},
2424
+ node.has_elements? || node.has_text?]
2425
+ end
2426
+ when ::REXML::Text
2427
+ [:TEXT, node.value.to_utf8]
2428
+ when ::REXML::Comment
2429
+ [:COMMENT, node.string]
2430
+ when ::REXML::DocType
2431
+ [:DOCTYPE, node.name, node.public, node.system]
2432
+ when ::REXML::XMLDecl
2433
+ [nil]
2434
+ else
2435
+ [:UNKNOWN, node.class.inspect]
2436
+ end
2437
+ end
2438
+
2439
+ def first_child(node)
2440
+ node.children.first
2441
+ end
2442
+
2443
+ def next_sibling(node)
2444
+ node.next_sibling
2445
+ end
2446
+
2447
+ def parent(node)
2448
+ node.parent
2449
+ end
2450
+ end
2451
+ end
2452
+ end
2453
+ end