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 @@...@@ -24,6 +24,7 @@
24 --search-bg-color: #f3f3f3;24 --search-bg-color: #f3f3f3;
25 --search-bg-color-focus: #ffffff;25 --search-bg-color-focus: #ffffff;
26 --search-sh-color: rgba(0, 0, 0, 0.18);26 --search-sh-color: rgba(0, 0, 0, 0.18);
27 --search-other-results-color: rgb(100, 100, 100);
27 --help-sh-color: rgba(0, 0, 0, 0.75);28 --help-sh-color: rgba(0, 0, 0, 0.75);
28 --help-bg-color: #aaa;29 --help-bg-color: #aaa;
29 }30 }
...@@ -83,6 +84,7 @@...@@ -83,6 +84,7 @@
8384
84 .flex-right {85 .flex-right {
85 display: flex;86 display: flex;
87 flex-direction: column;
86 overflow: auto;88 overflow: auto;
87 -webkit-overflow-scrolling: touch;89 -webkit-overflow-scrolling: touch;
88 flex-grow: 1;90 flex-grow: 1;
...@@ -200,7 +202,7 @@...@@ -200,7 +202,7 @@
200 }202 }
201203
202 #guides {204 #guides {
203 padding: 1rem 0.7rem 2.4rem 1.4rem;205 padding: 0rem 0.7rem 2.4rem 1.4rem;
204 box-sizing: border-box;206 box-sizing: border-box;
205 font-size: 1rem;207 font-size: 1rem;
206 background-color: var(--bg-color);208 background-color: var(--bg-color);
...@@ -209,7 +211,7 @@...@@ -209,7 +211,7 @@
209211
210 /* docs section */212 /* docs section */
211 .docs {213 .docs {
212 padding: 1rem 0.7rem 2.4rem 1.4rem;214 padding: 0rem 0.7rem 2.4rem 1.4rem;
213 font-size: 1rem;215 font-size: 1rem;
214 background-color: var(--bg-color);216 background-color: var(--bg-color);
215 overflow-wrap: break-word;217 overflow-wrap: break-word;
...@@ -247,7 +249,38 @@...@@ -247,7 +249,38 @@
247 top: 5px;249 top: 5px;
248 left: 5px;250 left: 5px;
249 }251 }
250252
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
251 .docs a {284 .docs a {
252 color: var(--link-color);285 color: var(--link-color);
253 }286 }
...@@ -505,6 +538,7 @@...@@ -505,6 +538,7 @@
505 --search-bg-color: #3c3c3c;538 --search-bg-color: #3c3c3c;
506 --search-bg-color-focus: #000;539 --search-bg-color-focus: #000;
507 --search-sh-color: rgba(255, 255, 255, 0.28);540 --search-sh-color: rgba(255, 255, 255, 0.28);
541 --search-other-results-color: rgba(255, 255, 255, 0.28);
508 --help-sh-color: rgba(142, 142, 142, 0.5);542 --help-sh-color: rgba(142, 142, 142, 0.5);
509 --help-bg-color: #333;543 --help-bg-color: #333;
510 }544 }
...@@ -717,22 +751,38 @@...@@ -717,22 +751,38 @@
717 <h2><span>Zig Version</span></h2>751 <h2><span>Zig Version</span></h2>
718 <p class="str" id="tdZigVer"></p>752 <p class="str" id="tdZigVer"></p>
719 </div>753 </div>
720 <div>
721 <input id="privDeclsBox" type="checkbox"/>
722 <label for="privDeclsBox">Internal Doc Mode</label>
723 </div>
724 </div>754 </div>
725 </nav>755 </nav>
726 </div>756 </div>
727 <div class="flex-right">757 <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>
728 <div id="guides" class="wrap hidden">781 <div id="guides" class="wrap hidden">
782 <div id="activeGuide" class="hidden"></div>
729 </div> 783 </div>
730 <div id="docs" class="wrap hidden">784 <div id="docs" class="wrap hidden">
731 <section class="docs">785 <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>
736 <p id="status">Loading...</p>786 <p id="status">Loading...</p>
737 <div id="sectNav" class="hidden"><ul id="listNav"></ul></div>787 <div id="sectNav" class="hidden"><ul id="listNav"></ul></div>
738 <div id="fnProto" class="hidden">788 <div id="fnProto" class="hidden">
...@@ -762,21 +812,6 @@...@@ -762,21 +812,6 @@
762 </div>812 </div>
763 <div id="tableFnErrors"><dl id="listFnErrors"></dl></div>813 <div id="tableFnErrors"><dl id="listFnErrors"></dl></div>
764 </div>814 </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>
780 <div id="sectFields" class="hidden">815 <div id="sectFields" class="hidden">
781 <h2>Fields</h2>816 <h2>Fields</h2>
782 <div id="listFields"></div>817 <div id="listFields"></div>
...@@ -852,6 +887,7 @@...@@ -852,6 +887,7 @@
852 </div>887 </div>
853 </div>888 </div>
854 <script src="data.js"></script>889 <script src="data.js"></script>
890 <script src="commonmark.js"></script>
855 <script src="main.js"></script>891 <script src="main.js"></script>
856 </body>892 </body>
857</html>893</html>
lib/docs/main.js+602-83
...@@ -4,7 +4,6 @@ var zigAnalysis;...@@ -4,7 +4,6 @@ var zigAnalysis;
44
5const NAV_MODES = {5const NAV_MODES = {
6 API: "#A;",6 API: "#A;",
7 API_INTERNAL: "#a;",
8 GUIDES: "#G;",7 GUIDES: "#G;",
9};8};
109
...@@ -56,12 +55,13 @@ const NAV_MODES = {...@@ -56,12 +55,13 @@ const NAV_MODES = {
56 const domSectSearchResults = document.getElementById("sectSearchResults");55 const domSectSearchResults = document.getElementById("sectSearchResults");
57 const domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");56 const domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
58 const domDocs = document.getElementById("docs");57 const domDocs = document.getElementById("docs");
59 const domGuides = document.getElementById("guides");58 const domGuidesSection = document.getElementById("guides");
59 const domActiveGuide = document.getElementById("activeGuide");
60
60 const domListSearchResults = document.getElementById("listSearchResults");61 const domListSearchResults = document.getElementById("listSearchResults");
61 const domSectSearchNoResults = document.getElementById("sectSearchNoResults");62 const domSectSearchNoResults = document.getElementById("sectSearchNoResults");
62 const domSectInfo = document.getElementById("sectInfo");63 const domSectInfo = document.getElementById("sectInfo");
63 // const domTdTarget = (document.getElementById("tdTarget"));64 // const domTdTarget = (document.getElementById("tdTarget"));
64 const domPrivDeclsBox = document.getElementById("privDeclsBox");
65 const domTdZigVer = document.getElementById("tdZigVer");65 const domTdZigVer = document.getElementById("tdZigVer");
66 const domHdrName = document.getElementById("hdrName");66 const domHdrName = document.getElementById("hdrName");
67 const domHelpModal = document.getElementById("helpModal");67 const domHelpModal = document.getElementById("helpModal");
...@@ -83,15 +83,16 @@ const NAV_MODES = {...@@ -83,15 +83,16 @@ const NAV_MODES = {
83 let typeTypeId = findTypeTypeId();83 let typeTypeId = findTypeTypeId();
84 let pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 };84 let pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 };
8585
86 let declSearchIndex = new RadixTree();
87 window.search = declSearchIndex;
88
86 // for each module, is an array with modules to get to this one89 // for each module, is an array with modules to get to this one
87 let canonModPaths = computeCanonicalModulePaths();90 let canonModPaths = computeCanonicalModulePaths();
8891
89 // for each decl, is an array with {declNames, modNames} to get to this one92 // for each decl, is an array with {declNames, modNames} to get to this one
90
91 let canonDeclPaths = null; // lazy; use getCanonDeclPath93 let canonDeclPaths = null; // lazy; use getCanonDeclPath
9294
93 // for each type, is an array with {declNames, modNames} to get to this one95 // for each type, is an array with {declNames, modNames} to get to this one
94
95 let canonTypeDecls = null; // lazy; use getCanonTypeDecl96 let canonTypeDecls = null; // lazy; use getCanonTypeDecl
9697
97 let curNav = {98 let curNav = {
...@@ -122,6 +123,12 @@ const NAV_MODES = {...@@ -122,6 +123,12 @@ const NAV_MODES = {
122 // map of decl index to list of comptime fn calls123 // map of decl index to list of comptime fn calls
123 // let nodesToCallsMap = indexNodesToCalls();124 // let nodesToCallsMap = indexNodesToCalls();
124125
126 let guidesSearchIndex = {};
127 window.guideSearch = guidesSearchIndex;
128 parseGuides();
129
130
131
125 domSearch.disabled = false;132 domSearch.disabled = false;
126 domSearch.addEventListener("keydown", onSearchKeyDown, false);133 domSearch.addEventListener("keydown", onSearchKeyDown, false);
127 domSearch.addEventListener("focus", ev => {134 domSearch.addEventListener("focus", ev => {
...@@ -139,31 +146,6 @@ const NAV_MODES = {...@@ -139,31 +146,6 @@ const NAV_MODES = {
139 onHashChange();146 onHashChange();
140 }147 }
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
167 if (location.hash == "") {149 if (location.hash == "") {
168 location.hash = "#A;";150 location.hash = "#A;";
169 }151 }
...@@ -189,7 +171,6 @@ const NAV_MODES = {...@@ -189,7 +171,6 @@ const NAV_MODES = {
189 let suffix = " - Zig";171 let suffix = " - Zig";
190 switch (curNav.mode) {172 switch (curNav.mode) {
191 case NAV_MODES.API:173 case NAV_MODES.API:
192 case NAV_MODES.API_INTERNAL:
193 let list = curNav.modNames.concat(curNav.declNames);174 let list = curNav.modNames.concat(curNav.declNames);
194 if (list.length === 0) {175 if (list.length === 0) {
195 document.title = zigAnalysis.modules[zigAnalysis.rootMod].name + suffix;176 document.title = zigAnalysis.modules[zigAnalysis.rootMod].name + suffix;
...@@ -284,8 +265,11 @@ const NAV_MODES = {...@@ -284,8 +265,11 @@ const NAV_MODES = {
284265
285 function resolveValue(value) {266 function resolveValue(value) {
286 let i = 0;267 let i = 0;
287 while (i < 1000) {268 while (true) {
288 i += 1;269 i += 1;
270 if (i >= 10000) {
271 throw "resolveValue quota exceeded"
272 }
289273
290 if ("refPath" in value.expr) {274 if ("refPath" in value.expr) {
291 value = { expr: value.expr.refPath[value.expr.refPath.length - 1] };275 value = { expr: value.expr.refPath[value.expr.refPath.length - 1] };
...@@ -307,8 +291,31 @@ const NAV_MODES = {...@@ -307,8 +291,31 @@ const NAV_MODES = {
307291
308 return value;292 return value;
309 }293 }
310 console.assert(false);294 }
311 return {};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 }
312 }319 }
313320
314 // function typeOfDecl(decl){321 // function typeOfDecl(decl){
...@@ -401,8 +408,12 @@ const NAV_MODES = {...@@ -401,8 +408,12 @@ const NAV_MODES = {
401 domGuideSwitch.classList.add("active");408 domGuideSwitch.classList.add("active");
402 domApiSwitch.classList.remove("active");409 domApiSwitch.classList.remove("active");
403 domDocs.classList.add("hidden");410 domDocs.classList.add("hidden");
404 domGuides.classList.remove("hidden");411 domGuidesSection.classList.remove("hidden");
412 domActiveGuide.classList.add("hidden");
405 domApiMenu.classList.add("hidden");413 domApiMenu.classList.add("hidden");
414 domSectSearchResults.classList.add("hidden");
415 domSectSearchAllResultsLink.classList.add("hidden");
416 domSectSearchNoResults.classList.add("hidden");
406417
407 // sidebar guides list418 // sidebar guides list
408 const section_list = zigAnalysis.guide_sections;419 const section_list = zigAnalysis.guide_sections;
...@@ -417,7 +428,7 @@ const NAV_MODES = {...@@ -417,7 +428,7 @@ const NAV_MODES = {
417 const guide = section.guides[i];428 const guide = section.guides[i];
418 let liDom = domGuides.children[i];429 let liDom = domGuides.children[i];
419 let aDom = liDom.children[0];430 let aDom = liDom.children[0];
420 aDom.textContent = guide.name;431 aDom.textContent = guide.title;
421 aDom.setAttribute("href", NAV_MODES.GUIDES + guide.name);432 aDom.setAttribute("href", NAV_MODES.GUIDES + guide.name);
422 if (guide.name === curNav.activeGuide) {433 if (guide.name === curNav.activeGuide) {
423 aDom.classList.add("active");434 aDom.classList.add("active");
...@@ -431,6 +442,11 @@ const NAV_MODES = {...@@ -431,6 +442,11 @@ const NAV_MODES = {
431 domGuidesMenu.classList.remove("hidden");442 domGuidesMenu.classList.remove("hidden");
432 }443 }
433444
445
446 if (curNavSearch !== "") {
447 return renderSearchGuides();
448 }
449
434 // main content450 // main content
435 let activeGuide = undefined;451 let activeGuide = undefined;
436 outer: for (let i = 0; i < zigAnalysis.guide_sections.length; i += 1) {452 outer: for (let i = 0; i < zigAnalysis.guide_sections.length; i += 1) {
...@@ -447,7 +463,7 @@ const NAV_MODES = {...@@ -447,7 +463,7 @@ const NAV_MODES = {
447 if (activeGuide == undefined) {463 if (activeGuide == undefined) {
448 const root_file_idx = zigAnalysis.modules[zigAnalysis.rootMod].file;464 const root_file_idx = zigAnalysis.modules[zigAnalysis.rootMod].file;
449 const root_file_name = getFile(root_file_idx).name;465 const root_file_name = getFile(root_file_idx).name;
450 domGuides.innerHTML = markdown(`466 domActiveGuide.innerHTML = markdown(`
451 # Zig Guides467 # Zig Guides
452 These autodocs don't contain any guide.468 These autodocs don't contain any guide.
453469
...@@ -461,13 +477,21 @@ const NAV_MODES = {...@@ -461,13 +477,21 @@ const NAV_MODES = {
461 You can add guides by specifying which markdown files to include477 You can add guides by specifying which markdown files to include
462 in the top level doc comment of your root file, like so:478 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}*)
465 \`\`\`481 \`\`\`
466 //!zig-autodoc-guide: intro.md482 //!zig-autodoc-guide: intro.md
467 //!zig-autodoc-guide: quickstart.md483 //!zig-autodoc-guide: quickstart.md
468 //!zig-autodoc-section: Advanced topics484 //!zig-autodoc-guide: advanced-docs/advanced-stuff.md
469 //!zig-autodoc-guide: ../advanced-docs/advanced-stuff.md485 \`\`\`
486
487 You can also create sections to group guides together:
488
470 \`\`\`489 \`\`\`
490 //!zig-autodoc-section: CLI Usage
491 //!zig-autodoc-guide: cli-basics.md
492 //!zig-autodoc-guide: cli-advanced.md
493 \`\`\`
494
471 495
472 **Note that this feature is still under heavy development so expect bugs**496 **Note that this feature is still under heavy development so expect bugs**
473 **and missing features!**497 **and missing features!**
...@@ -475,15 +499,16 @@ const NAV_MODES = {...@@ -475,15 +499,16 @@ const NAV_MODES = {
475 Happy writing!499 Happy writing!
476 `);500 `);
477 } else {501 } else {
478 domGuides.innerHTML = markdown(activeGuide.body);502 domActiveGuide.innerHTML = markdown(activeGuide.body);
479 }503 }
504 domActiveGuide.classList.remove("hidden");
480 }505 }
481506
482 function renderApi() {507 function renderApi() {
483 // set Api mode508 // set Api mode
484 domApiSwitch.classList.add("active");509 domApiSwitch.classList.add("active");
485 domGuideSwitch.classList.remove("active");510 domGuideSwitch.classList.remove("active");
486 domGuides.classList.add("hidden");511 domGuidesSection.classList.add("hidden");
487 domDocs.classList.remove("hidden");512 domDocs.classList.remove("hidden");
488 domApiMenu.classList.remove("hidden");513 domApiMenu.classList.remove("hidden");
489 domGuidesMenu.classList.add("hidden");514 domGuidesMenu.classList.add("hidden");
...@@ -520,10 +545,8 @@ const NAV_MODES = {...@@ -520,10 +545,8 @@ const NAV_MODES = {
520 renderInfo();545 renderInfo();
521 renderModList();546 renderModList();
522547
523 domPrivDeclsBox.checked = curNav.mode == NAV_MODES.API_INTERNAL;
524
525 if (curNavSearch !== "") {548 if (curNavSearch !== "") {
526 return renderSearch();549 return renderSearchAPI();
527 }550 }
528551
529 let rootMod = zigAnalysis.modules[zigAnalysis.rootMod];552 let rootMod = zigAnalysis.modules[zigAnalysis.rootMod];
...@@ -542,6 +565,7 @@ const NAV_MODES = {...@@ -542,6 +565,7 @@ const NAV_MODES = {
542 curNav.declObjs = [currentType];565 curNav.declObjs = [currentType];
543 for (let i = 0; i < curNav.declNames.length; i += 1) {566 for (let i = 0; i < curNav.declNames.length; i += 1) {
544 let childDecl = findSubDecl(currentType, curNav.declNames[i]);567 let childDecl = findSubDecl(currentType, curNav.declNames[i]);
568 window.last_decl = childDecl;
545 if (childDecl == null) {569 if (childDecl == null) {
546 return render404();570 return render404();
547 }571 }
...@@ -605,7 +629,6 @@ const NAV_MODES = {...@@ -605,7 +629,6 @@ const NAV_MODES = {
605 function render() {629 function render() {
606 switch (curNav.mode) {630 switch (curNav.mode) {
607 case NAV_MODES.API:631 case NAV_MODES.API:
608 case NAV_MODES.API_INTERNAL:
609 return renderApi();632 return renderApi();
610 case NAV_MODES.GUIDES:633 case NAV_MODES.GUIDES:
611 return renderGuides();634 return renderGuides();
...@@ -3123,22 +3146,21 @@ const NAV_MODES = {...@@ -3123,22 +3146,21 @@ const NAV_MODES = {
3123 const mode = location.hash.substring(0, 3);3146 const mode = location.hash.substring(0, 3);
3124 let query = location.hash.substring(3);3147 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
3126 const DEFAULT_HASH = NAV_MODES.API + zigAnalysis.modules[zigAnalysis.rootMod].name;3158 const DEFAULT_HASH = NAV_MODES.API + zigAnalysis.modules[zigAnalysis.rootMod].name;
3127 switch (mode) {3159 switch (mode) {
3128 case NAV_MODES.API:3160 case NAV_MODES.API:
3129 case NAV_MODES.API_INTERNAL:3161 // #A;MODULE:decl.decl.decl?search-term
3130 // #A;MODULE:decl.decl.decl?search-term
3131 curNav.mode = mode;3162 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
3142 let parts = nonSearchPart.split(":");3164 let parts = nonSearchPart.split(":");
3143 if (parts[0] == "") {3165 if (parts[0] == "") {
3144 location.hash = DEFAULT_HASH;3166 location.hash = DEFAULT_HASH;
...@@ -3152,14 +3174,18 @@ const NAV_MODES = {...@@ -3152,14 +3174,18 @@ const NAV_MODES = {
31523174
3153 return;3175 return;
3154 case NAV_MODES.GUIDES:3176 case NAV_MODES.GUIDES:
3177
3155 const sections = zigAnalysis.guide_sections;3178 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 == "") {
3157 location.hash = NAV_MODES.GUIDES + sections[0].guides[0].name;3180 location.hash = NAV_MODES.GUIDES + sections[0].guides[0].name;
3181 if (qpos != -1) {
3182 location.hash += query.substring(qpos);
3183 }
3158 return;3184 return;
3159 }3185 }
31603186
3161 curNav.mode = mode;3187 curNav.mode = mode;
3162 curNav.activeGuide = query;3188 curNav.activeGuide = nonSearchPart;
31633189
3164 return;3190 return;
3165 default:3191 default:
...@@ -3230,22 +3256,6 @@ const NAV_MODES = {...@@ -3230,22 +3256,6 @@ const NAV_MODES = {
3230 }3256 }
3231 }3257 }
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 }
3249 return null;3259 return null;
3250 }3260 }
32513261
...@@ -3276,6 +3286,12 @@ const NAV_MODES = {...@@ -3276,6 +3286,12 @@ const NAV_MODES = {
3276 });3286 });
3277 }3287 }
3278 }3288 }
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 }
3279 return list;3295 return list;
3280 }3296 }
32813297
...@@ -3291,6 +3307,7 @@ const NAV_MODES = {...@@ -3291,6 +3307,7 @@ const NAV_MODES = {
3291 let stack = [3307 let stack = [
3292 {3308 {
3293 declNames: [],3309 declNames: [],
3310 declIndexes: [],
3294 type: getType(mod.main),3311 type: getType(mod.main),
3295 },3312 },
3296 ];3313 ];
...@@ -3334,18 +3351,27 @@ const NAV_MODES = {...@@ -3334,18 +3351,27 @@ const NAV_MODES = {
3334 }3351 }
3335 }3352 }
3336 }3353 }
3354 window.cdp = list;
3337 return list;3355 return list;
3338 }3356 }
33393357
3340function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {3358function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
3341 let declVal = resolveValue(decl.value);3359 let declVal = resolveValue(decl.value);
3342 let declNames = item.declNames.concat([decl.name]);3360 let declNames = item.declNames.concat([decl.name]);
3361 let declIndexes = item.declIndexes.concat([declIndex]);
33433362
3344 if (list[declIndex] != null) return;3363 if (list[declIndex] != null) return;
3345 list[declIndex] = {3364 list[declIndex] = {
3346 modNames: modNames,3365 modNames: modNames,
3347 declNames: declNames,3366 declNames: declNames,
3367 declIndexes: declIndexes,
3348 };3368 };
3369
3370 // add to search index
3371 {
3372 declSearchIndex.add(decl.name, {declIndex});
3373 }
3374
3349 3375
3350 if ("type" in declVal.expr) {3376 if ("type" in declVal.expr) {
3351 let value = getType(declVal.expr.type);3377 let value = getType(declVal.expr.type);
...@@ -3356,18 +3382,20 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -3356,18 +3382,20 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
3356 if (isContainerType(value)) {3382 if (isContainerType(value)) {
3357 stack.push({3383 stack.push({
3358 declNames: declNames,3384 declNames: declNames,
3385 declIndexes: declIndexes,
3359 type: value,3386 type: value,
3360 });3387 });
3361 }3388 }
33623389
3363 // Generic function3390 // Generic function
3364 if (value.kind == typeKinds.Fn && value.generic_ret != null) {3391 if (typeIsGenericFn(declVal.expr.type)) {
3365 let resolvedVal = resolveValue({ expr: value.generic_ret });3392 let ret = resolveGenericRet(value);
3366 if ("type" in resolvedVal.expr) {3393 if (ret != null && "type" in ret.expr) {
3367 let generic_type = getType(resolvedVal.expr.type);3394 let generic_type = getType(ret.expr.type);
3368 if (isContainerType(generic_type)) {3395 if (isContainerType(generic_type)) {
3369 stack.push({3396 stack.push({
3370 declNames: declNames,3397 declNames: declNames,
3398 declIndexes: declIndexes,
3371 type: generic_type,3399 type: generic_type,
3372 });3400 });
3373 }3401 }
...@@ -3419,6 +3447,53 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -3419,6 +3447,53 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
3419 return markdown(shortDesc(docs));3447 return markdown(shortDesc(docs));
3420 }3448 }
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
3422 function markdown(input, contextType) {3497 function markdown(input, contextType) {
3423 const raw_lines = input.split("\n"); // zig allows no '\r', so we don't need to split on CR3498 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) {...@@ -3841,6 +3916,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
3841 startSearch();3916 startSearch();
3842 }3917 }
3843 }3918 }
3919
38443920
3845 function onSearchKeyDown(ev) {3921 function onSearchKeyDown(ev) {
3846 switch (getKeyString(ev)) {3922 switch (getKeyString(ev)) {
...@@ -3982,16 +4058,207 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -3982,16 +4058,207 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
3982 clearAsyncSearch();4058 clearAsyncSearch();
3983 let oldHash = location.hash;4059 let oldHash = location.hash;
3984 let parts = oldHash.split("?");4060 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;
3986 location.replace(parts.length === 1 ? oldHash + newPart2 : parts[0] + newPart2);4064 location.replace(parts.length === 1 ? oldHash + newPart2 : parts[0] + newPart2);
3987 }4065 }
3988 function getSearchTerms() {4066 function getSearchTerms() {
3989 let list = curNavSearch.trim().split(/[ \r\n\t]+/);4067 let list = curNavSearch.trim().split(/[ \r\n\t]+/);
3990 list.sort();
3991 return list;4068 return list;
3992 }4069 }
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() {
3995 let matchedItems = [];4262 let matchedItems = [];
3996 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;4263 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
3997 let terms = getSearchTerms();4264 let terms = getSearchTerms();
...@@ -4063,7 +4330,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -4063,7 +4330,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
4063 });4330 });
40644331
4065 let searchTrimmed = false;4332 let searchTrimmed = false;
4066 const searchTrimResultsMaxItems = 200;4333 const searchTrimResultsMaxItems = 60;
4067 if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {4334 if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
4068 matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems);4335 matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems);
4069 searchTrimmed = true;4336 searchTrimmed = true;
...@@ -4314,3 +4581,255 @@ function toggleExpand(event) {...@@ -4314,3 +4581,255 @@ function toggleExpand(event) {
4314 parent.parentElement.parentElement.scrollIntoView(true);4581 parent.parentElement.parentElement.scrollIntoView(true);
4315 }4582 }
4316}4583}
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 {...@@ -234,12 +234,13 @@ pub fn generateZirData(self: *Autodoc) !void {
234 };234 };
235235
236 const tldoc_comment = try self.getTLDocComment(file);236 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);
237 try self.ast_nodes.append(self.arena, .{239 try self.ast_nodes.append(self.arena, .{
238 .name = "(root)",240 .name = "(root)",
239 .docs = tldoc_comment,241 .docs = cleaned_tldoc_comment,
240 });242 });
241 try self.files.put(self.arena, file, main_type_index);243 try self.files.put(self.arena, file, main_type_index);
242 try self.findGuidePaths(file, tldoc_comment);
243244
244 _ = try self.walkInstruction(file, &root_scope, .{}, Zir.main_struct_inst, false);245 _ = try self.walkInstruction(file, &root_scope, .{}, Zir.main_struct_inst, false);
245246
...@@ -349,6 +350,7 @@ pub fn generateZirData(self: *Autodoc) !void {...@@ -349,6 +350,7 @@ pub fn generateZirData(self: *Autodoc) !void {
349 var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});350 var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});
350 defer docs_dir.close();351 defer docs_dir.close();
351 try docs_dir.copyFile("main.js", output_dir, "main.js", .{});352 try docs_dir.copyFile("main.js", output_dir, "main.js", .{});
353 try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{});
352 try docs_dir.copyFile("index.html", output_dir, "index.html", .{});354 try docs_dir.copyFile("index.html", output_dir, "index.html", .{});
353}355}
354356
...@@ -4754,14 +4756,20 @@ fn getTLDocComment(self: *Autodoc, file: *File) ![]const u8 {...@@ -4754,14 +4756,20 @@ fn getTLDocComment(self: *Autodoc, file: *File) ![]const u8 {
4754 return comment.items;4756 return comment.items;
4755}4757}
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 {
4758 const guide_prefix = "zig-autodoc-guide:";4761 const guide_prefix = "zig-autodoc-guide:";
4759 const section_prefix = "zig-autodoc-section:";4762 const section_prefix = "zig-autodoc-section:";
47604763
4761 try self.guide_sections.append(self.arena, .{}); // add a default section4764 try self.guide_sections.append(self.arena, .{}); // add a default section
4762 var current_section = &self.guide_sections.items[self.guide_sections.items.len - 1];4765 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");
4765 while (it.next()) |line| {4773 while (it.next()) |line| {
4766 const trimmed_line = std.mem.trim(u8, line, " ");4774 const trimmed_line = std.mem.trim(u8, line, " ");
4767 if (std.mem.startsWith(u8, trimmed_line, guide_prefix)) {4775 if (std.mem.startsWith(u8, trimmed_line, guide_prefix)) {
...@@ -4775,8 +4783,13 @@ fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) !void {...@@ -4775,8 +4783,13 @@ fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) !void {
4775 .name = trimmed_section_name,4783 .name = trimmed_section_name,
4776 });4784 });
4777 current_section = &self.guide_sections.items[self.guide_sections.items.len - 1];4785 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');
4778 }4789 }
4779 }4790 }
4791
4792 return clean_docs.toOwnedSlice(self.arena);
4780}4793}
47814794
4782fn addGuide(self: *Autodoc, file: *File, guide_path: []const u8, section: *Section) !void {4795fn addGuide(self: *Autodoc, file: *File, guide_path: []const u8, section: *Section) !void {