├── .editorconfig
├── .gitattributes
├── .gitignore
├── .travis.yml
├── Gruntfile.js
├── LICENSE-MIT.txt
├── README.md
├── bin
└── he
├── bower.json
├── component.json
├── data
├── decode-code-points-overrides.json
├── decode-legacy-named-references.json
├── decode-map-legacy.json
├── decode-map-overrides.json
├── decode-map.json
├── encode-lone-code-points.json
├── encode-map.json
├── encode-paired-symbols.json
├── entities.json
├── invalid-character-reference-code-points.json
└── invalid-raw-code-points.json
├── he.js
├── man
└── he.1
├── package.json
├── scripts
├── ascii-whitelist-regex.js
├── astral-symbol-regex.js
├── bmp-whitelist-regex.js
├── encode-non-ascii-regex.js
├── export-data.js
├── invalid-code-points-regex.js
├── invalid-code-points-string.js
├── legacy-reference-regex.js
├── named-reference-regex.js
├── process-data.js
└── scrape-spec.js
├── src
└── he.js
└── tests
├── index.html
├── tests.js
└── tests.src.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = tab
6 | end_of_line = lf
7 | insert_final_newline = true
8 | trim_trailing_whitespace = true
9 |
10 | [{README.md,package.json,.travis.yml}]
11 | indent_style = space
12 | indent_size = 2
13 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Automatically normalize line endings for all text-based files
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Coverage report
2 | coverage
3 |
4 | # Installed npm modules
5 | node_modules
6 |
7 | # Folder view configuration files
8 | .DS_Store
9 | Desktop.ini
10 |
11 | # Thumbnail cache files
12 | ._*
13 | Thumbs.db
14 |
15 | # Files that might appear on external disks
16 | .Spotlight-V100
17 | .Trashes
18 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "0.10"
4 | - "0.12"
5 | - "4"
6 | - "5"
7 | before_script:
8 | - "npm install -g grunt-cli"
9 | # Narwhal uses a hardcoded path to openjdk v6, so use that version
10 | - "sudo apt-get update -qq"
11 | - "sudo apt-get install -qq openjdk-6-jre"
12 | - "PACKAGE=rhino1.7.6; wget https://github.com/mozilla/rhino/releases/download/Rhino1_7_6_RELEASE/$PACKAGE.zip && sudo unzip $PACKAGE -d /opt/ && rm $PACKAGE.zip"
13 | - "PACKAGE=rhino1.7.6; echo -e '#!/bin/sh\\njava -jar /opt/'$PACKAGE'/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino"
14 | - "PACKAGE=ringojs-0.11; wget https://github.com/ringo/ringojs/releases/download/v0.11.0/$PACKAGE.zip && sudo unzip $PACKAGE -d /opt/ && rm $PACKAGE.zip"
15 | - "PACKAGE=ringojs-0.11; sudo ln -s /opt/$PACKAGE/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo"
16 | - "PACKAGE=v0.3.2; wget https://github.com/280north/narwhal/archive/$PACKAGE.zip && sudo unzip $PACKAGE -d /opt/ && rm $PACKAGE.zip"
17 | - "PACKAGE=narwhal-0.3.2; sudo ln -s /opt/$PACKAGE/bin/narwhal /usr/local/bin/narwhal && sudo chmod +x /usr/local/bin/narwhal"
18 | # If the enviroment stores rt.jar in a different directory, find it and symlink the directory
19 | - "PREFIX=/usr/lib/jvm; if [ ! -d $PREFIX/java-6-openjdk ]; then for d in $PREFIX/java-6-openjdk-*; do if [ -e $d/jre/lib/rt.jar ]; then sudo ln -s $d $PREFIX/java-6-openjdk; break; fi; done; fi"
20 | script:
21 | - 'if [ "${TRAVIS_NODE_VERSION}" = "5" ]; then
22 | npm run build;
23 | fi'
24 | - "grunt ci"
25 | after_script:
26 | - "grunt shell:cover-codecov"
27 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt) {
2 |
3 | grunt.initConfig({
4 | 'shell': {
5 | 'options': {
6 | 'stdout': true,
7 | 'stderr': true,
8 | 'failOnError': true
9 | },
10 | 'cover-html': {
11 | 'command': 'istanbul cover --report "html" --verbose --dir "coverage" "tests/tests.js"'
12 | },
13 | 'cover-codecov': {
14 | 'command': 'istanbul cover --verbose --dir "coverage" "tests/tests.js" && codecov < coverage/lcov.info; rm -rf coverage/lcov*'
15 | },
16 | 'fetch-entities': {
17 | 'command': 'curl https://html.spec.whatwg.org/entities.json | sed "s/ /\t/g" > data/entities.json'
18 | },
19 | 'fetch-and-scrape-spec': {
20 | 'command': 'phantomjs --load-images=no scripts/scrape-spec.js'
21 | },
22 | 'process-data': {
23 | 'command': 'node scripts/process-data.js'
24 | },
25 | 'test-narwhal': {
26 | 'command': 'echo "Testing in Narwhal..."; export NARWHAL_OPTIMIZATION=-1; narwhal "tests/tests.js"'
27 | },
28 | 'test-phantomjs': {
29 | 'command': 'echo "Testing in PhantomJS..."; phantomjs "tests/tests.js"'
30 | },
31 | 'test-rhino': {
32 | 'command': 'echo "Testing in Rhino..."; rhino -opt -1 "tests.js"',
33 | 'options': {
34 | 'execOptions': {
35 | 'cwd': 'tests'
36 | }
37 | }
38 | },
39 | 'test-ringo': {
40 | 'command': 'echo "Testing in Ringo..."; ringo -o -1 "tests/tests.js"'
41 | },
42 | 'test-node': {
43 | 'command': 'echo "Testing in Node..."; node "tests/tests.js"'
44 | },
45 | 'test-browser': {
46 | 'command': 'echo "Testing in a browser..."; open "tests/index.html"'
47 | }
48 | },
49 | 'template': {
50 | 'build-he': {
51 | 'options': {
52 | 'data': function() {
53 | return require('./scripts/export-data.js');
54 | }
55 | },
56 | 'files': {
57 | 'he.js': ['src/he.js']
58 | }
59 | },
60 | 'build-tests': {
61 | 'options': {
62 | 'data': function() {
63 | return require('./scripts/export-data.js');
64 | }
65 | },
66 | 'files': {
67 | 'tests/tests.js': ['tests/tests.src.js']
68 | }
69 | }
70 | }
71 | });
72 |
73 | grunt.loadNpmTasks('grunt-template');
74 | grunt.loadNpmTasks('grunt-shell');
75 |
76 | grunt.registerTask('cover', 'shell:cover-html');
77 | grunt.registerTask('ci', [
78 | 'shell:test-narwhal',
79 | 'shell:test-phantomjs',
80 | 'shell:test-rhino',
81 | 'shell:test-ringo',
82 | 'shell:test-node'
83 | ]);
84 | grunt.registerTask('test', [
85 | 'ci',
86 | 'shell:test-browser'
87 | ]);
88 |
89 | grunt.registerTask('default', [
90 | 'template',
91 | 'shell:test-node'
92 | ]);
93 |
94 | grunt.registerTask('build', [
95 | 'shell:process-data',
96 | 'default'
97 | ]);
98 |
99 | grunt.registerTask('fetch', [
100 | 'shell:fetch-entities',
101 | 'shell:fetch-and-scrape-spec',
102 | 'build'
103 | ]);
104 |
105 | };
106 |
--------------------------------------------------------------------------------
/LICENSE-MIT.txt:
--------------------------------------------------------------------------------
1 | Copyright Mathias Bynens
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.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # he [](https://travis-ci.org/mathiasbynens/he) [](https://codecov.io/github/mathiasbynens/he?branch=master) [](https://gemnasium.com/mathiasbynens/he)
2 |
3 | _he_ (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports [all standardized named character references as per HTML](https://html.spec.whatwg.org/multipage/syntax.html#named-character-references), handles [ambiguous ampersands](https://mathiasbynens.be/notes/ambiguous-ampersands) and other edge cases [just like a browser would](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references), has an extensive test suite, and — contrary to many other JavaScript solutions — _he_ handles astral Unicode symbols just fine. [An online demo is available.](https://mothereff.in/html-entities)
4 |
5 | ## Installation
6 |
7 | Via [npm](https://www.npmjs.com/):
8 |
9 | ```bash
10 | npm install he
11 | ```
12 |
13 | Via [Bower](http://bower.io/):
14 |
15 | ```bash
16 | bower install he
17 | ```
18 |
19 | Via [Component](https://github.com/component/component):
20 |
21 | ```bash
22 | component install mathiasbynens/he
23 | ```
24 |
25 | In a browser:
26 |
27 | ```html
28 |
29 | ```
30 |
31 | In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/):
32 |
33 | ```js
34 | var he = require('he');
35 | ```
36 |
37 | In [Rhino](http://www.mozilla.org/rhino/):
38 |
39 | ```js
40 | load('he.js');
41 | ```
42 |
43 | Using an AMD loader like [RequireJS](http://requirejs.org/):
44 |
45 | ```js
46 | require(
47 | {
48 | 'paths': {
49 | 'he': 'path/to/he'
50 | }
51 | },
52 | ['he'],
53 | function(he) {
54 | console.log(he);
55 | }
56 | );
57 | ```
58 |
59 | ## API
60 |
61 | ### `he.version`
62 |
63 | A string representing the semantic version number.
64 |
65 | ### `he.encode(text, options)`
66 |
67 | This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and `&`, `<`, `>`, `"`, `'`, and `` ` ``, replacing them with character references.
68 |
69 | ```js
70 | he.encode('foo © bar ≠ baz 𝌆 qux');
71 | // → 'foo © bar ≠ baz 𝌆 qux'
72 | ```
73 |
74 | As long as the input string contains [allowed code points](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream) only, the return value of this function is always valid HTML. Any [(invalid) code points that cannot be represented using a character reference](https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides) in the input are not encoded:
75 |
76 | ```js
77 | he.encode('foo \0 bar');
78 | // → 'foo \0 bar'
79 | ```
80 |
81 | However, enabling [the `strict` option](https://github.com/mathiasbynens/he#strict) causes invalid code points to throw an exception. With `strict` enabled, `he.encode` either throws (if the input contains invalid code points) or returns a string of valid HTML.
82 |
83 | The `options` object is optional. It recognizes the following properties:
84 |
85 | #### `useNamedReferences`
86 |
87 | The default value for the `useNamedReferences` option is `false`. This means that `encode()` will not use any named character references (e.g. `©`) in the output — hexadecimal escapes (e.g. `©`) will be used instead. Set it to `true` to enable the use of named references.
88 |
89 | **Note that if compatibility with older browsers is a concern, this option should remain disabled.**
90 |
91 | ```js
92 | // Using the global default setting (defaults to `false`):
93 | he.encode('foo © bar ≠ baz 𝌆 qux');
94 | // → 'foo © bar ≠ baz 𝌆 qux'
95 |
96 | // Passing an `options` object to `encode`, to explicitly disallow named references:
97 | he.encode('foo © bar ≠ baz 𝌆 qux', {
98 | 'useNamedReferences': false
99 | });
100 | // → 'foo © bar ≠ baz 𝌆 qux'
101 |
102 | // Passing an `options` object to `encode`, to explicitly allow named references:
103 | he.encode('foo © bar ≠ baz 𝌆 qux', {
104 | 'useNamedReferences': true
105 | });
106 | // → 'foo © bar ≠ baz 𝌆 qux'
107 | ```
108 |
109 | #### `decimal`
110 |
111 | The default value for the `decimal` option is `false`. If the option is enabled, `encode` will generally use decimal escapes (e.g. `©`) rather than hexadecimal escapes (e.g. `©`). Beside of this replacement, the basic behavior remains the same when combined with other options. For example: if both options `useNamedReferences` and `decimal` are enabled, named references (e.g. `©`) are used over decimal escapes. HTML entities without a named reference are encoded using decimal escapes.
112 |
113 | ```js
114 | // Using the global default setting (defaults to `false`):
115 | he.encode('foo © bar ≠ baz 𝌆 qux');
116 | // → 'foo © bar ≠ baz 𝌆 qux'
117 |
118 | // Passing an `options` object to `encode`, to explicitly disable decimal escapes:
119 | he.encode('foo © bar ≠ baz 𝌆 qux', {
120 | 'decimal': false
121 | });
122 | // → 'foo © bar ≠ baz 𝌆 qux'
123 |
124 | // Passing an `options` object to `encode`, to explicitly enable decimal escapes:
125 | he.encode('foo © bar ≠ baz 𝌆 qux', {
126 | 'decimal': true
127 | });
128 | // → 'foo © bar ≠ baz 𝌆 qux'
129 |
130 | // Passing an `options` object to `encode`, to explicitly allow named references and decimal escapes:
131 | he.encode('foo © bar ≠ baz 𝌆 qux', {
132 | 'useNamedReferences': true,
133 | 'decimal': true
134 | });
135 | // → 'foo © bar ≠ baz 𝌆 qux'
136 | ```
137 |
138 | #### `encodeEverything`
139 |
140 | The default value for the `encodeEverything` option is `false`. This means that `encode()` will not use any character references for printable ASCII symbols that don’t need escaping. Set it to `true` to encode every symbol in the input string. When set to `true`, this option takes precedence over `allowUnsafeSymbols` (i.e. setting the latter to `true` in such a case has no effect).
141 |
142 | ```js
143 | // Using the global default setting (defaults to `false`):
144 | he.encode('foo © bar ≠ baz 𝌆 qux');
145 | // → 'foo © bar ≠ baz 𝌆 qux'
146 |
147 | // Passing an `options` object to `encode`, to explicitly encode all symbols:
148 | he.encode('foo © bar ≠ baz 𝌆 qux', {
149 | 'encodeEverything': true
150 | });
151 | // → 'foo © bar ≠ baz 𝌆 qux'
152 |
153 | // This setting can be combined with the `useNamedReferences` option:
154 | he.encode('foo © bar ≠ baz 𝌆 qux', {
155 | 'encodeEverything': true,
156 | 'useNamedReferences': true
157 | });
158 | // → 'foo © bar ≠ baz 𝌆 qux'
159 | ```
160 |
161 | #### `strict`
162 |
163 | The default value for the `strict` option is `false`. This means that `encode()` will encode any HTML text content you feed it, even if it contains any symbols that cause [parse errors](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators.
164 |
165 | ```js
166 | // Using the global default setting (defaults to `false`, i.e. error-tolerant mode):
167 | he.encode('\x01');
168 | // → ''
169 |
170 | // Passing an `options` object to `encode`, to explicitly enable error-tolerant mode:
171 | he.encode('\x01', {
172 | 'strict': false
173 | });
174 | // → ''
175 |
176 | // Passing an `options` object to `encode`, to explicitly enable strict mode:
177 | he.encode('\x01', {
178 | 'strict': true
179 | });
180 | // → Parse error
181 | ```
182 |
183 | #### `allowUnsafeSymbols`
184 |
185 | The default value for the `allowUnsafeSymbols` option is `false`. This means that characters that are unsafe for use in HTML content (`&`, `<`, `>`, `"`, `'`, and `` ` ``) will be encoded. When set to `true`, only non-ASCII characters will be encoded. If the `encodeEverything` option is set to `true`, this option will be ignored.
186 |
187 | ```js
188 | he.encode('foo © and & ampersand', {
189 | 'allowUnsafeSymbols': true
190 | });
191 | // → 'foo © and & ampersand'
192 | ```
193 |
194 | #### Overriding default `encode` options globally
195 |
196 | The global default setting can be overridden by modifying the `he.encode.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting.
197 |
198 | ```js
199 | // Read the global default setting:
200 | he.encode.options.useNamedReferences;
201 | // → `false` by default
202 |
203 | // Override the global default setting:
204 | he.encode.options.useNamedReferences = true;
205 |
206 | // Using the global default setting, which is now `true`:
207 | he.encode('foo © bar ≠ baz 𝌆 qux');
208 | // → 'foo © bar ≠ baz 𝌆 qux'
209 | ```
210 |
211 | ### `he.decode(html, options)`
212 |
213 | This function takes a string of HTML and decodes any named and numerical character references in it using [the algorithm described in section 12.2.4.69 of the HTML spec](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references).
214 |
215 | ```js
216 | he.decode('foo © bar ≠ baz 𝌆 qux');
217 | // → 'foo © bar ≠ baz 𝌆 qux'
218 | ```
219 |
220 | The `options` object is optional. It recognizes the following properties:
221 |
222 | #### `isAttributeValue`
223 |
224 | The default value for the `isAttributeValue` option is `false`. This means that `decode()` will decode the string as if it were used in [a text context in an HTML document](https://html.spec.whatwg.org/multipage/syntax.html#data-state). HTML has different rules for [parsing character references in attribute values](https://html.spec.whatwg.org/multipage/syntax.html#character-reference-in-attribute-value-state) — set this option to `true` to treat the input string as if it were used as an attribute value.
225 |
226 | ```js
227 | // Using the global default setting (defaults to `false`, i.e. HTML text context):
228 | he.decode('foo&bar');
229 | // → 'foo&bar'
230 |
231 | // Passing an `options` object to `decode`, to explicitly assume an HTML text context:
232 | he.decode('foo&bar', {
233 | 'isAttributeValue': false
234 | });
235 | // → 'foo&bar'
236 |
237 | // Passing an `options` object to `decode`, to explicitly assume an HTML attribute value context:
238 | he.decode('foo&bar', {
239 | 'isAttributeValue': true
240 | });
241 | // → 'foo&bar'
242 | ```
243 |
244 | #### `strict`
245 |
246 | The default value for the `strict` option is `false`. This means that `decode()` will decode any HTML text content you feed it, even if it contains any entities that cause [parse errors](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators.
247 |
248 | ```js
249 | // Using the global default setting (defaults to `false`, i.e. error-tolerant mode):
250 | he.decode('foo&bar');
251 | // → 'foo&bar'
252 |
253 | // Passing an `options` object to `decode`, to explicitly enable error-tolerant mode:
254 | he.decode('foo&bar', {
255 | 'strict': false
256 | });
257 | // → 'foo&bar'
258 |
259 | // Passing an `options` object to `decode`, to explicitly enable strict mode:
260 | he.decode('foo&bar', {
261 | 'strict': true
262 | });
263 | // → Parse error
264 | ```
265 |
266 | #### Overriding default `decode` options globally
267 |
268 | The global default settings for the `decode` function can be overridden by modifying the `he.decode.options` object. This saves you from passing in an `options` object for every call to `decode` if you want to use a non-default setting.
269 |
270 | ```js
271 | // Read the global default setting:
272 | he.decode.options.isAttributeValue;
273 | // → `false` by default
274 |
275 | // Override the global default setting:
276 | he.decode.options.isAttributeValue = true;
277 |
278 | // Using the global default setting, which is now `true`:
279 | he.decode('foo&bar');
280 | // → 'foo&bar'
281 | ```
282 |
283 | ### `he.escape(text)`
284 |
285 | This function takes a string of text and escapes it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, `'`, and `` ` ``.
286 |
287 | ```js
288 | he.escape('
');
289 | // → '<img src='x' onerror="prompt(1)">'
290 | ```
291 |
292 | ### `he.unescape(html, options)`
293 |
294 | `he.unescape` is an alias for `he.decode`. It takes a string of HTML and decodes any named and numerical character references in it.
295 |
296 | ### Using the `he` binary
297 |
298 | To use the `he` binary in your shell, simply install _he_ globally using npm:
299 |
300 | ```bash
301 | npm install -g he
302 | ```
303 |
304 | After that you will be able to encode/decode HTML entities from the command line:
305 |
306 | ```bash
307 | $ he --encode 'föo ♥ bår 𝌆 baz'
308 | föo ♥ bår 𝌆 baz
309 |
310 | $ he --encode --use-named-refs 'föo ♥ bår 𝌆 baz'
311 | föo ♥ bår 𝌆 baz
312 |
313 | $ he --decode 'föo ♥ bår 𝌆 baz'
314 | föo ♥ bår 𝌆 baz
315 | ```
316 |
317 | Read a local text file, encode it for use in an HTML text context, and save the result to a new file:
318 |
319 | ```bash
320 | $ he --encode < foo.txt > foo-escaped.html
321 | ```
322 |
323 | Or do the same with an online text file:
324 |
325 | ```bash
326 | $ curl -sL "http://git.io/HnfEaw" | he --encode > escaped.html
327 | ```
328 |
329 | Or, the opposite — read a local file containing a snippet of HTML in a text context, decode it back to plain text, and save the result to a new file:
330 |
331 | ```bash
332 | $ he --decode < foo-escaped.html > foo.txt
333 | ```
334 |
335 | Or do the same with an online HTML snippet:
336 |
337 | ```bash
338 | $ curl -sL "http://git.io/HnfEaw" | he --decode > decoded.txt
339 | ```
340 |
341 | See `he --help` for the full list of options.
342 |
343 | ## Support
344 |
345 | _he_ has been tested in at least:
346 |
347 | * Chrome 27-50
348 | * Firefox 3-45
349 | * Safari 4-9
350 | * Opera 10-12, 15–37
351 | * IE 6–11
352 | * Edge
353 | * Narwhal 0.3.2
354 | * Node.js v0.10, v0.12, v4, v5
355 | * PhantomJS 1.9.0
356 | * Rhino 1.7RC4
357 | * RingoJS 0.8-0.11
358 |
359 | ## Unit tests & code coverage
360 |
361 | After cloning this repository, run `npm install` to install the dependencies needed for he development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.
362 |
363 | Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`.
364 |
365 | To generate the code coverage report, use `grunt cover`.
366 |
367 | ## Acknowledgements
368 |
369 | Thanks to [Simon Pieters](https://simon.html5.org/) ([@zcorpan](https://twitter.com/zcorpan)) for the many suggestions.
370 |
371 | ## Author
372 |
373 | | [](https://twitter.com/mathias "Follow @mathias on Twitter") |
374 | |---|
375 | | [Mathias Bynens](https://mathiasbynens.be/) |
376 |
377 | ## License
378 |
379 | _he_ is available under the [MIT](https://mths.be/mit) license.
380 |
--------------------------------------------------------------------------------
/bin/he:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | (function() {
3 |
4 | var fs = require('fs');
5 | var he = require('../he.js');
6 | var strings = process.argv.splice(2);
7 | var stdin = process.stdin;
8 | var data;
9 | var timeout;
10 | var action;
11 | var options = {};
12 | var log = console.log;
13 |
14 | var main = function() {
15 | var option = strings[0];
16 | var count = 0;
17 |
18 | if (/^(?:-h|--help|undefined)$/.test(option)) {
19 | log(
20 | 'he v%s - https://mths.be/he',
21 | he.version
22 | );
23 | log([
24 | '\nUsage:\n',
25 | '\the [--escape] string',
26 | '\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string',
27 | '\the [--decode] [--attribute] [--strict] string',
28 | '\the [-v | --version]',
29 | '\the [-h | --help]',
30 | '\nExamples:\n',
31 | '\the --escape \\
',
32 | '\techo \'© 𝌆\' | he --decode'
33 | ].join('\n'));
34 | return process.exit(option ? 0 : 1);
35 | }
36 |
37 | if (/^(?:-v|--version)$/.test(option)) {
38 | log('v%s', he.version);
39 | return process.exit(0);
40 | }
41 |
42 | strings.forEach(function(string) {
43 | // Process options
44 | if (string == '--escape') {
45 | action = 'escape';
46 | return;
47 | }
48 | if (string == '--encode') {
49 | action = 'encode';
50 | return;
51 | }
52 | if (string == '--use-named-refs') {
53 | action = 'encode';
54 | options.useNamedReferences = true;
55 | return;
56 | }
57 | if (string == '--everything') {
58 | action = 'encode';
59 | options.encodeEverything = true;
60 | return;
61 | }
62 | if (string == '--allow-unsafe') {
63 | action = 'encode';
64 | options.allowUnsafeSymbols = true;
65 | return;
66 | }
67 | if (string == '--decimal') {
68 | action = 'encode';
69 | options.decimal = true;
70 | return;
71 | }
72 | if (string == '--decode') {
73 | action = 'decode';
74 | return;
75 | }
76 | if (string == '--attribute') {
77 | action = 'decode';
78 | options.isAttributeValue = true;
79 | return;
80 | }
81 | if (string == '--strict') {
82 | action = 'decode';
83 | options.strict = true;
84 | return;
85 | }
86 | // Process string(s)
87 | var result;
88 | if (!action) {
89 | log('Error: he requires at least one option and a string argument.');
90 | log('Try `he --help` for more information.');
91 | return process.exit(1);
92 | }
93 | try {
94 | result = he[action](string, options);
95 | log(result);
96 | count++;
97 | } catch(error) {
98 | log(error.message + '\n');
99 | log('Error: failed to %s.', action);
100 | log('If you think this is a bug in he, please report it:');
101 | log('https://github.com/mathiasbynens/he/issues/new');
102 | log(
103 | '\nStack trace using he@%s:\n',
104 | he.version
105 | );
106 | log(error.stack);
107 | return process.exit(1);
108 | }
109 | });
110 | if (!count) {
111 | log('Error: he requires a string argument.');
112 | log('Try `he --help` for more information.');
113 | return process.exit(1);
114 | }
115 | // Return with exit status 0 outside of the `forEach` loop, in case
116 | // multiple strings were passed in.
117 | return process.exit(0);
118 | };
119 |
120 | if (stdin.isTTY) {
121 | // handle shell arguments
122 | main();
123 | } else {
124 | // Either the script is called from within a non-TTY context, or `stdin`
125 | // content is being piped in.
126 | if (!process.stdout.isTTY) {
127 | // The script was called from a non-TTY context. This is a rather uncommon
128 | // use case we don’t actively support. However, we don’t want the script
129 | // to wait forever in such cases, so…
130 | timeout = setTimeout(function() {
131 | // …if no piped data arrived after a whole minute, handle shell
132 | // arguments instead.
133 | main();
134 | }, 60000);
135 | }
136 | data = '';
137 | stdin.on('data', function(chunk) {
138 | clearTimeout(timeout);
139 | data += chunk;
140 | });
141 | stdin.on('end', function() {
142 | strings.push(data.trim());
143 | main();
144 | });
145 | stdin.resume();
146 | }
147 |
148 | }());
149 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "he",
3 | "version": "1.1.1",
4 | "license": "MIT",
5 | "main": "he.js",
6 | "ignore": [
7 | "bin",
8 | "coverage",
9 | "data",
10 | "man",
11 | "scripts",
12 | "src",
13 | "tests",
14 | ".*",
15 | "component.json",
16 | "Gruntfile.js",
17 | "node_modules",
18 | "package.json"
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/component.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "he",
3 | "version": "1.1.1",
4 | "description": "A robust HTML entities encoder/decoder with full Unicode support.",
5 | "repo": "mathiasbynens/he",
6 | "license": "MIT",
7 | "scripts": [
8 | "he.js"
9 | ],
10 | "main": "he.js",
11 | "keywords": [
12 | "string",
13 | "entities",
14 | "entity",
15 | "html",
16 | "encode",
17 | "decode",
18 | "unicode"
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/data/decode-code-points-overrides.json:
--------------------------------------------------------------------------------
1 | [
2 | 0,
3 | 128,
4 | 130,
5 | 131,
6 | 132,
7 | 133,
8 | 134,
9 | 135,
10 | 136,
11 | 137,
12 | 138,
13 | 139,
14 | 140,
15 | 142,
16 | 145,
17 | 146,
18 | 147,
19 | 148,
20 | 149,
21 | 150,
22 | 151,
23 | 152,
24 | 153,
25 | 154,
26 | 155,
27 | 156,
28 | 158,
29 | 159
30 | ]
31 |
--------------------------------------------------------------------------------
/data/decode-legacy-named-references.json:
--------------------------------------------------------------------------------
1 | [
2 | "Aacute",
3 | "Agrave",
4 | "Atilde",
5 | "Ccedil",
6 | "Eacute",
7 | "Egrave",
8 | "Iacute",
9 | "Igrave",
10 | "Ntilde",
11 | "Oacute",
12 | "Ograve",
13 | "Oslash",
14 | "Otilde",
15 | "Uacute",
16 | "Ugrave",
17 | "Yacute",
18 | "aacute",
19 | "agrave",
20 | "atilde",
21 | "brvbar",
22 | "ccedil",
23 | "curren",
24 | "divide",
25 | "eacute",
26 | "egrave",
27 | "frac12",
28 | "frac14",
29 | "frac34",
30 | "iacute",
31 | "igrave",
32 | "iquest",
33 | "middot",
34 | "ntilde",
35 | "oacute",
36 | "ograve",
37 | "oslash",
38 | "otilde",
39 | "plusmn",
40 | "uacute",
41 | "ugrave",
42 | "yacute",
43 | "AElig",
44 | "Acirc",
45 | "Aring",
46 | "Ecirc",
47 | "Icirc",
48 | "Ocirc",
49 | "THORN",
50 | "Ucirc",
51 | "acirc",
52 | "acute",
53 | "aelig",
54 | "aring",
55 | "cedil",
56 | "ecirc",
57 | "icirc",
58 | "iexcl",
59 | "laquo",
60 | "micro",
61 | "ocirc",
62 | "pound",
63 | "raquo",
64 | "szlig",
65 | "thorn",
66 | "times",
67 | "ucirc",
68 | "Auml",
69 | "COPY",
70 | "Euml",
71 | "Iuml",
72 | "Ouml",
73 | "QUOT",
74 | "Uuml",
75 | "auml",
76 | "cent",
77 | "copy",
78 | "euml",
79 | "iuml",
80 | "macr",
81 | "nbsp",
82 | "ordf",
83 | "ordm",
84 | "ouml",
85 | "para",
86 | "quot",
87 | "sect",
88 | "sup1",
89 | "sup2",
90 | "sup3",
91 | "uuml",
92 | "yuml",
93 | "AMP",
94 | "ETH",
95 | "REG",
96 | "amp",
97 | "deg",
98 | "eth",
99 | "not",
100 | "reg",
101 | "shy",
102 | "uml",
103 | "yen",
104 | "GT",
105 | "LT",
106 | "gt",
107 | "lt"
108 | ]
109 |
--------------------------------------------------------------------------------
/data/decode-map-legacy.json:
--------------------------------------------------------------------------------
1 | {
2 | "aacute": "\u00E1",
3 | "Aacute": "\u00C1",
4 | "acirc": "\u00E2",
5 | "Acirc": "\u00C2",
6 | "acute": "\u00B4",
7 | "aelig": "\u00E6",
8 | "AElig": "\u00C6",
9 | "agrave": "\u00E0",
10 | "Agrave": "\u00C0",
11 | "amp": "&",
12 | "AMP": "&",
13 | "aring": "\u00E5",
14 | "Aring": "\u00C5",
15 | "atilde": "\u00E3",
16 | "Atilde": "\u00C3",
17 | "auml": "\u00E4",
18 | "Auml": "\u00C4",
19 | "brvbar": "\u00A6",
20 | "ccedil": "\u00E7",
21 | "Ccedil": "\u00C7",
22 | "cedil": "\u00B8",
23 | "cent": "\u00A2",
24 | "copy": "\u00A9",
25 | "COPY": "\u00A9",
26 | "curren": "\u00A4",
27 | "deg": "\u00B0",
28 | "divide": "\u00F7",
29 | "eacute": "\u00E9",
30 | "Eacute": "\u00C9",
31 | "ecirc": "\u00EA",
32 | "Ecirc": "\u00CA",
33 | "egrave": "\u00E8",
34 | "Egrave": "\u00C8",
35 | "eth": "\u00F0",
36 | "ETH": "\u00D0",
37 | "euml": "\u00EB",
38 | "Euml": "\u00CB",
39 | "frac12": "\u00BD",
40 | "frac14": "\u00BC",
41 | "frac34": "\u00BE",
42 | "gt": ">",
43 | "GT": ">",
44 | "iacute": "\u00ED",
45 | "Iacute": "\u00CD",
46 | "icirc": "\u00EE",
47 | "Icirc": "\u00CE",
48 | "iexcl": "\u00A1",
49 | "igrave": "\u00EC",
50 | "Igrave": "\u00CC",
51 | "iquest": "\u00BF",
52 | "iuml": "\u00EF",
53 | "Iuml": "\u00CF",
54 | "laquo": "\u00AB",
55 | "lt": "<",
56 | "LT": "<",
57 | "macr": "\u00AF",
58 | "micro": "\u00B5",
59 | "middot": "\u00B7",
60 | "nbsp": "\u00A0",
61 | "not": "\u00AC",
62 | "ntilde": "\u00F1",
63 | "Ntilde": "\u00D1",
64 | "oacute": "\u00F3",
65 | "Oacute": "\u00D3",
66 | "ocirc": "\u00F4",
67 | "Ocirc": "\u00D4",
68 | "ograve": "\u00F2",
69 | "Ograve": "\u00D2",
70 | "ordf": "\u00AA",
71 | "ordm": "\u00BA",
72 | "oslash": "\u00F8",
73 | "Oslash": "\u00D8",
74 | "otilde": "\u00F5",
75 | "Otilde": "\u00D5",
76 | "ouml": "\u00F6",
77 | "Ouml": "\u00D6",
78 | "para": "\u00B6",
79 | "plusmn": "\u00B1",
80 | "pound": "\u00A3",
81 | "quot": "\"",
82 | "QUOT": "\"",
83 | "raquo": "\u00BB",
84 | "reg": "\u00AE",
85 | "REG": "\u00AE",
86 | "sect": "\u00A7",
87 | "shy": "\u00AD",
88 | "sup1": "\u00B9",
89 | "sup2": "\u00B2",
90 | "sup3": "\u00B3",
91 | "szlig": "\u00DF",
92 | "thorn": "\u00FE",
93 | "THORN": "\u00DE",
94 | "times": "\u00D7",
95 | "uacute": "\u00FA",
96 | "Uacute": "\u00DA",
97 | "ucirc": "\u00FB",
98 | "Ucirc": "\u00DB",
99 | "ugrave": "\u00F9",
100 | "Ugrave": "\u00D9",
101 | "uml": "\u00A8",
102 | "uuml": "\u00FC",
103 | "Uuml": "\u00DC",
104 | "yacute": "\u00FD",
105 | "Yacute": "\u00DD",
106 | "yen": "\u00A5",
107 | "yuml": "\u00FF"
108 | }
109 |
--------------------------------------------------------------------------------
/data/decode-map-overrides.json:
--------------------------------------------------------------------------------
1 | {
2 | "0": "\uFFFD",
3 | "128": "\u20AC",
4 | "130": "\u201A",
5 | "131": "\u0192",
6 | "132": "\u201E",
7 | "133": "\u2026",
8 | "134": "\u2020",
9 | "135": "\u2021",
10 | "136": "\u02C6",
11 | "137": "\u2030",
12 | "138": "\u0160",
13 | "139": "\u2039",
14 | "140": "\u0152",
15 | "142": "\u017D",
16 | "145": "\u2018",
17 | "146": "\u2019",
18 | "147": "\u201C",
19 | "148": "\u201D",
20 | "149": "\u2022",
21 | "150": "\u2013",
22 | "151": "\u2014",
23 | "152": "\u02DC",
24 | "153": "\u2122",
25 | "154": "\u0161",
26 | "155": "\u203A",
27 | "156": "\u0153",
28 | "158": "\u017E",
29 | "159": "\u0178"
30 | }
31 |
--------------------------------------------------------------------------------
/data/decode-map.json:
--------------------------------------------------------------------------------
1 | {
2 | "aacute": "\u00E1",
3 | "Aacute": "\u00C1",
4 | "abreve": "\u0103",
5 | "Abreve": "\u0102",
6 | "ac": "\u223E",
7 | "acd": "\u223F",
8 | "acE": "\u223E\u0333",
9 | "acirc": "\u00E2",
10 | "Acirc": "\u00C2",
11 | "acute": "\u00B4",
12 | "acy": "\u0430",
13 | "Acy": "\u0410",
14 | "aelig": "\u00E6",
15 | "AElig": "\u00C6",
16 | "af": "\u2061",
17 | "afr": "\uD835\uDD1E",
18 | "Afr": "\uD835\uDD04",
19 | "agrave": "\u00E0",
20 | "Agrave": "\u00C0",
21 | "alefsym": "\u2135",
22 | "aleph": "\u2135",
23 | "alpha": "\u03B1",
24 | "Alpha": "\u0391",
25 | "amacr": "\u0101",
26 | "Amacr": "\u0100",
27 | "amalg": "\u2A3F",
28 | "amp": "&",
29 | "AMP": "&",
30 | "and": "\u2227",
31 | "And": "\u2A53",
32 | "andand": "\u2A55",
33 | "andd": "\u2A5C",
34 | "andslope": "\u2A58",
35 | "andv": "\u2A5A",
36 | "ang": "\u2220",
37 | "ange": "\u29A4",
38 | "angle": "\u2220",
39 | "angmsd": "\u2221",
40 | "angmsdaa": "\u29A8",
41 | "angmsdab": "\u29A9",
42 | "angmsdac": "\u29AA",
43 | "angmsdad": "\u29AB",
44 | "angmsdae": "\u29AC",
45 | "angmsdaf": "\u29AD",
46 | "angmsdag": "\u29AE",
47 | "angmsdah": "\u29AF",
48 | "angrt": "\u221F",
49 | "angrtvb": "\u22BE",
50 | "angrtvbd": "\u299D",
51 | "angsph": "\u2222",
52 | "angst": "\u00C5",
53 | "angzarr": "\u237C",
54 | "aogon": "\u0105",
55 | "Aogon": "\u0104",
56 | "aopf": "\uD835\uDD52",
57 | "Aopf": "\uD835\uDD38",
58 | "ap": "\u2248",
59 | "apacir": "\u2A6F",
60 | "ape": "\u224A",
61 | "apE": "\u2A70",
62 | "apid": "\u224B",
63 | "apos": "'",
64 | "ApplyFunction": "\u2061",
65 | "approx": "\u2248",
66 | "approxeq": "\u224A",
67 | "aring": "\u00E5",
68 | "Aring": "\u00C5",
69 | "ascr": "\uD835\uDCB6",
70 | "Ascr": "\uD835\uDC9C",
71 | "Assign": "\u2254",
72 | "ast": "*",
73 | "asymp": "\u2248",
74 | "asympeq": "\u224D",
75 | "atilde": "\u00E3",
76 | "Atilde": "\u00C3",
77 | "auml": "\u00E4",
78 | "Auml": "\u00C4",
79 | "awconint": "\u2233",
80 | "awint": "\u2A11",
81 | "backcong": "\u224C",
82 | "backepsilon": "\u03F6",
83 | "backprime": "\u2035",
84 | "backsim": "\u223D",
85 | "backsimeq": "\u22CD",
86 | "Backslash": "\u2216",
87 | "Barv": "\u2AE7",
88 | "barvee": "\u22BD",
89 | "barwed": "\u2305",
90 | "Barwed": "\u2306",
91 | "barwedge": "\u2305",
92 | "bbrk": "\u23B5",
93 | "bbrktbrk": "\u23B6",
94 | "bcong": "\u224C",
95 | "bcy": "\u0431",
96 | "Bcy": "\u0411",
97 | "bdquo": "\u201E",
98 | "becaus": "\u2235",
99 | "because": "\u2235",
100 | "Because": "\u2235",
101 | "bemptyv": "\u29B0",
102 | "bepsi": "\u03F6",
103 | "bernou": "\u212C",
104 | "Bernoullis": "\u212C",
105 | "beta": "\u03B2",
106 | "Beta": "\u0392",
107 | "beth": "\u2136",
108 | "between": "\u226C",
109 | "bfr": "\uD835\uDD1F",
110 | "Bfr": "\uD835\uDD05",
111 | "bigcap": "\u22C2",
112 | "bigcirc": "\u25EF",
113 | "bigcup": "\u22C3",
114 | "bigodot": "\u2A00",
115 | "bigoplus": "\u2A01",
116 | "bigotimes": "\u2A02",
117 | "bigsqcup": "\u2A06",
118 | "bigstar": "\u2605",
119 | "bigtriangledown": "\u25BD",
120 | "bigtriangleup": "\u25B3",
121 | "biguplus": "\u2A04",
122 | "bigvee": "\u22C1",
123 | "bigwedge": "\u22C0",
124 | "bkarow": "\u290D",
125 | "blacklozenge": "\u29EB",
126 | "blacksquare": "\u25AA",
127 | "blacktriangle": "\u25B4",
128 | "blacktriangledown": "\u25BE",
129 | "blacktriangleleft": "\u25C2",
130 | "blacktriangleright": "\u25B8",
131 | "blank": "\u2423",
132 | "blk12": "\u2592",
133 | "blk14": "\u2591",
134 | "blk34": "\u2593",
135 | "block": "\u2588",
136 | "bne": "=\u20E5",
137 | "bnequiv": "\u2261\u20E5",
138 | "bnot": "\u2310",
139 | "bNot": "\u2AED",
140 | "bopf": "\uD835\uDD53",
141 | "Bopf": "\uD835\uDD39",
142 | "bot": "\u22A5",
143 | "bottom": "\u22A5",
144 | "bowtie": "\u22C8",
145 | "boxbox": "\u29C9",
146 | "boxdl": "\u2510",
147 | "boxdL": "\u2555",
148 | "boxDl": "\u2556",
149 | "boxDL": "\u2557",
150 | "boxdr": "\u250C",
151 | "boxdR": "\u2552",
152 | "boxDr": "\u2553",
153 | "boxDR": "\u2554",
154 | "boxh": "\u2500",
155 | "boxH": "\u2550",
156 | "boxhd": "\u252C",
157 | "boxhD": "\u2565",
158 | "boxHd": "\u2564",
159 | "boxHD": "\u2566",
160 | "boxhu": "\u2534",
161 | "boxhU": "\u2568",
162 | "boxHu": "\u2567",
163 | "boxHU": "\u2569",
164 | "boxminus": "\u229F",
165 | "boxplus": "\u229E",
166 | "boxtimes": "\u22A0",
167 | "boxul": "\u2518",
168 | "boxuL": "\u255B",
169 | "boxUl": "\u255C",
170 | "boxUL": "\u255D",
171 | "boxur": "\u2514",
172 | "boxuR": "\u2558",
173 | "boxUr": "\u2559",
174 | "boxUR": "\u255A",
175 | "boxv": "\u2502",
176 | "boxV": "\u2551",
177 | "boxvh": "\u253C",
178 | "boxvH": "\u256A",
179 | "boxVh": "\u256B",
180 | "boxVH": "\u256C",
181 | "boxvl": "\u2524",
182 | "boxvL": "\u2561",
183 | "boxVl": "\u2562",
184 | "boxVL": "\u2563",
185 | "boxvr": "\u251C",
186 | "boxvR": "\u255E",
187 | "boxVr": "\u255F",
188 | "boxVR": "\u2560",
189 | "bprime": "\u2035",
190 | "breve": "\u02D8",
191 | "Breve": "\u02D8",
192 | "brvbar": "\u00A6",
193 | "bscr": "\uD835\uDCB7",
194 | "Bscr": "\u212C",
195 | "bsemi": "\u204F",
196 | "bsim": "\u223D",
197 | "bsime": "\u22CD",
198 | "bsol": "\\",
199 | "bsolb": "\u29C5",
200 | "bsolhsub": "\u27C8",
201 | "bull": "\u2022",
202 | "bullet": "\u2022",
203 | "bump": "\u224E",
204 | "bumpe": "\u224F",
205 | "bumpE": "\u2AAE",
206 | "bumpeq": "\u224F",
207 | "Bumpeq": "\u224E",
208 | "cacute": "\u0107",
209 | "Cacute": "\u0106",
210 | "cap": "\u2229",
211 | "Cap": "\u22D2",
212 | "capand": "\u2A44",
213 | "capbrcup": "\u2A49",
214 | "capcap": "\u2A4B",
215 | "capcup": "\u2A47",
216 | "capdot": "\u2A40",
217 | "CapitalDifferentialD": "\u2145",
218 | "caps": "\u2229\uFE00",
219 | "caret": "\u2041",
220 | "caron": "\u02C7",
221 | "Cayleys": "\u212D",
222 | "ccaps": "\u2A4D",
223 | "ccaron": "\u010D",
224 | "Ccaron": "\u010C",
225 | "ccedil": "\u00E7",
226 | "Ccedil": "\u00C7",
227 | "ccirc": "\u0109",
228 | "Ccirc": "\u0108",
229 | "Cconint": "\u2230",
230 | "ccups": "\u2A4C",
231 | "ccupssm": "\u2A50",
232 | "cdot": "\u010B",
233 | "Cdot": "\u010A",
234 | "cedil": "\u00B8",
235 | "Cedilla": "\u00B8",
236 | "cemptyv": "\u29B2",
237 | "cent": "\u00A2",
238 | "centerdot": "\u00B7",
239 | "CenterDot": "\u00B7",
240 | "cfr": "\uD835\uDD20",
241 | "Cfr": "\u212D",
242 | "chcy": "\u0447",
243 | "CHcy": "\u0427",
244 | "check": "\u2713",
245 | "checkmark": "\u2713",
246 | "chi": "\u03C7",
247 | "Chi": "\u03A7",
248 | "cir": "\u25CB",
249 | "circ": "\u02C6",
250 | "circeq": "\u2257",
251 | "circlearrowleft": "\u21BA",
252 | "circlearrowright": "\u21BB",
253 | "circledast": "\u229B",
254 | "circledcirc": "\u229A",
255 | "circleddash": "\u229D",
256 | "CircleDot": "\u2299",
257 | "circledR": "\u00AE",
258 | "circledS": "\u24C8",
259 | "CircleMinus": "\u2296",
260 | "CirclePlus": "\u2295",
261 | "CircleTimes": "\u2297",
262 | "cire": "\u2257",
263 | "cirE": "\u29C3",
264 | "cirfnint": "\u2A10",
265 | "cirmid": "\u2AEF",
266 | "cirscir": "\u29C2",
267 | "ClockwiseContourIntegral": "\u2232",
268 | "CloseCurlyDoubleQuote": "\u201D",
269 | "CloseCurlyQuote": "\u2019",
270 | "clubs": "\u2663",
271 | "clubsuit": "\u2663",
272 | "colon": ":",
273 | "Colon": "\u2237",
274 | "colone": "\u2254",
275 | "Colone": "\u2A74",
276 | "coloneq": "\u2254",
277 | "comma": ",",
278 | "commat": "@",
279 | "comp": "\u2201",
280 | "compfn": "\u2218",
281 | "complement": "\u2201",
282 | "complexes": "\u2102",
283 | "cong": "\u2245",
284 | "congdot": "\u2A6D",
285 | "Congruent": "\u2261",
286 | "conint": "\u222E",
287 | "Conint": "\u222F",
288 | "ContourIntegral": "\u222E",
289 | "copf": "\uD835\uDD54",
290 | "Copf": "\u2102",
291 | "coprod": "\u2210",
292 | "Coproduct": "\u2210",
293 | "copy": "\u00A9",
294 | "COPY": "\u00A9",
295 | "copysr": "\u2117",
296 | "CounterClockwiseContourIntegral": "\u2233",
297 | "crarr": "\u21B5",
298 | "cross": "\u2717",
299 | "Cross": "\u2A2F",
300 | "cscr": "\uD835\uDCB8",
301 | "Cscr": "\uD835\uDC9E",
302 | "csub": "\u2ACF",
303 | "csube": "\u2AD1",
304 | "csup": "\u2AD0",
305 | "csupe": "\u2AD2",
306 | "ctdot": "\u22EF",
307 | "cudarrl": "\u2938",
308 | "cudarrr": "\u2935",
309 | "cuepr": "\u22DE",
310 | "cuesc": "\u22DF",
311 | "cularr": "\u21B6",
312 | "cularrp": "\u293D",
313 | "cup": "\u222A",
314 | "Cup": "\u22D3",
315 | "cupbrcap": "\u2A48",
316 | "cupcap": "\u2A46",
317 | "CupCap": "\u224D",
318 | "cupcup": "\u2A4A",
319 | "cupdot": "\u228D",
320 | "cupor": "\u2A45",
321 | "cups": "\u222A\uFE00",
322 | "curarr": "\u21B7",
323 | "curarrm": "\u293C",
324 | "curlyeqprec": "\u22DE",
325 | "curlyeqsucc": "\u22DF",
326 | "curlyvee": "\u22CE",
327 | "curlywedge": "\u22CF",
328 | "curren": "\u00A4",
329 | "curvearrowleft": "\u21B6",
330 | "curvearrowright": "\u21B7",
331 | "cuvee": "\u22CE",
332 | "cuwed": "\u22CF",
333 | "cwconint": "\u2232",
334 | "cwint": "\u2231",
335 | "cylcty": "\u232D",
336 | "dagger": "\u2020",
337 | "Dagger": "\u2021",
338 | "daleth": "\u2138",
339 | "darr": "\u2193",
340 | "dArr": "\u21D3",
341 | "Darr": "\u21A1",
342 | "dash": "\u2010",
343 | "dashv": "\u22A3",
344 | "Dashv": "\u2AE4",
345 | "dbkarow": "\u290F",
346 | "dblac": "\u02DD",
347 | "dcaron": "\u010F",
348 | "Dcaron": "\u010E",
349 | "dcy": "\u0434",
350 | "Dcy": "\u0414",
351 | "dd": "\u2146",
352 | "DD": "\u2145",
353 | "ddagger": "\u2021",
354 | "ddarr": "\u21CA",
355 | "DDotrahd": "\u2911",
356 | "ddotseq": "\u2A77",
357 | "deg": "\u00B0",
358 | "Del": "\u2207",
359 | "delta": "\u03B4",
360 | "Delta": "\u0394",
361 | "demptyv": "\u29B1",
362 | "dfisht": "\u297F",
363 | "dfr": "\uD835\uDD21",
364 | "Dfr": "\uD835\uDD07",
365 | "dHar": "\u2965",
366 | "dharl": "\u21C3",
367 | "dharr": "\u21C2",
368 | "DiacriticalAcute": "\u00B4",
369 | "DiacriticalDot": "\u02D9",
370 | "DiacriticalDoubleAcute": "\u02DD",
371 | "DiacriticalGrave": "`",
372 | "DiacriticalTilde": "\u02DC",
373 | "diam": "\u22C4",
374 | "diamond": "\u22C4",
375 | "Diamond": "\u22C4",
376 | "diamondsuit": "\u2666",
377 | "diams": "\u2666",
378 | "die": "\u00A8",
379 | "DifferentialD": "\u2146",
380 | "digamma": "\u03DD",
381 | "disin": "\u22F2",
382 | "div": "\u00F7",
383 | "divide": "\u00F7",
384 | "divideontimes": "\u22C7",
385 | "divonx": "\u22C7",
386 | "djcy": "\u0452",
387 | "DJcy": "\u0402",
388 | "dlcorn": "\u231E",
389 | "dlcrop": "\u230D",
390 | "dollar": "$",
391 | "dopf": "\uD835\uDD55",
392 | "Dopf": "\uD835\uDD3B",
393 | "dot": "\u02D9",
394 | "Dot": "\u00A8",
395 | "DotDot": "\u20DC",
396 | "doteq": "\u2250",
397 | "doteqdot": "\u2251",
398 | "DotEqual": "\u2250",
399 | "dotminus": "\u2238",
400 | "dotplus": "\u2214",
401 | "dotsquare": "\u22A1",
402 | "doublebarwedge": "\u2306",
403 | "DoubleContourIntegral": "\u222F",
404 | "DoubleDot": "\u00A8",
405 | "DoubleDownArrow": "\u21D3",
406 | "DoubleLeftArrow": "\u21D0",
407 | "DoubleLeftRightArrow": "\u21D4",
408 | "DoubleLeftTee": "\u2AE4",
409 | "DoubleLongLeftArrow": "\u27F8",
410 | "DoubleLongLeftRightArrow": "\u27FA",
411 | "DoubleLongRightArrow": "\u27F9",
412 | "DoubleRightArrow": "\u21D2",
413 | "DoubleRightTee": "\u22A8",
414 | "DoubleUpArrow": "\u21D1",
415 | "DoubleUpDownArrow": "\u21D5",
416 | "DoubleVerticalBar": "\u2225",
417 | "downarrow": "\u2193",
418 | "Downarrow": "\u21D3",
419 | "DownArrow": "\u2193",
420 | "DownArrowBar": "\u2913",
421 | "DownArrowUpArrow": "\u21F5",
422 | "DownBreve": "\u0311",
423 | "downdownarrows": "\u21CA",
424 | "downharpoonleft": "\u21C3",
425 | "downharpoonright": "\u21C2",
426 | "DownLeftRightVector": "\u2950",
427 | "DownLeftTeeVector": "\u295E",
428 | "DownLeftVector": "\u21BD",
429 | "DownLeftVectorBar": "\u2956",
430 | "DownRightTeeVector": "\u295F",
431 | "DownRightVector": "\u21C1",
432 | "DownRightVectorBar": "\u2957",
433 | "DownTee": "\u22A4",
434 | "DownTeeArrow": "\u21A7",
435 | "drbkarow": "\u2910",
436 | "drcorn": "\u231F",
437 | "drcrop": "\u230C",
438 | "dscr": "\uD835\uDCB9",
439 | "Dscr": "\uD835\uDC9F",
440 | "dscy": "\u0455",
441 | "DScy": "\u0405",
442 | "dsol": "\u29F6",
443 | "dstrok": "\u0111",
444 | "Dstrok": "\u0110",
445 | "dtdot": "\u22F1",
446 | "dtri": "\u25BF",
447 | "dtrif": "\u25BE",
448 | "duarr": "\u21F5",
449 | "duhar": "\u296F",
450 | "dwangle": "\u29A6",
451 | "dzcy": "\u045F",
452 | "DZcy": "\u040F",
453 | "dzigrarr": "\u27FF",
454 | "eacute": "\u00E9",
455 | "Eacute": "\u00C9",
456 | "easter": "\u2A6E",
457 | "ecaron": "\u011B",
458 | "Ecaron": "\u011A",
459 | "ecir": "\u2256",
460 | "ecirc": "\u00EA",
461 | "Ecirc": "\u00CA",
462 | "ecolon": "\u2255",
463 | "ecy": "\u044D",
464 | "Ecy": "\u042D",
465 | "eDDot": "\u2A77",
466 | "edot": "\u0117",
467 | "eDot": "\u2251",
468 | "Edot": "\u0116",
469 | "ee": "\u2147",
470 | "efDot": "\u2252",
471 | "efr": "\uD835\uDD22",
472 | "Efr": "\uD835\uDD08",
473 | "eg": "\u2A9A",
474 | "egrave": "\u00E8",
475 | "Egrave": "\u00C8",
476 | "egs": "\u2A96",
477 | "egsdot": "\u2A98",
478 | "el": "\u2A99",
479 | "Element": "\u2208",
480 | "elinters": "\u23E7",
481 | "ell": "\u2113",
482 | "els": "\u2A95",
483 | "elsdot": "\u2A97",
484 | "emacr": "\u0113",
485 | "Emacr": "\u0112",
486 | "empty": "\u2205",
487 | "emptyset": "\u2205",
488 | "EmptySmallSquare": "\u25FB",
489 | "emptyv": "\u2205",
490 | "EmptyVerySmallSquare": "\u25AB",
491 | "emsp": "\u2003",
492 | "emsp13": "\u2004",
493 | "emsp14": "\u2005",
494 | "eng": "\u014B",
495 | "ENG": "\u014A",
496 | "ensp": "\u2002",
497 | "eogon": "\u0119",
498 | "Eogon": "\u0118",
499 | "eopf": "\uD835\uDD56",
500 | "Eopf": "\uD835\uDD3C",
501 | "epar": "\u22D5",
502 | "eparsl": "\u29E3",
503 | "eplus": "\u2A71",
504 | "epsi": "\u03B5",
505 | "epsilon": "\u03B5",
506 | "Epsilon": "\u0395",
507 | "epsiv": "\u03F5",
508 | "eqcirc": "\u2256",
509 | "eqcolon": "\u2255",
510 | "eqsim": "\u2242",
511 | "eqslantgtr": "\u2A96",
512 | "eqslantless": "\u2A95",
513 | "Equal": "\u2A75",
514 | "equals": "=",
515 | "EqualTilde": "\u2242",
516 | "equest": "\u225F",
517 | "Equilibrium": "\u21CC",
518 | "equiv": "\u2261",
519 | "equivDD": "\u2A78",
520 | "eqvparsl": "\u29E5",
521 | "erarr": "\u2971",
522 | "erDot": "\u2253",
523 | "escr": "\u212F",
524 | "Escr": "\u2130",
525 | "esdot": "\u2250",
526 | "esim": "\u2242",
527 | "Esim": "\u2A73",
528 | "eta": "\u03B7",
529 | "Eta": "\u0397",
530 | "eth": "\u00F0",
531 | "ETH": "\u00D0",
532 | "euml": "\u00EB",
533 | "Euml": "\u00CB",
534 | "euro": "\u20AC",
535 | "excl": "!",
536 | "exist": "\u2203",
537 | "Exists": "\u2203",
538 | "expectation": "\u2130",
539 | "exponentiale": "\u2147",
540 | "ExponentialE": "\u2147",
541 | "fallingdotseq": "\u2252",
542 | "fcy": "\u0444",
543 | "Fcy": "\u0424",
544 | "female": "\u2640",
545 | "ffilig": "\uFB03",
546 | "fflig": "\uFB00",
547 | "ffllig": "\uFB04",
548 | "ffr": "\uD835\uDD23",
549 | "Ffr": "\uD835\uDD09",
550 | "filig": "\uFB01",
551 | "FilledSmallSquare": "\u25FC",
552 | "FilledVerySmallSquare": "\u25AA",
553 | "fjlig": "fj",
554 | "flat": "\u266D",
555 | "fllig": "\uFB02",
556 | "fltns": "\u25B1",
557 | "fnof": "\u0192",
558 | "fopf": "\uD835\uDD57",
559 | "Fopf": "\uD835\uDD3D",
560 | "forall": "\u2200",
561 | "ForAll": "\u2200",
562 | "fork": "\u22D4",
563 | "forkv": "\u2AD9",
564 | "Fouriertrf": "\u2131",
565 | "fpartint": "\u2A0D",
566 | "frac12": "\u00BD",
567 | "frac13": "\u2153",
568 | "frac14": "\u00BC",
569 | "frac15": "\u2155",
570 | "frac16": "\u2159",
571 | "frac18": "\u215B",
572 | "frac23": "\u2154",
573 | "frac25": "\u2156",
574 | "frac34": "\u00BE",
575 | "frac35": "\u2157",
576 | "frac38": "\u215C",
577 | "frac45": "\u2158",
578 | "frac56": "\u215A",
579 | "frac58": "\u215D",
580 | "frac78": "\u215E",
581 | "frasl": "\u2044",
582 | "frown": "\u2322",
583 | "fscr": "\uD835\uDCBB",
584 | "Fscr": "\u2131",
585 | "gacute": "\u01F5",
586 | "gamma": "\u03B3",
587 | "Gamma": "\u0393",
588 | "gammad": "\u03DD",
589 | "Gammad": "\u03DC",
590 | "gap": "\u2A86",
591 | "gbreve": "\u011F",
592 | "Gbreve": "\u011E",
593 | "Gcedil": "\u0122",
594 | "gcirc": "\u011D",
595 | "Gcirc": "\u011C",
596 | "gcy": "\u0433",
597 | "Gcy": "\u0413",
598 | "gdot": "\u0121",
599 | "Gdot": "\u0120",
600 | "ge": "\u2265",
601 | "gE": "\u2267",
602 | "gel": "\u22DB",
603 | "gEl": "\u2A8C",
604 | "geq": "\u2265",
605 | "geqq": "\u2267",
606 | "geqslant": "\u2A7E",
607 | "ges": "\u2A7E",
608 | "gescc": "\u2AA9",
609 | "gesdot": "\u2A80",
610 | "gesdoto": "\u2A82",
611 | "gesdotol": "\u2A84",
612 | "gesl": "\u22DB\uFE00",
613 | "gesles": "\u2A94",
614 | "gfr": "\uD835\uDD24",
615 | "Gfr": "\uD835\uDD0A",
616 | "gg": "\u226B",
617 | "Gg": "\u22D9",
618 | "ggg": "\u22D9",
619 | "gimel": "\u2137",
620 | "gjcy": "\u0453",
621 | "GJcy": "\u0403",
622 | "gl": "\u2277",
623 | "gla": "\u2AA5",
624 | "glE": "\u2A92",
625 | "glj": "\u2AA4",
626 | "gnap": "\u2A8A",
627 | "gnapprox": "\u2A8A",
628 | "gne": "\u2A88",
629 | "gnE": "\u2269",
630 | "gneq": "\u2A88",
631 | "gneqq": "\u2269",
632 | "gnsim": "\u22E7",
633 | "gopf": "\uD835\uDD58",
634 | "Gopf": "\uD835\uDD3E",
635 | "grave": "`",
636 | "GreaterEqual": "\u2265",
637 | "GreaterEqualLess": "\u22DB",
638 | "GreaterFullEqual": "\u2267",
639 | "GreaterGreater": "\u2AA2",
640 | "GreaterLess": "\u2277",
641 | "GreaterSlantEqual": "\u2A7E",
642 | "GreaterTilde": "\u2273",
643 | "gscr": "\u210A",
644 | "Gscr": "\uD835\uDCA2",
645 | "gsim": "\u2273",
646 | "gsime": "\u2A8E",
647 | "gsiml": "\u2A90",
648 | "gt": ">",
649 | "Gt": "\u226B",
650 | "GT": ">",
651 | "gtcc": "\u2AA7",
652 | "gtcir": "\u2A7A",
653 | "gtdot": "\u22D7",
654 | "gtlPar": "\u2995",
655 | "gtquest": "\u2A7C",
656 | "gtrapprox": "\u2A86",
657 | "gtrarr": "\u2978",
658 | "gtrdot": "\u22D7",
659 | "gtreqless": "\u22DB",
660 | "gtreqqless": "\u2A8C",
661 | "gtrless": "\u2277",
662 | "gtrsim": "\u2273",
663 | "gvertneqq": "\u2269\uFE00",
664 | "gvnE": "\u2269\uFE00",
665 | "Hacek": "\u02C7",
666 | "hairsp": "\u200A",
667 | "half": "\u00BD",
668 | "hamilt": "\u210B",
669 | "hardcy": "\u044A",
670 | "HARDcy": "\u042A",
671 | "harr": "\u2194",
672 | "hArr": "\u21D4",
673 | "harrcir": "\u2948",
674 | "harrw": "\u21AD",
675 | "Hat": "^",
676 | "hbar": "\u210F",
677 | "hcirc": "\u0125",
678 | "Hcirc": "\u0124",
679 | "hearts": "\u2665",
680 | "heartsuit": "\u2665",
681 | "hellip": "\u2026",
682 | "hercon": "\u22B9",
683 | "hfr": "\uD835\uDD25",
684 | "Hfr": "\u210C",
685 | "HilbertSpace": "\u210B",
686 | "hksearow": "\u2925",
687 | "hkswarow": "\u2926",
688 | "hoarr": "\u21FF",
689 | "homtht": "\u223B",
690 | "hookleftarrow": "\u21A9",
691 | "hookrightarrow": "\u21AA",
692 | "hopf": "\uD835\uDD59",
693 | "Hopf": "\u210D",
694 | "horbar": "\u2015",
695 | "HorizontalLine": "\u2500",
696 | "hscr": "\uD835\uDCBD",
697 | "Hscr": "\u210B",
698 | "hslash": "\u210F",
699 | "hstrok": "\u0127",
700 | "Hstrok": "\u0126",
701 | "HumpDownHump": "\u224E",
702 | "HumpEqual": "\u224F",
703 | "hybull": "\u2043",
704 | "hyphen": "\u2010",
705 | "iacute": "\u00ED",
706 | "Iacute": "\u00CD",
707 | "ic": "\u2063",
708 | "icirc": "\u00EE",
709 | "Icirc": "\u00CE",
710 | "icy": "\u0438",
711 | "Icy": "\u0418",
712 | "Idot": "\u0130",
713 | "iecy": "\u0435",
714 | "IEcy": "\u0415",
715 | "iexcl": "\u00A1",
716 | "iff": "\u21D4",
717 | "ifr": "\uD835\uDD26",
718 | "Ifr": "\u2111",
719 | "igrave": "\u00EC",
720 | "Igrave": "\u00CC",
721 | "ii": "\u2148",
722 | "iiiint": "\u2A0C",
723 | "iiint": "\u222D",
724 | "iinfin": "\u29DC",
725 | "iiota": "\u2129",
726 | "ijlig": "\u0133",
727 | "IJlig": "\u0132",
728 | "Im": "\u2111",
729 | "imacr": "\u012B",
730 | "Imacr": "\u012A",
731 | "image": "\u2111",
732 | "ImaginaryI": "\u2148",
733 | "imagline": "\u2110",
734 | "imagpart": "\u2111",
735 | "imath": "\u0131",
736 | "imof": "\u22B7",
737 | "imped": "\u01B5",
738 | "Implies": "\u21D2",
739 | "in": "\u2208",
740 | "incare": "\u2105",
741 | "infin": "\u221E",
742 | "infintie": "\u29DD",
743 | "inodot": "\u0131",
744 | "int": "\u222B",
745 | "Int": "\u222C",
746 | "intcal": "\u22BA",
747 | "integers": "\u2124",
748 | "Integral": "\u222B",
749 | "intercal": "\u22BA",
750 | "Intersection": "\u22C2",
751 | "intlarhk": "\u2A17",
752 | "intprod": "\u2A3C",
753 | "InvisibleComma": "\u2063",
754 | "InvisibleTimes": "\u2062",
755 | "iocy": "\u0451",
756 | "IOcy": "\u0401",
757 | "iogon": "\u012F",
758 | "Iogon": "\u012E",
759 | "iopf": "\uD835\uDD5A",
760 | "Iopf": "\uD835\uDD40",
761 | "iota": "\u03B9",
762 | "Iota": "\u0399",
763 | "iprod": "\u2A3C",
764 | "iquest": "\u00BF",
765 | "iscr": "\uD835\uDCBE",
766 | "Iscr": "\u2110",
767 | "isin": "\u2208",
768 | "isindot": "\u22F5",
769 | "isinE": "\u22F9",
770 | "isins": "\u22F4",
771 | "isinsv": "\u22F3",
772 | "isinv": "\u2208",
773 | "it": "\u2062",
774 | "itilde": "\u0129",
775 | "Itilde": "\u0128",
776 | "iukcy": "\u0456",
777 | "Iukcy": "\u0406",
778 | "iuml": "\u00EF",
779 | "Iuml": "\u00CF",
780 | "jcirc": "\u0135",
781 | "Jcirc": "\u0134",
782 | "jcy": "\u0439",
783 | "Jcy": "\u0419",
784 | "jfr": "\uD835\uDD27",
785 | "Jfr": "\uD835\uDD0D",
786 | "jmath": "\u0237",
787 | "jopf": "\uD835\uDD5B",
788 | "Jopf": "\uD835\uDD41",
789 | "jscr": "\uD835\uDCBF",
790 | "Jscr": "\uD835\uDCA5",
791 | "jsercy": "\u0458",
792 | "Jsercy": "\u0408",
793 | "jukcy": "\u0454",
794 | "Jukcy": "\u0404",
795 | "kappa": "\u03BA",
796 | "Kappa": "\u039A",
797 | "kappav": "\u03F0",
798 | "kcedil": "\u0137",
799 | "Kcedil": "\u0136",
800 | "kcy": "\u043A",
801 | "Kcy": "\u041A",
802 | "kfr": "\uD835\uDD28",
803 | "Kfr": "\uD835\uDD0E",
804 | "kgreen": "\u0138",
805 | "khcy": "\u0445",
806 | "KHcy": "\u0425",
807 | "kjcy": "\u045C",
808 | "KJcy": "\u040C",
809 | "kopf": "\uD835\uDD5C",
810 | "Kopf": "\uD835\uDD42",
811 | "kscr": "\uD835\uDCC0",
812 | "Kscr": "\uD835\uDCA6",
813 | "lAarr": "\u21DA",
814 | "lacute": "\u013A",
815 | "Lacute": "\u0139",
816 | "laemptyv": "\u29B4",
817 | "lagran": "\u2112",
818 | "lambda": "\u03BB",
819 | "Lambda": "\u039B",
820 | "lang": "\u27E8",
821 | "Lang": "\u27EA",
822 | "langd": "\u2991",
823 | "langle": "\u27E8",
824 | "lap": "\u2A85",
825 | "Laplacetrf": "\u2112",
826 | "laquo": "\u00AB",
827 | "larr": "\u2190",
828 | "lArr": "\u21D0",
829 | "Larr": "\u219E",
830 | "larrb": "\u21E4",
831 | "larrbfs": "\u291F",
832 | "larrfs": "\u291D",
833 | "larrhk": "\u21A9",
834 | "larrlp": "\u21AB",
835 | "larrpl": "\u2939",
836 | "larrsim": "\u2973",
837 | "larrtl": "\u21A2",
838 | "lat": "\u2AAB",
839 | "latail": "\u2919",
840 | "lAtail": "\u291B",
841 | "late": "\u2AAD",
842 | "lates": "\u2AAD\uFE00",
843 | "lbarr": "\u290C",
844 | "lBarr": "\u290E",
845 | "lbbrk": "\u2772",
846 | "lbrace": "{",
847 | "lbrack": "[",
848 | "lbrke": "\u298B",
849 | "lbrksld": "\u298F",
850 | "lbrkslu": "\u298D",
851 | "lcaron": "\u013E",
852 | "Lcaron": "\u013D",
853 | "lcedil": "\u013C",
854 | "Lcedil": "\u013B",
855 | "lceil": "\u2308",
856 | "lcub": "{",
857 | "lcy": "\u043B",
858 | "Lcy": "\u041B",
859 | "ldca": "\u2936",
860 | "ldquo": "\u201C",
861 | "ldquor": "\u201E",
862 | "ldrdhar": "\u2967",
863 | "ldrushar": "\u294B",
864 | "ldsh": "\u21B2",
865 | "le": "\u2264",
866 | "lE": "\u2266",
867 | "LeftAngleBracket": "\u27E8",
868 | "leftarrow": "\u2190",
869 | "Leftarrow": "\u21D0",
870 | "LeftArrow": "\u2190",
871 | "LeftArrowBar": "\u21E4",
872 | "LeftArrowRightArrow": "\u21C6",
873 | "leftarrowtail": "\u21A2",
874 | "LeftCeiling": "\u2308",
875 | "LeftDoubleBracket": "\u27E6",
876 | "LeftDownTeeVector": "\u2961",
877 | "LeftDownVector": "\u21C3",
878 | "LeftDownVectorBar": "\u2959",
879 | "LeftFloor": "\u230A",
880 | "leftharpoondown": "\u21BD",
881 | "leftharpoonup": "\u21BC",
882 | "leftleftarrows": "\u21C7",
883 | "leftrightarrow": "\u2194",
884 | "Leftrightarrow": "\u21D4",
885 | "LeftRightArrow": "\u2194",
886 | "leftrightarrows": "\u21C6",
887 | "leftrightharpoons": "\u21CB",
888 | "leftrightsquigarrow": "\u21AD",
889 | "LeftRightVector": "\u294E",
890 | "LeftTee": "\u22A3",
891 | "LeftTeeArrow": "\u21A4",
892 | "LeftTeeVector": "\u295A",
893 | "leftthreetimes": "\u22CB",
894 | "LeftTriangle": "\u22B2",
895 | "LeftTriangleBar": "\u29CF",
896 | "LeftTriangleEqual": "\u22B4",
897 | "LeftUpDownVector": "\u2951",
898 | "LeftUpTeeVector": "\u2960",
899 | "LeftUpVector": "\u21BF",
900 | "LeftUpVectorBar": "\u2958",
901 | "LeftVector": "\u21BC",
902 | "LeftVectorBar": "\u2952",
903 | "leg": "\u22DA",
904 | "lEg": "\u2A8B",
905 | "leq": "\u2264",
906 | "leqq": "\u2266",
907 | "leqslant": "\u2A7D",
908 | "les": "\u2A7D",
909 | "lescc": "\u2AA8",
910 | "lesdot": "\u2A7F",
911 | "lesdoto": "\u2A81",
912 | "lesdotor": "\u2A83",
913 | "lesg": "\u22DA\uFE00",
914 | "lesges": "\u2A93",
915 | "lessapprox": "\u2A85",
916 | "lessdot": "\u22D6",
917 | "lesseqgtr": "\u22DA",
918 | "lesseqqgtr": "\u2A8B",
919 | "LessEqualGreater": "\u22DA",
920 | "LessFullEqual": "\u2266",
921 | "LessGreater": "\u2276",
922 | "lessgtr": "\u2276",
923 | "LessLess": "\u2AA1",
924 | "lesssim": "\u2272",
925 | "LessSlantEqual": "\u2A7D",
926 | "LessTilde": "\u2272",
927 | "lfisht": "\u297C",
928 | "lfloor": "\u230A",
929 | "lfr": "\uD835\uDD29",
930 | "Lfr": "\uD835\uDD0F",
931 | "lg": "\u2276",
932 | "lgE": "\u2A91",
933 | "lHar": "\u2962",
934 | "lhard": "\u21BD",
935 | "lharu": "\u21BC",
936 | "lharul": "\u296A",
937 | "lhblk": "\u2584",
938 | "ljcy": "\u0459",
939 | "LJcy": "\u0409",
940 | "ll": "\u226A",
941 | "Ll": "\u22D8",
942 | "llarr": "\u21C7",
943 | "llcorner": "\u231E",
944 | "Lleftarrow": "\u21DA",
945 | "llhard": "\u296B",
946 | "lltri": "\u25FA",
947 | "lmidot": "\u0140",
948 | "Lmidot": "\u013F",
949 | "lmoust": "\u23B0",
950 | "lmoustache": "\u23B0",
951 | "lnap": "\u2A89",
952 | "lnapprox": "\u2A89",
953 | "lne": "\u2A87",
954 | "lnE": "\u2268",
955 | "lneq": "\u2A87",
956 | "lneqq": "\u2268",
957 | "lnsim": "\u22E6",
958 | "loang": "\u27EC",
959 | "loarr": "\u21FD",
960 | "lobrk": "\u27E6",
961 | "longleftarrow": "\u27F5",
962 | "Longleftarrow": "\u27F8",
963 | "LongLeftArrow": "\u27F5",
964 | "longleftrightarrow": "\u27F7",
965 | "Longleftrightarrow": "\u27FA",
966 | "LongLeftRightArrow": "\u27F7",
967 | "longmapsto": "\u27FC",
968 | "longrightarrow": "\u27F6",
969 | "Longrightarrow": "\u27F9",
970 | "LongRightArrow": "\u27F6",
971 | "looparrowleft": "\u21AB",
972 | "looparrowright": "\u21AC",
973 | "lopar": "\u2985",
974 | "lopf": "\uD835\uDD5D",
975 | "Lopf": "\uD835\uDD43",
976 | "loplus": "\u2A2D",
977 | "lotimes": "\u2A34",
978 | "lowast": "\u2217",
979 | "lowbar": "_",
980 | "LowerLeftArrow": "\u2199",
981 | "LowerRightArrow": "\u2198",
982 | "loz": "\u25CA",
983 | "lozenge": "\u25CA",
984 | "lozf": "\u29EB",
985 | "lpar": "(",
986 | "lparlt": "\u2993",
987 | "lrarr": "\u21C6",
988 | "lrcorner": "\u231F",
989 | "lrhar": "\u21CB",
990 | "lrhard": "\u296D",
991 | "lrm": "\u200E",
992 | "lrtri": "\u22BF",
993 | "lsaquo": "\u2039",
994 | "lscr": "\uD835\uDCC1",
995 | "Lscr": "\u2112",
996 | "lsh": "\u21B0",
997 | "Lsh": "\u21B0",
998 | "lsim": "\u2272",
999 | "lsime": "\u2A8D",
1000 | "lsimg": "\u2A8F",
1001 | "lsqb": "[",
1002 | "lsquo": "\u2018",
1003 | "lsquor": "\u201A",
1004 | "lstrok": "\u0142",
1005 | "Lstrok": "\u0141",
1006 | "lt": "<",
1007 | "Lt": "\u226A",
1008 | "LT": "<",
1009 | "ltcc": "\u2AA6",
1010 | "ltcir": "\u2A79",
1011 | "ltdot": "\u22D6",
1012 | "lthree": "\u22CB",
1013 | "ltimes": "\u22C9",
1014 | "ltlarr": "\u2976",
1015 | "ltquest": "\u2A7B",
1016 | "ltri": "\u25C3",
1017 | "ltrie": "\u22B4",
1018 | "ltrif": "\u25C2",
1019 | "ltrPar": "\u2996",
1020 | "lurdshar": "\u294A",
1021 | "luruhar": "\u2966",
1022 | "lvertneqq": "\u2268\uFE00",
1023 | "lvnE": "\u2268\uFE00",
1024 | "macr": "\u00AF",
1025 | "male": "\u2642",
1026 | "malt": "\u2720",
1027 | "maltese": "\u2720",
1028 | "map": "\u21A6",
1029 | "Map": "\u2905",
1030 | "mapsto": "\u21A6",
1031 | "mapstodown": "\u21A7",
1032 | "mapstoleft": "\u21A4",
1033 | "mapstoup": "\u21A5",
1034 | "marker": "\u25AE",
1035 | "mcomma": "\u2A29",
1036 | "mcy": "\u043C",
1037 | "Mcy": "\u041C",
1038 | "mdash": "\u2014",
1039 | "mDDot": "\u223A",
1040 | "measuredangle": "\u2221",
1041 | "MediumSpace": "\u205F",
1042 | "Mellintrf": "\u2133",
1043 | "mfr": "\uD835\uDD2A",
1044 | "Mfr": "\uD835\uDD10",
1045 | "mho": "\u2127",
1046 | "micro": "\u00B5",
1047 | "mid": "\u2223",
1048 | "midast": "*",
1049 | "midcir": "\u2AF0",
1050 | "middot": "\u00B7",
1051 | "minus": "\u2212",
1052 | "minusb": "\u229F",
1053 | "minusd": "\u2238",
1054 | "minusdu": "\u2A2A",
1055 | "MinusPlus": "\u2213",
1056 | "mlcp": "\u2ADB",
1057 | "mldr": "\u2026",
1058 | "mnplus": "\u2213",
1059 | "models": "\u22A7",
1060 | "mopf": "\uD835\uDD5E",
1061 | "Mopf": "\uD835\uDD44",
1062 | "mp": "\u2213",
1063 | "mscr": "\uD835\uDCC2",
1064 | "Mscr": "\u2133",
1065 | "mstpos": "\u223E",
1066 | "mu": "\u03BC",
1067 | "Mu": "\u039C",
1068 | "multimap": "\u22B8",
1069 | "mumap": "\u22B8",
1070 | "nabla": "\u2207",
1071 | "nacute": "\u0144",
1072 | "Nacute": "\u0143",
1073 | "nang": "\u2220\u20D2",
1074 | "nap": "\u2249",
1075 | "napE": "\u2A70\u0338",
1076 | "napid": "\u224B\u0338",
1077 | "napos": "\u0149",
1078 | "napprox": "\u2249",
1079 | "natur": "\u266E",
1080 | "natural": "\u266E",
1081 | "naturals": "\u2115",
1082 | "nbsp": "\u00A0",
1083 | "nbump": "\u224E\u0338",
1084 | "nbumpe": "\u224F\u0338",
1085 | "ncap": "\u2A43",
1086 | "ncaron": "\u0148",
1087 | "Ncaron": "\u0147",
1088 | "ncedil": "\u0146",
1089 | "Ncedil": "\u0145",
1090 | "ncong": "\u2247",
1091 | "ncongdot": "\u2A6D\u0338",
1092 | "ncup": "\u2A42",
1093 | "ncy": "\u043D",
1094 | "Ncy": "\u041D",
1095 | "ndash": "\u2013",
1096 | "ne": "\u2260",
1097 | "nearhk": "\u2924",
1098 | "nearr": "\u2197",
1099 | "neArr": "\u21D7",
1100 | "nearrow": "\u2197",
1101 | "nedot": "\u2250\u0338",
1102 | "NegativeMediumSpace": "\u200B",
1103 | "NegativeThickSpace": "\u200B",
1104 | "NegativeThinSpace": "\u200B",
1105 | "NegativeVeryThinSpace": "\u200B",
1106 | "nequiv": "\u2262",
1107 | "nesear": "\u2928",
1108 | "nesim": "\u2242\u0338",
1109 | "NestedGreaterGreater": "\u226B",
1110 | "NestedLessLess": "\u226A",
1111 | "NewLine": "\n",
1112 | "nexist": "\u2204",
1113 | "nexists": "\u2204",
1114 | "nfr": "\uD835\uDD2B",
1115 | "Nfr": "\uD835\uDD11",
1116 | "nge": "\u2271",
1117 | "ngE": "\u2267\u0338",
1118 | "ngeq": "\u2271",
1119 | "ngeqq": "\u2267\u0338",
1120 | "ngeqslant": "\u2A7E\u0338",
1121 | "nges": "\u2A7E\u0338",
1122 | "nGg": "\u22D9\u0338",
1123 | "ngsim": "\u2275",
1124 | "ngt": "\u226F",
1125 | "nGt": "\u226B\u20D2",
1126 | "ngtr": "\u226F",
1127 | "nGtv": "\u226B\u0338",
1128 | "nharr": "\u21AE",
1129 | "nhArr": "\u21CE",
1130 | "nhpar": "\u2AF2",
1131 | "ni": "\u220B",
1132 | "nis": "\u22FC",
1133 | "nisd": "\u22FA",
1134 | "niv": "\u220B",
1135 | "njcy": "\u045A",
1136 | "NJcy": "\u040A",
1137 | "nlarr": "\u219A",
1138 | "nlArr": "\u21CD",
1139 | "nldr": "\u2025",
1140 | "nle": "\u2270",
1141 | "nlE": "\u2266\u0338",
1142 | "nleftarrow": "\u219A",
1143 | "nLeftarrow": "\u21CD",
1144 | "nleftrightarrow": "\u21AE",
1145 | "nLeftrightarrow": "\u21CE",
1146 | "nleq": "\u2270",
1147 | "nleqq": "\u2266\u0338",
1148 | "nleqslant": "\u2A7D\u0338",
1149 | "nles": "\u2A7D\u0338",
1150 | "nless": "\u226E",
1151 | "nLl": "\u22D8\u0338",
1152 | "nlsim": "\u2274",
1153 | "nlt": "\u226E",
1154 | "nLt": "\u226A\u20D2",
1155 | "nltri": "\u22EA",
1156 | "nltrie": "\u22EC",
1157 | "nLtv": "\u226A\u0338",
1158 | "nmid": "\u2224",
1159 | "NoBreak": "\u2060",
1160 | "NonBreakingSpace": "\u00A0",
1161 | "nopf": "\uD835\uDD5F",
1162 | "Nopf": "\u2115",
1163 | "not": "\u00AC",
1164 | "Not": "\u2AEC",
1165 | "NotCongruent": "\u2262",
1166 | "NotCupCap": "\u226D",
1167 | "NotDoubleVerticalBar": "\u2226",
1168 | "NotElement": "\u2209",
1169 | "NotEqual": "\u2260",
1170 | "NotEqualTilde": "\u2242\u0338",
1171 | "NotExists": "\u2204",
1172 | "NotGreater": "\u226F",
1173 | "NotGreaterEqual": "\u2271",
1174 | "NotGreaterFullEqual": "\u2267\u0338",
1175 | "NotGreaterGreater": "\u226B\u0338",
1176 | "NotGreaterLess": "\u2279",
1177 | "NotGreaterSlantEqual": "\u2A7E\u0338",
1178 | "NotGreaterTilde": "\u2275",
1179 | "NotHumpDownHump": "\u224E\u0338",
1180 | "NotHumpEqual": "\u224F\u0338",
1181 | "notin": "\u2209",
1182 | "notindot": "\u22F5\u0338",
1183 | "notinE": "\u22F9\u0338",
1184 | "notinva": "\u2209",
1185 | "notinvb": "\u22F7",
1186 | "notinvc": "\u22F6",
1187 | "NotLeftTriangle": "\u22EA",
1188 | "NotLeftTriangleBar": "\u29CF\u0338",
1189 | "NotLeftTriangleEqual": "\u22EC",
1190 | "NotLess": "\u226E",
1191 | "NotLessEqual": "\u2270",
1192 | "NotLessGreater": "\u2278",
1193 | "NotLessLess": "\u226A\u0338",
1194 | "NotLessSlantEqual": "\u2A7D\u0338",
1195 | "NotLessTilde": "\u2274",
1196 | "NotNestedGreaterGreater": "\u2AA2\u0338",
1197 | "NotNestedLessLess": "\u2AA1\u0338",
1198 | "notni": "\u220C",
1199 | "notniva": "\u220C",
1200 | "notnivb": "\u22FE",
1201 | "notnivc": "\u22FD",
1202 | "NotPrecedes": "\u2280",
1203 | "NotPrecedesEqual": "\u2AAF\u0338",
1204 | "NotPrecedesSlantEqual": "\u22E0",
1205 | "NotReverseElement": "\u220C",
1206 | "NotRightTriangle": "\u22EB",
1207 | "NotRightTriangleBar": "\u29D0\u0338",
1208 | "NotRightTriangleEqual": "\u22ED",
1209 | "NotSquareSubset": "\u228F\u0338",
1210 | "NotSquareSubsetEqual": "\u22E2",
1211 | "NotSquareSuperset": "\u2290\u0338",
1212 | "NotSquareSupersetEqual": "\u22E3",
1213 | "NotSubset": "\u2282\u20D2",
1214 | "NotSubsetEqual": "\u2288",
1215 | "NotSucceeds": "\u2281",
1216 | "NotSucceedsEqual": "\u2AB0\u0338",
1217 | "NotSucceedsSlantEqual": "\u22E1",
1218 | "NotSucceedsTilde": "\u227F\u0338",
1219 | "NotSuperset": "\u2283\u20D2",
1220 | "NotSupersetEqual": "\u2289",
1221 | "NotTilde": "\u2241",
1222 | "NotTildeEqual": "\u2244",
1223 | "NotTildeFullEqual": "\u2247",
1224 | "NotTildeTilde": "\u2249",
1225 | "NotVerticalBar": "\u2224",
1226 | "npar": "\u2226",
1227 | "nparallel": "\u2226",
1228 | "nparsl": "\u2AFD\u20E5",
1229 | "npart": "\u2202\u0338",
1230 | "npolint": "\u2A14",
1231 | "npr": "\u2280",
1232 | "nprcue": "\u22E0",
1233 | "npre": "\u2AAF\u0338",
1234 | "nprec": "\u2280",
1235 | "npreceq": "\u2AAF\u0338",
1236 | "nrarr": "\u219B",
1237 | "nrArr": "\u21CF",
1238 | "nrarrc": "\u2933\u0338",
1239 | "nrarrw": "\u219D\u0338",
1240 | "nrightarrow": "\u219B",
1241 | "nRightarrow": "\u21CF",
1242 | "nrtri": "\u22EB",
1243 | "nrtrie": "\u22ED",
1244 | "nsc": "\u2281",
1245 | "nsccue": "\u22E1",
1246 | "nsce": "\u2AB0\u0338",
1247 | "nscr": "\uD835\uDCC3",
1248 | "Nscr": "\uD835\uDCA9",
1249 | "nshortmid": "\u2224",
1250 | "nshortparallel": "\u2226",
1251 | "nsim": "\u2241",
1252 | "nsime": "\u2244",
1253 | "nsimeq": "\u2244",
1254 | "nsmid": "\u2224",
1255 | "nspar": "\u2226",
1256 | "nsqsube": "\u22E2",
1257 | "nsqsupe": "\u22E3",
1258 | "nsub": "\u2284",
1259 | "nsube": "\u2288",
1260 | "nsubE": "\u2AC5\u0338",
1261 | "nsubset": "\u2282\u20D2",
1262 | "nsubseteq": "\u2288",
1263 | "nsubseteqq": "\u2AC5\u0338",
1264 | "nsucc": "\u2281",
1265 | "nsucceq": "\u2AB0\u0338",
1266 | "nsup": "\u2285",
1267 | "nsupe": "\u2289",
1268 | "nsupE": "\u2AC6\u0338",
1269 | "nsupset": "\u2283\u20D2",
1270 | "nsupseteq": "\u2289",
1271 | "nsupseteqq": "\u2AC6\u0338",
1272 | "ntgl": "\u2279",
1273 | "ntilde": "\u00F1",
1274 | "Ntilde": "\u00D1",
1275 | "ntlg": "\u2278",
1276 | "ntriangleleft": "\u22EA",
1277 | "ntrianglelefteq": "\u22EC",
1278 | "ntriangleright": "\u22EB",
1279 | "ntrianglerighteq": "\u22ED",
1280 | "nu": "\u03BD",
1281 | "Nu": "\u039D",
1282 | "num": "#",
1283 | "numero": "\u2116",
1284 | "numsp": "\u2007",
1285 | "nvap": "\u224D\u20D2",
1286 | "nvdash": "\u22AC",
1287 | "nvDash": "\u22AD",
1288 | "nVdash": "\u22AE",
1289 | "nVDash": "\u22AF",
1290 | "nvge": "\u2265\u20D2",
1291 | "nvgt": ">\u20D2",
1292 | "nvHarr": "\u2904",
1293 | "nvinfin": "\u29DE",
1294 | "nvlArr": "\u2902",
1295 | "nvle": "\u2264\u20D2",
1296 | "nvlt": "<\u20D2",
1297 | "nvltrie": "\u22B4\u20D2",
1298 | "nvrArr": "\u2903",
1299 | "nvrtrie": "\u22B5\u20D2",
1300 | "nvsim": "\u223C\u20D2",
1301 | "nwarhk": "\u2923",
1302 | "nwarr": "\u2196",
1303 | "nwArr": "\u21D6",
1304 | "nwarrow": "\u2196",
1305 | "nwnear": "\u2927",
1306 | "oacute": "\u00F3",
1307 | "Oacute": "\u00D3",
1308 | "oast": "\u229B",
1309 | "ocir": "\u229A",
1310 | "ocirc": "\u00F4",
1311 | "Ocirc": "\u00D4",
1312 | "ocy": "\u043E",
1313 | "Ocy": "\u041E",
1314 | "odash": "\u229D",
1315 | "odblac": "\u0151",
1316 | "Odblac": "\u0150",
1317 | "odiv": "\u2A38",
1318 | "odot": "\u2299",
1319 | "odsold": "\u29BC",
1320 | "oelig": "\u0153",
1321 | "OElig": "\u0152",
1322 | "ofcir": "\u29BF",
1323 | "ofr": "\uD835\uDD2C",
1324 | "Ofr": "\uD835\uDD12",
1325 | "ogon": "\u02DB",
1326 | "ograve": "\u00F2",
1327 | "Ograve": "\u00D2",
1328 | "ogt": "\u29C1",
1329 | "ohbar": "\u29B5",
1330 | "ohm": "\u03A9",
1331 | "oint": "\u222E",
1332 | "olarr": "\u21BA",
1333 | "olcir": "\u29BE",
1334 | "olcross": "\u29BB",
1335 | "oline": "\u203E",
1336 | "olt": "\u29C0",
1337 | "omacr": "\u014D",
1338 | "Omacr": "\u014C",
1339 | "omega": "\u03C9",
1340 | "Omega": "\u03A9",
1341 | "omicron": "\u03BF",
1342 | "Omicron": "\u039F",
1343 | "omid": "\u29B6",
1344 | "ominus": "\u2296",
1345 | "oopf": "\uD835\uDD60",
1346 | "Oopf": "\uD835\uDD46",
1347 | "opar": "\u29B7",
1348 | "OpenCurlyDoubleQuote": "\u201C",
1349 | "OpenCurlyQuote": "\u2018",
1350 | "operp": "\u29B9",
1351 | "oplus": "\u2295",
1352 | "or": "\u2228",
1353 | "Or": "\u2A54",
1354 | "orarr": "\u21BB",
1355 | "ord": "\u2A5D",
1356 | "order": "\u2134",
1357 | "orderof": "\u2134",
1358 | "ordf": "\u00AA",
1359 | "ordm": "\u00BA",
1360 | "origof": "\u22B6",
1361 | "oror": "\u2A56",
1362 | "orslope": "\u2A57",
1363 | "orv": "\u2A5B",
1364 | "oS": "\u24C8",
1365 | "oscr": "\u2134",
1366 | "Oscr": "\uD835\uDCAA",
1367 | "oslash": "\u00F8",
1368 | "Oslash": "\u00D8",
1369 | "osol": "\u2298",
1370 | "otilde": "\u00F5",
1371 | "Otilde": "\u00D5",
1372 | "otimes": "\u2297",
1373 | "Otimes": "\u2A37",
1374 | "otimesas": "\u2A36",
1375 | "ouml": "\u00F6",
1376 | "Ouml": "\u00D6",
1377 | "ovbar": "\u233D",
1378 | "OverBar": "\u203E",
1379 | "OverBrace": "\u23DE",
1380 | "OverBracket": "\u23B4",
1381 | "OverParenthesis": "\u23DC",
1382 | "par": "\u2225",
1383 | "para": "\u00B6",
1384 | "parallel": "\u2225",
1385 | "parsim": "\u2AF3",
1386 | "parsl": "\u2AFD",
1387 | "part": "\u2202",
1388 | "PartialD": "\u2202",
1389 | "pcy": "\u043F",
1390 | "Pcy": "\u041F",
1391 | "percnt": "%",
1392 | "period": ".",
1393 | "permil": "\u2030",
1394 | "perp": "\u22A5",
1395 | "pertenk": "\u2031",
1396 | "pfr": "\uD835\uDD2D",
1397 | "Pfr": "\uD835\uDD13",
1398 | "phi": "\u03C6",
1399 | "Phi": "\u03A6",
1400 | "phiv": "\u03D5",
1401 | "phmmat": "\u2133",
1402 | "phone": "\u260E",
1403 | "pi": "\u03C0",
1404 | "Pi": "\u03A0",
1405 | "pitchfork": "\u22D4",
1406 | "piv": "\u03D6",
1407 | "planck": "\u210F",
1408 | "planckh": "\u210E",
1409 | "plankv": "\u210F",
1410 | "plus": "+",
1411 | "plusacir": "\u2A23",
1412 | "plusb": "\u229E",
1413 | "pluscir": "\u2A22",
1414 | "plusdo": "\u2214",
1415 | "plusdu": "\u2A25",
1416 | "pluse": "\u2A72",
1417 | "PlusMinus": "\u00B1",
1418 | "plusmn": "\u00B1",
1419 | "plussim": "\u2A26",
1420 | "plustwo": "\u2A27",
1421 | "pm": "\u00B1",
1422 | "Poincareplane": "\u210C",
1423 | "pointint": "\u2A15",
1424 | "popf": "\uD835\uDD61",
1425 | "Popf": "\u2119",
1426 | "pound": "\u00A3",
1427 | "pr": "\u227A",
1428 | "Pr": "\u2ABB",
1429 | "prap": "\u2AB7",
1430 | "prcue": "\u227C",
1431 | "pre": "\u2AAF",
1432 | "prE": "\u2AB3",
1433 | "prec": "\u227A",
1434 | "precapprox": "\u2AB7",
1435 | "preccurlyeq": "\u227C",
1436 | "Precedes": "\u227A",
1437 | "PrecedesEqual": "\u2AAF",
1438 | "PrecedesSlantEqual": "\u227C",
1439 | "PrecedesTilde": "\u227E",
1440 | "preceq": "\u2AAF",
1441 | "precnapprox": "\u2AB9",
1442 | "precneqq": "\u2AB5",
1443 | "precnsim": "\u22E8",
1444 | "precsim": "\u227E",
1445 | "prime": "\u2032",
1446 | "Prime": "\u2033",
1447 | "primes": "\u2119",
1448 | "prnap": "\u2AB9",
1449 | "prnE": "\u2AB5",
1450 | "prnsim": "\u22E8",
1451 | "prod": "\u220F",
1452 | "Product": "\u220F",
1453 | "profalar": "\u232E",
1454 | "profline": "\u2312",
1455 | "profsurf": "\u2313",
1456 | "prop": "\u221D",
1457 | "Proportion": "\u2237",
1458 | "Proportional": "\u221D",
1459 | "propto": "\u221D",
1460 | "prsim": "\u227E",
1461 | "prurel": "\u22B0",
1462 | "pscr": "\uD835\uDCC5",
1463 | "Pscr": "\uD835\uDCAB",
1464 | "psi": "\u03C8",
1465 | "Psi": "\u03A8",
1466 | "puncsp": "\u2008",
1467 | "qfr": "\uD835\uDD2E",
1468 | "Qfr": "\uD835\uDD14",
1469 | "qint": "\u2A0C",
1470 | "qopf": "\uD835\uDD62",
1471 | "Qopf": "\u211A",
1472 | "qprime": "\u2057",
1473 | "qscr": "\uD835\uDCC6",
1474 | "Qscr": "\uD835\uDCAC",
1475 | "quaternions": "\u210D",
1476 | "quatint": "\u2A16",
1477 | "quest": "?",
1478 | "questeq": "\u225F",
1479 | "quot": "\"",
1480 | "QUOT": "\"",
1481 | "rAarr": "\u21DB",
1482 | "race": "\u223D\u0331",
1483 | "racute": "\u0155",
1484 | "Racute": "\u0154",
1485 | "radic": "\u221A",
1486 | "raemptyv": "\u29B3",
1487 | "rang": "\u27E9",
1488 | "Rang": "\u27EB",
1489 | "rangd": "\u2992",
1490 | "range": "\u29A5",
1491 | "rangle": "\u27E9",
1492 | "raquo": "\u00BB",
1493 | "rarr": "\u2192",
1494 | "rArr": "\u21D2",
1495 | "Rarr": "\u21A0",
1496 | "rarrap": "\u2975",
1497 | "rarrb": "\u21E5",
1498 | "rarrbfs": "\u2920",
1499 | "rarrc": "\u2933",
1500 | "rarrfs": "\u291E",
1501 | "rarrhk": "\u21AA",
1502 | "rarrlp": "\u21AC",
1503 | "rarrpl": "\u2945",
1504 | "rarrsim": "\u2974",
1505 | "rarrtl": "\u21A3",
1506 | "Rarrtl": "\u2916",
1507 | "rarrw": "\u219D",
1508 | "ratail": "\u291A",
1509 | "rAtail": "\u291C",
1510 | "ratio": "\u2236",
1511 | "rationals": "\u211A",
1512 | "rbarr": "\u290D",
1513 | "rBarr": "\u290F",
1514 | "RBarr": "\u2910",
1515 | "rbbrk": "\u2773",
1516 | "rbrace": "}",
1517 | "rbrack": "]",
1518 | "rbrke": "\u298C",
1519 | "rbrksld": "\u298E",
1520 | "rbrkslu": "\u2990",
1521 | "rcaron": "\u0159",
1522 | "Rcaron": "\u0158",
1523 | "rcedil": "\u0157",
1524 | "Rcedil": "\u0156",
1525 | "rceil": "\u2309",
1526 | "rcub": "}",
1527 | "rcy": "\u0440",
1528 | "Rcy": "\u0420",
1529 | "rdca": "\u2937",
1530 | "rdldhar": "\u2969",
1531 | "rdquo": "\u201D",
1532 | "rdquor": "\u201D",
1533 | "rdsh": "\u21B3",
1534 | "Re": "\u211C",
1535 | "real": "\u211C",
1536 | "realine": "\u211B",
1537 | "realpart": "\u211C",
1538 | "reals": "\u211D",
1539 | "rect": "\u25AD",
1540 | "reg": "\u00AE",
1541 | "REG": "\u00AE",
1542 | "ReverseElement": "\u220B",
1543 | "ReverseEquilibrium": "\u21CB",
1544 | "ReverseUpEquilibrium": "\u296F",
1545 | "rfisht": "\u297D",
1546 | "rfloor": "\u230B",
1547 | "rfr": "\uD835\uDD2F",
1548 | "Rfr": "\u211C",
1549 | "rHar": "\u2964",
1550 | "rhard": "\u21C1",
1551 | "rharu": "\u21C0",
1552 | "rharul": "\u296C",
1553 | "rho": "\u03C1",
1554 | "Rho": "\u03A1",
1555 | "rhov": "\u03F1",
1556 | "RightAngleBracket": "\u27E9",
1557 | "rightarrow": "\u2192",
1558 | "Rightarrow": "\u21D2",
1559 | "RightArrow": "\u2192",
1560 | "RightArrowBar": "\u21E5",
1561 | "RightArrowLeftArrow": "\u21C4",
1562 | "rightarrowtail": "\u21A3",
1563 | "RightCeiling": "\u2309",
1564 | "RightDoubleBracket": "\u27E7",
1565 | "RightDownTeeVector": "\u295D",
1566 | "RightDownVector": "\u21C2",
1567 | "RightDownVectorBar": "\u2955",
1568 | "RightFloor": "\u230B",
1569 | "rightharpoondown": "\u21C1",
1570 | "rightharpoonup": "\u21C0",
1571 | "rightleftarrows": "\u21C4",
1572 | "rightleftharpoons": "\u21CC",
1573 | "rightrightarrows": "\u21C9",
1574 | "rightsquigarrow": "\u219D",
1575 | "RightTee": "\u22A2",
1576 | "RightTeeArrow": "\u21A6",
1577 | "RightTeeVector": "\u295B",
1578 | "rightthreetimes": "\u22CC",
1579 | "RightTriangle": "\u22B3",
1580 | "RightTriangleBar": "\u29D0",
1581 | "RightTriangleEqual": "\u22B5",
1582 | "RightUpDownVector": "\u294F",
1583 | "RightUpTeeVector": "\u295C",
1584 | "RightUpVector": "\u21BE",
1585 | "RightUpVectorBar": "\u2954",
1586 | "RightVector": "\u21C0",
1587 | "RightVectorBar": "\u2953",
1588 | "ring": "\u02DA",
1589 | "risingdotseq": "\u2253",
1590 | "rlarr": "\u21C4",
1591 | "rlhar": "\u21CC",
1592 | "rlm": "\u200F",
1593 | "rmoust": "\u23B1",
1594 | "rmoustache": "\u23B1",
1595 | "rnmid": "\u2AEE",
1596 | "roang": "\u27ED",
1597 | "roarr": "\u21FE",
1598 | "robrk": "\u27E7",
1599 | "ropar": "\u2986",
1600 | "ropf": "\uD835\uDD63",
1601 | "Ropf": "\u211D",
1602 | "roplus": "\u2A2E",
1603 | "rotimes": "\u2A35",
1604 | "RoundImplies": "\u2970",
1605 | "rpar": ")",
1606 | "rpargt": "\u2994",
1607 | "rppolint": "\u2A12",
1608 | "rrarr": "\u21C9",
1609 | "Rrightarrow": "\u21DB",
1610 | "rsaquo": "\u203A",
1611 | "rscr": "\uD835\uDCC7",
1612 | "Rscr": "\u211B",
1613 | "rsh": "\u21B1",
1614 | "Rsh": "\u21B1",
1615 | "rsqb": "]",
1616 | "rsquo": "\u2019",
1617 | "rsquor": "\u2019",
1618 | "rthree": "\u22CC",
1619 | "rtimes": "\u22CA",
1620 | "rtri": "\u25B9",
1621 | "rtrie": "\u22B5",
1622 | "rtrif": "\u25B8",
1623 | "rtriltri": "\u29CE",
1624 | "RuleDelayed": "\u29F4",
1625 | "ruluhar": "\u2968",
1626 | "rx": "\u211E",
1627 | "sacute": "\u015B",
1628 | "Sacute": "\u015A",
1629 | "sbquo": "\u201A",
1630 | "sc": "\u227B",
1631 | "Sc": "\u2ABC",
1632 | "scap": "\u2AB8",
1633 | "scaron": "\u0161",
1634 | "Scaron": "\u0160",
1635 | "sccue": "\u227D",
1636 | "sce": "\u2AB0",
1637 | "scE": "\u2AB4",
1638 | "scedil": "\u015F",
1639 | "Scedil": "\u015E",
1640 | "scirc": "\u015D",
1641 | "Scirc": "\u015C",
1642 | "scnap": "\u2ABA",
1643 | "scnE": "\u2AB6",
1644 | "scnsim": "\u22E9",
1645 | "scpolint": "\u2A13",
1646 | "scsim": "\u227F",
1647 | "scy": "\u0441",
1648 | "Scy": "\u0421",
1649 | "sdot": "\u22C5",
1650 | "sdotb": "\u22A1",
1651 | "sdote": "\u2A66",
1652 | "searhk": "\u2925",
1653 | "searr": "\u2198",
1654 | "seArr": "\u21D8",
1655 | "searrow": "\u2198",
1656 | "sect": "\u00A7",
1657 | "semi": ";",
1658 | "seswar": "\u2929",
1659 | "setminus": "\u2216",
1660 | "setmn": "\u2216",
1661 | "sext": "\u2736",
1662 | "sfr": "\uD835\uDD30",
1663 | "Sfr": "\uD835\uDD16",
1664 | "sfrown": "\u2322",
1665 | "sharp": "\u266F",
1666 | "shchcy": "\u0449",
1667 | "SHCHcy": "\u0429",
1668 | "shcy": "\u0448",
1669 | "SHcy": "\u0428",
1670 | "ShortDownArrow": "\u2193",
1671 | "ShortLeftArrow": "\u2190",
1672 | "shortmid": "\u2223",
1673 | "shortparallel": "\u2225",
1674 | "ShortRightArrow": "\u2192",
1675 | "ShortUpArrow": "\u2191",
1676 | "shy": "\u00AD",
1677 | "sigma": "\u03C3",
1678 | "Sigma": "\u03A3",
1679 | "sigmaf": "\u03C2",
1680 | "sigmav": "\u03C2",
1681 | "sim": "\u223C",
1682 | "simdot": "\u2A6A",
1683 | "sime": "\u2243",
1684 | "simeq": "\u2243",
1685 | "simg": "\u2A9E",
1686 | "simgE": "\u2AA0",
1687 | "siml": "\u2A9D",
1688 | "simlE": "\u2A9F",
1689 | "simne": "\u2246",
1690 | "simplus": "\u2A24",
1691 | "simrarr": "\u2972",
1692 | "slarr": "\u2190",
1693 | "SmallCircle": "\u2218",
1694 | "smallsetminus": "\u2216",
1695 | "smashp": "\u2A33",
1696 | "smeparsl": "\u29E4",
1697 | "smid": "\u2223",
1698 | "smile": "\u2323",
1699 | "smt": "\u2AAA",
1700 | "smte": "\u2AAC",
1701 | "smtes": "\u2AAC\uFE00",
1702 | "softcy": "\u044C",
1703 | "SOFTcy": "\u042C",
1704 | "sol": "/",
1705 | "solb": "\u29C4",
1706 | "solbar": "\u233F",
1707 | "sopf": "\uD835\uDD64",
1708 | "Sopf": "\uD835\uDD4A",
1709 | "spades": "\u2660",
1710 | "spadesuit": "\u2660",
1711 | "spar": "\u2225",
1712 | "sqcap": "\u2293",
1713 | "sqcaps": "\u2293\uFE00",
1714 | "sqcup": "\u2294",
1715 | "sqcups": "\u2294\uFE00",
1716 | "Sqrt": "\u221A",
1717 | "sqsub": "\u228F",
1718 | "sqsube": "\u2291",
1719 | "sqsubset": "\u228F",
1720 | "sqsubseteq": "\u2291",
1721 | "sqsup": "\u2290",
1722 | "sqsupe": "\u2292",
1723 | "sqsupset": "\u2290",
1724 | "sqsupseteq": "\u2292",
1725 | "squ": "\u25A1",
1726 | "square": "\u25A1",
1727 | "Square": "\u25A1",
1728 | "SquareIntersection": "\u2293",
1729 | "SquareSubset": "\u228F",
1730 | "SquareSubsetEqual": "\u2291",
1731 | "SquareSuperset": "\u2290",
1732 | "SquareSupersetEqual": "\u2292",
1733 | "SquareUnion": "\u2294",
1734 | "squarf": "\u25AA",
1735 | "squf": "\u25AA",
1736 | "srarr": "\u2192",
1737 | "sscr": "\uD835\uDCC8",
1738 | "Sscr": "\uD835\uDCAE",
1739 | "ssetmn": "\u2216",
1740 | "ssmile": "\u2323",
1741 | "sstarf": "\u22C6",
1742 | "star": "\u2606",
1743 | "Star": "\u22C6",
1744 | "starf": "\u2605",
1745 | "straightepsilon": "\u03F5",
1746 | "straightphi": "\u03D5",
1747 | "strns": "\u00AF",
1748 | "sub": "\u2282",
1749 | "Sub": "\u22D0",
1750 | "subdot": "\u2ABD",
1751 | "sube": "\u2286",
1752 | "subE": "\u2AC5",
1753 | "subedot": "\u2AC3",
1754 | "submult": "\u2AC1",
1755 | "subne": "\u228A",
1756 | "subnE": "\u2ACB",
1757 | "subplus": "\u2ABF",
1758 | "subrarr": "\u2979",
1759 | "subset": "\u2282",
1760 | "Subset": "\u22D0",
1761 | "subseteq": "\u2286",
1762 | "subseteqq": "\u2AC5",
1763 | "SubsetEqual": "\u2286",
1764 | "subsetneq": "\u228A",
1765 | "subsetneqq": "\u2ACB",
1766 | "subsim": "\u2AC7",
1767 | "subsub": "\u2AD5",
1768 | "subsup": "\u2AD3",
1769 | "succ": "\u227B",
1770 | "succapprox": "\u2AB8",
1771 | "succcurlyeq": "\u227D",
1772 | "Succeeds": "\u227B",
1773 | "SucceedsEqual": "\u2AB0",
1774 | "SucceedsSlantEqual": "\u227D",
1775 | "SucceedsTilde": "\u227F",
1776 | "succeq": "\u2AB0",
1777 | "succnapprox": "\u2ABA",
1778 | "succneqq": "\u2AB6",
1779 | "succnsim": "\u22E9",
1780 | "succsim": "\u227F",
1781 | "SuchThat": "\u220B",
1782 | "sum": "\u2211",
1783 | "Sum": "\u2211",
1784 | "sung": "\u266A",
1785 | "sup": "\u2283",
1786 | "Sup": "\u22D1",
1787 | "sup1": "\u00B9",
1788 | "sup2": "\u00B2",
1789 | "sup3": "\u00B3",
1790 | "supdot": "\u2ABE",
1791 | "supdsub": "\u2AD8",
1792 | "supe": "\u2287",
1793 | "supE": "\u2AC6",
1794 | "supedot": "\u2AC4",
1795 | "Superset": "\u2283",
1796 | "SupersetEqual": "\u2287",
1797 | "suphsol": "\u27C9",
1798 | "suphsub": "\u2AD7",
1799 | "suplarr": "\u297B",
1800 | "supmult": "\u2AC2",
1801 | "supne": "\u228B",
1802 | "supnE": "\u2ACC",
1803 | "supplus": "\u2AC0",
1804 | "supset": "\u2283",
1805 | "Supset": "\u22D1",
1806 | "supseteq": "\u2287",
1807 | "supseteqq": "\u2AC6",
1808 | "supsetneq": "\u228B",
1809 | "supsetneqq": "\u2ACC",
1810 | "supsim": "\u2AC8",
1811 | "supsub": "\u2AD4",
1812 | "supsup": "\u2AD6",
1813 | "swarhk": "\u2926",
1814 | "swarr": "\u2199",
1815 | "swArr": "\u21D9",
1816 | "swarrow": "\u2199",
1817 | "swnwar": "\u292A",
1818 | "szlig": "\u00DF",
1819 | "Tab": "\t",
1820 | "target": "\u2316",
1821 | "tau": "\u03C4",
1822 | "Tau": "\u03A4",
1823 | "tbrk": "\u23B4",
1824 | "tcaron": "\u0165",
1825 | "Tcaron": "\u0164",
1826 | "tcedil": "\u0163",
1827 | "Tcedil": "\u0162",
1828 | "tcy": "\u0442",
1829 | "Tcy": "\u0422",
1830 | "tdot": "\u20DB",
1831 | "telrec": "\u2315",
1832 | "tfr": "\uD835\uDD31",
1833 | "Tfr": "\uD835\uDD17",
1834 | "there4": "\u2234",
1835 | "therefore": "\u2234",
1836 | "Therefore": "\u2234",
1837 | "theta": "\u03B8",
1838 | "Theta": "\u0398",
1839 | "thetasym": "\u03D1",
1840 | "thetav": "\u03D1",
1841 | "thickapprox": "\u2248",
1842 | "thicksim": "\u223C",
1843 | "ThickSpace": "\u205F\u200A",
1844 | "thinsp": "\u2009",
1845 | "ThinSpace": "\u2009",
1846 | "thkap": "\u2248",
1847 | "thksim": "\u223C",
1848 | "thorn": "\u00FE",
1849 | "THORN": "\u00DE",
1850 | "tilde": "\u02DC",
1851 | "Tilde": "\u223C",
1852 | "TildeEqual": "\u2243",
1853 | "TildeFullEqual": "\u2245",
1854 | "TildeTilde": "\u2248",
1855 | "times": "\u00D7",
1856 | "timesb": "\u22A0",
1857 | "timesbar": "\u2A31",
1858 | "timesd": "\u2A30",
1859 | "tint": "\u222D",
1860 | "toea": "\u2928",
1861 | "top": "\u22A4",
1862 | "topbot": "\u2336",
1863 | "topcir": "\u2AF1",
1864 | "topf": "\uD835\uDD65",
1865 | "Topf": "\uD835\uDD4B",
1866 | "topfork": "\u2ADA",
1867 | "tosa": "\u2929",
1868 | "tprime": "\u2034",
1869 | "trade": "\u2122",
1870 | "TRADE": "\u2122",
1871 | "triangle": "\u25B5",
1872 | "triangledown": "\u25BF",
1873 | "triangleleft": "\u25C3",
1874 | "trianglelefteq": "\u22B4",
1875 | "triangleq": "\u225C",
1876 | "triangleright": "\u25B9",
1877 | "trianglerighteq": "\u22B5",
1878 | "tridot": "\u25EC",
1879 | "trie": "\u225C",
1880 | "triminus": "\u2A3A",
1881 | "TripleDot": "\u20DB",
1882 | "triplus": "\u2A39",
1883 | "trisb": "\u29CD",
1884 | "tritime": "\u2A3B",
1885 | "trpezium": "\u23E2",
1886 | "tscr": "\uD835\uDCC9",
1887 | "Tscr": "\uD835\uDCAF",
1888 | "tscy": "\u0446",
1889 | "TScy": "\u0426",
1890 | "tshcy": "\u045B",
1891 | "TSHcy": "\u040B",
1892 | "tstrok": "\u0167",
1893 | "Tstrok": "\u0166",
1894 | "twixt": "\u226C",
1895 | "twoheadleftarrow": "\u219E",
1896 | "twoheadrightarrow": "\u21A0",
1897 | "uacute": "\u00FA",
1898 | "Uacute": "\u00DA",
1899 | "uarr": "\u2191",
1900 | "uArr": "\u21D1",
1901 | "Uarr": "\u219F",
1902 | "Uarrocir": "\u2949",
1903 | "ubrcy": "\u045E",
1904 | "Ubrcy": "\u040E",
1905 | "ubreve": "\u016D",
1906 | "Ubreve": "\u016C",
1907 | "ucirc": "\u00FB",
1908 | "Ucirc": "\u00DB",
1909 | "ucy": "\u0443",
1910 | "Ucy": "\u0423",
1911 | "udarr": "\u21C5",
1912 | "udblac": "\u0171",
1913 | "Udblac": "\u0170",
1914 | "udhar": "\u296E",
1915 | "ufisht": "\u297E",
1916 | "ufr": "\uD835\uDD32",
1917 | "Ufr": "\uD835\uDD18",
1918 | "ugrave": "\u00F9",
1919 | "Ugrave": "\u00D9",
1920 | "uHar": "\u2963",
1921 | "uharl": "\u21BF",
1922 | "uharr": "\u21BE",
1923 | "uhblk": "\u2580",
1924 | "ulcorn": "\u231C",
1925 | "ulcorner": "\u231C",
1926 | "ulcrop": "\u230F",
1927 | "ultri": "\u25F8",
1928 | "umacr": "\u016B",
1929 | "Umacr": "\u016A",
1930 | "uml": "\u00A8",
1931 | "UnderBar": "_",
1932 | "UnderBrace": "\u23DF",
1933 | "UnderBracket": "\u23B5",
1934 | "UnderParenthesis": "\u23DD",
1935 | "Union": "\u22C3",
1936 | "UnionPlus": "\u228E",
1937 | "uogon": "\u0173",
1938 | "Uogon": "\u0172",
1939 | "uopf": "\uD835\uDD66",
1940 | "Uopf": "\uD835\uDD4C",
1941 | "uparrow": "\u2191",
1942 | "Uparrow": "\u21D1",
1943 | "UpArrow": "\u2191",
1944 | "UpArrowBar": "\u2912",
1945 | "UpArrowDownArrow": "\u21C5",
1946 | "updownarrow": "\u2195",
1947 | "Updownarrow": "\u21D5",
1948 | "UpDownArrow": "\u2195",
1949 | "UpEquilibrium": "\u296E",
1950 | "upharpoonleft": "\u21BF",
1951 | "upharpoonright": "\u21BE",
1952 | "uplus": "\u228E",
1953 | "UpperLeftArrow": "\u2196",
1954 | "UpperRightArrow": "\u2197",
1955 | "upsi": "\u03C5",
1956 | "Upsi": "\u03D2",
1957 | "upsih": "\u03D2",
1958 | "upsilon": "\u03C5",
1959 | "Upsilon": "\u03A5",
1960 | "UpTee": "\u22A5",
1961 | "UpTeeArrow": "\u21A5",
1962 | "upuparrows": "\u21C8",
1963 | "urcorn": "\u231D",
1964 | "urcorner": "\u231D",
1965 | "urcrop": "\u230E",
1966 | "uring": "\u016F",
1967 | "Uring": "\u016E",
1968 | "urtri": "\u25F9",
1969 | "uscr": "\uD835\uDCCA",
1970 | "Uscr": "\uD835\uDCB0",
1971 | "utdot": "\u22F0",
1972 | "utilde": "\u0169",
1973 | "Utilde": "\u0168",
1974 | "utri": "\u25B5",
1975 | "utrif": "\u25B4",
1976 | "uuarr": "\u21C8",
1977 | "uuml": "\u00FC",
1978 | "Uuml": "\u00DC",
1979 | "uwangle": "\u29A7",
1980 | "vangrt": "\u299C",
1981 | "varepsilon": "\u03F5",
1982 | "varkappa": "\u03F0",
1983 | "varnothing": "\u2205",
1984 | "varphi": "\u03D5",
1985 | "varpi": "\u03D6",
1986 | "varpropto": "\u221D",
1987 | "varr": "\u2195",
1988 | "vArr": "\u21D5",
1989 | "varrho": "\u03F1",
1990 | "varsigma": "\u03C2",
1991 | "varsubsetneq": "\u228A\uFE00",
1992 | "varsubsetneqq": "\u2ACB\uFE00",
1993 | "varsupsetneq": "\u228B\uFE00",
1994 | "varsupsetneqq": "\u2ACC\uFE00",
1995 | "vartheta": "\u03D1",
1996 | "vartriangleleft": "\u22B2",
1997 | "vartriangleright": "\u22B3",
1998 | "vBar": "\u2AE8",
1999 | "Vbar": "\u2AEB",
2000 | "vBarv": "\u2AE9",
2001 | "vcy": "\u0432",
2002 | "Vcy": "\u0412",
2003 | "vdash": "\u22A2",
2004 | "vDash": "\u22A8",
2005 | "Vdash": "\u22A9",
2006 | "VDash": "\u22AB",
2007 | "Vdashl": "\u2AE6",
2008 | "vee": "\u2228",
2009 | "Vee": "\u22C1",
2010 | "veebar": "\u22BB",
2011 | "veeeq": "\u225A",
2012 | "vellip": "\u22EE",
2013 | "verbar": "|",
2014 | "Verbar": "\u2016",
2015 | "vert": "|",
2016 | "Vert": "\u2016",
2017 | "VerticalBar": "\u2223",
2018 | "VerticalLine": "|",
2019 | "VerticalSeparator": "\u2758",
2020 | "VerticalTilde": "\u2240",
2021 | "VeryThinSpace": "\u200A",
2022 | "vfr": "\uD835\uDD33",
2023 | "Vfr": "\uD835\uDD19",
2024 | "vltri": "\u22B2",
2025 | "vnsub": "\u2282\u20D2",
2026 | "vnsup": "\u2283\u20D2",
2027 | "vopf": "\uD835\uDD67",
2028 | "Vopf": "\uD835\uDD4D",
2029 | "vprop": "\u221D",
2030 | "vrtri": "\u22B3",
2031 | "vscr": "\uD835\uDCCB",
2032 | "Vscr": "\uD835\uDCB1",
2033 | "vsubne": "\u228A\uFE00",
2034 | "vsubnE": "\u2ACB\uFE00",
2035 | "vsupne": "\u228B\uFE00",
2036 | "vsupnE": "\u2ACC\uFE00",
2037 | "Vvdash": "\u22AA",
2038 | "vzigzag": "\u299A",
2039 | "wcirc": "\u0175",
2040 | "Wcirc": "\u0174",
2041 | "wedbar": "\u2A5F",
2042 | "wedge": "\u2227",
2043 | "Wedge": "\u22C0",
2044 | "wedgeq": "\u2259",
2045 | "weierp": "\u2118",
2046 | "wfr": "\uD835\uDD34",
2047 | "Wfr": "\uD835\uDD1A",
2048 | "wopf": "\uD835\uDD68",
2049 | "Wopf": "\uD835\uDD4E",
2050 | "wp": "\u2118",
2051 | "wr": "\u2240",
2052 | "wreath": "\u2240",
2053 | "wscr": "\uD835\uDCCC",
2054 | "Wscr": "\uD835\uDCB2",
2055 | "xcap": "\u22C2",
2056 | "xcirc": "\u25EF",
2057 | "xcup": "\u22C3",
2058 | "xdtri": "\u25BD",
2059 | "xfr": "\uD835\uDD35",
2060 | "Xfr": "\uD835\uDD1B",
2061 | "xharr": "\u27F7",
2062 | "xhArr": "\u27FA",
2063 | "xi": "\u03BE",
2064 | "Xi": "\u039E",
2065 | "xlarr": "\u27F5",
2066 | "xlArr": "\u27F8",
2067 | "xmap": "\u27FC",
2068 | "xnis": "\u22FB",
2069 | "xodot": "\u2A00",
2070 | "xopf": "\uD835\uDD69",
2071 | "Xopf": "\uD835\uDD4F",
2072 | "xoplus": "\u2A01",
2073 | "xotime": "\u2A02",
2074 | "xrarr": "\u27F6",
2075 | "xrArr": "\u27F9",
2076 | "xscr": "\uD835\uDCCD",
2077 | "Xscr": "\uD835\uDCB3",
2078 | "xsqcup": "\u2A06",
2079 | "xuplus": "\u2A04",
2080 | "xutri": "\u25B3",
2081 | "xvee": "\u22C1",
2082 | "xwedge": "\u22C0",
2083 | "yacute": "\u00FD",
2084 | "Yacute": "\u00DD",
2085 | "yacy": "\u044F",
2086 | "YAcy": "\u042F",
2087 | "ycirc": "\u0177",
2088 | "Ycirc": "\u0176",
2089 | "ycy": "\u044B",
2090 | "Ycy": "\u042B",
2091 | "yen": "\u00A5",
2092 | "yfr": "\uD835\uDD36",
2093 | "Yfr": "\uD835\uDD1C",
2094 | "yicy": "\u0457",
2095 | "YIcy": "\u0407",
2096 | "yopf": "\uD835\uDD6A",
2097 | "Yopf": "\uD835\uDD50",
2098 | "yscr": "\uD835\uDCCE",
2099 | "Yscr": "\uD835\uDCB4",
2100 | "yucy": "\u044E",
2101 | "YUcy": "\u042E",
2102 | "yuml": "\u00FF",
2103 | "Yuml": "\u0178",
2104 | "zacute": "\u017A",
2105 | "Zacute": "\u0179",
2106 | "zcaron": "\u017E",
2107 | "Zcaron": "\u017D",
2108 | "zcy": "\u0437",
2109 | "Zcy": "\u0417",
2110 | "zdot": "\u017C",
2111 | "Zdot": "\u017B",
2112 | "zeetrf": "\u2128",
2113 | "ZeroWidthSpace": "\u200B",
2114 | "zeta": "\u03B6",
2115 | "Zeta": "\u0396",
2116 | "zfr": "\uD835\uDD37",
2117 | "Zfr": "\u2128",
2118 | "zhcy": "\u0436",
2119 | "ZHcy": "\u0416",
2120 | "zigrarr": "\u21DD",
2121 | "zopf": "\uD835\uDD6B",
2122 | "Zopf": "\u2124",
2123 | "zscr": "\uD835\uDCCF",
2124 | "Zscr": "\uD835\uDCB5",
2125 | "zwj": "\u200D",
2126 | "zwnj": "\u200C"
2127 | }
2128 |
--------------------------------------------------------------------------------
/data/encode-lone-code-points.json:
--------------------------------------------------------------------------------
1 | [
2 | 9,
3 | 10,
4 | 33,
5 | 34,
6 | 35,
7 | 36,
8 | 37,
9 | 38,
10 | 39,
11 | 40,
12 | 41,
13 | 42,
14 | 43,
15 | 44,
16 | 46,
17 | 47,
18 | 58,
19 | 59,
20 | 60,
21 | 61,
22 | 62,
23 | 63,
24 | 64,
25 | 91,
26 | 92,
27 | 93,
28 | 94,
29 | 95,
30 | 96,
31 | 123,
32 | 124,
33 | 125,
34 | 160,
35 | 161,
36 | 162,
37 | 163,
38 | 164,
39 | 165,
40 | 166,
41 | 167,
42 | 168,
43 | 169,
44 | 170,
45 | 171,
46 | 172,
47 | 173,
48 | 174,
49 | 175,
50 | 176,
51 | 177,
52 | 178,
53 | 179,
54 | 180,
55 | 181,
56 | 182,
57 | 183,
58 | 184,
59 | 185,
60 | 186,
61 | 187,
62 | 188,
63 | 189,
64 | 190,
65 | 191,
66 | 192,
67 | 193,
68 | 194,
69 | 195,
70 | 196,
71 | 197,
72 | 198,
73 | 199,
74 | 200,
75 | 201,
76 | 202,
77 | 203,
78 | 204,
79 | 205,
80 | 206,
81 | 207,
82 | 208,
83 | 209,
84 | 210,
85 | 211,
86 | 212,
87 | 213,
88 | 214,
89 | 215,
90 | 216,
91 | 217,
92 | 218,
93 | 219,
94 | 220,
95 | 221,
96 | 222,
97 | 223,
98 | 224,
99 | 225,
100 | 226,
101 | 227,
102 | 228,
103 | 229,
104 | 230,
105 | 231,
106 | 232,
107 | 233,
108 | 234,
109 | 235,
110 | 236,
111 | 237,
112 | 238,
113 | 239,
114 | 240,
115 | 241,
116 | 242,
117 | 243,
118 | 244,
119 | 245,
120 | 246,
121 | 247,
122 | 248,
123 | 249,
124 | 250,
125 | 251,
126 | 252,
127 | 253,
128 | 254,
129 | 255,
130 | 256,
131 | 257,
132 | 258,
133 | 259,
134 | 260,
135 | 261,
136 | 262,
137 | 263,
138 | 264,
139 | 265,
140 | 266,
141 | 267,
142 | 268,
143 | 269,
144 | 270,
145 | 271,
146 | 272,
147 | 273,
148 | 274,
149 | 275,
150 | 278,
151 | 279,
152 | 280,
153 | 281,
154 | 282,
155 | 283,
156 | 284,
157 | 285,
158 | 286,
159 | 287,
160 | 288,
161 | 289,
162 | 290,
163 | 292,
164 | 293,
165 | 294,
166 | 295,
167 | 296,
168 | 297,
169 | 298,
170 | 299,
171 | 302,
172 | 303,
173 | 304,
174 | 305,
175 | 306,
176 | 307,
177 | 308,
178 | 309,
179 | 310,
180 | 311,
181 | 312,
182 | 313,
183 | 314,
184 | 315,
185 | 316,
186 | 317,
187 | 318,
188 | 319,
189 | 320,
190 | 321,
191 | 322,
192 | 323,
193 | 324,
194 | 325,
195 | 326,
196 | 327,
197 | 328,
198 | 329,
199 | 330,
200 | 331,
201 | 332,
202 | 333,
203 | 336,
204 | 337,
205 | 338,
206 | 339,
207 | 340,
208 | 341,
209 | 342,
210 | 343,
211 | 344,
212 | 345,
213 | 346,
214 | 347,
215 | 348,
216 | 349,
217 | 350,
218 | 351,
219 | 352,
220 | 353,
221 | 354,
222 | 355,
223 | 356,
224 | 357,
225 | 358,
226 | 359,
227 | 360,
228 | 361,
229 | 362,
230 | 363,
231 | 364,
232 | 365,
233 | 366,
234 | 367,
235 | 368,
236 | 369,
237 | 370,
238 | 371,
239 | 372,
240 | 373,
241 | 374,
242 | 375,
243 | 376,
244 | 377,
245 | 378,
246 | 379,
247 | 380,
248 | 381,
249 | 382,
250 | 402,
251 | 437,
252 | 501,
253 | 567,
254 | 710,
255 | 711,
256 | 728,
257 | 729,
258 | 730,
259 | 731,
260 | 732,
261 | 733,
262 | 785,
263 | 913,
264 | 914,
265 | 915,
266 | 916,
267 | 917,
268 | 918,
269 | 919,
270 | 920,
271 | 921,
272 | 922,
273 | 923,
274 | 924,
275 | 925,
276 | 926,
277 | 927,
278 | 928,
279 | 929,
280 | 931,
281 | 932,
282 | 933,
283 | 934,
284 | 935,
285 | 936,
286 | 937,
287 | 945,
288 | 946,
289 | 947,
290 | 948,
291 | 949,
292 | 950,
293 | 951,
294 | 952,
295 | 953,
296 | 954,
297 | 955,
298 | 956,
299 | 957,
300 | 958,
301 | 959,
302 | 960,
303 | 961,
304 | 962,
305 | 963,
306 | 964,
307 | 965,
308 | 966,
309 | 967,
310 | 968,
311 | 969,
312 | 977,
313 | 978,
314 | 981,
315 | 982,
316 | 988,
317 | 989,
318 | 1008,
319 | 1009,
320 | 1013,
321 | 1014,
322 | 1025,
323 | 1026,
324 | 1027,
325 | 1028,
326 | 1029,
327 | 1030,
328 | 1031,
329 | 1032,
330 | 1033,
331 | 1034,
332 | 1035,
333 | 1036,
334 | 1038,
335 | 1039,
336 | 1040,
337 | 1041,
338 | 1042,
339 | 1043,
340 | 1044,
341 | 1045,
342 | 1046,
343 | 1047,
344 | 1048,
345 | 1049,
346 | 1050,
347 | 1051,
348 | 1052,
349 | 1053,
350 | 1054,
351 | 1055,
352 | 1056,
353 | 1057,
354 | 1058,
355 | 1059,
356 | 1060,
357 | 1061,
358 | 1062,
359 | 1063,
360 | 1064,
361 | 1065,
362 | 1066,
363 | 1067,
364 | 1068,
365 | 1069,
366 | 1070,
367 | 1071,
368 | 1072,
369 | 1073,
370 | 1074,
371 | 1075,
372 | 1076,
373 | 1077,
374 | 1078,
375 | 1079,
376 | 1080,
377 | 1081,
378 | 1082,
379 | 1083,
380 | 1084,
381 | 1085,
382 | 1086,
383 | 1087,
384 | 1088,
385 | 1089,
386 | 1090,
387 | 1091,
388 | 1092,
389 | 1093,
390 | 1094,
391 | 1095,
392 | 1096,
393 | 1097,
394 | 1098,
395 | 1099,
396 | 1100,
397 | 1101,
398 | 1102,
399 | 1103,
400 | 1105,
401 | 1106,
402 | 1107,
403 | 1108,
404 | 1109,
405 | 1110,
406 | 1111,
407 | 1112,
408 | 1113,
409 | 1114,
410 | 1115,
411 | 1116,
412 | 1118,
413 | 1119,
414 | 8194,
415 | 8195,
416 | 8196,
417 | 8197,
418 | 8199,
419 | 8200,
420 | 8201,
421 | 8202,
422 | 8203,
423 | 8204,
424 | 8205,
425 | 8206,
426 | 8207,
427 | 8208,
428 | 8211,
429 | 8212,
430 | 8213,
431 | 8214,
432 | 8216,
433 | 8217,
434 | 8218,
435 | 8220,
436 | 8221,
437 | 8222,
438 | 8224,
439 | 8225,
440 | 8226,
441 | 8229,
442 | 8230,
443 | 8240,
444 | 8241,
445 | 8242,
446 | 8243,
447 | 8244,
448 | 8245,
449 | 8249,
450 | 8250,
451 | 8254,
452 | 8257,
453 | 8259,
454 | 8260,
455 | 8271,
456 | 8279,
457 | 8287,
458 | 8288,
459 | 8289,
460 | 8290,
461 | 8291,
462 | 8364,
463 | 8411,
464 | 8412,
465 | 8450,
466 | 8453,
467 | 8458,
468 | 8459,
469 | 8460,
470 | 8461,
471 | 8462,
472 | 8463,
473 | 8464,
474 | 8465,
475 | 8466,
476 | 8467,
477 | 8469,
478 | 8470,
479 | 8471,
480 | 8472,
481 | 8473,
482 | 8474,
483 | 8475,
484 | 8476,
485 | 8477,
486 | 8478,
487 | 8482,
488 | 8484,
489 | 8487,
490 | 8488,
491 | 8489,
492 | 8492,
493 | 8493,
494 | 8495,
495 | 8496,
496 | 8497,
497 | 8499,
498 | 8500,
499 | 8501,
500 | 8502,
501 | 8503,
502 | 8504,
503 | 8517,
504 | 8518,
505 | 8519,
506 | 8520,
507 | 8531,
508 | 8532,
509 | 8533,
510 | 8534,
511 | 8535,
512 | 8536,
513 | 8537,
514 | 8538,
515 | 8539,
516 | 8540,
517 | 8541,
518 | 8542,
519 | 8592,
520 | 8593,
521 | 8594,
522 | 8595,
523 | 8596,
524 | 8597,
525 | 8598,
526 | 8599,
527 | 8600,
528 | 8601,
529 | 8602,
530 | 8603,
531 | 8605,
532 | 8606,
533 | 8607,
534 | 8608,
535 | 8609,
536 | 8610,
537 | 8611,
538 | 8612,
539 | 8613,
540 | 8614,
541 | 8615,
542 | 8617,
543 | 8618,
544 | 8619,
545 | 8620,
546 | 8621,
547 | 8622,
548 | 8624,
549 | 8625,
550 | 8626,
551 | 8627,
552 | 8629,
553 | 8630,
554 | 8631,
555 | 8634,
556 | 8635,
557 | 8636,
558 | 8637,
559 | 8638,
560 | 8639,
561 | 8640,
562 | 8641,
563 | 8642,
564 | 8643,
565 | 8644,
566 | 8645,
567 | 8646,
568 | 8647,
569 | 8648,
570 | 8649,
571 | 8650,
572 | 8651,
573 | 8652,
574 | 8653,
575 | 8654,
576 | 8655,
577 | 8656,
578 | 8657,
579 | 8658,
580 | 8659,
581 | 8660,
582 | 8661,
583 | 8662,
584 | 8663,
585 | 8664,
586 | 8665,
587 | 8666,
588 | 8667,
589 | 8669,
590 | 8676,
591 | 8677,
592 | 8693,
593 | 8701,
594 | 8702,
595 | 8703,
596 | 8704,
597 | 8705,
598 | 8706,
599 | 8707,
600 | 8708,
601 | 8709,
602 | 8711,
603 | 8712,
604 | 8713,
605 | 8715,
606 | 8716,
607 | 8719,
608 | 8720,
609 | 8721,
610 | 8722,
611 | 8723,
612 | 8724,
613 | 8726,
614 | 8727,
615 | 8728,
616 | 8730,
617 | 8733,
618 | 8734,
619 | 8735,
620 | 8736,
621 | 8737,
622 | 8738,
623 | 8739,
624 | 8740,
625 | 8741,
626 | 8742,
627 | 8743,
628 | 8744,
629 | 8745,
630 | 8746,
631 | 8747,
632 | 8748,
633 | 8749,
634 | 8750,
635 | 8751,
636 | 8752,
637 | 8753,
638 | 8754,
639 | 8755,
640 | 8756,
641 | 8757,
642 | 8758,
643 | 8759,
644 | 8760,
645 | 8762,
646 | 8763,
647 | 8764,
648 | 8765,
649 | 8766,
650 | 8767,
651 | 8768,
652 | 8769,
653 | 8770,
654 | 8771,
655 | 8772,
656 | 8773,
657 | 8774,
658 | 8775,
659 | 8776,
660 | 8777,
661 | 8778,
662 | 8779,
663 | 8780,
664 | 8781,
665 | 8782,
666 | 8783,
667 | 8784,
668 | 8785,
669 | 8786,
670 | 8787,
671 | 8788,
672 | 8789,
673 | 8790,
674 | 8791,
675 | 8793,
676 | 8794,
677 | 8796,
678 | 8799,
679 | 8800,
680 | 8801,
681 | 8802,
682 | 8804,
683 | 8805,
684 | 8806,
685 | 8807,
686 | 8808,
687 | 8809,
688 | 8810,
689 | 8811,
690 | 8812,
691 | 8813,
692 | 8814,
693 | 8815,
694 | 8816,
695 | 8817,
696 | 8818,
697 | 8819,
698 | 8820,
699 | 8821,
700 | 8822,
701 | 8823,
702 | 8824,
703 | 8825,
704 | 8826,
705 | 8827,
706 | 8828,
707 | 8829,
708 | 8830,
709 | 8831,
710 | 8832,
711 | 8833,
712 | 8834,
713 | 8835,
714 | 8836,
715 | 8837,
716 | 8838,
717 | 8839,
718 | 8840,
719 | 8841,
720 | 8842,
721 | 8843,
722 | 8845,
723 | 8846,
724 | 8847,
725 | 8848,
726 | 8849,
727 | 8850,
728 | 8851,
729 | 8852,
730 | 8853,
731 | 8854,
732 | 8855,
733 | 8856,
734 | 8857,
735 | 8858,
736 | 8859,
737 | 8861,
738 | 8862,
739 | 8863,
740 | 8864,
741 | 8865,
742 | 8866,
743 | 8867,
744 | 8868,
745 | 8869,
746 | 8871,
747 | 8872,
748 | 8873,
749 | 8874,
750 | 8875,
751 | 8876,
752 | 8877,
753 | 8878,
754 | 8879,
755 | 8880,
756 | 8882,
757 | 8883,
758 | 8884,
759 | 8885,
760 | 8886,
761 | 8887,
762 | 8888,
763 | 8889,
764 | 8890,
765 | 8891,
766 | 8893,
767 | 8894,
768 | 8895,
769 | 8896,
770 | 8897,
771 | 8898,
772 | 8899,
773 | 8900,
774 | 8901,
775 | 8902,
776 | 8903,
777 | 8904,
778 | 8905,
779 | 8906,
780 | 8907,
781 | 8908,
782 | 8909,
783 | 8910,
784 | 8911,
785 | 8912,
786 | 8913,
787 | 8914,
788 | 8915,
789 | 8916,
790 | 8917,
791 | 8918,
792 | 8919,
793 | 8920,
794 | 8921,
795 | 8922,
796 | 8923,
797 | 8926,
798 | 8927,
799 | 8928,
800 | 8929,
801 | 8930,
802 | 8931,
803 | 8934,
804 | 8935,
805 | 8936,
806 | 8937,
807 | 8938,
808 | 8939,
809 | 8940,
810 | 8941,
811 | 8942,
812 | 8943,
813 | 8944,
814 | 8945,
815 | 8946,
816 | 8947,
817 | 8948,
818 | 8949,
819 | 8950,
820 | 8951,
821 | 8953,
822 | 8954,
823 | 8955,
824 | 8956,
825 | 8957,
826 | 8958,
827 | 8965,
828 | 8966,
829 | 8968,
830 | 8969,
831 | 8970,
832 | 8971,
833 | 8972,
834 | 8973,
835 | 8974,
836 | 8975,
837 | 8976,
838 | 8978,
839 | 8979,
840 | 8981,
841 | 8982,
842 | 8988,
843 | 8989,
844 | 8990,
845 | 8991,
846 | 8994,
847 | 8995,
848 | 9005,
849 | 9006,
850 | 9014,
851 | 9021,
852 | 9023,
853 | 9084,
854 | 9136,
855 | 9137,
856 | 9140,
857 | 9141,
858 | 9142,
859 | 9180,
860 | 9181,
861 | 9182,
862 | 9183,
863 | 9186,
864 | 9191,
865 | 9251,
866 | 9416,
867 | 9472,
868 | 9474,
869 | 9484,
870 | 9488,
871 | 9492,
872 | 9496,
873 | 9500,
874 | 9508,
875 | 9516,
876 | 9524,
877 | 9532,
878 | 9552,
879 | 9553,
880 | 9554,
881 | 9555,
882 | 9556,
883 | 9557,
884 | 9558,
885 | 9559,
886 | 9560,
887 | 9561,
888 | 9562,
889 | 9563,
890 | 9564,
891 | 9565,
892 | 9566,
893 | 9567,
894 | 9568,
895 | 9569,
896 | 9570,
897 | 9571,
898 | 9572,
899 | 9573,
900 | 9574,
901 | 9575,
902 | 9576,
903 | 9577,
904 | 9578,
905 | 9579,
906 | 9580,
907 | 9600,
908 | 9604,
909 | 9608,
910 | 9617,
911 | 9618,
912 | 9619,
913 | 9633,
914 | 9642,
915 | 9643,
916 | 9645,
917 | 9646,
918 | 9649,
919 | 9651,
920 | 9652,
921 | 9653,
922 | 9656,
923 | 9657,
924 | 9661,
925 | 9662,
926 | 9663,
927 | 9666,
928 | 9667,
929 | 9674,
930 | 9675,
931 | 9708,
932 | 9711,
933 | 9720,
934 | 9721,
935 | 9722,
936 | 9723,
937 | 9724,
938 | 9733,
939 | 9734,
940 | 9742,
941 | 9792,
942 | 9794,
943 | 9824,
944 | 9827,
945 | 9829,
946 | 9830,
947 | 9834,
948 | 9837,
949 | 9838,
950 | 9839,
951 | 10003,
952 | 10007,
953 | 10016,
954 | 10038,
955 | 10072,
956 | 10098,
957 | 10099,
958 | 10184,
959 | 10185,
960 | 10214,
961 | 10215,
962 | 10216,
963 | 10217,
964 | 10218,
965 | 10219,
966 | 10220,
967 | 10221,
968 | 10229,
969 | 10230,
970 | 10231,
971 | 10232,
972 | 10233,
973 | 10234,
974 | 10236,
975 | 10239,
976 | 10498,
977 | 10499,
978 | 10500,
979 | 10501,
980 | 10508,
981 | 10509,
982 | 10510,
983 | 10511,
984 | 10512,
985 | 10513,
986 | 10514,
987 | 10515,
988 | 10518,
989 | 10521,
990 | 10522,
991 | 10523,
992 | 10524,
993 | 10525,
994 | 10526,
995 | 10527,
996 | 10528,
997 | 10531,
998 | 10532,
999 | 10533,
1000 | 10534,
1001 | 10535,
1002 | 10536,
1003 | 10537,
1004 | 10538,
1005 | 10547,
1006 | 10549,
1007 | 10550,
1008 | 10551,
1009 | 10552,
1010 | 10553,
1011 | 10556,
1012 | 10557,
1013 | 10565,
1014 | 10568,
1015 | 10569,
1016 | 10570,
1017 | 10571,
1018 | 10574,
1019 | 10575,
1020 | 10576,
1021 | 10577,
1022 | 10578,
1023 | 10579,
1024 | 10580,
1025 | 10581,
1026 | 10582,
1027 | 10583,
1028 | 10584,
1029 | 10585,
1030 | 10586,
1031 | 10587,
1032 | 10588,
1033 | 10589,
1034 | 10590,
1035 | 10591,
1036 | 10592,
1037 | 10593,
1038 | 10594,
1039 | 10595,
1040 | 10596,
1041 | 10597,
1042 | 10598,
1043 | 10599,
1044 | 10600,
1045 | 10601,
1046 | 10602,
1047 | 10603,
1048 | 10604,
1049 | 10605,
1050 | 10606,
1051 | 10607,
1052 | 10608,
1053 | 10609,
1054 | 10610,
1055 | 10611,
1056 | 10612,
1057 | 10613,
1058 | 10614,
1059 | 10616,
1060 | 10617,
1061 | 10619,
1062 | 10620,
1063 | 10621,
1064 | 10622,
1065 | 10623,
1066 | 10629,
1067 | 10630,
1068 | 10635,
1069 | 10636,
1070 | 10637,
1071 | 10638,
1072 | 10639,
1073 | 10640,
1074 | 10641,
1075 | 10642,
1076 | 10643,
1077 | 10644,
1078 | 10645,
1079 | 10646,
1080 | 10650,
1081 | 10652,
1082 | 10653,
1083 | 10660,
1084 | 10661,
1085 | 10662,
1086 | 10663,
1087 | 10664,
1088 | 10665,
1089 | 10666,
1090 | 10667,
1091 | 10668,
1092 | 10669,
1093 | 10670,
1094 | 10671,
1095 | 10672,
1096 | 10673,
1097 | 10674,
1098 | 10675,
1099 | 10676,
1100 | 10677,
1101 | 10678,
1102 | 10679,
1103 | 10681,
1104 | 10683,
1105 | 10684,
1106 | 10686,
1107 | 10687,
1108 | 10688,
1109 | 10689,
1110 | 10690,
1111 | 10691,
1112 | 10692,
1113 | 10693,
1114 | 10697,
1115 | 10701,
1116 | 10702,
1117 | 10703,
1118 | 10704,
1119 | 10716,
1120 | 10717,
1121 | 10718,
1122 | 10723,
1123 | 10724,
1124 | 10725,
1125 | 10731,
1126 | 10740,
1127 | 10742,
1128 | 10752,
1129 | 10753,
1130 | 10754,
1131 | 10756,
1132 | 10758,
1133 | 10764,
1134 | 10765,
1135 | 10768,
1136 | 10769,
1137 | 10770,
1138 | 10771,
1139 | 10772,
1140 | 10773,
1141 | 10774,
1142 | 10775,
1143 | 10786,
1144 | 10787,
1145 | 10788,
1146 | 10789,
1147 | 10790,
1148 | 10791,
1149 | 10793,
1150 | 10794,
1151 | 10797,
1152 | 10798,
1153 | 10799,
1154 | 10800,
1155 | 10801,
1156 | 10803,
1157 | 10804,
1158 | 10805,
1159 | 10806,
1160 | 10807,
1161 | 10808,
1162 | 10809,
1163 | 10810,
1164 | 10811,
1165 | 10812,
1166 | 10815,
1167 | 10816,
1168 | 10818,
1169 | 10819,
1170 | 10820,
1171 | 10821,
1172 | 10822,
1173 | 10823,
1174 | 10824,
1175 | 10825,
1176 | 10826,
1177 | 10827,
1178 | 10828,
1179 | 10829,
1180 | 10832,
1181 | 10835,
1182 | 10836,
1183 | 10837,
1184 | 10838,
1185 | 10839,
1186 | 10840,
1187 | 10842,
1188 | 10843,
1189 | 10844,
1190 | 10845,
1191 | 10847,
1192 | 10854,
1193 | 10858,
1194 | 10861,
1195 | 10862,
1196 | 10863,
1197 | 10864,
1198 | 10865,
1199 | 10866,
1200 | 10867,
1201 | 10868,
1202 | 10869,
1203 | 10871,
1204 | 10872,
1205 | 10873,
1206 | 10874,
1207 | 10875,
1208 | 10876,
1209 | 10877,
1210 | 10878,
1211 | 10879,
1212 | 10880,
1213 | 10881,
1214 | 10882,
1215 | 10883,
1216 | 10884,
1217 | 10885,
1218 | 10886,
1219 | 10887,
1220 | 10888,
1221 | 10889,
1222 | 10890,
1223 | 10891,
1224 | 10892,
1225 | 10893,
1226 | 10894,
1227 | 10895,
1228 | 10896,
1229 | 10897,
1230 | 10898,
1231 | 10899,
1232 | 10900,
1233 | 10901,
1234 | 10902,
1235 | 10903,
1236 | 10904,
1237 | 10905,
1238 | 10906,
1239 | 10909,
1240 | 10910,
1241 | 10911,
1242 | 10912,
1243 | 10913,
1244 | 10914,
1245 | 10916,
1246 | 10917,
1247 | 10918,
1248 | 10919,
1249 | 10920,
1250 | 10921,
1251 | 10922,
1252 | 10923,
1253 | 10924,
1254 | 10925,
1255 | 10926,
1256 | 10927,
1257 | 10928,
1258 | 10931,
1259 | 10932,
1260 | 10933,
1261 | 10934,
1262 | 10935,
1263 | 10936,
1264 | 10937,
1265 | 10938,
1266 | 10939,
1267 | 10940,
1268 | 10941,
1269 | 10942,
1270 | 10943,
1271 | 10944,
1272 | 10945,
1273 | 10946,
1274 | 10947,
1275 | 10948,
1276 | 10949,
1277 | 10950,
1278 | 10951,
1279 | 10952,
1280 | 10955,
1281 | 10956,
1282 | 10959,
1283 | 10960,
1284 | 10961,
1285 | 10962,
1286 | 10963,
1287 | 10964,
1288 | 10965,
1289 | 10966,
1290 | 10967,
1291 | 10968,
1292 | 10969,
1293 | 10970,
1294 | 10971,
1295 | 10980,
1296 | 10982,
1297 | 10983,
1298 | 10984,
1299 | 10985,
1300 | 10987,
1301 | 10988,
1302 | 10989,
1303 | 10990,
1304 | 10991,
1305 | 10992,
1306 | 10993,
1307 | 10994,
1308 | 10995,
1309 | 11005,
1310 | 64256,
1311 | 64257,
1312 | 64258,
1313 | 64259,
1314 | 64260,
1315 | 119964,
1316 | 119966,
1317 | 119967,
1318 | 119970,
1319 | 119973,
1320 | 119974,
1321 | 119977,
1322 | 119978,
1323 | 119979,
1324 | 119980,
1325 | 119982,
1326 | 119983,
1327 | 119984,
1328 | 119985,
1329 | 119986,
1330 | 119987,
1331 | 119988,
1332 | 119989,
1333 | 119990,
1334 | 119991,
1335 | 119992,
1336 | 119993,
1337 | 119995,
1338 | 119997,
1339 | 119998,
1340 | 119999,
1341 | 120000,
1342 | 120001,
1343 | 120002,
1344 | 120003,
1345 | 120005,
1346 | 120006,
1347 | 120007,
1348 | 120008,
1349 | 120009,
1350 | 120010,
1351 | 120011,
1352 | 120012,
1353 | 120013,
1354 | 120014,
1355 | 120015,
1356 | 120068,
1357 | 120069,
1358 | 120071,
1359 | 120072,
1360 | 120073,
1361 | 120074,
1362 | 120077,
1363 | 120078,
1364 | 120079,
1365 | 120080,
1366 | 120081,
1367 | 120082,
1368 | 120083,
1369 | 120084,
1370 | 120086,
1371 | 120087,
1372 | 120088,
1373 | 120089,
1374 | 120090,
1375 | 120091,
1376 | 120092,
1377 | 120094,
1378 | 120095,
1379 | 120096,
1380 | 120097,
1381 | 120098,
1382 | 120099,
1383 | 120100,
1384 | 120101,
1385 | 120102,
1386 | 120103,
1387 | 120104,
1388 | 120105,
1389 | 120106,
1390 | 120107,
1391 | 120108,
1392 | 120109,
1393 | 120110,
1394 | 120111,
1395 | 120112,
1396 | 120113,
1397 | 120114,
1398 | 120115,
1399 | 120116,
1400 | 120117,
1401 | 120118,
1402 | 120119,
1403 | 120120,
1404 | 120121,
1405 | 120123,
1406 | 120124,
1407 | 120125,
1408 | 120126,
1409 | 120128,
1410 | 120129,
1411 | 120130,
1412 | 120131,
1413 | 120132,
1414 | 120134,
1415 | 120138,
1416 | 120139,
1417 | 120140,
1418 | 120141,
1419 | 120142,
1420 | 120143,
1421 | 120144,
1422 | 120146,
1423 | 120147,
1424 | 120148,
1425 | 120149,
1426 | 120150,
1427 | 120151,
1428 | 120152,
1429 | 120153,
1430 | 120154,
1431 | 120155,
1432 | 120156,
1433 | 120157,
1434 | 120158,
1435 | 120159,
1436 | 120160,
1437 | 120161,
1438 | 120162,
1439 | 120163,
1440 | 120164,
1441 | 120165,
1442 | 120166,
1443 | 120167,
1444 | 120168,
1445 | 120169,
1446 | 120170,
1447 | 120171
1448 | ]
1449 |
--------------------------------------------------------------------------------
/data/encode-map.json:
--------------------------------------------------------------------------------
1 | {
2 | "\u00AD": "shy",
3 | "\u200C": "zwnj",
4 | "\u200D": "zwj",
5 | "\u200E": "lrm",
6 | "\u2063": "ic",
7 | "\u2062": "it",
8 | "\u2061": "af",
9 | "\u200F": "rlm",
10 | "\u200B": "ZeroWidthSpace",
11 | "\u2060": "NoBreak",
12 | "\u0311": "DownBreve",
13 | "\u20DB": "tdot",
14 | "\u20DC": "DotDot",
15 | "\t": "Tab",
16 | "\n": "NewLine",
17 | "\u2008": "puncsp",
18 | "\u205F": "MediumSpace",
19 | "\u2009": "thinsp",
20 | "\u200A": "hairsp",
21 | "\u2004": "emsp13",
22 | "\u2002": "ensp",
23 | "\u2005": "emsp14",
24 | "\u2003": "emsp",
25 | "\u2007": "numsp",
26 | "\u00A0": "nbsp",
27 | "\u205F\u200A": "ThickSpace",
28 | "\u203E": "oline",
29 | "_": "lowbar",
30 | "\u2010": "dash",
31 | "\u2013": "ndash",
32 | "\u2014": "mdash",
33 | "\u2015": "horbar",
34 | ",": "comma",
35 | ";": "semi",
36 | "\u204F": "bsemi",
37 | ":": "colon",
38 | "\u2A74": "Colone",
39 | "!": "excl",
40 | "\u00A1": "iexcl",
41 | "?": "quest",
42 | "\u00BF": "iquest",
43 | ".": "period",
44 | "\u2025": "nldr",
45 | "\u2026": "mldr",
46 | "\u00B7": "middot",
47 | "'": "apos",
48 | "\u2018": "lsquo",
49 | "\u2019": "rsquo",
50 | "\u201A": "sbquo",
51 | "\u2039": "lsaquo",
52 | "\u203A": "rsaquo",
53 | "\"": "quot",
54 | "\u201C": "ldquo",
55 | "\u201D": "rdquo",
56 | "\u201E": "bdquo",
57 | "\u00AB": "laquo",
58 | "\u00BB": "raquo",
59 | "(": "lpar",
60 | ")": "rpar",
61 | "[": "lsqb",
62 | "]": "rsqb",
63 | "{": "lcub",
64 | "}": "rcub",
65 | "\u2308": "lceil",
66 | "\u2309": "rceil",
67 | "\u230A": "lfloor",
68 | "\u230B": "rfloor",
69 | "\u2985": "lopar",
70 | "\u2986": "ropar",
71 | "\u298B": "lbrke",
72 | "\u298C": "rbrke",
73 | "\u298D": "lbrkslu",
74 | "\u298E": "rbrksld",
75 | "\u298F": "lbrksld",
76 | "\u2990": "rbrkslu",
77 | "\u2991": "langd",
78 | "\u2992": "rangd",
79 | "\u2993": "lparlt",
80 | "\u2994": "rpargt",
81 | "\u2995": "gtlPar",
82 | "\u2996": "ltrPar",
83 | "\u27E6": "lobrk",
84 | "\u27E7": "robrk",
85 | "\u27E8": "lang",
86 | "\u27E9": "rang",
87 | "\u27EA": "Lang",
88 | "\u27EB": "Rang",
89 | "\u27EC": "loang",
90 | "\u27ED": "roang",
91 | "\u2772": "lbbrk",
92 | "\u2773": "rbbrk",
93 | "\u2016": "Vert",
94 | "\u00A7": "sect",
95 | "\u00B6": "para",
96 | "@": "commat",
97 | "*": "ast",
98 | "/": "sol",
99 | "undefined": null,
100 | "&": "amp",
101 | "#": "num",
102 | "%": "percnt",
103 | "\u2030": "permil",
104 | "\u2031": "pertenk",
105 | "\u2020": "dagger",
106 | "\u2021": "Dagger",
107 | "\u2022": "bull",
108 | "\u2043": "hybull",
109 | "\u2032": "prime",
110 | "\u2033": "Prime",
111 | "\u2034": "tprime",
112 | "\u2057": "qprime",
113 | "\u2035": "bprime",
114 | "\u2041": "caret",
115 | "`": "grave",
116 | "\u00B4": "acute",
117 | "\u02DC": "tilde",
118 | "^": "Hat",
119 | "\u00AF": "macr",
120 | "\u02D8": "breve",
121 | "\u02D9": "dot",
122 | "\u00A8": "die",
123 | "\u02DA": "ring",
124 | "\u02DD": "dblac",
125 | "\u00B8": "cedil",
126 | "\u02DB": "ogon",
127 | "\u02C6": "circ",
128 | "\u02C7": "caron",
129 | "\u00B0": "deg",
130 | "\u00A9": "copy",
131 | "\u00AE": "reg",
132 | "\u2117": "copysr",
133 | "\u2118": "wp",
134 | "\u211E": "rx",
135 | "\u2127": "mho",
136 | "\u2129": "iiota",
137 | "\u2190": "larr",
138 | "\u219A": "nlarr",
139 | "\u2192": "rarr",
140 | "\u219B": "nrarr",
141 | "\u2191": "uarr",
142 | "\u2193": "darr",
143 | "\u2194": "harr",
144 | "\u21AE": "nharr",
145 | "\u2195": "varr",
146 | "\u2196": "nwarr",
147 | "\u2197": "nearr",
148 | "\u2198": "searr",
149 | "\u2199": "swarr",
150 | "\u219D": "rarrw",
151 | "\u219D\u0338": "nrarrw",
152 | "\u219E": "Larr",
153 | "\u219F": "Uarr",
154 | "\u21A0": "Rarr",
155 | "\u21A1": "Darr",
156 | "\u21A2": "larrtl",
157 | "\u21A3": "rarrtl",
158 | "\u21A4": "mapstoleft",
159 | "\u21A5": "mapstoup",
160 | "\u21A6": "map",
161 | "\u21A7": "mapstodown",
162 | "\u21A9": "larrhk",
163 | "\u21AA": "rarrhk",
164 | "\u21AB": "larrlp",
165 | "\u21AC": "rarrlp",
166 | "\u21AD": "harrw",
167 | "\u21B0": "lsh",
168 | "\u21B1": "rsh",
169 | "\u21B2": "ldsh",
170 | "\u21B3": "rdsh",
171 | "\u21B5": "crarr",
172 | "\u21B6": "cularr",
173 | "\u21B7": "curarr",
174 | "\u21BA": "olarr",
175 | "\u21BB": "orarr",
176 | "\u21BC": "lharu",
177 | "\u21BD": "lhard",
178 | "\u21BE": "uharr",
179 | "\u21BF": "uharl",
180 | "\u21C0": "rharu",
181 | "\u21C1": "rhard",
182 | "\u21C2": "dharr",
183 | "\u21C3": "dharl",
184 | "\u21C4": "rlarr",
185 | "\u21C5": "udarr",
186 | "\u21C6": "lrarr",
187 | "\u21C7": "llarr",
188 | "\u21C8": "uuarr",
189 | "\u21C9": "rrarr",
190 | "\u21CA": "ddarr",
191 | "\u21CB": "lrhar",
192 | "\u21CC": "rlhar",
193 | "\u21D0": "lArr",
194 | "\u21CD": "nlArr",
195 | "\u21D1": "uArr",
196 | "\u21D2": "rArr",
197 | "\u21CF": "nrArr",
198 | "\u21D3": "dArr",
199 | "\u21D4": "iff",
200 | "\u21CE": "nhArr",
201 | "\u21D5": "vArr",
202 | "\u21D6": "nwArr",
203 | "\u21D7": "neArr",
204 | "\u21D8": "seArr",
205 | "\u21D9": "swArr",
206 | "\u21DA": "lAarr",
207 | "\u21DB": "rAarr",
208 | "\u21DD": "zigrarr",
209 | "\u21E4": "larrb",
210 | "\u21E5": "rarrb",
211 | "\u21F5": "duarr",
212 | "\u21FD": "loarr",
213 | "\u21FE": "roarr",
214 | "\u21FF": "hoarr",
215 | "\u2200": "forall",
216 | "\u2201": "comp",
217 | "\u2202": "part",
218 | "\u2202\u0338": "npart",
219 | "\u2203": "exist",
220 | "\u2204": "nexist",
221 | "\u2205": "empty",
222 | "\u2207": "Del",
223 | "\u2208": "in",
224 | "\u2209": "notin",
225 | "\u220B": "ni",
226 | "\u220C": "notni",
227 | "\u03F6": "bepsi",
228 | "\u220F": "prod",
229 | "\u2210": "coprod",
230 | "\u2211": "sum",
231 | "+": "plus",
232 | "\u00B1": "pm",
233 | "\u00F7": "div",
234 | "\u00D7": "times",
235 | "<": "lt",
236 | "\u226E": "nlt",
237 | "<\u20D2": "nvlt",
238 | "=": "equals",
239 | "\u2260": "ne",
240 | "=\u20E5": "bne",
241 | "\u2A75": "Equal",
242 | ">": "gt",
243 | "\u226F": "ngt",
244 | ">\u20D2": "nvgt",
245 | "\u00AC": "not",
246 | "|": "vert",
247 | "\u00A6": "brvbar",
248 | "\u2212": "minus",
249 | "\u2213": "mp",
250 | "\u2214": "plusdo",
251 | "\u2044": "frasl",
252 | "\u2216": "setmn",
253 | "\u2217": "lowast",
254 | "\u2218": "compfn",
255 | "\u221A": "Sqrt",
256 | "\u221D": "prop",
257 | "\u221E": "infin",
258 | "\u221F": "angrt",
259 | "\u2220": "ang",
260 | "\u2220\u20D2": "nang",
261 | "\u2221": "angmsd",
262 | "\u2222": "angsph",
263 | "\u2223": "mid",
264 | "\u2224": "nmid",
265 | "\u2225": "par",
266 | "\u2226": "npar",
267 | "\u2227": "and",
268 | "\u2228": "or",
269 | "\u2229": "cap",
270 | "\u2229\uFE00": "caps",
271 | "\u222A": "cup",
272 | "\u222A\uFE00": "cups",
273 | "\u222B": "int",
274 | "\u222C": "Int",
275 | "\u222D": "tint",
276 | "\u2A0C": "qint",
277 | "\u222E": "oint",
278 | "\u222F": "Conint",
279 | "\u2230": "Cconint",
280 | "\u2231": "cwint",
281 | "\u2232": "cwconint",
282 | "\u2233": "awconint",
283 | "\u2234": "there4",
284 | "\u2235": "becaus",
285 | "\u2236": "ratio",
286 | "\u2237": "Colon",
287 | "\u2238": "minusd",
288 | "\u223A": "mDDot",
289 | "\u223B": "homtht",
290 | "\u223C": "sim",
291 | "\u2241": "nsim",
292 | "\u223C\u20D2": "nvsim",
293 | "\u223D": "bsim",
294 | "\u223D\u0331": "race",
295 | "\u223E": "ac",
296 | "\u223E\u0333": "acE",
297 | "\u223F": "acd",
298 | "\u2240": "wr",
299 | "\u2242": "esim",
300 | "\u2242\u0338": "nesim",
301 | "\u2243": "sime",
302 | "\u2244": "nsime",
303 | "\u2245": "cong",
304 | "\u2247": "ncong",
305 | "\u2246": "simne",
306 | "\u2248": "ap",
307 | "\u2249": "nap",
308 | "\u224A": "ape",
309 | "\u224B": "apid",
310 | "\u224B\u0338": "napid",
311 | "\u224C": "bcong",
312 | "\u224D": "CupCap",
313 | "\u226D": "NotCupCap",
314 | "\u224D\u20D2": "nvap",
315 | "\u224E": "bump",
316 | "\u224E\u0338": "nbump",
317 | "\u224F": "bumpe",
318 | "\u224F\u0338": "nbumpe",
319 | "\u2250": "doteq",
320 | "\u2250\u0338": "nedot",
321 | "\u2251": "eDot",
322 | "\u2252": "efDot",
323 | "\u2253": "erDot",
324 | "\u2254": "colone",
325 | "\u2255": "ecolon",
326 | "\u2256": "ecir",
327 | "\u2257": "cire",
328 | "\u2259": "wedgeq",
329 | "\u225A": "veeeq",
330 | "\u225C": "trie",
331 | "\u225F": "equest",
332 | "\u2261": "equiv",
333 | "\u2262": "nequiv",
334 | "\u2261\u20E5": "bnequiv",
335 | "\u2264": "le",
336 | "\u2270": "nle",
337 | "\u2264\u20D2": "nvle",
338 | "\u2265": "ge",
339 | "\u2271": "nge",
340 | "\u2265\u20D2": "nvge",
341 | "\u2266": "lE",
342 | "\u2266\u0338": "nlE",
343 | "\u2267": "gE",
344 | "\u2267\u0338": "ngE",
345 | "\u2268\uFE00": "lvnE",
346 | "\u2268": "lnE",
347 | "\u2269": "gnE",
348 | "\u2269\uFE00": "gvnE",
349 | "\u226A": "ll",
350 | "\u226A\u0338": "nLtv",
351 | "\u226A\u20D2": "nLt",
352 | "\u226B": "gg",
353 | "\u226B\u0338": "nGtv",
354 | "\u226B\u20D2": "nGt",
355 | "\u226C": "twixt",
356 | "\u2272": "lsim",
357 | "\u2274": "nlsim",
358 | "\u2273": "gsim",
359 | "\u2275": "ngsim",
360 | "\u2276": "lg",
361 | "\u2278": "ntlg",
362 | "\u2277": "gl",
363 | "\u2279": "ntgl",
364 | "\u227A": "pr",
365 | "\u2280": "npr",
366 | "\u227B": "sc",
367 | "\u2281": "nsc",
368 | "\u227C": "prcue",
369 | "\u22E0": "nprcue",
370 | "\u227D": "sccue",
371 | "\u22E1": "nsccue",
372 | "\u227E": "prsim",
373 | "\u227F": "scsim",
374 | "\u227F\u0338": "NotSucceedsTilde",
375 | "\u2282": "sub",
376 | "\u2284": "nsub",
377 | "\u2282\u20D2": "vnsub",
378 | "\u2283": "sup",
379 | "\u2285": "nsup",
380 | "\u2283\u20D2": "vnsup",
381 | "\u2286": "sube",
382 | "\u2288": "nsube",
383 | "\u2287": "supe",
384 | "\u2289": "nsupe",
385 | "\u228A\uFE00": "vsubne",
386 | "\u228A": "subne",
387 | "\u228B\uFE00": "vsupne",
388 | "\u228B": "supne",
389 | "\u228D": "cupdot",
390 | "\u228E": "uplus",
391 | "\u228F": "sqsub",
392 | "\u228F\u0338": "NotSquareSubset",
393 | "\u2290": "sqsup",
394 | "\u2290\u0338": "NotSquareSuperset",
395 | "\u2291": "sqsube",
396 | "\u22E2": "nsqsube",
397 | "\u2292": "sqsupe",
398 | "\u22E3": "nsqsupe",
399 | "\u2293": "sqcap",
400 | "\u2293\uFE00": "sqcaps",
401 | "\u2294": "sqcup",
402 | "\u2294\uFE00": "sqcups",
403 | "\u2295": "oplus",
404 | "\u2296": "ominus",
405 | "\u2297": "otimes",
406 | "\u2298": "osol",
407 | "\u2299": "odot",
408 | "\u229A": "ocir",
409 | "\u229B": "oast",
410 | "\u229D": "odash",
411 | "\u229E": "plusb",
412 | "\u229F": "minusb",
413 | "\u22A0": "timesb",
414 | "\u22A1": "sdotb",
415 | "\u22A2": "vdash",
416 | "\u22AC": "nvdash",
417 | "\u22A3": "dashv",
418 | "\u22A4": "top",
419 | "\u22A5": "bot",
420 | "\u22A7": "models",
421 | "\u22A8": "vDash",
422 | "\u22AD": "nvDash",
423 | "\u22A9": "Vdash",
424 | "\u22AE": "nVdash",
425 | "\u22AA": "Vvdash",
426 | "\u22AB": "VDash",
427 | "\u22AF": "nVDash",
428 | "\u22B0": "prurel",
429 | "\u22B2": "vltri",
430 | "\u22EA": "nltri",
431 | "\u22B3": "vrtri",
432 | "\u22EB": "nrtri",
433 | "\u22B4": "ltrie",
434 | "\u22EC": "nltrie",
435 | "\u22B4\u20D2": "nvltrie",
436 | "\u22B5": "rtrie",
437 | "\u22ED": "nrtrie",
438 | "\u22B5\u20D2": "nvrtrie",
439 | "\u22B6": "origof",
440 | "\u22B7": "imof",
441 | "\u22B8": "mumap",
442 | "\u22B9": "hercon",
443 | "\u22BA": "intcal",
444 | "\u22BB": "veebar",
445 | "\u22BD": "barvee",
446 | "\u22BE": "angrtvb",
447 | "\u22BF": "lrtri",
448 | "\u22C0": "Wedge",
449 | "\u22C1": "Vee",
450 | "\u22C2": "xcap",
451 | "\u22C3": "xcup",
452 | "\u22C4": "diam",
453 | "\u22C5": "sdot",
454 | "\u22C6": "Star",
455 | "\u22C7": "divonx",
456 | "\u22C8": "bowtie",
457 | "\u22C9": "ltimes",
458 | "\u22CA": "rtimes",
459 | "\u22CB": "lthree",
460 | "\u22CC": "rthree",
461 | "\u22CD": "bsime",
462 | "\u22CE": "cuvee",
463 | "\u22CF": "cuwed",
464 | "\u22D0": "Sub",
465 | "\u22D1": "Sup",
466 | "\u22D2": "Cap",
467 | "\u22D3": "Cup",
468 | "\u22D4": "fork",
469 | "\u22D5": "epar",
470 | "\u22D6": "ltdot",
471 | "\u22D7": "gtdot",
472 | "\u22D8": "Ll",
473 | "\u22D8\u0338": "nLl",
474 | "\u22D9": "Gg",
475 | "\u22D9\u0338": "nGg",
476 | "\u22DA\uFE00": "lesg",
477 | "\u22DA": "leg",
478 | "\u22DB": "gel",
479 | "\u22DB\uFE00": "gesl",
480 | "\u22DE": "cuepr",
481 | "\u22DF": "cuesc",
482 | "\u22E6": "lnsim",
483 | "\u22E7": "gnsim",
484 | "\u22E8": "prnsim",
485 | "\u22E9": "scnsim",
486 | "\u22EE": "vellip",
487 | "\u22EF": "ctdot",
488 | "\u22F0": "utdot",
489 | "\u22F1": "dtdot",
490 | "\u22F2": "disin",
491 | "\u22F3": "isinsv",
492 | "\u22F4": "isins",
493 | "\u22F5": "isindot",
494 | "\u22F5\u0338": "notindot",
495 | "\u22F6": "notinvc",
496 | "\u22F7": "notinvb",
497 | "\u22F9": "isinE",
498 | "\u22F9\u0338": "notinE",
499 | "\u22FA": "nisd",
500 | "\u22FB": "xnis",
501 | "\u22FC": "nis",
502 | "\u22FD": "notnivc",
503 | "\u22FE": "notnivb",
504 | "\u2305": "barwed",
505 | "\u2306": "Barwed",
506 | "\u230C": "drcrop",
507 | "\u230D": "dlcrop",
508 | "\u230E": "urcrop",
509 | "\u230F": "ulcrop",
510 | "\u2310": "bnot",
511 | "\u2312": "profline",
512 | "\u2313": "profsurf",
513 | "\u2315": "telrec",
514 | "\u2316": "target",
515 | "\u231C": "ulcorn",
516 | "\u231D": "urcorn",
517 | "\u231E": "dlcorn",
518 | "\u231F": "drcorn",
519 | "\u2322": "frown",
520 | "\u2323": "smile",
521 | "\u232D": "cylcty",
522 | "\u232E": "profalar",
523 | "\u2336": "topbot",
524 | "\u233D": "ovbar",
525 | "\u233F": "solbar",
526 | "\u237C": "angzarr",
527 | "\u23B0": "lmoust",
528 | "\u23B1": "rmoust",
529 | "\u23B4": "tbrk",
530 | "\u23B5": "bbrk",
531 | "\u23B6": "bbrktbrk",
532 | "\u23DC": "OverParenthesis",
533 | "\u23DD": "UnderParenthesis",
534 | "\u23DE": "OverBrace",
535 | "\u23DF": "UnderBrace",
536 | "\u23E2": "trpezium",
537 | "\u23E7": "elinters",
538 | "\u2423": "blank",
539 | "\u2500": "boxh",
540 | "\u2502": "boxv",
541 | "\u250C": "boxdr",
542 | "\u2510": "boxdl",
543 | "\u2514": "boxur",
544 | "\u2518": "boxul",
545 | "\u251C": "boxvr",
546 | "\u2524": "boxvl",
547 | "\u252C": "boxhd",
548 | "\u2534": "boxhu",
549 | "\u253C": "boxvh",
550 | "\u2550": "boxH",
551 | "\u2551": "boxV",
552 | "\u2552": "boxdR",
553 | "\u2553": "boxDr",
554 | "\u2554": "boxDR",
555 | "\u2555": "boxdL",
556 | "\u2556": "boxDl",
557 | "\u2557": "boxDL",
558 | "\u2558": "boxuR",
559 | "\u2559": "boxUr",
560 | "\u255A": "boxUR",
561 | "\u255B": "boxuL",
562 | "\u255C": "boxUl",
563 | "\u255D": "boxUL",
564 | "\u255E": "boxvR",
565 | "\u255F": "boxVr",
566 | "\u2560": "boxVR",
567 | "\u2561": "boxvL",
568 | "\u2562": "boxVl",
569 | "\u2563": "boxVL",
570 | "\u2564": "boxHd",
571 | "\u2565": "boxhD",
572 | "\u2566": "boxHD",
573 | "\u2567": "boxHu",
574 | "\u2568": "boxhU",
575 | "\u2569": "boxHU",
576 | "\u256A": "boxvH",
577 | "\u256B": "boxVh",
578 | "\u256C": "boxVH",
579 | "\u2580": "uhblk",
580 | "\u2584": "lhblk",
581 | "\u2588": "block",
582 | "\u2591": "blk14",
583 | "\u2592": "blk12",
584 | "\u2593": "blk34",
585 | "\u25A1": "squ",
586 | "\u25AA": "squf",
587 | "\u25AB": "EmptyVerySmallSquare",
588 | "\u25AD": "rect",
589 | "\u25AE": "marker",
590 | "\u25B1": "fltns",
591 | "\u25B3": "xutri",
592 | "\u25B4": "utrif",
593 | "\u25B5": "utri",
594 | "\u25B8": "rtrif",
595 | "\u25B9": "rtri",
596 | "\u25BD": "xdtri",
597 | "\u25BE": "dtrif",
598 | "\u25BF": "dtri",
599 | "\u25C2": "ltrif",
600 | "\u25C3": "ltri",
601 | "\u25CA": "loz",
602 | "\u25CB": "cir",
603 | "\u25EC": "tridot",
604 | "\u25EF": "xcirc",
605 | "\u25F8": "ultri",
606 | "\u25F9": "urtri",
607 | "\u25FA": "lltri",
608 | "\u25FB": "EmptySmallSquare",
609 | "\u25FC": "FilledSmallSquare",
610 | "\u2605": "starf",
611 | "\u2606": "star",
612 | "\u260E": "phone",
613 | "\u2640": "female",
614 | "\u2642": "male",
615 | "\u2660": "spades",
616 | "\u2663": "clubs",
617 | "\u2665": "hearts",
618 | "\u2666": "diams",
619 | "\u266A": "sung",
620 | "\u2713": "check",
621 | "\u2717": "cross",
622 | "\u2720": "malt",
623 | "\u2736": "sext",
624 | "\u2758": "VerticalSeparator",
625 | "\u27C8": "bsolhsub",
626 | "\u27C9": "suphsol",
627 | "\u27F5": "xlarr",
628 | "\u27F6": "xrarr",
629 | "\u27F7": "xharr",
630 | "\u27F8": "xlArr",
631 | "\u27F9": "xrArr",
632 | "\u27FA": "xhArr",
633 | "\u27FC": "xmap",
634 | "\u27FF": "dzigrarr",
635 | "\u2902": "nvlArr",
636 | "\u2903": "nvrArr",
637 | "\u2904": "nvHarr",
638 | "\u2905": "Map",
639 | "\u290C": "lbarr",
640 | "\u290D": "rbarr",
641 | "\u290E": "lBarr",
642 | "\u290F": "rBarr",
643 | "\u2910": "RBarr",
644 | "\u2911": "DDotrahd",
645 | "\u2912": "UpArrowBar",
646 | "\u2913": "DownArrowBar",
647 | "\u2916": "Rarrtl",
648 | "\u2919": "latail",
649 | "\u291A": "ratail",
650 | "\u291B": "lAtail",
651 | "\u291C": "rAtail",
652 | "\u291D": "larrfs",
653 | "\u291E": "rarrfs",
654 | "\u291F": "larrbfs",
655 | "\u2920": "rarrbfs",
656 | "\u2923": "nwarhk",
657 | "\u2924": "nearhk",
658 | "\u2925": "searhk",
659 | "\u2926": "swarhk",
660 | "\u2927": "nwnear",
661 | "\u2928": "toea",
662 | "\u2929": "tosa",
663 | "\u292A": "swnwar",
664 | "\u2933": "rarrc",
665 | "\u2933\u0338": "nrarrc",
666 | "\u2935": "cudarrr",
667 | "\u2936": "ldca",
668 | "\u2937": "rdca",
669 | "\u2938": "cudarrl",
670 | "\u2939": "larrpl",
671 | "\u293C": "curarrm",
672 | "\u293D": "cularrp",
673 | "\u2945": "rarrpl",
674 | "\u2948": "harrcir",
675 | "\u2949": "Uarrocir",
676 | "\u294A": "lurdshar",
677 | "\u294B": "ldrushar",
678 | "\u294E": "LeftRightVector",
679 | "\u294F": "RightUpDownVector",
680 | "\u2950": "DownLeftRightVector",
681 | "\u2951": "LeftUpDownVector",
682 | "\u2952": "LeftVectorBar",
683 | "\u2953": "RightVectorBar",
684 | "\u2954": "RightUpVectorBar",
685 | "\u2955": "RightDownVectorBar",
686 | "\u2956": "DownLeftVectorBar",
687 | "\u2957": "DownRightVectorBar",
688 | "\u2958": "LeftUpVectorBar",
689 | "\u2959": "LeftDownVectorBar",
690 | "\u295A": "LeftTeeVector",
691 | "\u295B": "RightTeeVector",
692 | "\u295C": "RightUpTeeVector",
693 | "\u295D": "RightDownTeeVector",
694 | "\u295E": "DownLeftTeeVector",
695 | "\u295F": "DownRightTeeVector",
696 | "\u2960": "LeftUpTeeVector",
697 | "\u2961": "LeftDownTeeVector",
698 | "\u2962": "lHar",
699 | "\u2963": "uHar",
700 | "\u2964": "rHar",
701 | "\u2965": "dHar",
702 | "\u2966": "luruhar",
703 | "\u2967": "ldrdhar",
704 | "\u2968": "ruluhar",
705 | "\u2969": "rdldhar",
706 | "\u296A": "lharul",
707 | "\u296B": "llhard",
708 | "\u296C": "rharul",
709 | "\u296D": "lrhard",
710 | "\u296E": "udhar",
711 | "\u296F": "duhar",
712 | "\u2970": "RoundImplies",
713 | "\u2971": "erarr",
714 | "\u2972": "simrarr",
715 | "\u2973": "larrsim",
716 | "\u2974": "rarrsim",
717 | "\u2975": "rarrap",
718 | "\u2976": "ltlarr",
719 | "\u2978": "gtrarr",
720 | "\u2979": "subrarr",
721 | "\u297B": "suplarr",
722 | "\u297C": "lfisht",
723 | "\u297D": "rfisht",
724 | "\u297E": "ufisht",
725 | "\u297F": "dfisht",
726 | "\u299A": "vzigzag",
727 | "\u299C": "vangrt",
728 | "\u299D": "angrtvbd",
729 | "\u29A4": "ange",
730 | "\u29A5": "range",
731 | "\u29A6": "dwangle",
732 | "\u29A7": "uwangle",
733 | "\u29A8": "angmsdaa",
734 | "\u29A9": "angmsdab",
735 | "\u29AA": "angmsdac",
736 | "\u29AB": "angmsdad",
737 | "\u29AC": "angmsdae",
738 | "\u29AD": "angmsdaf",
739 | "\u29AE": "angmsdag",
740 | "\u29AF": "angmsdah",
741 | "\u29B0": "bemptyv",
742 | "\u29B1": "demptyv",
743 | "\u29B2": "cemptyv",
744 | "\u29B3": "raemptyv",
745 | "\u29B4": "laemptyv",
746 | "\u29B5": "ohbar",
747 | "\u29B6": "omid",
748 | "\u29B7": "opar",
749 | "\u29B9": "operp",
750 | "\u29BB": "olcross",
751 | "\u29BC": "odsold",
752 | "\u29BE": "olcir",
753 | "\u29BF": "ofcir",
754 | "\u29C0": "olt",
755 | "\u29C1": "ogt",
756 | "\u29C2": "cirscir",
757 | "\u29C3": "cirE",
758 | "\u29C4": "solb",
759 | "\u29C5": "bsolb",
760 | "\u29C9": "boxbox",
761 | "\u29CD": "trisb",
762 | "\u29CE": "rtriltri",
763 | "\u29CF": "LeftTriangleBar",
764 | "\u29CF\u0338": "NotLeftTriangleBar",
765 | "\u29D0": "RightTriangleBar",
766 | "\u29D0\u0338": "NotRightTriangleBar",
767 | "\u29DC": "iinfin",
768 | "\u29DD": "infintie",
769 | "\u29DE": "nvinfin",
770 | "\u29E3": "eparsl",
771 | "\u29E4": "smeparsl",
772 | "\u29E5": "eqvparsl",
773 | "\u29EB": "lozf",
774 | "\u29F4": "RuleDelayed",
775 | "\u29F6": "dsol",
776 | "\u2A00": "xodot",
777 | "\u2A01": "xoplus",
778 | "\u2A02": "xotime",
779 | "\u2A04": "xuplus",
780 | "\u2A06": "xsqcup",
781 | "\u2A0D": "fpartint",
782 | "\u2A10": "cirfnint",
783 | "\u2A11": "awint",
784 | "\u2A12": "rppolint",
785 | "\u2A13": "scpolint",
786 | "\u2A14": "npolint",
787 | "\u2A15": "pointint",
788 | "\u2A16": "quatint",
789 | "\u2A17": "intlarhk",
790 | "\u2A22": "pluscir",
791 | "\u2A23": "plusacir",
792 | "\u2A24": "simplus",
793 | "\u2A25": "plusdu",
794 | "\u2A26": "plussim",
795 | "\u2A27": "plustwo",
796 | "\u2A29": "mcomma",
797 | "\u2A2A": "minusdu",
798 | "\u2A2D": "loplus",
799 | "\u2A2E": "roplus",
800 | "\u2A2F": "Cross",
801 | "\u2A30": "timesd",
802 | "\u2A31": "timesbar",
803 | "\u2A33": "smashp",
804 | "\u2A34": "lotimes",
805 | "\u2A35": "rotimes",
806 | "\u2A36": "otimesas",
807 | "\u2A37": "Otimes",
808 | "\u2A38": "odiv",
809 | "\u2A39": "triplus",
810 | "\u2A3A": "triminus",
811 | "\u2A3B": "tritime",
812 | "\u2A3C": "iprod",
813 | "\u2A3F": "amalg",
814 | "\u2A40": "capdot",
815 | "\u2A42": "ncup",
816 | "\u2A43": "ncap",
817 | "\u2A44": "capand",
818 | "\u2A45": "cupor",
819 | "\u2A46": "cupcap",
820 | "\u2A47": "capcup",
821 | "\u2A48": "cupbrcap",
822 | "\u2A49": "capbrcup",
823 | "\u2A4A": "cupcup",
824 | "\u2A4B": "capcap",
825 | "\u2A4C": "ccups",
826 | "\u2A4D": "ccaps",
827 | "\u2A50": "ccupssm",
828 | "\u2A53": "And",
829 | "\u2A54": "Or",
830 | "\u2A55": "andand",
831 | "\u2A56": "oror",
832 | "\u2A57": "orslope",
833 | "\u2A58": "andslope",
834 | "\u2A5A": "andv",
835 | "\u2A5B": "orv",
836 | "\u2A5C": "andd",
837 | "\u2A5D": "ord",
838 | "\u2A5F": "wedbar",
839 | "\u2A66": "sdote",
840 | "\u2A6A": "simdot",
841 | "\u2A6D": "congdot",
842 | "\u2A6D\u0338": "ncongdot",
843 | "\u2A6E": "easter",
844 | "\u2A6F": "apacir",
845 | "\u2A70": "apE",
846 | "\u2A70\u0338": "napE",
847 | "\u2A71": "eplus",
848 | "\u2A72": "pluse",
849 | "\u2A73": "Esim",
850 | "\u2A77": "eDDot",
851 | "\u2A78": "equivDD",
852 | "\u2A79": "ltcir",
853 | "\u2A7A": "gtcir",
854 | "\u2A7B": "ltquest",
855 | "\u2A7C": "gtquest",
856 | "\u2A7D": "les",
857 | "\u2A7D\u0338": "nles",
858 | "\u2A7E": "ges",
859 | "\u2A7E\u0338": "nges",
860 | "\u2A7F": "lesdot",
861 | "\u2A80": "gesdot",
862 | "\u2A81": "lesdoto",
863 | "\u2A82": "gesdoto",
864 | "\u2A83": "lesdotor",
865 | "\u2A84": "gesdotol",
866 | "\u2A85": "lap",
867 | "\u2A86": "gap",
868 | "\u2A87": "lne",
869 | "\u2A88": "gne",
870 | "\u2A89": "lnap",
871 | "\u2A8A": "gnap",
872 | "\u2A8B": "lEg",
873 | "\u2A8C": "gEl",
874 | "\u2A8D": "lsime",
875 | "\u2A8E": "gsime",
876 | "\u2A8F": "lsimg",
877 | "\u2A90": "gsiml",
878 | "\u2A91": "lgE",
879 | "\u2A92": "glE",
880 | "\u2A93": "lesges",
881 | "\u2A94": "gesles",
882 | "\u2A95": "els",
883 | "\u2A96": "egs",
884 | "\u2A97": "elsdot",
885 | "\u2A98": "egsdot",
886 | "\u2A99": "el",
887 | "\u2A9A": "eg",
888 | "\u2A9D": "siml",
889 | "\u2A9E": "simg",
890 | "\u2A9F": "simlE",
891 | "\u2AA0": "simgE",
892 | "\u2AA1": "LessLess",
893 | "\u2AA1\u0338": "NotNestedLessLess",
894 | "\u2AA2": "GreaterGreater",
895 | "\u2AA2\u0338": "NotNestedGreaterGreater",
896 | "\u2AA4": "glj",
897 | "\u2AA5": "gla",
898 | "\u2AA6": "ltcc",
899 | "\u2AA7": "gtcc",
900 | "\u2AA8": "lescc",
901 | "\u2AA9": "gescc",
902 | "\u2AAA": "smt",
903 | "\u2AAB": "lat",
904 | "\u2AAC": "smte",
905 | "\u2AAC\uFE00": "smtes",
906 | "\u2AAD": "late",
907 | "\u2AAD\uFE00": "lates",
908 | "\u2AAE": "bumpE",
909 | "\u2AAF": "pre",
910 | "\u2AAF\u0338": "npre",
911 | "\u2AB0": "sce",
912 | "\u2AB0\u0338": "nsce",
913 | "\u2AB3": "prE",
914 | "\u2AB4": "scE",
915 | "\u2AB5": "prnE",
916 | "\u2AB6": "scnE",
917 | "\u2AB7": "prap",
918 | "\u2AB8": "scap",
919 | "\u2AB9": "prnap",
920 | "\u2ABA": "scnap",
921 | "\u2ABB": "Pr",
922 | "\u2ABC": "Sc",
923 | "\u2ABD": "subdot",
924 | "\u2ABE": "supdot",
925 | "\u2ABF": "subplus",
926 | "\u2AC0": "supplus",
927 | "\u2AC1": "submult",
928 | "\u2AC2": "supmult",
929 | "\u2AC3": "subedot",
930 | "\u2AC4": "supedot",
931 | "\u2AC5": "subE",
932 | "\u2AC5\u0338": "nsubE",
933 | "\u2AC6": "supE",
934 | "\u2AC6\u0338": "nsupE",
935 | "\u2AC7": "subsim",
936 | "\u2AC8": "supsim",
937 | "\u2ACB\uFE00": "vsubnE",
938 | "\u2ACB": "subnE",
939 | "\u2ACC\uFE00": "vsupnE",
940 | "\u2ACC": "supnE",
941 | "\u2ACF": "csub",
942 | "\u2AD0": "csup",
943 | "\u2AD1": "csube",
944 | "\u2AD2": "csupe",
945 | "\u2AD3": "subsup",
946 | "\u2AD4": "supsub",
947 | "\u2AD5": "subsub",
948 | "\u2AD6": "supsup",
949 | "\u2AD7": "suphsub",
950 | "\u2AD8": "supdsub",
951 | "\u2AD9": "forkv",
952 | "\u2ADA": "topfork",
953 | "\u2ADB": "mlcp",
954 | "\u2AE4": "Dashv",
955 | "\u2AE6": "Vdashl",
956 | "\u2AE7": "Barv",
957 | "\u2AE8": "vBar",
958 | "\u2AE9": "vBarv",
959 | "\u2AEB": "Vbar",
960 | "\u2AEC": "Not",
961 | "\u2AED": "bNot",
962 | "\u2AEE": "rnmid",
963 | "\u2AEF": "cirmid",
964 | "\u2AF0": "midcir",
965 | "\u2AF1": "topcir",
966 | "\u2AF2": "nhpar",
967 | "\u2AF3": "parsim",
968 | "\u2AFD": "parsl",
969 | "\u2AFD\u20E5": "nparsl",
970 | "\u266D": "flat",
971 | "\u266E": "natur",
972 | "\u266F": "sharp",
973 | "\u00A4": "curren",
974 | "\u00A2": "cent",
975 | "$": "dollar",
976 | "\u00A3": "pound",
977 | "\u00A5": "yen",
978 | "\u20AC": "euro",
979 | "\u00B9": "sup1",
980 | "\u00BD": "half",
981 | "\u2153": "frac13",
982 | "\u00BC": "frac14",
983 | "\u2155": "frac15",
984 | "\u2159": "frac16",
985 | "\u215B": "frac18",
986 | "\u00B2": "sup2",
987 | "\u2154": "frac23",
988 | "\u2156": "frac25",
989 | "\u00B3": "sup3",
990 | "\u00BE": "frac34",
991 | "\u2157": "frac35",
992 | "\u215C": "frac38",
993 | "\u2158": "frac45",
994 | "\u215A": "frac56",
995 | "\u215D": "frac58",
996 | "\u215E": "frac78",
997 | "\uD835\uDCB6": "ascr",
998 | "\uD835\uDD52": "aopf",
999 | "\uD835\uDD1E": "afr",
1000 | "\uD835\uDD38": "Aopf",
1001 | "\uD835\uDD04": "Afr",
1002 | "\uD835\uDC9C": "Ascr",
1003 | "\u00AA": "ordf",
1004 | "\u00E1": "aacute",
1005 | "\u00C1": "Aacute",
1006 | "\u00E0": "agrave",
1007 | "\u00C0": "Agrave",
1008 | "\u0103": "abreve",
1009 | "\u0102": "Abreve",
1010 | "\u00E2": "acirc",
1011 | "\u00C2": "Acirc",
1012 | "\u00E5": "aring",
1013 | "\u00C5": "angst",
1014 | "\u00E4": "auml",
1015 | "\u00C4": "Auml",
1016 | "\u00E3": "atilde",
1017 | "\u00C3": "Atilde",
1018 | "\u0105": "aogon",
1019 | "\u0104": "Aogon",
1020 | "\u0101": "amacr",
1021 | "\u0100": "Amacr",
1022 | "\u00E6": "aelig",
1023 | "\u00C6": "AElig",
1024 | "\uD835\uDCB7": "bscr",
1025 | "\uD835\uDD53": "bopf",
1026 | "\uD835\uDD1F": "bfr",
1027 | "\uD835\uDD39": "Bopf",
1028 | "\u212C": "Bscr",
1029 | "\uD835\uDD05": "Bfr",
1030 | "\uD835\uDD20": "cfr",
1031 | "\uD835\uDCB8": "cscr",
1032 | "\uD835\uDD54": "copf",
1033 | "\u212D": "Cfr",
1034 | "\uD835\uDC9E": "Cscr",
1035 | "\u2102": "Copf",
1036 | "\u0107": "cacute",
1037 | "\u0106": "Cacute",
1038 | "\u0109": "ccirc",
1039 | "\u0108": "Ccirc",
1040 | "\u010D": "ccaron",
1041 | "\u010C": "Ccaron",
1042 | "\u010B": "cdot",
1043 | "\u010A": "Cdot",
1044 | "\u00E7": "ccedil",
1045 | "\u00C7": "Ccedil",
1046 | "\u2105": "incare",
1047 | "\uD835\uDD21": "dfr",
1048 | "\u2146": "dd",
1049 | "\uD835\uDD55": "dopf",
1050 | "\uD835\uDCB9": "dscr",
1051 | "\uD835\uDC9F": "Dscr",
1052 | "\uD835\uDD07": "Dfr",
1053 | "\u2145": "DD",
1054 | "\uD835\uDD3B": "Dopf",
1055 | "\u010F": "dcaron",
1056 | "\u010E": "Dcaron",
1057 | "\u0111": "dstrok",
1058 | "\u0110": "Dstrok",
1059 | "\u00F0": "eth",
1060 | "\u00D0": "ETH",
1061 | "\u2147": "ee",
1062 | "\u212F": "escr",
1063 | "\uD835\uDD22": "efr",
1064 | "\uD835\uDD56": "eopf",
1065 | "\u2130": "Escr",
1066 | "\uD835\uDD08": "Efr",
1067 | "\uD835\uDD3C": "Eopf",
1068 | "\u00E9": "eacute",
1069 | "\u00C9": "Eacute",
1070 | "\u00E8": "egrave",
1071 | "\u00C8": "Egrave",
1072 | "\u00EA": "ecirc",
1073 | "\u00CA": "Ecirc",
1074 | "\u011B": "ecaron",
1075 | "\u011A": "Ecaron",
1076 | "\u00EB": "euml",
1077 | "\u00CB": "Euml",
1078 | "\u0117": "edot",
1079 | "\u0116": "Edot",
1080 | "\u0119": "eogon",
1081 | "\u0118": "Eogon",
1082 | "\u0113": "emacr",
1083 | "\u0112": "Emacr",
1084 | "\uD835\uDD23": "ffr",
1085 | "\uD835\uDD57": "fopf",
1086 | "\uD835\uDCBB": "fscr",
1087 | "\uD835\uDD09": "Ffr",
1088 | "\uD835\uDD3D": "Fopf",
1089 | "\u2131": "Fscr",
1090 | "\uFB00": "fflig",
1091 | "\uFB03": "ffilig",
1092 | "\uFB04": "ffllig",
1093 | "\uFB01": "filig",
1094 | "fj": "fjlig",
1095 | "\uFB02": "fllig",
1096 | "\u0192": "fnof",
1097 | "\u210A": "gscr",
1098 | "\uD835\uDD58": "gopf",
1099 | "\uD835\uDD24": "gfr",
1100 | "\uD835\uDCA2": "Gscr",
1101 | "\uD835\uDD3E": "Gopf",
1102 | "\uD835\uDD0A": "Gfr",
1103 | "\u01F5": "gacute",
1104 | "\u011F": "gbreve",
1105 | "\u011E": "Gbreve",
1106 | "\u011D": "gcirc",
1107 | "\u011C": "Gcirc",
1108 | "\u0121": "gdot",
1109 | "\u0120": "Gdot",
1110 | "\u0122": "Gcedil",
1111 | "\uD835\uDD25": "hfr",
1112 | "\u210E": "planckh",
1113 | "\uD835\uDCBD": "hscr",
1114 | "\uD835\uDD59": "hopf",
1115 | "\u210B": "Hscr",
1116 | "\u210C": "Hfr",
1117 | "\u210D": "Hopf",
1118 | "\u0125": "hcirc",
1119 | "\u0124": "Hcirc",
1120 | "\u210F": "hbar",
1121 | "\u0127": "hstrok",
1122 | "\u0126": "Hstrok",
1123 | "\uD835\uDD5A": "iopf",
1124 | "\uD835\uDD26": "ifr",
1125 | "\uD835\uDCBE": "iscr",
1126 | "\u2148": "ii",
1127 | "\uD835\uDD40": "Iopf",
1128 | "\u2110": "Iscr",
1129 | "\u2111": "Im",
1130 | "\u00ED": "iacute",
1131 | "\u00CD": "Iacute",
1132 | "\u00EC": "igrave",
1133 | "\u00CC": "Igrave",
1134 | "\u00EE": "icirc",
1135 | "\u00CE": "Icirc",
1136 | "\u00EF": "iuml",
1137 | "\u00CF": "Iuml",
1138 | "\u0129": "itilde",
1139 | "\u0128": "Itilde",
1140 | "\u0130": "Idot",
1141 | "\u012F": "iogon",
1142 | "\u012E": "Iogon",
1143 | "\u012B": "imacr",
1144 | "\u012A": "Imacr",
1145 | "\u0133": "ijlig",
1146 | "\u0132": "IJlig",
1147 | "\u0131": "imath",
1148 | "\uD835\uDCBF": "jscr",
1149 | "\uD835\uDD5B": "jopf",
1150 | "\uD835\uDD27": "jfr",
1151 | "\uD835\uDCA5": "Jscr",
1152 | "\uD835\uDD0D": "Jfr",
1153 | "\uD835\uDD41": "Jopf",
1154 | "\u0135": "jcirc",
1155 | "\u0134": "Jcirc",
1156 | "\u0237": "jmath",
1157 | "\uD835\uDD5C": "kopf",
1158 | "\uD835\uDCC0": "kscr",
1159 | "\uD835\uDD28": "kfr",
1160 | "\uD835\uDCA6": "Kscr",
1161 | "\uD835\uDD42": "Kopf",
1162 | "\uD835\uDD0E": "Kfr",
1163 | "\u0137": "kcedil",
1164 | "\u0136": "Kcedil",
1165 | "\uD835\uDD29": "lfr",
1166 | "\uD835\uDCC1": "lscr",
1167 | "\u2113": "ell",
1168 | "\uD835\uDD5D": "lopf",
1169 | "\u2112": "Lscr",
1170 | "\uD835\uDD0F": "Lfr",
1171 | "\uD835\uDD43": "Lopf",
1172 | "\u013A": "lacute",
1173 | "\u0139": "Lacute",
1174 | "\u013E": "lcaron",
1175 | "\u013D": "Lcaron",
1176 | "\u013C": "lcedil",
1177 | "\u013B": "Lcedil",
1178 | "\u0142": "lstrok",
1179 | "\u0141": "Lstrok",
1180 | "\u0140": "lmidot",
1181 | "\u013F": "Lmidot",
1182 | "\uD835\uDD2A": "mfr",
1183 | "\uD835\uDD5E": "mopf",
1184 | "\uD835\uDCC2": "mscr",
1185 | "\uD835\uDD10": "Mfr",
1186 | "\uD835\uDD44": "Mopf",
1187 | "\u2133": "Mscr",
1188 | "\uD835\uDD2B": "nfr",
1189 | "\uD835\uDD5F": "nopf",
1190 | "\uD835\uDCC3": "nscr",
1191 | "\u2115": "Nopf",
1192 | "\uD835\uDCA9": "Nscr",
1193 | "\uD835\uDD11": "Nfr",
1194 | "\u0144": "nacute",
1195 | "\u0143": "Nacute",
1196 | "\u0148": "ncaron",
1197 | "\u0147": "Ncaron",
1198 | "\u00F1": "ntilde",
1199 | "\u00D1": "Ntilde",
1200 | "\u0146": "ncedil",
1201 | "\u0145": "Ncedil",
1202 | "\u2116": "numero",
1203 | "\u014B": "eng",
1204 | "\u014A": "ENG",
1205 | "\uD835\uDD60": "oopf",
1206 | "\uD835\uDD2C": "ofr",
1207 | "\u2134": "oscr",
1208 | "\uD835\uDCAA": "Oscr",
1209 | "\uD835\uDD12": "Ofr",
1210 | "\uD835\uDD46": "Oopf",
1211 | "\u00BA": "ordm",
1212 | "\u00F3": "oacute",
1213 | "\u00D3": "Oacute",
1214 | "\u00F2": "ograve",
1215 | "\u00D2": "Ograve",
1216 | "\u00F4": "ocirc",
1217 | "\u00D4": "Ocirc",
1218 | "\u00F6": "ouml",
1219 | "\u00D6": "Ouml",
1220 | "\u0151": "odblac",
1221 | "\u0150": "Odblac",
1222 | "\u00F5": "otilde",
1223 | "\u00D5": "Otilde",
1224 | "\u00F8": "oslash",
1225 | "\u00D8": "Oslash",
1226 | "\u014D": "omacr",
1227 | "\u014C": "Omacr",
1228 | "\u0153": "oelig",
1229 | "\u0152": "OElig",
1230 | "\uD835\uDD2D": "pfr",
1231 | "\uD835\uDCC5": "pscr",
1232 | "\uD835\uDD61": "popf",
1233 | "\u2119": "Popf",
1234 | "\uD835\uDD13": "Pfr",
1235 | "\uD835\uDCAB": "Pscr",
1236 | "\uD835\uDD62": "qopf",
1237 | "\uD835\uDD2E": "qfr",
1238 | "\uD835\uDCC6": "qscr",
1239 | "\uD835\uDCAC": "Qscr",
1240 | "\uD835\uDD14": "Qfr",
1241 | "\u211A": "Qopf",
1242 | "\u0138": "kgreen",
1243 | "\uD835\uDD2F": "rfr",
1244 | "\uD835\uDD63": "ropf",
1245 | "\uD835\uDCC7": "rscr",
1246 | "\u211B": "Rscr",
1247 | "\u211C": "Re",
1248 | "\u211D": "Ropf",
1249 | "\u0155": "racute",
1250 | "\u0154": "Racute",
1251 | "\u0159": "rcaron",
1252 | "\u0158": "Rcaron",
1253 | "\u0157": "rcedil",
1254 | "\u0156": "Rcedil",
1255 | "\uD835\uDD64": "sopf",
1256 | "\uD835\uDCC8": "sscr",
1257 | "\uD835\uDD30": "sfr",
1258 | "\uD835\uDD4A": "Sopf",
1259 | "\uD835\uDD16": "Sfr",
1260 | "\uD835\uDCAE": "Sscr",
1261 | "\u24C8": "oS",
1262 | "\u015B": "sacute",
1263 | "\u015A": "Sacute",
1264 | "\u015D": "scirc",
1265 | "\u015C": "Scirc",
1266 | "\u0161": "scaron",
1267 | "\u0160": "Scaron",
1268 | "\u015F": "scedil",
1269 | "\u015E": "Scedil",
1270 | "\u00DF": "szlig",
1271 | "\uD835\uDD31": "tfr",
1272 | "\uD835\uDCC9": "tscr",
1273 | "\uD835\uDD65": "topf",
1274 | "\uD835\uDCAF": "Tscr",
1275 | "\uD835\uDD17": "Tfr",
1276 | "\uD835\uDD4B": "Topf",
1277 | "\u0165": "tcaron",
1278 | "\u0164": "Tcaron",
1279 | "\u0163": "tcedil",
1280 | "\u0162": "Tcedil",
1281 | "\u2122": "trade",
1282 | "\u0167": "tstrok",
1283 | "\u0166": "Tstrok",
1284 | "\uD835\uDCCA": "uscr",
1285 | "\uD835\uDD66": "uopf",
1286 | "\uD835\uDD32": "ufr",
1287 | "\uD835\uDD4C": "Uopf",
1288 | "\uD835\uDD18": "Ufr",
1289 | "\uD835\uDCB0": "Uscr",
1290 | "\u00FA": "uacute",
1291 | "\u00DA": "Uacute",
1292 | "\u00F9": "ugrave",
1293 | "\u00D9": "Ugrave",
1294 | "\u016D": "ubreve",
1295 | "\u016C": "Ubreve",
1296 | "\u00FB": "ucirc",
1297 | "\u00DB": "Ucirc",
1298 | "\u016F": "uring",
1299 | "\u016E": "Uring",
1300 | "\u00FC": "uuml",
1301 | "\u00DC": "Uuml",
1302 | "\u0171": "udblac",
1303 | "\u0170": "Udblac",
1304 | "\u0169": "utilde",
1305 | "\u0168": "Utilde",
1306 | "\u0173": "uogon",
1307 | "\u0172": "Uogon",
1308 | "\u016B": "umacr",
1309 | "\u016A": "Umacr",
1310 | "\uD835\uDD33": "vfr",
1311 | "\uD835\uDD67": "vopf",
1312 | "\uD835\uDCCB": "vscr",
1313 | "\uD835\uDD19": "Vfr",
1314 | "\uD835\uDD4D": "Vopf",
1315 | "\uD835\uDCB1": "Vscr",
1316 | "\uD835\uDD68": "wopf",
1317 | "\uD835\uDCCC": "wscr",
1318 | "\uD835\uDD34": "wfr",
1319 | "\uD835\uDCB2": "Wscr",
1320 | "\uD835\uDD4E": "Wopf",
1321 | "\uD835\uDD1A": "Wfr",
1322 | "\u0175": "wcirc",
1323 | "\u0174": "Wcirc",
1324 | "\uD835\uDD35": "xfr",
1325 | "\uD835\uDCCD": "xscr",
1326 | "\uD835\uDD69": "xopf",
1327 | "\uD835\uDD4F": "Xopf",
1328 | "\uD835\uDD1B": "Xfr",
1329 | "\uD835\uDCB3": "Xscr",
1330 | "\uD835\uDD36": "yfr",
1331 | "\uD835\uDCCE": "yscr",
1332 | "\uD835\uDD6A": "yopf",
1333 | "\uD835\uDCB4": "Yscr",
1334 | "\uD835\uDD1C": "Yfr",
1335 | "\uD835\uDD50": "Yopf",
1336 | "\u00FD": "yacute",
1337 | "\u00DD": "Yacute",
1338 | "\u0177": "ycirc",
1339 | "\u0176": "Ycirc",
1340 | "\u00FF": "yuml",
1341 | "\u0178": "Yuml",
1342 | "\uD835\uDCCF": "zscr",
1343 | "\uD835\uDD37": "zfr",
1344 | "\uD835\uDD6B": "zopf",
1345 | "\u2128": "Zfr",
1346 | "\u2124": "Zopf",
1347 | "\uD835\uDCB5": "Zscr",
1348 | "\u017A": "zacute",
1349 | "\u0179": "Zacute",
1350 | "\u017E": "zcaron",
1351 | "\u017D": "Zcaron",
1352 | "\u017C": "zdot",
1353 | "\u017B": "Zdot",
1354 | "\u01B5": "imped",
1355 | "\u00FE": "thorn",
1356 | "\u00DE": "THORN",
1357 | "\u0149": "napos",
1358 | "\u03B1": "alpha",
1359 | "\u0391": "Alpha",
1360 | "\u03B2": "beta",
1361 | "\u0392": "Beta",
1362 | "\u03B3": "gamma",
1363 | "\u0393": "Gamma",
1364 | "\u03B4": "delta",
1365 | "\u0394": "Delta",
1366 | "\u03B5": "epsi",
1367 | "\u03F5": "epsiv",
1368 | "\u0395": "Epsilon",
1369 | "\u03DD": "gammad",
1370 | "\u03DC": "Gammad",
1371 | "\u03B6": "zeta",
1372 | "\u0396": "Zeta",
1373 | "\u03B7": "eta",
1374 | "\u0397": "Eta",
1375 | "\u03B8": "theta",
1376 | "\u03D1": "thetav",
1377 | "\u0398": "Theta",
1378 | "\u03B9": "iota",
1379 | "\u0399": "Iota",
1380 | "\u03BA": "kappa",
1381 | "\u03F0": "kappav",
1382 | "\u039A": "Kappa",
1383 | "\u03BB": "lambda",
1384 | "\u039B": "Lambda",
1385 | "\u03BC": "mu",
1386 | "\u00B5": "micro",
1387 | "\u039C": "Mu",
1388 | "\u03BD": "nu",
1389 | "\u039D": "Nu",
1390 | "\u03BE": "xi",
1391 | "\u039E": "Xi",
1392 | "\u03BF": "omicron",
1393 | "\u039F": "Omicron",
1394 | "\u03C0": "pi",
1395 | "\u03D6": "piv",
1396 | "\u03A0": "Pi",
1397 | "\u03C1": "rho",
1398 | "\u03F1": "rhov",
1399 | "\u03A1": "Rho",
1400 | "\u03C3": "sigma",
1401 | "\u03A3": "Sigma",
1402 | "\u03C2": "sigmaf",
1403 | "\u03C4": "tau",
1404 | "\u03A4": "Tau",
1405 | "\u03C5": "upsi",
1406 | "\u03A5": "Upsilon",
1407 | "\u03D2": "Upsi",
1408 | "\u03C6": "phi",
1409 | "\u03D5": "phiv",
1410 | "\u03A6": "Phi",
1411 | "\u03C7": "chi",
1412 | "\u03A7": "Chi",
1413 | "\u03C8": "psi",
1414 | "\u03A8": "Psi",
1415 | "\u03C9": "omega",
1416 | "\u03A9": "ohm",
1417 | "\u0430": "acy",
1418 | "\u0410": "Acy",
1419 | "\u0431": "bcy",
1420 | "\u0411": "Bcy",
1421 | "\u0432": "vcy",
1422 | "\u0412": "Vcy",
1423 | "\u0433": "gcy",
1424 | "\u0413": "Gcy",
1425 | "\u0453": "gjcy",
1426 | "\u0403": "GJcy",
1427 | "\u0434": "dcy",
1428 | "\u0414": "Dcy",
1429 | "\u0452": "djcy",
1430 | "\u0402": "DJcy",
1431 | "\u0435": "iecy",
1432 | "\u0415": "IEcy",
1433 | "\u0451": "iocy",
1434 | "\u0401": "IOcy",
1435 | "\u0454": "jukcy",
1436 | "\u0404": "Jukcy",
1437 | "\u0436": "zhcy",
1438 | "\u0416": "ZHcy",
1439 | "\u0437": "zcy",
1440 | "\u0417": "Zcy",
1441 | "\u0455": "dscy",
1442 | "\u0405": "DScy",
1443 | "\u0438": "icy",
1444 | "\u0418": "Icy",
1445 | "\u0456": "iukcy",
1446 | "\u0406": "Iukcy",
1447 | "\u0457": "yicy",
1448 | "\u0407": "YIcy",
1449 | "\u0439": "jcy",
1450 | "\u0419": "Jcy",
1451 | "\u0458": "jsercy",
1452 | "\u0408": "Jsercy",
1453 | "\u043A": "kcy",
1454 | "\u041A": "Kcy",
1455 | "\u045C": "kjcy",
1456 | "\u040C": "KJcy",
1457 | "\u043B": "lcy",
1458 | "\u041B": "Lcy",
1459 | "\u0459": "ljcy",
1460 | "\u0409": "LJcy",
1461 | "\u043C": "mcy",
1462 | "\u041C": "Mcy",
1463 | "\u043D": "ncy",
1464 | "\u041D": "Ncy",
1465 | "\u045A": "njcy",
1466 | "\u040A": "NJcy",
1467 | "\u043E": "ocy",
1468 | "\u041E": "Ocy",
1469 | "\u043F": "pcy",
1470 | "\u041F": "Pcy",
1471 | "\u0440": "rcy",
1472 | "\u0420": "Rcy",
1473 | "\u0441": "scy",
1474 | "\u0421": "Scy",
1475 | "\u0442": "tcy",
1476 | "\u0422": "Tcy",
1477 | "\u045B": "tshcy",
1478 | "\u040B": "TSHcy",
1479 | "\u0443": "ucy",
1480 | "\u0423": "Ucy",
1481 | "\u045E": "ubrcy",
1482 | "\u040E": "Ubrcy",
1483 | "\u0444": "fcy",
1484 | "\u0424": "Fcy",
1485 | "\u0445": "khcy",
1486 | "\u0425": "KHcy",
1487 | "\u0446": "tscy",
1488 | "\u0426": "TScy",
1489 | "\u0447": "chcy",
1490 | "\u0427": "CHcy",
1491 | "\u045F": "dzcy",
1492 | "\u040F": "DZcy",
1493 | "\u0448": "shcy",
1494 | "\u0428": "SHcy",
1495 | "\u0449": "shchcy",
1496 | "\u0429": "SHCHcy",
1497 | "\u044A": "hardcy",
1498 | "\u042A": "HARDcy",
1499 | "\u044B": "ycy",
1500 | "\u042B": "Ycy",
1501 | "\u044C": "softcy",
1502 | "\u042C": "SOFTcy",
1503 | "\u044D": "ecy",
1504 | "\u042D": "Ecy",
1505 | "\u044E": "yucy",
1506 | "\u042E": "YUcy",
1507 | "\u044F": "yacy",
1508 | "\u042F": "YAcy",
1509 | "\u2135": "aleph",
1510 | "\u2136": "beth",
1511 | "\u2137": "gimel",
1512 | "\u2138": "daleth"
1513 | }
1514 |
--------------------------------------------------------------------------------
/data/encode-paired-symbols.json:
--------------------------------------------------------------------------------
1 | [
2 | "<\u20D2",
3 | "=\u20E5",
4 | ">\u20D2",
5 | "fj",
6 | "\u205F\u200A",
7 | "\u219D\u0338",
8 | "\u2202\u0338",
9 | "\u2220\u20D2",
10 | "\u2229\uFE00",
11 | "\u222A\uFE00",
12 | "\u223C\u20D2",
13 | "\u223D\u0331",
14 | "\u223E\u0333",
15 | "\u2242\u0338",
16 | "\u224B\u0338",
17 | "\u224D\u20D2",
18 | "\u224E\u0338",
19 | "\u224F\u0338",
20 | "\u2250\u0338",
21 | "\u2261\u20E5",
22 | "\u2264\u20D2",
23 | "\u2265\u20D2",
24 | "\u2266\u0338",
25 | "\u2267\u0338",
26 | "\u2268\uFE00",
27 | "\u2269\uFE00",
28 | "\u226A\u0338",
29 | "\u226A\u20D2",
30 | "\u226B\u0338",
31 | "\u226B\u20D2",
32 | "\u227F\u0338",
33 | "\u2282\u20D2",
34 | "\u2283\u20D2",
35 | "\u228A\uFE00",
36 | "\u228B\uFE00",
37 | "\u228F\u0338",
38 | "\u2290\u0338",
39 | "\u2293\uFE00",
40 | "\u2294\uFE00",
41 | "\u22B4\u20D2",
42 | "\u22B5\u20D2",
43 | "\u22D8\u0338",
44 | "\u22D9\u0338",
45 | "\u22DA\uFE00",
46 | "\u22DB\uFE00",
47 | "\u22F5\u0338",
48 | "\u22F9\u0338",
49 | "\u2933\u0338",
50 | "\u29CF\u0338",
51 | "\u29D0\u0338",
52 | "\u2A6D\u0338",
53 | "\u2A70\u0338",
54 | "\u2A7D\u0338",
55 | "\u2A7E\u0338",
56 | "\u2AA1\u0338",
57 | "\u2AA2\u0338",
58 | "\u2AAC\uFE00",
59 | "\u2AAD\uFE00",
60 | "\u2AAF\u0338",
61 | "\u2AB0\u0338",
62 | "\u2AC5\u0338",
63 | "\u2AC6\u0338",
64 | "\u2ACB\uFE00",
65 | "\u2ACC\uFE00",
66 | "\u2AFD\u20E5"
67 | ]
68 |
--------------------------------------------------------------------------------
/data/invalid-character-reference-code-points.json:
--------------------------------------------------------------------------------
1 | [
2 | 1,
3 | 2,
4 | 3,
5 | 4,
6 | 5,
7 | 6,
8 | 7,
9 | 8,
10 | 11,
11 | 13,
12 | 14,
13 | 15,
14 | 16,
15 | 17,
16 | 18,
17 | 19,
18 | 20,
19 | 21,
20 | 22,
21 | 23,
22 | 24,
23 | 25,
24 | 26,
25 | 27,
26 | 28,
27 | 29,
28 | 30,
29 | 31,
30 | 127,
31 | 128,
32 | 129,
33 | 130,
34 | 131,
35 | 132,
36 | 133,
37 | 134,
38 | 135,
39 | 136,
40 | 137,
41 | 138,
42 | 139,
43 | 140,
44 | 141,
45 | 142,
46 | 143,
47 | 144,
48 | 145,
49 | 146,
50 | 147,
51 | 148,
52 | 149,
53 | 150,
54 | 151,
55 | 152,
56 | 153,
57 | 154,
58 | 155,
59 | 156,
60 | 157,
61 | 158,
62 | 159,
63 | 64976,
64 | 64977,
65 | 64978,
66 | 64979,
67 | 64980,
68 | 64981,
69 | 64982,
70 | 64983,
71 | 64984,
72 | 64985,
73 | 64986,
74 | 64987,
75 | 64988,
76 | 64989,
77 | 64990,
78 | 64991,
79 | 64992,
80 | 64993,
81 | 64994,
82 | 64995,
83 | 64996,
84 | 64997,
85 | 64998,
86 | 64999,
87 | 65000,
88 | 65001,
89 | 65002,
90 | 65003,
91 | 65004,
92 | 65005,
93 | 65006,
94 | 65007,
95 | 65534,
96 | 65535,
97 | 131070,
98 | 131071,
99 | 196606,
100 | 196607,
101 | 262142,
102 | 262143,
103 | 327678,
104 | 327679,
105 | 393214,
106 | 393215,
107 | 458750,
108 | 458751,
109 | 524286,
110 | 524287,
111 | 589822,
112 | 589823,
113 | 655358,
114 | 655359,
115 | 720894,
116 | 720895,
117 | 786430,
118 | 786431,
119 | 851966,
120 | 851967,
121 | 917502,
122 | 917503,
123 | 983038,
124 | 983039,
125 | 1048574,
126 | 1048575,
127 | 1114110,
128 | 1114111
129 | ]
130 |
--------------------------------------------------------------------------------
/data/invalid-raw-code-points.json:
--------------------------------------------------------------------------------
1 | [
2 | 0,
3 | 1,
4 | 2,
5 | 3,
6 | 4,
7 | 5,
8 | 6,
9 | 7,
10 | 8,
11 | 11,
12 | 14,
13 | 15,
14 | 16,
15 | 17,
16 | 18,
17 | 19,
18 | 20,
19 | 21,
20 | 22,
21 | 23,
22 | 24,
23 | 25,
24 | 26,
25 | 27,
26 | 28,
27 | 29,
28 | 30,
29 | 31,
30 | 127,
31 | 128,
32 | 129,
33 | 130,
34 | 131,
35 | 132,
36 | 133,
37 | 134,
38 | 135,
39 | 136,
40 | 137,
41 | 138,
42 | 139,
43 | 140,
44 | 141,
45 | 142,
46 | 143,
47 | 144,
48 | 145,
49 | 146,
50 | 147,
51 | 148,
52 | 149,
53 | 150,
54 | 151,
55 | 152,
56 | 153,
57 | 154,
58 | 155,
59 | 156,
60 | 157,
61 | 158,
62 | 159,
63 | 64976,
64 | 64977,
65 | 64978,
66 | 64979,
67 | 64980,
68 | 64981,
69 | 64982,
70 | 64983,
71 | 64984,
72 | 64985,
73 | 64986,
74 | 64987,
75 | 64988,
76 | 64989,
77 | 64990,
78 | 64991,
79 | 64992,
80 | 64993,
81 | 64994,
82 | 64995,
83 | 64996,
84 | 64997,
85 | 64998,
86 | 64999,
87 | 65000,
88 | 65001,
89 | 65002,
90 | 65003,
91 | 65004,
92 | 65005,
93 | 65006,
94 | 65007,
95 | 65534,
96 | 65535,
97 | 131070,
98 | 131071,
99 | 196606,
100 | 196607,
101 | 262142,
102 | 262143,
103 | 327678,
104 | 327679,
105 | 393214,
106 | 393215,
107 | 458750,
108 | 458751,
109 | 524286,
110 | 524287,
111 | 589822,
112 | 589823,
113 | 655358,
114 | 655359,
115 | 720894,
116 | 720895,
117 | 786430,
118 | 786431,
119 | 851966,
120 | 851967,
121 | 917502,
122 | 917503,
123 | 983038,
124 | 983039,
125 | 1048574,
126 | 1048575,
127 | 1114110,
128 | 1114111
129 | ]
130 |
--------------------------------------------------------------------------------
/man/he.1:
--------------------------------------------------------------------------------
1 | .Dd April 5, 2016
2 | .Dt he 1
3 | .Sh NAME
4 | .Nm he
5 | .Nd encode/decode HTML entities just like a browser would
6 | .Sh SYNOPSIS
7 | .Nm
8 | .Op Fl -escape Ar string
9 | .br
10 | .Op Fl -encode Ar string
11 | .br
12 | .Op Fl -encode Fl -use-named-refs Fl -everything Fl -allow-unsafe Ar string
13 | .br
14 | .Op Fl -decode Ar string
15 | .br
16 | .Op Fl -decode Fl -attribute Ar string
17 | .br
18 | .Op Fl -decode Fl -strict Ar string
19 | .br
20 | .Op Fl v | -version
21 | .br
22 | .Op Fl h | -help
23 | .Sh DESCRIPTION
24 | .Nm
25 | encodes/decodes HTML entities in strings just like a browser would.
26 | .Sh OPTIONS
27 | .Bl -ohang -offset
28 | .It Sy "--escape"
29 | Take a string of text and escape it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, and `'`.
30 | .It Sy "--encode"
31 | Take a string of text and encode any symbols that aren't printable ASCII symbols and that can be replaced with character references. For example, it would turn `©` into `©`, but it wouldn't turn `+` into `+` since there is no point in doing so. Additionally, it replaces any remaining non-ASCII symbols with a hexadecimal escape sequence (e.g. `𝌆`). The return value of this function is always valid HTML.
32 | .It Sy "--encode --use-named-refs"
33 | Enable the use of named character references (like `©`) in the output. If compatibility with older browsers is a concern, don't use this option.
34 | .It Sy "--encode --everything"
35 | Encode every symbol in the input string, even safe printable ASCII symbols.
36 | .It Sy "--encode --allow-unsafe"
37 | Encode non-ASCII characters only. This leaves unsafe HTML/XML symbols like `&`, `<`, `>`, `"`, and `'` intact.
38 | .It Sy "--encode --decimal"
39 | Use decimal digits rather than hexadecimal digits for encoded character references, e.g. output `©` instead of `©`.
40 | .It Sy "--decode"
41 | Takes a string of HTML and decode any named and numerical character references in it using the algorithm described in the HTML spec.
42 | .It Sy "--decode --attribute"
43 | Parse the input as if it was an HTML attribute value rather than a string in an HTML text content.
44 | .It Sy "--decode --strict"
45 | Throw an error if an invalid character reference is encountered.
46 | .It Sy "-v, --version"
47 | Print he's version.
48 | .It Sy "-h, --help"
49 | Show the help screen.
50 | .El
51 | .Sh EXIT STATUS
52 | The
53 | .Nm he
54 | utility exits with one of the following values:
55 | .Pp
56 | .Bl -tag -width flag -compact
57 | .It Li 0
58 | .Nm
59 | did what it was instructed to do successfully; either it encoded/decoded the input and printed the result, or it printed the version or usage message.
60 | .It Li 1
61 | .Nm
62 | encountered an error.
63 | .El
64 | .Sh EXAMPLES
65 | .Bl -ohang -offset
66 | .It Sy "he --escape ''"
67 | Print an escaped version of the given string that is safe for use in HTML text contexts, escaping only `&`, `<`, `>`, `"`, and `'`.
68 | .It Sy "he --decode '©𝌆'"
69 | Print the decoded version of the given HTML string.
70 | .It Sy "echo\ '©𝌆'\ |\ he --decode"
71 | Print the decoded version of the HTML string that gets piped in.
72 | .El
73 | .Sh BUGS
74 | he's bug tracker is located at .
75 | .Sh AUTHOR
76 | Mathias Bynens
77 | .Sh WWW
78 |
79 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "he",
3 | "version": "1.2.0",
4 | "description": "A robust HTML entities encoder/decoder with full Unicode support.",
5 | "homepage": "https://mths.be/he",
6 | "main": "he.js",
7 | "bin": "bin/he",
8 | "keywords": [
9 | "string",
10 | "entities",
11 | "entity",
12 | "html",
13 | "encode",
14 | "decode",
15 | "unicode"
16 | ],
17 | "license": "MIT",
18 | "author": {
19 | "name": "Mathias Bynens",
20 | "url": "https://mathiasbynens.be/"
21 | },
22 | "repository": {
23 | "type": "git",
24 | "url": "https://github.com/mathiasbynens/he.git"
25 | },
26 | "bugs": "https://github.com/mathiasbynens/he/issues",
27 | "files": [
28 | "LICENSE-MIT.txt",
29 | "he.js",
30 | "bin/",
31 | "man/"
32 | ],
33 | "directories": {
34 | "bin": "bin",
35 | "man": "man",
36 | "test": "tests"
37 | },
38 | "scripts": {
39 | "test": "node tests/tests.js",
40 | "build": "grunt build"
41 | },
42 | "devDependencies": {
43 | "codecov.io": "^0.1.6",
44 | "grunt": "^0.4.5",
45 | "grunt-cli": "^1.3.1",
46 | "grunt-shell": "^1.1.1",
47 | "grunt-template": "^0.2.3",
48 | "istanbul": "^0.4.2",
49 | "jsesc": "^1.0.0",
50 | "lodash": "^4.8.2",
51 | "qunit-extras": "^1.4.5",
52 | "qunitjs": "~1.11.0",
53 | "regenerate": "^1.2.1",
54 | "regexgen": "^1.3.0",
55 | "requirejs": "^2.1.22",
56 | "sort-object": "^3.0.2"
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/scripts/ascii-whitelist-regex.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const regenerate = require('regenerate');
4 |
5 | const regexAsciiWhitelist = regenerate()
6 | // Add all ASCII symbols (not just printable ASCII).
7 | .addRange(0x0, 0x7F)
8 | // Remove code points listed in the first column of the overrides table.
9 | // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
10 | .remove(require('../data/decode-code-points-overrides.json'))
11 | .toString();
12 |
13 | module.exports = regexAsciiWhitelist;
14 |
--------------------------------------------------------------------------------
/scripts/astral-symbol-regex.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const regenerate = require('regenerate');
4 |
5 | const regexAstralSymbol = regenerate()
6 | .addRange(0x010000, 0x10FFFF)
7 | .toString();
8 |
9 | module.exports = regexAstralSymbol;
10 |
--------------------------------------------------------------------------------
/scripts/bmp-whitelist-regex.js:
--------------------------------------------------------------------------------
1 | const regenerate = require('regenerate');
2 |
3 | const regexBmpWhitelist = regenerate()
4 | // Add all BMP symbols.
5 | .addRange(0x0, 0xFFFF)
6 | // Remove ASCII newlines.
7 | .remove('\r', '\n')
8 | // Remove printable ASCII symbols.
9 | .removeRange(0x20, 0x7E)
10 | // Remove code points listed in the first column of the overrides table.
11 | // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
12 | .remove(require('../data/decode-code-points-overrides.json'))
13 | .toString({ 'bmpOnly': true });
14 |
15 | module.exports = regexBmpWhitelist;
16 |
--------------------------------------------------------------------------------
/scripts/encode-non-ascii-regex.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const jsesc = require('jsesc');
4 | const regenerate = require('regenerate');
5 | const difference = require('lodash').difference;
6 |
7 | const joinStrings = function(a, b) {
8 | if (a && b) {
9 | return a + '|' + b;
10 | }
11 | return a + b;
12 | };
13 |
14 | const loneCodePoints = require('../data/encode-lone-code-points.json');
15 | const arrayEncodeMultipleSymbols = require('../data/encode-paired-symbols.json');
16 | const arrayEncodeMultipleSymbolsAscii = arrayEncodeMultipleSymbols
17 | .filter(function(string) {
18 | return /^[\0-\x7F]+$/.test(string);
19 | });
20 |
21 | const encodeSingleSymbolsAscii = regenerate(loneCodePoints)
22 | .removeRange(0x7F + 1, 0x10FFFF).toString();
23 | const encodeSingleSymbolsNonAscii = regenerate(loneCodePoints)
24 | .removeRange(0x00, 0x7F).toString();
25 | const encodeMultipleSymbolsAscii = jsesc(
26 | arrayEncodeMultipleSymbolsAscii.join('|')
27 | );
28 | const encodeMultipleSymbolsNonAscii = jsesc(
29 | difference(
30 | arrayEncodeMultipleSymbols,
31 | arrayEncodeMultipleSymbolsAscii
32 | ).join('|')
33 | );
34 |
35 | const regexEncodeAscii = joinStrings(
36 | encodeMultipleSymbolsAscii,
37 | encodeSingleSymbolsAscii
38 | );
39 |
40 | const regexEncodeNonAscii = joinStrings(
41 | encodeMultipleSymbolsNonAscii,
42 | encodeSingleSymbolsNonAscii
43 | );
44 |
45 | // Note: `regexEncodeAscii` is not used.
46 | module.exports = regexEncodeNonAscii;
47 |
--------------------------------------------------------------------------------
/scripts/export-data.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const jsesc = require('jsesc');
4 |
5 | const formatJSON = function(fileName) {
6 | const object = require('../data/' + fileName + '.json');
7 | return jsesc(object, {
8 | 'compact': true,
9 | 'quotes': 'single'
10 | });
11 | };
12 |
13 | module.exports = {
14 | 'decodeMap': formatJSON('decode-map'),
15 | 'decodeMapLegacy': formatJSON('decode-map-legacy'),
16 | 'decodeMapOverrides': formatJSON('decode-map-overrides'),
17 | 'encodeMap': formatJSON('encode-map'),
18 | 'invalidReferenceCodePoints': formatJSON('invalid-character-reference-code-points'),
19 | 'regexAsciiWhitelist': require('./ascii-whitelist-regex.js'),
20 | 'regexAstralSymbol': require('./astral-symbol-regex.js'),
21 | 'regexBmpWhitelist': require('./bmp-whitelist-regex.js'),
22 | 'regexDecimalEscapeSource': '([0-9]+)(;?)',
23 | 'regexEncodeNonAscii': require('./encode-non-ascii-regex.js'),
24 | 'regexHexadecimalEscapeSource': '[xX]([a-fA-F0-9]+)(;?)',
25 | 'regexInvalidRawCodePoints': require('./invalid-code-points-regex.js'),
26 | 'regexLegacyReferenceSource': require('./legacy-reference-regex.js'),
27 | 'regexNamedReferenceSource': require('./named-reference-regex.js'),
28 | 'stringInvalidCodePoints': require('./invalid-code-points-string.js'),
29 | 'regexAmbiguousAmpersand': '&([0-9a-zA-Z]+)',
30 | 'testDataMap': formatJSON('entities'),
31 | 'version': require('../package.json').version
32 | };
33 |
--------------------------------------------------------------------------------
/scripts/invalid-code-points-regex.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const regenerate = require('regenerate');
4 |
5 | const invalidRawCodePoints = require('../data/invalid-raw-code-points.json');
6 | const regexInvalidRawCodePoints = regenerate(invalidRawCodePoints)
7 | // https://html.spec.whatwg.org/multipage/#preprocessing-the-input-stream
8 | // “Any character that is a not a Unicode character, i.e. any isolated
9 | // surrogate, is a parse error.”
10 | .addRange(0xD800, 0xDBFF)
11 | .addRange(0xDC00, 0xDFFF)
12 | .toString();
13 |
14 | module.exports = regexInvalidRawCodePoints;
15 |
--------------------------------------------------------------------------------
/scripts/invalid-code-points-string.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const jsesc = require('jsesc');
4 |
5 | const invalidRawCodePoints = require('../data/invalid-raw-code-points.json');
6 | const string = String.fromCodePoint.apply(String, invalidRawCodePoints);
7 | const invalidCodePointsString = jsesc(string, { 'wrap': true });
8 |
9 | module.exports = invalidCodePointsString;
10 |
--------------------------------------------------------------------------------
/scripts/legacy-reference-regex.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const legacyReferences = require('../data/decode-legacy-named-references.json');
4 | const regexLegacyReference = '&(' + legacyReferences.join('|') +
5 | ')(?!;)([=a-zA-Z0-9]?)';
6 |
7 | module.exports = regexLegacyReference;
8 |
--------------------------------------------------------------------------------
/scripts/named-reference-regex.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const namedReferences = Object.keys(
4 | require('../data/decode-map.json')
5 | ).sort((a, b) => b.length - a.length);
6 |
7 | // const Trie = require('regexgen').Trie;
8 | // const trie = new Trie();
9 | // trie.addAll(namedReferences);
10 | // const pattern = trie.toString();
11 | // console.log(pattern);
12 | // → 12 KB instead of the 16 KB of the current output.
13 | // However, the current output gzips better, and has better
14 | // run-time performance.
15 |
16 | // Verify all references consist of characters that don’t need escaping
17 | // within regular expressions. (If this is not the case, then we can’t
18 | // simply do a `join('|')`.)
19 | console.assert(namedReferences.every((reference) => {
20 | return /^[a-zA-Z0-9]+$/.test(reference);
21 | }));
22 | const regexNamedReference = '&(' + namedReferences.join('|') + ');';
23 |
24 | module.exports = regexNamedReference;
25 |
--------------------------------------------------------------------------------
/scripts/process-data.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const fs = require('fs');
4 | const jsesc = require('jsesc');
5 | const _ = require('lodash');
6 | const sortObject = require('sort-object');
7 |
8 | // https://html.spec.whatwg.org/entities.json
9 | const data = require('../data/entities.json');
10 |
11 | const encodeMap = {};
12 | let encodeMultipleSymbols = [];
13 | let encodeSingleCodePoints = [];
14 | const decodeMap = {};
15 | const decodeMapLegacy = {};
16 |
17 | _.forOwn(data, function(value, key) {
18 | const referenceWithLeadingAmpersand = key;
19 | const referenceWithoutLeadingAmpersand = referenceWithLeadingAmpersand.replace(/^&/, '');
20 | const referenceOnly = referenceWithoutLeadingAmpersand.replace(/;$/, '');
21 | const string = value.characters;
22 | const codePoints = value.codepoints;
23 | if (/;$/.test(referenceWithoutLeadingAmpersand)) {
24 | // Only enter this branch if the entity has a trailing semicolon.
25 | const tmp = encodeMap[string];
26 | // Prefer short named character references with as few uppercase letters as
27 | // possible.
28 | if ( // Only add an entry if…
29 | !tmp || ( // …there is no entry for this string yet, or…
30 | tmp.length > referenceOnly.length || // …this reference is shorter, or…
31 | (
32 | // …this reference contains fewer uppercase letters.
33 | tmp.length == referenceOnly.length &&
34 | (referenceOnly.match(/[A-Z]/g) || []).length <
35 | (tmp.match(/[A-Z]/g) || []).length
36 | )
37 | )
38 | ) {
39 | encodeMap[string] = referenceOnly;
40 | } else {
41 | // Do nothing.
42 | }
43 | if (codePoints.length == 1) {
44 | encodeSingleCodePoints.push(codePoints[0]);
45 | } else {
46 | encodeMultipleSymbols.push(string);
47 | }
48 | }
49 | if (/;$/.test(referenceWithoutLeadingAmpersand)) {
50 | decodeMap[referenceWithoutLeadingAmpersand.replace(/;$/, '')] = string;
51 | } else {
52 | decodeMapLegacy[referenceWithoutLeadingAmpersand] = string;
53 | }
54 | });
55 |
56 | encodeMultipleSymbols = _.uniq(
57 | encodeMultipleSymbols.sort(), // Sort strings by code point value.
58 | true
59 | );
60 |
61 | encodeSingleCodePoints = _.uniq(
62 | _.sortBy(encodeSingleCodePoints), // Sort numerically.
63 | true
64 | );
65 |
66 | const legacyReferences = _.keys(decodeMapLegacy).sort(function(a, b) {
67 | // Optimize the regular expression that will be generated based on this data
68 | // by sorting the references by length in descending order.
69 | if (a.length > b.length) {
70 | return -1;
71 | }
72 | if (a.length < b.length) {
73 | return 1;
74 | }
75 | // If the length of both strings is equal, sort alphabetically.
76 | if (a < b) {
77 | return -1;
78 | }
79 | if (a > b) {
80 | return 1;
81 | }
82 | return 0;
83 | });
84 |
85 | const writeJSON = function(fileName, object) {
86 | const json = jsesc(object, {
87 | 'compact': false,
88 | 'json': true
89 | });
90 | fs.writeFileSync(fileName, json + '\n');
91 | };
92 |
93 | writeJSON('data/decode-map.json', sortObject(decodeMap));
94 | writeJSON('data/decode-map-legacy.json', sortObject(decodeMapLegacy));
95 | writeJSON('data/decode-legacy-named-references.json', legacyReferences);
96 | writeJSON('data/encode-map.json', sortObject(encodeMap));
97 | writeJSON('data/encode-paired-symbols.json', encodeMultipleSymbols);
98 | writeJSON('data/encode-lone-code-points.json', encodeSingleCodePoints);
99 |
--------------------------------------------------------------------------------
/scripts/scrape-spec.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env phantomjs
2 |
3 | var page = require('webpage').create();
4 | var fs = require('fs');
5 | var jsesc = require('jsesc');
6 |
7 | var open = function(url, callback) {
8 | page.open(url, function(status) {
9 | if (status != 'success') {
10 | return phantom.exit();
11 | }
12 | callback();
13 | });
14 | };
15 |
16 | var writeJSON = function(fileName, data) {
17 | var contents = jsesc(data, {
18 | 'json': true,
19 | 'compact': false
20 | });
21 | fs.write(fileName, contents + '\n', 'w');
22 | console.log(fileName + ' created successfully.');
23 | };
24 |
25 | open('https://html.spec.whatwg.org/', function() {
26 | var result = JSON.parse(page.evaluate(function() {
27 |
28 | // Modified version of `ucs2encode`; see https://mths.be/punycode
29 | var stringFromCharCode = String.fromCharCode;
30 | var codePointToSymbol = function(codePoint) {
31 | var output = '';
32 | if (codePoint > 0xFFFF) {
33 | codePoint -= 0x10000;
34 | output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
35 | codePoint = 0xDC00 | codePoint & 0x3FF;
36 | }
37 | output += stringFromCharCode(codePoint);
38 | return output;
39 | };
40 |
41 | var range = function(start, stop) {
42 | for (var result = []; start <= stop; result.push(start++));
43 | return result;
44 | };
45 |
46 | // Code points that cause parse errors when used in character references
47 | // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
48 | var table = document.querySelector('#table-charref-overrides');
49 | var siblings = table.parentNode.children;
50 | var max = siblings.length - 1;
51 | var text = siblings[max].textContent;
52 | var charRefCodePoints = [];
53 | text.replace(/0x([a-fA-F0-9]+)\s+to\s+0x([a-fA-F0-9]+)/g, function($0, $1, $2) {
54 | var start = parseInt($1, 16);
55 | var end = parseInt($2, 16);
56 | charRefCodePoints = charRefCodePoints.concat(range(start, end));
57 | return '';
58 | }).replace(/0x([a-fA-F0-9]+)/g, function($0, $1) {
59 | var codePoint = parseInt($1, 16);
60 | charRefCodePoints.push(codePoint);
61 | return '';
62 | });
63 | charRefCodePoints = charRefCodePoints.sort(function(a, b) {
64 | return a - b;
65 | });
66 |
67 | // Character reference overrides
68 | // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
69 | var cells = table.querySelectorAll('td');
70 | var keys = [].filter.call(cells, function(cell, index) {
71 | return index % 3 == 0;
72 | }).map(function(cell) {
73 | return Number(cell.textContent.trim());
74 | });
75 | var values = [].filter.call(cells, function(cell, index) {
76 | return index % 3 == 1;
77 | }).map(function(cell) {
78 | var hex = cell.textContent.trim().replace('U+', '');
79 | var codePoint = parseInt(hex, 16);
80 | return codePointToSymbol(codePoint);
81 | });
82 | var overrides = {};
83 | keys = keys.forEach(function(codePoint, index) {
84 | var symbol = codePointToSymbol(codePoint);
85 | var correspondingValue = values[index];
86 | var mapsToItself = symbol == correspondingValue;
87 | var alreadyMarkedAsInvalid = charRefCodePoints.indexOf(codePoint) > -1;
88 | if (mapsToItself && !alreadyMarkedAsInvalid) {
89 | charRefCodePoints.push(codePoint);
90 | return;
91 | }
92 | if (!mapsToItself || !alreadyMarkedAsInvalid) {
93 | overrides[codePoint] = correspondingValue;
94 | }
95 | });
96 |
97 | // Code points for symbols that cause parse errors when in the HTML source
98 | // https://html.spec.whatwg.org/multipage/syntax.html#preprocessing-the-input-stream
99 | var header = document.querySelector('#preprocessing-the-input-stream');
100 | var element = header;
101 | var text;
102 | while (element = element.nextSibling) {
103 | text = element.textContent.trim();
104 | if (/Any occurrences of any characters in the ranges/.test(text)) {
105 | break;
106 | }
107 | }
108 | var rawCodePoints = [];
109 | text.replace(/U\+([a-fA-F0-9]+)\s+to\s+U\+([a-fA-F0-9]+)/g, function($0, $1, $2) {
110 | var start = parseInt($1, 16);
111 | var end = parseInt($2, 16);
112 | rawCodePoints = rawCodePoints.concat(range(start, end));
113 | return '';
114 | }).replace(/U\+([a-fA-F0-9]+)/g, function($0, $1) {
115 | var codePoint = parseInt($1, 16);
116 | rawCodePoints.push(codePoint);
117 | return '';
118 | });
119 | rawCodePoints = rawCodePoints.sort(function(a, b) {
120 | return a - b;
121 | });
122 | // U+0000 is a parse error in the Data state (which is the state where
123 | // `he`’s input and output is supposed to end up in), so add it to the set
124 | // of invalid raw code points.
125 | // https://html.spec.whatwg.org/multipage/syntax.html#data-state
126 | rawCodePoints.unshift(0x0000);
127 |
128 | // Pass everything back to PhantomJS.
129 | return JSON.stringify({
130 | 'overrides': overrides,
131 | 'charRefCodePoints': charRefCodePoints,
132 | 'rawCodePoints': rawCodePoints
133 | });
134 |
135 | }));
136 |
137 | var overrides = result.overrides;
138 | var overrideCodePoints = Object.keys(overrides).map(Number);
139 | writeJSON('data/decode-map-overrides.json', overrides);
140 | writeJSON('data/decode-code-points-overrides.json', overrideCodePoints);
141 | writeJSON('data/invalid-character-reference-code-points.json', result.charRefCodePoints);
142 | writeJSON('data/invalid-raw-code-points.json', result.rawCodePoints);
143 | // Note: `invalid-character-reference-code-points.json` is identical to
144 | // `invalid-raw-code-points.json` except U+000D (CR) is not included in
145 | // the latter, because lone CR are converted to LF before tokenization.
146 | // https://html.spec.whatwg.org/multipage/syntax.html#preprocessing-the-input-stream
147 |
148 | phantom.exit();
149 | });
150 |
--------------------------------------------------------------------------------
/src/he.js:
--------------------------------------------------------------------------------
1 | /*! https://mths.be/he v<%= version %> by @mathias | MIT license */
2 | ;(function(root) {
3 |
4 | // Detect free variables `exports`.
5 | var freeExports = typeof exports == 'object' && exports;
6 |
7 | // Detect free variable `module`.
8 | var freeModule = typeof module == 'object' && module &&
9 | module.exports == freeExports && module;
10 |
11 | // Detect free variable `global`, from Node.js or Browserified code,
12 | // and use it as `root`.
13 | var freeGlobal = typeof global == 'object' && global;
14 | if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
15 | root = freeGlobal;
16 | }
17 |
18 | /*--------------------------------------------------------------------------*/
19 |
20 | // All astral symbols.
21 | var regexAstralSymbols = /<%= regexAstralSymbol %>/g;
22 | // All ASCII symbols (not just printable ASCII) except those listed in the
23 | // first column of the overrides table.
24 | // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
25 | var regexAsciiWhitelist = /<%= regexAsciiWhitelist %>/g;
26 | // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
27 | // code points listed in the first column of the overrides table on
28 | // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
29 | var regexBmpWhitelist = /<%= regexBmpWhitelist %>/g;
30 |
31 | var regexEncodeNonAscii = /<%= regexEncodeNonAscii %>/g;
32 | var encodeMap = <%= encodeMap %>;
33 |
34 | var regexEscape = /["&'<>`]/g;
35 | var escapeMap = {
36 | '"': '"',
37 | '&': '&',
38 | '\'': ''',
39 | '<': '<',
40 | // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
41 | // following is not strictly necessary unless it’s part of a tag or an
42 | // unquoted attribute value. We’re only escaping it to support those
43 | // situations, and for XML support.
44 | '>': '>',
45 | // In Internet Explorer ≤ 8, the backtick character can be used
46 | // to break out of (un)quoted attribute values or HTML comments.
47 | // See http://html5sec.org/#102, http://html5sec.org/#108, and
48 | // http://html5sec.org/#133.
49 | '`': '`'
50 | };
51 |
52 | var regexInvalidEntity = /(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
53 | var regexInvalidRawCodePoint = /<%= regexInvalidRawCodePoints %>/;
54 | var regexDecode = /<%=
55 | regexNamedReferenceSource
56 | %>|<%=
57 | regexLegacyReferenceSource
58 | %>|<%=
59 | regexDecimalEscapeSource
60 | %>|<%=
61 | regexHexadecimalEscapeSource
62 | %>|<%=
63 | regexAmbiguousAmpersand
64 | %>/g;
65 | var decodeMap = <%= decodeMap %>;
66 | var decodeMapLegacy = <%= decodeMapLegacy %>;
67 | var decodeMapNumeric = <%= decodeMapOverrides %>;
68 | var invalidReferenceCodePoints = <%= invalidReferenceCodePoints %>;
69 |
70 | /*--------------------------------------------------------------------------*/
71 |
72 | var stringFromCharCode = String.fromCharCode;
73 |
74 | var object = {};
75 | var hasOwnProperty = object.hasOwnProperty;
76 | var has = function(object, propertyName) {
77 | return hasOwnProperty.call(object, propertyName);
78 | };
79 |
80 | var contains = function(array, value) {
81 | var index = -1;
82 | var length = array.length;
83 | while (++index < length) {
84 | if (array[index] == value) {
85 | return true;
86 | }
87 | }
88 | return false;
89 | };
90 |
91 | var merge = function(options, defaults) {
92 | if (!options) {
93 | return defaults;
94 | }
95 | var result = {};
96 | var key;
97 | for (key in defaults) {
98 | // A `hasOwnProperty` check is not needed here, since only recognized
99 | // option names are used anyway. Any others are ignored.
100 | result[key] = has(options, key) ? options[key] : defaults[key];
101 | }
102 | return result;
103 | };
104 |
105 | // Modified version of `ucs2encode`; see https://mths.be/punycode.
106 | var codePointToSymbol = function(codePoint, strict) {
107 | var output = '';
108 | if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
109 | // See issue #4:
110 | // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
111 | // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
112 | // REPLACEMENT CHARACTER.”
113 | if (strict) {
114 | parseError('character reference outside the permissible Unicode range');
115 | }
116 | return '\uFFFD';
117 | }
118 | if (has(decodeMapNumeric, codePoint)) {
119 | if (strict) {
120 | parseError('disallowed character reference');
121 | }
122 | return decodeMapNumeric[codePoint];
123 | }
124 | if (strict && contains(invalidReferenceCodePoints, codePoint)) {
125 | parseError('disallowed character reference');
126 | }
127 | if (codePoint > 0xFFFF) {
128 | codePoint -= 0x10000;
129 | output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
130 | codePoint = 0xDC00 | codePoint & 0x3FF;
131 | }
132 | output += stringFromCharCode(codePoint);
133 | return output;
134 | };
135 |
136 | var hexEscape = function(codePoint) {
137 | return '' + codePoint.toString(16).toUpperCase() + ';';
138 | };
139 |
140 | var decEscape = function(codePoint) {
141 | return '' + codePoint + ';';
142 | };
143 |
144 | var parseError = function(message) {
145 | throw Error('Parse error: ' + message);
146 | };
147 |
148 | /*--------------------------------------------------------------------------*/
149 |
150 | var encode = function(string, options) {
151 | options = merge(options, encode.options);
152 | var strict = options.strict;
153 | if (strict && regexInvalidRawCodePoint.test(string)) {
154 | parseError('forbidden code point');
155 | }
156 | var encodeEverything = options.encodeEverything;
157 | var useNamedReferences = options.useNamedReferences;
158 | var allowUnsafeSymbols = options.allowUnsafeSymbols;
159 | var escapeCodePoint = options.decimal ? decEscape : hexEscape;
160 |
161 | var escapeBmpSymbol = function(symbol) {
162 | return escapeCodePoint(symbol.charCodeAt(0));
163 | };
164 |
165 | if (encodeEverything) {
166 | // Encode ASCII symbols.
167 | string = string.replace(regexAsciiWhitelist, function(symbol) {
168 | // Use named references if requested & possible.
169 | if (useNamedReferences && has(encodeMap, symbol)) {
170 | return '&' + encodeMap[symbol] + ';';
171 | }
172 | return escapeBmpSymbol(symbol);
173 | });
174 | // Shorten a few escapes that represent two symbols, of which at least one
175 | // is within the ASCII range.
176 | if (useNamedReferences) {
177 | string = string
178 | .replace(/>\u20D2/g, '>⃒')
179 | .replace(/<\u20D2/g, '<⃒')
180 | .replace(/fj/g, 'fj');
181 | }
182 | // Encode non-ASCII symbols.
183 | if (useNamedReferences) {
184 | // Encode non-ASCII symbols that can be replaced with a named reference.
185 | string = string.replace(regexEncodeNonAscii, function(string) {
186 | // Note: there is no need to check `has(encodeMap, string)` here.
187 | return '&' + encodeMap[string] + ';';
188 | });
189 | }
190 | // Note: any remaining non-ASCII symbols are handled outside of the `if`.
191 | } else if (useNamedReferences) {
192 | // Apply named character references.
193 | // Encode `<>"'&` using named character references.
194 | if (!allowUnsafeSymbols) {
195 | string = string.replace(regexEscape, function(string) {
196 | return '&' + encodeMap[string] + ';'; // no need to check `has()` here
197 | });
198 | }
199 | // Shorten escapes that represent two symbols, of which at least one is
200 | // `<>"'&`.
201 | string = string
202 | .replace(/>\u20D2/g, '>⃒')
203 | .replace(/<\u20D2/g, '<⃒');
204 | // Encode non-ASCII symbols that can be replaced with a named reference.
205 | string = string.replace(regexEncodeNonAscii, function(string) {
206 | // Note: there is no need to check `has(encodeMap, string)` here.
207 | return '&' + encodeMap[string] + ';';
208 | });
209 | } else if (!allowUnsafeSymbols) {
210 | // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
211 | // using named character references.
212 | string = string.replace(regexEscape, escapeBmpSymbol);
213 | }
214 | return string
215 | // Encode astral symbols.
216 | .replace(regexAstralSymbols, function($0) {
217 | // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
218 | var high = $0.charCodeAt(0);
219 | var low = $0.charCodeAt(1);
220 | var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
221 | return escapeCodePoint(codePoint);
222 | })
223 | // Encode any remaining BMP symbols that are not printable ASCII symbols
224 | // using a hexadecimal escape.
225 | .replace(regexBmpWhitelist, escapeBmpSymbol);
226 | };
227 | // Expose default options (so they can be overridden globally).
228 | encode.options = {
229 | 'allowUnsafeSymbols': false,
230 | 'encodeEverything': false,
231 | 'strict': false,
232 | 'useNamedReferences': false,
233 | 'decimal' : false
234 | };
235 |
236 | var decode = function(html, options) {
237 | options = merge(options, decode.options);
238 | var strict = options.strict;
239 | if (strict && regexInvalidEntity.test(html)) {
240 | parseError('malformed character reference');
241 | }
242 | return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {
243 | var codePoint;
244 | var semicolon;
245 | var decDigits;
246 | var hexDigits;
247 | var reference;
248 | var next;
249 |
250 | if ($1) {
251 | reference = $1;
252 | // Note: there is no need to check `has(decodeMap, reference)`.
253 | return decodeMap[reference];
254 | }
255 |
256 | if ($2) {
257 | // Decode named character references without trailing `;`, e.g. `&`.
258 | // This is only a parse error if it gets converted to `&`, or if it is
259 | // followed by `=` in an attribute context.
260 | reference = $2;
261 | next = $3;
262 | if (next && options.isAttributeValue) {
263 | if (strict && next == '=') {
264 | parseError('`&` did not start a character reference');
265 | }
266 | return $0;
267 | } else {
268 | if (strict) {
269 | parseError(
270 | 'named character reference was not terminated by a semicolon'
271 | );
272 | }
273 | // Note: there is no need to check `has(decodeMapLegacy, reference)`.
274 | return decodeMapLegacy[reference] + (next || '');
275 | }
276 | }
277 |
278 | if ($4) {
279 | // Decode decimal escapes, e.g. `𝌆`.
280 | decDigits = $4;
281 | semicolon = $5;
282 | if (strict && !semicolon) {
283 | parseError('character reference was not terminated by a semicolon');
284 | }
285 | codePoint = parseInt(decDigits, 10);
286 | return codePointToSymbol(codePoint, strict);
287 | }
288 |
289 | if ($6) {
290 | // Decode hexadecimal escapes, e.g. `𝌆`.
291 | hexDigits = $6;
292 | semicolon = $7;
293 | if (strict && !semicolon) {
294 | parseError('character reference was not terminated by a semicolon');
295 | }
296 | codePoint = parseInt(hexDigits, 16);
297 | return codePointToSymbol(codePoint, strict);
298 | }
299 |
300 | // If we’re still here, `if ($7)` is implied; it’s an ambiguous
301 | // ampersand for sure. https://mths.be/notes/ambiguous-ampersands
302 | if (strict) {
303 | parseError(
304 | 'named character reference was not terminated by a semicolon'
305 | );
306 | }
307 | return $0;
308 | });
309 | };
310 | // Expose default options (so they can be overridden globally).
311 | decode.options = {
312 | 'isAttributeValue': false,
313 | 'strict': false
314 | };
315 |
316 | var escape = function(string) {
317 | return string.replace(regexEscape, function($0) {
318 | // Note: there is no need to check `has(escapeMap, $0)` here.
319 | return escapeMap[$0];
320 | });
321 | };
322 |
323 | /*--------------------------------------------------------------------------*/
324 |
325 | var he = {
326 | 'version': '<%= version %>',
327 | 'encode': encode,
328 | 'decode': decode,
329 | 'escape': escape,
330 | 'unescape': decode
331 | };
332 |
333 | // Some AMD build optimizers, like r.js, check for specific condition patterns
334 | // like the following:
335 | if (
336 | typeof define == 'function' &&
337 | typeof define.amd == 'object' &&
338 | define.amd
339 | ) {
340 | define(function() {
341 | return he;
342 | });
343 | } else if (freeExports && !freeExports.nodeType) {
344 | if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
345 | freeModule.exports = he;
346 | } else { // in Narwhal or RingoJS v0.7.0-
347 | for (var key in he) {
348 | has(he, key) && (freeExports[key] = he[key]);
349 | }
350 | }
351 | } else { // in Rhino or a web browser
352 | root.he = he;
353 | }
354 |
355 | }(this));
356 |
--------------------------------------------------------------------------------
/tests/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | he test suite
6 |
7 |
8 |
9 |
10 |
11 |
12 |
20 |
53 |
54 |
55 |
--------------------------------------------------------------------------------