├── .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 [![Build status](https://travis-ci.org/mathiasbynens/he.svg?branch=master)](https://travis-ci.org/mathiasbynens/he) [![Code coverage status](https://codecov.io/github/mathiasbynens/he/coverage.svg?branch=master)](https://codecov.io/github/mathiasbynens/he?branch=master) [![Dependency status](https://gemnasium.com/mathiasbynens/he.svg)](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 | | [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](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 '&#x' + 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 | --------------------------------------------------------------------------------