authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2023-04-26 18:17:20+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-04-26 18:17:20+02:00
logb294bff1a86b58ca461a17e8f0a3b8e8082a308e
tree1a9683cdbf364a9cdc12b85a3f8d36850bc62aeb
parentb55b8e7745316a8e3acd4be8f2e3651d6225c710
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Autodoc: new decl search system (#15475)

New search system is based on a Radix Tree. The Radix Tree contains a shallow list of all decl names (ie no paths), plus some suffixes, split by following the official style guide (eg "HashMapUnmanaged" also produces "MapUnmanaged" and "Unmanaged", same with snake_case and camelCase names). Additionally, the search system uses the decl graph data to recognize hierarchical relationships between decls, allowing you to zero on a target namespace for search. As an example "fs create" will score highe all things related to the creation of files and directories inside of `std.fs`, while still showing (but with lower score) matches from `std.Bulild`. As another example "fs windows" will prioritize windows-related results in `std.fs`, while "windows fs" will prioritize fs-related results in `std.windows`.

4 files changed, 10936 insertions(+), 113 deletions(-)

lib/docs/commonmark.js created+10255
......@@ -0,0 +1,10255 @@
1/* commonmark 0.30.0 https://github.com/commonmark/commonmark.js @license BSD3 */
2(function (global, factory) {
3 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
4 typeof define === 'function' && define.amd ? define(['exports'], factory) :
5 (global = global || self, factory(global.commonmark = {}));
6}(this, (function (exports) { 'use strict';
7
8 function isContainer(node) {
9 switch (node._type) {
10 case "document":
11 case "block_quote":
12 case "list":
13 case "item":
14 case "paragraph":
15 case "heading":
16 case "emph":
17 case "strong":
18 case "link":
19 case "image":
20 case "custom_inline":
21 case "custom_block":
22 return true;
23 default:
24 return false;
25 }
26 }
27
28 var resumeAt = function(node, entering) {
29 this.current = node;
30 this.entering = entering === true;
31 };
32
33 var next = function() {
34 var cur = this.current;
35 var entering = this.entering;
36
37 if (cur === null) {
38 return null;
39 }
40
41 var container = isContainer(cur);
42
43 if (entering && container) {
44 if (cur._firstChild) {
45 this.current = cur._firstChild;
46 this.entering = true;
47 } else {
48 // stay on node but exit
49 this.entering = false;
50 }
51 } else if (cur === this.root) {
52 this.current = null;
53 } else if (cur._next === null) {
54 this.current = cur._parent;
55 this.entering = false;
56 } else {
57 this.current = cur._next;
58 this.entering = true;
59 }
60
61 return { entering: entering, node: cur };
62 };
63
64 var NodeWalker = function(root) {
65 return {
66 current: root,
67 root: root,
68 entering: true,
69 next: next,
70 resumeAt: resumeAt
71 };
72 };
73
74 var Node = function(nodeType, sourcepos) {
75 this._type = nodeType;
76 this._parent = null;
77 this._firstChild = null;
78 this._lastChild = null;
79 this._prev = null;
80 this._next = null;
81 this._sourcepos = sourcepos;
82 this._lastLineBlank = false;
83 this._lastLineChecked = false;
84 this._open = true;
85 this._string_content = null;
86 this._literal = null;
87 this._listData = {};
88 this._info = null;
89 this._destination = null;
90 this._title = null;
91 this._isFenced = false;
92 this._fenceChar = null;
93 this._fenceLength = 0;
94 this._fenceOffset = null;
95 this._level = null;
96 this._onEnter = null;
97 this._onExit = null;
98 };
99
100 var proto = Node.prototype;
101
102 Object.defineProperty(proto, "isContainer", {
103 get: function() {
104 return isContainer(this);
105 }
106 });
107
108 Object.defineProperty(proto, "type", {
109 get: function() {
110 return this._type;
111 }
112 });
113
114 Object.defineProperty(proto, "firstChild", {
115 get: function() {
116 return this._firstChild;
117 }
118 });
119
120 Object.defineProperty(proto, "lastChild", {
121 get: function() {
122 return this._lastChild;
123 }
124 });
125
126 Object.defineProperty(proto, "next", {
127 get: function() {
128 return this._next;
129 }
130 });
131
132 Object.defineProperty(proto, "prev", {
133 get: function() {
134 return this._prev;
135 }
136 });
137
138 Object.defineProperty(proto, "parent", {
139 get: function() {
140 return this._parent;
141 }
142 });
143
144 Object.defineProperty(proto, "sourcepos", {
145 get: function() {
146 return this._sourcepos;
147 }
148 });
149
150 Object.defineProperty(proto, "literal", {
151 get: function() {
152 return this._literal;
153 },
154 set: function(s) {
155 this._literal = s;
156 }
157 });
158
159 Object.defineProperty(proto, "destination", {
160 get: function() {
161 return this._destination;
162 },
163 set: function(s) {
164 this._destination = s;
165 }
166 });
167
168 Object.defineProperty(proto, "title", {
169 get: function() {
170 return this._title;
171 },
172 set: function(s) {
173 this._title = s;
174 }
175 });
176
177 Object.defineProperty(proto, "info", {
178 get: function() {
179 return this._info;
180 },
181 set: function(s) {
182 this._info = s;
183 }
184 });
185
186 Object.defineProperty(proto, "level", {
187 get: function() {
188 return this._level;
189 },
190 set: function(s) {
191 this._level = s;
192 }
193 });
194
195 Object.defineProperty(proto, "listType", {
196 get: function() {
197 return this._listData.type;
198 },
199 set: function(t) {
200 this._listData.type = t;
201 }
202 });
203
204 Object.defineProperty(proto, "listTight", {
205 get: function() {
206 return this._listData.tight;
207 },
208 set: function(t) {
209 this._listData.tight = t;
210 }
211 });
212
213 Object.defineProperty(proto, "listStart", {
214 get: function() {
215 return this._listData.start;
216 },
217 set: function(n) {
218 this._listData.start = n;
219 }
220 });
221
222 Object.defineProperty(proto, "listDelimiter", {
223 get: function() {
224 return this._listData.delimiter;
225 },
226 set: function(delim) {
227 this._listData.delimiter = delim;
228 }
229 });
230
231 Object.defineProperty(proto, "onEnter", {
232 get: function() {
233 return this._onEnter;
234 },
235 set: function(s) {
236 this._onEnter = s;
237 }
238 });
239
240 Object.defineProperty(proto, "onExit", {
241 get: function() {
242 return this._onExit;
243 },
244 set: function(s) {
245 this._onExit = s;
246 }
247 });
248
249 Node.prototype.appendChild = function(child) {
250 child.unlink();
251 child._parent = this;
252 if (this._lastChild) {
253 this._lastChild._next = child;
254 child._prev = this._lastChild;
255 this._lastChild = child;
256 } else {
257 this._firstChild = child;
258 this._lastChild = child;
259 }
260 };
261
262 Node.prototype.prependChild = function(child) {
263 child.unlink();
264 child._parent = this;
265 if (this._firstChild) {
266 this._firstChild._prev = child;
267 child._next = this._firstChild;
268 this._firstChild = child;
269 } else {
270 this._firstChild = child;
271 this._lastChild = child;
272 }
273 };
274
275 Node.prototype.unlink = function() {
276 if (this._prev) {
277 this._prev._next = this._next;
278 } else if (this._parent) {
279 this._parent._firstChild = this._next;
280 }
281 if (this._next) {
282 this._next._prev = this._prev;
283 } else if (this._parent) {
284 this._parent._lastChild = this._prev;
285 }
286 this._parent = null;
287 this._next = null;
288 this._prev = null;
289 };
290
291 Node.prototype.insertAfter = function(sibling) {
292 sibling.unlink();
293 sibling._next = this._next;
294 if (sibling._next) {
295 sibling._next._prev = sibling;
296 }
297 sibling._prev = this;
298 this._next = sibling;
299 sibling._parent = this._parent;
300 if (!sibling._next) {
301 sibling._parent._lastChild = sibling;
302 }
303 };
304
305 Node.prototype.insertBefore = function(sibling) {
306 sibling.unlink();
307 sibling._prev = this._prev;
308 if (sibling._prev) {
309 sibling._prev._next = sibling;
310 }
311 sibling._next = this;
312 this._prev = sibling;
313 sibling._parent = this._parent;
314 if (!sibling._prev) {
315 sibling._parent._firstChild = sibling;
316 }
317 };
318
319 Node.prototype.walker = function() {
320 var walker = new NodeWalker(this);
321 return walker;
322 };
323
324 /* Example of use of walker:
325
326 var walker = w.walker();
327 var event;
328
329 while (event = walker.next()) {
330 console.log(event.entering, event.node.type);
331 }
332
333 */
334
335 var encodeCache = {};
336
337
338 // Create a lookup array where anything but characters in `chars` string
339 // and alphanumeric chars is percent-encoded.
340 //
341 function getEncodeCache(exclude) {
342 var i, ch, cache = encodeCache[exclude];
343 if (cache) { return cache; }
344
345 cache = encodeCache[exclude] = [];
346
347 for (i = 0; i < 128; i++) {
348 ch = String.fromCharCode(i);
349
350 if (/^[0-9a-z]$/i.test(ch)) {
351 // always allow unencoded alphanumeric characters
352 cache.push(ch);
353 } else {
354 cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));
355 }
356 }
357
358 for (i = 0; i < exclude.length; i++) {
359 cache[exclude.charCodeAt(i)] = exclude[i];
360 }
361
362 return cache;
363 }
364
365
366 // Encode unsafe characters with percent-encoding, skipping already
367 // encoded sequences.
368 //
369 // - string - string to encode
370 // - exclude - list of characters to ignore (in addition to a-zA-Z0-9)
371 // - keepEscaped - don't encode '%' in a correct escape sequence (default: true)
372 //
373 function encode(string, exclude, keepEscaped) {
374 var i, l, code, nextCode, cache,
375 result = '';
376
377 if (typeof exclude !== 'string') {
378 // encode(string, keepEscaped)
379 keepEscaped = exclude;
380 exclude = encode.defaultChars;
381 }
382
383 if (typeof keepEscaped === 'undefined') {
384 keepEscaped = true;
385 }
386
387 cache = getEncodeCache(exclude);
388
389 for (i = 0, l = string.length; i < l; i++) {
390 code = string.charCodeAt(i);
391
392 if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {
393 if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {
394 result += string.slice(i, i + 3);
395 i += 2;
396 continue;
397 }
398 }
399
400 if (code < 128) {
401 result += cache[code];
402 continue;
403 }
404
405 if (code >= 0xD800 && code <= 0xDFFF) {
406 if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {
407 nextCode = string.charCodeAt(i + 1);
408 if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
409 result += encodeURIComponent(string[i] + string[i + 1]);
410 i++;
411 continue;
412 }
413 }
414 result += '%EF%BF%BD';
415 continue;
416 }
417
418 result += encodeURIComponent(string[i]);
419 }
420
421 return result;
422 }
423
424 encode.defaultChars = ";/?:@&=+$,-_.!~*'()#";
425 encode.componentChars = "-_.!~*'()";
426
427
428 var encode_1 = encode;
429
430 var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
431
432 function unwrapExports (x) {
433 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
434 }
435
436 function createCommonjsModule(fn, module) {
437 return module = { exports: {} }, fn(module, module.exports), module.exports;
438 }
439
440 function getCjsExportFromNamespace (n) {
441 return n && n['default'] || n;
442 }
443
444 var Aacute = "Á";
445 var aacute = "á";
446 var Abreve = "Ă";
447 var abreve = "ă";
448 var ac = "∾";
449 var acd = "∿";
450 var acE = "∾̳";
451 var Acirc = "Â";
452 var acirc = "â";
453 var acute = "´";
454 var Acy = "А";
455 var acy = "а";
456 var AElig = "Æ";
457 var aelig = "æ";
458 var af = "⁡";
459 var Afr = "𝔄";
460 var afr = "𝔞";
461 var Agrave = "À";
462 var agrave = "à";
463 var alefsym = "ℵ";
464 var aleph = "ℵ";
465 var Alpha = "Α";
466 var alpha = "α";
467 var Amacr = "Ā";
468 var amacr = "ā";
469 var amalg = "⨿";
470 var amp = "&";
471 var AMP = "&";
472 var andand = "⩕";
473 var And = "⩓";
474 var and = "∧";
475 var andd = "⩜";
476 var andslope = "⩘";
477 var andv = "⩚";
478 var ang = "∠";
479 var ange = "⦤";
480 var angle = "∠";
481 var angmsdaa = "⦨";
482 var angmsdab = "⦩";
483 var angmsdac = "⦪";
484 var angmsdad = "⦫";
485 var angmsdae = "⦬";
486 var angmsdaf = "⦭";
487 var angmsdag = "⦮";
488 var angmsdah = "⦯";
489 var angmsd = "∡";
490 var angrt = "∟";
491 var angrtvb = "⊾";
492 var angrtvbd = "⦝";
493 var angsph = "∢";
494 var angst = "Å";
495 var angzarr = "⍼";
496 var Aogon = "Ą";
497 var aogon = "ą";
498 var Aopf = "𝔸";
499 var aopf = "𝕒";
500 var apacir = "⩯";
501 var ap = "≈";
502 var apE = "⩰";
503 var ape = "≊";
504 var apid = "≋";
505 var apos = "'";
506 var ApplyFunction = "⁡";
507 var approx = "≈";
508 var approxeq = "≊";
509 var Aring = "Å";
510 var aring = "å";
511 var Ascr = "𝒜";
512 var ascr = "𝒶";
513 var Assign = "≔";
514 var ast = "*";
515 var asymp = "≈";
516 var asympeq = "≍";
517 var Atilde = "Ã";
518 var atilde = "ã";
519 var Auml = "Ä";
520 var auml = "ä";
521 var awconint = "∳";
522 var awint = "⨑";
523 var backcong = "≌";
524 var backepsilon = "϶";
525 var backprime = "‵";
526 var backsim = "∽";
527 var backsimeq = "⋍";
528 var Backslash = "∖";
529 var Barv = "⫧";
530 var barvee = "⊽";
531 var barwed = "⌅";
532 var Barwed = "⌆";
533 var barwedge = "⌅";
534 var bbrk = "⎵";
535 var bbrktbrk = "⎶";
536 var bcong = "≌";
537 var Bcy = "Б";
538 var bcy = "б";
539 var bdquo = "„";
540 var becaus = "∵";
541 var because = "∵";
542 var Because = "∵";
543 var bemptyv = "⦰";
544 var bepsi = "϶";
545 var bernou = "ℬ";
546 var Bernoullis = "ℬ";
547 var Beta = "Β";
548 var beta = "β";
549 var beth = "ℶ";
550 var between = "≬";
551 var Bfr = "𝔅";
552 var bfr = "𝔟";
553 var bigcap = "⋂";
554 var bigcirc = "◯";
555 var bigcup = "⋃";
556 var bigodot = "⨀";
557 var bigoplus = "⨁";
558 var bigotimes = "⨂";
559 var bigsqcup = "⨆";
560 var bigstar = "★";
561 var bigtriangledown = "▽";
562 var bigtriangleup = "△";
563 var biguplus = "⨄";
564 var bigvee = "⋁";
565 var bigwedge = "⋀";
566 var bkarow = "⤍";
567 var blacklozenge = "⧫";
568 var blacksquare = "▪";
569 var blacktriangle = "▴";
570 var blacktriangledown = "▾";
571 var blacktriangleleft = "◂";
572 var blacktriangleright = "▸";
573 var blank = "␣";
574 var blk12 = "▒";
575 var blk14 = "░";
576 var blk34 = "▓";
577 var block = "█";
578 var bne = "=⃥";
579 var bnequiv = "≡⃥";
580 var bNot = "⫭";
581 var bnot = "⌐";
582 var Bopf = "𝔹";
583 var bopf = "𝕓";
584 var bot = "⊥";
585 var bottom = "⊥";
586 var bowtie = "⋈";
587 var boxbox = "⧉";
588 var boxdl = "┐";
589 var boxdL = "╕";
590 var boxDl = "╖";
591 var boxDL = "╗";
592 var boxdr = "┌";
593 var boxdR = "╒";
594 var boxDr = "╓";
595 var boxDR = "╔";
596 var boxh = "─";
597 var boxH = "═";
598 var boxhd = "┬";
599 var boxHd = "╤";
600 var boxhD = "╥";
601 var boxHD = "╦";
602 var boxhu = "┴";
603 var boxHu = "╧";
604 var boxhU = "╨";
605 var boxHU = "╩";
606 var boxminus = "⊟";
607 var boxplus = "⊞";
608 var boxtimes = "⊠";
609 var boxul = "┘";
610 var boxuL = "╛";
611 var boxUl = "╜";
612 var boxUL = "╝";
613 var boxur = "└";
614 var boxuR = "╘";
615 var boxUr = "╙";
616 var boxUR = "╚";
617 var boxv = "│";
618 var boxV = "║";
619 var boxvh = "┼";
620 var boxvH = "╪";
621 var boxVh = "╫";
622 var boxVH = "╬";
623 var boxvl = "┤";
624 var boxvL = "╡";
625 var boxVl = "╢";
626 var boxVL = "╣";
627 var boxvr = "├";
628 var boxvR = "╞";
629 var boxVr = "╟";
630 var boxVR = "╠";
631 var bprime = "‵";
632 var breve = "˘";
633 var Breve = "˘";
634 var brvbar = "¦";
635 var bscr = "𝒷";
636 var Bscr = "ℬ";
637 var bsemi = "⁏";
638 var bsim = "∽";
639 var bsime = "⋍";
640 var bsolb = "⧅";
641 var bsol = "\\";
642 var bsolhsub = "⟈";
643 var bull = "•";
644 var bullet = "•";
645 var bump = "≎";
646 var bumpE = "⪮";
647 var bumpe = "≏";
648 var Bumpeq = "≎";
649 var bumpeq = "≏";
650 var Cacute = "Ć";
651 var cacute = "ć";
652 var capand = "⩄";
653 var capbrcup = "⩉";
654 var capcap = "⩋";
655 var cap = "∩";
656 var Cap = "⋒";
657 var capcup = "⩇";
658 var capdot = "⩀";
659 var CapitalDifferentialD = "ⅅ";
660 var caps = "∩︀";
661 var caret = "⁁";
662 var caron = "ˇ";
663 var Cayleys = "ℭ";
664 var ccaps = "⩍";
665 var Ccaron = "Č";
666 var ccaron = "č";
667 var Ccedil = "Ç";
668 var ccedil = "ç";
669 var Ccirc = "Ĉ";
670 var ccirc = "ĉ";
671 var Cconint = "∰";
672 var ccups = "⩌";
673 var ccupssm = "⩐";
674 var Cdot = "Ċ";
675 var cdot = "ċ";
676 var cedil = "¸";
677 var Cedilla = "¸";
678 var cemptyv = "⦲";
679 var cent = "¢";
680 var centerdot = "·";
681 var CenterDot = "·";
682 var cfr = "𝔠";
683 var Cfr = "ℭ";
684 var CHcy = "Ч";
685 var chcy = "ч";
686 var check = "✓";
687 var checkmark = "✓";
688 var Chi = "Χ";
689 var chi = "χ";
690 var circ = "ˆ";
691 var circeq = "≗";
692 var circlearrowleft = "↺";
693 var circlearrowright = "↻";
694 var circledast = "⊛";
695 var circledcirc = "⊚";
696 var circleddash = "⊝";
697 var CircleDot = "⊙";
698 var circledR = "®";
699 var circledS = "Ⓢ";
700 var CircleMinus = "⊖";
701 var CirclePlus = "⊕";
702 var CircleTimes = "⊗";
703 var cir = "○";
704 var cirE = "⧃";
705 var cire = "≗";
706 var cirfnint = "⨐";
707 var cirmid = "⫯";
708 var cirscir = "⧂";
709 var ClockwiseContourIntegral = "∲";
710 var CloseCurlyDoubleQuote = "”";
711 var CloseCurlyQuote = "’";
712 var clubs = "♣";
713 var clubsuit = "♣";
714 var colon = ":";
715 var Colon = "∷";
716 var Colone = "⩴";
717 var colone = "≔";
718 var coloneq = "≔";
719 var comma = ",";
720 var commat = "@";
721 var comp = "∁";
722 var compfn = "∘";
723 var complement = "∁";
724 var complexes = "ℂ";
725 var cong = "≅";
726 var congdot = "⩭";
727 var Congruent = "≡";
728 var conint = "∮";
729 var Conint = "∯";
730 var ContourIntegral = "∮";
731 var copf = "𝕔";
732 var Copf = "ℂ";
733 var coprod = "∐";
734 var Coproduct = "∐";
735 var copy = "©";
736 var COPY = "©";
737 var copysr = "℗";
738 var CounterClockwiseContourIntegral = "∳";
739 var crarr = "↵";
740 var cross = "✗";
741 var Cross = "⨯";
742 var Cscr = "𝒞";
743 var cscr = "𝒸";
744 var csub = "⫏";
745 var csube = "⫑";
746 var csup = "⫐";
747 var csupe = "⫒";
748 var ctdot = "⋯";
749 var cudarrl = "⤸";
750 var cudarrr = "⤵";
751 var cuepr = "⋞";
752 var cuesc = "⋟";
753 var cularr = "↶";
754 var cularrp = "⤽";
755 var cupbrcap = "⩈";
756 var cupcap = "⩆";
757 var CupCap = "≍";
758 var cup = "∪";
759 var Cup = "⋓";
760 var cupcup = "⩊";
761 var cupdot = "⊍";
762 var cupor = "⩅";
763 var cups = "∪︀";
764 var curarr = "↷";
765 var curarrm = "⤼";
766 var curlyeqprec = "⋞";
767 var curlyeqsucc = "⋟";
768 var curlyvee = "⋎";
769 var curlywedge = "⋏";
770 var curren = "¤";
771 var curvearrowleft = "↶";
772 var curvearrowright = "↷";
773 var cuvee = "⋎";
774 var cuwed = "⋏";
775 var cwconint = "∲";
776 var cwint = "∱";
777 var cylcty = "⌭";
778 var dagger = "†";
779 var Dagger = "‡";
780 var daleth = "ℸ";
781 var darr = "↓";
782 var Darr = "↡";
783 var dArr = "⇓";
784 var dash = "‐";
785 var Dashv = "⫤";
786 var dashv = "⊣";
787 var dbkarow = "⤏";
788 var dblac = "˝";
789 var Dcaron = "Ď";
790 var dcaron = "ď";
791 var Dcy = "Д";
792 var dcy = "д";
793 var ddagger = "‡";
794 var ddarr = "⇊";
795 var DD = "ⅅ";
796 var dd = "ⅆ";
797 var DDotrahd = "⤑";
798 var ddotseq = "⩷";
799 var deg = "°";
800 var Del = "∇";
801 var Delta = "Δ";
802 var delta = "δ";
803 var demptyv = "⦱";
804 var dfisht = "⥿";
805 var Dfr = "𝔇";
806 var dfr = "𝔡";
807 var dHar = "⥥";
808 var dharl = "⇃";
809 var dharr = "⇂";
810 var DiacriticalAcute = "´";
811 var DiacriticalDot = "˙";
812 var DiacriticalDoubleAcute = "˝";
813 var DiacriticalGrave = "`";
814 var DiacriticalTilde = "˜";
815 var diam = "⋄";
816 var diamond = "⋄";
817 var Diamond = "⋄";
818 var diamondsuit = "♦";
819 var diams = "♦";
820 var die = "¨";
821 var DifferentialD = "ⅆ";
822 var digamma = "ϝ";
823 var disin = "⋲";
824 var div = "÷";
825 var divide = "÷";
826 var divideontimes = "⋇";
827 var divonx = "⋇";
828 var DJcy = "Ђ";
829 var djcy = "ђ";
830 var dlcorn = "⌞";
831 var dlcrop = "⌍";
832 var dollar = "$";
833 var Dopf = "𝔻";
834 var dopf = "𝕕";
835 var Dot = "¨";
836 var dot = "˙";
837 var DotDot = "⃜";
838 var doteq = "≐";
839 var doteqdot = "≑";
840 var DotEqual = "≐";
841 var dotminus = "∸";
842 var dotplus = "∔";
843 var dotsquare = "⊡";
844 var doublebarwedge = "⌆";
845 var DoubleContourIntegral = "∯";
846 var DoubleDot = "¨";
847 var DoubleDownArrow = "⇓";
848 var DoubleLeftArrow = "⇐";
849 var DoubleLeftRightArrow = "⇔";
850 var DoubleLeftTee = "⫤";
851 var DoubleLongLeftArrow = "⟸";
852 var DoubleLongLeftRightArrow = "⟺";
853 var DoubleLongRightArrow = "⟹";
854 var DoubleRightArrow = "⇒";
855 var DoubleRightTee = "⊨";
856 var DoubleUpArrow = "⇑";
857 var DoubleUpDownArrow = "⇕";
858 var DoubleVerticalBar = "∥";
859 var DownArrowBar = "⤓";
860 var downarrow = "↓";
861 var DownArrow = "↓";
862 var Downarrow = "⇓";
863 var DownArrowUpArrow = "⇵";
864 var DownBreve = "̑";
865 var downdownarrows = "⇊";
866 var downharpoonleft = "⇃";
867 var downharpoonright = "⇂";
868 var DownLeftRightVector = "⥐";
869 var DownLeftTeeVector = "⥞";
870 var DownLeftVectorBar = "⥖";
871 var DownLeftVector = "↽";
872 var DownRightTeeVector = "⥟";
873 var DownRightVectorBar = "⥗";
874 var DownRightVector = "⇁";
875 var DownTeeArrow = "↧";
876 var DownTee = "⊤";
877 var drbkarow = "⤐";
878 var drcorn = "⌟";
879 var drcrop = "⌌";
880 var Dscr = "𝒟";
881 var dscr = "𝒹";
882 var DScy = "Ѕ";
883 var dscy = "ѕ";
884 var dsol = "⧶";
885 var Dstrok = "Đ";
886 var dstrok = "đ";
887 var dtdot = "⋱";
888 var dtri = "▿";
889 var dtrif = "▾";
890 var duarr = "⇵";
891 var duhar = "⥯";
892 var dwangle = "⦦";
893 var DZcy = "Џ";
894 var dzcy = "џ";
895 var dzigrarr = "⟿";
896 var Eacute = "É";
897 var eacute = "é";
898 var easter = "⩮";
899 var Ecaron = "Ě";
900 var ecaron = "ě";
901 var Ecirc = "Ê";
902 var ecirc = "ê";
903 var ecir = "≖";
904 var ecolon = "≕";
905 var Ecy = "Э";
906 var ecy = "э";
907 var eDDot = "⩷";
908 var Edot = "Ė";
909 var edot = "ė";
910 var eDot = "≑";
911 var ee = "ⅇ";
912 var efDot = "≒";
913 var Efr = "𝔈";
914 var efr = "𝔢";
915 var eg = "⪚";
916 var Egrave = "È";
917 var egrave = "è";
918 var egs = "⪖";
919 var egsdot = "⪘";
920 var el = "⪙";
921 var Element = "∈";
922 var elinters = "⏧";
923 var ell = "ℓ";
924 var els = "⪕";
925 var elsdot = "⪗";
926 var Emacr = "Ē";
927 var emacr = "ē";
928 var empty = "∅";
929 var emptyset = "∅";
930 var EmptySmallSquare = "◻";
931 var emptyv = "∅";
932 var EmptyVerySmallSquare = "▫";
933 var emsp13 = " ";
934 var emsp14 = " ";
935 var emsp = " ";
936 var ENG = "Ŋ";
937 var eng = "ŋ";
938 var ensp = " ";
939 var Eogon = "Ę";
940 var eogon = "ę";
941 var Eopf = "𝔼";
942 var eopf = "𝕖";
943 var epar = "⋕";
944 var eparsl = "⧣";
945 var eplus = "⩱";
946 var epsi = "ε";
947 var Epsilon = "Ε";
948 var epsilon = "ε";
949 var epsiv = "ϵ";
950 var eqcirc = "≖";
951 var eqcolon = "≕";
952 var eqsim = "≂";
953 var eqslantgtr = "⪖";
954 var eqslantless = "⪕";
955 var Equal = "⩵";
956 var equals = "=";
957 var EqualTilde = "≂";
958 var equest = "≟";
959 var Equilibrium = "⇌";
960 var equiv = "≡";
961 var equivDD = "⩸";
962 var eqvparsl = "⧥";
963 var erarr = "⥱";
964 var erDot = "≓";
965 var escr = "ℯ";
966 var Escr = "ℰ";
967 var esdot = "≐";
968 var Esim = "⩳";
969 var esim = "≂";
970 var Eta = "Η";
971 var eta = "η";
972 var ETH = "Ð";
973 var eth = "ð";
974 var Euml = "Ë";
975 var euml = "ë";
976 var euro = "€";
977 var excl = "!";
978 var exist = "∃";
979 var Exists = "∃";
980 var expectation = "ℰ";
981 var exponentiale = "ⅇ";
982 var ExponentialE = "ⅇ";
983 var fallingdotseq = "≒";
984 var Fcy = "Ф";
985 var fcy = "ф";
986 var female = "♀";
987 var ffilig = "ffi";
988 var fflig = "ff";
989 var ffllig = "ffl";
990 var Ffr = "𝔉";
991 var ffr = "𝔣";
992 var filig = "fi";
993 var FilledSmallSquare = "◼";
994 var FilledVerySmallSquare = "▪";
995 var fjlig = "fj";
996 var flat = "♭";
997 var fllig = "fl";
998 var fltns = "▱";
999 var fnof = "ƒ";
1000 var Fopf = "𝔽";
1001 var fopf = "𝕗";
1002 var forall = "∀";
1003 var ForAll = "∀";
1004 var fork = "⋔";
1005 var forkv = "⫙";
1006 var Fouriertrf = "ℱ";
1007 var fpartint = "⨍";
1008 var frac12 = "½";
1009 var frac13 = "⅓";
1010 var frac14 = "¼";
1011 var frac15 = "⅕";
1012 var frac16 = "⅙";
1013 var frac18 = "⅛";
1014 var frac23 = "⅔";
1015 var frac25 = "⅖";
1016 var frac34 = "¾";
1017 var frac35 = "⅗";
1018 var frac38 = "⅜";
1019 var frac45 = "⅘";
1020 var frac56 = "⅚";
1021 var frac58 = "⅝";
1022 var frac78 = "⅞";
1023 var frasl = "⁄";
1024 var frown = "⌢";
1025 var fscr = "𝒻";
1026 var Fscr = "ℱ";
1027 var gacute = "ǵ";
1028 var Gamma = "Γ";
1029 var gamma = "γ";
1030 var Gammad = "Ϝ";
1031 var gammad = "ϝ";
1032 var gap = "⪆";
1033 var Gbreve = "Ğ";
1034 var gbreve = "ğ";
1035 var Gcedil = "Ģ";
1036 var Gcirc = "Ĝ";
1037 var gcirc = "ĝ";
1038 var Gcy = "Г";
1039 var gcy = "г";
1040 var Gdot = "Ġ";
1041 var gdot = "ġ";
1042 var ge = "≥";
1043 var gE = "≧";
1044 var gEl = "⪌";
1045 var gel = "⋛";
1046 var geq = "≥";
1047 var geqq = "≧";
1048 var geqslant = "⩾";
1049 var gescc = "⪩";
1050 var ges = "⩾";
1051 var gesdot = "⪀";
1052 var gesdoto = "⪂";
1053 var gesdotol = "⪄";
1054 var gesl = "⋛︀";
1055 var gesles = "⪔";
1056 var Gfr = "𝔊";
1057 var gfr = "𝔤";
1058 var gg = "≫";
1059 var Gg = "⋙";
1060 var ggg = "⋙";
1061 var gimel = "ℷ";
1062 var GJcy = "Ѓ";
1063 var gjcy = "ѓ";
1064 var gla = "⪥";
1065 var gl = "≷";
1066 var glE = "⪒";
1067 var glj = "⪤";
1068 var gnap = "⪊";
1069 var gnapprox = "⪊";
1070 var gne = "⪈";
1071 var gnE = "≩";
1072 var gneq = "⪈";
1073 var gneqq = "≩";
1074 var gnsim = "⋧";
1075 var Gopf = "𝔾";
1076 var gopf = "𝕘";
1077 var grave = "`";
1078 var GreaterEqual = "≥";
1079 var GreaterEqualLess = "⋛";
1080 var GreaterFullEqual = "≧";
1081 var GreaterGreater = "⪢";
1082 var GreaterLess = "≷";
1083 var GreaterSlantEqual = "⩾";
1084 var GreaterTilde = "≳";
1085 var Gscr = "𝒢";
1086 var gscr = "ℊ";
1087 var gsim = "≳";
1088 var gsime = "⪎";
1089 var gsiml = "⪐";
1090 var gtcc = "⪧";
1091 var gtcir = "⩺";
1092 var gt = ">";
1093 var GT = ">";
1094 var Gt = "≫";
1095 var gtdot = "⋗";
1096 var gtlPar = "⦕";
1097 var gtquest = "⩼";
1098 var gtrapprox = "⪆";
1099 var gtrarr = "⥸";
1100 var gtrdot = "⋗";
1101 var gtreqless = "⋛";
1102 var gtreqqless = "⪌";
1103 var gtrless = "≷";
1104 var gtrsim = "≳";
1105 var gvertneqq = "≩︀";
1106 var gvnE = "≩︀";
1107 var Hacek = "ˇ";
1108 var hairsp = " ";
1109 var half = "½";
1110 var hamilt = "ℋ";
1111 var HARDcy = "Ъ";
1112 var hardcy = "ъ";
1113 var harrcir = "⥈";
1114 var harr = "↔";
1115 var hArr = "⇔";
1116 var harrw = "↭";
1117 var Hat = "^";
1118 var hbar = "ℏ";
1119 var Hcirc = "Ĥ";
1120 var hcirc = "ĥ";
1121 var hearts = "♥";
1122 var heartsuit = "♥";
1123 var hellip = "…";
1124 var hercon = "⊹";
1125 var hfr = "𝔥";
1126 var Hfr = "ℌ";
1127 var HilbertSpace = "ℋ";
1128 var hksearow = "⤥";
1129 var hkswarow = "⤦";
1130 var hoarr = "⇿";
1131 var homtht = "∻";
1132 var hookleftarrow = "↩";
1133 var hookrightarrow = "↪";
1134 var hopf = "𝕙";
1135 var Hopf = "ℍ";
1136 var horbar = "―";
1137 var HorizontalLine = "─";
1138 var hscr = "𝒽";
1139 var Hscr = "ℋ";
1140 var hslash = "ℏ";
1141 var Hstrok = "Ħ";
1142 var hstrok = "ħ";
1143 var HumpDownHump = "≎";
1144 var HumpEqual = "≏";
1145 var hybull = "⁃";
1146 var hyphen = "‐";
1147 var Iacute = "Í";
1148 var iacute = "í";
1149 var ic = "⁣";
1150 var Icirc = "Î";
1151 var icirc = "î";
1152 var Icy = "И";
1153 var icy = "и";
1154 var Idot = "İ";
1155 var IEcy = "Е";
1156 var iecy = "е";
1157 var iexcl = "¡";
1158 var iff = "⇔";
1159 var ifr = "𝔦";
1160 var Ifr = "ℑ";
1161 var Igrave = "Ì";
1162 var igrave = "ì";
1163 var ii = "ⅈ";
1164 var iiiint = "⨌";
1165 var iiint = "∭";
1166 var iinfin = "⧜";
1167 var iiota = "℩";
1168 var IJlig = "IJ";
1169 var ijlig = "ij";
1170 var Imacr = "Ī";
1171 var imacr = "ī";
1172 var image = "ℑ";
1173 var ImaginaryI = "ⅈ";
1174 var imagline = "ℐ";
1175 var imagpart = "ℑ";
1176 var imath = "ı";
1177 var Im = "ℑ";
1178 var imof = "⊷";
1179 var imped = "Ƶ";
1180 var Implies = "⇒";
1181 var incare = "℅";
1182 var infin = "∞";
1183 var infintie = "⧝";
1184 var inodot = "ı";
1185 var intcal = "⊺";
1186 var int = "∫";
1187 var Int = "∬";
1188 var integers = "ℤ";
1189 var Integral = "∫";
1190 var intercal = "⊺";
1191 var Intersection = "⋂";
1192 var intlarhk = "⨗";
1193 var intprod = "⨼";
1194 var InvisibleComma = "⁣";
1195 var InvisibleTimes = "⁢";
1196 var IOcy = "Ё";
1197 var iocy = "ё";
1198 var Iogon = "Į";
1199 var iogon = "į";
1200 var Iopf = "𝕀";
1201 var iopf = "𝕚";
1202 var Iota = "Ι";
1203 var iota = "ι";
1204 var iprod = "⨼";
1205 var iquest = "¿";
1206 var iscr = "𝒾";
1207 var Iscr = "ℐ";
1208 var isin = "∈";
1209 var isindot = "⋵";
1210 var isinE = "⋹";
1211 var isins = "⋴";
1212 var isinsv = "⋳";
1213 var isinv = "∈";
1214 var it = "⁢";
1215 var Itilde = "Ĩ";
1216 var itilde = "ĩ";
1217 var Iukcy = "І";
1218 var iukcy = "і";
1219 var Iuml = "Ï";
1220 var iuml = "ï";
1221 var Jcirc = "Ĵ";
1222 var jcirc = "ĵ";
1223 var Jcy = "Й";
1224 var jcy = "й";
1225 var Jfr = "𝔍";
1226 var jfr = "𝔧";
1227 var jmath = "ȷ";
1228 var Jopf = "𝕁";
1229 var jopf = "𝕛";
1230 var Jscr = "𝒥";
1231 var jscr = "𝒿";
1232 var Jsercy = "Ј";
1233 var jsercy = "ј";
1234 var Jukcy = "Є";
1235 var jukcy = "є";
1236 var Kappa = "Κ";
1237 var kappa = "κ";
1238 var kappav = "ϰ";
1239 var Kcedil = "Ķ";
1240 var kcedil = "ķ";
1241 var Kcy = "К";
1242 var kcy = "к";
1243 var Kfr = "𝔎";
1244 var kfr = "𝔨";
1245 var kgreen = "ĸ";
1246 var KHcy = "Х";
1247 var khcy = "х";
1248 var KJcy = "Ќ";
1249 var kjcy = "ќ";
1250 var Kopf = "𝕂";
1251 var kopf = "𝕜";
1252 var Kscr = "𝒦";
1253 var kscr = "𝓀";
1254 var lAarr = "⇚";
1255 var Lacute = "Ĺ";
1256 var lacute = "ĺ";
1257 var laemptyv = "⦴";
1258 var lagran = "ℒ";
1259 var Lambda = "Λ";
1260 var lambda = "λ";
1261 var lang = "⟨";
1262 var Lang = "⟪";
1263 var langd = "⦑";
1264 var langle = "⟨";
1265 var lap = "⪅";
1266 var Laplacetrf = "ℒ";
1267 var laquo = "«";
1268 var larrb = "⇤";
1269 var larrbfs = "⤟";
1270 var larr = "←";
1271 var Larr = "↞";
1272 var lArr = "⇐";
1273 var larrfs = "⤝";
1274 var larrhk = "↩";
1275 var larrlp = "↫";
1276 var larrpl = "⤹";
1277 var larrsim = "⥳";
1278 var larrtl = "↢";
1279 var latail = "⤙";
1280 var lAtail = "⤛";
1281 var lat = "⪫";
1282 var late = "⪭";
1283 var lates = "⪭︀";
1284 var lbarr = "⤌";
1285 var lBarr = "⤎";
1286 var lbbrk = "❲";
1287 var lbrace = "{";
1288 var lbrack = "[";
1289 var lbrke = "⦋";
1290 var lbrksld = "⦏";
1291 var lbrkslu = "⦍";
1292 var Lcaron = "Ľ";
1293 var lcaron = "ľ";
1294 var Lcedil = "Ļ";
1295 var lcedil = "ļ";
1296 var lceil = "⌈";
1297 var lcub = "{";
1298 var Lcy = "Л";
1299 var lcy = "л";
1300 var ldca = "⤶";
1301 var ldquo = "“";
1302 var ldquor = "„";
1303 var ldrdhar = "⥧";
1304 var ldrushar = "⥋";
1305 var ldsh = "↲";
1306 var le = "≤";
1307 var lE = "≦";
1308 var LeftAngleBracket = "⟨";
1309 var LeftArrowBar = "⇤";
1310 var leftarrow = "←";
1311 var LeftArrow = "←";
1312 var Leftarrow = "⇐";
1313 var LeftArrowRightArrow = "⇆";
1314 var leftarrowtail = "↢";
1315 var LeftCeiling = "⌈";
1316 var LeftDoubleBracket = "⟦";
1317 var LeftDownTeeVector = "⥡";
1318 var LeftDownVectorBar = "⥙";
1319 var LeftDownVector = "⇃";
1320 var LeftFloor = "⌊";
1321 var leftharpoondown = "↽";
1322 var leftharpoonup = "↼";
1323 var leftleftarrows = "⇇";
1324 var leftrightarrow = "↔";
1325 var LeftRightArrow = "↔";
1326 var Leftrightarrow = "⇔";
1327 var leftrightarrows = "⇆";
1328 var leftrightharpoons = "⇋";
1329 var leftrightsquigarrow = "↭";
1330 var LeftRightVector = "⥎";
1331 var LeftTeeArrow = "↤";
1332 var LeftTee = "⊣";
1333 var LeftTeeVector = "⥚";
1334 var leftthreetimes = "⋋";
1335 var LeftTriangleBar = "⧏";
1336 var LeftTriangle = "⊲";
1337 var LeftTriangleEqual = "⊴";
1338 var LeftUpDownVector = "⥑";
1339 var LeftUpTeeVector = "⥠";
1340 var LeftUpVectorBar = "⥘";
1341 var LeftUpVector = "↿";
1342 var LeftVectorBar = "⥒";
1343 var LeftVector = "↼";
1344 var lEg = "⪋";
1345 var leg = "⋚";
1346 var leq = "≤";
1347 var leqq = "≦";
1348 var leqslant = "⩽";
1349 var lescc = "⪨";
1350 var les = "⩽";
1351 var lesdot = "⩿";
1352 var lesdoto = "⪁";
1353 var lesdotor = "⪃";
1354 var lesg = "⋚︀";
1355 var lesges = "⪓";
1356 var lessapprox = "⪅";
1357 var lessdot = "⋖";
1358 var lesseqgtr = "⋚";
1359 var lesseqqgtr = "⪋";
1360 var LessEqualGreater = "⋚";
1361 var LessFullEqual = "≦";
1362 var LessGreater = "≶";
1363 var lessgtr = "≶";
1364 var LessLess = "⪡";
1365 var lesssim = "≲";
1366 var LessSlantEqual = "⩽";
1367 var LessTilde = "≲";
1368 var lfisht = "⥼";
1369 var lfloor = "⌊";
1370 var Lfr = "𝔏";
1371 var lfr = "𝔩";
1372 var lg = "≶";
1373 var lgE = "⪑";
1374 var lHar = "⥢";
1375 var lhard = "↽";
1376 var lharu = "↼";
1377 var lharul = "⥪";
1378 var lhblk = "▄";
1379 var LJcy = "Љ";
1380 var ljcy = "љ";
1381 var llarr = "⇇";
1382 var ll = "≪";
1383 var Ll = "⋘";
1384 var llcorner = "⌞";
1385 var Lleftarrow = "⇚";
1386 var llhard = "⥫";
1387 var lltri = "◺";
1388 var Lmidot = "Ŀ";
1389 var lmidot = "ŀ";
1390 var lmoustache = "⎰";
1391 var lmoust = "⎰";
1392 var lnap = "⪉";
1393 var lnapprox = "⪉";
1394 var lne = "⪇";
1395 var lnE = "≨";
1396 var lneq = "⪇";
1397 var lneqq = "≨";
1398 var lnsim = "⋦";
1399 var loang = "⟬";
1400 var loarr = "⇽";
1401 var lobrk = "⟦";
1402 var longleftarrow = "⟵";
1403 var LongLeftArrow = "⟵";
1404 var Longleftarrow = "⟸";
1405 var longleftrightarrow = "⟷";
1406 var LongLeftRightArrow = "⟷";
1407 var Longleftrightarrow = "⟺";
1408 var longmapsto = "⟼";
1409 var longrightarrow = "⟶";
1410 var LongRightArrow = "⟶";
1411 var Longrightarrow = "⟹";
1412 var looparrowleft = "↫";
1413 var looparrowright = "↬";
1414 var lopar = "⦅";
1415 var Lopf = "𝕃";
1416 var lopf = "𝕝";
1417 var loplus = "⨭";
1418 var lotimes = "⨴";
1419 var lowast = "∗";
1420 var lowbar = "_";
1421 var LowerLeftArrow = "↙";
1422 var LowerRightArrow = "↘";
1423 var loz = "◊";
1424 var lozenge = "◊";
1425 var lozf = "⧫";
1426 var lpar = "(";
1427 var lparlt = "⦓";
1428 var lrarr = "⇆";
1429 var lrcorner = "⌟";
1430 var lrhar = "⇋";
1431 var lrhard = "⥭";
1432 var lrm = "‎";
1433 var lrtri = "⊿";
1434 var lsaquo = "‹";
1435 var lscr = "𝓁";
1436 var Lscr = "ℒ";
1437 var lsh = "↰";
1438 var Lsh = "↰";
1439 var lsim = "≲";
1440 var lsime = "⪍";
1441 var lsimg = "⪏";
1442 var lsqb = "[";
1443 var lsquo = "‘";
1444 var lsquor = "‚";
1445 var Lstrok = "Ł";
1446 var lstrok = "ł";
1447 var ltcc = "⪦";
1448 var ltcir = "⩹";
1449 var lt = "<";
1450 var LT = "<";
1451 var Lt = "≪";
1452 var ltdot = "⋖";
1453 var lthree = "⋋";
1454 var ltimes = "⋉";
1455 var ltlarr = "⥶";
1456 var ltquest = "⩻";
1457 var ltri = "◃";
1458 var ltrie = "⊴";
1459 var ltrif = "◂";
1460 var ltrPar = "⦖";
1461 var lurdshar = "⥊";
1462 var luruhar = "⥦";
1463 var lvertneqq = "≨︀";
1464 var lvnE = "≨︀";
1465 var macr = "¯";
1466 var male = "♂";
1467 var malt = "✠";
1468 var maltese = "✠";
1469 var map = "↦";
1470 var mapsto = "↦";
1471 var mapstodown = "↧";
1472 var mapstoleft = "↤";
1473 var mapstoup = "↥";
1474 var marker = "▮";
1475 var mcomma = "⨩";
1476 var Mcy = "М";
1477 var mcy = "м";
1478 var mdash = "—";
1479 var mDDot = "∺";
1480 var measuredangle = "∡";
1481 var MediumSpace = " ";
1482 var Mellintrf = "ℳ";
1483 var Mfr = "𝔐";
1484 var mfr = "𝔪";
1485 var mho = "℧";
1486 var micro = "µ";
1487 var midast = "*";
1488 var midcir = "⫰";
1489 var mid = "∣";
1490 var middot = "·";
1491 var minusb = "⊟";
1492 var minus = "−";
1493 var minusd = "∸";
1494 var minusdu = "⨪";
1495 var MinusPlus = "∓";
1496 var mlcp = "⫛";
1497 var mldr = "…";
1498 var mnplus = "∓";
1499 var models = "⊧";
1500 var Mopf = "𝕄";
1501 var mopf = "𝕞";
1502 var mp = "∓";
1503 var mscr = "𝓂";
1504 var Mscr = "ℳ";
1505 var mstpos = "∾";
1506 var Mu = "Μ";
1507 var mu = "μ";
1508 var multimap = "⊸";
1509 var mumap = "⊸";
1510 var nabla = "∇";
1511 var Nacute = "Ń";
1512 var nacute = "ń";
1513 var nang = "∠⃒";
1514 var nap = "≉";
1515 var napE = "⩰̸";
1516 var napid = "≋̸";
1517 var napos = "ʼn";
1518 var napprox = "≉";
1519 var natural = "♮";
1520 var naturals = "ℕ";
1521 var natur = "♮";
1522 var nbsp = " ";
1523 var nbump = "≎̸";
1524 var nbumpe = "≏̸";
1525 var ncap = "⩃";
1526 var Ncaron = "Ň";
1527 var ncaron = "ň";
1528 var Ncedil = "Ņ";
1529 var ncedil = "ņ";
1530 var ncong = "≇";
1531 var ncongdot = "⩭̸";
1532 var ncup = "⩂";
1533 var Ncy = "Н";
1534 var ncy = "н";
1535 var ndash = "–";
1536 var nearhk = "⤤";
1537 var nearr = "↗";
1538 var neArr = "⇗";
1539 var nearrow = "↗";
1540 var ne = "≠";
1541 var nedot = "≐̸";
1542 var NegativeMediumSpace = "​";
1543 var NegativeThickSpace = "​";
1544 var NegativeThinSpace = "​";
1545 var NegativeVeryThinSpace = "​";
1546 var nequiv = "≢";
1547 var nesear = "⤨";
1548 var nesim = "≂̸";
1549 var NestedGreaterGreater = "≫";
1550 var NestedLessLess = "≪";
1551 var NewLine = "\n";
1552 var nexist = "∄";
1553 var nexists = "∄";
1554 var Nfr = "𝔑";
1555 var nfr = "𝔫";
1556 var ngE = "≧̸";
1557 var nge = "≱";
1558 var ngeq = "≱";
1559 var ngeqq = "≧̸";
1560 var ngeqslant = "⩾̸";
1561 var nges = "⩾̸";
1562 var nGg = "⋙̸";
1563 var ngsim = "≵";
1564 var nGt = "≫⃒";
1565 var ngt = "≯";
1566 var ngtr = "≯";
1567 var nGtv = "≫̸";
1568 var nharr = "↮";
1569 var nhArr = "⇎";
1570 var nhpar = "⫲";
1571 var ni = "∋";
1572 var nis = "⋼";
1573 var nisd = "⋺";
1574 var niv = "∋";
1575 var NJcy = "Њ";
1576 var njcy = "њ";
1577 var nlarr = "↚";
1578 var nlArr = "⇍";
1579 var nldr = "‥";
1580 var nlE = "≦̸";
1581 var nle = "≰";
1582 var nleftarrow = "↚";
1583 var nLeftarrow = "⇍";
1584 var nleftrightarrow = "↮";
1585 var nLeftrightarrow = "⇎";
1586 var nleq = "≰";
1587 var nleqq = "≦̸";
1588 var nleqslant = "⩽̸";
1589 var nles = "⩽̸";
1590 var nless = "≮";
1591 var nLl = "⋘̸";
1592 var nlsim = "≴";
1593 var nLt = "≪⃒";
1594 var nlt = "≮";
1595 var nltri = "⋪";
1596 var nltrie = "⋬";
1597 var nLtv = "≪̸";
1598 var nmid = "∤";
1599 var NoBreak = "⁠";
1600 var NonBreakingSpace = " ";
1601 var nopf = "𝕟";
1602 var Nopf = "ℕ";
1603 var Not = "⫬";
1604 var not = "¬";
1605 var NotCongruent = "≢";
1606 var NotCupCap = "≭";
1607 var NotDoubleVerticalBar = "∦";
1608 var NotElement = "∉";
1609 var NotEqual = "≠";
1610 var NotEqualTilde = "≂̸";
1611 var NotExists = "∄";
1612 var NotGreater = "≯";
1613 var NotGreaterEqual = "≱";
1614 var NotGreaterFullEqual = "≧̸";
1615 var NotGreaterGreater = "≫̸";
1616 var NotGreaterLess = "≹";
1617 var NotGreaterSlantEqual = "⩾̸";
1618 var NotGreaterTilde = "≵";
1619 var NotHumpDownHump = "≎̸";
1620 var NotHumpEqual = "≏̸";
1621 var notin = "∉";
1622 var notindot = "⋵̸";
1623 var notinE = "⋹̸";
1624 var notinva = "∉";
1625 var notinvb = "⋷";
1626 var notinvc = "⋶";
1627 var NotLeftTriangleBar = "⧏̸";
1628 var NotLeftTriangle = "⋪";
1629 var NotLeftTriangleEqual = "⋬";
1630 var NotLess = "≮";
1631 var NotLessEqual = "≰";
1632 var NotLessGreater = "≸";
1633 var NotLessLess = "≪̸";
1634 var NotLessSlantEqual = "⩽̸";
1635 var NotLessTilde = "≴";
1636 var NotNestedGreaterGreater = "⪢̸";
1637 var NotNestedLessLess = "⪡̸";
1638 var notni = "∌";
1639 var notniva = "∌";
1640 var notnivb = "⋾";
1641 var notnivc = "⋽";
1642 var NotPrecedes = "⊀";
1643 var NotPrecedesEqual = "⪯̸";
1644 var NotPrecedesSlantEqual = "⋠";
1645 var NotReverseElement = "∌";
1646 var NotRightTriangleBar = "⧐̸";
1647 var NotRightTriangle = "⋫";
1648 var NotRightTriangleEqual = "⋭";
1649 var NotSquareSubset = "⊏̸";
1650 var NotSquareSubsetEqual = "⋢";
1651 var NotSquareSuperset = "⊐̸";
1652 var NotSquareSupersetEqual = "⋣";
1653 var NotSubset = "⊂⃒";
1654 var NotSubsetEqual = "⊈";
1655 var NotSucceeds = "⊁";
1656 var NotSucceedsEqual = "⪰̸";
1657 var NotSucceedsSlantEqual = "⋡";
1658 var NotSucceedsTilde = "≿̸";
1659 var NotSuperset = "⊃⃒";
1660 var NotSupersetEqual = "⊉";
1661 var NotTilde = "≁";
1662 var NotTildeEqual = "≄";
1663 var NotTildeFullEqual = "≇";
1664 var NotTildeTilde = "≉";
1665 var NotVerticalBar = "∤";
1666 var nparallel = "∦";
1667 var npar = "∦";
1668 var nparsl = "⫽⃥";
1669 var npart = "∂̸";
1670 var npolint = "⨔";
1671 var npr = "⊀";
1672 var nprcue = "⋠";
1673 var nprec = "⊀";
1674 var npreceq = "⪯̸";
1675 var npre = "⪯̸";
1676 var nrarrc = "⤳̸";
1677 var nrarr = "↛";
1678 var nrArr = "⇏";
1679 var nrarrw = "↝̸";
1680 var nrightarrow = "↛";
1681 var nRightarrow = "⇏";
1682 var nrtri = "⋫";
1683 var nrtrie = "⋭";
1684 var nsc = "⊁";
1685 var nsccue = "⋡";
1686 var nsce = "⪰̸";
1687 var Nscr = "𝒩";
1688 var nscr = "𝓃";
1689 var nshortmid = "∤";
1690 var nshortparallel = "∦";
1691 var nsim = "≁";
1692 var nsime = "≄";
1693 var nsimeq = "≄";
1694 var nsmid = "∤";
1695 var nspar = "∦";
1696 var nsqsube = "⋢";
1697 var nsqsupe = "⋣";
1698 var nsub = "⊄";
1699 var nsubE = "⫅̸";
1700 var nsube = "⊈";
1701 var nsubset = "⊂⃒";
1702 var nsubseteq = "⊈";
1703 var nsubseteqq = "⫅̸";
1704 var nsucc = "⊁";
1705 var nsucceq = "⪰̸";
1706 var nsup = "⊅";
1707 var nsupE = "⫆̸";
1708 var nsupe = "⊉";
1709 var nsupset = "⊃⃒";
1710 var nsupseteq = "⊉";
1711 var nsupseteqq = "⫆̸";
1712 var ntgl = "≹";
1713 var Ntilde = "Ñ";
1714 var ntilde = "ñ";
1715 var ntlg = "≸";
1716 var ntriangleleft = "⋪";
1717 var ntrianglelefteq = "⋬";
1718 var ntriangleright = "⋫";
1719 var ntrianglerighteq = "⋭";
1720 var Nu = "Ν";
1721 var nu = "ν";
1722 var num = "#";
1723 var numero = "№";
1724 var numsp = " ";
1725 var nvap = "≍⃒";
1726 var nvdash = "⊬";
1727 var nvDash = "⊭";
1728 var nVdash = "⊮";
1729 var nVDash = "⊯";
1730 var nvge = "≥⃒";
1731 var nvgt = ">⃒";
1732 var nvHarr = "⤄";
1733 var nvinfin = "⧞";
1734 var nvlArr = "⤂";
1735 var nvle = "≤⃒";
1736 var nvlt = "<⃒";
1737 var nvltrie = "⊴⃒";
1738 var nvrArr = "⤃";
1739 var nvrtrie = "⊵⃒";
1740 var nvsim = "∼⃒";
1741 var nwarhk = "⤣";
1742 var nwarr = "↖";
1743 var nwArr = "⇖";
1744 var nwarrow = "↖";
1745 var nwnear = "⤧";
1746 var Oacute = "Ó";
1747 var oacute = "ó";
1748 var oast = "⊛";
1749 var Ocirc = "Ô";
1750 var ocirc = "ô";
1751 var ocir = "⊚";
1752 var Ocy = "О";
1753 var ocy = "о";
1754 var odash = "⊝";
1755 var Odblac = "Ő";
1756 var odblac = "ő";
1757 var odiv = "⨸";
1758 var odot = "⊙";
1759 var odsold = "⦼";
1760 var OElig = "Œ";
1761 var oelig = "œ";
1762 var ofcir = "⦿";
1763 var Ofr = "𝔒";
1764 var ofr = "𝔬";
1765 var ogon = "˛";
1766 var Ograve = "Ò";
1767 var ograve = "ò";
1768 var ogt = "⧁";
1769 var ohbar = "⦵";
1770 var ohm = "Ω";
1771 var oint = "∮";
1772 var olarr = "↺";
1773 var olcir = "⦾";
1774 var olcross = "⦻";
1775 var oline = "‾";
1776 var olt = "⧀";
1777 var Omacr = "Ō";
1778 var omacr = "ō";
1779 var Omega = "Ω";
1780 var omega = "ω";
1781 var Omicron = "Ο";
1782 var omicron = "ο";
1783 var omid = "⦶";
1784 var ominus = "⊖";
1785 var Oopf = "𝕆";
1786 var oopf = "𝕠";
1787 var opar = "⦷";
1788 var OpenCurlyDoubleQuote = "“";
1789 var OpenCurlyQuote = "‘";
1790 var operp = "⦹";
1791 var oplus = "⊕";
1792 var orarr = "↻";
1793 var Or = "⩔";
1794 var or = "∨";
1795 var ord = "⩝";
1796 var order = "ℴ";
1797 var orderof = "ℴ";
1798 var ordf = "ª";
1799 var ordm = "º";
1800 var origof = "⊶";
1801 var oror = "⩖";
1802 var orslope = "⩗";
1803 var orv = "⩛";
1804 var oS = "Ⓢ";
1805 var Oscr = "𝒪";
1806 var oscr = "ℴ";
1807 var Oslash = "Ø";
1808 var oslash = "ø";
1809 var osol = "⊘";
1810 var Otilde = "Õ";
1811 var otilde = "õ";
1812 var otimesas = "⨶";
1813 var Otimes = "⨷";
1814 var otimes = "⊗";
1815 var Ouml = "Ö";
1816 var ouml = "ö";
1817 var ovbar = "⌽";
1818 var OverBar = "‾";
1819 var OverBrace = "⏞";
1820 var OverBracket = "⎴";
1821 var OverParenthesis = "⏜";
1822 var para = "¶";
1823 var parallel = "∥";
1824 var par = "∥";
1825 var parsim = "⫳";
1826 var parsl = "⫽";
1827 var part = "∂";
1828 var PartialD = "∂";
1829 var Pcy = "П";
1830 var pcy = "п";
1831 var percnt = "%";
1832 var period = ".";
1833 var permil = "‰";
1834 var perp = "⊥";
1835 var pertenk = "‱";
1836 var Pfr = "𝔓";
1837 var pfr = "𝔭";
1838 var Phi = "Φ";
1839 var phi = "φ";
1840 var phiv = "ϕ";
1841 var phmmat = "ℳ";
1842 var phone = "☎";
1843 var Pi = "Π";
1844 var pi = "π";
1845 var pitchfork = "⋔";
1846 var piv = "ϖ";
1847 var planck = "ℏ";
1848 var planckh = "ℎ";
1849 var plankv = "ℏ";
1850 var plusacir = "⨣";
1851 var plusb = "⊞";
1852 var pluscir = "⨢";
1853 var plus = "+";
1854 var plusdo = "∔";
1855 var plusdu = "⨥";
1856 var pluse = "⩲";
1857 var PlusMinus = "±";
1858 var plusmn = "±";
1859 var plussim = "⨦";
1860 var plustwo = "⨧";
1861 var pm = "±";
1862 var Poincareplane = "ℌ";
1863 var pointint = "⨕";
1864 var popf = "𝕡";
1865 var Popf = "ℙ";
1866 var pound = "£";
1867 var prap = "⪷";
1868 var Pr = "⪻";
1869 var pr = "≺";
1870 var prcue = "≼";
1871 var precapprox = "⪷";
1872 var prec = "≺";
1873 var preccurlyeq = "≼";
1874 var Precedes = "≺";
1875 var PrecedesEqual = "⪯";
1876 var PrecedesSlantEqual = "≼";
1877 var PrecedesTilde = "≾";
1878 var preceq = "⪯";
1879 var precnapprox = "⪹";
1880 var precneqq = "⪵";
1881 var precnsim = "⋨";
1882 var pre = "⪯";
1883 var prE = "⪳";
1884 var precsim = "≾";
1885 var prime = "′";
1886 var Prime = "″";
1887 var primes = "ℙ";
1888 var prnap = "⪹";
1889 var prnE = "⪵";
1890 var prnsim = "⋨";
1891 var prod = "∏";
1892 var Product = "∏";
1893 var profalar = "⌮";
1894 var profline = "⌒";
1895 var profsurf = "⌓";
1896 var prop = "∝";
1897 var Proportional = "∝";
1898 var Proportion = "∷";
1899 var propto = "∝";
1900 var prsim = "≾";
1901 var prurel = "⊰";
1902 var Pscr = "𝒫";
1903 var pscr = "𝓅";
1904 var Psi = "Ψ";
1905 var psi = "ψ";
1906 var puncsp = " ";
1907 var Qfr = "𝔔";
1908 var qfr = "𝔮";
1909 var qint = "⨌";
1910 var qopf = "𝕢";
1911 var Qopf = "ℚ";
1912 var qprime = "⁗";
1913 var Qscr = "𝒬";
1914 var qscr = "𝓆";
1915 var quaternions = "ℍ";
1916 var quatint = "⨖";
1917 var quest = "?";
1918 var questeq = "≟";
1919 var quot = "\"";
1920 var QUOT = "\"";
1921 var rAarr = "⇛";
1922 var race = "∽̱";
1923 var Racute = "Ŕ";
1924 var racute = "ŕ";
1925 var radic = "√";
1926 var raemptyv = "⦳";
1927 var rang = "⟩";
1928 var Rang = "⟫";
1929 var rangd = "⦒";
1930 var range = "⦥";
1931 var rangle = "⟩";
1932 var raquo = "»";
1933 var rarrap = "⥵";
1934 var rarrb = "⇥";
1935 var rarrbfs = "⤠";
1936 var rarrc = "⤳";
1937 var rarr = "→";
1938 var Rarr = "↠";
1939 var rArr = "⇒";
1940 var rarrfs = "⤞";
1941 var rarrhk = "↪";
1942 var rarrlp = "↬";
1943 var rarrpl = "⥅";
1944 var rarrsim = "⥴";
1945 var Rarrtl = "⤖";
1946 var rarrtl = "↣";
1947 var rarrw = "↝";
1948 var ratail = "⤚";
1949 var rAtail = "⤜";
1950 var ratio = "∶";
1951 var rationals = "ℚ";
1952 var rbarr = "⤍";
1953 var rBarr = "⤏";
1954 var RBarr = "⤐";
1955 var rbbrk = "❳";
1956 var rbrace = "}";
1957 var rbrack = "]";
1958 var rbrke = "⦌";
1959 var rbrksld = "⦎";
1960 var rbrkslu = "⦐";
1961 var Rcaron = "Ř";
1962 var rcaron = "ř";
1963 var Rcedil = "Ŗ";
1964 var rcedil = "ŗ";
1965 var rceil = "⌉";
1966 var rcub = "}";
1967 var Rcy = "Р";
1968 var rcy = "р";
1969 var rdca = "⤷";
1970 var rdldhar = "⥩";
1971 var rdquo = "”";
1972 var rdquor = "”";
1973 var rdsh = "↳";
1974 var real = "ℜ";
1975 var realine = "ℛ";
1976 var realpart = "ℜ";
1977 var reals = "ℝ";
1978 var Re = "ℜ";
1979 var rect = "▭";
1980 var reg = "®";
1981 var REG = "®";
1982 var ReverseElement = "∋";
1983 var ReverseEquilibrium = "⇋";
1984 var ReverseUpEquilibrium = "⥯";
1985 var rfisht = "⥽";
1986 var rfloor = "⌋";
1987 var rfr = "𝔯";
1988 var Rfr = "ℜ";
1989 var rHar = "⥤";
1990 var rhard = "⇁";
1991 var rharu = "⇀";
1992 var rharul = "⥬";
1993 var Rho = "Ρ";
1994 var rho = "ρ";
1995 var rhov = "ϱ";
1996 var RightAngleBracket = "⟩";
1997 var RightArrowBar = "⇥";
1998 var rightarrow = "→";
1999 var RightArrow = "→";
2000 var Rightarrow = "⇒";
2001 var RightArrowLeftArrow = "⇄";
2002 var rightarrowtail = "↣";
2003 var RightCeiling = "⌉";
2004 var RightDoubleBracket = "⟧";
2005 var RightDownTeeVector = "⥝";
2006 var RightDownVectorBar = "⥕";
2007 var RightDownVector = "⇂";
2008 var RightFloor = "⌋";
2009 var rightharpoondown = "⇁";
2010 var rightharpoonup = "⇀";
2011 var rightleftarrows = "⇄";
2012 var rightleftharpoons = "⇌";
2013 var rightrightarrows = "⇉";
2014 var rightsquigarrow = "↝";
2015 var RightTeeArrow = "↦";
2016 var RightTee = "⊢";
2017 var RightTeeVector = "⥛";
2018 var rightthreetimes = "⋌";
2019 var RightTriangleBar = "⧐";
2020 var RightTriangle = "⊳";
2021 var RightTriangleEqual = "⊵";
2022 var RightUpDownVector = "⥏";
2023 var RightUpTeeVector = "⥜";
2024 var RightUpVectorBar = "⥔";
2025 var RightUpVector = "↾";
2026 var RightVectorBar = "⥓";
2027 var RightVector = "⇀";
2028 var ring = "˚";
2029 var risingdotseq = "≓";
2030 var rlarr = "⇄";
2031 var rlhar = "⇌";
2032 var rlm = "‏";
2033 var rmoustache = "⎱";
2034 var rmoust = "⎱";
2035 var rnmid = "⫮";
2036 var roang = "⟭";
2037 var roarr = "⇾";
2038 var robrk = "⟧";
2039 var ropar = "⦆";
2040 var ropf = "𝕣";
2041 var Ropf = "ℝ";
2042 var roplus = "⨮";
2043 var rotimes = "⨵";
2044 var RoundImplies = "⥰";
2045 var rpar = ")";
2046 var rpargt = "⦔";
2047 var rppolint = "⨒";
2048 var rrarr = "⇉";
2049 var Rrightarrow = "⇛";
2050 var rsaquo = "›";
2051 var rscr = "𝓇";
2052 var Rscr = "ℛ";
2053 var rsh = "↱";
2054 var Rsh = "↱";
2055 var rsqb = "]";
2056 var rsquo = "’";
2057 var rsquor = "’";
2058 var rthree = "⋌";
2059 var rtimes = "⋊";
2060 var rtri = "▹";
2061 var rtrie = "⊵";
2062 var rtrif = "▸";
2063 var rtriltri = "⧎";
2064 var RuleDelayed = "⧴";
2065 var ruluhar = "⥨";
2066 var rx = "℞";
2067 var Sacute = "Ś";
2068 var sacute = "ś";
2069 var sbquo = "‚";
2070 var scap = "⪸";
2071 var Scaron = "Š";
2072 var scaron = "š";
2073 var Sc = "⪼";
2074 var sc = "≻";
2075 var sccue = "≽";
2076 var sce = "⪰";
2077 var scE = "⪴";
2078 var Scedil = "Ş";
2079 var scedil = "ş";
2080 var Scirc = "Ŝ";
2081 var scirc = "ŝ";
2082 var scnap = "⪺";
2083 var scnE = "⪶";
2084 var scnsim = "⋩";
2085 var scpolint = "⨓";
2086 var scsim = "≿";
2087 var Scy = "С";
2088 var scy = "с";
2089 var sdotb = "⊡";
2090 var sdot = "⋅";
2091 var sdote = "⩦";
2092 var searhk = "⤥";
2093 var searr = "↘";
2094 var seArr = "⇘";
2095 var searrow = "↘";
2096 var sect = "§";
2097 var semi = ";";
2098 var seswar = "⤩";
2099 var setminus = "∖";
2100 var setmn = "∖";
2101 var sext = "✶";
2102 var Sfr = "𝔖";
2103 var sfr = "𝔰";
2104 var sfrown = "⌢";
2105 var sharp = "♯";
2106 var SHCHcy = "Щ";
2107 var shchcy = "щ";
2108 var SHcy = "Ш";
2109 var shcy = "ш";
2110 var ShortDownArrow = "↓";
2111 var ShortLeftArrow = "←";
2112 var shortmid = "∣";
2113 var shortparallel = "∥";
2114 var ShortRightArrow = "→";
2115 var ShortUpArrow = "↑";
2116 var shy = "­";
2117 var Sigma = "Σ";
2118 var sigma = "σ";
2119 var sigmaf = "ς";
2120 var sigmav = "ς";
2121 var sim = "∼";
2122 var simdot = "⩪";
2123 var sime = "≃";
2124 var simeq = "≃";
2125 var simg = "⪞";
2126 var simgE = "⪠";
2127 var siml = "⪝";
2128 var simlE = "⪟";
2129 var simne = "≆";
2130 var simplus = "⨤";
2131 var simrarr = "⥲";
2132 var slarr = "←";
2133 var SmallCircle = "∘";
2134 var smallsetminus = "∖";
2135 var smashp = "⨳";
2136 var smeparsl = "⧤";
2137 var smid = "∣";
2138 var smile = "⌣";
2139 var smt = "⪪";
2140 var smte = "⪬";
2141 var smtes = "⪬︀";
2142 var SOFTcy = "Ь";
2143 var softcy = "ь";
2144 var solbar = "⌿";
2145 var solb = "⧄";
2146 var sol = "/";
2147 var Sopf = "𝕊";
2148 var sopf = "𝕤";
2149 var spades = "♠";
2150 var spadesuit = "♠";
2151 var spar = "∥";
2152 var sqcap = "⊓";
2153 var sqcaps = "⊓︀";
2154 var sqcup = "⊔";
2155 var sqcups = "⊔︀";
2156 var Sqrt = "√";
2157 var sqsub = "⊏";
2158 var sqsube = "⊑";
2159 var sqsubset = "⊏";
2160 var sqsubseteq = "⊑";
2161 var sqsup = "⊐";
2162 var sqsupe = "⊒";
2163 var sqsupset = "⊐";
2164 var sqsupseteq = "⊒";
2165 var square = "□";
2166 var Square = "□";
2167 var SquareIntersection = "⊓";
2168 var SquareSubset = "⊏";
2169 var SquareSubsetEqual = "⊑";
2170 var SquareSuperset = "⊐";
2171 var SquareSupersetEqual = "⊒";
2172 var SquareUnion = "⊔";
2173 var squarf = "▪";
2174 var squ = "□";
2175 var squf = "▪";
2176 var srarr = "→";
2177 var Sscr = "𝒮";
2178 var sscr = "𝓈";
2179 var ssetmn = "∖";
2180 var ssmile = "⌣";
2181 var sstarf = "⋆";
2182 var Star = "⋆";
2183 var star = "☆";
2184 var starf = "★";
2185 var straightepsilon = "ϵ";
2186 var straightphi = "ϕ";
2187 var strns = "¯";
2188 var sub = "⊂";
2189 var Sub = "⋐";
2190 var subdot = "⪽";
2191 var subE = "⫅";
2192 var sube = "⊆";
2193 var subedot = "⫃";
2194 var submult = "⫁";
2195 var subnE = "⫋";
2196 var subne = "⊊";
2197 var subplus = "⪿";
2198 var subrarr = "⥹";
2199 var subset = "⊂";
2200 var Subset = "⋐";
2201 var subseteq = "⊆";
2202 var subseteqq = "⫅";
2203 var SubsetEqual = "⊆";
2204 var subsetneq = "⊊";
2205 var subsetneqq = "⫋";
2206 var subsim = "⫇";
2207 var subsub = "⫕";
2208 var subsup = "⫓";
2209 var succapprox = "⪸";
2210 var succ = "≻";
2211 var succcurlyeq = "≽";
2212 var Succeeds = "≻";
2213 var SucceedsEqual = "⪰";
2214 var SucceedsSlantEqual = "≽";
2215 var SucceedsTilde = "≿";
2216 var succeq = "⪰";
2217 var succnapprox = "⪺";
2218 var succneqq = "⪶";
2219 var succnsim = "⋩";
2220 var succsim = "≿";
2221 var SuchThat = "∋";
2222 var sum = "∑";
2223 var Sum = "∑";
2224 var sung = "♪";
2225 var sup1 = "¹";
2226 var sup2 = "²";
2227 var sup3 = "³";
2228 var sup = "⊃";
2229 var Sup = "⋑";
2230 var supdot = "⪾";
2231 var supdsub = "⫘";
2232 var supE = "⫆";
2233 var supe = "⊇";
2234 var supedot = "⫄";
2235 var Superset = "⊃";
2236 var SupersetEqual = "⊇";
2237 var suphsol = "⟉";
2238 var suphsub = "⫗";
2239 var suplarr = "⥻";
2240 var supmult = "⫂";
2241 var supnE = "⫌";
2242 var supne = "⊋";
2243 var supplus = "⫀";
2244 var supset = "⊃";
2245 var Supset = "⋑";
2246 var supseteq = "⊇";
2247 var supseteqq = "⫆";
2248 var supsetneq = "⊋";
2249 var supsetneqq = "⫌";
2250 var supsim = "⫈";
2251 var supsub = "⫔";
2252 var supsup = "⫖";
2253 var swarhk = "⤦";
2254 var swarr = "↙";
2255 var swArr = "⇙";
2256 var swarrow = "↙";
2257 var swnwar = "⤪";
2258 var szlig = "ß";
2259 var Tab = "\t";
2260 var target = "⌖";
2261 var Tau = "Τ";
2262 var tau = "τ";
2263 var tbrk = "⎴";
2264 var Tcaron = "Ť";
2265 var tcaron = "ť";
2266 var Tcedil = "Ţ";
2267 var tcedil = "ţ";
2268 var Tcy = "Т";
2269 var tcy = "т";
2270 var tdot = "⃛";
2271 var telrec = "⌕";
2272 var Tfr = "𝔗";
2273 var tfr = "𝔱";
2274 var there4 = "∴";
2275 var therefore = "∴";
2276 var Therefore = "∴";
2277 var Theta = "Θ";
2278 var theta = "θ";
2279 var thetasym = "ϑ";
2280 var thetav = "ϑ";
2281 var thickapprox = "≈";
2282 var thicksim = "∼";
2283 var ThickSpace = "  ";
2284 var ThinSpace = " ";
2285 var thinsp = " ";
2286 var thkap = "≈";
2287 var thksim = "∼";
2288 var THORN = "Þ";
2289 var thorn = "þ";
2290 var tilde = "˜";
2291 var Tilde = "∼";
2292 var TildeEqual = "≃";
2293 var TildeFullEqual = "≅";
2294 var TildeTilde = "≈";
2295 var timesbar = "⨱";
2296 var timesb = "⊠";
2297 var times = "×";
2298 var timesd = "⨰";
2299 var tint = "∭";
2300 var toea = "⤨";
2301 var topbot = "⌶";
2302 var topcir = "⫱";
2303 var top = "⊤";
2304 var Topf = "𝕋";
2305 var topf = "𝕥";
2306 var topfork = "⫚";
2307 var tosa = "⤩";
2308 var tprime = "‴";
2309 var trade = "™";
2310 var TRADE = "™";
2311 var triangle = "▵";
2312 var triangledown = "▿";
2313 var triangleleft = "◃";
2314 var trianglelefteq = "⊴";
2315 var triangleq = "≜";
2316 var triangleright = "▹";
2317 var trianglerighteq = "⊵";
2318 var tridot = "◬";
2319 var trie = "≜";
2320 var triminus = "⨺";
2321 var TripleDot = "⃛";
2322 var triplus = "⨹";
2323 var trisb = "⧍";
2324 var tritime = "⨻";
2325 var trpezium = "⏢";
2326 var Tscr = "𝒯";
2327 var tscr = "𝓉";
2328 var TScy = "Ц";
2329 var tscy = "ц";
2330 var TSHcy = "Ћ";
2331 var tshcy = "ћ";
2332 var Tstrok = "Ŧ";
2333 var tstrok = "ŧ";
2334 var twixt = "≬";
2335 var twoheadleftarrow = "↞";
2336 var twoheadrightarrow = "↠";
2337 var Uacute = "Ú";
2338 var uacute = "ú";
2339 var uarr = "↑";
2340 var Uarr = "↟";
2341 var uArr = "⇑";
2342 var Uarrocir = "⥉";
2343 var Ubrcy = "Ў";
2344 var ubrcy = "ў";
2345 var Ubreve = "Ŭ";
2346 var ubreve = "ŭ";
2347 var Ucirc = "Û";
2348 var ucirc = "û";
2349 var Ucy = "У";
2350 var ucy = "у";
2351 var udarr = "⇅";
2352 var Udblac = "Ű";
2353 var udblac = "ű";
2354 var udhar = "⥮";
2355 var ufisht = "⥾";
2356 var Ufr = "𝔘";
2357 var ufr = "𝔲";
2358 var Ugrave = "Ù";
2359 var ugrave = "ù";
2360 var uHar = "⥣";
2361 var uharl = "↿";
2362 var uharr = "↾";
2363 var uhblk = "▀";
2364 var ulcorn = "⌜";
2365 var ulcorner = "⌜";
2366 var ulcrop = "⌏";
2367 var ultri = "◸";
2368 var Umacr = "Ū";
2369 var umacr = "ū";
2370 var uml = "¨";
2371 var UnderBar = "_";
2372 var UnderBrace = "⏟";
2373 var UnderBracket = "⎵";
2374 var UnderParenthesis = "⏝";
2375 var Union = "⋃";
2376 var UnionPlus = "⊎";
2377 var Uogon = "Ų";
2378 var uogon = "ų";
2379 var Uopf = "𝕌";
2380 var uopf = "𝕦";
2381 var UpArrowBar = "⤒";
2382 var uparrow = "↑";
2383 var UpArrow = "↑";
2384 var Uparrow = "⇑";
2385 var UpArrowDownArrow = "⇅";
2386 var updownarrow = "↕";
2387 var UpDownArrow = "↕";
2388 var Updownarrow = "⇕";
2389 var UpEquilibrium = "⥮";
2390 var upharpoonleft = "↿";
2391 var upharpoonright = "↾";
2392 var uplus = "⊎";
2393 var UpperLeftArrow = "↖";
2394 var UpperRightArrow = "↗";
2395 var upsi = "υ";
2396 var Upsi = "ϒ";
2397 var upsih = "ϒ";
2398 var Upsilon = "Υ";
2399 var upsilon = "υ";
2400 var UpTeeArrow = "↥";
2401 var UpTee = "⊥";
2402 var upuparrows = "⇈";
2403 var urcorn = "⌝";
2404 var urcorner = "⌝";
2405 var urcrop = "⌎";
2406 var Uring = "Ů";
2407 var uring = "ů";
2408 var urtri = "◹";
2409 var Uscr = "𝒰";
2410 var uscr = "𝓊";
2411 var utdot = "⋰";
2412 var Utilde = "Ũ";
2413 var utilde = "ũ";
2414 var utri = "▵";
2415 var utrif = "▴";
2416 var uuarr = "⇈";
2417 var Uuml = "Ü";
2418 var uuml = "ü";
2419 var uwangle = "⦧";
2420 var vangrt = "⦜";
2421 var varepsilon = "ϵ";
2422 var varkappa = "ϰ";
2423 var varnothing = "∅";
2424 var varphi = "ϕ";
2425 var varpi = "ϖ";
2426 var varpropto = "∝";
2427 var varr = "↕";
2428 var vArr = "⇕";
2429 var varrho = "ϱ";
2430 var varsigma = "ς";
2431 var varsubsetneq = "⊊︀";
2432 var varsubsetneqq = "⫋︀";
2433 var varsupsetneq = "⊋︀";
2434 var varsupsetneqq = "⫌︀";
2435 var vartheta = "ϑ";
2436 var vartriangleleft = "⊲";
2437 var vartriangleright = "⊳";
2438 var vBar = "⫨";
2439 var Vbar = "⫫";
2440 var vBarv = "⫩";
2441 var Vcy = "В";
2442 var vcy = "в";
2443 var vdash = "⊢";
2444 var vDash = "⊨";
2445 var Vdash = "⊩";
2446 var VDash = "⊫";
2447 var Vdashl = "⫦";
2448 var veebar = "⊻";
2449 var vee = "∨";
2450 var Vee = "⋁";
2451 var veeeq = "≚";
2452 var vellip = "⋮";
2453 var verbar = "|";
2454 var Verbar = "‖";
2455 var vert = "|";
2456 var Vert = "‖";
2457 var VerticalBar = "∣";
2458 var VerticalLine = "|";
2459 var VerticalSeparator = "❘";
2460 var VerticalTilde = "≀";
2461 var VeryThinSpace = " ";
2462 var Vfr = "𝔙";
2463 var vfr = "𝔳";
2464 var vltri = "⊲";
2465 var vnsub = "⊂⃒";
2466 var vnsup = "⊃⃒";
2467 var Vopf = "𝕍";
2468 var vopf = "𝕧";
2469 var vprop = "∝";
2470 var vrtri = "⊳";
2471 var Vscr = "𝒱";
2472 var vscr = "𝓋";
2473 var vsubnE = "⫋︀";
2474 var vsubne = "⊊︀";
2475 var vsupnE = "⫌︀";
2476 var vsupne = "⊋︀";
2477 var Vvdash = "⊪";
2478 var vzigzag = "⦚";
2479 var Wcirc = "Ŵ";
2480 var wcirc = "ŵ";
2481 var wedbar = "⩟";
2482 var wedge = "∧";
2483 var Wedge = "⋀";
2484 var wedgeq = "≙";
2485 var weierp = "℘";
2486 var Wfr = "𝔚";
2487 var wfr = "𝔴";
2488 var Wopf = "𝕎";
2489 var wopf = "𝕨";
2490 var wp = "℘";
2491 var wr = "≀";
2492 var wreath = "≀";
2493 var Wscr = "𝒲";
2494 var wscr = "𝓌";
2495 var xcap = "⋂";
2496 var xcirc = "◯";
2497 var xcup = "⋃";
2498 var xdtri = "▽";
2499 var Xfr = "𝔛";
2500 var xfr = "𝔵";
2501 var xharr = "⟷";
2502 var xhArr = "⟺";
2503 var Xi = "Ξ";
2504 var xi = "ξ";
2505 var xlarr = "⟵";
2506 var xlArr = "⟸";
2507 var xmap = "⟼";
2508 var xnis = "⋻";
2509 var xodot = "⨀";
2510 var Xopf = "𝕏";
2511 var xopf = "𝕩";
2512 var xoplus = "⨁";
2513 var xotime = "⨂";
2514 var xrarr = "⟶";
2515 var xrArr = "⟹";
2516 var Xscr = "𝒳";
2517 var xscr = "𝓍";
2518 var xsqcup = "⨆";
2519 var xuplus = "⨄";
2520 var xutri = "△";
2521 var xvee = "⋁";
2522 var xwedge = "⋀";
2523 var Yacute = "Ý";
2524 var yacute = "ý";
2525 var YAcy = "Я";
2526 var yacy = "я";
2527 var Ycirc = "Ŷ";
2528 var ycirc = "ŷ";
2529 var Ycy = "Ы";
2530 var ycy = "ы";
2531 var yen = "¥";
2532 var Yfr = "𝔜";
2533 var yfr = "𝔶";
2534 var YIcy = "Ї";
2535 var yicy = "ї";
2536 var Yopf = "𝕐";
2537 var yopf = "𝕪";
2538 var Yscr = "𝒴";
2539 var yscr = "𝓎";
2540 var YUcy = "Ю";
2541 var yucy = "ю";
2542 var yuml = "ÿ";
2543 var Yuml = "Ÿ";
2544 var Zacute = "Ź";
2545 var zacute = "ź";
2546 var Zcaron = "Ž";
2547 var zcaron = "ž";
2548 var Zcy = "З";
2549 var zcy = "з";
2550 var Zdot = "Ż";
2551 var zdot = "ż";
2552 var zeetrf = "ℨ";
2553 var ZeroWidthSpace = "​";
2554 var Zeta = "Ζ";
2555 var zeta = "ζ";
2556 var zfr = "𝔷";
2557 var Zfr = "ℨ";
2558 var ZHcy = "Ж";
2559 var zhcy = "ж";
2560 var zigrarr = "⇝";
2561 var zopf = "𝕫";
2562 var Zopf = "ℤ";
2563 var Zscr = "𝒵";
2564 var zscr = "𝓏";
2565 var zwj = "‍";
2566 var zwnj = "‌";
2567 var entities = {
2568 Aacute: Aacute,
2569 aacute: aacute,
2570 Abreve: Abreve,
2571 abreve: abreve,
2572 ac: ac,
2573 acd: acd,
2574 acE: acE,
2575 Acirc: Acirc,
2576 acirc: acirc,
2577 acute: acute,
2578 Acy: Acy,
2579 acy: acy,
2580 AElig: AElig,
2581 aelig: aelig,
2582 af: af,
2583 Afr: Afr,
2584 afr: afr,
2585 Agrave: Agrave,
2586 agrave: agrave,
2587 alefsym: alefsym,
2588 aleph: aleph,
2589 Alpha: Alpha,
2590 alpha: alpha,
2591 Amacr: Amacr,
2592 amacr: amacr,
2593 amalg: amalg,
2594 amp: amp,
2595 AMP: AMP,
2596 andand: andand,
2597 And: And,
2598 and: and,
2599 andd: andd,
2600 andslope: andslope,
2601 andv: andv,
2602 ang: ang,
2603 ange: ange,
2604 angle: angle,
2605 angmsdaa: angmsdaa,
2606 angmsdab: angmsdab,
2607 angmsdac: angmsdac,
2608 angmsdad: angmsdad,
2609 angmsdae: angmsdae,
2610 angmsdaf: angmsdaf,
2611 angmsdag: angmsdag,
2612 angmsdah: angmsdah,
2613 angmsd: angmsd,
2614 angrt: angrt,
2615 angrtvb: angrtvb,
2616 angrtvbd: angrtvbd,
2617 angsph: angsph,
2618 angst: angst,
2619 angzarr: angzarr,
2620 Aogon: Aogon,
2621 aogon: aogon,
2622 Aopf: Aopf,
2623 aopf: aopf,
2624 apacir: apacir,
2625 ap: ap,
2626 apE: apE,
2627 ape: ape,
2628 apid: apid,
2629 apos: apos,
2630 ApplyFunction: ApplyFunction,
2631 approx: approx,
2632 approxeq: approxeq,
2633 Aring: Aring,
2634 aring: aring,
2635 Ascr: Ascr,
2636 ascr: ascr,
2637 Assign: Assign,
2638 ast: ast,
2639 asymp: asymp,
2640 asympeq: asympeq,
2641 Atilde: Atilde,
2642 atilde: atilde,
2643 Auml: Auml,
2644 auml: auml,
2645 awconint: awconint,
2646 awint: awint,
2647 backcong: backcong,
2648 backepsilon: backepsilon,
2649 backprime: backprime,
2650 backsim: backsim,
2651 backsimeq: backsimeq,
2652 Backslash: Backslash,
2653 Barv: Barv,
2654 barvee: barvee,
2655 barwed: barwed,
2656 Barwed: Barwed,
2657 barwedge: barwedge,
2658 bbrk: bbrk,
2659 bbrktbrk: bbrktbrk,
2660 bcong: bcong,
2661 Bcy: Bcy,
2662 bcy: bcy,
2663 bdquo: bdquo,
2664 becaus: becaus,
2665 because: because,
2666 Because: Because,
2667 bemptyv: bemptyv,
2668 bepsi: bepsi,
2669 bernou: bernou,
2670 Bernoullis: Bernoullis,
2671 Beta: Beta,
2672 beta: beta,
2673 beth: beth,
2674 between: between,
2675 Bfr: Bfr,
2676 bfr: bfr,
2677 bigcap: bigcap,
2678 bigcirc: bigcirc,
2679 bigcup: bigcup,
2680 bigodot: bigodot,
2681 bigoplus: bigoplus,
2682 bigotimes: bigotimes,
2683 bigsqcup: bigsqcup,
2684 bigstar: bigstar,
2685 bigtriangledown: bigtriangledown,
2686 bigtriangleup: bigtriangleup,
2687 biguplus: biguplus,
2688 bigvee: bigvee,
2689 bigwedge: bigwedge,
2690 bkarow: bkarow,
2691 blacklozenge: blacklozenge,
2692 blacksquare: blacksquare,
2693 blacktriangle: blacktriangle,
2694 blacktriangledown: blacktriangledown,
2695 blacktriangleleft: blacktriangleleft,
2696 blacktriangleright: blacktriangleright,
2697 blank: blank,
2698 blk12: blk12,
2699 blk14: blk14,
2700 blk34: blk34,
2701 block: block,
2702 bne: bne,
2703 bnequiv: bnequiv,
2704 bNot: bNot,
2705 bnot: bnot,
2706 Bopf: Bopf,
2707 bopf: bopf,
2708 bot: bot,
2709 bottom: bottom,
2710 bowtie: bowtie,
2711 boxbox: boxbox,
2712 boxdl: boxdl,
2713 boxdL: boxdL,
2714 boxDl: boxDl,
2715 boxDL: boxDL,
2716 boxdr: boxdr,
2717 boxdR: boxdR,
2718 boxDr: boxDr,
2719 boxDR: boxDR,
2720 boxh: boxh,
2721 boxH: boxH,
2722 boxhd: boxhd,
2723 boxHd: boxHd,
2724 boxhD: boxhD,
2725 boxHD: boxHD,
2726 boxhu: boxhu,
2727 boxHu: boxHu,
2728 boxhU: boxhU,
2729 boxHU: boxHU,
2730 boxminus: boxminus,
2731 boxplus: boxplus,
2732 boxtimes: boxtimes,
2733 boxul: boxul,
2734 boxuL: boxuL,
2735 boxUl: boxUl,
2736 boxUL: boxUL,
2737 boxur: boxur,
2738 boxuR: boxuR,
2739 boxUr: boxUr,
2740 boxUR: boxUR,
2741 boxv: boxv,
2742 boxV: boxV,
2743 boxvh: boxvh,
2744 boxvH: boxvH,
2745 boxVh: boxVh,
2746 boxVH: boxVH,
2747 boxvl: boxvl,
2748 boxvL: boxvL,
2749 boxVl: boxVl,
2750 boxVL: boxVL,
2751 boxvr: boxvr,
2752 boxvR: boxvR,
2753 boxVr: boxVr,
2754 boxVR: boxVR,
2755 bprime: bprime,
2756 breve: breve,
2757 Breve: Breve,
2758 brvbar: brvbar,
2759 bscr: bscr,
2760 Bscr: Bscr,
2761 bsemi: bsemi,
2762 bsim: bsim,
2763 bsime: bsime,
2764 bsolb: bsolb,
2765 bsol: bsol,
2766 bsolhsub: bsolhsub,
2767 bull: bull,
2768 bullet: bullet,
2769 bump: bump,
2770 bumpE: bumpE,
2771 bumpe: bumpe,
2772 Bumpeq: Bumpeq,
2773 bumpeq: bumpeq,
2774 Cacute: Cacute,
2775 cacute: cacute,
2776 capand: capand,
2777 capbrcup: capbrcup,
2778 capcap: capcap,
2779 cap: cap,
2780 Cap: Cap,
2781 capcup: capcup,
2782 capdot: capdot,
2783 CapitalDifferentialD: CapitalDifferentialD,
2784 caps: caps,
2785 caret: caret,
2786 caron: caron,
2787 Cayleys: Cayleys,
2788 ccaps: ccaps,
2789 Ccaron: Ccaron,
2790 ccaron: ccaron,
2791 Ccedil: Ccedil,
2792 ccedil: ccedil,
2793 Ccirc: Ccirc,
2794 ccirc: ccirc,
2795 Cconint: Cconint,
2796 ccups: ccups,
2797 ccupssm: ccupssm,
2798 Cdot: Cdot,
2799 cdot: cdot,
2800 cedil: cedil,
2801 Cedilla: Cedilla,
2802 cemptyv: cemptyv,
2803 cent: cent,
2804 centerdot: centerdot,
2805 CenterDot: CenterDot,
2806 cfr: cfr,
2807 Cfr: Cfr,
2808 CHcy: CHcy,
2809 chcy: chcy,
2810 check: check,
2811 checkmark: checkmark,
2812 Chi: Chi,
2813 chi: chi,
2814 circ: circ,
2815 circeq: circeq,
2816 circlearrowleft: circlearrowleft,
2817 circlearrowright: circlearrowright,
2818 circledast: circledast,
2819 circledcirc: circledcirc,
2820 circleddash: circleddash,
2821 CircleDot: CircleDot,
2822 circledR: circledR,
2823 circledS: circledS,
2824 CircleMinus: CircleMinus,
2825 CirclePlus: CirclePlus,
2826 CircleTimes: CircleTimes,
2827 cir: cir,
2828 cirE: cirE,
2829 cire: cire,
2830 cirfnint: cirfnint,
2831 cirmid: cirmid,
2832 cirscir: cirscir,
2833 ClockwiseContourIntegral: ClockwiseContourIntegral,
2834 CloseCurlyDoubleQuote: CloseCurlyDoubleQuote,
2835 CloseCurlyQuote: CloseCurlyQuote,
2836 clubs: clubs,
2837 clubsuit: clubsuit,
2838 colon: colon,
2839 Colon: Colon,
2840 Colone: Colone,
2841 colone: colone,
2842 coloneq: coloneq,
2843 comma: comma,
2844 commat: commat,
2845 comp: comp,
2846 compfn: compfn,
2847 complement: complement,
2848 complexes: complexes,
2849 cong: cong,
2850 congdot: congdot,
2851 Congruent: Congruent,
2852 conint: conint,
2853 Conint: Conint,
2854 ContourIntegral: ContourIntegral,
2855 copf: copf,
2856 Copf: Copf,
2857 coprod: coprod,
2858 Coproduct: Coproduct,
2859 copy: copy,
2860 COPY: COPY,
2861 copysr: copysr,
2862 CounterClockwiseContourIntegral: CounterClockwiseContourIntegral,
2863 crarr: crarr,
2864 cross: cross,
2865 Cross: Cross,
2866 Cscr: Cscr,
2867 cscr: cscr,
2868 csub: csub,
2869 csube: csube,
2870 csup: csup,
2871 csupe: csupe,
2872 ctdot: ctdot,
2873 cudarrl: cudarrl,
2874 cudarrr: cudarrr,
2875 cuepr: cuepr,
2876 cuesc: cuesc,
2877 cularr: cularr,
2878 cularrp: cularrp,
2879 cupbrcap: cupbrcap,
2880 cupcap: cupcap,
2881 CupCap: CupCap,
2882 cup: cup,
2883 Cup: Cup,
2884 cupcup: cupcup,
2885 cupdot: cupdot,
2886 cupor: cupor,
2887 cups: cups,
2888 curarr: curarr,
2889 curarrm: curarrm,
2890 curlyeqprec: curlyeqprec,
2891 curlyeqsucc: curlyeqsucc,
2892 curlyvee: curlyvee,
2893 curlywedge: curlywedge,
2894 curren: curren,
2895 curvearrowleft: curvearrowleft,
2896 curvearrowright: curvearrowright,
2897 cuvee: cuvee,
2898 cuwed: cuwed,
2899 cwconint: cwconint,
2900 cwint: cwint,
2901 cylcty: cylcty,
2902 dagger: dagger,
2903 Dagger: Dagger,
2904 daleth: daleth,
2905 darr: darr,
2906 Darr: Darr,
2907 dArr: dArr,
2908 dash: dash,
2909 Dashv: Dashv,
2910 dashv: dashv,
2911 dbkarow: dbkarow,
2912 dblac: dblac,
2913 Dcaron: Dcaron,
2914 dcaron: dcaron,
2915 Dcy: Dcy,
2916 dcy: dcy,
2917 ddagger: ddagger,
2918 ddarr: ddarr,
2919 DD: DD,
2920 dd: dd,
2921 DDotrahd: DDotrahd,
2922 ddotseq: ddotseq,
2923 deg: deg,
2924 Del: Del,
2925 Delta: Delta,
2926 delta: delta,
2927 demptyv: demptyv,
2928 dfisht: dfisht,
2929 Dfr: Dfr,
2930 dfr: dfr,
2931 dHar: dHar,
2932 dharl: dharl,
2933 dharr: dharr,
2934 DiacriticalAcute: DiacriticalAcute,
2935 DiacriticalDot: DiacriticalDot,
2936 DiacriticalDoubleAcute: DiacriticalDoubleAcute,
2937 DiacriticalGrave: DiacriticalGrave,
2938 DiacriticalTilde: DiacriticalTilde,
2939 diam: diam,
2940 diamond: diamond,
2941 Diamond: Diamond,
2942 diamondsuit: diamondsuit,
2943 diams: diams,
2944 die: die,
2945 DifferentialD: DifferentialD,
2946 digamma: digamma,
2947 disin: disin,
2948 div: div,
2949 divide: divide,
2950 divideontimes: divideontimes,
2951 divonx: divonx,
2952 DJcy: DJcy,
2953 djcy: djcy,
2954 dlcorn: dlcorn,
2955 dlcrop: dlcrop,
2956 dollar: dollar,
2957 Dopf: Dopf,
2958 dopf: dopf,
2959 Dot: Dot,
2960 dot: dot,
2961 DotDot: DotDot,
2962 doteq: doteq,
2963 doteqdot: doteqdot,
2964 DotEqual: DotEqual,
2965 dotminus: dotminus,
2966 dotplus: dotplus,
2967 dotsquare: dotsquare,
2968 doublebarwedge: doublebarwedge,
2969 DoubleContourIntegral: DoubleContourIntegral,
2970 DoubleDot: DoubleDot,
2971 DoubleDownArrow: DoubleDownArrow,
2972 DoubleLeftArrow: DoubleLeftArrow,
2973 DoubleLeftRightArrow: DoubleLeftRightArrow,
2974 DoubleLeftTee: DoubleLeftTee,
2975 DoubleLongLeftArrow: DoubleLongLeftArrow,
2976 DoubleLongLeftRightArrow: DoubleLongLeftRightArrow,
2977 DoubleLongRightArrow: DoubleLongRightArrow,
2978 DoubleRightArrow: DoubleRightArrow,
2979 DoubleRightTee: DoubleRightTee,
2980 DoubleUpArrow: DoubleUpArrow,
2981 DoubleUpDownArrow: DoubleUpDownArrow,
2982 DoubleVerticalBar: DoubleVerticalBar,
2983 DownArrowBar: DownArrowBar,
2984 downarrow: downarrow,
2985 DownArrow: DownArrow,
2986 Downarrow: Downarrow,
2987 DownArrowUpArrow: DownArrowUpArrow,
2988 DownBreve: DownBreve,
2989 downdownarrows: downdownarrows,
2990 downharpoonleft: downharpoonleft,
2991 downharpoonright: downharpoonright,
2992 DownLeftRightVector: DownLeftRightVector,
2993 DownLeftTeeVector: DownLeftTeeVector,
2994 DownLeftVectorBar: DownLeftVectorBar,
2995 DownLeftVector: DownLeftVector,
2996 DownRightTeeVector: DownRightTeeVector,
2997 DownRightVectorBar: DownRightVectorBar,
2998 DownRightVector: DownRightVector,
2999 DownTeeArrow: DownTeeArrow,
3000 DownTee: DownTee,
3001 drbkarow: drbkarow,
3002 drcorn: drcorn,
3003 drcrop: drcrop,
3004 Dscr: Dscr,
3005 dscr: dscr,
3006 DScy: DScy,
3007 dscy: dscy,
3008 dsol: dsol,
3009 Dstrok: Dstrok,
3010 dstrok: dstrok,
3011 dtdot: dtdot,
3012 dtri: dtri,
3013 dtrif: dtrif,
3014 duarr: duarr,
3015 duhar: duhar,
3016 dwangle: dwangle,
3017 DZcy: DZcy,
3018 dzcy: dzcy,
3019 dzigrarr: dzigrarr,
3020 Eacute: Eacute,
3021 eacute: eacute,
3022 easter: easter,
3023 Ecaron: Ecaron,
3024 ecaron: ecaron,
3025 Ecirc: Ecirc,
3026 ecirc: ecirc,
3027 ecir: ecir,
3028 ecolon: ecolon,
3029 Ecy: Ecy,
3030 ecy: ecy,
3031 eDDot: eDDot,
3032 Edot: Edot,
3033 edot: edot,
3034 eDot: eDot,
3035 ee: ee,
3036 efDot: efDot,
3037 Efr: Efr,
3038 efr: efr,
3039 eg: eg,
3040 Egrave: Egrave,
3041 egrave: egrave,
3042 egs: egs,
3043 egsdot: egsdot,
3044 el: el,
3045 Element: Element,
3046 elinters: elinters,
3047 ell: ell,
3048 els: els,
3049 elsdot: elsdot,
3050 Emacr: Emacr,
3051 emacr: emacr,
3052 empty: empty,
3053 emptyset: emptyset,
3054 EmptySmallSquare: EmptySmallSquare,
3055 emptyv: emptyv,
3056 EmptyVerySmallSquare: EmptyVerySmallSquare,
3057 emsp13: emsp13,
3058 emsp14: emsp14,
3059 emsp: emsp,
3060 ENG: ENG,
3061 eng: eng,
3062 ensp: ensp,
3063 Eogon: Eogon,
3064 eogon: eogon,
3065 Eopf: Eopf,
3066 eopf: eopf,
3067 epar: epar,
3068 eparsl: eparsl,
3069 eplus: eplus,
3070 epsi: epsi,
3071 Epsilon: Epsilon,
3072 epsilon: epsilon,
3073 epsiv: epsiv,
3074 eqcirc: eqcirc,
3075 eqcolon: eqcolon,
3076 eqsim: eqsim,
3077 eqslantgtr: eqslantgtr,
3078 eqslantless: eqslantless,
3079 Equal: Equal,
3080 equals: equals,
3081 EqualTilde: EqualTilde,
3082 equest: equest,
3083 Equilibrium: Equilibrium,
3084 equiv: equiv,
3085 equivDD: equivDD,
3086 eqvparsl: eqvparsl,
3087 erarr: erarr,
3088 erDot: erDot,
3089 escr: escr,
3090 Escr: Escr,
3091 esdot: esdot,
3092 Esim: Esim,
3093 esim: esim,
3094 Eta: Eta,
3095 eta: eta,
3096 ETH: ETH,
3097 eth: eth,
3098 Euml: Euml,
3099 euml: euml,
3100 euro: euro,
3101 excl: excl,
3102 exist: exist,
3103 Exists: Exists,
3104 expectation: expectation,
3105 exponentiale: exponentiale,
3106 ExponentialE: ExponentialE,
3107 fallingdotseq: fallingdotseq,
3108 Fcy: Fcy,
3109 fcy: fcy,
3110 female: female,
3111 ffilig: ffilig,
3112 fflig: fflig,
3113 ffllig: ffllig,
3114 Ffr: Ffr,
3115 ffr: ffr,
3116 filig: filig,
3117 FilledSmallSquare: FilledSmallSquare,
3118 FilledVerySmallSquare: FilledVerySmallSquare,
3119 fjlig: fjlig,
3120 flat: flat,
3121 fllig: fllig,
3122 fltns: fltns,
3123 fnof: fnof,
3124 Fopf: Fopf,
3125 fopf: fopf,
3126 forall: forall,
3127 ForAll: ForAll,
3128 fork: fork,
3129 forkv: forkv,
3130 Fouriertrf: Fouriertrf,
3131 fpartint: fpartint,
3132 frac12: frac12,
3133 frac13: frac13,
3134 frac14: frac14,
3135 frac15: frac15,
3136 frac16: frac16,
3137 frac18: frac18,
3138 frac23: frac23,
3139 frac25: frac25,
3140 frac34: frac34,
3141 frac35: frac35,
3142 frac38: frac38,
3143 frac45: frac45,
3144 frac56: frac56,
3145 frac58: frac58,
3146 frac78: frac78,
3147 frasl: frasl,
3148 frown: frown,
3149 fscr: fscr,
3150 Fscr: Fscr,
3151 gacute: gacute,
3152 Gamma: Gamma,
3153 gamma: gamma,
3154 Gammad: Gammad,
3155 gammad: gammad,
3156 gap: gap,
3157 Gbreve: Gbreve,
3158 gbreve: gbreve,
3159 Gcedil: Gcedil,
3160 Gcirc: Gcirc,
3161 gcirc: gcirc,
3162 Gcy: Gcy,
3163 gcy: gcy,
3164 Gdot: Gdot,
3165 gdot: gdot,
3166 ge: ge,
3167 gE: gE,
3168 gEl: gEl,
3169 gel: gel,
3170 geq: geq,
3171 geqq: geqq,
3172 geqslant: geqslant,
3173 gescc: gescc,
3174 ges: ges,
3175 gesdot: gesdot,
3176 gesdoto: gesdoto,
3177 gesdotol: gesdotol,
3178 gesl: gesl,
3179 gesles: gesles,
3180 Gfr: Gfr,
3181 gfr: gfr,
3182 gg: gg,
3183 Gg: Gg,
3184 ggg: ggg,
3185 gimel: gimel,
3186 GJcy: GJcy,
3187 gjcy: gjcy,
3188 gla: gla,
3189 gl: gl,
3190 glE: glE,
3191 glj: glj,
3192 gnap: gnap,
3193 gnapprox: gnapprox,
3194 gne: gne,
3195 gnE: gnE,
3196 gneq: gneq,
3197 gneqq: gneqq,
3198 gnsim: gnsim,
3199 Gopf: Gopf,
3200 gopf: gopf,
3201 grave: grave,
3202 GreaterEqual: GreaterEqual,
3203 GreaterEqualLess: GreaterEqualLess,
3204 GreaterFullEqual: GreaterFullEqual,
3205 GreaterGreater: GreaterGreater,
3206 GreaterLess: GreaterLess,
3207 GreaterSlantEqual: GreaterSlantEqual,
3208 GreaterTilde: GreaterTilde,
3209 Gscr: Gscr,
3210 gscr: gscr,
3211 gsim: gsim,
3212 gsime: gsime,
3213 gsiml: gsiml,
3214 gtcc: gtcc,
3215 gtcir: gtcir,
3216 gt: gt,
3217 GT: GT,
3218 Gt: Gt,
3219 gtdot: gtdot,
3220 gtlPar: gtlPar,
3221 gtquest: gtquest,
3222 gtrapprox: gtrapprox,
3223 gtrarr: gtrarr,
3224 gtrdot: gtrdot,
3225 gtreqless: gtreqless,
3226 gtreqqless: gtreqqless,
3227 gtrless: gtrless,
3228 gtrsim: gtrsim,
3229 gvertneqq: gvertneqq,
3230 gvnE: gvnE,
3231 Hacek: Hacek,
3232 hairsp: hairsp,
3233 half: half,
3234 hamilt: hamilt,
3235 HARDcy: HARDcy,
3236 hardcy: hardcy,
3237 harrcir: harrcir,
3238 harr: harr,
3239 hArr: hArr,
3240 harrw: harrw,
3241 Hat: Hat,
3242 hbar: hbar,
3243 Hcirc: Hcirc,
3244 hcirc: hcirc,
3245 hearts: hearts,
3246 heartsuit: heartsuit,
3247 hellip: hellip,
3248 hercon: hercon,
3249 hfr: hfr,
3250 Hfr: Hfr,
3251 HilbertSpace: HilbertSpace,
3252 hksearow: hksearow,
3253 hkswarow: hkswarow,
3254 hoarr: hoarr,
3255 homtht: homtht,
3256 hookleftarrow: hookleftarrow,
3257 hookrightarrow: hookrightarrow,
3258 hopf: hopf,
3259 Hopf: Hopf,
3260 horbar: horbar,
3261 HorizontalLine: HorizontalLine,
3262 hscr: hscr,
3263 Hscr: Hscr,
3264 hslash: hslash,
3265 Hstrok: Hstrok,
3266 hstrok: hstrok,
3267 HumpDownHump: HumpDownHump,
3268 HumpEqual: HumpEqual,
3269 hybull: hybull,
3270 hyphen: hyphen,
3271 Iacute: Iacute,
3272 iacute: iacute,
3273 ic: ic,
3274 Icirc: Icirc,
3275 icirc: icirc,
3276 Icy: Icy,
3277 icy: icy,
3278 Idot: Idot,
3279 IEcy: IEcy,
3280 iecy: iecy,
3281 iexcl: iexcl,
3282 iff: iff,
3283 ifr: ifr,
3284 Ifr: Ifr,
3285 Igrave: Igrave,
3286 igrave: igrave,
3287 ii: ii,
3288 iiiint: iiiint,
3289 iiint: iiint,
3290 iinfin: iinfin,
3291 iiota: iiota,
3292 IJlig: IJlig,
3293 ijlig: ijlig,
3294 Imacr: Imacr,
3295 imacr: imacr,
3296 image: image,
3297 ImaginaryI: ImaginaryI,
3298 imagline: imagline,
3299 imagpart: imagpart,
3300 imath: imath,
3301 Im: Im,
3302 imof: imof,
3303 imped: imped,
3304 Implies: Implies,
3305 incare: incare,
3306 "in": "∈",
3307 infin: infin,
3308 infintie: infintie,
3309 inodot: inodot,
3310 intcal: intcal,
3311 int: int,
3312 Int: Int,
3313 integers: integers,
3314 Integral: Integral,
3315 intercal: intercal,
3316 Intersection: Intersection,
3317 intlarhk: intlarhk,
3318 intprod: intprod,
3319 InvisibleComma: InvisibleComma,
3320 InvisibleTimes: InvisibleTimes,
3321 IOcy: IOcy,
3322 iocy: iocy,
3323 Iogon: Iogon,
3324 iogon: iogon,
3325 Iopf: Iopf,
3326 iopf: iopf,
3327 Iota: Iota,
3328 iota: iota,
3329 iprod: iprod,
3330 iquest: iquest,
3331 iscr: iscr,
3332 Iscr: Iscr,
3333 isin: isin,
3334 isindot: isindot,
3335 isinE: isinE,
3336 isins: isins,
3337 isinsv: isinsv,
3338 isinv: isinv,
3339 it: it,
3340 Itilde: Itilde,
3341 itilde: itilde,
3342 Iukcy: Iukcy,
3343 iukcy: iukcy,
3344 Iuml: Iuml,
3345 iuml: iuml,
3346 Jcirc: Jcirc,
3347 jcirc: jcirc,
3348 Jcy: Jcy,
3349 jcy: jcy,
3350 Jfr: Jfr,
3351 jfr: jfr,
3352 jmath: jmath,
3353 Jopf: Jopf,
3354 jopf: jopf,
3355 Jscr: Jscr,
3356 jscr: jscr,
3357 Jsercy: Jsercy,
3358 jsercy: jsercy,
3359 Jukcy: Jukcy,
3360 jukcy: jukcy,
3361 Kappa: Kappa,
3362 kappa: kappa,
3363 kappav: kappav,
3364 Kcedil: Kcedil,
3365 kcedil: kcedil,
3366 Kcy: Kcy,
3367 kcy: kcy,
3368 Kfr: Kfr,
3369 kfr: kfr,
3370 kgreen: kgreen,
3371 KHcy: KHcy,
3372 khcy: khcy,
3373 KJcy: KJcy,
3374 kjcy: kjcy,
3375 Kopf: Kopf,
3376 kopf: kopf,
3377 Kscr: Kscr,
3378 kscr: kscr,
3379 lAarr: lAarr,
3380 Lacute: Lacute,
3381 lacute: lacute,
3382 laemptyv: laemptyv,
3383 lagran: lagran,
3384 Lambda: Lambda,
3385 lambda: lambda,
3386 lang: lang,
3387 Lang: Lang,
3388 langd: langd,
3389 langle: langle,
3390 lap: lap,
3391 Laplacetrf: Laplacetrf,
3392 laquo: laquo,
3393 larrb: larrb,
3394 larrbfs: larrbfs,
3395 larr: larr,
3396 Larr: Larr,
3397 lArr: lArr,
3398 larrfs: larrfs,
3399 larrhk: larrhk,
3400 larrlp: larrlp,
3401 larrpl: larrpl,
3402 larrsim: larrsim,
3403 larrtl: larrtl,
3404 latail: latail,
3405 lAtail: lAtail,
3406 lat: lat,
3407 late: late,
3408 lates: lates,
3409 lbarr: lbarr,
3410 lBarr: lBarr,
3411 lbbrk: lbbrk,
3412 lbrace: lbrace,
3413 lbrack: lbrack,
3414 lbrke: lbrke,
3415 lbrksld: lbrksld,
3416 lbrkslu: lbrkslu,
3417 Lcaron: Lcaron,
3418 lcaron: lcaron,
3419 Lcedil: Lcedil,
3420 lcedil: lcedil,
3421 lceil: lceil,
3422 lcub: lcub,
3423 Lcy: Lcy,
3424 lcy: lcy,
3425 ldca: ldca,
3426 ldquo: ldquo,
3427 ldquor: ldquor,
3428 ldrdhar: ldrdhar,
3429 ldrushar: ldrushar,
3430 ldsh: ldsh,
3431 le: le,
3432 lE: lE,
3433 LeftAngleBracket: LeftAngleBracket,
3434 LeftArrowBar: LeftArrowBar,
3435 leftarrow: leftarrow,
3436 LeftArrow: LeftArrow,
3437 Leftarrow: Leftarrow,
3438 LeftArrowRightArrow: LeftArrowRightArrow,
3439 leftarrowtail: leftarrowtail,
3440 LeftCeiling: LeftCeiling,
3441 LeftDoubleBracket: LeftDoubleBracket,
3442 LeftDownTeeVector: LeftDownTeeVector,
3443 LeftDownVectorBar: LeftDownVectorBar,
3444 LeftDownVector: LeftDownVector,
3445 LeftFloor: LeftFloor,
3446 leftharpoondown: leftharpoondown,
3447 leftharpoonup: leftharpoonup,
3448 leftleftarrows: leftleftarrows,
3449 leftrightarrow: leftrightarrow,
3450 LeftRightArrow: LeftRightArrow,
3451 Leftrightarrow: Leftrightarrow,
3452 leftrightarrows: leftrightarrows,
3453 leftrightharpoons: leftrightharpoons,
3454 leftrightsquigarrow: leftrightsquigarrow,
3455 LeftRightVector: LeftRightVector,
3456 LeftTeeArrow: LeftTeeArrow,
3457 LeftTee: LeftTee,
3458 LeftTeeVector: LeftTeeVector,
3459 leftthreetimes: leftthreetimes,
3460 LeftTriangleBar: LeftTriangleBar,
3461 LeftTriangle: LeftTriangle,
3462 LeftTriangleEqual: LeftTriangleEqual,
3463 LeftUpDownVector: LeftUpDownVector,
3464 LeftUpTeeVector: LeftUpTeeVector,
3465 LeftUpVectorBar: LeftUpVectorBar,
3466 LeftUpVector: LeftUpVector,
3467 LeftVectorBar: LeftVectorBar,
3468 LeftVector: LeftVector,
3469 lEg: lEg,
3470 leg: leg,
3471 leq: leq,
3472 leqq: leqq,
3473 leqslant: leqslant,
3474 lescc: lescc,
3475 les: les,
3476 lesdot: lesdot,
3477 lesdoto: lesdoto,
3478 lesdotor: lesdotor,
3479 lesg: lesg,
3480 lesges: lesges,
3481 lessapprox: lessapprox,
3482 lessdot: lessdot,
3483 lesseqgtr: lesseqgtr,
3484 lesseqqgtr: lesseqqgtr,
3485 LessEqualGreater: LessEqualGreater,
3486 LessFullEqual: LessFullEqual,
3487 LessGreater: LessGreater,
3488 lessgtr: lessgtr,
3489 LessLess: LessLess,
3490 lesssim: lesssim,
3491 LessSlantEqual: LessSlantEqual,
3492 LessTilde: LessTilde,
3493 lfisht: lfisht,
3494 lfloor: lfloor,
3495 Lfr: Lfr,
3496 lfr: lfr,
3497 lg: lg,
3498 lgE: lgE,
3499 lHar: lHar,
3500 lhard: lhard,
3501 lharu: lharu,
3502 lharul: lharul,
3503 lhblk: lhblk,
3504 LJcy: LJcy,
3505 ljcy: ljcy,
3506 llarr: llarr,
3507 ll: ll,
3508 Ll: Ll,
3509 llcorner: llcorner,
3510 Lleftarrow: Lleftarrow,
3511 llhard: llhard,
3512 lltri: lltri,
3513 Lmidot: Lmidot,
3514 lmidot: lmidot,
3515 lmoustache: lmoustache,
3516 lmoust: lmoust,
3517 lnap: lnap,
3518 lnapprox: lnapprox,
3519 lne: lne,
3520 lnE: lnE,
3521 lneq: lneq,
3522 lneqq: lneqq,
3523 lnsim: lnsim,
3524 loang: loang,
3525 loarr: loarr,
3526 lobrk: lobrk,
3527 longleftarrow: longleftarrow,
3528 LongLeftArrow: LongLeftArrow,
3529 Longleftarrow: Longleftarrow,
3530 longleftrightarrow: longleftrightarrow,
3531 LongLeftRightArrow: LongLeftRightArrow,
3532 Longleftrightarrow: Longleftrightarrow,
3533 longmapsto: longmapsto,
3534 longrightarrow: longrightarrow,
3535 LongRightArrow: LongRightArrow,
3536 Longrightarrow: Longrightarrow,
3537 looparrowleft: looparrowleft,
3538 looparrowright: looparrowright,
3539 lopar: lopar,
3540 Lopf: Lopf,
3541 lopf: lopf,
3542 loplus: loplus,
3543 lotimes: lotimes,
3544 lowast: lowast,
3545 lowbar: lowbar,
3546 LowerLeftArrow: LowerLeftArrow,
3547 LowerRightArrow: LowerRightArrow,
3548 loz: loz,
3549 lozenge: lozenge,
3550 lozf: lozf,
3551 lpar: lpar,
3552 lparlt: lparlt,
3553 lrarr: lrarr,
3554 lrcorner: lrcorner,
3555 lrhar: lrhar,
3556 lrhard: lrhard,
3557 lrm: lrm,
3558 lrtri: lrtri,
3559 lsaquo: lsaquo,
3560 lscr: lscr,
3561 Lscr: Lscr,
3562 lsh: lsh,
3563 Lsh: Lsh,
3564 lsim: lsim,
3565 lsime: lsime,
3566 lsimg: lsimg,
3567 lsqb: lsqb,
3568 lsquo: lsquo,
3569 lsquor: lsquor,
3570 Lstrok: Lstrok,
3571 lstrok: lstrok,
3572 ltcc: ltcc,
3573 ltcir: ltcir,
3574 lt: lt,
3575 LT: LT,
3576 Lt: Lt,
3577 ltdot: ltdot,
3578 lthree: lthree,
3579 ltimes: ltimes,
3580 ltlarr: ltlarr,
3581 ltquest: ltquest,
3582 ltri: ltri,
3583 ltrie: ltrie,
3584 ltrif: ltrif,
3585 ltrPar: ltrPar,
3586 lurdshar: lurdshar,
3587 luruhar: luruhar,
3588 lvertneqq: lvertneqq,
3589 lvnE: lvnE,
3590 macr: macr,
3591 male: male,
3592 malt: malt,
3593 maltese: maltese,
3594 "Map": "⤅",
3595 map: map,
3596 mapsto: mapsto,
3597 mapstodown: mapstodown,
3598 mapstoleft: mapstoleft,
3599 mapstoup: mapstoup,
3600 marker: marker,
3601 mcomma: mcomma,
3602 Mcy: Mcy,
3603 mcy: mcy,
3604 mdash: mdash,
3605 mDDot: mDDot,
3606 measuredangle: measuredangle,
3607 MediumSpace: MediumSpace,
3608 Mellintrf: Mellintrf,
3609 Mfr: Mfr,
3610 mfr: mfr,
3611 mho: mho,
3612 micro: micro,
3613 midast: midast,
3614 midcir: midcir,
3615 mid: mid,
3616 middot: middot,
3617 minusb: minusb,
3618 minus: minus,
3619 minusd: minusd,
3620 minusdu: minusdu,
3621 MinusPlus: MinusPlus,
3622 mlcp: mlcp,
3623 mldr: mldr,
3624 mnplus: mnplus,
3625 models: models,
3626 Mopf: Mopf,
3627 mopf: mopf,
3628 mp: mp,
3629 mscr: mscr,
3630 Mscr: Mscr,
3631 mstpos: mstpos,
3632 Mu: Mu,
3633 mu: mu,
3634 multimap: multimap,
3635 mumap: mumap,
3636 nabla: nabla,
3637 Nacute: Nacute,
3638 nacute: nacute,
3639 nang: nang,
3640 nap: nap,
3641 napE: napE,
3642 napid: napid,
3643 napos: napos,
3644 napprox: napprox,
3645 natural: natural,
3646 naturals: naturals,
3647 natur: natur,
3648 nbsp: nbsp,
3649 nbump: nbump,
3650 nbumpe: nbumpe,
3651 ncap: ncap,
3652 Ncaron: Ncaron,
3653 ncaron: ncaron,
3654 Ncedil: Ncedil,
3655 ncedil: ncedil,
3656 ncong: ncong,
3657 ncongdot: ncongdot,
3658 ncup: ncup,
3659 Ncy: Ncy,
3660 ncy: ncy,
3661 ndash: ndash,
3662 nearhk: nearhk,
3663 nearr: nearr,
3664 neArr: neArr,
3665 nearrow: nearrow,
3666 ne: ne,
3667 nedot: nedot,
3668 NegativeMediumSpace: NegativeMediumSpace,
3669 NegativeThickSpace: NegativeThickSpace,
3670 NegativeThinSpace: NegativeThinSpace,
3671 NegativeVeryThinSpace: NegativeVeryThinSpace,
3672 nequiv: nequiv,
3673 nesear: nesear,
3674 nesim: nesim,
3675 NestedGreaterGreater: NestedGreaterGreater,
3676 NestedLessLess: NestedLessLess,
3677 NewLine: NewLine,
3678 nexist: nexist,
3679 nexists: nexists,
3680 Nfr: Nfr,
3681 nfr: nfr,
3682 ngE: ngE,
3683 nge: nge,
3684 ngeq: ngeq,
3685 ngeqq: ngeqq,
3686 ngeqslant: ngeqslant,
3687 nges: nges,
3688 nGg: nGg,
3689 ngsim: ngsim,
3690 nGt: nGt,
3691 ngt: ngt,
3692 ngtr: ngtr,
3693 nGtv: nGtv,
3694 nharr: nharr,
3695 nhArr: nhArr,
3696 nhpar: nhpar,
3697 ni: ni,
3698 nis: nis,
3699 nisd: nisd,
3700 niv: niv,
3701 NJcy: NJcy,
3702 njcy: njcy,
3703 nlarr: nlarr,
3704 nlArr: nlArr,
3705 nldr: nldr,
3706 nlE: nlE,
3707 nle: nle,
3708 nleftarrow: nleftarrow,
3709 nLeftarrow: nLeftarrow,
3710 nleftrightarrow: nleftrightarrow,
3711 nLeftrightarrow: nLeftrightarrow,
3712 nleq: nleq,
3713 nleqq: nleqq,
3714 nleqslant: nleqslant,
3715 nles: nles,
3716 nless: nless,
3717 nLl: nLl,
3718 nlsim: nlsim,
3719 nLt: nLt,
3720 nlt: nlt,
3721 nltri: nltri,
3722 nltrie: nltrie,
3723 nLtv: nLtv,
3724 nmid: nmid,
3725 NoBreak: NoBreak,
3726 NonBreakingSpace: NonBreakingSpace,
3727 nopf: nopf,
3728 Nopf: Nopf,
3729 Not: Not,
3730 not: not,
3731 NotCongruent: NotCongruent,
3732 NotCupCap: NotCupCap,
3733 NotDoubleVerticalBar: NotDoubleVerticalBar,
3734 NotElement: NotElement,
3735 NotEqual: NotEqual,
3736 NotEqualTilde: NotEqualTilde,
3737 NotExists: NotExists,
3738 NotGreater: NotGreater,
3739 NotGreaterEqual: NotGreaterEqual,
3740 NotGreaterFullEqual: NotGreaterFullEqual,
3741 NotGreaterGreater: NotGreaterGreater,
3742 NotGreaterLess: NotGreaterLess,
3743 NotGreaterSlantEqual: NotGreaterSlantEqual,
3744 NotGreaterTilde: NotGreaterTilde,
3745 NotHumpDownHump: NotHumpDownHump,
3746 NotHumpEqual: NotHumpEqual,
3747 notin: notin,
3748 notindot: notindot,
3749 notinE: notinE,
3750 notinva: notinva,
3751 notinvb: notinvb,
3752 notinvc: notinvc,
3753 NotLeftTriangleBar: NotLeftTriangleBar,
3754 NotLeftTriangle: NotLeftTriangle,
3755 NotLeftTriangleEqual: NotLeftTriangleEqual,
3756 NotLess: NotLess,
3757 NotLessEqual: NotLessEqual,
3758 NotLessGreater: NotLessGreater,
3759 NotLessLess: NotLessLess,
3760 NotLessSlantEqual: NotLessSlantEqual,
3761 NotLessTilde: NotLessTilde,
3762 NotNestedGreaterGreater: NotNestedGreaterGreater,
3763 NotNestedLessLess: NotNestedLessLess,
3764 notni: notni,
3765 notniva: notniva,
3766 notnivb: notnivb,
3767 notnivc: notnivc,
3768 NotPrecedes: NotPrecedes,
3769 NotPrecedesEqual: NotPrecedesEqual,
3770 NotPrecedesSlantEqual: NotPrecedesSlantEqual,
3771 NotReverseElement: NotReverseElement,
3772 NotRightTriangleBar: NotRightTriangleBar,
3773 NotRightTriangle: NotRightTriangle,
3774 NotRightTriangleEqual: NotRightTriangleEqual,
3775 NotSquareSubset: NotSquareSubset,
3776 NotSquareSubsetEqual: NotSquareSubsetEqual,
3777 NotSquareSuperset: NotSquareSuperset,
3778 NotSquareSupersetEqual: NotSquareSupersetEqual,
3779 NotSubset: NotSubset,
3780 NotSubsetEqual: NotSubsetEqual,
3781 NotSucceeds: NotSucceeds,
3782 NotSucceedsEqual: NotSucceedsEqual,
3783 NotSucceedsSlantEqual: NotSucceedsSlantEqual,
3784 NotSucceedsTilde: NotSucceedsTilde,
3785 NotSuperset: NotSuperset,
3786 NotSupersetEqual: NotSupersetEqual,
3787 NotTilde: NotTilde,
3788 NotTildeEqual: NotTildeEqual,
3789 NotTildeFullEqual: NotTildeFullEqual,
3790 NotTildeTilde: NotTildeTilde,
3791 NotVerticalBar: NotVerticalBar,
3792 nparallel: nparallel,
3793 npar: npar,
3794 nparsl: nparsl,
3795 npart: npart,
3796 npolint: npolint,
3797 npr: npr,
3798 nprcue: nprcue,
3799 nprec: nprec,
3800 npreceq: npreceq,
3801 npre: npre,
3802 nrarrc: nrarrc,
3803 nrarr: nrarr,
3804 nrArr: nrArr,
3805 nrarrw: nrarrw,
3806 nrightarrow: nrightarrow,
3807 nRightarrow: nRightarrow,
3808 nrtri: nrtri,
3809 nrtrie: nrtrie,
3810 nsc: nsc,
3811 nsccue: nsccue,
3812 nsce: nsce,
3813 Nscr: Nscr,
3814 nscr: nscr,
3815 nshortmid: nshortmid,
3816 nshortparallel: nshortparallel,
3817 nsim: nsim,
3818 nsime: nsime,
3819 nsimeq: nsimeq,
3820 nsmid: nsmid,
3821 nspar: nspar,
3822 nsqsube: nsqsube,
3823 nsqsupe: nsqsupe,
3824 nsub: nsub,
3825 nsubE: nsubE,
3826 nsube: nsube,
3827 nsubset: nsubset,
3828 nsubseteq: nsubseteq,
3829 nsubseteqq: nsubseteqq,
3830 nsucc: nsucc,
3831 nsucceq: nsucceq,
3832 nsup: nsup,
3833 nsupE: nsupE,
3834 nsupe: nsupe,
3835 nsupset: nsupset,
3836 nsupseteq: nsupseteq,
3837 nsupseteqq: nsupseteqq,
3838 ntgl: ntgl,
3839 Ntilde: Ntilde,
3840 ntilde: ntilde,
3841 ntlg: ntlg,
3842 ntriangleleft: ntriangleleft,
3843 ntrianglelefteq: ntrianglelefteq,
3844 ntriangleright: ntriangleright,
3845 ntrianglerighteq: ntrianglerighteq,
3846 Nu: Nu,
3847 nu: nu,
3848 num: num,
3849 numero: numero,
3850 numsp: numsp,
3851 nvap: nvap,
3852 nvdash: nvdash,
3853 nvDash: nvDash,
3854 nVdash: nVdash,
3855 nVDash: nVDash,
3856 nvge: nvge,
3857 nvgt: nvgt,
3858 nvHarr: nvHarr,
3859 nvinfin: nvinfin,
3860 nvlArr: nvlArr,
3861 nvle: nvle,
3862 nvlt: nvlt,
3863 nvltrie: nvltrie,
3864 nvrArr: nvrArr,
3865 nvrtrie: nvrtrie,
3866 nvsim: nvsim,
3867 nwarhk: nwarhk,
3868 nwarr: nwarr,
3869 nwArr: nwArr,
3870 nwarrow: nwarrow,
3871 nwnear: nwnear,
3872 Oacute: Oacute,
3873 oacute: oacute,
3874 oast: oast,
3875 Ocirc: Ocirc,
3876 ocirc: ocirc,
3877 ocir: ocir,
3878 Ocy: Ocy,
3879 ocy: ocy,
3880 odash: odash,
3881 Odblac: Odblac,
3882 odblac: odblac,
3883 odiv: odiv,
3884 odot: odot,
3885 odsold: odsold,
3886 OElig: OElig,
3887 oelig: oelig,
3888 ofcir: ofcir,
3889 Ofr: Ofr,
3890 ofr: ofr,
3891 ogon: ogon,
3892 Ograve: Ograve,
3893 ograve: ograve,
3894 ogt: ogt,
3895 ohbar: ohbar,
3896 ohm: ohm,
3897 oint: oint,
3898 olarr: olarr,
3899 olcir: olcir,
3900 olcross: olcross,
3901 oline: oline,
3902 olt: olt,
3903 Omacr: Omacr,
3904 omacr: omacr,
3905 Omega: Omega,
3906 omega: omega,
3907 Omicron: Omicron,
3908 omicron: omicron,
3909 omid: omid,
3910 ominus: ominus,
3911 Oopf: Oopf,
3912 oopf: oopf,
3913 opar: opar,
3914 OpenCurlyDoubleQuote: OpenCurlyDoubleQuote,
3915 OpenCurlyQuote: OpenCurlyQuote,
3916 operp: operp,
3917 oplus: oplus,
3918 orarr: orarr,
3919 Or: Or,
3920 or: or,
3921 ord: ord,
3922 order: order,
3923 orderof: orderof,
3924 ordf: ordf,
3925 ordm: ordm,
3926 origof: origof,
3927 oror: oror,
3928 orslope: orslope,
3929 orv: orv,
3930 oS: oS,
3931 Oscr: Oscr,
3932 oscr: oscr,
3933 Oslash: Oslash,
3934 oslash: oslash,
3935 osol: osol,
3936 Otilde: Otilde,
3937 otilde: otilde,
3938 otimesas: otimesas,
3939 Otimes: Otimes,
3940 otimes: otimes,
3941 Ouml: Ouml,
3942 ouml: ouml,
3943 ovbar: ovbar,
3944 OverBar: OverBar,
3945 OverBrace: OverBrace,
3946 OverBracket: OverBracket,
3947 OverParenthesis: OverParenthesis,
3948 para: para,
3949 parallel: parallel,
3950 par: par,
3951 parsim: parsim,
3952 parsl: parsl,
3953 part: part,
3954 PartialD: PartialD,
3955 Pcy: Pcy,
3956 pcy: pcy,
3957 percnt: percnt,
3958 period: period,
3959 permil: permil,
3960 perp: perp,
3961 pertenk: pertenk,
3962 Pfr: Pfr,
3963 pfr: pfr,
3964 Phi: Phi,
3965 phi: phi,
3966 phiv: phiv,
3967 phmmat: phmmat,
3968 phone: phone,
3969 Pi: Pi,
3970 pi: pi,
3971 pitchfork: pitchfork,
3972 piv: piv,
3973 planck: planck,
3974 planckh: planckh,
3975 plankv: plankv,
3976 plusacir: plusacir,
3977 plusb: plusb,
3978 pluscir: pluscir,
3979 plus: plus,
3980 plusdo: plusdo,
3981 plusdu: plusdu,
3982 pluse: pluse,
3983 PlusMinus: PlusMinus,
3984 plusmn: plusmn,
3985 plussim: plussim,
3986 plustwo: plustwo,
3987 pm: pm,
3988 Poincareplane: Poincareplane,
3989 pointint: pointint,
3990 popf: popf,
3991 Popf: Popf,
3992 pound: pound,
3993 prap: prap,
3994 Pr: Pr,
3995 pr: pr,
3996 prcue: prcue,
3997 precapprox: precapprox,
3998 prec: prec,
3999 preccurlyeq: preccurlyeq,
4000 Precedes: Precedes,
4001 PrecedesEqual: PrecedesEqual,
4002 PrecedesSlantEqual: PrecedesSlantEqual,
4003 PrecedesTilde: PrecedesTilde,
4004 preceq: preceq,
4005 precnapprox: precnapprox,
4006 precneqq: precneqq,
4007 precnsim: precnsim,
4008 pre: pre,
4009 prE: prE,
4010 precsim: precsim,
4011 prime: prime,
4012 Prime: Prime,
4013 primes: primes,
4014 prnap: prnap,
4015 prnE: prnE,
4016 prnsim: prnsim,
4017 prod: prod,
4018 Product: Product,
4019 profalar: profalar,
4020 profline: profline,
4021 profsurf: profsurf,
4022 prop: prop,
4023 Proportional: Proportional,
4024 Proportion: Proportion,
4025 propto: propto,
4026 prsim: prsim,
4027 prurel: prurel,
4028 Pscr: Pscr,
4029 pscr: pscr,
4030 Psi: Psi,
4031 psi: psi,
4032 puncsp: puncsp,
4033 Qfr: Qfr,
4034 qfr: qfr,
4035 qint: qint,
4036 qopf: qopf,
4037 Qopf: Qopf,
4038 qprime: qprime,
4039 Qscr: Qscr,
4040 qscr: qscr,
4041 quaternions: quaternions,
4042 quatint: quatint,
4043 quest: quest,
4044 questeq: questeq,
4045 quot: quot,
4046 QUOT: QUOT,
4047 rAarr: rAarr,
4048 race: race,
4049 Racute: Racute,
4050 racute: racute,
4051 radic: radic,
4052 raemptyv: raemptyv,
4053 rang: rang,
4054 Rang: Rang,
4055 rangd: rangd,
4056 range: range,
4057 rangle: rangle,
4058 raquo: raquo,
4059 rarrap: rarrap,
4060 rarrb: rarrb,
4061 rarrbfs: rarrbfs,
4062 rarrc: rarrc,
4063 rarr: rarr,
4064 Rarr: Rarr,
4065 rArr: rArr,
4066 rarrfs: rarrfs,
4067 rarrhk: rarrhk,
4068 rarrlp: rarrlp,
4069 rarrpl: rarrpl,
4070 rarrsim: rarrsim,
4071 Rarrtl: Rarrtl,
4072 rarrtl: rarrtl,
4073 rarrw: rarrw,
4074 ratail: ratail,
4075 rAtail: rAtail,
4076 ratio: ratio,
4077 rationals: rationals,
4078 rbarr: rbarr,
4079 rBarr: rBarr,
4080 RBarr: RBarr,
4081 rbbrk: rbbrk,
4082 rbrace: rbrace,
4083 rbrack: rbrack,
4084 rbrke: rbrke,
4085 rbrksld: rbrksld,
4086 rbrkslu: rbrkslu,
4087 Rcaron: Rcaron,
4088 rcaron: rcaron,
4089 Rcedil: Rcedil,
4090 rcedil: rcedil,
4091 rceil: rceil,
4092 rcub: rcub,
4093 Rcy: Rcy,
4094 rcy: rcy,
4095 rdca: rdca,
4096 rdldhar: rdldhar,
4097 rdquo: rdquo,
4098 rdquor: rdquor,
4099 rdsh: rdsh,
4100 real: real,
4101 realine: realine,
4102 realpart: realpart,
4103 reals: reals,
4104 Re: Re,
4105 rect: rect,
4106 reg: reg,
4107 REG: REG,
4108 ReverseElement: ReverseElement,
4109 ReverseEquilibrium: ReverseEquilibrium,
4110 ReverseUpEquilibrium: ReverseUpEquilibrium,
4111 rfisht: rfisht,
4112 rfloor: rfloor,
4113 rfr: rfr,
4114 Rfr: Rfr,
4115 rHar: rHar,
4116 rhard: rhard,
4117 rharu: rharu,
4118 rharul: rharul,
4119 Rho: Rho,
4120 rho: rho,
4121 rhov: rhov,
4122 RightAngleBracket: RightAngleBracket,
4123 RightArrowBar: RightArrowBar,
4124 rightarrow: rightarrow,
4125 RightArrow: RightArrow,
4126 Rightarrow: Rightarrow,
4127 RightArrowLeftArrow: RightArrowLeftArrow,
4128 rightarrowtail: rightarrowtail,
4129 RightCeiling: RightCeiling,
4130 RightDoubleBracket: RightDoubleBracket,
4131 RightDownTeeVector: RightDownTeeVector,
4132 RightDownVectorBar: RightDownVectorBar,
4133 RightDownVector: RightDownVector,
4134 RightFloor: RightFloor,
4135 rightharpoondown: rightharpoondown,
4136 rightharpoonup: rightharpoonup,
4137 rightleftarrows: rightleftarrows,
4138 rightleftharpoons: rightleftharpoons,
4139 rightrightarrows: rightrightarrows,
4140 rightsquigarrow: rightsquigarrow,
4141 RightTeeArrow: RightTeeArrow,
4142 RightTee: RightTee,
4143 RightTeeVector: RightTeeVector,
4144 rightthreetimes: rightthreetimes,
4145 RightTriangleBar: RightTriangleBar,
4146 RightTriangle: RightTriangle,
4147 RightTriangleEqual: RightTriangleEqual,
4148 RightUpDownVector: RightUpDownVector,
4149 RightUpTeeVector: RightUpTeeVector,
4150 RightUpVectorBar: RightUpVectorBar,
4151 RightUpVector: RightUpVector,
4152 RightVectorBar: RightVectorBar,
4153 RightVector: RightVector,
4154 ring: ring,
4155 risingdotseq: risingdotseq,
4156 rlarr: rlarr,
4157 rlhar: rlhar,
4158 rlm: rlm,
4159 rmoustache: rmoustache,
4160 rmoust: rmoust,
4161 rnmid: rnmid,
4162 roang: roang,
4163 roarr: roarr,
4164 robrk: robrk,
4165 ropar: ropar,
4166 ropf: ropf,
4167 Ropf: Ropf,
4168 roplus: roplus,
4169 rotimes: rotimes,
4170 RoundImplies: RoundImplies,
4171 rpar: rpar,
4172 rpargt: rpargt,
4173 rppolint: rppolint,
4174 rrarr: rrarr,
4175 Rrightarrow: Rrightarrow,
4176 rsaquo: rsaquo,
4177 rscr: rscr,
4178 Rscr: Rscr,
4179 rsh: rsh,
4180 Rsh: Rsh,
4181 rsqb: rsqb,
4182 rsquo: rsquo,
4183 rsquor: rsquor,
4184 rthree: rthree,
4185 rtimes: rtimes,
4186 rtri: rtri,
4187 rtrie: rtrie,
4188 rtrif: rtrif,
4189 rtriltri: rtriltri,
4190 RuleDelayed: RuleDelayed,
4191 ruluhar: ruluhar,
4192 rx: rx,
4193 Sacute: Sacute,
4194 sacute: sacute,
4195 sbquo: sbquo,
4196 scap: scap,
4197 Scaron: Scaron,
4198 scaron: scaron,
4199 Sc: Sc,
4200 sc: sc,
4201 sccue: sccue,
4202 sce: sce,
4203 scE: scE,
4204 Scedil: Scedil,
4205 scedil: scedil,
4206 Scirc: Scirc,
4207 scirc: scirc,
4208 scnap: scnap,
4209 scnE: scnE,
4210 scnsim: scnsim,
4211 scpolint: scpolint,
4212 scsim: scsim,
4213 Scy: Scy,
4214 scy: scy,
4215 sdotb: sdotb,
4216 sdot: sdot,
4217 sdote: sdote,
4218 searhk: searhk,
4219 searr: searr,
4220 seArr: seArr,
4221 searrow: searrow,
4222 sect: sect,
4223 semi: semi,
4224 seswar: seswar,
4225 setminus: setminus,
4226 setmn: setmn,
4227 sext: sext,
4228 Sfr: Sfr,
4229 sfr: sfr,
4230 sfrown: sfrown,
4231 sharp: sharp,
4232 SHCHcy: SHCHcy,
4233 shchcy: shchcy,
4234 SHcy: SHcy,
4235 shcy: shcy,
4236 ShortDownArrow: ShortDownArrow,
4237 ShortLeftArrow: ShortLeftArrow,
4238 shortmid: shortmid,
4239 shortparallel: shortparallel,
4240 ShortRightArrow: ShortRightArrow,
4241 ShortUpArrow: ShortUpArrow,
4242 shy: shy,
4243 Sigma: Sigma,
4244 sigma: sigma,
4245 sigmaf: sigmaf,
4246 sigmav: sigmav,
4247 sim: sim,
4248 simdot: simdot,
4249 sime: sime,
4250 simeq: simeq,
4251 simg: simg,
4252 simgE: simgE,
4253 siml: siml,
4254 simlE: simlE,
4255 simne: simne,
4256 simplus: simplus,
4257 simrarr: simrarr,
4258 slarr: slarr,
4259 SmallCircle: SmallCircle,
4260 smallsetminus: smallsetminus,
4261 smashp: smashp,
4262 smeparsl: smeparsl,
4263 smid: smid,
4264 smile: smile,
4265 smt: smt,
4266 smte: smte,
4267 smtes: smtes,
4268 SOFTcy: SOFTcy,
4269 softcy: softcy,
4270 solbar: solbar,
4271 solb: solb,
4272 sol: sol,
4273 Sopf: Sopf,
4274 sopf: sopf,
4275 spades: spades,
4276 spadesuit: spadesuit,
4277 spar: spar,
4278 sqcap: sqcap,
4279 sqcaps: sqcaps,
4280 sqcup: sqcup,
4281 sqcups: sqcups,
4282 Sqrt: Sqrt,
4283 sqsub: sqsub,
4284 sqsube: sqsube,
4285 sqsubset: sqsubset,
4286 sqsubseteq: sqsubseteq,
4287 sqsup: sqsup,
4288 sqsupe: sqsupe,
4289 sqsupset: sqsupset,
4290 sqsupseteq: sqsupseteq,
4291 square: square,
4292 Square: Square,
4293 SquareIntersection: SquareIntersection,
4294 SquareSubset: SquareSubset,
4295 SquareSubsetEqual: SquareSubsetEqual,
4296 SquareSuperset: SquareSuperset,
4297 SquareSupersetEqual: SquareSupersetEqual,
4298 SquareUnion: SquareUnion,
4299 squarf: squarf,
4300 squ: squ,
4301 squf: squf,
4302 srarr: srarr,
4303 Sscr: Sscr,
4304 sscr: sscr,
4305 ssetmn: ssetmn,
4306 ssmile: ssmile,
4307 sstarf: sstarf,
4308 Star: Star,
4309 star: star,
4310 starf: starf,
4311 straightepsilon: straightepsilon,
4312 straightphi: straightphi,
4313 strns: strns,
4314 sub: sub,
4315 Sub: Sub,
4316 subdot: subdot,
4317 subE: subE,
4318 sube: sube,
4319 subedot: subedot,
4320 submult: submult,
4321 subnE: subnE,
4322 subne: subne,
4323 subplus: subplus,
4324 subrarr: subrarr,
4325 subset: subset,
4326 Subset: Subset,
4327 subseteq: subseteq,
4328 subseteqq: subseteqq,
4329 SubsetEqual: SubsetEqual,
4330 subsetneq: subsetneq,
4331 subsetneqq: subsetneqq,
4332 subsim: subsim,
4333 subsub: subsub,
4334 subsup: subsup,
4335 succapprox: succapprox,
4336 succ: succ,
4337 succcurlyeq: succcurlyeq,
4338 Succeeds: Succeeds,
4339 SucceedsEqual: SucceedsEqual,
4340 SucceedsSlantEqual: SucceedsSlantEqual,
4341 SucceedsTilde: SucceedsTilde,
4342 succeq: succeq,
4343 succnapprox: succnapprox,
4344 succneqq: succneqq,
4345 succnsim: succnsim,
4346 succsim: succsim,
4347 SuchThat: SuchThat,
4348 sum: sum,
4349 Sum: Sum,
4350 sung: sung,
4351 sup1: sup1,
4352 sup2: sup2,
4353 sup3: sup3,
4354 sup: sup,
4355 Sup: Sup,
4356 supdot: supdot,
4357 supdsub: supdsub,
4358 supE: supE,
4359 supe: supe,
4360 supedot: supedot,
4361 Superset: Superset,
4362 SupersetEqual: SupersetEqual,
4363 suphsol: suphsol,
4364 suphsub: suphsub,
4365 suplarr: suplarr,
4366 supmult: supmult,
4367 supnE: supnE,
4368 supne: supne,
4369 supplus: supplus,
4370 supset: supset,
4371 Supset: Supset,
4372 supseteq: supseteq,
4373 supseteqq: supseteqq,
4374 supsetneq: supsetneq,
4375 supsetneqq: supsetneqq,
4376 supsim: supsim,
4377 supsub: supsub,
4378 supsup: supsup,
4379 swarhk: swarhk,
4380 swarr: swarr,
4381 swArr: swArr,
4382 swarrow: swarrow,
4383 swnwar: swnwar,
4384 szlig: szlig,
4385 Tab: Tab,
4386 target: target,
4387 Tau: Tau,
4388 tau: tau,
4389 tbrk: tbrk,
4390 Tcaron: Tcaron,
4391 tcaron: tcaron,
4392 Tcedil: Tcedil,
4393 tcedil: tcedil,
4394 Tcy: Tcy,
4395 tcy: tcy,
4396 tdot: tdot,
4397 telrec: telrec,
4398 Tfr: Tfr,
4399 tfr: tfr,
4400 there4: there4,
4401 therefore: therefore,
4402 Therefore: Therefore,
4403 Theta: Theta,
4404 theta: theta,
4405 thetasym: thetasym,
4406 thetav: thetav,
4407 thickapprox: thickapprox,
4408 thicksim: thicksim,
4409 ThickSpace: ThickSpace,
4410 ThinSpace: ThinSpace,
4411 thinsp: thinsp,
4412 thkap: thkap,
4413 thksim: thksim,
4414 THORN: THORN,
4415 thorn: thorn,
4416 tilde: tilde,
4417 Tilde: Tilde,
4418 TildeEqual: TildeEqual,
4419 TildeFullEqual: TildeFullEqual,
4420 TildeTilde: TildeTilde,
4421 timesbar: timesbar,
4422 timesb: timesb,
4423 times: times,
4424 timesd: timesd,
4425 tint: tint,
4426 toea: toea,
4427 topbot: topbot,
4428 topcir: topcir,
4429 top: top,
4430 Topf: Topf,
4431 topf: topf,
4432 topfork: topfork,
4433 tosa: tosa,
4434 tprime: tprime,
4435 trade: trade,
4436 TRADE: TRADE,
4437 triangle: triangle,
4438 triangledown: triangledown,
4439 triangleleft: triangleleft,
4440 trianglelefteq: trianglelefteq,
4441 triangleq: triangleq,
4442 triangleright: triangleright,
4443 trianglerighteq: trianglerighteq,
4444 tridot: tridot,
4445 trie: trie,
4446 triminus: triminus,
4447 TripleDot: TripleDot,
4448 triplus: triplus,
4449 trisb: trisb,
4450 tritime: tritime,
4451 trpezium: trpezium,
4452 Tscr: Tscr,
4453 tscr: tscr,
4454 TScy: TScy,
4455 tscy: tscy,
4456 TSHcy: TSHcy,
4457 tshcy: tshcy,
4458 Tstrok: Tstrok,
4459 tstrok: tstrok,
4460 twixt: twixt,
4461 twoheadleftarrow: twoheadleftarrow,
4462 twoheadrightarrow: twoheadrightarrow,
4463 Uacute: Uacute,
4464 uacute: uacute,
4465 uarr: uarr,
4466 Uarr: Uarr,
4467 uArr: uArr,
4468 Uarrocir: Uarrocir,
4469 Ubrcy: Ubrcy,
4470 ubrcy: ubrcy,
4471 Ubreve: Ubreve,
4472 ubreve: ubreve,
4473 Ucirc: Ucirc,
4474 ucirc: ucirc,
4475 Ucy: Ucy,
4476 ucy: ucy,
4477 udarr: udarr,
4478 Udblac: Udblac,
4479 udblac: udblac,
4480 udhar: udhar,
4481 ufisht: ufisht,
4482 Ufr: Ufr,
4483 ufr: ufr,
4484 Ugrave: Ugrave,
4485 ugrave: ugrave,
4486 uHar: uHar,
4487 uharl: uharl,
4488 uharr: uharr,
4489 uhblk: uhblk,
4490 ulcorn: ulcorn,
4491 ulcorner: ulcorner,
4492 ulcrop: ulcrop,
4493 ultri: ultri,
4494 Umacr: Umacr,
4495 umacr: umacr,
4496 uml: uml,
4497 UnderBar: UnderBar,
4498 UnderBrace: UnderBrace,
4499 UnderBracket: UnderBracket,
4500 UnderParenthesis: UnderParenthesis,
4501 Union: Union,
4502 UnionPlus: UnionPlus,
4503 Uogon: Uogon,
4504 uogon: uogon,
4505 Uopf: Uopf,
4506 uopf: uopf,
4507 UpArrowBar: UpArrowBar,
4508 uparrow: uparrow,
4509 UpArrow: UpArrow,
4510 Uparrow: Uparrow,
4511 UpArrowDownArrow: UpArrowDownArrow,
4512 updownarrow: updownarrow,
4513 UpDownArrow: UpDownArrow,
4514 Updownarrow: Updownarrow,
4515 UpEquilibrium: UpEquilibrium,
4516 upharpoonleft: upharpoonleft,
4517 upharpoonright: upharpoonright,
4518 uplus: uplus,
4519 UpperLeftArrow: UpperLeftArrow,
4520 UpperRightArrow: UpperRightArrow,
4521 upsi: upsi,
4522 Upsi: Upsi,
4523 upsih: upsih,
4524 Upsilon: Upsilon,
4525 upsilon: upsilon,
4526 UpTeeArrow: UpTeeArrow,
4527 UpTee: UpTee,
4528 upuparrows: upuparrows,
4529 urcorn: urcorn,
4530 urcorner: urcorner,
4531 urcrop: urcrop,
4532 Uring: Uring,
4533 uring: uring,
4534 urtri: urtri,
4535 Uscr: Uscr,
4536 uscr: uscr,
4537 utdot: utdot,
4538 Utilde: Utilde,
4539 utilde: utilde,
4540 utri: utri,
4541 utrif: utrif,
4542 uuarr: uuarr,
4543 Uuml: Uuml,
4544 uuml: uuml,
4545 uwangle: uwangle,
4546 vangrt: vangrt,
4547 varepsilon: varepsilon,
4548 varkappa: varkappa,
4549 varnothing: varnothing,
4550 varphi: varphi,
4551 varpi: varpi,
4552 varpropto: varpropto,
4553 varr: varr,
4554 vArr: vArr,
4555 varrho: varrho,
4556 varsigma: varsigma,
4557 varsubsetneq: varsubsetneq,
4558 varsubsetneqq: varsubsetneqq,
4559 varsupsetneq: varsupsetneq,
4560 varsupsetneqq: varsupsetneqq,
4561 vartheta: vartheta,
4562 vartriangleleft: vartriangleleft,
4563 vartriangleright: vartriangleright,
4564 vBar: vBar,
4565 Vbar: Vbar,
4566 vBarv: vBarv,
4567 Vcy: Vcy,
4568 vcy: vcy,
4569 vdash: vdash,
4570 vDash: vDash,
4571 Vdash: Vdash,
4572 VDash: VDash,
4573 Vdashl: Vdashl,
4574 veebar: veebar,
4575 vee: vee,
4576 Vee: Vee,
4577 veeeq: veeeq,
4578 vellip: vellip,
4579 verbar: verbar,
4580 Verbar: Verbar,
4581 vert: vert,
4582 Vert: Vert,
4583 VerticalBar: VerticalBar,
4584 VerticalLine: VerticalLine,
4585 VerticalSeparator: VerticalSeparator,
4586 VerticalTilde: VerticalTilde,
4587 VeryThinSpace: VeryThinSpace,
4588 Vfr: Vfr,
4589 vfr: vfr,
4590 vltri: vltri,
4591 vnsub: vnsub,
4592 vnsup: vnsup,
4593 Vopf: Vopf,
4594 vopf: vopf,
4595 vprop: vprop,
4596 vrtri: vrtri,
4597 Vscr: Vscr,
4598 vscr: vscr,
4599 vsubnE: vsubnE,
4600 vsubne: vsubne,
4601 vsupnE: vsupnE,
4602 vsupne: vsupne,
4603 Vvdash: Vvdash,
4604 vzigzag: vzigzag,
4605 Wcirc: Wcirc,
4606 wcirc: wcirc,
4607 wedbar: wedbar,
4608 wedge: wedge,
4609 Wedge: Wedge,
4610 wedgeq: wedgeq,
4611 weierp: weierp,
4612 Wfr: Wfr,
4613 wfr: wfr,
4614 Wopf: Wopf,
4615 wopf: wopf,
4616 wp: wp,
4617 wr: wr,
4618 wreath: wreath,
4619 Wscr: Wscr,
4620 wscr: wscr,
4621 xcap: xcap,
4622 xcirc: xcirc,
4623 xcup: xcup,
4624 xdtri: xdtri,
4625 Xfr: Xfr,
4626 xfr: xfr,
4627 xharr: xharr,
4628 xhArr: xhArr,
4629 Xi: Xi,
4630 xi: xi,
4631 xlarr: xlarr,
4632 xlArr: xlArr,
4633 xmap: xmap,
4634 xnis: xnis,
4635 xodot: xodot,
4636 Xopf: Xopf,
4637 xopf: xopf,
4638 xoplus: xoplus,
4639 xotime: xotime,
4640 xrarr: xrarr,
4641 xrArr: xrArr,
4642 Xscr: Xscr,
4643 xscr: xscr,
4644 xsqcup: xsqcup,
4645 xuplus: xuplus,
4646 xutri: xutri,
4647 xvee: xvee,
4648 xwedge: xwedge,
4649 Yacute: Yacute,
4650 yacute: yacute,
4651 YAcy: YAcy,
4652 yacy: yacy,
4653 Ycirc: Ycirc,
4654 ycirc: ycirc,
4655 Ycy: Ycy,
4656 ycy: ycy,
4657 yen: yen,
4658 Yfr: Yfr,
4659 yfr: yfr,
4660 YIcy: YIcy,
4661 yicy: yicy,
4662 Yopf: Yopf,
4663 yopf: yopf,
4664 Yscr: Yscr,
4665 yscr: yscr,
4666 YUcy: YUcy,
4667 yucy: yucy,
4668 yuml: yuml,
4669 Yuml: Yuml,
4670 Zacute: Zacute,
4671 zacute: zacute,
4672 Zcaron: Zcaron,
4673 zcaron: zcaron,
4674 Zcy: Zcy,
4675 zcy: zcy,
4676 Zdot: Zdot,
4677 zdot: zdot,
4678 zeetrf: zeetrf,
4679 ZeroWidthSpace: ZeroWidthSpace,
4680 Zeta: Zeta,
4681 zeta: zeta,
4682 zfr: zfr,
4683 Zfr: Zfr,
4684 ZHcy: ZHcy,
4685 zhcy: zhcy,
4686 zigrarr: zigrarr,
4687 zopf: zopf,
4688 Zopf: Zopf,
4689 Zscr: Zscr,
4690 zscr: zscr,
4691 zwj: zwj,
4692 zwnj: zwnj
4693 };
4694
4695 var entities$1 = /*#__PURE__*/Object.freeze({
4696 __proto__: null,
4697 Aacute: Aacute,
4698 aacute: aacute,
4699 Abreve: Abreve,
4700 abreve: abreve,
4701 ac: ac,
4702 acd: acd,
4703 acE: acE,
4704 Acirc: Acirc,
4705 acirc: acirc,
4706 acute: acute,
4707 Acy: Acy,
4708 acy: acy,
4709 AElig: AElig,
4710 aelig: aelig,
4711 af: af,
4712 Afr: Afr,
4713 afr: afr,
4714 Agrave: Agrave,
4715 agrave: agrave,
4716 alefsym: alefsym,
4717 aleph: aleph,
4718 Alpha: Alpha,
4719 alpha: alpha,
4720 Amacr: Amacr,
4721 amacr: amacr,
4722 amalg: amalg,
4723 amp: amp,
4724 AMP: AMP,
4725 andand: andand,
4726 And: And,
4727 and: and,
4728 andd: andd,
4729 andslope: andslope,
4730 andv: andv,
4731 ang: ang,
4732 ange: ange,
4733 angle: angle,
4734 angmsdaa: angmsdaa,
4735 angmsdab: angmsdab,
4736 angmsdac: angmsdac,
4737 angmsdad: angmsdad,
4738 angmsdae: angmsdae,
4739 angmsdaf: angmsdaf,
4740 angmsdag: angmsdag,
4741 angmsdah: angmsdah,
4742 angmsd: angmsd,
4743 angrt: angrt,
4744 angrtvb: angrtvb,
4745 angrtvbd: angrtvbd,
4746 angsph: angsph,
4747 angst: angst,
4748 angzarr: angzarr,
4749 Aogon: Aogon,
4750 aogon: aogon,
4751 Aopf: Aopf,
4752 aopf: aopf,
4753 apacir: apacir,
4754 ap: ap,
4755 apE: apE,
4756 ape: ape,
4757 apid: apid,
4758 apos: apos,
4759 ApplyFunction: ApplyFunction,
4760 approx: approx,
4761 approxeq: approxeq,
4762 Aring: Aring,
4763 aring: aring,
4764 Ascr: Ascr,
4765 ascr: ascr,
4766 Assign: Assign,
4767 ast: ast,
4768 asymp: asymp,
4769 asympeq: asympeq,
4770 Atilde: Atilde,
4771 atilde: atilde,
4772 Auml: Auml,
4773 auml: auml,
4774 awconint: awconint,
4775 awint: awint,
4776 backcong: backcong,
4777 backepsilon: backepsilon,
4778 backprime: backprime,
4779 backsim: backsim,
4780 backsimeq: backsimeq,
4781 Backslash: Backslash,
4782 Barv: Barv,
4783 barvee: barvee,
4784 barwed: barwed,
4785 Barwed: Barwed,
4786 barwedge: barwedge,
4787 bbrk: bbrk,
4788 bbrktbrk: bbrktbrk,
4789 bcong: bcong,
4790 Bcy: Bcy,
4791 bcy: bcy,
4792 bdquo: bdquo,
4793 becaus: becaus,
4794 because: because,
4795 Because: Because,
4796 bemptyv: bemptyv,
4797 bepsi: bepsi,
4798 bernou: bernou,
4799 Bernoullis: Bernoullis,
4800 Beta: Beta,
4801 beta: beta,
4802 beth: beth,
4803 between: between,
4804 Bfr: Bfr,
4805 bfr: bfr,
4806 bigcap: bigcap,
4807 bigcirc: bigcirc,
4808 bigcup: bigcup,
4809 bigodot: bigodot,
4810 bigoplus: bigoplus,
4811 bigotimes: bigotimes,
4812 bigsqcup: bigsqcup,
4813 bigstar: bigstar,
4814 bigtriangledown: bigtriangledown,
4815 bigtriangleup: bigtriangleup,
4816 biguplus: biguplus,
4817 bigvee: bigvee,
4818 bigwedge: bigwedge,
4819 bkarow: bkarow,
4820 blacklozenge: blacklozenge,
4821 blacksquare: blacksquare,
4822 blacktriangle: blacktriangle,
4823 blacktriangledown: blacktriangledown,
4824 blacktriangleleft: blacktriangleleft,
4825 blacktriangleright: blacktriangleright,
4826 blank: blank,
4827 blk12: blk12,
4828 blk14: blk14,
4829 blk34: blk34,
4830 block: block,
4831 bne: bne,
4832 bnequiv: bnequiv,
4833 bNot: bNot,
4834 bnot: bnot,
4835 Bopf: Bopf,
4836 bopf: bopf,
4837 bot: bot,
4838 bottom: bottom,
4839 bowtie: bowtie,
4840 boxbox: boxbox,
4841 boxdl: boxdl,
4842 boxdL: boxdL,
4843 boxDl: boxDl,
4844 boxDL: boxDL,
4845 boxdr: boxdr,
4846 boxdR: boxdR,
4847 boxDr: boxDr,
4848 boxDR: boxDR,
4849 boxh: boxh,
4850 boxH: boxH,
4851 boxhd: boxhd,
4852 boxHd: boxHd,
4853 boxhD: boxhD,
4854 boxHD: boxHD,
4855 boxhu: boxhu,
4856 boxHu: boxHu,
4857 boxhU: boxhU,
4858 boxHU: boxHU,
4859 boxminus: boxminus,
4860 boxplus: boxplus,
4861 boxtimes: boxtimes,
4862 boxul: boxul,
4863 boxuL: boxuL,
4864 boxUl: boxUl,
4865 boxUL: boxUL,
4866 boxur: boxur,
4867 boxuR: boxuR,
4868 boxUr: boxUr,
4869 boxUR: boxUR,
4870 boxv: boxv,
4871 boxV: boxV,
4872 boxvh: boxvh,
4873 boxvH: boxvH,
4874 boxVh: boxVh,
4875 boxVH: boxVH,
4876 boxvl: boxvl,
4877 boxvL: boxvL,
4878 boxVl: boxVl,
4879 boxVL: boxVL,
4880 boxvr: boxvr,
4881 boxvR: boxvR,
4882 boxVr: boxVr,
4883 boxVR: boxVR,
4884 bprime: bprime,
4885 breve: breve,
4886 Breve: Breve,
4887 brvbar: brvbar,
4888 bscr: bscr,
4889 Bscr: Bscr,
4890 bsemi: bsemi,
4891 bsim: bsim,
4892 bsime: bsime,
4893 bsolb: bsolb,
4894 bsol: bsol,
4895 bsolhsub: bsolhsub,
4896 bull: bull,
4897 bullet: bullet,
4898 bump: bump,
4899 bumpE: bumpE,
4900 bumpe: bumpe,
4901 Bumpeq: Bumpeq,
4902 bumpeq: bumpeq,
4903 Cacute: Cacute,
4904 cacute: cacute,
4905 capand: capand,
4906 capbrcup: capbrcup,
4907 capcap: capcap,
4908 cap: cap,
4909 Cap: Cap,
4910 capcup: capcup,
4911 capdot: capdot,
4912 CapitalDifferentialD: CapitalDifferentialD,
4913 caps: caps,
4914 caret: caret,
4915 caron: caron,
4916 Cayleys: Cayleys,
4917 ccaps: ccaps,
4918 Ccaron: Ccaron,
4919 ccaron: ccaron,
4920 Ccedil: Ccedil,
4921 ccedil: ccedil,
4922 Ccirc: Ccirc,
4923 ccirc: ccirc,
4924 Cconint: Cconint,
4925 ccups: ccups,
4926 ccupssm: ccupssm,
4927 Cdot: Cdot,
4928 cdot: cdot,
4929 cedil: cedil,
4930 Cedilla: Cedilla,
4931 cemptyv: cemptyv,
4932 cent: cent,
4933 centerdot: centerdot,
4934 CenterDot: CenterDot,
4935 cfr: cfr,
4936 Cfr: Cfr,
4937 CHcy: CHcy,
4938 chcy: chcy,
4939 check: check,
4940 checkmark: checkmark,
4941 Chi: Chi,
4942 chi: chi,
4943 circ: circ,
4944 circeq: circeq,
4945 circlearrowleft: circlearrowleft,
4946 circlearrowright: circlearrowright,
4947 circledast: circledast,
4948 circledcirc: circledcirc,
4949 circleddash: circleddash,
4950 CircleDot: CircleDot,
4951 circledR: circledR,
4952 circledS: circledS,
4953 CircleMinus: CircleMinus,
4954 CirclePlus: CirclePlus,
4955 CircleTimes: CircleTimes,
4956 cir: cir,
4957 cirE: cirE,
4958 cire: cire,
4959 cirfnint: cirfnint,
4960 cirmid: cirmid,
4961 cirscir: cirscir,
4962 ClockwiseContourIntegral: ClockwiseContourIntegral,
4963 CloseCurlyDoubleQuote: CloseCurlyDoubleQuote,
4964 CloseCurlyQuote: CloseCurlyQuote,
4965 clubs: clubs,
4966 clubsuit: clubsuit,
4967 colon: colon,
4968 Colon: Colon,
4969 Colone: Colone,
4970 colone: colone,
4971 coloneq: coloneq,
4972 comma: comma,
4973 commat: commat,
4974 comp: comp,
4975 compfn: compfn,
4976 complement: complement,
4977 complexes: complexes,
4978 cong: cong,
4979 congdot: congdot,
4980 Congruent: Congruent,
4981 conint: conint,
4982 Conint: Conint,
4983 ContourIntegral: ContourIntegral,
4984 copf: copf,
4985 Copf: Copf,
4986 coprod: coprod,
4987 Coproduct: Coproduct,
4988 copy: copy,
4989 COPY: COPY,
4990 copysr: copysr,
4991 CounterClockwiseContourIntegral: CounterClockwiseContourIntegral,
4992 crarr: crarr,
4993 cross: cross,
4994 Cross: Cross,
4995 Cscr: Cscr,
4996 cscr: cscr,
4997 csub: csub,
4998 csube: csube,
4999 csup: csup,
5000 csupe: csupe,
5001 ctdot: ctdot,
5002 cudarrl: cudarrl,
5003 cudarrr: cudarrr,
5004 cuepr: cuepr,
5005 cuesc: cuesc,
5006 cularr: cularr,
5007 cularrp: cularrp,
5008 cupbrcap: cupbrcap,
5009 cupcap: cupcap,
5010 CupCap: CupCap,
5011 cup: cup,
5012 Cup: Cup,
5013 cupcup: cupcup,
5014 cupdot: cupdot,
5015 cupor: cupor,
5016 cups: cups,
5017 curarr: curarr,
5018 curarrm: curarrm,
5019 curlyeqprec: curlyeqprec,
5020 curlyeqsucc: curlyeqsucc,
5021 curlyvee: curlyvee,
5022 curlywedge: curlywedge,
5023 curren: curren,
5024 curvearrowleft: curvearrowleft,
5025 curvearrowright: curvearrowright,
5026 cuvee: cuvee,
5027 cuwed: cuwed,
5028 cwconint: cwconint,
5029 cwint: cwint,
5030 cylcty: cylcty,
5031 dagger: dagger,
5032 Dagger: Dagger,
5033 daleth: daleth,
5034 darr: darr,
5035 Darr: Darr,
5036 dArr: dArr,
5037 dash: dash,
5038 Dashv: Dashv,
5039 dashv: dashv,
5040 dbkarow: dbkarow,
5041 dblac: dblac,
5042 Dcaron: Dcaron,
5043 dcaron: dcaron,
5044 Dcy: Dcy,
5045 dcy: dcy,
5046 ddagger: ddagger,
5047 ddarr: ddarr,
5048 DD: DD,
5049 dd: dd,
5050 DDotrahd: DDotrahd,
5051 ddotseq: ddotseq,
5052 deg: deg,
5053 Del: Del,
5054 Delta: Delta,
5055 delta: delta,
5056 demptyv: demptyv,
5057 dfisht: dfisht,
5058 Dfr: Dfr,
5059 dfr: dfr,
5060 dHar: dHar,
5061 dharl: dharl,
5062 dharr: dharr,
5063 DiacriticalAcute: DiacriticalAcute,
5064 DiacriticalDot: DiacriticalDot,
5065 DiacriticalDoubleAcute: DiacriticalDoubleAcute,
5066 DiacriticalGrave: DiacriticalGrave,
5067 DiacriticalTilde: DiacriticalTilde,
5068 diam: diam,
5069 diamond: diamond,
5070 Diamond: Diamond,
5071 diamondsuit: diamondsuit,
5072 diams: diams,
5073 die: die,
5074 DifferentialD: DifferentialD,
5075 digamma: digamma,
5076 disin: disin,
5077 div: div,
5078 divide: divide,
5079 divideontimes: divideontimes,
5080 divonx: divonx,
5081 DJcy: DJcy,
5082 djcy: djcy,
5083 dlcorn: dlcorn,
5084 dlcrop: dlcrop,
5085 dollar: dollar,
5086 Dopf: Dopf,
5087 dopf: dopf,
5088 Dot: Dot,
5089 dot: dot,
5090 DotDot: DotDot,
5091 doteq: doteq,
5092 doteqdot: doteqdot,
5093 DotEqual: DotEqual,
5094 dotminus: dotminus,
5095 dotplus: dotplus,
5096 dotsquare: dotsquare,
5097 doublebarwedge: doublebarwedge,
5098 DoubleContourIntegral: DoubleContourIntegral,
5099 DoubleDot: DoubleDot,
5100 DoubleDownArrow: DoubleDownArrow,
5101 DoubleLeftArrow: DoubleLeftArrow,
5102 DoubleLeftRightArrow: DoubleLeftRightArrow,
5103 DoubleLeftTee: DoubleLeftTee,
5104 DoubleLongLeftArrow: DoubleLongLeftArrow,
5105 DoubleLongLeftRightArrow: DoubleLongLeftRightArrow,
5106 DoubleLongRightArrow: DoubleLongRightArrow,
5107 DoubleRightArrow: DoubleRightArrow,
5108 DoubleRightTee: DoubleRightTee,
5109 DoubleUpArrow: DoubleUpArrow,
5110 DoubleUpDownArrow: DoubleUpDownArrow,
5111 DoubleVerticalBar: DoubleVerticalBar,
5112 DownArrowBar: DownArrowBar,
5113 downarrow: downarrow,
5114 DownArrow: DownArrow,
5115 Downarrow: Downarrow,
5116 DownArrowUpArrow: DownArrowUpArrow,
5117 DownBreve: DownBreve,
5118 downdownarrows: downdownarrows,
5119 downharpoonleft: downharpoonleft,
5120 downharpoonright: downharpoonright,
5121 DownLeftRightVector: DownLeftRightVector,
5122 DownLeftTeeVector: DownLeftTeeVector,
5123 DownLeftVectorBar: DownLeftVectorBar,
5124 DownLeftVector: DownLeftVector,
5125 DownRightTeeVector: DownRightTeeVector,
5126 DownRightVectorBar: DownRightVectorBar,
5127 DownRightVector: DownRightVector,
5128 DownTeeArrow: DownTeeArrow,
5129 DownTee: DownTee,
5130 drbkarow: drbkarow,
5131 drcorn: drcorn,
5132 drcrop: drcrop,
5133 Dscr: Dscr,
5134 dscr: dscr,
5135 DScy: DScy,
5136 dscy: dscy,
5137 dsol: dsol,
5138 Dstrok: Dstrok,
5139 dstrok: dstrok,
5140 dtdot: dtdot,
5141 dtri: dtri,
5142 dtrif: dtrif,
5143 duarr: duarr,
5144 duhar: duhar,
5145 dwangle: dwangle,
5146 DZcy: DZcy,
5147 dzcy: dzcy,
5148 dzigrarr: dzigrarr,
5149 Eacute: Eacute,
5150 eacute: eacute,
5151 easter: easter,
5152 Ecaron: Ecaron,
5153 ecaron: ecaron,
5154 Ecirc: Ecirc,
5155 ecirc: ecirc,
5156 ecir: ecir,
5157 ecolon: ecolon,
5158 Ecy: Ecy,
5159 ecy: ecy,
5160 eDDot: eDDot,
5161 Edot: Edot,
5162 edot: edot,
5163 eDot: eDot,
5164 ee: ee,
5165 efDot: efDot,
5166 Efr: Efr,
5167 efr: efr,
5168 eg: eg,
5169 Egrave: Egrave,
5170 egrave: egrave,
5171 egs: egs,
5172 egsdot: egsdot,
5173 el: el,
5174 Element: Element,
5175 elinters: elinters,
5176 ell: ell,
5177 els: els,
5178 elsdot: elsdot,
5179 Emacr: Emacr,
5180 emacr: emacr,
5181 empty: empty,
5182 emptyset: emptyset,
5183 EmptySmallSquare: EmptySmallSquare,
5184 emptyv: emptyv,
5185 EmptyVerySmallSquare: EmptyVerySmallSquare,
5186 emsp13: emsp13,
5187 emsp14: emsp14,
5188 emsp: emsp,
5189 ENG: ENG,
5190 eng: eng,
5191 ensp: ensp,
5192 Eogon: Eogon,
5193 eogon: eogon,
5194 Eopf: Eopf,
5195 eopf: eopf,
5196 epar: epar,
5197 eparsl: eparsl,
5198 eplus: eplus,
5199 epsi: epsi,
5200 Epsilon: Epsilon,
5201 epsilon: epsilon,
5202 epsiv: epsiv,
5203 eqcirc: eqcirc,
5204 eqcolon: eqcolon,
5205 eqsim: eqsim,
5206 eqslantgtr: eqslantgtr,
5207 eqslantless: eqslantless,
5208 Equal: Equal,
5209 equals: equals,
5210 EqualTilde: EqualTilde,
5211 equest: equest,
5212 Equilibrium: Equilibrium,
5213 equiv: equiv,
5214 equivDD: equivDD,
5215 eqvparsl: eqvparsl,
5216 erarr: erarr,
5217 erDot: erDot,
5218 escr: escr,
5219 Escr: Escr,
5220 esdot: esdot,
5221 Esim: Esim,
5222 esim: esim,
5223 Eta: Eta,
5224 eta: eta,
5225 ETH: ETH,
5226 eth: eth,
5227 Euml: Euml,
5228 euml: euml,
5229 euro: euro,
5230 excl: excl,
5231 exist: exist,
5232 Exists: Exists,
5233 expectation: expectation,
5234 exponentiale: exponentiale,
5235 ExponentialE: ExponentialE,
5236 fallingdotseq: fallingdotseq,
5237 Fcy: Fcy,
5238 fcy: fcy,
5239 female: female,
5240 ffilig: ffilig,
5241 fflig: fflig,
5242 ffllig: ffllig,
5243 Ffr: Ffr,
5244 ffr: ffr,
5245 filig: filig,
5246 FilledSmallSquare: FilledSmallSquare,
5247 FilledVerySmallSquare: FilledVerySmallSquare,
5248 fjlig: fjlig,
5249 flat: flat,
5250 fllig: fllig,
5251 fltns: fltns,
5252 fnof: fnof,
5253 Fopf: Fopf,
5254 fopf: fopf,
5255 forall: forall,
5256 ForAll: ForAll,
5257 fork: fork,
5258 forkv: forkv,
5259 Fouriertrf: Fouriertrf,
5260 fpartint: fpartint,
5261 frac12: frac12,
5262 frac13: frac13,
5263 frac14: frac14,
5264 frac15: frac15,
5265 frac16: frac16,
5266 frac18: frac18,
5267 frac23: frac23,
5268 frac25: frac25,
5269 frac34: frac34,
5270 frac35: frac35,
5271 frac38: frac38,
5272 frac45: frac45,
5273 frac56: frac56,
5274 frac58: frac58,
5275 frac78: frac78,
5276 frasl: frasl,
5277 frown: frown,
5278 fscr: fscr,
5279 Fscr: Fscr,
5280 gacute: gacute,
5281 Gamma: Gamma,
5282 gamma: gamma,
5283 Gammad: Gammad,
5284 gammad: gammad,
5285 gap: gap,
5286 Gbreve: Gbreve,
5287 gbreve: gbreve,
5288 Gcedil: Gcedil,
5289 Gcirc: Gcirc,
5290 gcirc: gcirc,
5291 Gcy: Gcy,
5292 gcy: gcy,
5293 Gdot: Gdot,
5294 gdot: gdot,
5295 ge: ge,
5296 gE: gE,
5297 gEl: gEl,
5298 gel: gel,
5299 geq: geq,
5300 geqq: geqq,
5301 geqslant: geqslant,
5302 gescc: gescc,
5303 ges: ges,
5304 gesdot: gesdot,
5305 gesdoto: gesdoto,
5306 gesdotol: gesdotol,
5307 gesl: gesl,
5308 gesles: gesles,
5309 Gfr: Gfr,
5310 gfr: gfr,
5311 gg: gg,
5312 Gg: Gg,
5313 ggg: ggg,
5314 gimel: gimel,
5315 GJcy: GJcy,
5316 gjcy: gjcy,
5317 gla: gla,
5318 gl: gl,
5319 glE: glE,
5320 glj: glj,
5321 gnap: gnap,
5322 gnapprox: gnapprox,
5323 gne: gne,
5324 gnE: gnE,
5325 gneq: gneq,
5326 gneqq: gneqq,
5327 gnsim: gnsim,
5328 Gopf: Gopf,
5329 gopf: gopf,
5330 grave: grave,
5331 GreaterEqual: GreaterEqual,
5332 GreaterEqualLess: GreaterEqualLess,
5333 GreaterFullEqual: GreaterFullEqual,
5334 GreaterGreater: GreaterGreater,
5335 GreaterLess: GreaterLess,
5336 GreaterSlantEqual: GreaterSlantEqual,
5337 GreaterTilde: GreaterTilde,
5338 Gscr: Gscr,
5339 gscr: gscr,
5340 gsim: gsim,
5341 gsime: gsime,
5342 gsiml: gsiml,
5343 gtcc: gtcc,
5344 gtcir: gtcir,
5345 gt: gt,
5346 GT: GT,
5347 Gt: Gt,
5348 gtdot: gtdot,
5349 gtlPar: gtlPar,
5350 gtquest: gtquest,
5351 gtrapprox: gtrapprox,
5352 gtrarr: gtrarr,
5353 gtrdot: gtrdot,
5354 gtreqless: gtreqless,
5355 gtreqqless: gtreqqless,
5356 gtrless: gtrless,
5357 gtrsim: gtrsim,
5358 gvertneqq: gvertneqq,
5359 gvnE: gvnE,
5360 Hacek: Hacek,
5361 hairsp: hairsp,
5362 half: half,
5363 hamilt: hamilt,
5364 HARDcy: HARDcy,
5365 hardcy: hardcy,
5366 harrcir: harrcir,
5367 harr: harr,
5368 hArr: hArr,
5369 harrw: harrw,
5370 Hat: Hat,
5371 hbar: hbar,
5372 Hcirc: Hcirc,
5373 hcirc: hcirc,
5374 hearts: hearts,
5375 heartsuit: heartsuit,
5376 hellip: hellip,
5377 hercon: hercon,
5378 hfr: hfr,
5379 Hfr: Hfr,
5380 HilbertSpace: HilbertSpace,
5381 hksearow: hksearow,
5382 hkswarow: hkswarow,
5383 hoarr: hoarr,
5384 homtht: homtht,
5385 hookleftarrow: hookleftarrow,
5386 hookrightarrow: hookrightarrow,
5387 hopf: hopf,
5388 Hopf: Hopf,
5389 horbar: horbar,
5390 HorizontalLine: HorizontalLine,
5391 hscr: hscr,
5392 Hscr: Hscr,
5393 hslash: hslash,
5394 Hstrok: Hstrok,
5395 hstrok: hstrok,
5396 HumpDownHump: HumpDownHump,
5397 HumpEqual: HumpEqual,
5398 hybull: hybull,
5399 hyphen: hyphen,
5400 Iacute: Iacute,
5401 iacute: iacute,
5402 ic: ic,
5403 Icirc: Icirc,
5404 icirc: icirc,
5405 Icy: Icy,
5406 icy: icy,
5407 Idot: Idot,
5408 IEcy: IEcy,
5409 iecy: iecy,
5410 iexcl: iexcl,
5411 iff: iff,
5412 ifr: ifr,
5413 Ifr: Ifr,
5414 Igrave: Igrave,
5415 igrave: igrave,
5416 ii: ii,
5417 iiiint: iiiint,
5418 iiint: iiint,
5419 iinfin: iinfin,
5420 iiota: iiota,
5421 IJlig: IJlig,
5422 ijlig: ijlig,
5423 Imacr: Imacr,
5424 imacr: imacr,
5425 image: image,
5426 ImaginaryI: ImaginaryI,
5427 imagline: imagline,
5428 imagpart: imagpart,
5429 imath: imath,
5430 Im: Im,
5431 imof: imof,
5432 imped: imped,
5433 Implies: Implies,
5434 incare: incare,
5435 infin: infin,
5436 infintie: infintie,
5437 inodot: inodot,
5438 intcal: intcal,
5439 int: int,
5440 Int: Int,
5441 integers: integers,
5442 Integral: Integral,
5443 intercal: intercal,
5444 Intersection: Intersection,
5445 intlarhk: intlarhk,
5446 intprod: intprod,
5447 InvisibleComma: InvisibleComma,
5448 InvisibleTimes: InvisibleTimes,
5449 IOcy: IOcy,
5450 iocy: iocy,
5451 Iogon: Iogon,
5452 iogon: iogon,
5453 Iopf: Iopf,
5454 iopf: iopf,
5455 Iota: Iota,
5456 iota: iota,
5457 iprod: iprod,
5458 iquest: iquest,
5459 iscr: iscr,
5460 Iscr: Iscr,
5461 isin: isin,
5462 isindot: isindot,
5463 isinE: isinE,
5464 isins: isins,
5465 isinsv: isinsv,
5466 isinv: isinv,
5467 it: it,
5468 Itilde: Itilde,
5469 itilde: itilde,
5470 Iukcy: Iukcy,
5471 iukcy: iukcy,
5472 Iuml: Iuml,
5473 iuml: iuml,
5474 Jcirc: Jcirc,
5475 jcirc: jcirc,
5476 Jcy: Jcy,
5477 jcy: jcy,
5478 Jfr: Jfr,
5479 jfr: jfr,
5480 jmath: jmath,
5481 Jopf: Jopf,
5482 jopf: jopf,
5483 Jscr: Jscr,
5484 jscr: jscr,
5485 Jsercy: Jsercy,
5486 jsercy: jsercy,
5487 Jukcy: Jukcy,
5488 jukcy: jukcy,
5489 Kappa: Kappa,
5490 kappa: kappa,
5491 kappav: kappav,
5492 Kcedil: Kcedil,
5493 kcedil: kcedil,
5494 Kcy: Kcy,
5495 kcy: kcy,
5496 Kfr: Kfr,
5497 kfr: kfr,
5498 kgreen: kgreen,
5499 KHcy: KHcy,
5500 khcy: khcy,
5501 KJcy: KJcy,
5502 kjcy: kjcy,
5503 Kopf: Kopf,
5504 kopf: kopf,
5505 Kscr: Kscr,
5506 kscr: kscr,
5507 lAarr: lAarr,
5508 Lacute: Lacute,
5509 lacute: lacute,
5510 laemptyv: laemptyv,
5511 lagran: lagran,
5512 Lambda: Lambda,
5513 lambda: lambda,
5514 lang: lang,
5515 Lang: Lang,
5516 langd: langd,
5517 langle: langle,
5518 lap: lap,
5519 Laplacetrf: Laplacetrf,
5520 laquo: laquo,
5521 larrb: larrb,
5522 larrbfs: larrbfs,
5523 larr: larr,
5524 Larr: Larr,
5525 lArr: lArr,
5526 larrfs: larrfs,
5527 larrhk: larrhk,
5528 larrlp: larrlp,
5529 larrpl: larrpl,
5530 larrsim: larrsim,
5531 larrtl: larrtl,
5532 latail: latail,
5533 lAtail: lAtail,
5534 lat: lat,
5535 late: late,
5536 lates: lates,
5537 lbarr: lbarr,
5538 lBarr: lBarr,
5539 lbbrk: lbbrk,
5540 lbrace: lbrace,
5541 lbrack: lbrack,
5542 lbrke: lbrke,
5543 lbrksld: lbrksld,
5544 lbrkslu: lbrkslu,
5545 Lcaron: Lcaron,
5546 lcaron: lcaron,
5547 Lcedil: Lcedil,
5548 lcedil: lcedil,
5549 lceil: lceil,
5550 lcub: lcub,
5551 Lcy: Lcy,
5552 lcy: lcy,
5553 ldca: ldca,
5554 ldquo: ldquo,
5555 ldquor: ldquor,
5556 ldrdhar: ldrdhar,
5557 ldrushar: ldrushar,
5558 ldsh: ldsh,
5559 le: le,
5560 lE: lE,
5561 LeftAngleBracket: LeftAngleBracket,
5562 LeftArrowBar: LeftArrowBar,
5563 leftarrow: leftarrow,
5564 LeftArrow: LeftArrow,
5565 Leftarrow: Leftarrow,
5566 LeftArrowRightArrow: LeftArrowRightArrow,
5567 leftarrowtail: leftarrowtail,
5568 LeftCeiling: LeftCeiling,
5569 LeftDoubleBracket: LeftDoubleBracket,
5570 LeftDownTeeVector: LeftDownTeeVector,
5571 LeftDownVectorBar: LeftDownVectorBar,
5572 LeftDownVector: LeftDownVector,
5573 LeftFloor: LeftFloor,
5574 leftharpoondown: leftharpoondown,
5575 leftharpoonup: leftharpoonup,
5576 leftleftarrows: leftleftarrows,
5577 leftrightarrow: leftrightarrow,
5578 LeftRightArrow: LeftRightArrow,
5579 Leftrightarrow: Leftrightarrow,
5580 leftrightarrows: leftrightarrows,
5581 leftrightharpoons: leftrightharpoons,
5582 leftrightsquigarrow: leftrightsquigarrow,
5583 LeftRightVector: LeftRightVector,
5584 LeftTeeArrow: LeftTeeArrow,
5585 LeftTee: LeftTee,
5586 LeftTeeVector: LeftTeeVector,
5587 leftthreetimes: leftthreetimes,
5588 LeftTriangleBar: LeftTriangleBar,
5589 LeftTriangle: LeftTriangle,
5590 LeftTriangleEqual: LeftTriangleEqual,
5591 LeftUpDownVector: LeftUpDownVector,
5592 LeftUpTeeVector: LeftUpTeeVector,
5593 LeftUpVectorBar: LeftUpVectorBar,
5594 LeftUpVector: LeftUpVector,
5595 LeftVectorBar: LeftVectorBar,
5596 LeftVector: LeftVector,
5597 lEg: lEg,
5598 leg: leg,
5599 leq: leq,
5600 leqq: leqq,
5601 leqslant: leqslant,
5602 lescc: lescc,
5603 les: les,
5604 lesdot: lesdot,
5605 lesdoto: lesdoto,
5606 lesdotor: lesdotor,
5607 lesg: lesg,
5608 lesges: lesges,
5609 lessapprox: lessapprox,
5610 lessdot: lessdot,
5611 lesseqgtr: lesseqgtr,
5612 lesseqqgtr: lesseqqgtr,
5613 LessEqualGreater: LessEqualGreater,
5614 LessFullEqual: LessFullEqual,
5615 LessGreater: LessGreater,
5616 lessgtr: lessgtr,
5617 LessLess: LessLess,
5618 lesssim: lesssim,
5619 LessSlantEqual: LessSlantEqual,
5620 LessTilde: LessTilde,
5621 lfisht: lfisht,
5622 lfloor: lfloor,
5623 Lfr: Lfr,
5624 lfr: lfr,
5625 lg: lg,
5626 lgE: lgE,
5627 lHar: lHar,
5628 lhard: lhard,
5629 lharu: lharu,
5630 lharul: lharul,
5631 lhblk: lhblk,
5632 LJcy: LJcy,
5633 ljcy: ljcy,
5634 llarr: llarr,
5635 ll: ll,
5636 Ll: Ll,
5637 llcorner: llcorner,
5638 Lleftarrow: Lleftarrow,
5639 llhard: llhard,
5640 lltri: lltri,
5641 Lmidot: Lmidot,
5642 lmidot: lmidot,
5643 lmoustache: lmoustache,
5644 lmoust: lmoust,
5645 lnap: lnap,
5646 lnapprox: lnapprox,
5647 lne: lne,
5648 lnE: lnE,
5649 lneq: lneq,
5650 lneqq: lneqq,
5651 lnsim: lnsim,
5652 loang: loang,
5653 loarr: loarr,
5654 lobrk: lobrk,
5655 longleftarrow: longleftarrow,
5656 LongLeftArrow: LongLeftArrow,
5657 Longleftarrow: Longleftarrow,
5658 longleftrightarrow: longleftrightarrow,
5659 LongLeftRightArrow: LongLeftRightArrow,
5660 Longleftrightarrow: Longleftrightarrow,
5661 longmapsto: longmapsto,
5662 longrightarrow: longrightarrow,
5663 LongRightArrow: LongRightArrow,
5664 Longrightarrow: Longrightarrow,
5665 looparrowleft: looparrowleft,
5666 looparrowright: looparrowright,
5667 lopar: lopar,
5668 Lopf: Lopf,
5669 lopf: lopf,
5670 loplus: loplus,
5671 lotimes: lotimes,
5672 lowast: lowast,
5673 lowbar: lowbar,
5674 LowerLeftArrow: LowerLeftArrow,
5675 LowerRightArrow: LowerRightArrow,
5676 loz: loz,
5677 lozenge: lozenge,
5678 lozf: lozf,
5679 lpar: lpar,
5680 lparlt: lparlt,
5681 lrarr: lrarr,
5682 lrcorner: lrcorner,
5683 lrhar: lrhar,
5684 lrhard: lrhard,
5685 lrm: lrm,
5686 lrtri: lrtri,
5687 lsaquo: lsaquo,
5688 lscr: lscr,
5689 Lscr: Lscr,
5690 lsh: lsh,
5691 Lsh: Lsh,
5692 lsim: lsim,
5693 lsime: lsime,
5694 lsimg: lsimg,
5695 lsqb: lsqb,
5696 lsquo: lsquo,
5697 lsquor: lsquor,
5698 Lstrok: Lstrok,
5699 lstrok: lstrok,
5700 ltcc: ltcc,
5701 ltcir: ltcir,
5702 lt: lt,
5703 LT: LT,
5704 Lt: Lt,
5705 ltdot: ltdot,
5706 lthree: lthree,
5707 ltimes: ltimes,
5708 ltlarr: ltlarr,
5709 ltquest: ltquest,
5710 ltri: ltri,
5711 ltrie: ltrie,
5712 ltrif: ltrif,
5713 ltrPar: ltrPar,
5714 lurdshar: lurdshar,
5715 luruhar: luruhar,
5716 lvertneqq: lvertneqq,
5717 lvnE: lvnE,
5718 macr: macr,
5719 male: male,
5720 malt: malt,
5721 maltese: maltese,
5722 map: map,
5723 mapsto: mapsto,
5724 mapstodown: mapstodown,
5725 mapstoleft: mapstoleft,
5726 mapstoup: mapstoup,
5727 marker: marker,
5728 mcomma: mcomma,
5729 Mcy: Mcy,
5730 mcy: mcy,
5731 mdash: mdash,
5732 mDDot: mDDot,
5733 measuredangle: measuredangle,
5734 MediumSpace: MediumSpace,
5735 Mellintrf: Mellintrf,
5736 Mfr: Mfr,
5737 mfr: mfr,
5738 mho: mho,
5739 micro: micro,
5740 midast: midast,
5741 midcir: midcir,
5742 mid: mid,
5743 middot: middot,
5744 minusb: minusb,
5745 minus: minus,
5746 minusd: minusd,
5747 minusdu: minusdu,
5748 MinusPlus: MinusPlus,
5749 mlcp: mlcp,
5750 mldr: mldr,
5751 mnplus: mnplus,
5752 models: models,
5753 Mopf: Mopf,
5754 mopf: mopf,
5755 mp: mp,
5756 mscr: mscr,
5757 Mscr: Mscr,
5758 mstpos: mstpos,
5759 Mu: Mu,
5760 mu: mu,
5761 multimap: multimap,
5762 mumap: mumap,
5763 nabla: nabla,
5764 Nacute: Nacute,
5765 nacute: nacute,
5766 nang: nang,
5767 nap: nap,
5768 napE: napE,
5769 napid: napid,
5770 napos: napos,
5771 napprox: napprox,
5772 natural: natural,
5773 naturals: naturals,
5774 natur: natur,
5775 nbsp: nbsp,
5776 nbump: nbump,
5777 nbumpe: nbumpe,
5778 ncap: ncap,
5779 Ncaron: Ncaron,
5780 ncaron: ncaron,
5781 Ncedil: Ncedil,
5782 ncedil: ncedil,
5783 ncong: ncong,
5784 ncongdot: ncongdot,
5785 ncup: ncup,
5786 Ncy: Ncy,
5787 ncy: ncy,
5788 ndash: ndash,
5789 nearhk: nearhk,
5790 nearr: nearr,
5791 neArr: neArr,
5792 nearrow: nearrow,
5793 ne: ne,
5794 nedot: nedot,
5795 NegativeMediumSpace: NegativeMediumSpace,
5796 NegativeThickSpace: NegativeThickSpace,
5797 NegativeThinSpace: NegativeThinSpace,
5798 NegativeVeryThinSpace: NegativeVeryThinSpace,
5799 nequiv: nequiv,
5800 nesear: nesear,
5801 nesim: nesim,
5802 NestedGreaterGreater: NestedGreaterGreater,
5803 NestedLessLess: NestedLessLess,
5804 NewLine: NewLine,
5805 nexist: nexist,
5806 nexists: nexists,
5807 Nfr: Nfr,
5808 nfr: nfr,
5809 ngE: ngE,
5810 nge: nge,
5811 ngeq: ngeq,
5812 ngeqq: ngeqq,
5813 ngeqslant: ngeqslant,
5814 nges: nges,
5815 nGg: nGg,
5816 ngsim: ngsim,
5817 nGt: nGt,
5818 ngt: ngt,
5819 ngtr: ngtr,
5820 nGtv: nGtv,
5821 nharr: nharr,
5822 nhArr: nhArr,
5823 nhpar: nhpar,
5824 ni: ni,
5825 nis: nis,
5826 nisd: nisd,
5827 niv: niv,
5828 NJcy: NJcy,
5829 njcy: njcy,
5830 nlarr: nlarr,
5831 nlArr: nlArr,
5832 nldr: nldr,
5833 nlE: nlE,
5834 nle: nle,
5835 nleftarrow: nleftarrow,
5836 nLeftarrow: nLeftarrow,
5837 nleftrightarrow: nleftrightarrow,
5838 nLeftrightarrow: nLeftrightarrow,
5839 nleq: nleq,
5840 nleqq: nleqq,
5841 nleqslant: nleqslant,
5842 nles: nles,
5843 nless: nless,
5844 nLl: nLl,
5845 nlsim: nlsim,
5846 nLt: nLt,
5847 nlt: nlt,
5848 nltri: nltri,
5849 nltrie: nltrie,
5850 nLtv: nLtv,
5851 nmid: nmid,
5852 NoBreak: NoBreak,
5853 NonBreakingSpace: NonBreakingSpace,
5854 nopf: nopf,
5855 Nopf: Nopf,
5856 Not: Not,
5857 not: not,
5858 NotCongruent: NotCongruent,
5859 NotCupCap: NotCupCap,
5860 NotDoubleVerticalBar: NotDoubleVerticalBar,
5861 NotElement: NotElement,
5862 NotEqual: NotEqual,
5863 NotEqualTilde: NotEqualTilde,
5864 NotExists: NotExists,
5865 NotGreater: NotGreater,
5866 NotGreaterEqual: NotGreaterEqual,
5867 NotGreaterFullEqual: NotGreaterFullEqual,
5868 NotGreaterGreater: NotGreaterGreater,
5869 NotGreaterLess: NotGreaterLess,
5870 NotGreaterSlantEqual: NotGreaterSlantEqual,
5871 NotGreaterTilde: NotGreaterTilde,
5872 NotHumpDownHump: NotHumpDownHump,
5873 NotHumpEqual: NotHumpEqual,
5874 notin: notin,
5875 notindot: notindot,
5876 notinE: notinE,
5877 notinva: notinva,
5878 notinvb: notinvb,
5879 notinvc: notinvc,
5880 NotLeftTriangleBar: NotLeftTriangleBar,
5881 NotLeftTriangle: NotLeftTriangle,
5882 NotLeftTriangleEqual: NotLeftTriangleEqual,
5883 NotLess: NotLess,
5884 NotLessEqual: NotLessEqual,
5885 NotLessGreater: NotLessGreater,
5886 NotLessLess: NotLessLess,
5887 NotLessSlantEqual: NotLessSlantEqual,
5888 NotLessTilde: NotLessTilde,
5889 NotNestedGreaterGreater: NotNestedGreaterGreater,
5890 NotNestedLessLess: NotNestedLessLess,
5891 notni: notni,
5892 notniva: notniva,
5893 notnivb: notnivb,
5894 notnivc: notnivc,
5895 NotPrecedes: NotPrecedes,
5896 NotPrecedesEqual: NotPrecedesEqual,
5897 NotPrecedesSlantEqual: NotPrecedesSlantEqual,
5898 NotReverseElement: NotReverseElement,
5899 NotRightTriangleBar: NotRightTriangleBar,
5900 NotRightTriangle: NotRightTriangle,
5901 NotRightTriangleEqual: NotRightTriangleEqual,
5902 NotSquareSubset: NotSquareSubset,
5903 NotSquareSubsetEqual: NotSquareSubsetEqual,
5904 NotSquareSuperset: NotSquareSuperset,
5905 NotSquareSupersetEqual: NotSquareSupersetEqual,
5906 NotSubset: NotSubset,
5907 NotSubsetEqual: NotSubsetEqual,
5908 NotSucceeds: NotSucceeds,
5909 NotSucceedsEqual: NotSucceedsEqual,
5910 NotSucceedsSlantEqual: NotSucceedsSlantEqual,
5911 NotSucceedsTilde: NotSucceedsTilde,
5912 NotSuperset: NotSuperset,
5913 NotSupersetEqual: NotSupersetEqual,
5914 NotTilde: NotTilde,
5915 NotTildeEqual: NotTildeEqual,
5916 NotTildeFullEqual: NotTildeFullEqual,
5917 NotTildeTilde: NotTildeTilde,
5918 NotVerticalBar: NotVerticalBar,
5919 nparallel: nparallel,
5920 npar: npar,
5921 nparsl: nparsl,
5922 npart: npart,
5923 npolint: npolint,
5924 npr: npr,
5925 nprcue: nprcue,
5926 nprec: nprec,
5927 npreceq: npreceq,
5928 npre: npre,
5929 nrarrc: nrarrc,
5930 nrarr: nrarr,
5931 nrArr: nrArr,
5932 nrarrw: nrarrw,
5933 nrightarrow: nrightarrow,
5934 nRightarrow: nRightarrow,
5935 nrtri: nrtri,
5936 nrtrie: nrtrie,
5937 nsc: nsc,
5938 nsccue: nsccue,
5939 nsce: nsce,
5940 Nscr: Nscr,
5941 nscr: nscr,
5942 nshortmid: nshortmid,
5943 nshortparallel: nshortparallel,
5944 nsim: nsim,
5945 nsime: nsime,
5946 nsimeq: nsimeq,
5947 nsmid: nsmid,
5948 nspar: nspar,
5949 nsqsube: nsqsube,
5950 nsqsupe: nsqsupe,
5951 nsub: nsub,
5952 nsubE: nsubE,
5953 nsube: nsube,
5954 nsubset: nsubset,
5955 nsubseteq: nsubseteq,
5956 nsubseteqq: nsubseteqq,
5957 nsucc: nsucc,
5958 nsucceq: nsucceq,
5959 nsup: nsup,
5960 nsupE: nsupE,
5961 nsupe: nsupe,
5962 nsupset: nsupset,
5963 nsupseteq: nsupseteq,
5964 nsupseteqq: nsupseteqq,
5965 ntgl: ntgl,
5966 Ntilde: Ntilde,
5967 ntilde: ntilde,
5968 ntlg: ntlg,
5969 ntriangleleft: ntriangleleft,
5970 ntrianglelefteq: ntrianglelefteq,
5971 ntriangleright: ntriangleright,
5972 ntrianglerighteq: ntrianglerighteq,
5973 Nu: Nu,
5974 nu: nu,
5975 num: num,
5976 numero: numero,
5977 numsp: numsp,
5978 nvap: nvap,
5979 nvdash: nvdash,
5980 nvDash: nvDash,
5981 nVdash: nVdash,
5982 nVDash: nVDash,
5983 nvge: nvge,
5984 nvgt: nvgt,
5985 nvHarr: nvHarr,
5986 nvinfin: nvinfin,
5987 nvlArr: nvlArr,
5988 nvle: nvle,
5989 nvlt: nvlt,
5990 nvltrie: nvltrie,
5991 nvrArr: nvrArr,
5992 nvrtrie: nvrtrie,
5993 nvsim: nvsim,
5994 nwarhk: nwarhk,
5995 nwarr: nwarr,
5996 nwArr: nwArr,
5997 nwarrow: nwarrow,
5998 nwnear: nwnear,
5999 Oacute: Oacute,
6000 oacute: oacute,
6001 oast: oast,
6002 Ocirc: Ocirc,
6003 ocirc: ocirc,
6004 ocir: ocir,
6005 Ocy: Ocy,
6006 ocy: ocy,
6007 odash: odash,
6008 Odblac: Odblac,
6009 odblac: odblac,
6010 odiv: odiv,
6011 odot: odot,
6012 odsold: odsold,
6013 OElig: OElig,
6014 oelig: oelig,
6015 ofcir: ofcir,
6016 Ofr: Ofr,
6017 ofr: ofr,
6018 ogon: ogon,
6019 Ograve: Ograve,
6020 ograve: ograve,
6021 ogt: ogt,
6022 ohbar: ohbar,
6023 ohm: ohm,
6024 oint: oint,
6025 olarr: olarr,
6026 olcir: olcir,
6027 olcross: olcross,
6028 oline: oline,
6029 olt: olt,
6030 Omacr: Omacr,
6031 omacr: omacr,
6032 Omega: Omega,
6033 omega: omega,
6034 Omicron: Omicron,
6035 omicron: omicron,
6036 omid: omid,
6037 ominus: ominus,
6038 Oopf: Oopf,
6039 oopf: oopf,
6040 opar: opar,
6041 OpenCurlyDoubleQuote: OpenCurlyDoubleQuote,
6042 OpenCurlyQuote: OpenCurlyQuote,
6043 operp: operp,
6044 oplus: oplus,
6045 orarr: orarr,
6046 Or: Or,
6047 or: or,
6048 ord: ord,
6049 order: order,
6050 orderof: orderof,
6051 ordf: ordf,
6052 ordm: ordm,
6053 origof: origof,
6054 oror: oror,
6055 orslope: orslope,
6056 orv: orv,
6057 oS: oS,
6058 Oscr: Oscr,
6059 oscr: oscr,
6060 Oslash: Oslash,
6061 oslash: oslash,
6062 osol: osol,
6063 Otilde: Otilde,
6064 otilde: otilde,
6065 otimesas: otimesas,
6066 Otimes: Otimes,
6067 otimes: otimes,
6068 Ouml: Ouml,
6069 ouml: ouml,
6070 ovbar: ovbar,
6071 OverBar: OverBar,
6072 OverBrace: OverBrace,
6073 OverBracket: OverBracket,
6074 OverParenthesis: OverParenthesis,
6075 para: para,
6076 parallel: parallel,
6077 par: par,
6078 parsim: parsim,
6079 parsl: parsl,
6080 part: part,
6081 PartialD: PartialD,
6082 Pcy: Pcy,
6083 pcy: pcy,
6084 percnt: percnt,
6085 period: period,
6086 permil: permil,
6087 perp: perp,
6088 pertenk: pertenk,
6089 Pfr: Pfr,
6090 pfr: pfr,
6091 Phi: Phi,
6092 phi: phi,
6093 phiv: phiv,
6094 phmmat: phmmat,
6095 phone: phone,
6096 Pi: Pi,
6097 pi: pi,
6098 pitchfork: pitchfork,
6099 piv: piv,
6100 planck: planck,
6101 planckh: planckh,
6102 plankv: plankv,
6103 plusacir: plusacir,
6104 plusb: plusb,
6105 pluscir: pluscir,
6106 plus: plus,
6107 plusdo: plusdo,
6108 plusdu: plusdu,
6109 pluse: pluse,
6110 PlusMinus: PlusMinus,
6111 plusmn: plusmn,
6112 plussim: plussim,
6113 plustwo: plustwo,
6114 pm: pm,
6115 Poincareplane: Poincareplane,
6116 pointint: pointint,
6117 popf: popf,
6118 Popf: Popf,
6119 pound: pound,
6120 prap: prap,
6121 Pr: Pr,
6122 pr: pr,
6123 prcue: prcue,
6124 precapprox: precapprox,
6125 prec: prec,
6126 preccurlyeq: preccurlyeq,
6127 Precedes: Precedes,
6128 PrecedesEqual: PrecedesEqual,
6129 PrecedesSlantEqual: PrecedesSlantEqual,
6130 PrecedesTilde: PrecedesTilde,
6131 preceq: preceq,
6132 precnapprox: precnapprox,
6133 precneqq: precneqq,
6134 precnsim: precnsim,
6135 pre: pre,
6136 prE: prE,
6137 precsim: precsim,
6138 prime: prime,
6139 Prime: Prime,
6140 primes: primes,
6141 prnap: prnap,
6142 prnE: prnE,
6143 prnsim: prnsim,
6144 prod: prod,
6145 Product: Product,
6146 profalar: profalar,
6147 profline: profline,
6148 profsurf: profsurf,
6149 prop: prop,
6150 Proportional: Proportional,
6151 Proportion: Proportion,
6152 propto: propto,
6153 prsim: prsim,
6154 prurel: prurel,
6155 Pscr: Pscr,
6156 pscr: pscr,
6157 Psi: Psi,
6158 psi: psi,
6159 puncsp: puncsp,
6160 Qfr: Qfr,
6161 qfr: qfr,
6162 qint: qint,
6163 qopf: qopf,
6164 Qopf: Qopf,
6165 qprime: qprime,
6166 Qscr: Qscr,
6167 qscr: qscr,
6168 quaternions: quaternions,
6169 quatint: quatint,
6170 quest: quest,
6171 questeq: questeq,
6172 quot: quot,
6173 QUOT: QUOT,
6174 rAarr: rAarr,
6175 race: race,
6176 Racute: Racute,
6177 racute: racute,
6178 radic: radic,
6179 raemptyv: raemptyv,
6180 rang: rang,
6181 Rang: Rang,
6182 rangd: rangd,
6183 range: range,
6184 rangle: rangle,
6185 raquo: raquo,
6186 rarrap: rarrap,
6187 rarrb: rarrb,
6188 rarrbfs: rarrbfs,
6189 rarrc: rarrc,
6190 rarr: rarr,
6191 Rarr: Rarr,
6192 rArr: rArr,
6193 rarrfs: rarrfs,
6194 rarrhk: rarrhk,
6195 rarrlp: rarrlp,
6196 rarrpl: rarrpl,
6197 rarrsim: rarrsim,
6198 Rarrtl: Rarrtl,
6199 rarrtl: rarrtl,
6200 rarrw: rarrw,
6201 ratail: ratail,
6202 rAtail: rAtail,
6203 ratio: ratio,
6204 rationals: rationals,
6205 rbarr: rbarr,
6206 rBarr: rBarr,
6207 RBarr: RBarr,
6208 rbbrk: rbbrk,
6209 rbrace: rbrace,
6210 rbrack: rbrack,
6211 rbrke: rbrke,
6212 rbrksld: rbrksld,
6213 rbrkslu: rbrkslu,
6214 Rcaron: Rcaron,
6215 rcaron: rcaron,
6216 Rcedil: Rcedil,
6217 rcedil: rcedil,
6218 rceil: rceil,
6219 rcub: rcub,
6220 Rcy: Rcy,
6221 rcy: rcy,
6222 rdca: rdca,
6223 rdldhar: rdldhar,
6224 rdquo: rdquo,
6225 rdquor: rdquor,
6226 rdsh: rdsh,
6227 real: real,
6228 realine: realine,
6229 realpart: realpart,
6230 reals: reals,
6231 Re: Re,
6232 rect: rect,
6233 reg: reg,
6234 REG: REG,
6235 ReverseElement: ReverseElement,
6236 ReverseEquilibrium: ReverseEquilibrium,
6237 ReverseUpEquilibrium: ReverseUpEquilibrium,
6238 rfisht: rfisht,
6239 rfloor: rfloor,
6240 rfr: rfr,
6241 Rfr: Rfr,
6242 rHar: rHar,
6243 rhard: rhard,
6244 rharu: rharu,
6245 rharul: rharul,
6246 Rho: Rho,
6247 rho: rho,
6248 rhov: rhov,
6249 RightAngleBracket: RightAngleBracket,
6250 RightArrowBar: RightArrowBar,
6251 rightarrow: rightarrow,
6252 RightArrow: RightArrow,
6253 Rightarrow: Rightarrow,
6254 RightArrowLeftArrow: RightArrowLeftArrow,
6255 rightarrowtail: rightarrowtail,
6256 RightCeiling: RightCeiling,
6257 RightDoubleBracket: RightDoubleBracket,
6258 RightDownTeeVector: RightDownTeeVector,
6259 RightDownVectorBar: RightDownVectorBar,
6260 RightDownVector: RightDownVector,
6261 RightFloor: RightFloor,
6262 rightharpoondown: rightharpoondown,
6263 rightharpoonup: rightharpoonup,
6264 rightleftarrows: rightleftarrows,
6265 rightleftharpoons: rightleftharpoons,
6266 rightrightarrows: rightrightarrows,
6267 rightsquigarrow: rightsquigarrow,
6268 RightTeeArrow: RightTeeArrow,
6269 RightTee: RightTee,
6270 RightTeeVector: RightTeeVector,
6271 rightthreetimes: rightthreetimes,
6272 RightTriangleBar: RightTriangleBar,
6273 RightTriangle: RightTriangle,
6274 RightTriangleEqual: RightTriangleEqual,
6275 RightUpDownVector: RightUpDownVector,
6276 RightUpTeeVector: RightUpTeeVector,
6277 RightUpVectorBar: RightUpVectorBar,
6278 RightUpVector: RightUpVector,
6279 RightVectorBar: RightVectorBar,
6280 RightVector: RightVector,
6281 ring: ring,
6282 risingdotseq: risingdotseq,
6283 rlarr: rlarr,
6284 rlhar: rlhar,
6285 rlm: rlm,
6286 rmoustache: rmoustache,
6287 rmoust: rmoust,
6288 rnmid: rnmid,
6289 roang: roang,
6290 roarr: roarr,
6291 robrk: robrk,
6292 ropar: ropar,
6293 ropf: ropf,
6294 Ropf: Ropf,
6295 roplus: roplus,
6296 rotimes: rotimes,
6297 RoundImplies: RoundImplies,
6298 rpar: rpar,
6299 rpargt: rpargt,
6300 rppolint: rppolint,
6301 rrarr: rrarr,
6302 Rrightarrow: Rrightarrow,
6303 rsaquo: rsaquo,
6304 rscr: rscr,
6305 Rscr: Rscr,
6306 rsh: rsh,
6307 Rsh: Rsh,
6308 rsqb: rsqb,
6309 rsquo: rsquo,
6310 rsquor: rsquor,
6311 rthree: rthree,
6312 rtimes: rtimes,
6313 rtri: rtri,
6314 rtrie: rtrie,
6315 rtrif: rtrif,
6316 rtriltri: rtriltri,
6317 RuleDelayed: RuleDelayed,
6318 ruluhar: ruluhar,
6319 rx: rx,
6320 Sacute: Sacute,
6321 sacute: sacute,
6322 sbquo: sbquo,
6323 scap: scap,
6324 Scaron: Scaron,
6325 scaron: scaron,
6326 Sc: Sc,
6327 sc: sc,
6328 sccue: sccue,
6329 sce: sce,
6330 scE: scE,
6331 Scedil: Scedil,
6332 scedil: scedil,
6333 Scirc: Scirc,
6334 scirc: scirc,
6335 scnap: scnap,
6336 scnE: scnE,
6337 scnsim: scnsim,
6338 scpolint: scpolint,
6339 scsim: scsim,
6340 Scy: Scy,
6341 scy: scy,
6342 sdotb: sdotb,
6343 sdot: sdot,
6344 sdote: sdote,
6345 searhk: searhk,
6346 searr: searr,
6347 seArr: seArr,
6348 searrow: searrow,
6349 sect: sect,
6350 semi: semi,
6351 seswar: seswar,
6352 setminus: setminus,
6353 setmn: setmn,
6354 sext: sext,
6355 Sfr: Sfr,
6356 sfr: sfr,
6357 sfrown: sfrown,
6358 sharp: sharp,
6359 SHCHcy: SHCHcy,
6360 shchcy: shchcy,
6361 SHcy: SHcy,
6362 shcy: shcy,
6363 ShortDownArrow: ShortDownArrow,
6364 ShortLeftArrow: ShortLeftArrow,
6365 shortmid: shortmid,
6366 shortparallel: shortparallel,
6367 ShortRightArrow: ShortRightArrow,
6368 ShortUpArrow: ShortUpArrow,
6369 shy: shy,
6370 Sigma: Sigma,
6371 sigma: sigma,
6372 sigmaf: sigmaf,
6373 sigmav: sigmav,
6374 sim: sim,
6375 simdot: simdot,
6376 sime: sime,
6377 simeq: simeq,
6378 simg: simg,
6379 simgE: simgE,
6380 siml: siml,
6381 simlE: simlE,
6382 simne: simne,
6383 simplus: simplus,
6384 simrarr: simrarr,
6385 slarr: slarr,
6386 SmallCircle: SmallCircle,
6387 smallsetminus: smallsetminus,
6388 smashp: smashp,
6389 smeparsl: smeparsl,
6390 smid: smid,
6391 smile: smile,
6392 smt: smt,
6393 smte: smte,
6394 smtes: smtes,
6395 SOFTcy: SOFTcy,
6396 softcy: softcy,
6397 solbar: solbar,
6398 solb: solb,
6399 sol: sol,
6400 Sopf: Sopf,
6401 sopf: sopf,
6402 spades: spades,
6403 spadesuit: spadesuit,
6404 spar: spar,
6405 sqcap: sqcap,
6406 sqcaps: sqcaps,
6407 sqcup: sqcup,
6408 sqcups: sqcups,
6409 Sqrt: Sqrt,
6410 sqsub: sqsub,
6411 sqsube: sqsube,
6412 sqsubset: sqsubset,
6413 sqsubseteq: sqsubseteq,
6414 sqsup: sqsup,
6415 sqsupe: sqsupe,
6416 sqsupset: sqsupset,
6417 sqsupseteq: sqsupseteq,
6418 square: square,
6419 Square: Square,
6420 SquareIntersection: SquareIntersection,
6421 SquareSubset: SquareSubset,
6422 SquareSubsetEqual: SquareSubsetEqual,
6423 SquareSuperset: SquareSuperset,
6424 SquareSupersetEqual: SquareSupersetEqual,
6425 SquareUnion: SquareUnion,
6426 squarf: squarf,
6427 squ: squ,
6428 squf: squf,
6429 srarr: srarr,
6430 Sscr: Sscr,
6431 sscr: sscr,
6432 ssetmn: ssetmn,
6433 ssmile: ssmile,
6434 sstarf: sstarf,
6435 Star: Star,
6436 star: star,
6437 starf: starf,
6438 straightepsilon: straightepsilon,
6439 straightphi: straightphi,
6440 strns: strns,
6441 sub: sub,
6442 Sub: Sub,
6443 subdot: subdot,
6444 subE: subE,
6445 sube: sube,
6446 subedot: subedot,
6447 submult: submult,
6448 subnE: subnE,
6449 subne: subne,
6450 subplus: subplus,
6451 subrarr: subrarr,
6452 subset: subset,
6453 Subset: Subset,
6454 subseteq: subseteq,
6455 subseteqq: subseteqq,
6456 SubsetEqual: SubsetEqual,
6457 subsetneq: subsetneq,
6458 subsetneqq: subsetneqq,
6459 subsim: subsim,
6460 subsub: subsub,
6461 subsup: subsup,
6462 succapprox: succapprox,
6463 succ: succ,
6464 succcurlyeq: succcurlyeq,
6465 Succeeds: Succeeds,
6466 SucceedsEqual: SucceedsEqual,
6467 SucceedsSlantEqual: SucceedsSlantEqual,
6468 SucceedsTilde: SucceedsTilde,
6469 succeq: succeq,
6470 succnapprox: succnapprox,
6471 succneqq: succneqq,
6472 succnsim: succnsim,
6473 succsim: succsim,
6474 SuchThat: SuchThat,
6475 sum: sum,
6476 Sum: Sum,
6477 sung: sung,
6478 sup1: sup1,
6479 sup2: sup2,
6480 sup3: sup3,
6481 sup: sup,
6482 Sup: Sup,
6483 supdot: supdot,
6484 supdsub: supdsub,
6485 supE: supE,
6486 supe: supe,
6487 supedot: supedot,
6488 Superset: Superset,
6489 SupersetEqual: SupersetEqual,
6490 suphsol: suphsol,
6491 suphsub: suphsub,
6492 suplarr: suplarr,
6493 supmult: supmult,
6494 supnE: supnE,
6495 supne: supne,
6496 supplus: supplus,
6497 supset: supset,
6498 Supset: Supset,
6499 supseteq: supseteq,
6500 supseteqq: supseteqq,
6501 supsetneq: supsetneq,
6502 supsetneqq: supsetneqq,
6503 supsim: supsim,
6504 supsub: supsub,
6505 supsup: supsup,
6506 swarhk: swarhk,
6507 swarr: swarr,
6508 swArr: swArr,
6509 swarrow: swarrow,
6510 swnwar: swnwar,
6511 szlig: szlig,
6512 Tab: Tab,
6513 target: target,
6514 Tau: Tau,
6515 tau: tau,
6516 tbrk: tbrk,
6517 Tcaron: Tcaron,
6518 tcaron: tcaron,
6519 Tcedil: Tcedil,
6520 tcedil: tcedil,
6521 Tcy: Tcy,
6522 tcy: tcy,
6523 tdot: tdot,
6524 telrec: telrec,
6525 Tfr: Tfr,
6526 tfr: tfr,
6527 there4: there4,
6528 therefore: therefore,
6529 Therefore: Therefore,
6530 Theta: Theta,
6531 theta: theta,
6532 thetasym: thetasym,
6533 thetav: thetav,
6534 thickapprox: thickapprox,
6535 thicksim: thicksim,
6536 ThickSpace: ThickSpace,
6537 ThinSpace: ThinSpace,
6538 thinsp: thinsp,
6539 thkap: thkap,
6540 thksim: thksim,
6541 THORN: THORN,
6542 thorn: thorn,
6543 tilde: tilde,
6544 Tilde: Tilde,
6545 TildeEqual: TildeEqual,
6546 TildeFullEqual: TildeFullEqual,
6547 TildeTilde: TildeTilde,
6548 timesbar: timesbar,
6549 timesb: timesb,
6550 times: times,
6551 timesd: timesd,
6552 tint: tint,
6553 toea: toea,
6554 topbot: topbot,
6555 topcir: topcir,
6556 top: top,
6557 Topf: Topf,
6558 topf: topf,
6559 topfork: topfork,
6560 tosa: tosa,
6561 tprime: tprime,
6562 trade: trade,
6563 TRADE: TRADE,
6564 triangle: triangle,
6565 triangledown: triangledown,
6566 triangleleft: triangleleft,
6567 trianglelefteq: trianglelefteq,
6568 triangleq: triangleq,
6569 triangleright: triangleright,
6570 trianglerighteq: trianglerighteq,
6571 tridot: tridot,
6572 trie: trie,
6573 triminus: triminus,
6574 TripleDot: TripleDot,
6575 triplus: triplus,
6576 trisb: trisb,
6577 tritime: tritime,
6578 trpezium: trpezium,
6579 Tscr: Tscr,
6580 tscr: tscr,
6581 TScy: TScy,
6582 tscy: tscy,
6583 TSHcy: TSHcy,
6584 tshcy: tshcy,
6585 Tstrok: Tstrok,
6586 tstrok: tstrok,
6587 twixt: twixt,
6588 twoheadleftarrow: twoheadleftarrow,
6589 twoheadrightarrow: twoheadrightarrow,
6590 Uacute: Uacute,
6591 uacute: uacute,
6592 uarr: uarr,
6593 Uarr: Uarr,
6594 uArr: uArr,
6595 Uarrocir: Uarrocir,
6596 Ubrcy: Ubrcy,
6597 ubrcy: ubrcy,
6598 Ubreve: Ubreve,
6599 ubreve: ubreve,
6600 Ucirc: Ucirc,
6601 ucirc: ucirc,
6602 Ucy: Ucy,
6603 ucy: ucy,
6604 udarr: udarr,
6605 Udblac: Udblac,
6606 udblac: udblac,
6607 udhar: udhar,
6608 ufisht: ufisht,
6609 Ufr: Ufr,
6610 ufr: ufr,
6611 Ugrave: Ugrave,
6612 ugrave: ugrave,
6613 uHar: uHar,
6614 uharl: uharl,
6615 uharr: uharr,
6616 uhblk: uhblk,
6617 ulcorn: ulcorn,
6618 ulcorner: ulcorner,
6619 ulcrop: ulcrop,
6620 ultri: ultri,
6621 Umacr: Umacr,
6622 umacr: umacr,
6623 uml: uml,
6624 UnderBar: UnderBar,
6625 UnderBrace: UnderBrace,
6626 UnderBracket: UnderBracket,
6627 UnderParenthesis: UnderParenthesis,
6628 Union: Union,
6629 UnionPlus: UnionPlus,
6630 Uogon: Uogon,
6631 uogon: uogon,
6632 Uopf: Uopf,
6633 uopf: uopf,
6634 UpArrowBar: UpArrowBar,
6635 uparrow: uparrow,
6636 UpArrow: UpArrow,
6637 Uparrow: Uparrow,
6638 UpArrowDownArrow: UpArrowDownArrow,
6639 updownarrow: updownarrow,
6640 UpDownArrow: UpDownArrow,
6641 Updownarrow: Updownarrow,
6642 UpEquilibrium: UpEquilibrium,
6643 upharpoonleft: upharpoonleft,
6644 upharpoonright: upharpoonright,
6645 uplus: uplus,
6646 UpperLeftArrow: UpperLeftArrow,
6647 UpperRightArrow: UpperRightArrow,
6648 upsi: upsi,
6649 Upsi: Upsi,
6650 upsih: upsih,
6651 Upsilon: Upsilon,
6652 upsilon: upsilon,
6653 UpTeeArrow: UpTeeArrow,
6654 UpTee: UpTee,
6655 upuparrows: upuparrows,
6656 urcorn: urcorn,
6657 urcorner: urcorner,
6658 urcrop: urcrop,
6659 Uring: Uring,
6660 uring: uring,
6661 urtri: urtri,
6662 Uscr: Uscr,
6663 uscr: uscr,
6664 utdot: utdot,
6665 Utilde: Utilde,
6666 utilde: utilde,
6667 utri: utri,
6668 utrif: utrif,
6669 uuarr: uuarr,
6670 Uuml: Uuml,
6671 uuml: uuml,
6672 uwangle: uwangle,
6673 vangrt: vangrt,
6674 varepsilon: varepsilon,
6675 varkappa: varkappa,
6676 varnothing: varnothing,
6677 varphi: varphi,
6678 varpi: varpi,
6679 varpropto: varpropto,
6680 varr: varr,
6681 vArr: vArr,
6682 varrho: varrho,
6683 varsigma: varsigma,
6684 varsubsetneq: varsubsetneq,
6685 varsubsetneqq: varsubsetneqq,
6686 varsupsetneq: varsupsetneq,
6687 varsupsetneqq: varsupsetneqq,
6688 vartheta: vartheta,
6689 vartriangleleft: vartriangleleft,
6690 vartriangleright: vartriangleright,
6691 vBar: vBar,
6692 Vbar: Vbar,
6693 vBarv: vBarv,
6694 Vcy: Vcy,
6695 vcy: vcy,
6696 vdash: vdash,
6697 vDash: vDash,
6698 Vdash: Vdash,
6699 VDash: VDash,
6700 Vdashl: Vdashl,
6701 veebar: veebar,
6702 vee: vee,
6703 Vee: Vee,
6704 veeeq: veeeq,
6705 vellip: vellip,
6706 verbar: verbar,
6707 Verbar: Verbar,
6708 vert: vert,
6709 Vert: Vert,
6710 VerticalBar: VerticalBar,
6711 VerticalLine: VerticalLine,
6712 VerticalSeparator: VerticalSeparator,
6713 VerticalTilde: VerticalTilde,
6714 VeryThinSpace: VeryThinSpace,
6715 Vfr: Vfr,
6716 vfr: vfr,
6717 vltri: vltri,
6718 vnsub: vnsub,
6719 vnsup: vnsup,
6720 Vopf: Vopf,
6721 vopf: vopf,
6722 vprop: vprop,
6723 vrtri: vrtri,
6724 Vscr: Vscr,
6725 vscr: vscr,
6726 vsubnE: vsubnE,
6727 vsubne: vsubne,
6728 vsupnE: vsupnE,
6729 vsupne: vsupne,
6730 Vvdash: Vvdash,
6731 vzigzag: vzigzag,
6732 Wcirc: Wcirc,
6733 wcirc: wcirc,
6734 wedbar: wedbar,
6735 wedge: wedge,
6736 Wedge: Wedge,
6737 wedgeq: wedgeq,
6738 weierp: weierp,
6739 Wfr: Wfr,
6740 wfr: wfr,
6741 Wopf: Wopf,
6742 wopf: wopf,
6743 wp: wp,
6744 wr: wr,
6745 wreath: wreath,
6746 Wscr: Wscr,
6747 wscr: wscr,
6748 xcap: xcap,
6749 xcirc: xcirc,
6750 xcup: xcup,
6751 xdtri: xdtri,
6752 Xfr: Xfr,
6753 xfr: xfr,
6754 xharr: xharr,
6755 xhArr: xhArr,
6756 Xi: Xi,
6757 xi: xi,
6758 xlarr: xlarr,
6759 xlArr: xlArr,
6760 xmap: xmap,
6761 xnis: xnis,
6762 xodot: xodot,
6763 Xopf: Xopf,
6764 xopf: xopf,
6765 xoplus: xoplus,
6766 xotime: xotime,
6767 xrarr: xrarr,
6768 xrArr: xrArr,
6769 Xscr: Xscr,
6770 xscr: xscr,
6771 xsqcup: xsqcup,
6772 xuplus: xuplus,
6773 xutri: xutri,
6774 xvee: xvee,
6775 xwedge: xwedge,
6776 Yacute: Yacute,
6777 yacute: yacute,
6778 YAcy: YAcy,
6779 yacy: yacy,
6780 Ycirc: Ycirc,
6781 ycirc: ycirc,
6782 Ycy: Ycy,
6783 ycy: ycy,
6784 yen: yen,
6785 Yfr: Yfr,
6786 yfr: yfr,
6787 YIcy: YIcy,
6788 yicy: yicy,
6789 Yopf: Yopf,
6790 yopf: yopf,
6791 Yscr: Yscr,
6792 yscr: yscr,
6793 YUcy: YUcy,
6794 yucy: yucy,
6795 yuml: yuml,
6796 Yuml: Yuml,
6797 Zacute: Zacute,
6798 zacute: zacute,
6799 Zcaron: Zcaron,
6800 zcaron: zcaron,
6801 Zcy: Zcy,
6802 zcy: zcy,
6803 Zdot: Zdot,
6804 zdot: zdot,
6805 zeetrf: zeetrf,
6806 ZeroWidthSpace: ZeroWidthSpace,
6807 Zeta: Zeta,
6808 zeta: zeta,
6809 zfr: zfr,
6810 Zfr: Zfr,
6811 ZHcy: ZHcy,
6812 zhcy: zhcy,
6813 zigrarr: zigrarr,
6814 zopf: zopf,
6815 Zopf: Zopf,
6816 Zscr: Zscr,
6817 zscr: zscr,
6818 zwj: zwj,
6819 zwnj: zwnj,
6820 'default': entities
6821 });
6822
6823 var Aacute$1 = "Á";
6824 var aacute$1 = "á";
6825 var Acirc$1 = "Â";
6826 var acirc$1 = "â";
6827 var acute$1 = "´";
6828 var AElig$1 = "Æ";
6829 var aelig$1 = "æ";
6830 var Agrave$1 = "À";
6831 var agrave$1 = "à";
6832 var amp$1 = "&";
6833 var AMP$1 = "&";
6834 var Aring$1 = "Å";
6835 var aring$1 = "å";
6836 var Atilde$1 = "Ã";
6837 var atilde$1 = "ã";
6838 var Auml$1 = "Ä";
6839 var auml$1 = "ä";
6840 var brvbar$1 = "¦";
6841 var Ccedil$1 = "Ç";
6842 var ccedil$1 = "ç";
6843 var cedil$1 = "¸";
6844 var cent$1 = "¢";
6845 var copy$1 = "©";
6846 var COPY$1 = "©";
6847 var curren$1 = "¤";
6848 var deg$1 = "°";
6849 var divide$1 = "÷";
6850 var Eacute$1 = "É";
6851 var eacute$1 = "é";
6852 var Ecirc$1 = "Ê";
6853 var ecirc$1 = "ê";
6854 var Egrave$1 = "È";
6855 var egrave$1 = "è";
6856 var ETH$1 = "Ð";
6857 var eth$1 = "ð";
6858 var Euml$1 = "Ë";
6859 var euml$1 = "ë";
6860 var frac12$1 = "½";
6861 var frac14$1 = "¼";
6862 var frac34$1 = "¾";
6863 var gt$1 = ">";
6864 var GT$1 = ">";
6865 var Iacute$1 = "Í";
6866 var iacute$1 = "í";
6867 var Icirc$1 = "Î";
6868 var icirc$1 = "î";
6869 var iexcl$1 = "¡";
6870 var Igrave$1 = "Ì";
6871 var igrave$1 = "ì";
6872 var iquest$1 = "¿";
6873 var Iuml$1 = "Ï";
6874 var iuml$1 = "ï";
6875 var laquo$1 = "«";
6876 var lt$1 = "<";
6877 var LT$1 = "<";
6878 var macr$1 = "¯";
6879 var micro$1 = "µ";
6880 var middot$1 = "·";
6881 var nbsp$1 = " ";
6882 var not$1 = "¬";
6883 var Ntilde$1 = "Ñ";
6884 var ntilde$1 = "ñ";
6885 var Oacute$1 = "Ó";
6886 var oacute$1 = "ó";
6887 var Ocirc$1 = "Ô";
6888 var ocirc$1 = "ô";
6889 var Ograve$1 = "Ò";
6890 var ograve$1 = "ò";
6891 var ordf$1 = "ª";
6892 var ordm$1 = "º";
6893 var Oslash$1 = "Ø";
6894 var oslash$1 = "ø";
6895 var Otilde$1 = "Õ";
6896 var otilde$1 = "õ";
6897 var Ouml$1 = "Ö";
6898 var ouml$1 = "ö";
6899 var para$1 = "¶";
6900 var plusmn$1 = "±";
6901 var pound$1 = "£";
6902 var quot$1 = "\"";
6903 var QUOT$1 = "\"";
6904 var raquo$1 = "»";
6905 var reg$1 = "®";
6906 var REG$1 = "®";
6907 var sect$1 = "§";
6908 var shy$1 = "­";
6909 var sup1$1 = "¹";
6910 var sup2$1 = "²";
6911 var sup3$1 = "³";
6912 var szlig$1 = "ß";
6913 var THORN$1 = "Þ";
6914 var thorn$1 = "þ";
6915 var times$1 = "×";
6916 var Uacute$1 = "Ú";
6917 var uacute$1 = "ú";
6918 var Ucirc$1 = "Û";
6919 var ucirc$1 = "û";
6920 var Ugrave$1 = "Ù";
6921 var ugrave$1 = "ù";
6922 var uml$1 = "¨";
6923 var Uuml$1 = "Ü";
6924 var uuml$1 = "ü";
6925 var Yacute$1 = "Ý";
6926 var yacute$1 = "ý";
6927 var yen$1 = "¥";
6928 var yuml$1 = "ÿ";
6929 var legacy = {
6930 Aacute: Aacute$1,
6931 aacute: aacute$1,
6932 Acirc: Acirc$1,
6933 acirc: acirc$1,
6934 acute: acute$1,
6935 AElig: AElig$1,
6936 aelig: aelig$1,
6937 Agrave: Agrave$1,
6938 agrave: agrave$1,
6939 amp: amp$1,
6940 AMP: AMP$1,
6941 Aring: Aring$1,
6942 aring: aring$1,
6943 Atilde: Atilde$1,
6944 atilde: atilde$1,
6945 Auml: Auml$1,
6946 auml: auml$1,
6947 brvbar: brvbar$1,
6948 Ccedil: Ccedil$1,
6949 ccedil: ccedil$1,
6950 cedil: cedil$1,
6951 cent: cent$1,
6952 copy: copy$1,
6953 COPY: COPY$1,
6954 curren: curren$1,
6955 deg: deg$1,
6956 divide: divide$1,
6957 Eacute: Eacute$1,
6958 eacute: eacute$1,
6959 Ecirc: Ecirc$1,
6960 ecirc: ecirc$1,
6961 Egrave: Egrave$1,
6962 egrave: egrave$1,
6963 ETH: ETH$1,
6964 eth: eth$1,
6965 Euml: Euml$1,
6966 euml: euml$1,
6967 frac12: frac12$1,
6968 frac14: frac14$1,
6969 frac34: frac34$1,
6970 gt: gt$1,
6971 GT: GT$1,
6972 Iacute: Iacute$1,
6973 iacute: iacute$1,
6974 Icirc: Icirc$1,
6975 icirc: icirc$1,
6976 iexcl: iexcl$1,
6977 Igrave: Igrave$1,
6978 igrave: igrave$1,
6979 iquest: iquest$1,
6980 Iuml: Iuml$1,
6981 iuml: iuml$1,
6982 laquo: laquo$1,
6983 lt: lt$1,
6984 LT: LT$1,
6985 macr: macr$1,
6986 micro: micro$1,
6987 middot: middot$1,
6988 nbsp: nbsp$1,
6989 not: not$1,
6990 Ntilde: Ntilde$1,
6991 ntilde: ntilde$1,
6992 Oacute: Oacute$1,
6993 oacute: oacute$1,
6994 Ocirc: Ocirc$1,
6995 ocirc: ocirc$1,
6996 Ograve: Ograve$1,
6997 ograve: ograve$1,
6998 ordf: ordf$1,
6999 ordm: ordm$1,
7000 Oslash: Oslash$1,
7001 oslash: oslash$1,
7002 Otilde: Otilde$1,
7003 otilde: otilde$1,
7004 Ouml: Ouml$1,
7005 ouml: ouml$1,
7006 para: para$1,
7007 plusmn: plusmn$1,
7008 pound: pound$1,
7009 quot: quot$1,
7010 QUOT: QUOT$1,
7011 raquo: raquo$1,
7012 reg: reg$1,
7013 REG: REG$1,
7014 sect: sect$1,
7015 shy: shy$1,
7016 sup1: sup1$1,
7017 sup2: sup2$1,
7018 sup3: sup3$1,
7019 szlig: szlig$1,
7020 THORN: THORN$1,
7021 thorn: thorn$1,
7022 times: times$1,
7023 Uacute: Uacute$1,
7024 uacute: uacute$1,
7025 Ucirc: Ucirc$1,
7026 ucirc: ucirc$1,
7027 Ugrave: Ugrave$1,
7028 ugrave: ugrave$1,
7029 uml: uml$1,
7030 Uuml: Uuml$1,
7031 uuml: uuml$1,
7032 Yacute: Yacute$1,
7033 yacute: yacute$1,
7034 yen: yen$1,
7035 yuml: yuml$1
7036 };
7037
7038 var legacy$1 = /*#__PURE__*/Object.freeze({
7039 __proto__: null,
7040 Aacute: Aacute$1,
7041 aacute: aacute$1,
7042 Acirc: Acirc$1,
7043 acirc: acirc$1,
7044 acute: acute$1,
7045 AElig: AElig$1,
7046 aelig: aelig$1,
7047 Agrave: Agrave$1,
7048 agrave: agrave$1,
7049 amp: amp$1,
7050 AMP: AMP$1,
7051 Aring: Aring$1,
7052 aring: aring$1,
7053 Atilde: Atilde$1,
7054 atilde: atilde$1,
7055 Auml: Auml$1,
7056 auml: auml$1,
7057 brvbar: brvbar$1,
7058 Ccedil: Ccedil$1,
7059 ccedil: ccedil$1,
7060 cedil: cedil$1,
7061 cent: cent$1,
7062 copy: copy$1,
7063 COPY: COPY$1,
7064 curren: curren$1,
7065 deg: deg$1,
7066 divide: divide$1,
7067 Eacute: Eacute$1,
7068 eacute: eacute$1,
7069 Ecirc: Ecirc$1,
7070 ecirc: ecirc$1,
7071 Egrave: Egrave$1,
7072 egrave: egrave$1,
7073 ETH: ETH$1,
7074 eth: eth$1,
7075 Euml: Euml$1,
7076 euml: euml$1,
7077 frac12: frac12$1,
7078 frac14: frac14$1,
7079 frac34: frac34$1,
7080 gt: gt$1,
7081 GT: GT$1,
7082 Iacute: Iacute$1,
7083 iacute: iacute$1,
7084 Icirc: Icirc$1,
7085 icirc: icirc$1,
7086 iexcl: iexcl$1,
7087 Igrave: Igrave$1,
7088 igrave: igrave$1,
7089 iquest: iquest$1,
7090 Iuml: Iuml$1,
7091 iuml: iuml$1,
7092 laquo: laquo$1,
7093 lt: lt$1,
7094 LT: LT$1,
7095 macr: macr$1,
7096 micro: micro$1,
7097 middot: middot$1,
7098 nbsp: nbsp$1,
7099 not: not$1,
7100 Ntilde: Ntilde$1,
7101 ntilde: ntilde$1,
7102 Oacute: Oacute$1,
7103 oacute: oacute$1,
7104 Ocirc: Ocirc$1,
7105 ocirc: ocirc$1,
7106 Ograve: Ograve$1,
7107 ograve: ograve$1,
7108 ordf: ordf$1,
7109 ordm: ordm$1,
7110 Oslash: Oslash$1,
7111 oslash: oslash$1,
7112 Otilde: Otilde$1,
7113 otilde: otilde$1,
7114 Ouml: Ouml$1,
7115 ouml: ouml$1,
7116 para: para$1,
7117 plusmn: plusmn$1,
7118 pound: pound$1,
7119 quot: quot$1,
7120 QUOT: QUOT$1,
7121 raquo: raquo$1,
7122 reg: reg$1,
7123 REG: REG$1,
7124 sect: sect$1,
7125 shy: shy$1,
7126 sup1: sup1$1,
7127 sup2: sup2$1,
7128 sup3: sup3$1,
7129 szlig: szlig$1,
7130 THORN: THORN$1,
7131 thorn: thorn$1,
7132 times: times$1,
7133 Uacute: Uacute$1,
7134 uacute: uacute$1,
7135 Ucirc: Ucirc$1,
7136 ucirc: ucirc$1,
7137 Ugrave: Ugrave$1,
7138 ugrave: ugrave$1,
7139 uml: uml$1,
7140 Uuml: Uuml$1,
7141 uuml: uuml$1,
7142 Yacute: Yacute$1,
7143 yacute: yacute$1,
7144 yen: yen$1,
7145 yuml: yuml$1,
7146 'default': legacy
7147 });
7148
7149 var amp$2 = "&";
7150 var apos$1 = "'";
7151 var gt$2 = ">";
7152 var lt$2 = "<";
7153 var quot$2 = "\"";
7154 var xml = {
7155 amp: amp$2,
7156 apos: apos$1,
7157 gt: gt$2,
7158 lt: lt$2,
7159 quot: quot$2
7160 };
7161
7162 var xml$1 = /*#__PURE__*/Object.freeze({
7163 __proto__: null,
7164 amp: amp$2,
7165 apos: apos$1,
7166 gt: gt$2,
7167 lt: lt$2,
7168 quot: quot$2,
7169 'default': xml
7170 });
7171
7172 var decode = {
7173 "0": 65533,
7174 "128": 8364,
7175 "130": 8218,
7176 "131": 402,
7177 "132": 8222,
7178 "133": 8230,
7179 "134": 8224,
7180 "135": 8225,
7181 "136": 710,
7182 "137": 8240,
7183 "138": 352,
7184 "139": 8249,
7185 "140": 338,
7186 "142": 381,
7187 "145": 8216,
7188 "146": 8217,
7189 "147": 8220,
7190 "148": 8221,
7191 "149": 8226,
7192 "150": 8211,
7193 "151": 8212,
7194 "152": 732,
7195 "153": 8482,
7196 "154": 353,
7197 "155": 8250,
7198 "156": 339,
7199 "158": 382,
7200 "159": 376
7201 };
7202
7203 var decode$1 = /*#__PURE__*/Object.freeze({
7204 __proto__: null,
7205 'default': decode
7206 });
7207
7208 var require$$0 = getCjsExportFromNamespace(decode$1);
7209
7210 var decode_codepoint = createCommonjsModule(function (module, exports) {
7211 var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
7212 return (mod && mod.__esModule) ? mod : { "default": mod };
7213 };
7214 Object.defineProperty(exports, "__esModule", { value: true });
7215 var decode_json_1 = __importDefault(require$$0);
7216 // modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
7217 function decodeCodePoint(codePoint) {
7218 if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
7219 return "\uFFFD";
7220 }
7221 if (codePoint in decode_json_1.default) {
7222 codePoint = decode_json_1.default[codePoint];
7223 }
7224 var output = "";
7225 if (codePoint > 0xffff) {
7226 codePoint -= 0x10000;
7227 output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
7228 codePoint = 0xdc00 | (codePoint & 0x3ff);
7229 }
7230 output += String.fromCharCode(codePoint);
7231 return output;
7232 }
7233 exports.default = decodeCodePoint;
7234 });
7235
7236 unwrapExports(decode_codepoint);
7237
7238 var require$$1 = getCjsExportFromNamespace(entities$1);
7239
7240 var require$$1$1 = getCjsExportFromNamespace(legacy$1);
7241
7242 var require$$0$1 = getCjsExportFromNamespace(xml$1);
7243
7244 var decode$2 = createCommonjsModule(function (module, exports) {
7245 var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
7246 return (mod && mod.__esModule) ? mod : { "default": mod };
7247 };
7248 Object.defineProperty(exports, "__esModule", { value: true });
7249 exports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;
7250 var entities_json_1 = __importDefault(require$$1);
7251 var legacy_json_1 = __importDefault(require$$1$1);
7252 var xml_json_1 = __importDefault(require$$0$1);
7253 var decode_codepoint_1 = __importDefault(decode_codepoint);
7254 exports.decodeXML = getStrictDecoder(xml_json_1.default);
7255 exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);
7256 function getStrictDecoder(map) {
7257 var keys = Object.keys(map).join("|");
7258 var replace = getReplacer(map);
7259 keys += "|#[xX][\\da-fA-F]+|#\\d+";
7260 var re = new RegExp("&(?:" + keys + ");", "g");
7261 return function (str) { return String(str).replace(re, replace); };
7262 }
7263 var sorter = function (a, b) { return (a < b ? 1 : -1); };
7264 exports.decodeHTML = (function () {
7265 var legacy = Object.keys(legacy_json_1.default).sort(sorter);
7266 var keys = Object.keys(entities_json_1.default).sort(sorter);
7267 for (var i = 0, j = 0; i < keys.length; i++) {
7268 if (legacy[j] === keys[i]) {
7269 keys[i] += ";?";
7270 j++;
7271 }
7272 else {
7273 keys[i] += ";";
7274 }
7275 }
7276 var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g");
7277 var replace = getReplacer(entities_json_1.default);
7278 function replacer(str) {
7279 if (str.substr(-1) !== ";")
7280 str += ";";
7281 return replace(str);
7282 }
7283 //TODO consider creating a merged map
7284 return function (str) { return String(str).replace(re, replacer); };
7285 })();
7286 function getReplacer(map) {
7287 return function replace(str) {
7288 if (str.charAt(1) === "#") {
7289 var secondChar = str.charAt(2);
7290 if (secondChar === "X" || secondChar === "x") {
7291 return decode_codepoint_1.default(parseInt(str.substr(3), 16));
7292 }
7293 return decode_codepoint_1.default(parseInt(str.substr(2), 10));
7294 }
7295 return map[str.slice(1, -1)];
7296 };
7297 }
7298 });
7299
7300 unwrapExports(decode$2);
7301 var decode_1 = decode$2.decodeHTML;
7302 var decode_2 = decode$2.decodeHTMLStrict;
7303 var decode_3 = decode$2.decodeXML;
7304
7305 var encode$1 = createCommonjsModule(function (module, exports) {
7306 var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
7307 return (mod && mod.__esModule) ? mod : { "default": mod };
7308 };
7309 Object.defineProperty(exports, "__esModule", { value: true });
7310 exports.escape = exports.encodeHTML = exports.encodeXML = void 0;
7311 var xml_json_1 = __importDefault(require$$0$1);
7312 var inverseXML = getInverseObj(xml_json_1.default);
7313 var xmlReplacer = getInverseReplacer(inverseXML);
7314 exports.encodeXML = getInverse(inverseXML, xmlReplacer);
7315 var entities_json_1 = __importDefault(require$$1);
7316 var inverseHTML = getInverseObj(entities_json_1.default);
7317 var htmlReplacer = getInverseReplacer(inverseHTML);
7318 exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);
7319 function getInverseObj(obj) {
7320 return Object.keys(obj)
7321 .sort()
7322 .reduce(function (inverse, name) {
7323 inverse[obj[name]] = "&" + name + ";";
7324 return inverse;
7325 }, {});
7326 }
7327 function getInverseReplacer(inverse) {
7328 var single = [];
7329 var multiple = [];
7330 for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {
7331 var k = _a[_i];
7332 if (k.length === 1) {
7333 // Add value to single array
7334 single.push("\\" + k);
7335 }
7336 else {
7337 // Add value to multiple array
7338 multiple.push(k);
7339 }
7340 }
7341 // Add ranges to single characters.
7342 single.sort();
7343 for (var start = 0; start < single.length - 1; start++) {
7344 // Find the end of a run of characters
7345 var end = start;
7346 while (end < single.length - 1 &&
7347 single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {
7348 end += 1;
7349 }
7350 var count = 1 + end - start;
7351 // We want to replace at least three characters
7352 if (count < 3)
7353 continue;
7354 single.splice(start, count, single[start] + "-" + single[end]);
7355 }
7356 multiple.unshift("[" + single.join("") + "]");
7357 return new RegExp(multiple.join("|"), "g");
7358 }
7359 var reNonASCII = /(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g;
7360 function singleCharReplacer(c) {
7361 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
7362 return "&#x" + c.codePointAt(0).toString(16).toUpperCase() + ";";
7363 }
7364 function getInverse(inverse, re) {
7365 return function (data) {
7366 return data
7367 .replace(re, function (name) { return inverse[name]; })
7368 .replace(reNonASCII, singleCharReplacer);
7369 };
7370 }
7371 var reXmlChars = getInverseReplacer(inverseXML);
7372 function escape(data) {
7373 return data
7374 .replace(reXmlChars, singleCharReplacer)
7375 .replace(reNonASCII, singleCharReplacer);
7376 }
7377 exports.escape = escape;
7378 });
7379
7380 unwrapExports(encode$1);
7381 var encode_1$1 = encode$1.escape;
7382 var encode_2 = encode$1.encodeHTML;
7383 var encode_3 = encode$1.encodeXML;
7384
7385 var lib = createCommonjsModule(function (module, exports) {
7386 Object.defineProperty(exports, "__esModule", { value: true });
7387 exports.encode = exports.decodeStrict = exports.decode = void 0;
7388
7389
7390 /**
7391 * Decodes a string with entities.
7392 *
7393 * @param data String to decode.
7394 * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
7395 */
7396 function decode(data, level) {
7397 return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTML)(data);
7398 }
7399 exports.decode = decode;
7400 /**
7401 * Decodes a string with entities. Does not allow missing trailing semicolons for entities.
7402 *
7403 * @param data String to decode.
7404 * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
7405 */
7406 function decodeStrict(data, level) {
7407 return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTMLStrict)(data);
7408 }
7409 exports.decodeStrict = decodeStrict;
7410 /**
7411 * Encodes a string with entities.
7412 *
7413 * @param data String to encode.
7414 * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.
7415 */
7416 function encode(data, level) {
7417 return (!level || level <= 0 ? encode$1.encodeXML : encode$1.encodeHTML)(data);
7418 }
7419 exports.encode = encode;
7420 var encode_2 = encode$1;
7421 Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return encode_2.encodeXML; } });
7422 Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
7423 Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return encode_2.escape; } });
7424 // Legacy aliases
7425 Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
7426 Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
7427 var decode_2 = decode$2;
7428 Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_2.decodeXML; } });
7429 Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
7430 Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
7431 // Legacy aliases
7432 Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
7433 Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
7434 Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
7435 Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
7436 Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_2.decodeXML; } });
7437 });
7438
7439 unwrapExports(lib);
7440 var lib_1 = lib.encode;
7441 var lib_2 = lib.decodeStrict;
7442 var lib_3 = lib.decode;
7443 var lib_4 = lib.encodeXML;
7444 var lib_5 = lib.encodeHTML;
7445 var lib_6 = lib.encodeHTML4;
7446 var lib_7 = lib.encodeHTML5;
7447 var lib_8 = lib.decodeXML;
7448 var lib_9 = lib.decodeHTML;
7449 var lib_10 = lib.decodeHTMLStrict;
7450 var lib_11 = lib.decodeHTML4;
7451 var lib_12 = lib.decodeHTML5;
7452 var lib_13 = lib.decodeHTML4Strict;
7453 var lib_14 = lib.decodeHTML5Strict;
7454 var lib_15 = lib.decodeXMLStrict;
7455
7456 var C_BACKSLASH = 92;
7457
7458 var ENTITY = "&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});";
7459
7460 var TAGNAME = "[A-Za-z][A-Za-z0-9-]*";
7461 var ATTRIBUTENAME = "[a-zA-Z_:][a-zA-Z0-9:._-]*";
7462 var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+";
7463 var SINGLEQUOTEDVALUE = "'[^']*'";
7464 var DOUBLEQUOTEDVALUE = '"[^"]*"';
7465 var ATTRIBUTEVALUE =
7466 "(?:" +
7467 UNQUOTEDVALUE +
7468 "|" +
7469 SINGLEQUOTEDVALUE +
7470 "|" +
7471 DOUBLEQUOTEDVALUE +
7472 ")";
7473 var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")";
7474 var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)";
7475 var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>";
7476 var CLOSETAG = "</" + TAGNAME + "\\s*[>]";
7477 var HTMLCOMMENT = "<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->";
7478 var PROCESSINGINSTRUCTION = "[<][?][\\s\\S]*?[?][>]";
7479 var DECLARATION = "<![A-Z]+" + "\\s+[^>]*>";
7480 var CDATA = "<!\\[CDATA\\[[\\s\\S]*?\\]\\]>";
7481 var HTMLTAG =
7482 "(?:" +
7483 OPENTAG +
7484 "|" +
7485 CLOSETAG +
7486 "|" +
7487 HTMLCOMMENT +
7488 "|" +
7489 PROCESSINGINSTRUCTION +
7490 "|" +
7491 DECLARATION +
7492 "|" +
7493 CDATA +
7494 ")";
7495 var reHtmlTag = new RegExp("^" + HTMLTAG);
7496
7497 var reBackslashOrAmp = /[\\&]/;
7498
7499 var ESCAPABLE = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]";
7500
7501 var reEntityOrEscapedChar = new RegExp("\\\\" + ESCAPABLE + "|" + ENTITY, "gi");
7502
7503 var XMLSPECIAL = '[&<>"]';
7504
7505 var reXmlSpecial = new RegExp(XMLSPECIAL, "g");
7506
7507 var unescapeChar = function(s) {
7508 if (s.charCodeAt(0) === C_BACKSLASH) {
7509 return s.charAt(1);
7510 } else {
7511 return lib_9(s);
7512 }
7513 };
7514
7515 // Replace entities and backslash escapes with literal characters.
7516 var unescapeString = function(s) {
7517 if (reBackslashOrAmp.test(s)) {
7518 return s.replace(reEntityOrEscapedChar, unescapeChar);
7519 } else {
7520 return s;
7521 }
7522 };
7523
7524 var normalizeURI = function(uri) {
7525 try {
7526 return encode_1(uri);
7527 } catch (err) {
7528 return uri;
7529 }
7530 };
7531
7532 var replaceUnsafeChar = function(s) {
7533 switch (s) {
7534 case "&":
7535 return "&amp;";
7536 case "<":
7537 return "&lt;";
7538 case ">":
7539 return "&gt;";
7540 case '"':
7541 return "&quot;";
7542 default:
7543 return s;
7544 }
7545 };
7546
7547 var escapeXml = function(s) {
7548 if (reXmlSpecial.test(s)) {
7549 return s.replace(reXmlSpecial, replaceUnsafeChar);
7550 } else {
7551 return s;
7552 }
7553 };
7554
7555 // derived from https://github.com/mathiasbynens/String.fromCodePoint
7556 /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */
7557
7558 var _fromCodePoint;
7559
7560 function fromCodePoint(_) {
7561 return _fromCodePoint(_);
7562 }
7563
7564 if (String.fromCodePoint) {
7565 _fromCodePoint = function(_) {
7566 try {
7567 return String.fromCodePoint(_);
7568 } catch (e) {
7569 if (e instanceof RangeError) {
7570 return String.fromCharCode(0xfffd);
7571 }
7572 throw e;
7573 }
7574 };
7575 } else {
7576 var stringFromCharCode = String.fromCharCode;
7577 var floor = Math.floor;
7578 _fromCodePoint = function() {
7579 var MAX_SIZE = 0x4000;
7580 var codeUnits = [];
7581 var highSurrogate;
7582 var lowSurrogate;
7583 var index = -1;
7584 var length = arguments.length;
7585 if (!length) {
7586 return "";
7587 }
7588 var result = "";
7589 while (++index < length) {
7590 var codePoint = Number(arguments[index]);
7591 if (
7592 !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
7593 codePoint < 0 || // not a valid Unicode code point
7594 codePoint > 0x10ffff || // not a valid Unicode code point
7595 floor(codePoint) !== codePoint // not an integer
7596 ) {
7597 return String.fromCharCode(0xfffd);
7598 }
7599 if (codePoint <= 0xffff) {
7600 // BMP code point
7601 codeUnits.push(codePoint);
7602 } else {
7603 // Astral code point; split in surrogate halves
7604 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
7605 codePoint -= 0x10000;
7606 highSurrogate = (codePoint >> 10) + 0xd800;
7607 lowSurrogate = (codePoint % 0x400) + 0xdc00;
7608 codeUnits.push(highSurrogate, lowSurrogate);
7609 }
7610 if (index + 1 === length || codeUnits.length > MAX_SIZE) {
7611 result += stringFromCharCode.apply(null, codeUnits);
7612 codeUnits.length = 0;
7613 }
7614 }
7615 return result;
7616 };
7617 }
7618
7619 /*! http://mths.be/repeat v0.2.0 by @mathias */
7620 if (!String.prototype.repeat) {
7621 (function() {
7622 var defineProperty = (function() {
7623 // IE 8 only supports `Object.defineProperty` on DOM elements
7624 try {
7625 var object = {};
7626 var $defineProperty = Object.defineProperty;
7627 var result = $defineProperty(object, object, object) && $defineProperty;
7628 } catch(error) {}
7629 return result;
7630 }());
7631 var repeat = function(count) {
7632 if (this == null) {
7633 throw TypeError();
7634 }
7635 var string = String(this);
7636 // `ToInteger`
7637 var n = count ? Number(count) : 0;
7638 if (n != n) { // better `isNaN`
7639 n = 0;
7640 }
7641 // Account for out-of-bounds indices
7642 if (n < 0 || n == Infinity) {
7643 throw RangeError();
7644 }
7645 var result = '';
7646 while (n) {
7647 if (n % 2 == 1) {
7648 result += string;
7649 }
7650 if (n > 1) {
7651 string += string;
7652 }
7653 n >>= 1;
7654 }
7655 return result;
7656 };
7657 if (defineProperty) {
7658 defineProperty(String.prototype, 'repeat', {
7659 'value': repeat,
7660 'configurable': true,
7661 'writable': true
7662 });
7663 } else {
7664 String.prototype.repeat = repeat;
7665 }
7666 }());
7667 }
7668
7669 var normalizeURI$1 = normalizeURI;
7670 var unescapeString$1 = unescapeString;
7671
7672 // Constants for character codes:
7673
7674 var C_NEWLINE = 10;
7675 var C_ASTERISK = 42;
7676 var C_UNDERSCORE = 95;
7677 var C_BACKTICK = 96;
7678 var C_OPEN_BRACKET = 91;
7679 var C_CLOSE_BRACKET = 93;
7680 var C_LESSTHAN = 60;
7681 var C_BANG = 33;
7682 var C_BACKSLASH$1 = 92;
7683 var C_AMPERSAND = 38;
7684 var C_OPEN_PAREN = 40;
7685 var C_CLOSE_PAREN = 41;
7686 var C_COLON = 58;
7687 var C_SINGLEQUOTE = 39;
7688 var C_DOUBLEQUOTE = 34;
7689
7690 // Some regexps used in inline parser:
7691
7692 var ESCAPABLE$1 = ESCAPABLE;
7693 var ESCAPED_CHAR = "\\\\" + ESCAPABLE$1;
7694
7695 var ENTITY$1 = ENTITY;
7696 var reHtmlTag$1 = reHtmlTag;
7697
7698 var rePunctuation = new RegExp(
7699 /^[!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/
7700 );
7701
7702 var reLinkTitle = new RegExp(
7703 '^(?:"(' +
7704 ESCAPED_CHAR +
7705 '|[^"\\x00])*"' +
7706 "|" +
7707 "'(" +
7708 ESCAPED_CHAR +
7709 "|[^'\\x00])*'" +
7710 "|" +
7711 "\\((" +
7712 ESCAPED_CHAR +
7713 "|[^()\\x00])*\\))"
7714 );
7715
7716 var reLinkDestinationBraces = /^(?:<(?:[^<>\n\\\x00]|\\.)*>)/;
7717
7718 var reEscapable = new RegExp("^" + ESCAPABLE$1);
7719
7720 var reEntityHere = new RegExp("^" + ENTITY$1, "i");
7721
7722 var reTicks = /`+/;
7723
7724 var reTicksHere = /^`+/;
7725
7726 var reEllipses = /\.\.\./g;
7727
7728 var reDash = /--+/g;
7729
7730 var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;
7731
7732 var reAutolink = /^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*>/i;
7733
7734 var reSpnl = /^ *(?:\n *)?/;
7735
7736 var reWhitespaceChar = /^[ \t\n\x0b\x0c\x0d]/;
7737
7738 var reUnicodeWhitespaceChar = /^\s/;
7739
7740 var reFinalSpace = / *$/;
7741
7742 var reInitialSpace = /^ */;
7743
7744 var reSpaceAtEndOfLine = /^ *(?:\n|$)/;
7745
7746 var reLinkLabel = /^\[(?:[^\\\[\]]|\\.){0,1000}\]/s;
7747
7748 // Matches a string of non-special characters.
7749 var reMain = /^[^\n`\[\]\\!<&*_'"]+/m;
7750
7751 var text = function(s) {
7752 var node = new Node("text");
7753 node._literal = s;
7754 return node;
7755 };
7756
7757 // normalize a reference in reference link (remove []s, trim,
7758 // collapse internal space, unicode case fold.
7759 // See commonmark/commonmark.js#168.
7760 var normalizeReference = function(string) {
7761 return string
7762 .slice(1, string.length - 1)
7763 .trim()
7764 .replace(/[ \t\r\n]+/, " ")
7765 .toLowerCase()
7766 .toUpperCase();
7767 };
7768
7769 // INLINE PARSER
7770
7771 // These are methods of an InlineParser object, defined below.
7772 // An InlineParser keeps track of a subject (a string to be
7773 // parsed) and a position in that subject.
7774
7775 // If re matches at current position in the subject, advance
7776 // position in subject and return the match; otherwise return null.
7777 var match = function(re) {
7778 var m = re.exec(this.subject.slice(this.pos));
7779 if (m === null) {
7780 return null;
7781 } else {
7782 this.pos += m.index + m[0].length;
7783 return m[0];
7784 }
7785 };
7786
7787 // Returns the code for the character at the current subject position, or -1
7788 // there are no more characters.
7789 var peek = function() {
7790 if (this.pos < this.subject.length) {
7791 return this.subject.charCodeAt(this.pos);
7792 } else {
7793 return -1;
7794 }
7795 };
7796
7797 // Parse zero or more space characters, including at most one newline
7798 var spnl = function() {
7799 this.match(reSpnl);
7800 return true;
7801 };
7802
7803 // All of the parsers below try to match something at the current position
7804 // in the subject. If they succeed in matching anything, they
7805 // return the inline matched, advancing the subject.
7806
7807 // Attempt to parse backticks, adding either a backtick code span or a
7808 // literal sequence of backticks.
7809 var parseBackticks = function(block) {
7810 var ticks = this.match(reTicksHere);
7811 if (ticks === null) {
7812 return false;
7813 }
7814 var afterOpenTicks = this.pos;
7815 var matched;
7816 var node;
7817 var contents;
7818 while ((matched = this.match(reTicks)) !== null) {
7819 if (matched === ticks) {
7820 node = new Node("code");
7821 contents = this.subject
7822 .slice(afterOpenTicks, this.pos - ticks.length)
7823 .replace(/\n/gm, " ");
7824 if (
7825 contents.length > 0 &&
7826 contents.match(/[^ ]/) !== null &&
7827 contents[0] == " " &&
7828 contents[contents.length - 1] == " "
7829 ) {
7830 node._literal = contents.slice(1, contents.length - 1);
7831 } else {
7832 node._literal = contents;
7833 }
7834 block.appendChild(node);
7835 return true;
7836 }
7837 }
7838 // If we got here, we didn't match a closing backtick sequence.
7839 this.pos = afterOpenTicks;
7840 block.appendChild(text(ticks));
7841 return true;
7842 };
7843
7844 // Parse a backslash-escaped special character, adding either the escaped
7845 // character, a hard line break (if the backslash is followed by a newline),
7846 // or a literal backslash to the block's children. Assumes current character
7847 // is a backslash.
7848 var parseBackslash = function(block) {
7849 var subj = this.subject;
7850 var node;
7851 this.pos += 1;
7852 if (this.peek() === C_NEWLINE) {
7853 this.pos += 1;
7854 node = new Node("linebreak");
7855 block.appendChild(node);
7856 } else if (reEscapable.test(subj.charAt(this.pos))) {
7857 block.appendChild(text(subj.charAt(this.pos)));
7858 this.pos += 1;
7859 } else {
7860 block.appendChild(text("\\"));
7861 }
7862 return true;
7863 };
7864
7865 // Attempt to parse an autolink (URL or email in pointy brackets).
7866 var parseAutolink = function(block) {
7867 var m;
7868 var dest;
7869 var node;
7870 if ((m = this.match(reEmailAutolink))) {
7871 dest = m.slice(1, m.length - 1);
7872 node = new Node("link");
7873 node._destination = normalizeURI$1("mailto:" + dest);
7874 node._title = "";
7875 node.appendChild(text(dest));
7876 block.appendChild(node);
7877 return true;
7878 } else if ((m = this.match(reAutolink))) {
7879 dest = m.slice(1, m.length - 1);
7880 node = new Node("link");
7881 node._destination = normalizeURI$1(dest);
7882 node._title = "";
7883 node.appendChild(text(dest));
7884 block.appendChild(node);
7885 return true;
7886 } else {
7887 return false;
7888 }
7889 };
7890
7891 // Attempt to parse a raw HTML tag.
7892 var parseHtmlTag = function(block) {
7893 var m = this.match(reHtmlTag$1);
7894 if (m === null) {
7895 return false;
7896 } else {
7897 var node = new Node("html_inline");
7898 node._literal = m;
7899 block.appendChild(node);
7900 return true;
7901 }
7902 };
7903
7904 // Scan a sequence of characters with code cc, and return information about
7905 // the number of delimiters and whether they are positioned such that
7906 // they can open and/or close emphasis or strong emphasis. A utility
7907 // function for strong/emph parsing.
7908 var scanDelims = function(cc) {
7909 var numdelims = 0;
7910 var char_before, char_after, cc_after;
7911 var startpos = this.pos;
7912 var left_flanking, right_flanking, can_open, can_close;
7913 var after_is_whitespace,
7914 after_is_punctuation,
7915 before_is_whitespace,
7916 before_is_punctuation;
7917
7918 if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) {
7919 numdelims++;
7920 this.pos++;
7921 } else {
7922 while (this.peek() === cc) {
7923 numdelims++;
7924 this.pos++;
7925 }
7926 }
7927
7928 if (numdelims === 0) {
7929 return null;
7930 }
7931
7932 char_before = startpos === 0 ? "\n" : this.subject.charAt(startpos - 1);
7933
7934 cc_after = this.peek();
7935 if (cc_after === -1) {
7936 char_after = "\n";
7937 } else {
7938 char_after = fromCodePoint(cc_after);
7939 }
7940
7941 after_is_whitespace = reUnicodeWhitespaceChar.test(char_after);
7942 after_is_punctuation = rePunctuation.test(char_after);
7943 before_is_whitespace = reUnicodeWhitespaceChar.test(char_before);
7944 before_is_punctuation = rePunctuation.test(char_before);
7945
7946 left_flanking =
7947 !after_is_whitespace &&
7948 (!after_is_punctuation ||
7949 before_is_whitespace ||
7950 before_is_punctuation);
7951 right_flanking =
7952 !before_is_whitespace &&
7953 (!before_is_punctuation || after_is_whitespace || after_is_punctuation);
7954 if (cc === C_UNDERSCORE) {
7955 can_open = left_flanking && (!right_flanking || before_is_punctuation);
7956 can_close = right_flanking && (!left_flanking || after_is_punctuation);
7957 } else if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) {
7958 can_open = left_flanking && !right_flanking;
7959 can_close = right_flanking;
7960 } else {
7961 can_open = left_flanking;
7962 can_close = right_flanking;
7963 }
7964 this.pos = startpos;
7965 return { numdelims: numdelims, can_open: can_open, can_close: can_close };
7966 };
7967
7968 // Handle a delimiter marker for emphasis or a quote.
7969 var handleDelim = function(cc, block) {
7970 var res = this.scanDelims(cc);
7971 if (!res) {
7972 return false;
7973 }
7974 var numdelims = res.numdelims;
7975 var startpos = this.pos;
7976 var contents;
7977
7978 this.pos += numdelims;
7979 if (cc === C_SINGLEQUOTE) {
7980 contents = "\u2019";
7981 } else if (cc === C_DOUBLEQUOTE) {
7982 contents = "\u201C";
7983 } else {
7984 contents = this.subject.slice(startpos, this.pos);
7985 }
7986 var node = text(contents);
7987 block.appendChild(node);
7988
7989 // Add entry to stack for this opener
7990 if (
7991 (res.can_open || res.can_close) &&
7992 (this.options.smart || (cc !== C_SINGLEQUOTE && cc !== C_DOUBLEQUOTE))
7993 ) {
7994 this.delimiters = {
7995 cc: cc,
7996 numdelims: numdelims,
7997 origdelims: numdelims,
7998 node: node,
7999 previous: this.delimiters,
8000 next: null,
8001 can_open: res.can_open,
8002 can_close: res.can_close
8003 };
8004 if (this.delimiters.previous !== null) {
8005 this.delimiters.previous.next = this.delimiters;
8006 }
8007 }
8008
8009 return true;
8010 };
8011
8012 var removeDelimiter = function(delim) {
8013 if (delim.previous !== null) {
8014 delim.previous.next = delim.next;
8015 }
8016 if (delim.next === null) {
8017 // top of stack
8018 this.delimiters = delim.previous;
8019 } else {
8020 delim.next.previous = delim.previous;
8021 }
8022 };
8023
8024 var removeDelimitersBetween = function(bottom, top) {
8025 if (bottom.next !== top) {
8026 bottom.next = top;
8027 top.previous = bottom;
8028 }
8029 };
8030
8031 var processEmphasis = function(stack_bottom) {
8032 var opener, closer, old_closer;
8033 var opener_inl, closer_inl;
8034 var tempstack;
8035 var use_delims;
8036 var tmp, next;
8037 var opener_found;
8038 var openers_bottom = [];
8039 var openers_bottom_index;
8040 var odd_match = false;
8041
8042 for (var i = 0; i < 8; i++) {
8043 openers_bottom[i] = stack_bottom;
8044 }
8045 // find first closer above stack_bottom:
8046 closer = this.delimiters;
8047 while (closer !== null && closer.previous !== stack_bottom) {
8048 closer = closer.previous;
8049 }
8050 // move forward, looking for closers, and handling each
8051 while (closer !== null) {
8052 var closercc = closer.cc;
8053 if (!closer.can_close) {
8054 closer = closer.next;
8055 } else {
8056 // found emphasis closer. now look back for first matching opener:
8057 opener = closer.previous;
8058 opener_found = false;
8059 switch (closercc) {
8060 case C_SINGLEQUOTE:
8061 openers_bottom_index = 0;
8062 break;
8063 case C_DOUBLEQUOTE:
8064 openers_bottom_index = 1;
8065 break;
8066 case C_UNDERSCORE:
8067 openers_bottom_index = 2;
8068 break;
8069 case C_ASTERISK:
8070 openers_bottom_index = 3 + (closer.can_open ? 3 : 0)
8071 + (closer.origdelims % 3);
8072 break;
8073 }
8074 while (
8075 opener !== null &&
8076 opener !== stack_bottom &&
8077 opener !== openers_bottom[openers_bottom_index]
8078 ) {
8079 odd_match =
8080 (closer.can_open || opener.can_close) &&
8081 closer.origdelims % 3 !== 0 &&
8082 (opener.origdelims + closer.origdelims) % 3 === 0;
8083 if (opener.cc === closer.cc && opener.can_open && !odd_match) {
8084 opener_found = true;
8085 break;
8086 }
8087 opener = opener.previous;
8088 }
8089 old_closer = closer;
8090
8091 if (closercc === C_ASTERISK || closercc === C_UNDERSCORE) {
8092 if (!opener_found) {
8093 closer = closer.next;
8094 } else {
8095 // calculate actual number of delimiters used from closer
8096 use_delims =
8097 closer.numdelims >= 2 && opener.numdelims >= 2 ? 2 : 1;
8098
8099 opener_inl = opener.node;
8100 closer_inl = closer.node;
8101
8102 // remove used delimiters from stack elts and inlines
8103 opener.numdelims -= use_delims;
8104 closer.numdelims -= use_delims;
8105 opener_inl._literal = opener_inl._literal.slice(
8106 0,
8107 opener_inl._literal.length - use_delims
8108 );
8109 closer_inl._literal = closer_inl._literal.slice(
8110 0,
8111 closer_inl._literal.length - use_delims
8112 );
8113
8114 // build contents for new emph element
8115 var emph = new Node(use_delims === 1 ? "emph" : "strong");
8116
8117 tmp = opener_inl._next;
8118 while (tmp && tmp !== closer_inl) {
8119 next = tmp._next;
8120 tmp.unlink();
8121 emph.appendChild(tmp);
8122 tmp = next;
8123 }
8124
8125 opener_inl.insertAfter(emph);
8126
8127 // remove elts between opener and closer in delimiters stack
8128 removeDelimitersBetween(opener, closer);
8129
8130 // if opener has 0 delims, remove it and the inline
8131 if (opener.numdelims === 0) {
8132 opener_inl.unlink();
8133 this.removeDelimiter(opener);
8134 }
8135
8136 if (closer.numdelims === 0) {
8137 closer_inl.unlink();
8138 tempstack = closer.next;
8139 this.removeDelimiter(closer);
8140 closer = tempstack;
8141 }
8142 }
8143 } else if (closercc === C_SINGLEQUOTE) {
8144 closer.node._literal = "\u2019";
8145 if (opener_found) {
8146 opener.node._literal = "\u2018";
8147 }
8148 closer = closer.next;
8149 } else if (closercc === C_DOUBLEQUOTE) {
8150 closer.node._literal = "\u201D";
8151 if (opener_found) {
8152 opener.node.literal = "\u201C";
8153 }
8154 closer = closer.next;
8155 }
8156 if (!opener_found) {
8157 // Set lower bound for future searches for openers:
8158 openers_bottom[openers_bottom_index] =
8159 old_closer.previous;
8160 if (!old_closer.can_open) {
8161 // We can remove a closer that can't be an opener,
8162 // once we've seen there's no matching opener:
8163 this.removeDelimiter(old_closer);
8164 }
8165 }
8166 }
8167 }
8168
8169 // remove all delimiters
8170 while (this.delimiters !== null && this.delimiters !== stack_bottom) {
8171 this.removeDelimiter(this.delimiters);
8172 }
8173 };
8174
8175 // Attempt to parse link title (sans quotes), returning the string
8176 // or null if no match.
8177 var parseLinkTitle = function() {
8178 var title = this.match(reLinkTitle);
8179 if (title === null) {
8180 return null;
8181 } else {
8182 // chop off quotes from title and unescape:
8183 return unescapeString$1(title.substr(1, title.length - 2));
8184 }
8185 };
8186
8187 // Attempt to parse link destination, returning the string or
8188 // null if no match.
8189 var parseLinkDestination = function() {
8190 var res = this.match(reLinkDestinationBraces);
8191 if (res === null) {
8192 if (this.peek() === C_LESSTHAN) {
8193 return null;
8194 }
8195 // TODO handrolled parser; res should be null or the string
8196 var savepos = this.pos;
8197 var openparens = 0;
8198 var c;
8199 while ((c = this.peek()) !== -1) {
8200 if (
8201 c === C_BACKSLASH$1 &&
8202 reEscapable.test(this.subject.charAt(this.pos + 1))
8203 ) {
8204 this.pos += 1;
8205 if (this.peek() !== -1) {
8206 this.pos += 1;
8207 }
8208 } else if (c === C_OPEN_PAREN) {
8209 this.pos += 1;
8210 openparens += 1;
8211 } else if (c === C_CLOSE_PAREN) {
8212 if (openparens < 1) {
8213 break;
8214 } else {
8215 this.pos += 1;
8216 openparens -= 1;
8217 }
8218 } else if (reWhitespaceChar.exec(fromCodePoint(c)) !== null) {
8219 break;
8220 } else {
8221 this.pos += 1;
8222 }
8223 }
8224 if (this.pos === savepos && c !== C_CLOSE_PAREN) {
8225 return null;
8226 }
8227 if (openparens !== 0) {
8228 return null;
8229 }
8230 res = this.subject.substr(savepos, this.pos - savepos);
8231 return normalizeURI$1(unescapeString$1(res));
8232 } else {
8233 // chop off surrounding <..>:
8234 return normalizeURI$1(unescapeString$1(res.substr(1, res.length - 2)));
8235 }
8236 };
8237
8238 // Attempt to parse a link label, returning number of characters parsed.
8239 var parseLinkLabel = function() {
8240 var m = this.match(reLinkLabel);
8241 if (m === null || m.length > 1001) {
8242 return 0;
8243 } else {
8244 return m.length;
8245 }
8246 };
8247
8248 // Add open bracket to delimiter stack and add a text node to block's children.
8249 var parseOpenBracket = function(block) {
8250 var startpos = this.pos;
8251 this.pos += 1;
8252
8253 var node = text("[");
8254 block.appendChild(node);
8255
8256 // Add entry to stack for this opener
8257 this.addBracket(node, startpos, false);
8258 return true;
8259 };
8260
8261 // IF next character is [, and ! delimiter to delimiter stack and
8262 // add a text node to block's children. Otherwise just add a text node.
8263 var parseBang = function(block) {
8264 var startpos = this.pos;
8265 this.pos += 1;
8266 if (this.peek() === C_OPEN_BRACKET) {
8267 this.pos += 1;
8268
8269 var node = text("![");
8270 block.appendChild(node);
8271
8272 // Add entry to stack for this opener
8273 this.addBracket(node, startpos + 1, true);
8274 } else {
8275 block.appendChild(text("!"));
8276 }
8277 return true;
8278 };
8279
8280 // Try to match close bracket against an opening in the delimiter
8281 // stack. Add either a link or image, or a plain [ character,
8282 // to block's children. If there is a matching delimiter,
8283 // remove it from the delimiter stack.
8284 var parseCloseBracket = function(block) {
8285 var startpos;
8286 var is_image;
8287 var dest;
8288 var title;
8289 var matched = false;
8290 var reflabel;
8291 var opener;
8292
8293 this.pos += 1;
8294 startpos = this.pos;
8295
8296 // get last [ or ![
8297 opener = this.brackets;
8298
8299 if (opener === null) {
8300 // no matched opener, just return a literal
8301 block.appendChild(text("]"));
8302 return true;
8303 }
8304
8305 if (!opener.active) {
8306 // no matched opener, just return a literal
8307 block.appendChild(text("]"));
8308 // take opener off brackets stack
8309 this.removeBracket();
8310 return true;
8311 }
8312
8313 // If we got here, open is a potential opener
8314 is_image = opener.image;
8315
8316 // Check to see if we have a link/image
8317
8318 var savepos = this.pos;
8319
8320 // Inline link?
8321 if (this.peek() === C_OPEN_PAREN) {
8322 this.pos++;
8323 if (
8324 this.spnl() &&
8325 (dest = this.parseLinkDestination()) !== null &&
8326 this.spnl() &&
8327 // make sure there's a space before the title:
8328 ((reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) &&
8329 (title = this.parseLinkTitle())) ||
8330 true) &&
8331 this.spnl() &&
8332 this.peek() === C_CLOSE_PAREN
8333 ) {
8334 this.pos += 1;
8335 matched = true;
8336 } else {
8337 this.pos = savepos;
8338 }
8339 }
8340
8341 if (!matched) {
8342 // Next, see if there's a link label
8343 var beforelabel = this.pos;
8344 var n = this.parseLinkLabel();
8345 if (n > 2) {
8346 reflabel = this.subject.slice(beforelabel, beforelabel + n);
8347 } else if (!opener.bracketAfter) {
8348 // Empty or missing second label means to use the first label as the reference.
8349 // The reference must not contain a bracket. If we know there's a bracket, we don't even bother checking it.
8350 reflabel = this.subject.slice(opener.index, startpos);
8351 }
8352 if (n === 0) {
8353 // If shortcut reference link, rewind before spaces we skipped.
8354 this.pos = savepos;
8355 }
8356
8357 if (reflabel) {
8358 // lookup rawlabel in refmap
8359 var link = this.refmap[normalizeReference(reflabel)];
8360 if (link) {
8361 dest = link.destination;
8362 title = link.title;
8363 matched = true;
8364 }
8365 }
8366 }
8367
8368 if (matched) {
8369 var node = new Node(is_image ? "image" : "link");
8370 node._destination = dest;
8371 node._title = title || "";
8372
8373 var tmp, next;
8374 tmp = opener.node._next;
8375 while (tmp) {
8376 next = tmp._next;
8377 tmp.unlink();
8378 node.appendChild(tmp);
8379 tmp = next;
8380 }
8381 block.appendChild(node);
8382 this.processEmphasis(opener.previousDelimiter);
8383 this.removeBracket();
8384 opener.node.unlink();
8385
8386 // We remove this bracket and processEmphasis will remove later delimiters.
8387 // Now, for a link, we also deactivate earlier link openers.
8388 // (no links in links)
8389 if (!is_image) {
8390 opener = this.brackets;
8391 while (opener !== null) {
8392 if (!opener.image) {
8393 opener.active = false; // deactivate this opener
8394 }
8395 opener = opener.previous;
8396 }
8397 }
8398
8399 return true;
8400 } else {
8401 // no match
8402
8403 this.removeBracket(); // remove this opener from stack
8404 this.pos = startpos;
8405 block.appendChild(text("]"));
8406 return true;
8407 }
8408 };
8409
8410 var addBracket = function(node, index, image) {
8411 if (this.brackets !== null) {
8412 this.brackets.bracketAfter = true;
8413 }
8414 this.brackets = {
8415 node: node,
8416 previous: this.brackets,
8417 previousDelimiter: this.delimiters,
8418 index: index,
8419 image: image,
8420 active: true
8421 };
8422 };
8423
8424 var removeBracket = function() {
8425 this.brackets = this.brackets.previous;
8426 };
8427
8428 // Attempt to parse an entity.
8429 var parseEntity = function(block) {
8430 var m;
8431 if ((m = this.match(reEntityHere))) {
8432 block.appendChild(text(lib_9(m)));
8433 return true;
8434 } else {
8435 return false;
8436 }
8437 };
8438
8439 // Parse a run of ordinary characters, or a single character with
8440 // a special meaning in markdown, as a plain string.
8441 var parseString = function(block) {
8442 var m;
8443 if ((m = this.match(reMain))) {
8444 if (this.options.smart) {
8445 block.appendChild(
8446 text(
8447 m
8448 .replace(reEllipses, "\u2026")
8449 .replace(reDash, function(chars) {
8450 var enCount = 0;
8451 var emCount = 0;
8452 if (chars.length % 3 === 0) {
8453 // If divisible by 3, use all em dashes
8454 emCount = chars.length / 3;
8455 } else if (chars.length % 2 === 0) {
8456 // If divisible by 2, use all en dashes
8457 enCount = chars.length / 2;
8458 } else if (chars.length % 3 === 2) {
8459 // If 2 extra dashes, use en dash for last 2; em dashes for rest
8460 enCount = 1;
8461 emCount = (chars.length - 2) / 3;
8462 } else {
8463 // Use en dashes for last 4 hyphens; em dashes for rest
8464 enCount = 2;
8465 emCount = (chars.length - 4) / 3;
8466 }
8467 return (
8468 "\u2014".repeat(emCount) +
8469 "\u2013".repeat(enCount)
8470 );
8471 })
8472 )
8473 );
8474 } else {
8475 block.appendChild(text(m));
8476 }
8477 return true;
8478 } else {
8479 return false;
8480 }
8481 };
8482
8483 // Parse a newline. If it was preceded by two spaces, return a hard
8484 // line break; otherwise a soft line break.
8485 var parseNewline = function(block) {
8486 this.pos += 1; // assume we're at a \n
8487 // check previous node for trailing spaces
8488 var lastc = block._lastChild;
8489 if (
8490 lastc &&
8491 lastc.type === "text" &&
8492 lastc._literal[lastc._literal.length - 1] === " "
8493 ) {
8494 var hardbreak = lastc._literal[lastc._literal.length - 2] === " ";
8495 lastc._literal = lastc._literal.replace(reFinalSpace, "");
8496 block.appendChild(new Node(hardbreak ? "linebreak" : "softbreak"));
8497 } else {
8498 block.appendChild(new Node("softbreak"));
8499 }
8500 this.match(reInitialSpace); // gobble leading spaces in next line
8501 return true;
8502 };
8503
8504 // Attempt to parse a link reference, modifying refmap.
8505 var parseReference = function(s, refmap) {
8506 this.subject = s;
8507 this.pos = 0;
8508 var rawlabel;
8509 var dest;
8510 var title;
8511 var matchChars;
8512 var startpos = this.pos;
8513
8514 // label:
8515 matchChars = this.parseLinkLabel();
8516 if (matchChars === 0) {
8517 return 0;
8518 } else {
8519 rawlabel = this.subject.substr(0, matchChars);
8520 }
8521
8522 // colon:
8523 if (this.peek() === C_COLON) {
8524 this.pos++;
8525 } else {
8526 this.pos = startpos;
8527 return 0;
8528 }
8529
8530 // link url
8531 this.spnl();
8532
8533 dest = this.parseLinkDestination();
8534 if (dest === null) {
8535 this.pos = startpos;
8536 return 0;
8537 }
8538
8539 var beforetitle = this.pos;
8540 this.spnl();
8541 if (this.pos !== beforetitle) {
8542 title = this.parseLinkTitle();
8543 }
8544 if (title === null) {
8545 title = "";
8546 // rewind before spaces
8547 this.pos = beforetitle;
8548 }
8549
8550 // make sure we're at line end:
8551 var atLineEnd = true;
8552 if (this.match(reSpaceAtEndOfLine) === null) {
8553 if (title === "") {
8554 atLineEnd = false;
8555 } else {
8556 // the potential title we found is not at the line end,
8557 // but it could still be a legal link reference if we
8558 // discard the title
8559 title = "";
8560 // rewind before spaces
8561 this.pos = beforetitle;
8562 // and instead check if the link URL is at the line end
8563 atLineEnd = this.match(reSpaceAtEndOfLine) !== null;
8564 }
8565 }
8566
8567 if (!atLineEnd) {
8568 this.pos = startpos;
8569 return 0;
8570 }
8571
8572 var normlabel = normalizeReference(rawlabel);
8573 if (normlabel === "") {
8574 // label must contain non-whitespace characters
8575 this.pos = startpos;
8576 return 0;
8577 }
8578
8579 if (!refmap[normlabel]) {
8580 refmap[normlabel] = { destination: dest, title: title };
8581 }
8582 return this.pos - startpos;
8583 };
8584
8585 // Parse the next inline element in subject, advancing subject position.
8586 // On success, add the result to block's children and return true.
8587 // On failure, return false.
8588 var parseInline = function(block) {
8589 var res = false;
8590 var c = this.peek();
8591 if (c === -1) {
8592 return false;
8593 }
8594 switch (c) {
8595 case C_NEWLINE:
8596 res = this.parseNewline(block);
8597 break;
8598 case C_BACKSLASH$1:
8599 res = this.parseBackslash(block);
8600 break;
8601 case C_BACKTICK:
8602 res = this.parseBackticks(block);
8603 break;
8604 case C_ASTERISK:
8605 case C_UNDERSCORE:
8606 res = this.handleDelim(c, block);
8607 break;
8608 case C_SINGLEQUOTE:
8609 case C_DOUBLEQUOTE:
8610 res = this.options.smart && this.handleDelim(c, block);
8611 break;
8612 case C_OPEN_BRACKET:
8613 res = this.parseOpenBracket(block);
8614 break;
8615 case C_BANG:
8616 res = this.parseBang(block);
8617 break;
8618 case C_CLOSE_BRACKET:
8619 res = this.parseCloseBracket(block);
8620 break;
8621 case C_LESSTHAN:
8622 res = this.parseAutolink(block) || this.parseHtmlTag(block);
8623 break;
8624 case C_AMPERSAND:
8625 res = this.parseEntity(block);
8626 break;
8627 default:
8628 res = this.parseString(block);
8629 break;
8630 }
8631 if (!res) {
8632 this.pos += 1;
8633 block.appendChild(text(fromCodePoint(c)));
8634 }
8635
8636 return true;
8637 };
8638
8639 // Parse string content in block into inline children,
8640 // using refmap to resolve references.
8641 var parseInlines = function(block) {
8642 this.subject = block._string_content.trim();
8643 this.pos = 0;
8644 this.delimiters = null;
8645 this.brackets = null;
8646 while (this.parseInline(block)) {}
8647 block._string_content = null; // allow raw string to be garbage collected
8648 this.processEmphasis(null);
8649 };
8650
8651 // The InlineParser object.
8652 function InlineParser(options) {
8653 return {
8654 subject: "",
8655 delimiters: null, // used by handleDelim method
8656 brackets: null,
8657 pos: 0,
8658 refmap: {},
8659 match: match,
8660 peek: peek,
8661 spnl: spnl,
8662 parseBackticks: parseBackticks,
8663 parseBackslash: parseBackslash,
8664 parseAutolink: parseAutolink,
8665 parseHtmlTag: parseHtmlTag,
8666 scanDelims: scanDelims,
8667 handleDelim: handleDelim,
8668 parseLinkTitle: parseLinkTitle,
8669 parseLinkDestination: parseLinkDestination,
8670 parseLinkLabel: parseLinkLabel,
8671 parseOpenBracket: parseOpenBracket,
8672 parseBang: parseBang,
8673 parseCloseBracket: parseCloseBracket,
8674 addBracket: addBracket,
8675 removeBracket: removeBracket,
8676 parseEntity: parseEntity,
8677 parseString: parseString,
8678 parseNewline: parseNewline,
8679 parseReference: parseReference,
8680 parseInline: parseInline,
8681 processEmphasis: processEmphasis,
8682 removeDelimiter: removeDelimiter,
8683 options: options || {},
8684 parse: parseInlines
8685 };
8686 }
8687
8688 var CODE_INDENT = 4;
8689
8690 var C_TAB = 9;
8691 var C_NEWLINE$1 = 10;
8692 var C_GREATERTHAN = 62;
8693 var C_LESSTHAN$1 = 60;
8694 var C_SPACE = 32;
8695 var C_OPEN_BRACKET$1 = 91;
8696
8697 var reHtmlBlockOpen = [
8698 /./, // dummy for 0
8699 /^<(?:script|pre|textarea|style)(?:\s|>|$)/i,
8700 /^<!--/,
8701 /^<[?]/,
8702 /^<![A-Z]/,
8703 /^<!\[CDATA\[/,
8704 /^<[/]?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[123456]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|[/]?[>]|$)/i,
8705 new RegExp("^(?:" + OPENTAG + "|" + CLOSETAG + ")\\s*$", "i")
8706 ];
8707
8708 var reHtmlBlockClose = [
8709 /./, // dummy for 0
8710 /<\/(?:script|pre|textarea|style)>/i,
8711 /-->/,
8712 /\?>/,
8713 />/,
8714 /\]\]>/
8715 ];
8716
8717 var reThematicBreak = /^(?:\*[ \t]*){3,}$|^(?:_[ \t]*){3,}$|^(?:-[ \t]*){3,}$/;
8718
8719 var reMaybeSpecial = /^[#`~*+_=<>0-9-]/;
8720
8721 var reNonSpace = /[^ \t\f\v\r\n]/;
8722
8723 var reBulletListMarker = /^[*+-]/;
8724
8725 var reOrderedListMarker = /^(\d{1,9})([.)])/;
8726
8727 var reATXHeadingMarker = /^#{1,6}(?:[ \t]+|$)/;
8728
8729 var reCodeFence = /^`{3,}(?!.*`)|^~{3,}/;
8730
8731 var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/;
8732
8733 var reSetextHeadingLine = /^(?:=+|-+)[ \t]*$/;
8734
8735 var reLineEnding = /\r\n|\n|\r/;
8736
8737 // Returns true if string contains only space characters.
8738 var isBlank = function(s) {
8739 return !reNonSpace.test(s);
8740 };
8741
8742 var isSpaceOrTab = function(c) {
8743 return c === C_SPACE || c === C_TAB;
8744 };
8745
8746 var peek$1 = function(ln, pos) {
8747 if (pos < ln.length) {
8748 return ln.charCodeAt(pos);
8749 } else {
8750 return -1;
8751 }
8752 };
8753
8754 // DOC PARSER
8755
8756 // These are methods of a Parser object, defined below.
8757
8758 // Returns true if block ends with a blank line, descending if needed
8759 // into lists and sublists.
8760 var endsWithBlankLine = function(block) {
8761 while (block) {
8762 if (block._lastLineBlank) {
8763 return true;
8764 }
8765 var t = block.type;
8766 if (!block._lastLineChecked && (t === "list" || t === "item")) {
8767 block._lastLineChecked = true;
8768 block = block._lastChild;
8769 } else {
8770 block._lastLineChecked = true;
8771 break;
8772 }
8773 }
8774 return false;
8775 };
8776
8777 // Add a line to the block at the tip. We assume the tip
8778 // can accept lines -- that check should be done before calling this.
8779 var addLine = function() {
8780 if (this.partiallyConsumedTab) {
8781 this.offset += 1; // skip over tab
8782 // add space characters:
8783 var charsToTab = 4 - (this.column % 4);
8784 this.tip._string_content += " ".repeat(charsToTab);
8785 }
8786 this.tip._string_content += this.currentLine.slice(this.offset) + "\n";
8787 };
8788
8789 // Add block of type tag as a child of the tip. If the tip can't
8790 // accept children, close and finalize it and try its parent,
8791 // and so on til we find a block that can accept children.
8792 var addChild = function(tag, offset) {
8793 while (!this.blocks[this.tip.type].canContain(tag)) {
8794 this.finalize(this.tip, this.lineNumber - 1);
8795 }
8796
8797 var column_number = offset + 1; // offset 0 = column 1
8798 var newBlock = new Node(tag, [
8799 [this.lineNumber, column_number],
8800 [0, 0]
8801 ]);
8802 newBlock._string_content = "";
8803 this.tip.appendChild(newBlock);
8804 this.tip = newBlock;
8805 return newBlock;
8806 };
8807
8808 // Parse a list marker and return data on the marker (type,
8809 // start, delimiter, bullet character, padding) or null.
8810 var parseListMarker = function(parser, container) {
8811 var rest = parser.currentLine.slice(parser.nextNonspace);
8812 var match;
8813 var nextc;
8814 var spacesStartCol;
8815 var spacesStartOffset;
8816 var data = {
8817 type: null,
8818 tight: true, // lists are tight by default
8819 bulletChar: null,
8820 start: null,
8821 delimiter: null,
8822 padding: null,
8823 markerOffset: parser.indent
8824 };
8825 if (parser.indent >= 4) {
8826 return null;
8827 }
8828 if ((match = rest.match(reBulletListMarker))) {
8829 data.type = "bullet";
8830 data.bulletChar = match[0][0];
8831 } else if (
8832 (match = rest.match(reOrderedListMarker)) &&
8833 (container.type !== "paragraph" || match[1] == 1)
8834 ) {
8835 data.type = "ordered";
8836 data.start = parseInt(match[1]);
8837 data.delimiter = match[2];
8838 } else {
8839 return null;
8840 }
8841 // make sure we have spaces after
8842 nextc = peek$1(parser.currentLine, parser.nextNonspace + match[0].length);
8843 if (!(nextc === -1 || nextc === C_TAB || nextc === C_SPACE)) {
8844 return null;
8845 }
8846
8847 // if it interrupts paragraph, make sure first line isn't blank
8848 if (
8849 container.type === "paragraph" &&
8850 !parser.currentLine
8851 .slice(parser.nextNonspace + match[0].length)
8852 .match(reNonSpace)
8853 ) {
8854 return null;
8855 }
8856
8857 // we've got a match! advance offset and calculate padding
8858 parser.advanceNextNonspace(); // to start of marker
8859 parser.advanceOffset(match[0].length, true); // to end of marker
8860 spacesStartCol = parser.column;
8861 spacesStartOffset = parser.offset;
8862 do {
8863 parser.advanceOffset(1, true);
8864 nextc = peek$1(parser.currentLine, parser.offset);
8865 } while (parser.column - spacesStartCol < 5 && isSpaceOrTab(nextc));
8866 var blank_item = peek$1(parser.currentLine, parser.offset) === -1;
8867 var spaces_after_marker = parser.column - spacesStartCol;
8868 if (spaces_after_marker >= 5 || spaces_after_marker < 1 || blank_item) {
8869 data.padding = match[0].length + 1;
8870 parser.column = spacesStartCol;
8871 parser.offset = spacesStartOffset;
8872 if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) {
8873 parser.advanceOffset(1, true);
8874 }
8875 } else {
8876 data.padding = match[0].length + spaces_after_marker;
8877 }
8878 return data;
8879 };
8880
8881 // Returns true if the two list items are of the same type,
8882 // with the same delimiter and bullet character. This is used
8883 // in agglomerating list items into lists.
8884 var listsMatch = function(list_data, item_data) {
8885 return (
8886 list_data.type === item_data.type &&
8887 list_data.delimiter === item_data.delimiter &&
8888 list_data.bulletChar === item_data.bulletChar
8889 );
8890 };
8891
8892 // Finalize and close any unmatched blocks.
8893 var closeUnmatchedBlocks = function() {
8894 if (!this.allClosed) {
8895 // finalize any blocks not matched
8896 while (this.oldtip !== this.lastMatchedContainer) {
8897 var parent = this.oldtip._parent;
8898 this.finalize(this.oldtip, this.lineNumber - 1);
8899 this.oldtip = parent;
8900 }
8901 this.allClosed = true;
8902 }
8903 };
8904
8905 // 'finalize' is run when the block is closed.
8906 // 'continue' is run to check whether the block is continuing
8907 // at a certain line and offset (e.g. whether a block quote
8908 // contains a `>`. It returns 0 for matched, 1 for not matched,
8909 // and 2 for "we've dealt with this line completely, go to next."
8910 var blocks = {
8911 document: {
8912 continue: function() {
8913 return 0;
8914 },
8915 finalize: function() {
8916 return;
8917 },
8918 canContain: function(t) {
8919 return t !== "item";
8920 },
8921 acceptsLines: false
8922 },
8923 list: {
8924 continue: function() {
8925 return 0;
8926 },
8927 finalize: function(parser, block) {
8928 var item = block._firstChild;
8929 while (item) {
8930 // check for non-final list item ending with blank line:
8931 if (endsWithBlankLine(item) && item._next) {
8932 block._listData.tight = false;
8933 break;
8934 }
8935 // recurse into children of list item, to see if there are
8936 // spaces between any of them:
8937 var subitem = item._firstChild;
8938 while (subitem) {
8939 if (
8940 endsWithBlankLine(subitem) &&
8941 (item._next || subitem._next)
8942 ) {
8943 block._listData.tight = false;
8944 break;
8945 }
8946 subitem = subitem._next;
8947 }
8948 item = item._next;
8949 }
8950 },
8951 canContain: function(t) {
8952 return t === "item";
8953 },
8954 acceptsLines: false
8955 },
8956 block_quote: {
8957 continue: function(parser) {
8958 var ln = parser.currentLine;
8959 if (
8960 !parser.indented &&
8961 peek$1(ln, parser.nextNonspace) === C_GREATERTHAN
8962 ) {
8963 parser.advanceNextNonspace();
8964 parser.advanceOffset(1, false);
8965 if (isSpaceOrTab(peek$1(ln, parser.offset))) {
8966 parser.advanceOffset(1, true);
8967 }
8968 } else {
8969 return 1;
8970 }
8971 return 0;
8972 },
8973 finalize: function() {
8974 return;
8975 },
8976 canContain: function(t) {
8977 return t !== "item";
8978 },
8979 acceptsLines: false
8980 },
8981 item: {
8982 continue: function(parser, container) {
8983 if (parser.blank) {
8984 if (container._firstChild == null) {
8985 // Blank line after empty list item
8986 return 1;
8987 } else {
8988 parser.advanceNextNonspace();
8989 }
8990 } else if (
8991 parser.indent >=
8992 container._listData.markerOffset + container._listData.padding
8993 ) {
8994 parser.advanceOffset(
8995 container._listData.markerOffset +
8996 container._listData.padding,
8997 true
8998 );
8999 } else {
9000 return 1;
9001 }
9002 return 0;
9003 },
9004 finalize: function() {
9005 return;
9006 },
9007 canContain: function(t) {
9008 return t !== "item";
9009 },
9010 acceptsLines: false
9011 },
9012 heading: {
9013 continue: function() {
9014 // a heading can never container > 1 line, so fail to match:
9015 return 1;
9016 },
9017 finalize: function() {
9018 return;
9019 },
9020 canContain: function() {
9021 return false;
9022 },
9023 acceptsLines: false
9024 },
9025 thematic_break: {
9026 continue: function() {
9027 // a thematic break can never container > 1 line, so fail to match:
9028 return 1;
9029 },
9030 finalize: function() {
9031 return;
9032 },
9033 canContain: function() {
9034 return false;
9035 },
9036 acceptsLines: false
9037 },
9038 code_block: {
9039 continue: function(parser, container) {
9040 var ln = parser.currentLine;
9041 var indent = parser.indent;
9042 if (container._isFenced) {
9043 // fenced
9044 var match =
9045 indent <= 3 &&
9046 ln.charAt(parser.nextNonspace) === container._fenceChar &&
9047 ln.slice(parser.nextNonspace).match(reClosingCodeFence);
9048 if (match && match[0].length >= container._fenceLength) {
9049 // closing fence - we're at end of line, so we can return
9050 parser.lastLineLength =
9051 parser.offset + indent + match[0].length;
9052 parser.finalize(container, parser.lineNumber);
9053 return 2;
9054 } else {
9055 // skip optional spaces of fence offset
9056 var i = container._fenceOffset;
9057 while (i > 0 && isSpaceOrTab(peek$1(ln, parser.offset))) {
9058 parser.advanceOffset(1, true);
9059 i--;
9060 }
9061 }
9062 } else {
9063 // indented
9064 if (indent >= CODE_INDENT) {
9065 parser.advanceOffset(CODE_INDENT, true);
9066 } else if (parser.blank) {
9067 parser.advanceNextNonspace();
9068 } else {
9069 return 1;
9070 }
9071 }
9072 return 0;
9073 },
9074 finalize: function(parser, block) {
9075 if (block._isFenced) {
9076 // fenced
9077 // first line becomes info string
9078 var content = block._string_content;
9079 var newlinePos = content.indexOf("\n");
9080 var firstLine = content.slice(0, newlinePos);
9081 var rest = content.slice(newlinePos + 1);
9082 block.info = unescapeString(firstLine.trim());
9083 block._literal = rest;
9084 } else {
9085 // indented
9086 block._literal = block._string_content.replace(
9087 /(\n *)+$/,
9088 "\n"
9089 );
9090 }
9091 block._string_content = null; // allow GC
9092 },
9093 canContain: function() {
9094 return false;
9095 },
9096 acceptsLines: true
9097 },
9098 html_block: {
9099 continue: function(parser, container) {
9100 return parser.blank &&
9101 (container._htmlBlockType === 6 ||
9102 container._htmlBlockType === 7)
9103 ? 1
9104 : 0;
9105 },
9106 finalize: function(parser, block) {
9107 block._literal = block._string_content.replace(/(\n *)+$/, "");
9108 block._string_content = null; // allow GC
9109 },
9110 canContain: function() {
9111 return false;
9112 },
9113 acceptsLines: true
9114 },
9115 paragraph: {
9116 continue: function(parser) {
9117 return parser.blank ? 1 : 0;
9118 },
9119 finalize: function(parser, block) {
9120 var pos;
9121 var hasReferenceDefs = false;
9122
9123 // try parsing the beginning as link reference definitions:
9124 while (
9125 peek$1(block._string_content, 0) === C_OPEN_BRACKET$1 &&
9126 (pos = parser.inlineParser.parseReference(
9127 block._string_content,
9128 parser.refmap
9129 ))
9130 ) {
9131 block._string_content = block._string_content.slice(pos);
9132 hasReferenceDefs = true;
9133 }
9134 if (hasReferenceDefs && isBlank(block._string_content)) {
9135 block.unlink();
9136 }
9137 },
9138 canContain: function() {
9139 return false;
9140 },
9141 acceptsLines: true
9142 }
9143 };
9144
9145 // block start functions. Return values:
9146 // 0 = no match
9147 // 1 = matched container, keep going
9148 // 2 = matched leaf, no more block starts
9149 var blockStarts = [
9150 // block quote
9151 function(parser) {
9152 if (
9153 !parser.indented &&
9154 peek$1(parser.currentLine, parser.nextNonspace) === C_GREATERTHAN
9155 ) {
9156 parser.advanceNextNonspace();
9157 parser.advanceOffset(1, false);
9158 // optional following space
9159 if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) {
9160 parser.advanceOffset(1, true);
9161 }
9162 parser.closeUnmatchedBlocks();
9163 parser.addChild("block_quote", parser.nextNonspace);
9164 return 1;
9165 } else {
9166 return 0;
9167 }
9168 },
9169
9170 // ATX heading
9171 function(parser) {
9172 var match;
9173 if (
9174 !parser.indented &&
9175 (match = parser.currentLine
9176 .slice(parser.nextNonspace)
9177 .match(reATXHeadingMarker))
9178 ) {
9179 parser.advanceNextNonspace();
9180 parser.advanceOffset(match[0].length, false);
9181 parser.closeUnmatchedBlocks();
9182 var container = parser.addChild("heading", parser.nextNonspace);
9183 container.level = match[0].trim().length; // number of #s
9184 // remove trailing ###s:
9185 container._string_content = parser.currentLine
9186 .slice(parser.offset)
9187 .replace(/^[ \t]*#+[ \t]*$/, "")
9188 .replace(/[ \t]+#+[ \t]*$/, "");
9189 parser.advanceOffset(parser.currentLine.length - parser.offset);
9190 return 2;
9191 } else {
9192 return 0;
9193 }
9194 },
9195
9196 // Fenced code block
9197 function(parser) {
9198 var match;
9199 if (
9200 !parser.indented &&
9201 (match = parser.currentLine
9202 .slice(parser.nextNonspace)
9203 .match(reCodeFence))
9204 ) {
9205 var fenceLength = match[0].length;
9206 parser.closeUnmatchedBlocks();
9207 var container = parser.addChild("code_block", parser.nextNonspace);
9208 container._isFenced = true;
9209 container._fenceLength = fenceLength;
9210 container._fenceChar = match[0][0];
9211 container._fenceOffset = parser.indent;
9212 parser.advanceNextNonspace();
9213 parser.advanceOffset(fenceLength, false);
9214 return 2;
9215 } else {
9216 return 0;
9217 }
9218 },
9219
9220 // HTML block
9221 function(parser, container) {
9222 if (
9223 !parser.indented &&
9224 peek$1(parser.currentLine, parser.nextNonspace) === C_LESSTHAN$1
9225 ) {
9226 var s = parser.currentLine.slice(parser.nextNonspace);
9227 var blockType;
9228
9229 for (blockType = 1; blockType <= 7; blockType++) {
9230 if (
9231 reHtmlBlockOpen[blockType].test(s) &&
9232 (blockType < 7 || (container.type !== "paragraph" &&
9233 !(!parser.allClosed && !parser.blank &&
9234 parser.tip.type === "paragraph") // maybe lazy
9235 ))
9236 ) {
9237 parser.closeUnmatchedBlocks();
9238 // We don't adjust parser.offset;
9239 // spaces are part of the HTML block:
9240 var b = parser.addChild("html_block", parser.offset);
9241 b._htmlBlockType = blockType;
9242 return 2;
9243 }
9244 }
9245 }
9246
9247 return 0;
9248 },
9249
9250 // Setext heading
9251 function(parser, container) {
9252 var match;
9253 if (
9254 !parser.indented &&
9255 container.type === "paragraph" &&
9256 (match = parser.currentLine
9257 .slice(parser.nextNonspace)
9258 .match(reSetextHeadingLine))
9259 ) {
9260 parser.closeUnmatchedBlocks();
9261 // resolve reference link definitiosn
9262 var pos;
9263 while (
9264 peek$1(container._string_content, 0) === C_OPEN_BRACKET$1 &&
9265 (pos = parser.inlineParser.parseReference(
9266 container._string_content,
9267 parser.refmap
9268 ))
9269 ) {
9270 container._string_content = container._string_content.slice(
9271 pos
9272 );
9273 }
9274 if (container._string_content.length > 0) {
9275 var heading = new Node("heading", container.sourcepos);
9276 heading.level = match[0][0] === "=" ? 1 : 2;
9277 heading._string_content = container._string_content;
9278 container.insertAfter(heading);
9279 container.unlink();
9280 parser.tip = heading;
9281 parser.advanceOffset(
9282 parser.currentLine.length - parser.offset,
9283 false
9284 );
9285 return 2;
9286 } else {
9287 return 0;
9288 }
9289 } else {
9290 return 0;
9291 }
9292 },
9293
9294 // thematic break
9295 function(parser) {
9296 if (
9297 !parser.indented &&
9298 reThematicBreak.test(parser.currentLine.slice(parser.nextNonspace))
9299 ) {
9300 parser.closeUnmatchedBlocks();
9301 parser.addChild("thematic_break", parser.nextNonspace);
9302 parser.advanceOffset(
9303 parser.currentLine.length - parser.offset,
9304 false
9305 );
9306 return 2;
9307 } else {
9308 return 0;
9309 }
9310 },
9311
9312 // list item
9313 function(parser, container) {
9314 var data;
9315
9316 if (
9317 (!parser.indented || container.type === "list") &&
9318 (data = parseListMarker(parser, container))
9319 ) {
9320 parser.closeUnmatchedBlocks();
9321
9322 // add the list if needed
9323 if (
9324 parser.tip.type !== "list" ||
9325 !listsMatch(container._listData, data)
9326 ) {
9327 container = parser.addChild("list", parser.nextNonspace);
9328 container._listData = data;
9329 }
9330
9331 // add the list item
9332 container = parser.addChild("item", parser.nextNonspace);
9333 container._listData = data;
9334 return 1;
9335 } else {
9336 return 0;
9337 }
9338 },
9339
9340 // indented code block
9341 function(parser) {
9342 if (
9343 parser.indented &&
9344 parser.tip.type !== "paragraph" &&
9345 !parser.blank
9346 ) {
9347 // indented code
9348 parser.advanceOffset(CODE_INDENT, true);
9349 parser.closeUnmatchedBlocks();
9350 parser.addChild("code_block", parser.offset);
9351 return 2;
9352 } else {
9353 return 0;
9354 }
9355 }
9356 ];
9357
9358 var advanceOffset = function(count, columns) {
9359 var currentLine = this.currentLine;
9360 var charsToTab, charsToAdvance;
9361 var c;
9362 while (count > 0 && (c = currentLine[this.offset])) {
9363 if (c === "\t") {
9364 charsToTab = 4 - (this.column % 4);
9365 if (columns) {
9366 this.partiallyConsumedTab = charsToTab > count;
9367 charsToAdvance = charsToTab > count ? count : charsToTab;
9368 this.column += charsToAdvance;
9369 this.offset += this.partiallyConsumedTab ? 0 : 1;
9370 count -= charsToAdvance;
9371 } else {
9372 this.partiallyConsumedTab = false;
9373 this.column += charsToTab;
9374 this.offset += 1;
9375 count -= 1;
9376 }
9377 } else {
9378 this.partiallyConsumedTab = false;
9379 this.offset += 1;
9380 this.column += 1; // assume ascii; block starts are ascii
9381 count -= 1;
9382 }
9383 }
9384 };
9385
9386 var advanceNextNonspace = function() {
9387 this.offset = this.nextNonspace;
9388 this.column = this.nextNonspaceColumn;
9389 this.partiallyConsumedTab = false;
9390 };
9391
9392 var findNextNonspace = function() {
9393 var currentLine = this.currentLine;
9394 var i = this.offset;
9395 var cols = this.column;
9396 var c;
9397
9398 while ((c = currentLine.charAt(i)) !== "") {
9399 if (c === " ") {
9400 i++;
9401 cols++;
9402 } else if (c === "\t") {
9403 i++;
9404 cols += 4 - (cols % 4);
9405 } else {
9406 break;
9407 }
9408 }
9409 this.blank = c === "\n" || c === "\r" || c === "";
9410 this.nextNonspace = i;
9411 this.nextNonspaceColumn = cols;
9412 this.indent = this.nextNonspaceColumn - this.column;
9413 this.indented = this.indent >= CODE_INDENT;
9414 };
9415
9416 // Analyze a line of text and update the document appropriately.
9417 // We parse markdown text by calling this on each line of input,
9418 // then finalizing the document.
9419 var incorporateLine = function(ln) {
9420 var all_matched = true;
9421 var t;
9422
9423 var container = this.doc;
9424 this.oldtip = this.tip;
9425 this.offset = 0;
9426 this.column = 0;
9427 this.blank = false;
9428 this.partiallyConsumedTab = false;
9429 this.lineNumber += 1;
9430
9431 // replace NUL characters for security
9432 if (ln.indexOf("\u0000") !== -1) {
9433 ln = ln.replace(/\0/g, "\uFFFD");
9434 }
9435
9436 this.currentLine = ln;
9437
9438 // For each containing block, try to parse the associated line start.
9439 // Bail out on failure: container will point to the last matching block.
9440 // Set all_matched to false if not all containers match.
9441 var lastChild;
9442 while ((lastChild = container._lastChild) && lastChild._open) {
9443 container = lastChild;
9444
9445 this.findNextNonspace();
9446
9447 switch (this.blocks[container.type].continue(this, container)) {
9448 case 0: // we've matched, keep going
9449 break;
9450 case 1: // we've failed to match a block
9451 all_matched = false;
9452 break;
9453 case 2: // we've hit end of line for fenced code close and can return
9454 return;
9455 default:
9456 throw "continue returned illegal value, must be 0, 1, or 2";
9457 }
9458 if (!all_matched) {
9459 container = container._parent; // back up to last matching block
9460 break;
9461 }
9462 }
9463
9464 this.allClosed = container === this.oldtip;
9465 this.lastMatchedContainer = container;
9466
9467 var matchedLeaf =
9468 container.type !== "paragraph" && blocks[container.type].acceptsLines;
9469 var starts = this.blockStarts;
9470 var startsLen = starts.length;
9471 // Unless last matched container is a code block, try new container starts,
9472 // adding children to the last matched container:
9473 while (!matchedLeaf) {
9474 this.findNextNonspace();
9475
9476 // this is a little performance optimization:
9477 if (
9478 !this.indented &&
9479 !reMaybeSpecial.test(ln.slice(this.nextNonspace))
9480 ) {
9481 this.advanceNextNonspace();
9482 break;
9483 }
9484
9485 var i = 0;
9486 while (i < startsLen) {
9487 var res = starts[i](this, container);
9488 if (res === 1) {
9489 container = this.tip;
9490 break;
9491 } else if (res === 2) {
9492 container = this.tip;
9493 matchedLeaf = true;
9494 break;
9495 } else {
9496 i++;
9497 }
9498 }
9499
9500 if (i === startsLen) {
9501 // nothing matched
9502 this.advanceNextNonspace();
9503 break;
9504 }
9505 }
9506
9507 // What remains at the offset is a text line. Add the text to the
9508 // appropriate container.
9509
9510 // First check for a lazy paragraph continuation:
9511 if (!this.allClosed && !this.blank && this.tip.type === "paragraph") {
9512 // lazy paragraph continuation
9513 this.addLine();
9514 } else {
9515 // not a lazy continuation
9516
9517 // finalize any blocks not matched
9518 this.closeUnmatchedBlocks();
9519 if (this.blank && container.lastChild) {
9520 container.lastChild._lastLineBlank = true;
9521 }
9522
9523 t = container.type;
9524
9525 // Block quote lines are never blank as they start with >
9526 // and we don't count blanks in fenced code for purposes of tight/loose
9527 // lists or breaking out of lists. We also don't set _lastLineBlank
9528 // on an empty list item, or if we just closed a fenced block.
9529 var lastLineBlank =
9530 this.blank &&
9531 !(
9532 t === "block_quote" ||
9533 (t === "code_block" && container._isFenced) ||
9534 (t === "item" &&
9535 !container._firstChild &&
9536 container.sourcepos[0][0] === this.lineNumber)
9537 );
9538
9539 // propagate lastLineBlank up through parents:
9540 var cont = container;
9541 while (cont) {
9542 cont._lastLineBlank = lastLineBlank;
9543 cont = cont._parent;
9544 }
9545
9546 if (this.blocks[t].acceptsLines) {
9547 this.addLine();
9548 // if HtmlBlock, check for end condition
9549 if (
9550 t === "html_block" &&
9551 container._htmlBlockType >= 1 &&
9552 container._htmlBlockType <= 5 &&
9553 reHtmlBlockClose[container._htmlBlockType].test(
9554 this.currentLine.slice(this.offset)
9555 )
9556 ) {
9557 this.lastLineLength = ln.length;
9558 this.finalize(container, this.lineNumber);
9559 }
9560 } else if (this.offset < ln.length && !this.blank) {
9561 // create paragraph container for line
9562 container = this.addChild("paragraph", this.offset);
9563 this.advanceNextNonspace();
9564 this.addLine();
9565 }
9566 }
9567 this.lastLineLength = ln.length;
9568 };
9569
9570 // Finalize a block. Close it and do any necessary postprocessing,
9571 // e.g. creating string_content from strings, setting the 'tight'
9572 // or 'loose' status of a list, and parsing the beginnings
9573 // of paragraphs for reference definitions. Reset the tip to the
9574 // parent of the closed block.
9575 var finalize = function(block, lineNumber) {
9576 var above = block._parent;
9577 block._open = false;
9578 block.sourcepos[1] = [lineNumber, this.lastLineLength];
9579
9580 this.blocks[block.type].finalize(this, block);
9581
9582 this.tip = above;
9583 };
9584
9585 // Walk through a block & children recursively, parsing string content
9586 // into inline content where appropriate.
9587 var processInlines = function(block) {
9588 var node, event, t;
9589 var walker = block.walker();
9590 this.inlineParser.refmap = this.refmap;
9591 this.inlineParser.options = this.options;
9592 while ((event = walker.next())) {
9593 node = event.node;
9594 t = node.type;
9595 if (!event.entering && (t === "paragraph" || t === "heading")) {
9596 this.inlineParser.parse(node);
9597 }
9598 }
9599 };
9600
9601 var Document = function() {
9602 var doc = new Node("document", [
9603 [1, 1],
9604 [0, 0]
9605 ]);
9606 return doc;
9607 };
9608
9609 // The main parsing function. Returns a parsed document AST.
9610 var parse = function(input) {
9611 this.doc = new Document();
9612 this.tip = this.doc;
9613 this.refmap = {};
9614 this.lineNumber = 0;
9615 this.lastLineLength = 0;
9616 this.offset = 0;
9617 this.column = 0;
9618 this.lastMatchedContainer = this.doc;
9619 this.currentLine = "";
9620 if (this.options.time) {
9621 console.time("preparing input");
9622 }
9623 var lines = input.split(reLineEnding);
9624 var len = lines.length;
9625 if (input.charCodeAt(input.length - 1) === C_NEWLINE$1) {
9626 // ignore last blank line created by final newline
9627 len -= 1;
9628 }
9629 if (this.options.time) {
9630 console.timeEnd("preparing input");
9631 }
9632 if (this.options.time) {
9633 console.time("block parsing");
9634 }
9635 for (var i = 0; i < len; i++) {
9636 this.incorporateLine(lines[i]);
9637 }
9638 while (this.tip) {
9639 this.finalize(this.tip, len);
9640 }
9641 if (this.options.time) {
9642 console.timeEnd("block parsing");
9643 }
9644 if (this.options.time) {
9645 console.time("inline parsing");
9646 }
9647 this.processInlines(this.doc);
9648 if (this.options.time) {
9649 console.timeEnd("inline parsing");
9650 }
9651 return this.doc;
9652 };
9653
9654 // The Parser object.
9655 function Parser(options) {
9656 return {
9657 doc: new Document(),
9658 blocks: blocks,
9659 blockStarts: blockStarts,
9660 tip: this.doc,
9661 oldtip: this.doc,
9662 currentLine: "",
9663 lineNumber: 0,
9664 offset: 0,
9665 column: 0,
9666 nextNonspace: 0,
9667 nextNonspaceColumn: 0,
9668 indent: 0,
9669 indented: false,
9670 blank: false,
9671 partiallyConsumedTab: false,
9672 allClosed: true,
9673 lastMatchedContainer: this.doc,
9674 refmap: {},
9675 lastLineLength: 0,
9676 inlineParser: new InlineParser(options),
9677 findNextNonspace: findNextNonspace,
9678 advanceOffset: advanceOffset,
9679 advanceNextNonspace: advanceNextNonspace,
9680 addLine: addLine,
9681 addChild: addChild,
9682 incorporateLine: incorporateLine,
9683 finalize: finalize,
9684 processInlines: processInlines,
9685 closeUnmatchedBlocks: closeUnmatchedBlocks,
9686 parse: parse,
9687 options: options || {}
9688 };
9689 }
9690
9691 function Renderer() {}
9692
9693 /**
9694 * Walks the AST and calls member methods for each Node type.
9695 *
9696 * @param ast {Node} The root of the abstract syntax tree.
9697 */
9698 function render(ast) {
9699 var walker = ast.walker(),
9700 event,
9701 type;
9702
9703 this.buffer = "";
9704 this.lastOut = "\n";
9705
9706 while ((event = walker.next())) {
9707 type = event.node.type;
9708 if (this[type]) {
9709 this[type](event.node, event.entering);
9710 }
9711 }
9712 return this.buffer;
9713 }
9714
9715 /**
9716 * Concatenate a literal string to the buffer.
9717 *
9718 * @param str {String} The string to concatenate.
9719 */
9720 function lit(str) {
9721 this.buffer += str;
9722 this.lastOut = str;
9723 }
9724
9725 /**
9726 * Output a newline to the buffer.
9727 */
9728 function cr() {
9729 if (this.lastOut !== "\n") {
9730 this.lit("\n");
9731 }
9732 }
9733
9734 /**
9735 * Concatenate a string to the buffer possibly escaping the content.
9736 *
9737 * Concrete renderer implementations should override this method.
9738 *
9739 * @param str {String} The string to concatenate.
9740 */
9741 function out(str) {
9742 this.lit(str);
9743 }
9744
9745 /**
9746 * Escape a string for the target renderer.
9747 *
9748 * Abstract function that should be implemented by concrete
9749 * renderer implementations.
9750 *
9751 * @param str {String} The string to escape.
9752 */
9753 function esc(str) {
9754 return str;
9755 }
9756
9757 Renderer.prototype.render = render;
9758 Renderer.prototype.out = out;
9759 Renderer.prototype.lit = lit;
9760 Renderer.prototype.cr = cr;
9761 Renderer.prototype.esc = esc;
9762
9763 var reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i;
9764 var reSafeDataProtocol = /^data:image\/(?:png|gif|jpeg|webp)/i;
9765
9766 var potentiallyUnsafe = function(url) {
9767 return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url);
9768 };
9769
9770 // Helper function to produce an HTML tag.
9771 function tag(name, attrs, selfclosing) {
9772 if (this.disableTags > 0) {
9773 return;
9774 }
9775 this.buffer += "<" + name;
9776 if (attrs && attrs.length > 0) {
9777 var i = 0;
9778 var attrib;
9779 while ((attrib = attrs[i]) !== undefined) {
9780 this.buffer += " " + attrib[0] + '="' + attrib[1] + '"';
9781 i++;
9782 }
9783 }
9784 if (selfclosing) {
9785 this.buffer += " /";
9786 }
9787 this.buffer += ">";
9788 this.lastOut = ">";
9789 }
9790
9791 function HtmlRenderer(options) {
9792 options = options || {};
9793 // by default, soft breaks are rendered as newlines in HTML
9794 options.softbreak = options.softbreak || "\n";
9795 // set to "<br />" to make them hard breaks
9796 // set to " " if you want to ignore line wrapping in source
9797 this.esc = options.esc || escapeXml;
9798 // escape html with a custom function
9799 // else use escapeXml
9800
9801 this.disableTags = 0;
9802 this.lastOut = "\n";
9803 this.options = options;
9804 }
9805
9806 /* Node methods */
9807
9808 function text$1(node) {
9809 this.out(node.literal);
9810 }
9811
9812 function softbreak() {
9813 this.lit(this.options.softbreak);
9814 }
9815
9816 function linebreak() {
9817 this.tag("br", [], true);
9818 this.cr();
9819 }
9820
9821 function link(node, entering) {
9822 var attrs = this.attrs(node);
9823 if (entering) {
9824 if (!(this.options.safe && potentiallyUnsafe(node.destination))) {
9825 attrs.push(["href", this.esc(node.destination)]);
9826 }
9827 if (node.title) {
9828 attrs.push(["title", this.esc(node.title)]);
9829 }
9830 this.tag("a", attrs);
9831 } else {
9832 this.tag("/a");
9833 }
9834 }
9835
9836 function image$1(node, entering) {
9837 if (entering) {
9838 if (this.disableTags === 0) {
9839 if (this.options.safe && potentiallyUnsafe(node.destination)) {
9840 this.lit('<img src="" alt="');
9841 } else {
9842 this.lit('<img src="' + this.esc(node.destination) + '" alt="');
9843 }
9844 }
9845 this.disableTags += 1;
9846 } else {
9847 this.disableTags -= 1;
9848 if (this.disableTags === 0) {
9849 if (node.title) {
9850 this.lit('" title="' + this.esc(node.title));
9851 }
9852 this.lit('" />');
9853 }
9854 }
9855 }
9856
9857 function emph(node, entering) {
9858 this.tag(entering ? "em" : "/em");
9859 }
9860
9861 function strong(node, entering) {
9862 this.tag(entering ? "strong" : "/strong");
9863 }
9864
9865 function paragraph(node, entering) {
9866 var grandparent = node.parent.parent,
9867 attrs = this.attrs(node);
9868 if (grandparent !== null && grandparent.type === "list") {
9869 if (grandparent.listTight) {
9870 return;
9871 }
9872 }
9873 if (entering) {
9874 this.cr();
9875 this.tag("p", attrs);
9876 } else {
9877 this.tag("/p");
9878 this.cr();
9879 }
9880 }
9881
9882 function heading(node, entering) {
9883 var tagname = "h" + node.level,
9884 attrs = this.attrs(node);
9885 if (entering) {
9886 this.cr();
9887 this.tag(tagname, attrs);
9888 } else {
9889 this.tag("/" + tagname);
9890 this.cr();
9891 }
9892 }
9893
9894 function code(node) {
9895 this.tag("code");
9896 this.out(node.literal);
9897 this.tag("/code");
9898 }
9899
9900 function code_block(node) {
9901 var info_words = node.info ? node.info.split(/\s+/) : [],
9902 attrs = this.attrs(node);
9903 if (info_words.length > 0 && info_words[0].length > 0) {
9904 attrs.push(["class", "language-" + this.esc(info_words[0])]);
9905 }
9906 this.cr();
9907 this.tag("pre");
9908 this.tag("code", attrs);
9909 this.out(node.literal);
9910 this.tag("/code");
9911 this.tag("/pre");
9912 this.cr();
9913 }
9914
9915 function thematic_break(node) {
9916 var attrs = this.attrs(node);
9917 this.cr();
9918 this.tag("hr", attrs, true);
9919 this.cr();
9920 }
9921
9922 function block_quote(node, entering) {
9923 var attrs = this.attrs(node);
9924 if (entering) {
9925 this.cr();
9926 this.tag("blockquote", attrs);
9927 this.cr();
9928 } else {
9929 this.cr();
9930 this.tag("/blockquote");
9931 this.cr();
9932 }
9933 }
9934
9935 function list(node, entering) {
9936 var tagname = node.listType === "bullet" ? "ul" : "ol",
9937 attrs = this.attrs(node);
9938
9939 if (entering) {
9940 var start = node.listStart;
9941 if (start !== null && start !== 1) {
9942 attrs.push(["start", start.toString()]);
9943 }
9944 this.cr();
9945 this.tag(tagname, attrs);
9946 this.cr();
9947 } else {
9948 this.cr();
9949 this.tag("/" + tagname);
9950 this.cr();
9951 }
9952 }
9953
9954 function item(node, entering) {
9955 var attrs = this.attrs(node);
9956 if (entering) {
9957 this.tag("li", attrs);
9958 } else {
9959 this.tag("/li");
9960 this.cr();
9961 }
9962 }
9963
9964 function html_inline(node) {
9965 if (this.options.safe) {
9966 this.lit("<!-- raw HTML omitted -->");
9967 } else {
9968 this.lit(node.literal);
9969 }
9970 }
9971
9972 function html_block(node) {
9973 this.cr();
9974 if (this.options.safe) {
9975 this.lit("<!-- raw HTML omitted -->");
9976 } else {
9977 this.lit(node.literal);
9978 }
9979 this.cr();
9980 }
9981
9982 function custom_inline(node, entering) {
9983 if (entering && node.onEnter) {
9984 this.lit(node.onEnter);
9985 } else if (!entering && node.onExit) {
9986 this.lit(node.onExit);
9987 }
9988 }
9989
9990 function custom_block(node, entering) {
9991 this.cr();
9992 if (entering && node.onEnter) {
9993 this.lit(node.onEnter);
9994 } else if (!entering && node.onExit) {
9995 this.lit(node.onExit);
9996 }
9997 this.cr();
9998 }
9999
10000 /* Helper methods */
10001
10002 function out$1(s) {
10003 this.lit(this.esc(s));
10004 }
10005
10006 function attrs(node) {
10007 var att = [];
10008 if (this.options.sourcepos) {
10009 var pos = node.sourcepos;
10010 if (pos) {
10011 att.push([
10012 "data-sourcepos",
10013 String(pos[0][0]) +
10014 ":" +
10015 String(pos[0][1]) +
10016 "-" +
10017 String(pos[1][0]) +
10018 ":" +
10019 String(pos[1][1])
10020 ]);
10021 }
10022 }
10023 return att;
10024 }
10025
10026 // quick browser-compatible inheritance
10027 HtmlRenderer.prototype = Object.create(Renderer.prototype);
10028
10029 HtmlRenderer.prototype.text = text$1;
10030 HtmlRenderer.prototype.html_inline = html_inline;
10031 HtmlRenderer.prototype.html_block = html_block;
10032 HtmlRenderer.prototype.softbreak = softbreak;
10033 HtmlRenderer.prototype.linebreak = linebreak;
10034 HtmlRenderer.prototype.link = link;
10035 HtmlRenderer.prototype.image = image$1;
10036 HtmlRenderer.prototype.emph = emph;
10037 HtmlRenderer.prototype.strong = strong;
10038 HtmlRenderer.prototype.paragraph = paragraph;
10039 HtmlRenderer.prototype.heading = heading;
10040 HtmlRenderer.prototype.code = code;
10041 HtmlRenderer.prototype.code_block = code_block;
10042 HtmlRenderer.prototype.thematic_break = thematic_break;
10043 HtmlRenderer.prototype.block_quote = block_quote;
10044 HtmlRenderer.prototype.list = list;
10045 HtmlRenderer.prototype.item = item;
10046 HtmlRenderer.prototype.custom_inline = custom_inline;
10047 HtmlRenderer.prototype.custom_block = custom_block;
10048
10049 HtmlRenderer.prototype.esc = escapeXml;
10050
10051 HtmlRenderer.prototype.out = out$1;
10052 HtmlRenderer.prototype.tag = tag;
10053 HtmlRenderer.prototype.attrs = attrs;
10054
10055 var reXMLTag = /\<[^>]*\>/;
10056
10057 function toTagName(s) {
10058 return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
10059 }
10060
10061 function XmlRenderer(options) {
10062 options = options || {};
10063
10064 this.disableTags = 0;
10065 this.lastOut = "\n";
10066
10067 this.indentLevel = 0;
10068 this.indent = " ";
10069
10070 this.esc = options.esc || escapeXml;
10071 // escape html with a custom function
10072 // else use escapeXml
10073
10074 this.options = options;
10075 }
10076
10077 function render$1(ast) {
10078 this.buffer = "";
10079
10080 var attrs;
10081 var tagname;
10082 var walker = ast.walker();
10083 var event, node, entering;
10084 var container;
10085 var selfClosing;
10086 var nodetype;
10087
10088 var options = this.options;
10089
10090 if (options.time) {
10091 console.time("rendering");
10092 }
10093
10094 this.buffer += '<?xml version="1.0" encoding="UTF-8"?>\n';
10095 this.buffer += '<!DOCTYPE document SYSTEM "CommonMark.dtd">\n';
10096
10097 while ((event = walker.next())) {
10098 entering = event.entering;
10099 node = event.node;
10100 nodetype = node.type;
10101
10102 container = node.isContainer;
10103
10104 selfClosing =
10105 nodetype === "thematic_break" ||
10106 nodetype === "linebreak" ||
10107 nodetype === "softbreak";
10108
10109 tagname = toTagName(nodetype);
10110
10111 if (entering) {
10112 attrs = [];
10113
10114 switch (nodetype) {
10115 case "document":
10116 attrs.push(["xmlns", "http://commonmark.org/xml/1.0"]);
10117 break;
10118 case "list":
10119 if (node.listType !== null) {
10120 attrs.push(["type", node.listType.toLowerCase()]);
10121 }
10122 if (node.listStart !== null) {
10123 attrs.push(["start", String(node.listStart)]);
10124 }
10125 if (node.listTight !== null) {
10126 attrs.push([
10127 "tight",
10128 node.listTight ? "true" : "false"
10129 ]);
10130 }
10131 var delim = node.listDelimiter;
10132 if (delim !== null) {
10133 var delimword = "";
10134 if (delim === ".") {
10135 delimword = "period";
10136 } else {
10137 delimword = "paren";
10138 }
10139 attrs.push(["delimiter", delimword]);
10140 }
10141 break;
10142 case "code_block":
10143 if (node.info) {
10144 attrs.push(["info", node.info]);
10145 }
10146 break;
10147 case "heading":
10148 attrs.push(["level", String(node.level)]);
10149 break;
10150 case "link":
10151 case "image":
10152 attrs.push(["destination", node.destination]);
10153 attrs.push(["title", node.title]);
10154 break;
10155 case "custom_inline":
10156 case "custom_block":
10157 attrs.push(["on_enter", node.onEnter]);
10158 attrs.push(["on_exit", node.onExit]);
10159 break;
10160 }
10161 if (options.sourcepos) {
10162 var pos = node.sourcepos;
10163 if (pos) {
10164 attrs.push([
10165 "sourcepos",
10166 String(pos[0][0]) +
10167 ":" +
10168 String(pos[0][1]) +
10169 "-" +
10170 String(pos[1][0]) +
10171 ":" +
10172 String(pos[1][1])
10173 ]);
10174 }
10175 }
10176
10177 this.cr();
10178 this.out(this.tag(tagname, attrs, selfClosing));
10179 if (container) {
10180 this.indentLevel += 1;
10181 } else if (!container && !selfClosing) {
10182 var lit = node.literal;
10183 if (lit) {
10184 this.out(this.esc(lit));
10185 }
10186 this.out(this.tag("/" + tagname));
10187 }
10188 } else {
10189 this.indentLevel -= 1;
10190 this.cr();
10191 this.out(this.tag("/" + tagname));
10192 }
10193 }
10194 if (options.time) {
10195 console.timeEnd("rendering");
10196 }
10197 this.buffer += "\n";
10198 return this.buffer;
10199 }
10200
10201 function out$2(s) {
10202 if (this.disableTags > 0) {
10203 this.buffer += s.replace(reXMLTag, "");
10204 } else {
10205 this.buffer += s;
10206 }
10207 this.lastOut = s;
10208 }
10209
10210 function cr$1() {
10211 if (this.lastOut !== "\n") {
10212 this.buffer += "\n";
10213 this.lastOut = "\n";
10214 for (var i = this.indentLevel; i > 0; i--) {
10215 this.buffer += this.indent;
10216 }
10217 }
10218 }
10219
10220 // Helper function to produce an XML tag.
10221 function tag$1(name, attrs, selfclosing) {
10222 var result = "<" + name;
10223 if (attrs && attrs.length > 0) {
10224 var i = 0;
10225 var attrib;
10226 while ((attrib = attrs[i]) !== undefined) {
10227 result += " " + attrib[0] + '="' + this.esc(attrib[1]) + '"';
10228 i++;
10229 }
10230 }
10231 if (selfclosing) {
10232 result += " /";
10233 }
10234 result += ">";
10235 return result;
10236 }
10237
10238 // quick browser-compatible inheritance
10239 XmlRenderer.prototype = Object.create(Renderer.prototype);
10240
10241 XmlRenderer.prototype.render = render$1;
10242 XmlRenderer.prototype.out = out$2;
10243 XmlRenderer.prototype.cr = cr$1;
10244 XmlRenderer.prototype.tag = tag$1;
10245 XmlRenderer.prototype.esc = escapeXml;
10246
10247 exports.HtmlRenderer = HtmlRenderer;
10248 exports.Node = Node;
10249 exports.Parser = Parser;
10250 exports.Renderer = Renderer;
10251 exports.XmlRenderer = XmlRenderer;
10252
10253 Object.defineProperty(exports, '__esModule', { value: true });
10254
10255})));
lib/docs/index.html+62-26
......@@ -24,6 +24,7 @@
2424 --search-bg-color: #f3f3f3;
2525 --search-bg-color-focus: #ffffff;
2626 --search-sh-color: rgba(0, 0, 0, 0.18);
27 --search-other-results-color: rgb(100, 100, 100);
2728 --help-sh-color: rgba(0, 0, 0, 0.75);
2829 --help-bg-color: #aaa;
2930 }
......@@ -83,6 +84,7 @@
8384
8485 .flex-right {
8586 display: flex;
87 flex-direction: column;
8688 overflow: auto;
8789 -webkit-overflow-scrolling: touch;
8890 flex-grow: 1;
......@@ -200,7 +202,7 @@
200202 }
201203
202204 #guides {
203 padding: 1rem 0.7rem 2.4rem 1.4rem;
205 padding: 0rem 0.7rem 2.4rem 1.4rem;
204206 box-sizing: border-box;
205207 font-size: 1rem;
206208 background-color: var(--bg-color);
......@@ -209,7 +211,7 @@
209211
210212 /* docs section */
211213 .docs {
212 padding: 1rem 0.7rem 2.4rem 1.4rem;
214 padding: 0rem 0.7rem 2.4rem 1.4rem;
213215 font-size: 1rem;
214216 background-color: var(--bg-color);
215217 overflow-wrap: break-word;
......@@ -247,7 +249,38 @@
247249 top: 5px;
248250 left: 5px;
249251 }
250
252
253 .other-results {
254 line-height: 1em;
255 position: relative;
256 outline: 0;
257 border: 0;
258 color: var(--search-other-results-color);
259 text-align: center;
260 height: 1.5em;
261 opacity: .5;
262 }
263 .other-results:before {
264 content: '';
265 background: var(--search-other-results-color);
266 position: absolute;
267 left: 0;
268 top: 50%;
269 width: 100%;
270 height: 1px;
271 }
272
273 .other-results:after {
274 content: "other results";
275 position: relative;
276 display: inline-block;
277 padding: 0 .5em;
278 line-height: 1.5em;
279 color: var(--search-other-results-color);
280 background-color: var(--bg-color);
281 }
282
283
251284 .docs a {
252285 color: var(--link-color);
253286 }
......@@ -505,6 +538,7 @@
505538 --search-bg-color: #3c3c3c;
506539 --search-bg-color-focus: #000;
507540 --search-sh-color: rgba(255, 255, 255, 0.28);
541 --search-other-results-color: rgba(255, 255, 255, 0.28);
508542 --help-sh-color: rgba(142, 142, 142, 0.5);
509543 --help-bg-color: #333;
510544 }
......@@ -717,22 +751,38 @@
717751 <h2><span>Zig Version</span></h2>
718752 <p class="str" id="tdZigVer"></p>
719753 </div>
720 <div>
721 <input id="privDeclsBox" type="checkbox"/>
722 <label for="privDeclsBox">Internal Doc Mode</label>
723 </div>
724754 </div>
725755 </nav>
726756 </div>
727757 <div class="flex-right">
758 <div class="wrap">
759 <section class="docs" style="padding-top: 1.5rem; padding-bottom:0;">
760 <div style="position: relative">
761 <span id="searchPlaceholder"><kbd>s</kbd> to search, <kbd>?</kbd> for more options</span>
762 <input type="search" class="search" id="search" autocomplete="off" spellcheck="false" disabled>
763 </div>
764 </section>
765 </div>
766 <div id="sectSearchResults" class="docs hidden">
767 <h2>Search Results</h2>
768 <ul id="listSearchResults"></ul>
769 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
770 </div>
771 <div id="sectSearchNoResults" class="docs hidden">
772 <h2>No Results Found</h2>
773 <p>Here are some things you can try:</p>
774 <ul>
775 <li>Check out the <a id="langRefLink">Language Reference</a> for the language itself.</li>
776 <li>Check out the <a href="https://ziglang.org/learn/">Learn page</a> for other helpful resources for learning Zig.</li>
777 <li>Use your search engine.</li>
778 </ul>
779 <p>Press <kbd>?</kbd> to see keyboard shortcuts and <kbd>Esc</kbd> to return.</p>
780 </div>
728781 <div id="guides" class="wrap hidden">
782 <div id="activeGuide" class="hidden"></div>
729783 </div>
730784 <div id="docs" class="wrap hidden">
731785 <section class="docs">
732 <div style="position: relative">
733 <span id="searchPlaceholder"><kbd>s</kbd> to search, <kbd>?</kbd> for more options</span>
734 <input type="search" class="search" id="search" autocomplete="off" spellcheck="false" disabled>
735 </div>
736786 <p id="status">Loading...</p>
737787 <div id="sectNav" class="hidden"><ul id="listNav"></ul></div>
738788 <div id="fnProto" class="hidden">
......@@ -762,21 +812,6 @@
762812 </div>
763813 <div id="tableFnErrors"><dl id="listFnErrors"></dl></div>
764814 </div>
765 <div id="sectSearchResults" class="hidden">
766 <h2>Search Results</h2>
767 <ul id="listSearchResults"></ul>
768 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
769 </div>
770 <div id="sectSearchNoResults" class="hidden">
771 <h2>No Results Found</h2>
772 <p>Here are some things you can try:</p>
773 <ul>
774 <li>Check out the <a id="langRefLink">Language Reference</a> for the language itself.</li>
775 <li>Check out the <a href="https://ziglang.org/learn/">Learn page</a> for other helpful resources for learning Zig.</li>
776 <li>Use your search engine.</li>
777 </ul>
778 <p>Press <kbd>?</kbd> to see keyboard shortcuts and <kbd>Esc</kbd> to return.</p>
779 </div>
780815 <div id="sectFields" class="hidden">
781816 <h2>Fields</h2>
782817 <div id="listFields"></div>
......@@ -852,6 +887,7 @@
852887 </div>
853888 </div>
854889 <script src="data.js"></script>
890 <script src="commonmark.js"></script>
855891 <script src="main.js"></script>
856892 </body>
857893</html>
lib/docs/main.js+602-83
......@@ -4,7 +4,6 @@ var zigAnalysis;
44
55const NAV_MODES = {
66 API: "#A;",
7 API_INTERNAL: "#a;",
87 GUIDES: "#G;",
98};
109
......@@ -56,12 +55,13 @@ const NAV_MODES = {
5655 const domSectSearchResults = document.getElementById("sectSearchResults");
5756 const domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
5857 const domDocs = document.getElementById("docs");
59 const domGuides = document.getElementById("guides");
58 const domGuidesSection = document.getElementById("guides");
59 const domActiveGuide = document.getElementById("activeGuide");
60
6061 const domListSearchResults = document.getElementById("listSearchResults");
6162 const domSectSearchNoResults = document.getElementById("sectSearchNoResults");
6263 const domSectInfo = document.getElementById("sectInfo");
6364 // const domTdTarget = (document.getElementById("tdTarget"));
64 const domPrivDeclsBox = document.getElementById("privDeclsBox");
6565 const domTdZigVer = document.getElementById("tdZigVer");
6666 const domHdrName = document.getElementById("hdrName");
6767 const domHelpModal = document.getElementById("helpModal");
......@@ -83,15 +83,16 @@ const NAV_MODES = {
8383 let typeTypeId = findTypeTypeId();
8484 let pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 };
8585
86 let declSearchIndex = new RadixTree();
87 window.search = declSearchIndex;
88
8689 // for each module, is an array with modules to get to this one
8790 let canonModPaths = computeCanonicalModulePaths();
8891
8992 // for each decl, is an array with {declNames, modNames} to get to this one
90
9193 let canonDeclPaths = null; // lazy; use getCanonDeclPath
9294
9395 // for each type, is an array with {declNames, modNames} to get to this one
94
9596 let canonTypeDecls = null; // lazy; use getCanonTypeDecl
9697
9798 let curNav = {
......@@ -122,6 +123,12 @@ const NAV_MODES = {
122123 // map of decl index to list of comptime fn calls
123124 // let nodesToCallsMap = indexNodesToCalls();
124125
126 let guidesSearchIndex = {};
127 window.guideSearch = guidesSearchIndex;
128 parseGuides();
129
130
131
125132 domSearch.disabled = false;
126133 domSearch.addEventListener("keydown", onSearchKeyDown, false);
127134 domSearch.addEventListener("focus", ev => {
......@@ -139,31 +146,6 @@ const NAV_MODES = {
139146 onHashChange();
140147 }
141148
142 domPrivDeclsBox.addEventListener(
143 "change",
144 function () {
145 if (this.checked != curNav.showPrivDecls) {
146 if (
147 this.checked &&
148 location.hash.length > 1 &&
149 location.hash[1] != "*"
150 ) {
151 location.hash = "#*" + location.hash.substring(1);
152 return;
153 }
154 if (
155 !this.checked &&
156 location.hash.length > 1 &&
157 location.hash[1] == "*"
158 ) {
159 location.hash = "#" + location.hash.substring(2);
160 return;
161 }
162 }
163 },
164 false
165 );
166
167149 if (location.hash == "") {
168150 location.hash = "#A;";
169151 }
......@@ -189,7 +171,6 @@ const NAV_MODES = {
189171 let suffix = " - Zig";
190172 switch (curNav.mode) {
191173 case NAV_MODES.API:
192 case NAV_MODES.API_INTERNAL:
193174 let list = curNav.modNames.concat(curNav.declNames);
194175 if (list.length === 0) {
195176 document.title = zigAnalysis.modules[zigAnalysis.rootMod].name + suffix;
......@@ -284,8 +265,11 @@ const NAV_MODES = {
284265
285266 function resolveValue(value) {
286267 let i = 0;
287 while (i < 1000) {
268 while (true) {
288269 i += 1;
270 if (i >= 10000) {
271 throw "resolveValue quota exceeded"
272 }
289273
290274 if ("refPath" in value.expr) {
291275 value = { expr: value.expr.refPath[value.expr.refPath.length - 1] };
......@@ -307,8 +291,31 @@ const NAV_MODES = {
307291
308292 return value;
309293 }
310 console.assert(false);
311 return {};
294 }
295
296 function resolveGenericRet(genericFunc) {
297 if (genericFunc.generic_ret == null) return null;
298 let result = resolveValue({expr: genericFunc.generic_ret});
299
300 let i = 0;
301 while (true) {
302 i += 1;
303 if (i >= 10000) {
304 throw "resolveGenericRet quota exceeded"
305 }
306
307 if ("call" in result.expr) {
308 let call = zigAnalysis.calls[result.expr.call];
309 let resolvedFunc = resolveValue({ expr: call.func });
310 if (!("type" in resolvedFunc.expr)) return null;
311 let callee = getType(resolvedFunc.expr.type);
312 if (!callee.generic_ret) return null;
313 result = resolveValue({ expr: callee.generic_ret });
314 continue;
315 }
316
317 return result;
318 }
312319 }
313320
314321 // function typeOfDecl(decl){
......@@ -401,8 +408,12 @@ const NAV_MODES = {
401408 domGuideSwitch.classList.add("active");
402409 domApiSwitch.classList.remove("active");
403410 domDocs.classList.add("hidden");
404 domGuides.classList.remove("hidden");
411 domGuidesSection.classList.remove("hidden");
412 domActiveGuide.classList.add("hidden");
405413 domApiMenu.classList.add("hidden");
414 domSectSearchResults.classList.add("hidden");
415 domSectSearchAllResultsLink.classList.add("hidden");
416 domSectSearchNoResults.classList.add("hidden");
406417
407418 // sidebar guides list
408419 const section_list = zigAnalysis.guide_sections;
......@@ -417,7 +428,7 @@ const NAV_MODES = {
417428 const guide = section.guides[i];
418429 let liDom = domGuides.children[i];
419430 let aDom = liDom.children[0];
420 aDom.textContent = guide.name;
431 aDom.textContent = guide.title;
421432 aDom.setAttribute("href", NAV_MODES.GUIDES + guide.name);
422433 if (guide.name === curNav.activeGuide) {
423434 aDom.classList.add("active");
......@@ -431,6 +442,11 @@ const NAV_MODES = {
431442 domGuidesMenu.classList.remove("hidden");
432443 }
433444
445
446 if (curNavSearch !== "") {
447 return renderSearchGuides();
448 }
449
434450 // main content
435451 let activeGuide = undefined;
436452 outer: for (let i = 0; i < zigAnalysis.guide_sections.length; i += 1) {
......@@ -447,7 +463,7 @@ const NAV_MODES = {
447463 if (activeGuide == undefined) {
448464 const root_file_idx = zigAnalysis.modules[zigAnalysis.rootMod].file;
449465 const root_file_name = getFile(root_file_idx).name;
450 domGuides.innerHTML = markdown(`
466 domActiveGuide.innerHTML = markdown(`
451467 # Zig Guides
452468 These autodocs don't contain any guide.
453469
......@@ -461,13 +477,21 @@ const NAV_MODES = {
461477 You can add guides by specifying which markdown files to include
462478 in the top level doc comment of your root file, like so:
463479
464 (At the top of \`${root_file_name}\`)
480 (At the top of *${root_file_name}*)
465481 \`\`\`
466482 //!zig-autodoc-guide: intro.md
467483 //!zig-autodoc-guide: quickstart.md
468 //!zig-autodoc-section: Advanced topics
469 //!zig-autodoc-guide: ../advanced-docs/advanced-stuff.md
484 //!zig-autodoc-guide: advanced-docs/advanced-stuff.md
485 \`\`\`
486
487 You can also create sections to group guides together:
488
470489 \`\`\`
490 //!zig-autodoc-section: CLI Usage
491 //!zig-autodoc-guide: cli-basics.md
492 //!zig-autodoc-guide: cli-advanced.md
493 \`\`\`
494
471495
472496 **Note that this feature is still under heavy development so expect bugs**
473497 **and missing features!**
......@@ -475,15 +499,16 @@ const NAV_MODES = {
475499 Happy writing!
476500 `);
477501 } else {
478 domGuides.innerHTML = markdown(activeGuide.body);
502 domActiveGuide.innerHTML = markdown(activeGuide.body);
479503 }
504 domActiveGuide.classList.remove("hidden");
480505 }
481506
482507 function renderApi() {
483508 // set Api mode
484509 domApiSwitch.classList.add("active");
485510 domGuideSwitch.classList.remove("active");
486 domGuides.classList.add("hidden");
511 domGuidesSection.classList.add("hidden");
487512 domDocs.classList.remove("hidden");
488513 domApiMenu.classList.remove("hidden");
489514 domGuidesMenu.classList.add("hidden");
......@@ -520,10 +545,8 @@ const NAV_MODES = {
520545 renderInfo();
521546 renderModList();
522547
523 domPrivDeclsBox.checked = curNav.mode == NAV_MODES.API_INTERNAL;
524
525548 if (curNavSearch !== "") {
526 return renderSearch();
549 return renderSearchAPI();
527550 }
528551
529552 let rootMod = zigAnalysis.modules[zigAnalysis.rootMod];
......@@ -542,6 +565,7 @@ const NAV_MODES = {
542565 curNav.declObjs = [currentType];
543566 for (let i = 0; i < curNav.declNames.length; i += 1) {
544567 let childDecl = findSubDecl(currentType, curNav.declNames[i]);
568 window.last_decl = childDecl;
545569 if (childDecl == null) {
546570 return render404();
547571 }
......@@ -605,7 +629,6 @@ const NAV_MODES = {
605629 function render() {
606630 switch (curNav.mode) {
607631 case NAV_MODES.API:
608 case NAV_MODES.API_INTERNAL:
609632 return renderApi();
610633 case NAV_MODES.GUIDES:
611634 return renderGuides();
......@@ -3123,22 +3146,21 @@ const NAV_MODES = {
31233146 const mode = location.hash.substring(0, 3);
31243147 let query = location.hash.substring(3);
31253148
3149 let qpos = query.indexOf("?");
3150 let nonSearchPart;
3151 if (qpos === -1) {
3152 nonSearchPart = query;
3153 } else {
3154 nonSearchPart = query.substring(0, qpos);
3155 curNavSearch = decodeURIComponent(query.substring(qpos + 1));
3156 }
3157
31263158 const DEFAULT_HASH = NAV_MODES.API + zigAnalysis.modules[zigAnalysis.rootMod].name;
31273159 switch (mode) {
31283160 case NAV_MODES.API:
3129 case NAV_MODES.API_INTERNAL:
3130 // #A;MODULE:decl.decl.decl?search-term
3161 // #A;MODULE:decl.decl.decl?search-term
31313162 curNav.mode = mode;
31323163
3133 let qpos = query.indexOf("?");
3134 let nonSearchPart;
3135 if (qpos === -1) {
3136 nonSearchPart = query;
3137 } else {
3138 nonSearchPart = query.substring(0, qpos);
3139 curNavSearch = decodeURIComponent(query.substring(qpos + 1));
3140 }
3141
31423164 let parts = nonSearchPart.split(":");
31433165 if (parts[0] == "") {
31443166 location.hash = DEFAULT_HASH;
......@@ -3152,14 +3174,18 @@ const NAV_MODES = {
31523174
31533175 return;
31543176 case NAV_MODES.GUIDES:
3177
31553178 const sections = zigAnalysis.guide_sections;
3156 if (sections.length != 0 && sections[0].guides.length != 0 && query == "") {
3179 if (sections.length != 0 && sections[0].guides.length != 0 && nonSearchPart == "") {
31573180 location.hash = NAV_MODES.GUIDES + sections[0].guides[0].name;
3181 if (qpos != -1) {
3182 location.hash += query.substring(qpos);
3183 }
31583184 return;
31593185 }
31603186
31613187 curNav.mode = mode;
3162 curNav.activeGuide = query;
3188 curNav.activeGuide = nonSearchPart;
31633189
31643190 return;
31653191 default:
......@@ -3230,22 +3256,6 @@ const NAV_MODES = {
32303256 }
32313257 }
32323258
3233 if (parentType.privDecls) {
3234 for (let i = 0; i < parentType.privDecls.length; i += 1) {
3235 let declIndex = parentType.privDecls[i];
3236 let childDecl = getDecl(declIndex);
3237 if (childDecl.name === childName) {
3238 childDecl.find_subdecl_idx = declIndex;
3239 return childDecl;
3240 } else if (childDecl.is_uns) {
3241 let declValue = resolveValue(childDecl.value);
3242 if (!("type" in declValue.expr)) continue;
3243 let uns_container = getType(declValue.expr.type);
3244 let uns_res = findSubDecl(uns_container, childName);
3245 if (uns_res !== null) return uns_res;
3246 }
3247 }
3248 }
32493259 return null;
32503260 }
32513261
......@@ -3276,6 +3286,12 @@ const NAV_MODES = {
32763286 });
32773287 }
32783288 }
3289
3290 for (let i = 0; i < zigAnalysis.modules.length; i += 1) {
3291 const p = zigAnalysis.modules[i];
3292 // TODO
3293 // declSearchIndex.add(p.name, {moduleId: i});
3294 }
32793295 return list;
32803296 }
32813297
......@@ -3291,6 +3307,7 @@ const NAV_MODES = {
32913307 let stack = [
32923308 {
32933309 declNames: [],
3310 declIndexes: [],
32943311 type: getType(mod.main),
32953312 },
32963313 ];
......@@ -3334,18 +3351,27 @@ const NAV_MODES = {
33343351 }
33353352 }
33363353 }
3354 window.cdp = list;
33373355 return list;
33383356 }
33393357
33403358function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
33413359 let declVal = resolveValue(decl.value);
33423360 let declNames = item.declNames.concat([decl.name]);
3361 let declIndexes = item.declIndexes.concat([declIndex]);
33433362
33443363 if (list[declIndex] != null) return;
33453364 list[declIndex] = {
33463365 modNames: modNames,
33473366 declNames: declNames,
3367 declIndexes: declIndexes,
33483368 };
3369
3370 // add to search index
3371 {
3372 declSearchIndex.add(decl.name, {declIndex});
3373 }
3374
33493375
33503376 if ("type" in declVal.expr) {
33513377 let value = getType(declVal.expr.type);
......@@ -3356,18 +3382,20 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
33563382 if (isContainerType(value)) {
33573383 stack.push({
33583384 declNames: declNames,
3385 declIndexes: declIndexes,
33593386 type: value,
33603387 });
33613388 }
33623389
33633390 // Generic function
3364 if (value.kind == typeKinds.Fn && value.generic_ret != null) {
3365 let resolvedVal = resolveValue({ expr: value.generic_ret });
3366 if ("type" in resolvedVal.expr) {
3367 let generic_type = getType(resolvedVal.expr.type);
3391 if (typeIsGenericFn(declVal.expr.type)) {
3392 let ret = resolveGenericRet(value);
3393 if (ret != null && "type" in ret.expr) {
3394 let generic_type = getType(ret.expr.type);
33683395 if (isContainerType(generic_type)) {
33693396 stack.push({
33703397 declNames: declNames,
3398 declIndexes: declIndexes,
33713399 type: generic_type,
33723400 });
33733401 }
......@@ -3419,6 +3447,53 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
34193447 return markdown(shortDesc(docs));
34203448 }
34213449
3450 function parseGuides() {
3451 for (let j = 0; j < zigAnalysis.guide_sections.length; j+=1){
3452 const section = zigAnalysis.guide_sections[j];
3453 for (let i = 0; i < section.guides.length; i+=1){
3454 let reader = new commonmark.Parser({smart: true});
3455 const guide = section.guides[i];
3456 const ast = reader.parse(guide.body);
3457
3458 // Find the first text thing to use as a sidebar title
3459 guide.title = "[empty guide]";
3460 {
3461 let walker = ast.walker();
3462 let event, node;
3463 while ((event = walker.next())) {
3464 node = event.node;
3465 if (node.type === 'text') {
3466 guide.title = node.literal;
3467 break;
3468 }
3469 }
3470 }
3471 // Index this guide
3472 {
3473 let walker = ast.walker();
3474 let event, node;
3475 while ((event = walker.next())) {
3476 node = event.node;
3477 if (event.entering == true && node.type === 'text') {
3478 indexTextForGuide(j, i, node);
3479 }
3480 }
3481 }
3482 }
3483 }
3484 }
3485
3486 function indexTextForGuide(section_idx, guide_idx, node){
3487 const terms = node.literal.split(" ");
3488 for (let i = 0; i < terms.length; i += 1){
3489 const t = terms[i];
3490 if (!guidesSearchIndex[t]) guidesSearchIndex[t] = new Set();
3491 node.guide = {section_idx, guide_idx};
3492 guidesSearchIndex[t].add(node);
3493 }
3494 }
3495
3496
34223497 function markdown(input, contextType) {
34233498 const raw_lines = input.split("\n"); // zig allows no '\r', so we don't need to split on CR
34243499
......@@ -3841,6 +3916,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
38413916 startSearch();
38423917 }
38433918 }
3919
38443920
38453921 function onSearchKeyDown(ev) {
38463922 switch (getKeyString(ev)) {
......@@ -3982,16 +4058,207 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
39824058 clearAsyncSearch();
39834059 let oldHash = location.hash;
39844060 let parts = oldHash.split("?");
3985 let newPart2 = domSearch.value === "" ? "" : "?" + domSearch.value;
4061 // TODO: make a tooltip that shows the user that we've replaced their dots
4062 let box_text = domSearch.value.replaceAll(".", " ");
4063 let newPart2 = box_text === "" ? "" : "?" + box_text;
39864064 location.replace(parts.length === 1 ? oldHash + newPart2 : parts[0] + newPart2);
39874065 }
39884066 function getSearchTerms() {
39894067 let list = curNavSearch.trim().split(/[ \r\n\t]+/);
3990 list.sort();
39914068 return list;
39924069 }
39934070
3994 function renderSearch() {
4071 function renderSearchGuides() {
4072 const searchTrimmed = false;
4073 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
4074
4075 let terms = getSearchTerms();
4076 let matchedItems = new Set();
4077
4078 for (let i = 0; i < terms.length; i += 1) {
4079 const nodes = guidesSearchIndex[terms[i]];
4080 if (nodes) {
4081 for (const n of nodes) {
4082 matchedItems.add(n);
4083 }
4084 }
4085 }
4086
4087
4088
4089 if (matchedItems.size !== 0) {
4090 // Build up the list of search results
4091 let matchedItemsHTML = "";
4092
4093 for (const node of matchedItems) {
4094 const text = node.literal;
4095 const href = "";
4096
4097 matchedItemsHTML += "<li><a href=\"" + href + "\">" + text + "</a></li>";
4098 }
4099
4100 // Replace the search results using our newly constructed HTML string
4101 domListSearchResults.innerHTML = matchedItemsHTML;
4102 if (searchTrimmed) {
4103 domSectSearchAllResultsLink.classList.remove("hidden");
4104 }
4105 renderSearchCursor();
4106
4107 domSectSearchResults.classList.remove("hidden");
4108 } else {
4109 domSectSearchNoResults.classList.remove("hidden");
4110 }
4111 }
4112
4113 function renderSearchAPI(){
4114 if (canonDeclPaths == null) {
4115 canonDeclPaths = computeCanonDeclPaths();
4116 }
4117 let declSet = new Set();
4118 let otherDeclSet = new Set(); // for low quality results
4119 let declScores = {};
4120
4121 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
4122 let term_list = getSearchTerms();
4123 for (let i = 0; i < term_list.length; i += 1) {
4124 let term = term_list[i];
4125 let result = declSearchIndex.search(term.toLowerCase());
4126 if (result == null) {
4127 domSectSearchNoResults.classList.remove("hidden");
4128 domSectSearchResults.classList.add("hidden");
4129 return;
4130 }
4131
4132 let termSet = new Set();
4133 let termOtherSet = new Set();
4134
4135 for (let list of [result.full, result.partial]) {
4136 for (let r of list) {
4137 const d = r.declIndex;
4138 const decl = getDecl(d);
4139 const canonPath = getCanonDeclPath(d);
4140
4141 // collect unconditionally for the first term
4142 if (i == 0) {
4143 declSet.add(d);
4144 } else {
4145 // path intersection for subsequent terms
4146 let found = false;
4147 for (let p of canonPath.declIndexes) {
4148 if (declSet.has(p)) {
4149 found = true;
4150 break;
4151 }
4152 }
4153 if (!found) {
4154 otherDeclSet.add(d);
4155 } else {
4156 termSet.add(d);
4157 }
4158 }
4159
4160 if (declScores[d] == undefined) declScores[d] = 0;
4161
4162 // scores (lower is better)
4163 let decl_name = decl.name;
4164 if (ignoreCase) decl_name = decl_name.toLowerCase();
4165
4166 // shallow path are preferable
4167 const path_depth = canonPath.declNames.length * 50;
4168 // matching the start of a decl name is good
4169 const match_from_start = decl_name.startsWith(term) ? -term.length * (1 -ignoreCase) : (decl_name.length - term.length) + 1;
4170 // being a perfect match is good
4171 const is_full_match = (list == result.full) ? -decl_name.length * (2 - ignoreCase) : decl_name.length - term.length;
4172 // matching the end of a decl name is good
4173 const matches_the_end = decl_name.endsWith(term) ? -term.length * (1 - ignoreCase) : (decl_name.length - term.length) + 1;
4174 // explicitly penalizing scream case decls
4175 const decl_is_scream_case = decl.name.toUpperCase() != decl.name ? 0 : decl.name.length;
4176
4177 const score = path_depth
4178 + match_from_start
4179 + is_full_match
4180 + matches_the_end
4181 + decl_is_scream_case;
4182
4183 declScores[d] += score;
4184 }
4185 }
4186 if (i != 0) {
4187 for (let d of declSet) {
4188 if (termSet.has(d)) continue;
4189 let found = false;
4190 for (let p of getCanonDeclPath(d).declIndexes) {
4191 if (termSet.has(p) || otherDeclSet.has(p)) {
4192 found = true;
4193 break;
4194 }
4195 }
4196 if (found) {
4197 declScores[d] = declScores[d] / term_list.length;
4198 }
4199
4200 termOtherSet.add(d);
4201 }
4202 declSet = termSet;
4203 for (let d of termOtherSet) {
4204 otherDeclSet.add(d);
4205 }
4206
4207 }
4208 }
4209
4210 let matchedItems = {
4211 high_quality: [],
4212 low_quality: [],
4213 };
4214 for (let idx of declSet) {
4215 matchedItems.high_quality.push({points: declScores[idx], declIndex: idx})
4216 }
4217 for (let idx of otherDeclSet) {
4218 matchedItems.low_quality.push({points: declScores[idx], declIndex: idx})
4219 }
4220
4221 matchedItems.high_quality.sort(function (a, b) {
4222 let cmp = operatorCompare(a.points, b.points);
4223 return cmp;
4224 });
4225 matchedItems.low_quality.sort(function (a, b) {
4226 let cmp = operatorCompare(a.points, b.points);
4227 return cmp;
4228 });
4229
4230 // Build up the list of search results
4231 let matchedItemsHTML = "";
4232
4233 for (let list of [matchedItems.high_quality, matchedItems.low_quality]) {
4234 if (list == matchedItems.low_quality && list.length > 0) {
4235 matchedItemsHTML += "<hr class='other-results'>"
4236 }
4237 for (let result of list) {
4238 const points = result.points;
4239 const match = result.declIndex;
4240
4241 let canonPath = getCanonDeclPath(match);
4242 if (canonPath == null) continue;
4243
4244 let lastModName = canonPath.modNames[canonPath.modNames.length - 1];
4245 let text = lastModName + "." + canonPath.declNames.join(".");
4246
4247
4248 const href = navLink(canonPath.modNames, canonPath.declNames);
4249
4250 matchedItemsHTML += "<li><a href=\"" + href + "\">" + text + "</a></li>";
4251 }
4252 }
4253
4254 // Replace the search results using our newly constructed HTML string
4255 domListSearchResults.innerHTML = matchedItemsHTML;
4256 renderSearchCursor();
4257
4258 domSectSearchResults.classList.remove("hidden");
4259 }
4260
4261 function renderSearchAPIOld() {
39954262 let matchedItems = [];
39964263 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
39974264 let terms = getSearchTerms();
......@@ -4063,7 +4330,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
40634330 });
40644331
40654332 let searchTrimmed = false;
4066 const searchTrimResultsMaxItems = 200;
4333 const searchTrimResultsMaxItems = 60;
40674334 if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
40684335 matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems);
40694336 searchTrimmed = true;
......@@ -4314,3 +4581,255 @@ function toggleExpand(event) {
43144581 parent.parentElement.parentElement.scrollIntoView(true);
43154582 }
43164583}
4584
4585function RadixTree() {
4586 this.root = null;
4587
4588 RadixTree.prototype.search = function (query) {
4589 return this.root.search(query);
4590
4591 }
4592
4593 RadixTree.prototype.add = function (declName, value) {
4594 if (this.root == null) {
4595 this.root = new Node(declName.toLowerCase(), null, [value]);
4596 } else {
4597 this.root.add(declName.toLowerCase(), value);
4598 }
4599
4600 const not_scream_case = declName.toUpperCase() != declName;
4601 let found_separator = false;
4602 for (let i = 1; i < declName.length; i +=1) {
4603 if (declName[i] == '_' || declName[i] == '.') {
4604 found_separator = true;
4605 continue;
4606 }
4607
4608
4609 if (found_separator || (declName[i].toLowerCase() !== declName[i])) {
4610 if (declName.length > i+1
4611 && declName[i+1].toLowerCase() != declName[i+1]) continue;
4612 let suffix = declName.slice(i);
4613 this.root.add(suffix.toLowerCase(), value);
4614 found_separator = false;
4615 }
4616 }
4617 }
4618
4619 function Node(labels, next, values) {
4620 this.labels = labels;
4621 this.next = next;
4622 this.values = values;
4623 }
4624
4625 Node.prototype.isCompressed = function () {
4626 return !Array.isArray(this.next);
4627 }
4628
4629 Node.prototype.search = function (word) {
4630 let full_matches = [];
4631 let partial_matches = [];
4632 let subtree_root = null;
4633
4634 let cn = this;
4635 char_loop: for (let i = 0; i < word.length;) {
4636 if (cn.isCompressed()) {
4637 for (let j = 0; j < cn.labels.length; j += 1) {
4638 let current_idx = i+j;
4639
4640 if (current_idx == word.length) {
4641 partial_matches = cn.values;
4642 subtree_root = cn.next;
4643 break char_loop;
4644 }
4645
4646 if (word[current_idx] != cn.labels[j]) return null;
4647 }
4648
4649 // the full label matched
4650 let new_idx = i + cn.labels.length;
4651 if (new_idx == word.length) {
4652 full_matches = cn.values;
4653 subtree_root = cn.next;
4654 break char_loop;
4655 }
4656
4657
4658 i = new_idx;
4659 cn = cn.next;
4660 continue;
4661 } else {
4662 for (let j = 0; j < cn.labels.length; j += 1) {
4663 if (word[i] == cn.labels[j]) {
4664 if (i == word.length - 1) {
4665 full_matches = cn.values[j];
4666 subtree_root = cn.next[j];
4667 break char_loop;
4668 }
4669
4670 let next = cn.next[j];
4671 if (next == null) return null;
4672 cn = next;
4673 i += 1;
4674 continue char_loop;
4675 }
4676 }
4677
4678 // didn't find a match
4679 return null;
4680 }
4681 }
4682
4683 // Match was found, let's collect all other
4684 // partial matches from the subtree
4685 let stack = [subtree_root];
4686 let node;
4687 while (node = stack.pop()) {
4688 if (node.isCompressed()) {
4689 partial_matches = partial_matches.concat(node.values);
4690 if (node.next != null) {
4691 stack.push(node.next);
4692 }
4693 } else {
4694 for (let v of node.values) {
4695 partial_matches = partial_matches.concat(v);
4696 }
4697
4698 for (let n of node.next) {
4699 if (n != null) stack.push(n);
4700 }
4701 }
4702 }
4703
4704 return {full: full_matches, partial: partial_matches};
4705 }
4706
4707 Node.prototype.add = function (word, value) {
4708 let cn = this;
4709 char_loop: for (let i = 0; i < word.length;) {
4710 if (cn.isCompressed()) {
4711 for(let j = 0; j < cn.labels.length; j += 1) {
4712 let current_idx = i+j;
4713
4714 if (current_idx == word.length) {
4715 if (j < cn.labels.length - 1) {
4716 let node = new Node(cn.labels.slice(j), cn.next, cn.values);
4717 cn.labels = cn.labels.slice(0, j);
4718 cn.next = node;
4719 cn.values = [];
4720 }
4721 cn.values.push(value);
4722 return;
4723 }
4724
4725 if (word[current_idx] == cn.labels[j]) continue;
4726
4727 // if we're here, a mismatch was found
4728 if (j != cn.labels.length - 1) {
4729 // create a suffix node
4730 const label_suffix = cn.labels.slice(j+1);
4731 let node = new Node(label_suffix, cn.next, [...cn.values]);
4732 cn.next = node;
4733 cn.values = [];
4734 }
4735
4736 // turn current node into a split node
4737 let node = null;
4738 let word_values = [];
4739 if (current_idx == word.length - 1) {
4740 // mismatch happened in the last character of word
4741 // meaning that the current node should hold its value
4742 word_values.push(value);
4743 } else {
4744 node = new Node(word.slice(current_idx+1), null, [value]);
4745 }
4746
4747 cn.labels = cn.labels[j] + word[current_idx];
4748 cn.next = [cn.next, node];
4749 cn.values = [cn.values, word_values];
4750
4751 if (j != 0) {
4752 // current node must be turned into a prefix node
4753 let splitNode = new Node(cn.labels, cn.next, cn.values);
4754 cn.labels = word.slice(i, current_idx);
4755 cn.next = splitNode;
4756 cn.values = [];
4757 }
4758
4759 return;
4760 }
4761 // label matched fully with word, are there any more chars?
4762 const new_idx = i + cn.labels.length;
4763 if (new_idx == word.length) {
4764 cn.values.push(value);
4765 return;
4766 } else {
4767 if (cn.next == null) {
4768 let node = new Node(word.slice(new_idx), null, [value]);
4769 cn.next = node;
4770 return;
4771 } else {
4772 cn = cn.next;
4773 i = new_idx;
4774 continue;
4775 }
4776 }
4777 } else { // node is not compressed
4778 let letter = word[i];
4779 for (let j = 0; j < cn.labels.length; j += 1) {
4780 if (letter == cn.labels[j]) {
4781 if (i == word.length - 1) {
4782 cn.values[j].push(value);
4783 return;
4784 }
4785 if (cn.next[j] == null) {
4786 let node = new Node(word.slice(i+1), null, [value]);
4787 cn.next[j] = node;
4788 return;
4789 } else {
4790 cn = cn.next[j];
4791 i += 1;
4792 continue char_loop;
4793 }
4794 }
4795 }
4796
4797 // if we're here we didn't find a match
4798 cn.labels += letter;
4799 if (i == word.length - 1) {
4800 cn.next.push(null);
4801 cn.values.push([value]);
4802 } else {
4803 let node = new Node(word.slice(i+1), null, [value]);
4804 cn.next.push(node);
4805 cn.values.push([]);
4806 }
4807 return;
4808 }
4809 }
4810 }
4811}
4812
4813// RADIX TREE:
4814
4815// apple
4816// appliance
4817
4818// "appl" => [
4819// 'e', => $
4820// 'i' => "ance" => $
4821// ]
4822
4823// OUR STUFF:
4824
4825// AutoHashMap
4826// AutoArrayHashMap
4827
4828// "Auto" => [
4829// 'A', => "rrayHashMap" => $
4830// 'H' => "ashMap" => $
4831// ]
4832
4833// BUT!
4834
4835// We want to be able to search "Hash", for example!
\ No newline at end of file
src/Autodoc.zig+17-4
......@@ -234,12 +234,13 @@ pub fn generateZirData(self: *Autodoc) !void {
234234 };
235235
236236 const tldoc_comment = try self.getTLDocComment(file);
237 const cleaned_tldoc_comment = try self.findGuidePaths(file, tldoc_comment);
238 defer self.arena.free(cleaned_tldoc_comment);
237239 try self.ast_nodes.append(self.arena, .{
238240 .name = "(root)",
239 .docs = tldoc_comment,
241 .docs = cleaned_tldoc_comment,
240242 });
241243 try self.files.put(self.arena, file, main_type_index);
242 try self.findGuidePaths(file, tldoc_comment);
243244
244245 _ = try self.walkInstruction(file, &root_scope, .{}, Zir.main_struct_inst, false);
245246
......@@ -349,6 +350,7 @@ pub fn generateZirData(self: *Autodoc) !void {
349350 var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});
350351 defer docs_dir.close();
351352 try docs_dir.copyFile("main.js", output_dir, "main.js", .{});
353 try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{});
352354 try docs_dir.copyFile("index.html", output_dir, "index.html", .{});
353355}
354356
......@@ -4754,14 +4756,20 @@ fn getTLDocComment(self: *Autodoc, file: *File) ![]const u8 {
47544756 return comment.items;
47554757}
47564758
4757fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) !void {
4759/// Returns the doc comment cleared of autodoc directives.
4760fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) ![]const u8 {
47584761 const guide_prefix = "zig-autodoc-guide:";
47594762 const section_prefix = "zig-autodoc-section:";
47604763
47614764 try self.guide_sections.append(self.arena, .{}); // add a default section
47624765 var current_section = &self.guide_sections.items[self.guide_sections.items.len - 1];
47634766
4764 var it = std.mem.tokenize(u8, str, "\n");
4767 var clean_docs: std.ArrayListUnmanaged(u8) = .{};
4768 errdefer clean_docs.deinit(self.arena);
4769
4770 // TODO: this algo is kinda inefficient
4771
4772 var it = std.mem.split(u8, str, "\n");
47654773 while (it.next()) |line| {
47664774 const trimmed_line = std.mem.trim(u8, line, " ");
47674775 if (std.mem.startsWith(u8, trimmed_line, guide_prefix)) {
......@@ -4775,8 +4783,13 @@ fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) !void {
47754783 .name = trimmed_section_name,
47764784 });
47774785 current_section = &self.guide_sections.items[self.guide_sections.items.len - 1];
4786 } else {
4787 try clean_docs.appendSlice(self.arena, line);
4788 try clean_docs.append(self.arena, '\n');
47784789 }
47794790 }
4791
4792 return clean_docs.toOwnedSlice(self.arena);
47804793}
47814794
47824795fn addGuide(self: *Autodoc, file: *File, guide_path: []const u8, section: *Section) !void {