@localix-ai/flowdown 0.0.0-stage → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +105 -2
- package/dist/browser/file-actions.js +80 -0
- package/dist/browser/file-actions.js.map +1 -0
- package/dist/core/block-facts.js +72 -0
- package/dist/core/block-facts.js.map +1 -0
- package/dist/core/blocks.d.ts +25 -0
- package/dist/core/blocks.js +464 -0
- package/dist/core/blocks.js.map +1 -0
- package/dist/core/bounded-cache.js +42 -0
- package/dist/core/bounded-cache.js.map +1 -0
- package/dist/core/continues.js +15 -0
- package/dist/core/continues.js.map +1 -0
- package/dist/core/dollars.d.ts +12 -0
- package/dist/core/dollars.js +88 -0
- package/dist/core/dollars.js.map +1 -0
- package/dist/core/fence-scan.js +62 -0
- package/dist/core/fence-scan.js.map +1 -0
- package/dist/core/file-tree-parse.d.ts +26 -0
- package/dist/core/file-tree-parse.js +51 -0
- package/dist/core/file-tree-parse.js.map +1 -0
- package/dist/core/forms-html.js +63 -0
- package/dist/core/forms-html.js.map +1 -0
- package/dist/core/forms.d.ts +28 -0
- package/dist/core/forms.js +23 -0
- package/dist/core/forms.js.map +1 -0
- package/dist/core/headings.d.ts +11 -0
- package/dist/core/headings.js +74 -0
- package/dist/core/headings.js.map +1 -0
- package/dist/core/heal.d.ts +11 -0
- package/dist/core/heal.js +220 -0
- package/dist/core/heal.js.map +1 -0
- package/dist/core/load-once.js +23 -0
- package/dist/core/load-once.js.map +1 -0
- package/dist/core/math-delimiters.js +33 -0
- package/dist/core/math-delimiters.js.map +1 -0
- package/dist/core/math-syntax.js +56 -0
- package/dist/core/math-syntax.js.map +1 -0
- package/dist/core/prose.d.ts +10 -0
- package/dist/core/prose.js +77 -0
- package/dist/core/prose.js.map +1 -0
- package/dist/core/remark-answer-blocks.d.ts +5 -0
- package/dist/core/remark-answer-blocks.js +172 -0
- package/dist/core/remark-answer-blocks.js.map +1 -0
- package/dist/core/remark-answer-containers.js +299 -0
- package/dist/core/remark-answer-containers.js.map +1 -0
- package/dist/core/sanitize-schema.d.ts +18 -0
- package/dist/core/sanitize-schema.js +62 -0
- package/dist/core/sanitize-schema.js.map +1 -0
- package/dist/core/syntax.d.ts +8 -0
- package/dist/core/syntax.js +32 -0
- package/dist/core/syntax.js.map +1 -0
- package/dist/dialect.d.ts +92 -0
- package/dist/dialect.js +176 -0
- package/dist/dialect.js.map +1 -0
- package/dist/document/fence.d.ts +25 -0
- package/dist/document/fence.js +102 -0
- package/dist/document/fence.js.map +1 -0
- package/dist/document/index.d.ts +46 -0
- package/dist/document/index.js +66 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/table.d.ts +11 -0
- package/dist/document/table.js +35 -0
- package/dist/document/table.js.map +1 -0
- package/dist/dom/index.d.ts +21 -0
- package/dist/dom/index.js +141 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/dom/patch.js +104 -0
- package/dist/dom/patch.js.map +1 -0
- package/dist/element/index.d.ts +35 -0
- package/dist/element/index.js +64 -0
- package/dist/element/index.js.map +1 -0
- package/dist/engine/blocks.js +785 -0
- package/dist/engine/blocks.js.map +1 -0
- package/dist/engine/entities.js +83 -0
- package/dist/engine/entities.js.map +1 -0
- package/dist/engine/entity-core.js +9 -0
- package/dist/engine/entity-core.js.map +1 -0
- package/dist/engine/entity-table.js +9 -0
- package/dist/engine/entity-table.js.map +1 -0
- package/dist/engine/html.d.ts +7 -0
- package/dist/engine/html.js +207 -0
- package/dist/engine/html.js.map +1 -0
- package/dist/engine/index.d.ts +7 -0
- package/dist/engine/index.js +74 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/inlines.js +887 -0
- package/dist/engine/inlines.js.map +1 -0
- package/dist/engine/types.d.ts +109 -0
- package/dist/engine/url.d.ts +11 -0
- package/dist/engine/url.js +16 -0
- package/dist/engine/url.js.map +1 -0
- package/dist/engine/visit.d.ts +10 -0
- package/dist/engine/visit.js +29 -0
- package/dist/engine/visit.js.map +1 -0
- package/dist/highlight/highlight.d.ts +4 -0
- package/dist/highlight/highlight.js +144 -0
- package/dist/highlight/highlight.js.map +1 -0
- package/dist/highlight/index.d.ts +4 -0
- package/dist/highlight/index.js +18 -0
- package/dist/highlight/index.js.map +1 -0
- package/dist/html/index.d.ts +4 -0
- package/dist/html/index.js +544 -0
- package/dist/html/index.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +13 -0
- package/dist/math/index.d.ts +17 -0
- package/dist/math/index.js +20 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/typeset.d.ts +12 -0
- package/dist/math/typeset.js +74 -0
- package/dist/math/typeset.js.map +1 -0
- package/dist/mermaid/diagram.d.ts +8 -0
- package/dist/mermaid/diagram.js +114 -0
- package/dist/mermaid/diagram.js.map +1 -0
- package/dist/mermaid/drawing.js +139 -0
- package/dist/mermaid/drawing.js.map +1 -0
- package/dist/mermaid/icons.js +16 -0
- package/dist/mermaid/icons.js.map +1 -0
- package/dist/mermaid/index.d.ts +13 -0
- package/dist/mermaid/index.js +3 -0
- package/dist/mermaid/loader.d.ts +5 -0
- package/dist/mermaid/loader.js +18 -0
- package/dist/mermaid/loader.js.map +1 -0
- package/dist/mermaid/look.d.ts +16 -0
- package/dist/mermaid/look.js +167 -0
- package/dist/mermaid/look.js.map +1 -0
- package/dist/mermaid/normalize-svg.js +44 -0
- package/dist/mermaid/normalize-svg.js.map +1 -0
- package/dist/mermaid/renderer.d.ts +22 -0
- package/dist/mermaid/renderer.js +132 -0
- package/dist/mermaid/renderer.js.map +1 -0
- package/dist/mermaid/viewer.js +309 -0
- package/dist/mermaid/viewer.js.map +1 -0
- package/dist/prompt/index.d.ts +19 -0
- package/dist/prompt/index.js +54 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/react/callout.d.ts +9 -0
- package/dist/react/callout.js +12 -0
- package/dist/react/callout.js.map +1 -0
- package/dist/react/code-block.d.ts +18 -0
- package/dist/react/code-block.js +94 -0
- package/dist/react/code-block.js.map +1 -0
- package/dist/react/context.d.ts +18 -0
- package/dist/react/context.js +17 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/draw.d.ts +2 -0
- package/dist/react/draw.js +17 -0
- package/dist/react/draw.js.map +1 -0
- package/dist/react/file-tree.d.ts +16 -0
- package/dist/react/file-tree.js +69 -0
- package/dist/react/file-tree.js.map +1 -0
- package/dist/react/growing-code.js +36 -0
- package/dist/react/growing-code.js.map +1 -0
- package/dist/react/helpers.d.ts +6 -0
- package/dist/react/helpers.js +17 -0
- package/dist/react/helpers.js.map +1 -0
- package/dist/react/icons.js +23 -0
- package/dist/react/icons.js.map +1 -0
- package/dist/react/labels.js +9 -0
- package/dist/react/labels.js.map +1 -0
- package/dist/react/markdown.d.ts +78 -0
- package/dist/react/markdown.js +206 -0
- package/dist/react/markdown.js.map +1 -0
- package/dist/react/render.d.ts +8 -0
- package/dist/react/render.js +41 -0
- package/dist/react/render.js.map +1 -0
- package/dist/react/scrolls.js +62 -0
- package/dist/react/scrolls.js.map +1 -0
- package/dist/react/table-rows.js +66 -0
- package/dist/react/table-rows.js.map +1 -0
- package/dist/react/table.js +22 -0
- package/dist/react/table.js.map +1 -0
- package/dist/react/tabs.d.ts +25 -0
- package/dist/react/tabs.js +58 -0
- package/dist/react/tabs.js.map +1 -0
- package/dist/react/use-smooth-text.d.ts +6 -0
- package/dist/react/use-smooth-text.js +157 -0
- package/dist/react/use-smooth-text.js.map +1 -0
- package/dist/react/use-stage.d.ts +9 -0
- package/dist/react/use-stage.js +57 -0
- package/dist/react/use-stage.js.map +1 -0
- package/dist/remark.d.ts +20 -0
- package/dist/remark.js +10 -0
- package/dist/render/factory.d.ts +15 -0
- package/dist/render/labels.d.ts +46 -0
- package/dist/render/labels.js +46 -0
- package/dist/render/labels.js.map +1 -0
- package/dist/render/tree.js +314 -0
- package/dist/render/tree.js.map +1 -0
- package/dist/render/view.d.ts +58 -0
- package/dist/render/view.js +306 -0
- package/dist/render/view.js.map +1 -0
- package/dist/render/views.d.ts +16 -0
- package/dist/render/views.js +261 -0
- package/dist/render/views.js.map +1 -0
- package/dist/render/vnode.d.ts +21 -0
- package/dist/render/vnode.js +194 -0
- package/dist/render/vnode.js.map +1 -0
- package/dist/static/index.d.ts +28 -0
- package/dist/static/index.js +27 -0
- package/dist/static/index.js.map +1 -0
- package/dist/stream.d.ts +12 -0
- package/dist/stream.js +3 -0
- package/dist/styles.css +1362 -0
- package/dist/tui/code.d.ts +5 -0
- package/dist/tui/code.js +240 -0
- package/dist/tui/code.js.map +1 -0
- package/dist/tui/index.d.ts +54 -0
- package/dist/tui/index.js +99 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/math.js +242 -0
- package/dist/tui/math.js.map +1 -0
- package/dist/tui/printable.d.ts +12 -0
- package/dist/tui/printable.js +31 -0
- package/dist/tui/printable.js.map +1 -0
- package/dist/tui/render.d.ts +12 -0
- package/dist/tui/render.js +524 -0
- package/dist/tui/render.js.map +1 -0
- package/dist/tui/style.d.ts +35 -0
- package/dist/tui/style.js +77 -0
- package/dist/tui/style.js.map +1 -0
- package/dist/tui/table.js +73 -0
- package/dist/tui/table.js.map +1 -0
- package/dist/tui/width.d.ts +2 -0
- package/dist/tui/width.js +133 -0
- package/dist/tui/width.js.map +1 -0
- package/dist/tui/wrap.d.ts +8 -0
- package/dist/tui/wrap.js +191 -0
- package/dist/tui/wrap.js.map +1 -0
- package/package.json +128 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.js","names":[],"sources":["../../src/engine/blocks.ts"],"sourcesContent":["/**\n * The block pass: a document read line by line into its blocks, by the algorithm in the\n * CommonMark spec. Each line is matched against the containers still open (a quote's `>`, a list\n * item's indent), then tried as the start of a new block, then added to the block it belongs to.\n * The text of paragraphs, headings and cells is kept as written; the inline pass reads it once\n * the whole document is known, since a link can refer to a definition further down.\n */\nimport { unescapeString } from './entities'\nimport {\n CLOSETAG,\n normalizeLabel,\n OPENTAG,\n parseInlines,\n parseReference,\n type InlineContext,\n} from './inlines'\nimport type { Align, Node, Position } from './types'\n\n/** A block while the document is read. */\ninterface Block {\n type: string\n parent: Block | null\n children: Block[]\n open: boolean\n lastLineBlank: boolean\n /** The lines added so far, each with its line ending. */\n text: string\n startLine: number\n endLine: number\n /** Where the block starts in the document. */\n startOffset: number\n /** How many blocks hold this one: 0 for the document. */\n depth: number\n // A list and its items.\n ordered: boolean\n bullet: number\n start: number\n delimiter: number\n padding: number\n markerOffset: number\n tight: boolean\n // A code block.\n fenced: boolean\n fenceChar: number\n fenceLength: number\n fenceOffset: number\n /** Which of the seven kinds of HTML block this is. */\n htmlType: number\n /** A heading's level. */\n level: number\n /** A table's alignments and its rows as written; a footnote's label. */\n align: Align[] | null\n rows: string[] | null\n label: string\n}\n\nconst C_TAB = 9\nconst C_SPACE = 32\nconst C_HASH = 35\nconst C_DOLLAR = 36\nconst C_ASTERISK = 42\nconst C_PLUS = 43\nconst C_DASH = 45\nconst C_COLON = 58\nconst C_LESSTHAN = 60\nconst C_EQUALS = 61\nconst C_GREATERTHAN = 62\nconst C_OPEN_BRACKET = 91\nconst C_BACKSLASH = 92\nconst C_UNDERSCORE = 95\nconst C_BACKTICK = 96\nconst C_PIPE = 124\nconst C_TILDE = 126\n\nconst reHtmlBlockOpen = [\n /./,\n /^<(?:script|pre|textarea|style)(?:\\s|>|$)/i,\n /^<!--/,\n /^<[?]/,\n /^<![A-Za-z]/,\n /^<!\\[CDATA\\[/,\n /^<[/]?(?: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|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|[/]?[>]|$)/i,\n new RegExp(`^(?:${OPENTAG}|${CLOSETAG})\\\\s*$`, 'i'),\n] as const\nconst reHtmlBlockClose = [\n /./,\n /<\\/(?:script|pre|textarea|style)>/i,\n /-->/,\n /\\?>/,\n />/,\n /\\]\\]>/,\n] as const\n\nconst reThematicBreak = /^(?:\\*[ \\t]*){3,}$|^(?:_[ \\t]*){3,}$|^(?:-[ \\t]*){3,}$/\nconst reOrderedListMarker = /^(\\d{1,9})([.)])/\nconst reAtxHeadingMarker = /^#{1,6}(?:[ \\t]+|$)/\nconst reCodeFence = /^`{3,}(?!.*`)|^~{3,}/\nconst reClosingCodeFence = /^(?:`{3,}|~{3,})(?=[ \\t]*$)/\n/** A display formula's fence, read only when an extension asks for it: `$$` alone on its line. */\nconst reMathFence = /^\\${2,}(?!.*\\$)/\nconst reClosingMathFence = /^\\${2,}(?=[ \\t]*$)/\nconst reSetextHeadingLine = /^(?:=+|-+)[ \\t]*$/\nconst reLineEnding = /\\r\\n|\\n|\\r/g\nconst reTableDelimiterCell = /^[ \\t]*(:?)-+(:?)[ \\t]*$/\nconst reFootnoteDefinition = /^\\[\\^([^\\]\\s]+)\\]:[ \\t]*/\nconst reTaskMarker = /^\\[([ xX])\\](?=[ \\t\\n])/\n\nconst isSpaceOrTab = (code: number): boolean => code === C_SPACE || code === C_TAB\n\n/**\n * How deep blocks may hold blocks. A quote in a quote in a list is three; a hundred is past\n * anything written to be read, and it bounds the depth of the tree every pass after this one\n * walks: without it a line of twenty thousand `>` overflowed the stack. A line that would go\n * deeper is read as text of the block it is in.\n */\nconst MAX_NESTING = 100\n\n/** Whether a block holds other blocks; a list holds only items. */\nconst isContainer = (type: string): boolean =>\n type === 'root' ||\n type === 'blockquote' ||\n type === 'item' ||\n type === 'list' ||\n type === 'footnoteDefinition'\n\n/** Whether a block takes the lines after its first as they are. */\nconst acceptsLines = (type: string): boolean =>\n type === 'paragraph' || type === 'code' || type === 'html'\n\n/**\n * A table row cut into its cells: on each `|` that is not escaped, without the outer pipes. Each\n * cell is one cut of the row, joined from pieces only where an escaped pipe (`\\\\|`) is taken out.\n */\nconst splitRow = (row: string): string[] => {\n const cells: string[] = []\n let line = row.trim()\n if (line.charCodeAt(0) === C_PIPE) line = line.slice(1)\n /** The cell's text before `from`: what came before an escaped pipe, and that pipe. */\n let cell = ''\n let from = 0\n for (let pipe = line.indexOf('|'); pipe !== -1; pipe = line.indexOf('|', pipe + 1)) {\n if (pipe > 0 && line.charCodeAt(pipe - 1) === C_BACKSLASH)\n cell += `${line.slice(from, pipe - 1)}|`\n else {\n cells.push((cell + line.slice(from, pipe)).trim())\n cell = ''\n }\n from = pipe + 1\n }\n const last = (cell + line.slice(from)).trim()\n // Text after the last pipe is a cell; nothing after it is the row's closing pipe.\n if (last !== '' || line.charCodeAt(line.length - 1) !== C_PIPE || line === '') cells.push(last)\n return cells\n}\n\n/** The alignments a table's delimiter row (`| :-- | --: |`) gives, or null when it is not one. */\nconst parseDelimiterRow = (row: string): Align[] | null => {\n if (row.indexOf('|') === -1) return null\n const cells = splitRow(row)\n const align: Align[] = []\n for (const cell of cells) {\n const found = reTableDelimiterCell.exec(cell)\n if (found === null) return null\n align.push(found[1] ? (found[2] ? 'center' : 'left') : found[2] ? 'right' : null)\n }\n return align.length === 0 ? null : align\n}\n\nexport interface BlockResult {\n root: Node\n /** The footnotes defined, in the order they are first referred to. */\n footnotes: Node[]\n}\n\n/** Parses a whole document into its tree. */\nexport const parseBlocks = (input: string, context: InlineContext): BlockResult => {\n const gfm = context.gfm\n // Where each line starts and ends in the document (its ending left out): a node's position is\n // counted from these, and a line's text is cut from the document only when it is read.\n const starts: number[] = []\n const ends: number[] = []\n // Most text has no carriage return: its lines are found by a plain search, not a pattern.\n const onlyLf = input.indexOf('\\r') === -1\n if (onlyLf) {\n for (let at = 0; ;) {\n const ending = input.indexOf('\\n', at)\n starts.push(at)\n if (ending === -1) {\n ends.push(input.length)\n break\n }\n ends.push(ending)\n at = ending + 1\n }\n } else {\n for (let at = 0; ;) {\n reLineEnding.lastIndex = at\n const ending = reLineEnding.exec(input)\n starts.push(at)\n if (ending === null) {\n ends.push(input.length)\n break\n }\n ends.push(ending.index)\n at = ending.index + ending[0].length\n }\n }\n let count = starts.length\n // A final line ending ends the last line; it does not start an empty one.\n if (count > 0 && starts[count - 1] === ends[count - 1]) count--\n /** No NUL in the document: a line is then the document's own text, with nothing to replace. */\n const noNul = input.indexOf('\\u0000') === -1\n\n const block = (type: string, startLine: number): Block => ({\n type,\n parent: null,\n children: [],\n open: true,\n lastLineBlank: false,\n text: '',\n startLine,\n endLine: startLine,\n startOffset: 0,\n depth: 0,\n ordered: false,\n bullet: 0,\n start: 0,\n delimiter: 0,\n padding: 0,\n markerOffset: 0,\n tight: true,\n fenced: false,\n fenceChar: 0,\n fenceLength: 0,\n fenceOffset: 0,\n htmlType: 0,\n level: 0,\n align: null,\n rows: null,\n label: '',\n })\n\n const doc = block('root', 1)\n let tip: Block = doc\n let oldtip: Block = doc\n let lastMatchedContainer: Block = doc\n let allClosed = true\n let line = ''\n let lineNumber = 0\n let offset = 0\n let column = 0\n let nextNonspace = 0\n let nextNonspaceColumn = 0\n let indent = 0\n let indented = false\n let blank = false\n let partiallyConsumedTab = false\n\n const findNextNonspace = (): void => {\n let index = offset\n let cols = column\n let code = line.charCodeAt(index)\n while (code === C_SPACE || code === C_TAB) {\n cols += code === C_SPACE ? 1 : 4 - (cols % 4)\n code = line.charCodeAt(++index)\n }\n blank = index >= line.length\n nextNonspace = index\n nextNonspaceColumn = cols\n indent = cols - column\n indented = indent >= 4\n }\n\n const advanceNextNonspace = (): void => {\n offset = nextNonspace\n column = nextNonspaceColumn\n partiallyConsumedTab = false\n }\n\n /** Moves past `amount` characters, or that many columns: a tab is up to four columns wide. */\n const advanceOffset = (amount: number, columns: boolean): void => {\n let left = amount\n while (left > 0 && offset < line.length) {\n if (line.charCodeAt(offset) === C_TAB) {\n const toTab = 4 - (column % 4)\n if (columns) {\n partiallyConsumedTab = toTab > left\n const step = toTab > left ? left : toTab\n column += step\n if (!partiallyConsumedTab) offset++\n left -= step\n } else {\n partiallyConsumedTab = false\n column += toTab\n offset++\n left--\n }\n } else {\n partiallyConsumedTab = false\n offset++\n column++\n left--\n }\n }\n }\n\n const addLine = (): void => {\n if (partiallyConsumedTab) {\n // The rest of a tab that a container's indent took part of.\n offset++\n tip.text += ' '.repeat(4 - (column % 4))\n }\n tip.text += `${line.slice(offset)}\\n`\n }\n\n const removeChild = (child: Block): void => {\n const siblings = child.parent?.children\n if (siblings === undefined) return\n const index = siblings.lastIndexOf(child)\n if (index !== -1) siblings.splice(index, 1)\n child.parent = null\n }\n\n /** Whether a block ends with a blank line before its next sibling. */\n const gapAfter = (child: Block, next: Block | undefined): boolean =>\n next !== undefined && child.endLine !== next.startLine - 1\n\n const takeReferences = (paragraph: Block): void => {\n let content = paragraph.text\n while (content.charCodeAt(0) === C_OPEN_BRACKET) {\n const taken = parseReference(content, context.refs)\n if (taken === 0) break\n content = content.slice(taken)\n }\n paragraph.text = content\n }\n\n const finalize = (closing: Block, endLine: number): void => {\n const above = closing.parent\n closing.open = false\n closing.endLine = endLine\n switch (closing.type) {\n case 'paragraph':\n takeReferences(closing)\n // A paragraph that was only definitions leaves nothing behind.\n if (/^[ \\t\\n]*$/.test(closing.text)) removeChild(closing)\n break\n case 'code':\n if (closing.fenced) {\n const newline = closing.text.indexOf('\\n')\n closing.label = unescapeString(closing.text.slice(0, newline).trim())\n closing.text = closing.text.slice(newline + 1)\n } else closing.text = closing.text.replace(/(?:\\n *)+$/, '\\n')\n break\n case 'list': {\n const items = closing.children\n closing.tight = true\n for (let index = 0; index < items.length && closing.tight; index++) {\n const item = items[index] as Block\n if (gapAfter(item, items[index + 1])) closing.tight = false\n const inner = item.children\n for (let child = 0; child < inner.length && closing.tight; child++)\n if (gapAfter(inner[child] as Block, inner[child + 1])) closing.tight = false\n }\n const last = items[items.length - 1]\n if (last !== undefined) closing.endLine = last.endLine\n break\n }\n case 'item': {\n const last = closing.children[closing.children.length - 1]\n closing.endLine = last === undefined ? closing.startLine : last.endLine\n break\n }\n default:\n }\n if (above !== null) tip = above\n }\n\n const addChild = (type: string): Block => {\n // oxlint-disable-next-line no-unmodified-loop-condition -- `finalize` moves `tip` up.\n while (!isContainer(tip.type) || (tip.type === 'list' && type !== 'item'))\n finalize(tip, lineNumber - 1)\n const child = block(type, lineNumber)\n child.startOffset = (starts[lineNumber - 1] ?? 0) + nextNonspace\n child.parent = tip\n child.depth = tip.depth + 1\n tip.children.push(child)\n tip = child\n return child\n }\n\n const closeUnmatchedBlocks = (): void => {\n if (allClosed) return\n while (oldtip !== lastMatchedContainer) {\n const parent = oldtip.parent as Block\n finalize(oldtip, lineNumber - 1)\n oldtip = parent\n }\n allClosed = true\n }\n\n /** Reads a list marker at the next non-space character into a new item's data, or null. */\n const parseListMarker = (container: Block): Block | null => {\n if (indent >= 4) return null\n const rest = line.slice(nextNonspace)\n const first = rest.charCodeAt(0)\n const item = block('item', lineNumber)\n let markerLength = 1\n if (first === C_ASTERISK || first === C_PLUS || first === C_DASH) item.bullet = first\n else {\n const found = reOrderedListMarker.exec(rest)\n if (found === null) return null\n // Only a list that starts at 1 can interrupt a paragraph.\n if (container.type === 'paragraph' && found[1] !== '1') return null\n item.ordered = true\n item.start = parseInt(found[1] as string, 10)\n item.delimiter = (found[2] as string).charCodeAt(0)\n markerLength = found[0].length\n }\n const after = line.charCodeAt(nextNonspace + markerLength)\n if (!Number.isNaN(after) && !isSpaceOrTab(after)) return null\n // An empty item cannot interrupt a paragraph.\n if (container.type === 'paragraph' && /^[ \\t]*$/.test(line.slice(nextNonspace + markerLength)))\n return null\n\n advanceNextNonspace()\n advanceOffset(markerLength, true)\n const spacesStartColumn = column\n const spacesStartOffset = offset\n do {\n advanceOffset(1, true)\n // oxlint-disable-next-line no-unmodified-loop-condition -- `advanceOffset` moves `column`.\n } while (column - spacesStartColumn < 5 && isSpaceOrTab(line.charCodeAt(offset)))\n const blankItem = offset >= line.length\n const spaces = column - spacesStartColumn\n if (spaces >= 5 || spaces < 1 || blankItem) {\n item.padding = markerLength + 1\n column = spacesStartColumn\n offset = spacesStartOffset\n if (isSpaceOrTab(line.charCodeAt(offset))) advanceOffset(1, true)\n } else item.padding = markerLength + spaces\n item.markerOffset = indent\n return item\n }\n\n /**\n * Whether an open block goes on with this line: 0 when it does, 1 when it does not, 2 when the\n * line closed it and is used up.\n */\n const continues = (container: Block): number => {\n switch (container.type) {\n case 'blockquote':\n if (indented || line.charCodeAt(nextNonspace) !== C_GREATERTHAN) return 1\n advanceNextNonspace()\n advanceOffset(1, false)\n if (isSpaceOrTab(line.charCodeAt(offset))) advanceOffset(1, true)\n return 0\n case 'item':\n if (blank) {\n if (container.children.length === 0) return 1\n advanceNextNonspace()\n } else if (indent >= container.markerOffset + container.padding)\n advanceOffset(container.markerOffset + container.padding, true)\n else return 1\n return 0\n case 'footnoteDefinition':\n if (blank) advanceNextNonspace()\n else if (indent >= 4) advanceOffset(4, true)\n else return 1\n return 0\n case 'code':\n if (container.fenced) {\n if (indent <= 3 && line.charCodeAt(nextNonspace) === container.fenceChar) {\n const found = (\n container.fenceChar === C_DOLLAR ? reClosingMathFence : reClosingCodeFence\n ).exec(line.slice(nextNonspace))\n if (found !== null && found[0].length >= container.fenceLength) {\n finalize(container, lineNumber)\n return 2\n }\n }\n // Indentation up to the fence's own is not part of the code.\n let skip = container.fenceOffset\n while (skip > 0 && isSpaceOrTab(line.charCodeAt(offset))) {\n advanceOffset(1, true)\n skip--\n }\n } else if (indent >= 4) advanceOffset(4, true)\n else if (blank) advanceNextNonspace()\n else return 1\n return 0\n case 'html':\n return blank && (container.htmlType === 6 || container.htmlType === 7) ? 1 : 0\n case 'paragraph':\n case 'table':\n return blank ? 1 : 0\n case 'heading':\n case 'thematicBreak':\n return 1\n default:\n return 0\n }\n }\n\n /**\n * Tries the line as the start of a new block: 0 when it starts none, 1 when it starts a\n * container (the rest of the line is tried again), 2 when it starts a leaf.\n */\n const startBlock = (container: Block): number => {\n const first = line.charCodeAt(nextNonspace)\n if (indented) {\n // Four columns of indent start code, except where the line can go on a paragraph.\n if (tip.type !== 'paragraph' && !blank) {\n advanceOffset(4, true)\n closeUnmatchedBlocks()\n addChild('code')\n return 2\n }\n return 0\n }\n switch (first) {\n case C_GREATERTHAN:\n if (container.depth >= MAX_NESTING) return 0\n advanceNextNonspace()\n advanceOffset(1, false)\n if (isSpaceOrTab(line.charCodeAt(offset))) advanceOffset(1, true)\n closeUnmatchedBlocks()\n addChild('blockquote')\n return 1\n case C_HASH: {\n const found = reAtxHeadingMarker.exec(line.slice(nextNonspace))\n if (found === null) return 0\n advanceNextNonspace()\n advanceOffset(found[0].length, false)\n closeUnmatchedBlocks()\n const heading = addChild('heading')\n heading.level = found[0].trim().length\n heading.text = line\n .slice(offset)\n .replace(/^[ \\t]*#+[ \\t]*$/, '')\n .replace(/[ \\t]+#+[ \\t]*$/, '')\n advanceOffset(line.length - offset, false)\n return 2\n }\n case C_DOLLAR:\n case C_BACKTICK:\n case C_TILDE: {\n if (first === C_DOLLAR && !context.math) return 0\n const found = (first === C_DOLLAR ? reMathFence : reCodeFence).exec(\n line.slice(nextNonspace),\n )\n if (found === null) return 0\n closeUnmatchedBlocks()\n const code = addChild('code')\n code.fenced = true\n code.fenceLength = found[0].length\n code.fenceChar = first\n code.fenceOffset = indent\n advanceNextNonspace()\n advanceOffset(code.fenceLength, false)\n return 2\n }\n case C_LESSTHAN: {\n const rest = line.slice(nextNonspace)\n for (let type = 1; type <= 7; type++) {\n if (\n (reHtmlBlockOpen[type] as RegExp).test(rest) &&\n // The seventh kind (any complete tag) cannot interrupt a paragraph.\n (type < 7 ||\n (container.type !== 'paragraph' &&\n !(!allClosed && !blank && tip.type === 'paragraph')))\n ) {\n closeUnmatchedBlocks()\n // The line is kept whole: an HTML block is passed through with its indentation.\n addChild('html').htmlType = type\n return 2\n }\n }\n return 0\n }\n default:\n }\n\n if (container.type === 'paragraph') {\n // A table: the paragraph's last line is its header, this line the row of dashes under it.\n if (gfm && (first === C_PIPE || first === C_DASH || first === C_COLON)) {\n const align = parseDelimiterRow(line.slice(nextNonspace))\n if (align !== null) {\n const content = container.text\n const cut = content.lastIndexOf('\\n', content.length - 2)\n const header = content.slice(cut + 1, -1)\n if (splitRow(header).length === align.length) {\n closeUnmatchedBlocks()\n if (cut === -1) {\n tip = container.parent as Block\n removeChild(container)\n } else {\n container.text = content.slice(0, cut + 1)\n finalize(container, lineNumber - 2)\n }\n const table = addChild('table')\n table.startLine = lineNumber - 1\n table.startOffset = starts[lineNumber - 2] ?? 0\n table.align = align\n table.rows = [header]\n advanceOffset(line.length - offset, false)\n return 2\n }\n }\n }\n // A setext heading: the paragraph so far, underlined.\n if (first === C_EQUALS || first === C_DASH) {\n if (reSetextHeadingLine.test(line.slice(nextNonspace))) {\n closeUnmatchedBlocks()\n takeReferences(container)\n if (container.text.length > 0) {\n container.type = 'heading'\n container.level = first === C_EQUALS ? 1 : 2\n advanceOffset(line.length - offset, false)\n return 2\n }\n }\n }\n }\n\n if (\n (first === C_ASTERISK || first === C_DASH || first === C_UNDERSCORE) &&\n reThematicBreak.test(line.slice(nextNonspace))\n ) {\n closeUnmatchedBlocks()\n addChild('thematicBreak')\n advanceOffset(line.length - offset, false)\n return 2\n }\n\n // A list and its item are two blocks.\n if (container.depth >= MAX_NESTING - 1) return 0\n\n if (gfm && first === C_OPEN_BRACKET && line.charCodeAt(nextNonspace + 1) === 94 /* ^ */) {\n const found = reFootnoteDefinition.exec(line.slice(nextNonspace))\n if (found !== null) {\n closeUnmatchedBlocks()\n advanceNextNonspace()\n advanceOffset(found[0].length, false)\n const definition = addChild('footnoteDefinition')\n definition.label = found[1] as string\n const key = normalizeLabel(`[${definition.label}]`)\n if (!context.footnotes.has(key)) context.footnotes.set(key, definition.label)\n return 1\n }\n }\n\n if (\n first === C_ASTERISK ||\n first === C_PLUS ||\n first === C_DASH ||\n (first >= 48 && first <= 57)\n ) {\n const item = parseListMarker(container)\n if (item === null) return 0\n closeUnmatchedBlocks()\n // An item goes on the list it fits: the same kind of marker.\n if (\n tip.type !== 'list' ||\n tip.ordered !== item.ordered ||\n tip.bullet !== item.bullet ||\n tip.delimiter !== item.delimiter\n ) {\n const list = addChild('list')\n list.ordered = item.ordered\n list.bullet = item.bullet\n list.delimiter = item.delimiter\n list.start = item.start\n }\n const added = addChild('item')\n added.ordered = item.ordered\n added.padding = item.padding\n added.markerOffset = item.markerOffset\n return 1\n }\n return 0\n }\n\n const incorporateLine = (text: string): void => {\n let container: Block = doc\n oldtip = tip\n offset = 0\n column = 0\n blank = false\n partiallyConsumedTab = false\n lineNumber++\n line = noNul || text.indexOf('\\u0000') === -1 ? text : text.replace(/\\0/g, '�')\n\n // The open blocks this line goes on with, from the outermost in.\n for (;;) {\n const last = container.children[container.children.length - 1]\n if (last === undefined || !last.open) break\n container = last\n findNextNonspace()\n const result = continues(container)\n if (result === 2) return\n if (result === 1) {\n container = container.parent as Block\n break\n }\n }\n allClosed = container === oldtip\n lastMatchedContainer = container\n\n // New blocks the rest of the line starts, until it is down to a leaf or to text.\n let matchedLeaf = container.type !== 'paragraph' && acceptsLines(container.type)\n while (!matchedLeaf) {\n findNextNonspace()\n const result = blank ? 0 : startBlock(container)\n if (result === 0) {\n advanceNextNonspace()\n break\n }\n container = tip\n if (result === 2) matchedLeaf = true\n }\n\n if (!allClosed && !blank && tip.type === 'paragraph') {\n // A lazy continuation line: text that goes on a paragraph inside containers it did not mark.\n addLine()\n return\n }\n closeUnmatchedBlocks()\n const type = container.type\n if (blank) {\n const last = container.children[container.children.length - 1]\n if (last !== undefined) last.lastLineBlank = true\n }\n const lastLineBlank =\n blank &&\n !(\n type === 'blockquote' ||\n (type === 'code' && container.fenced) ||\n (type === 'item' && container.children.length === 0 && container.startLine === lineNumber)\n )\n for (let above: Block | null = container; above !== null; above = above.parent)\n above.lastLineBlank = lastLineBlank\n\n if (acceptsLines(type)) {\n addLine()\n // The first five kinds of HTML block end on the line that holds their closing sequence.\n if (\n type === 'html' &&\n container.htmlType >= 1 &&\n container.htmlType <= 5 &&\n (reHtmlBlockClose[container.htmlType] as RegExp).test(line.slice(offset))\n )\n finalize(container, lineNumber)\n } else if (offset < line.length && !blank) {\n if (type === 'table') (container.rows as string[]).push(line.slice(offset))\n else {\n addChild('paragraph')\n advanceNextNonspace()\n addLine()\n }\n }\n }\n\n /**\n * The lines of a fenced code block at the top of the document, taken without the work a line\n * gets elsewhere: from the line after `index`, every line up to one that may close the fence\n * goes into the code as it is written, in one cut of the document. Returns the last line taken.\n *\n * A line may close the fence when, after at most three spaces, it starts with the fence's\n * character; that line, and whatever follows a fence that did not close, is read the long way.\n */\n const takeFencedLines = (code: Block, index: number): number => {\n const fenceChar = code.fenceChar\n let next = index + 1\n for (; next < count; next++) {\n let at = starts[next] as number\n if (input.charCodeAt(at) === C_SPACE) {\n at++\n if (input.charCodeAt(at) === C_SPACE) {\n at++\n if (input.charCodeAt(at) === C_SPACE) at++\n }\n }\n if (input.charCodeAt(at) === fenceChar) break\n }\n const last = next - 1\n if (last === index) return index\n const taken = input.slice(starts[index + 1] as number, ends[last] as number)\n code.text += `${onlyLf ? taken : taken.replace(reLineEnding, '\\n')}\\n`\n lineNumber += last - index\n return last\n }\n\n for (let index = 0; index < count; index++) {\n incorporateLine(input.slice(starts[index] as number, ends[index] as number))\n // Inside a container, or under an indented fence, each line has a prefix to take off first.\n if (tip.fenced && tip.parent === doc && tip.fenceOffset === 0 && noNul)\n index = takeFencedLines(tip, index)\n }\n // oxlint-disable-next-line no-unmodified-loop-condition -- `finalize` moves `tip` up.\n while (tip !== doc) finalize(tip, count)\n finalize(doc, count)\n\n // The second pass: every block's text read into inlines, now that every definition is known.\n // Footnote definitions leave the flow: they are drawn together at the end of the document.\n const definitions = new Map<string, Block>()\n\n const kids = (from: Block): Node[] => {\n const out: Node[] = []\n for (const child of from.children) {\n if (child.type === 'footnoteDefinition') {\n const key = normalizeLabel(`[${child.label}]`)\n if (!definitions.has(key)) definitions.set(key, child)\n } else out.push(build(child))\n }\n return out\n }\n\n const cells = (row: string, align: Align[], header: boolean): Node => {\n const parts = splitRow(row)\n const children: Node[] = []\n for (let index = 0; index < align.length; index++)\n children.push({\n type: 'tableCell',\n header,\n cellAlign: align[index] ?? null,\n children: parseInlines(parts[index] ?? '', context),\n })\n return { type: 'tableRow', children }\n }\n\n /** Where a block sits in the document: from its first character to the end of its last line. */\n const place = (from: Block): Position => {\n const last = Math.min(Math.max(from.endLine, from.startLine), starts.length)\n const lastStart = starts[last - 1] ?? 0\n const length = (ends[last - 1] ?? 0) - lastStart\n return {\n start: {\n line: from.startLine,\n column: from.startOffset - (starts[from.startLine - 1] ?? 0) + 1,\n offset: from.startOffset,\n },\n end: { line: last, column: length + 1, offset: lastStart + length },\n }\n }\n\n const build = (from: Block): Node => {\n switch (from.type) {\n case 'paragraph':\n return {\n type: 'paragraph',\n position: place(from),\n children: parseInlines(from.text, context),\n }\n case 'heading':\n return {\n type: 'heading',\n depth: from.level,\n position: place(from),\n children: parseInlines(from.text, context),\n }\n case 'thematicBreak':\n return { type: 'thematicBreak', position: place(from) }\n case 'code': {\n if (from.fenceChar === C_DOLLAR) {\n const node: Node = {\n type: 'math',\n position: place(from),\n value: from.text.replace(/\\n$/, ''),\n }\n if (from.label !== '') node.meta = from.label\n return node\n }\n const node: Node = { type: 'code', position: place(from), value: from.text }\n if (from.label !== '') {\n const space = from.label.search(/[ \\t]/)\n node.lang = space === -1 ? from.label : from.label.slice(0, space)\n if (space !== -1) node.meta = from.label.slice(space + 1).trim()\n }\n return node\n }\n case 'html':\n return { type: 'html', position: place(from), value: from.text.replace(/(?:\\n *)+$/, '') }\n case 'table': {\n const align = from.align as Align[]\n const rows = from.rows as string[]\n return {\n type: 'table',\n position: place(from),\n align,\n children: rows.map((row, index) => cells(row, align, index === 0)),\n }\n }\n case 'list': {\n const node: Node = {\n type: 'list',\n position: place(from),\n ordered: from.ordered,\n spread: !from.tight,\n children: kids(from),\n }\n for (const item of node.children as Node[]) item.spread = !from.tight\n if (from.ordered) node.start = from.start\n return node\n }\n case 'item': {\n const node: Node = { type: 'listItem', position: place(from), children: [] }\n const first = from.children[0]\n if (gfm && first !== undefined && first.type === 'paragraph') {\n const task = reTaskMarker.exec(first.text)\n if (task !== null) {\n node.checked = task[1] !== ' '\n first.text = first.text.slice(task[0].length + 1)\n }\n }\n node.children = kids(from)\n return node\n }\n default:\n return { type: from.type, position: place(from), children: kids(from) }\n }\n }\n\n const root: Node = { type: 'root', children: kids(doc) }\n\n // The footnotes referred to, in the order of their first reference. Reading one can refer to\n // more, so the list is walked as it grows.\n const footnotes: Node[] = []\n for (let index = 0; ; index++) {\n let key: string | undefined\n let at = 0\n for (const used of context.footnoteUses.keys()) if (at++ === index) key = used\n if (key === undefined) break\n const from = definitions.get(key)\n if (from === undefined) continue\n footnotes.push({\n type: 'footnoteDefinition',\n identifier: normalizeLabel(`[${from.label}]`).toLowerCase(),\n label: from.label,\n index: index + 1,\n position: place(from),\n children: kids(from),\n })\n }\n for (const node of footnotes)\n node.count = context.footnoteUses.get(normalizeLabel(`[${node.label}]`)) ?? 1\n return { root, footnotes }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ENTITY_CORE } from "./entity-core.js";
|
|
2
|
+
// src/engine/entities.ts
|
|
3
|
+
/** Character references (`&`, `#`, `"`) and backslash escapes, decoded. */
|
|
4
|
+
/**
|
|
5
|
+
* Named references are in two tables. The names replies use (` `, `—`, `→`: the
|
|
6
|
+
* 253 of HTML 4) are in every page. The other 1,900 of HTML5 (`∳`)
|
|
7
|
+
* are ten kilobytes almost no document needs: `./entity-table`, added with `addEntities` by
|
|
8
|
+
* whoever loads it (the HTML stage, or `<Markdown>` the first time a document uses such a name).
|
|
9
|
+
*/
|
|
10
|
+
let named;
|
|
11
|
+
let whole = false;
|
|
12
|
+
const read = (table, into) => {
|
|
13
|
+
for (const line of table.split("\n")) {
|
|
14
|
+
const tab = line.indexOf(" ");
|
|
15
|
+
into.set(line.slice(0, tab), line.slice(tab + 1));
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/** A table is one string in the bundle; it becomes a map the first time a name is looked up. */
|
|
19
|
+
const namedEntities = () => {
|
|
20
|
+
if (named) return named;
|
|
21
|
+
read(ENTITY_CORE, named = /* @__PURE__ */ new Map());
|
|
22
|
+
return named;
|
|
23
|
+
};
|
|
24
|
+
/** Adds every HTML5 name (`ENTITY_TABLE` of `./entity-table`) to the ones decoded. */
|
|
25
|
+
const addEntities = (table) => {
|
|
26
|
+
if (whole) return;
|
|
27
|
+
whole = true;
|
|
28
|
+
read(table, namedEntities());
|
|
29
|
+
};
|
|
30
|
+
/** Whether every HTML5 name is decoded, not only the common ones. */
|
|
31
|
+
const hasAllEntities = () => whole;
|
|
32
|
+
const reNamed = /&([A-Za-z][A-Za-z0-9]{1,31});/g;
|
|
33
|
+
/** Whether the text holds a named reference that only the whole table knows (or nothing does). */
|
|
34
|
+
const hasRareEntity = (text) => {
|
|
35
|
+
if (text.indexOf("&") === -1) return false;
|
|
36
|
+
const known = namedEntities();
|
|
37
|
+
reNamed.lastIndex = 0;
|
|
38
|
+
for (let match = reNamed.exec(text); match; match = reNamed.exec(text)) if (!known.has(match[1])) return true;
|
|
39
|
+
return false;
|
|
40
|
+
};
|
|
41
|
+
/** The characters of `&name;`, `{` or `{` (given whole), or null when it names nothing. */
|
|
42
|
+
const decodeEntity = (entity) => {
|
|
43
|
+
if (entity.charCodeAt(1) !== 35) return namedEntities().get(entity.slice(1, -1)) ?? null;
|
|
44
|
+
const code = (entity.charCodeAt(2) | 32) === 120 ? parseInt(entity.slice(3, -1), 16) : parseInt(entity.slice(2, -1), 10);
|
|
45
|
+
if (code === 0 || code > 1114111 || code >= 55296 && code <= 57343) return "�";
|
|
46
|
+
return String.fromCodePoint(code);
|
|
47
|
+
};
|
|
48
|
+
const ESCAPABLE = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]";
|
|
49
|
+
const ENTITY = "&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});";
|
|
50
|
+
const reEscapeOrEntity = new RegExp(`\\\\${ESCAPABLE}|${ENTITY}`, "gi");
|
|
51
|
+
/** A string with its backslash escapes and character references resolved. */
|
|
52
|
+
const unescapeString = (text) => text.indexOf("\\") === -1 && text.indexOf("&") === -1 ? text : text.replace(reEscapeOrEntity, (match) => match.charCodeAt(0) === 92 ? match.charAt(1) : decodeEntity(match) ?? match);
|
|
53
|
+
/** Whether a character code is ASCII punctuation, the characters a backslash can escape. */
|
|
54
|
+
const isEscapable = (code) => code >= 33 && code <= 47 || code >= 58 && code <= 64 || code >= 91 && code <= 96 || code >= 123 && code <= 126;
|
|
55
|
+
/** Characters a URL may hold as they are; everything else is percent-encoded. */
|
|
56
|
+
const URL_SAFE = /[A-Za-z0-9;/?:@&=+$,\-_.!~*'()#]/;
|
|
57
|
+
/**
|
|
58
|
+
* A link destination as it goes into `href`: percent-encoded, with escapes that are already
|
|
59
|
+
* there kept.
|
|
60
|
+
*/
|
|
61
|
+
const normalizeUri = (uri) => {
|
|
62
|
+
let out = "";
|
|
63
|
+
for (let index = 0; index < uri.length; index++) {
|
|
64
|
+
const code = uri.charCodeAt(index);
|
|
65
|
+
if (code === 37 && /^[0-9a-f]{2}$/i.test(uri.slice(index + 1, index + 3))) {
|
|
66
|
+
out += uri.slice(index, index + 3);
|
|
67
|
+
index += 2;
|
|
68
|
+
} else if (code < 128) {
|
|
69
|
+
const char = uri.charAt(index);
|
|
70
|
+
out += URL_SAFE.test(char) ? char : encodeURIComponent(char);
|
|
71
|
+
} else if (code >= 55296 && code <= 57343) {
|
|
72
|
+
const next = uri.charCodeAt(index + 1);
|
|
73
|
+
if (code <= 56319 && next >= 56320 && next <= 57343) {
|
|
74
|
+
out += encodeURIComponent(uri.slice(index, index + 2));
|
|
75
|
+
index++;
|
|
76
|
+
} else out += "%EF%BF%BD";
|
|
77
|
+
} else out += encodeURIComponent(uri.charAt(index));
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
};
|
|
81
|
+
export { ENTITY, addEntities, decodeEntity, hasAllEntities, hasRareEntity, isEscapable, normalizeUri, unescapeString };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","names":[],"sources":["../../src/engine/entities.ts"],"sourcesContent":["/** Character references (`&`, `#`, `"`) and backslash escapes, decoded. */\nimport { ENTITY_CORE } from './entity-core'\n\n/**\n * Named references are in two tables. The names replies use (` `, `—`, `→`: the\n * 253 of HTML 4) are in every page. The other 1,900 of HTML5 (`∳`)\n * are ten kilobytes almost no document needs: `./entity-table`, added with `addEntities` by\n * whoever loads it (the HTML stage, or `<Markdown>` the first time a document uses such a name).\n */\nlet named: Map<string, string> | undefined\nlet whole = false\n\nconst read = (table: string, into: Map<string, string>): void => {\n for (const line of table.split('\\n')) {\n const tab = line.indexOf('\\t')\n into.set(line.slice(0, tab), line.slice(tab + 1))\n }\n}\n\n/** A table is one string in the bundle; it becomes a map the first time a name is looked up. */\nconst namedEntities = (): Map<string, string> => {\n if (named) return named\n read(ENTITY_CORE, (named = new Map()))\n return named\n}\n\n/** Adds every HTML5 name (`ENTITY_TABLE` of `./entity-table`) to the ones decoded. */\nexport const addEntities = (table: string): void => {\n if (whole) return\n whole = true\n read(table, namedEntities())\n}\n\n/** Whether every HTML5 name is decoded, not only the common ones. */\nexport const hasAllEntities = (): boolean => whole\n\nconst reNamed = /&([A-Za-z][A-Za-z0-9]{1,31});/g\n\n/** Whether the text holds a named reference that only the whole table knows (or nothing does). */\nexport const hasRareEntity = (text: string): boolean => {\n if (text.indexOf('&') === -1) return false\n const known = namedEntities()\n reNamed.lastIndex = 0\n for (let match = reNamed.exec(text); match; match = reNamed.exec(text))\n if (!known.has(match[1] as string)) return true\n return false\n}\n\n/** The characters of `&name;`, `{` or `{` (given whole), or null when it names nothing. */\nexport const decodeEntity = (entity: string): string | null => {\n if (entity.charCodeAt(1) !== 35 /* # */) return namedEntities().get(entity.slice(1, -1)) ?? null\n const hex = (entity.charCodeAt(2) | 32) === 120 /* x */\n const code = hex ? parseInt(entity.slice(3, -1), 16) : parseInt(entity.slice(2, -1), 10)\n if (code === 0 || code > 0x10ffff || (code >= 0xd800 && code <= 0xdfff)) return '�'\n return String.fromCodePoint(code)\n}\n\nconst ESCAPABLE = '[!\"#$%&\\'()*+,./:;<=>?@[\\\\\\\\\\\\]^_`{|}~-]'\nexport const ENTITY = '&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});'\n\nconst reEscapeOrEntity = new RegExp(`\\\\\\\\${ESCAPABLE}|${ENTITY}`, 'gi')\n\n/** A string with its backslash escapes and character references resolved. */\nexport const unescapeString = (text: string): string =>\n text.indexOf('\\\\') === -1 && text.indexOf('&') === -1\n ? text\n : text.replace(reEscapeOrEntity, (match) =>\n match.charCodeAt(0) === 92 /* \\ */ ? match.charAt(1) : (decodeEntity(match) ?? match),\n )\n\n/** Whether a character code is ASCII punctuation, the characters a backslash can escape. */\nexport const isEscapable = (code: number): boolean =>\n (code >= 33 && code <= 47) ||\n (code >= 58 && code <= 64) ||\n (code >= 91 && code <= 96) ||\n (code >= 123 && code <= 126)\n\n/** Characters a URL may hold as they are; everything else is percent-encoded. */\nconst URL_SAFE = /[A-Za-z0-9;/?:@&=+$,\\-_.!~*'()#]/\n\n/**\n * A link destination as it goes into `href`: percent-encoded, with escapes that are already\n * there kept.\n */\nexport const normalizeUri = (uri: string): string => {\n let out = ''\n for (let index = 0; index < uri.length; index++) {\n const code = uri.charCodeAt(index)\n if (code === 37 /* % */ && /^[0-9a-f]{2}$/i.test(uri.slice(index + 1, index + 3))) {\n out += uri.slice(index, index + 3)\n index += 2\n } else if (code < 128) {\n const char = uri.charAt(index)\n out += URL_SAFE.test(char) ? char : encodeURIComponent(char)\n } else if (code >= 0xd800 && code <= 0xdfff) {\n const next = uri.charCodeAt(index + 1)\n if (code <= 0xdbff && next >= 0xdc00 && next <= 0xdfff) {\n out += encodeURIComponent(uri.slice(index, index + 2))\n index++\n } else out += '%EF%BF%BD'\n } else out += encodeURIComponent(uri.charAt(index))\n }\n return out\n}\n"],"mappings":";;;;;;;;;AASA,IAAI;AACJ,IAAI,QAAQ;AAEZ,MAAM,QAAQ,OAAe,SAAoC;CAC/D,KAAK,MAAM,QAAQ,MAAM,MAAM,IAAI,GAAG;EACpC,MAAM,MAAM,KAAK,QAAQ,GAAI;EAC7B,KAAK,IAAI,KAAK,MAAM,GAAG,GAAG,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;CAClD;AACF;;AAGA,MAAM,sBAA2C;CAC/C,IAAI,OAAO,OAAO;CAClB,KAAK,aAAc,wBAAQ,IAAI,IAAI,CAAE;CACrC,OAAO;AACT;;AAGA,MAAa,eAAe,UAAwB;CAClD,IAAI,OAAO;CACX,QAAQ;CACR,KAAK,OAAO,cAAc,CAAC;AAC7B;;AAGA,MAAa,uBAAgC;AAE7C,MAAM,UAAU;;AAGhB,MAAa,iBAAiB,SAA0B;CACtD,IAAI,KAAK,QAAQ,GAAG,MAAM,IAAI,OAAO;CACrC,MAAM,QAAQ,cAAc;CAC5B,QAAQ,YAAY;CACpB,KAAK,IAAI,QAAQ,QAAQ,KAAK,IAAI,GAAG,OAAO,QAAQ,QAAQ,KAAK,IAAI,GACnE,IAAI,CAAC,MAAM,IAAI,MAAM,EAAY,GAAG,OAAO;CAC7C,OAAO;AACT;;AAGA,MAAa,gBAAgB,WAAkC;CAC7D,IAAI,OAAO,WAAW,CAAC,MAAM,IAAY,OAAO,cAAc,CAAC,CAAC,IAAI,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK;CAE5F,MAAM,QADO,OAAO,WAAW,CAAC,IAAI,QAAQ,MACzB,SAAS,OAAO,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,SAAS,OAAO,MAAM,GAAG,EAAE,GAAG,EAAE;CACvF,IAAI,SAAS,KAAK,OAAO,WAAa,QAAQ,SAAU,QAAQ,OAAS,OAAO;CAChF,OAAO,OAAO,cAAc,IAAI;AAClC;AAEA,MAAM,YAAY;AAClB,MAAa,SAAS;AAEtB,MAAM,mBAAmB,IAAI,OAAO,OAAO,UAAU,GAAG,UAAU,IAAI;;AAGtE,MAAa,kBAAkB,SAC7B,KAAK,QAAQ,IAAI,MAAM,MAAM,KAAK,QAAQ,GAAG,MAAM,KAC/C,OACA,KAAK,QAAQ,mBAAmB,UAC9B,MAAM,WAAW,CAAC,MAAM,KAAa,MAAM,OAAO,CAAC,IAAK,aAAa,KAAK,KAAK,KACjF;;AAGN,MAAa,eAAe,SACzB,QAAQ,MAAM,QAAQ,MACtB,QAAQ,MAAM,QAAQ,MACtB,QAAQ,MAAM,QAAQ,MACtB,QAAQ,OAAO,QAAQ;;AAG1B,MAAM,WAAW;;;;;AAMjB,MAAa,gBAAgB,QAAwB;CACnD,IAAI,MAAM;CACV,KAAK,IAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,SAAS;EAC/C,MAAM,OAAO,IAAI,WAAW,KAAK;EACjC,IAAI,SAAS,MAAc,iBAAiB,KAAK,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG;GACjF,OAAO,IAAI,MAAM,OAAO,QAAQ,CAAC;GACjC,SAAS;EACX,OAAO,IAAI,OAAO,KAAK;GACrB,MAAM,OAAO,IAAI,OAAO,KAAK;GAC7B,OAAO,SAAS,KAAK,IAAI,IAAI,OAAO,mBAAmB,IAAI;EAC7D,OAAO,IAAI,QAAQ,SAAU,QAAQ,OAAQ;GAC3C,MAAM,OAAO,IAAI,WAAW,QAAQ,CAAC;GACrC,IAAI,QAAQ,SAAU,QAAQ,SAAU,QAAQ,OAAQ;IACtD,OAAO,mBAAmB,IAAI,MAAM,OAAO,QAAQ,CAAC,CAAC;IACrD;GACF,OAAO,OAAO;EAChB,OAAO,OAAO,mBAAmB,IAAI,OAAO,KAAK,CAAC;CACpD;CACA,OAAO;AACT"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/engine/entity-core.ts
|
|
2
|
+
/**
|
|
3
|
+
* The named character references of HTML 4 and `'`: the ones replies use.
|
|
4
|
+
* One `name<tab>characters` per line. Generated by scripts/entities.ts; do not edit.
|
|
5
|
+
*/
|
|
6
|
+
const ENTITY_CORE = "AElig Æ\nAacute Á\nAcirc Â\nAgrave À\nAlpha Α\nAring Å\nAtilde Ã\nAuml Ä\nBeta Β\nCcedil Ç\nChi Χ\nDagger ‡\nDelta Δ\nETH Ð\nEacute É\nEcirc Ê\nEgrave È\nEpsilon Ε\nEta Η\nEuml Ë\nGamma Γ\nIacute Í\nIcirc Î\nIgrave Ì\nIota Ι\nIuml Ï\nKappa Κ\nLambda Λ\nMu Μ\nNtilde Ñ\nNu Ν\nOElig Œ\nOacute Ó\nOcirc Ô\nOgrave Ò\nOmega Ω\nOmicron Ο\nOslash Ø\nOtilde Õ\nOuml Ö\nPhi Φ\nPi Π\nPrime ″\nPsi Ψ\nRho Ρ\nScaron Š\nSigma Σ\nTHORN Þ\nTau Τ\nTheta Θ\nUacute Ú\nUcirc Û\nUgrave Ù\nUpsilon Υ\nUuml Ü\nXi Ξ\nYacute Ý\nYuml Ÿ\nZeta Ζ\naacute á\nacirc â\nacute ´\naelig æ\nagrave à\nalefsym ℵ\nalpha α\namp &\nand ∧\nang ∠\napos '\naring å\nasymp ≈\natilde ã\nauml ä\nbdquo „\nbeta β\nbrvbar ¦\nbull •\ncap ∩\nccedil ç\ncedil ¸\ncent ¢\nchi χ\ncirc ˆ\nclubs ♣\ncong ≅\ncopy ©\ncrarr ↵\ncup ∪\ncurren ¤\ndArr ⇓\ndagger †\ndarr ↓\ndeg °\ndelta δ\ndiams ♦\ndivide ÷\neacute é\necirc ê\negrave è\nempty ∅\nemsp \nensp \nepsilon ε\nequiv ≡\neta η\neth ð\neuml ë\neuro €\nexist ∃\nfnof ƒ\nforall ∀\nfrac12 ½\nfrac14 ¼\nfrac34 ¾\nfrasl ⁄\ngamma γ\nge ≥\ngt >\nhArr ⇔\nharr ↔\nhearts ♥\nhellip …\niacute í\nicirc î\niexcl ¡\nigrave ì\nimage ℑ\ninfin ∞\nint ∫\niota ι\niquest ¿\nisin ∈\niuml ï\nkappa κ\nlArr ⇐\nlambda λ\nlang ⟨\nlaquo «\nlarr ←\nlceil ⌈\nldquo “\nle ≤\nlfloor ⌊\nlowast ∗\nloz ◊\nlrm \nlsaquo ‹\nlsquo ‘\nlt <\nmacr ¯\nmdash —\nmicro µ\nmiddot ·\nminus −\nmu μ\nnabla ∇\nnbsp \xA0\nndash –\nne ≠\nni ∋\nnot ¬\nnotin ∉\nnsub ⊄\nntilde ñ\nnu ν\noacute ó\nocirc ô\noelig œ\nograve ò\noline ‾\nomega ω\nomicron ο\noplus ⊕\nor ∨\nordf ª\nordm º\noslash ø\notilde õ\notimes ⊗\nouml ö\npara ¶\npart ∂\npermil ‰\nperp ⊥\nphi φ\npi π\npiv ϖ\nplusmn ±\npound £\nprime ′\nprod ∏\nprop ∝\npsi ψ\nquot \"\nrArr ⇒\nradic √\nrang ⟩\nraquo »\nrarr →\nrceil ⌉\nrdquo ”\nreal ℜ\nreg ®\nrfloor ⌋\nrho ρ\nrlm \nrsaquo ›\nrsquo ’\nsbquo ‚\nscaron š\nsdot ⋅\nsect §\nshy \nsigma σ\nsigmaf ς\nsim ∼\nspades ♠\nsub ⊂\nsube ⊆\nsum ∑\nsup ⊃\nsup1 ¹\nsup2 ²\nsup3 ³\nsupe ⊇\nszlig ß\ntau τ\nthere4 ∴\ntheta θ\nthetasym ϑ\nthinsp \nthorn þ\ntilde ˜\ntimes ×\ntrade ™\nuArr ⇑\nuacute ú\nuarr ↑\nucirc û\nugrave ù\numl ¨\nupsih ϒ\nupsilon υ\nuuml ü\nweierp ℘\nxi ξ\nyacute ý\nyen ¥\nyuml ÿ\nzeta ζ\nzwj \nzwnj ";
|
|
7
|
+
export { ENTITY_CORE };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=entity-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-core.js","names":[],"sources":["../../src/engine/entity-core.ts"],"sourcesContent":["/**\n * The named character references of HTML 4 and `'`: the ones replies use.\n * One `name<tab>characters` per line. Generated by scripts/entities.ts; do not edit.\n */\nexport const ENTITY_CORE =\n 'AElig\\tÆ\\nAacute\\tÁ\\nAcirc\\tÂ\\nAgrave\\tÀ\\nAlpha\\tΑ\\nAring\\tÅ\\nAtilde\\tÃ\\nAuml\\tÄ\\nBeta\\tΒ\\nCcedil\\tÇ\\nChi\\tΧ\\nDagger\\t‡\\nDelta\\tΔ\\nETH\\tÐ\\nEacute\\tÉ\\nEcirc\\tÊ\\nEgrave\\tÈ\\nEpsilon\\tΕ\\nEta\\tΗ\\nEuml\\tË\\nGamma\\tΓ\\nIacute\\tÍ\\nIcirc\\tÎ\\nIgrave\\tÌ\\nIota\\tΙ\\nIuml\\tÏ\\nKappa\\tΚ\\nLambda\\tΛ\\nMu\\tΜ\\nNtilde\\tÑ\\nNu\\tΝ\\nOElig\\tŒ\\nOacute\\tÓ\\nOcirc\\tÔ\\nOgrave\\tÒ\\nOmega\\tΩ\\nOmicron\\tΟ\\nOslash\\tØ\\nOtilde\\tÕ\\nOuml\\tÖ\\nPhi\\tΦ\\nPi\\tΠ\\nPrime\\t″\\nPsi\\tΨ\\nRho\\tΡ\\nScaron\\tŠ\\nSigma\\tΣ\\nTHORN\\tÞ\\nTau\\tΤ\\nTheta\\tΘ\\nUacute\\tÚ\\nUcirc\\tÛ\\nUgrave\\tÙ\\nUpsilon\\tΥ\\nUuml\\tÜ\\nXi\\tΞ\\nYacute\\tÝ\\nYuml\\tŸ\\nZeta\\tΖ\\naacute\\tá\\nacirc\\tâ\\nacute\\t´\\naelig\\tæ\\nagrave\\tà\\nalefsym\\tℵ\\nalpha\\tα\\namp\\t&\\nand\\t∧\\nang\\t∠\\napos\\t\\'\\naring\\tå\\nasymp\\t≈\\natilde\\tã\\nauml\\tä\\nbdquo\\t„\\nbeta\\tβ\\nbrvbar\\t¦\\nbull\\t•\\ncap\\t∩\\nccedil\\tç\\ncedil\\t¸\\ncent\\t¢\\nchi\\tχ\\ncirc\\tˆ\\nclubs\\t♣\\ncong\\t≅\\ncopy\\t©\\ncrarr\\t↵\\ncup\\t∪\\ncurren\\t¤\\ndArr\\t⇓\\ndagger\\t†\\ndarr\\t↓\\ndeg\\t°\\ndelta\\tδ\\ndiams\\t♦\\ndivide\\t÷\\neacute\\té\\necirc\\tê\\negrave\\tè\\nempty\\t∅\\nemsp\\t \\nensp\\t \\nepsilon\\tε\\nequiv\\t≡\\neta\\tη\\neth\\tð\\neuml\\të\\neuro\\t€\\nexist\\t∃\\nfnof\\tƒ\\nforall\\t∀\\nfrac12\\t½\\nfrac14\\t¼\\nfrac34\\t¾\\nfrasl\\t⁄\\ngamma\\tγ\\nge\\t≥\\ngt\\t>\\nhArr\\t⇔\\nharr\\t↔\\nhearts\\t♥\\nhellip\\t…\\niacute\\tí\\nicirc\\tî\\niexcl\\t¡\\nigrave\\tì\\nimage\\tℑ\\ninfin\\t∞\\nint\\t∫\\niota\\tι\\niquest\\t¿\\nisin\\t∈\\niuml\\tï\\nkappa\\tκ\\nlArr\\t⇐\\nlambda\\tλ\\nlang\\t⟨\\nlaquo\\t«\\nlarr\\t←\\nlceil\\t⌈\\nldquo\\t“\\nle\\t≤\\nlfloor\\t⌊\\nlowast\\t∗\\nloz\\t◊\\nlrm\\t\\nlsaquo\\t‹\\nlsquo\\t‘\\nlt\\t<\\nmacr\\t¯\\nmdash\\t—\\nmicro\\tµ\\nmiddot\\t·\\nminus\\t−\\nmu\\tμ\\nnabla\\t∇\\nnbsp\\t \\nndash\\t–\\nne\\t≠\\nni\\t∋\\nnot\\t¬\\nnotin\\t∉\\nnsub\\t⊄\\nntilde\\tñ\\nnu\\tν\\noacute\\tó\\nocirc\\tô\\noelig\\tœ\\nograve\\tò\\noline\\t‾\\nomega\\tω\\nomicron\\tο\\noplus\\t⊕\\nor\\t∨\\nordf\\tª\\nordm\\tº\\noslash\\tø\\notilde\\tõ\\notimes\\t⊗\\nouml\\tö\\npara\\t¶\\npart\\t∂\\npermil\\t‰\\nperp\\t⊥\\nphi\\tφ\\npi\\tπ\\npiv\\tϖ\\nplusmn\\t±\\npound\\t£\\nprime\\t′\\nprod\\t∏\\nprop\\t∝\\npsi\\tψ\\nquot\\t\"\\nrArr\\t⇒\\nradic\\t√\\nrang\\t⟩\\nraquo\\t»\\nrarr\\t→\\nrceil\\t⌉\\nrdquo\\t”\\nreal\\tℜ\\nreg\\t®\\nrfloor\\t⌋\\nrho\\tρ\\nrlm\\t\\nrsaquo\\t›\\nrsquo\\t’\\nsbquo\\t‚\\nscaron\\tš\\nsdot\\t⋅\\nsect\\t§\\nshy\\t\\nsigma\\tσ\\nsigmaf\\tς\\nsim\\t∼\\nspades\\t♠\\nsub\\t⊂\\nsube\\t⊆\\nsum\\t∑\\nsup\\t⊃\\nsup1\\t¹\\nsup2\\t²\\nsup3\\t³\\nsupe\\t⊇\\nszlig\\tß\\ntau\\tτ\\nthere4\\t∴\\ntheta\\tθ\\nthetasym\\tϑ\\nthinsp\\t \\nthorn\\tþ\\ntilde\\t˜\\ntimes\\t×\\ntrade\\t™\\nuArr\\t⇑\\nuacute\\tú\\nuarr\\t↑\\nucirc\\tû\\nugrave\\tù\\numl\\t¨\\nupsih\\tϒ\\nupsilon\\tυ\\nuuml\\tü\\nweierp\\t℘\\nxi\\tξ\\nyacute\\tý\\nyen\\t¥\\nyuml\\tÿ\\nzeta\\tζ\\nzwj\\t\\nzwnj\\t'\n"],"mappings":";;;;;AAIA,MAAa,cACX"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/engine/entity-table.ts
|
|
2
|
+
/**
|
|
3
|
+
* Every HTML5 named character reference CommonMark decodes.
|
|
4
|
+
* One `name<tab>characters` per line. Generated by scripts/entities.ts; do not edit.
|
|
5
|
+
*/
|
|
6
|
+
const ENTITY_TABLE = "AElig Æ\nAMP &\nAacute Á\nAbreve Ă\nAcirc Â\nAcy А\nAfr 𝔄\nAgrave À\nAlpha Α\nAmacr Ā\nAnd ⩓\nAogon Ą\nAopf 𝔸\nApplyFunction \nAring Å\nAscr 𝒜\nAssign ≔\nAtilde Ã\nAuml Ä\nBackslash ∖\nBarv ⫧\nBarwed ⌆\nBcy Б\nBecause ∵\nBernoullis ℬ\nBeta Β\nBfr 𝔅\nBopf 𝔹\nBreve ˘\nBscr ℬ\nBumpeq ≎\nCHcy Ч\nCOPY ©\nCacute Ć\nCap ⋒\nCapitalDifferentialD ⅅ\nCayleys ℭ\nCcaron Č\nCcedil Ç\nCcirc Ĉ\nCconint ∰\nCdot Ċ\nCedilla ¸\nCenterDot ·\nCfr ℭ\nChi Χ\nCircleDot ⊙\nCircleMinus ⊖\nCirclePlus ⊕\nCircleTimes ⊗\nClockwiseContourIntegral ∲\nCloseCurlyDoubleQuote ”\nCloseCurlyQuote ’\nColon ∷\nColone ⩴\nCongruent ≡\nConint ∯\nContourIntegral ∮\nCopf ℂ\nCoproduct ∐\nCounterClockwiseContourIntegral ∳\nCross ⨯\nCscr 𝒞\nCup ⋓\nCupCap ≍\nDD ⅅ\nDDotrahd ⤑\nDJcy Ђ\nDScy Ѕ\nDZcy Џ\nDagger ‡\nDarr ↡\nDashv ⫤\nDcaron Ď\nDcy Д\nDel ∇\nDelta Δ\nDfr 𝔇\nDiacriticalAcute ´\nDiacriticalDot ˙\nDiacriticalDoubleAcute ˝\nDiacriticalGrave `\nDiacriticalTilde ˜\nDiamond ⋄\nDifferentialD ⅆ\nDopf 𝔻\nDot ¨\nDotDot ⃜\nDotEqual ≐\nDoubleContourIntegral ∯\nDoubleDot ¨\nDoubleDownArrow ⇓\nDoubleLeftArrow ⇐\nDoubleLeftRightArrow ⇔\nDoubleLeftTee ⫤\nDoubleLongLeftArrow ⟸\nDoubleLongLeftRightArrow ⟺\nDoubleLongRightArrow ⟹\nDoubleRightArrow ⇒\nDoubleRightTee ⊨\nDoubleUpArrow ⇑\nDoubleUpDownArrow ⇕\nDoubleVerticalBar ∥\nDownArrow ↓\nDownArrowBar ⤓\nDownArrowUpArrow ⇵\nDownBreve ̑\nDownLeftRightVector ⥐\nDownLeftTeeVector ⥞\nDownLeftVector ↽\nDownLeftVectorBar ⥖\nDownRightTeeVector ⥟\nDownRightVector ⇁\nDownRightVectorBar ⥗\nDownTee ⊤\nDownTeeArrow ↧\nDownarrow ⇓\nDscr 𝒟\nDstrok Đ\nENG Ŋ\nETH Ð\nEacute É\nEcaron Ě\nEcirc Ê\nEcy Э\nEdot Ė\nEfr 𝔈\nEgrave È\nElement ∈\nEmacr Ē\nEmptySmallSquare ◻\nEmptyVerySmallSquare ▫\nEogon Ę\nEopf 𝔼\nEpsilon Ε\nEqual ⩵\nEqualTilde ≂\nEquilibrium ⇌\nEscr ℰ\nEsim ⩳\nEta Η\nEuml Ë\nExists ∃\nExponentialE ⅇ\nFcy Ф\nFfr 𝔉\nFilledSmallSquare ◼\nFilledVerySmallSquare ▪\nFopf 𝔽\nForAll ∀\nFouriertrf ℱ\nFscr ℱ\nGJcy Ѓ\nGT >\nGamma Γ\nGammad Ϝ\nGbreve Ğ\nGcedil Ģ\nGcirc Ĝ\nGcy Г\nGdot Ġ\nGfr 𝔊\nGg ⋙\nGopf 𝔾\nGreaterEqual ≥\nGreaterEqualLess ⋛\nGreaterFullEqual ≧\nGreaterGreater ⪢\nGreaterLess ≷\nGreaterSlantEqual ⩾\nGreaterTilde ≳\nGscr 𝒢\nGt ≫\nHARDcy Ъ\nHacek ˇ\nHat ^\nHcirc Ĥ\nHfr ℌ\nHilbertSpace ℋ\nHopf ℍ\nHorizontalLine ─\nHscr ℋ\nHstrok Ħ\nHumpDownHump ≎\nHumpEqual ≏\nIEcy Е\nIJlig IJ\nIOcy Ё\nIacute Í\nIcirc Î\nIcy И\nIdot İ\nIfr ℑ\nIgrave Ì\nIm ℑ\nImacr Ī\nImaginaryI ⅈ\nImplies ⇒\nInt ∬\nIntegral ∫\nIntersection ⋂\nInvisibleComma \nInvisibleTimes \nIogon Į\nIopf 𝕀\nIota Ι\nIscr ℐ\nItilde Ĩ\nIukcy І\nIuml Ï\nJcirc Ĵ\nJcy Й\nJfr 𝔍\nJopf 𝕁\nJscr 𝒥\nJsercy Ј\nJukcy Є\nKHcy Х\nKJcy Ќ\nKappa Κ\nKcedil Ķ\nKcy К\nKfr 𝔎\nKopf 𝕂\nKscr 𝒦\nLJcy Љ\nLT <\nLacute Ĺ\nLambda Λ\nLang ⟪\nLaplacetrf ℒ\nLarr ↞\nLcaron Ľ\nLcedil Ļ\nLcy Л\nLeftAngleBracket ⟨\nLeftArrow ←\nLeftArrowBar ⇤\nLeftArrowRightArrow ⇆\nLeftCeiling ⌈\nLeftDoubleBracket ⟦\nLeftDownTeeVector ⥡\nLeftDownVector ⇃\nLeftDownVectorBar ⥙\nLeftFloor ⌊\nLeftRightArrow ↔\nLeftRightVector ⥎\nLeftTee ⊣\nLeftTeeArrow ↤\nLeftTeeVector ⥚\nLeftTriangle ⊲\nLeftTriangleBar ⧏\nLeftTriangleEqual ⊴\nLeftUpDownVector ⥑\nLeftUpTeeVector ⥠\nLeftUpVector ↿\nLeftUpVectorBar ⥘\nLeftVector ↼\nLeftVectorBar ⥒\nLeftarrow ⇐\nLeftrightarrow ⇔\nLessEqualGreater ⋚\nLessFullEqual ≦\nLessGreater ≶\nLessLess ⪡\nLessSlantEqual ⩽\nLessTilde ≲\nLfr 𝔏\nLl ⋘\nLleftarrow ⇚\nLmidot Ŀ\nLongLeftArrow ⟵\nLongLeftRightArrow ⟷\nLongRightArrow ⟶\nLongleftarrow ⟸\nLongleftrightarrow ⟺\nLongrightarrow ⟹\nLopf 𝕃\nLowerLeftArrow ↙\nLowerRightArrow ↘\nLscr ℒ\nLsh ↰\nLstrok Ł\nLt ≪\nMap ⤅\nMcy М\nMediumSpace \nMellintrf ℳ\nMfr 𝔐\nMinusPlus ∓\nMopf 𝕄\nMscr ℳ\nMu Μ\nNJcy Њ\nNacute Ń\nNcaron Ň\nNcedil Ņ\nNcy Н\nNegativeMediumSpace \nNegativeThickSpace \nNegativeThinSpace \nNegativeVeryThinSpace \nNestedGreaterGreater ≫\nNestedLessLess ≪\nNewLine \n\nNfr 𝔑\nNoBreak \nNonBreakingSpace \xA0\nNopf ℕ\nNot ⫬\nNotCongruent ≢\nNotCupCap ≭\nNotDoubleVerticalBar ∦\nNotElement ∉\nNotEqual ≠\nNotEqualTilde ≂̸\nNotExists ∄\nNotGreater ≯\nNotGreaterEqual ≱\nNotGreaterFullEqual ≧̸\nNotGreaterGreater ≫̸\nNotGreaterLess ≹\nNotGreaterSlantEqual ⩾̸\nNotGreaterTilde ≵\nNotHumpDownHump ≎̸\nNotHumpEqual ≏̸\nNotLeftTriangle ⋪\nNotLeftTriangleBar ⧏̸\nNotLeftTriangleEqual ⋬\nNotLess ≮\nNotLessEqual ≰\nNotLessGreater ≸\nNotLessLess ≪̸\nNotLessSlantEqual ⩽̸\nNotLessTilde ≴\nNotNestedGreaterGreater ⪢̸\nNotNestedLessLess ⪡̸\nNotPrecedes ⊀\nNotPrecedesEqual ⪯̸\nNotPrecedesSlantEqual ⋠\nNotReverseElement ∌\nNotRightTriangle ⋫\nNotRightTriangleBar ⧐̸\nNotRightTriangleEqual ⋭\nNotSquareSubset ⊏̸\nNotSquareSubsetEqual ⋢\nNotSquareSuperset ⊐̸\nNotSquareSupersetEqual ⋣\nNotSubset ⊂⃒\nNotSubsetEqual ⊈\nNotSucceeds ⊁\nNotSucceedsEqual ⪰̸\nNotSucceedsSlantEqual ⋡\nNotSucceedsTilde ≿̸\nNotSuperset ⊃⃒\nNotSupersetEqual ⊉\nNotTilde ≁\nNotTildeEqual ≄\nNotTildeFullEqual ≇\nNotTildeTilde ≉\nNotVerticalBar ∤\nNscr 𝒩\nNtilde Ñ\nNu Ν\nOElig Œ\nOacute Ó\nOcirc Ô\nOcy О\nOdblac Ő\nOfr 𝔒\nOgrave Ò\nOmacr Ō\nOmega Ω\nOmicron Ο\nOopf 𝕆\nOpenCurlyDoubleQuote “\nOpenCurlyQuote ‘\nOr ⩔\nOscr 𝒪\nOslash Ø\nOtilde Õ\nOtimes ⨷\nOuml Ö\nOverBar ‾\nOverBrace ⏞\nOverBracket ⎴\nOverParenthesis ⏜\nPartialD ∂\nPcy П\nPfr 𝔓\nPhi Φ\nPi Π\nPlusMinus ±\nPoincareplane ℌ\nPopf ℙ\nPr ⪻\nPrecedes ≺\nPrecedesEqual ⪯\nPrecedesSlantEqual ≼\nPrecedesTilde ≾\nPrime ″\nProduct ∏\nProportion ∷\nProportional ∝\nPscr 𝒫\nPsi Ψ\nQUOT \"\nQfr 𝔔\nQopf ℚ\nQscr 𝒬\nRBarr ⤐\nREG ®\nRacute Ŕ\nRang ⟫\nRarr ↠\nRarrtl ⤖\nRcaron Ř\nRcedil Ŗ\nRcy Р\nRe ℜ\nReverseElement ∋\nReverseEquilibrium ⇋\nReverseUpEquilibrium ⥯\nRfr ℜ\nRho Ρ\nRightAngleBracket ⟩\nRightArrow →\nRightArrowBar ⇥\nRightArrowLeftArrow ⇄\nRightCeiling ⌉\nRightDoubleBracket ⟧\nRightDownTeeVector ⥝\nRightDownVector ⇂\nRightDownVectorBar ⥕\nRightFloor ⌋\nRightTee ⊢\nRightTeeArrow ↦\nRightTeeVector ⥛\nRightTriangle ⊳\nRightTriangleBar ⧐\nRightTriangleEqual ⊵\nRightUpDownVector ⥏\nRightUpTeeVector ⥜\nRightUpVector ↾\nRightUpVectorBar ⥔\nRightVector ⇀\nRightVectorBar ⥓\nRightarrow ⇒\nRopf ℝ\nRoundImplies ⥰\nRrightarrow ⇛\nRscr ℛ\nRsh ↱\nRuleDelayed ⧴\nSHCHcy Щ\nSHcy Ш\nSOFTcy Ь\nSacute Ś\nSc ⪼\nScaron Š\nScedil Ş\nScirc Ŝ\nScy С\nSfr 𝔖\nShortDownArrow ↓\nShortLeftArrow ←\nShortRightArrow →\nShortUpArrow ↑\nSigma Σ\nSmallCircle ∘\nSopf 𝕊\nSqrt √\nSquare □\nSquareIntersection ⊓\nSquareSubset ⊏\nSquareSubsetEqual ⊑\nSquareSuperset ⊐\nSquareSupersetEqual ⊒\nSquareUnion ⊔\nSscr 𝒮\nStar ⋆\nSub ⋐\nSubset ⋐\nSubsetEqual ⊆\nSucceeds ≻\nSucceedsEqual ⪰\nSucceedsSlantEqual ≽\nSucceedsTilde ≿\nSuchThat ∋\nSum ∑\nSup ⋑\nSuperset ⊃\nSupersetEqual ⊇\nSupset ⋑\nTHORN Þ\nTRADE ™\nTSHcy Ћ\nTScy Ц\nTab \nTau Τ\nTcaron Ť\nTcedil Ţ\nTcy Т\nTfr 𝔗\nTherefore ∴\nTheta Θ\nThickSpace \nThinSpace \nTilde ∼\nTildeEqual ≃\nTildeFullEqual ≅\nTildeTilde ≈\nTopf 𝕋\nTripleDot ⃛\nTscr 𝒯\nTstrok Ŧ\nUacute Ú\nUarr ↟\nUarrocir ⥉\nUbrcy Ў\nUbreve Ŭ\nUcirc Û\nUcy У\nUdblac Ű\nUfr 𝔘\nUgrave Ù\nUmacr Ū\nUnderBar _\nUnderBrace ⏟\nUnderBracket ⎵\nUnderParenthesis ⏝\nUnion ⋃\nUnionPlus ⊎\nUogon Ų\nUopf 𝕌\nUpArrow ↑\nUpArrowBar ⤒\nUpArrowDownArrow ⇅\nUpDownArrow ↕\nUpEquilibrium ⥮\nUpTee ⊥\nUpTeeArrow ↥\nUparrow ⇑\nUpdownarrow ⇕\nUpperLeftArrow ↖\nUpperRightArrow ↗\nUpsi ϒ\nUpsilon Υ\nUring Ů\nUscr 𝒰\nUtilde Ũ\nUuml Ü\nVDash ⊫\nVbar ⫫\nVcy В\nVdash ⊩\nVdashl ⫦\nVee ⋁\nVerbar ‖\nVert ‖\nVerticalBar ∣\nVerticalLine |\nVerticalSeparator ❘\nVerticalTilde ≀\nVeryThinSpace \nVfr 𝔙\nVopf 𝕍\nVscr 𝒱\nVvdash ⊪\nWcirc Ŵ\nWedge ⋀\nWfr 𝔚\nWopf 𝕎\nWscr 𝒲\nXfr 𝔛\nXi Ξ\nXopf 𝕏\nXscr 𝒳\nYAcy Я\nYIcy Ї\nYUcy Ю\nYacute Ý\nYcirc Ŷ\nYcy Ы\nYfr 𝔜\nYopf 𝕐\nYscr 𝒴\nYuml Ÿ\nZHcy Ж\nZacute Ź\nZcaron Ž\nZcy З\nZdot Ż\nZeroWidthSpace \nZeta Ζ\nZfr ℨ\nZopf ℤ\nZscr 𝒵\naacute á\nabreve ă\nac ∾\nacE ∾̳\nacd ∿\nacirc â\nacute ´\nacy а\naelig æ\naf \nafr 𝔞\nagrave à\nalefsym ℵ\naleph ℵ\nalpha α\namacr ā\namalg ⨿\namp &\nand ∧\nandand ⩕\nandd ⩜\nandslope ⩘\nandv ⩚\nang ∠\nange ⦤\nangle ∠\nangmsd ∡\nangmsdaa ⦨\nangmsdab ⦩\nangmsdac ⦪\nangmsdad ⦫\nangmsdae ⦬\nangmsdaf ⦭\nangmsdag ⦮\nangmsdah ⦯\nangrt ∟\nangrtvb ⊾\nangrtvbd ⦝\nangsph ∢\nangst Å\nangzarr ⍼\naogon ą\naopf 𝕒\nap ≈\napE ⩰\napacir ⩯\nape ≊\napid ≋\napos '\napprox ≈\napproxeq ≊\naring å\nascr 𝒶\nast *\nasymp ≈\nasympeq ≍\natilde ã\nauml ä\nawconint ∳\nawint ⨑\nbNot ⫭\nbackcong ≌\nbackepsilon ϶\nbackprime ‵\nbacksim ∽\nbacksimeq ⋍\nbarvee ⊽\nbarwed ⌅\nbarwedge ⌅\nbbrk ⎵\nbbrktbrk ⎶\nbcong ≌\nbcy б\nbdquo „\nbecaus ∵\nbecause ∵\nbemptyv ⦰\nbepsi ϶\nbernou ℬ\nbeta β\nbeth ℶ\nbetween ≬\nbfr 𝔟\nbigcap ⋂\nbigcirc ◯\nbigcup ⋃\nbigodot ⨀\nbigoplus ⨁\nbigotimes ⨂\nbigsqcup ⨆\nbigstar ★\nbigtriangledown ▽\nbigtriangleup △\nbiguplus ⨄\nbigvee ⋁\nbigwedge ⋀\nbkarow ⤍\nblacklozenge ⧫\nblacksquare ▪\nblacktriangle ▴\nblacktriangledown ▾\nblacktriangleleft ◂\nblacktriangleright ▸\nblank ␣\nblk12 ▒\nblk14 ░\nblk34 ▓\nblock █\nbne =⃥\nbnequiv ≡⃥\nbnot ⌐\nbopf 𝕓\nbot ⊥\nbottom ⊥\nbowtie ⋈\nboxDL ╗\nboxDR ╔\nboxDl ╖\nboxDr ╓\nboxH ═\nboxHD ╦\nboxHU ╩\nboxHd ╤\nboxHu ╧\nboxUL ╝\nboxUR ╚\nboxUl ╜\nboxUr ╙\nboxV ║\nboxVH ╬\nboxVL ╣\nboxVR ╠\nboxVh ╫\nboxVl ╢\nboxVr ╟\nboxbox ⧉\nboxdL ╕\nboxdR ╒\nboxdl ┐\nboxdr ┌\nboxh ─\nboxhD ╥\nboxhU ╨\nboxhd ┬\nboxhu ┴\nboxminus ⊟\nboxplus ⊞\nboxtimes ⊠\nboxuL ╛\nboxuR ╘\nboxul ┘\nboxur └\nboxv │\nboxvH ╪\nboxvL ╡\nboxvR ╞\nboxvh ┼\nboxvl ┤\nboxvr ├\nbprime ‵\nbreve ˘\nbrvbar ¦\nbscr 𝒷\nbsemi ⁏\nbsim ∽\nbsime ⋍\nbsol \\\nbsolb ⧅\nbsolhsub ⟈\nbull •\nbullet •\nbump ≎\nbumpE ⪮\nbumpe ≏\nbumpeq ≏\ncacute ć\ncap ∩\ncapand ⩄\ncapbrcup ⩉\ncapcap ⩋\ncapcup ⩇\ncapdot ⩀\ncaps ∩︀\ncaret ⁁\ncaron ˇ\nccaps ⩍\nccaron č\nccedil ç\nccirc ĉ\nccups ⩌\nccupssm ⩐\ncdot ċ\ncedil ¸\ncemptyv ⦲\ncent ¢\ncenterdot ·\ncfr 𝔠\nchcy ч\ncheck ✓\ncheckmark ✓\nchi χ\ncir ○\ncirE ⧃\ncirc ˆ\ncirceq ≗\ncirclearrowleft ↺\ncirclearrowright ↻\ncircledR ®\ncircledS Ⓢ\ncircledast ⊛\ncircledcirc ⊚\ncircleddash ⊝\ncire ≗\ncirfnint ⨐\ncirmid ⫯\ncirscir ⧂\nclubs ♣\nclubsuit ♣\ncolon :\ncolone ≔\ncoloneq ≔\ncomma ,\ncommat @\ncomp ∁\ncompfn ∘\ncomplement ∁\ncomplexes ℂ\ncong ≅\ncongdot ⩭\nconint ∮\ncopf 𝕔\ncoprod ∐\ncopy ©\ncopysr ℗\ncrarr ↵\ncross ✗\ncscr 𝒸\ncsub ⫏\ncsube ⫑\ncsup ⫐\ncsupe ⫒\nctdot ⋯\ncudarrl ⤸\ncudarrr ⤵\ncuepr ⋞\ncuesc ⋟\ncularr ↶\ncularrp ⤽\ncup ∪\ncupbrcap ⩈\ncupcap ⩆\ncupcup ⩊\ncupdot ⊍\ncupor ⩅\ncups ∪︀\ncurarr ↷\ncurarrm ⤼\ncurlyeqprec ⋞\ncurlyeqsucc ⋟\ncurlyvee ⋎\ncurlywedge ⋏\ncurren ¤\ncurvearrowleft ↶\ncurvearrowright ↷\ncuvee ⋎\ncuwed ⋏\ncwconint ∲\ncwint ∱\ncylcty ⌭\ndArr ⇓\ndHar ⥥\ndagger †\ndaleth ℸ\ndarr ↓\ndash ‐\ndashv ⊣\ndbkarow ⤏\ndblac ˝\ndcaron ď\ndcy д\ndd ⅆ\nddagger ‡\nddarr ⇊\nddotseq ⩷\ndeg °\ndelta δ\ndemptyv ⦱\ndfisht ⥿\ndfr 𝔡\ndharl ⇃\ndharr ⇂\ndiam ⋄\ndiamond ⋄\ndiamondsuit ♦\ndiams ♦\ndie ¨\ndigamma ϝ\ndisin ⋲\ndiv ÷\ndivide ÷\ndivideontimes ⋇\ndivonx ⋇\ndjcy ђ\ndlcorn ⌞\ndlcrop ⌍\ndollar $\ndopf 𝕕\ndot ˙\ndoteq ≐\ndoteqdot ≑\ndotminus ∸\ndotplus ∔\ndotsquare ⊡\ndoublebarwedge ⌆\ndownarrow ↓\ndowndownarrows ⇊\ndownharpoonleft ⇃\ndownharpoonright ⇂\ndrbkarow ⤐\ndrcorn ⌟\ndrcrop ⌌\ndscr 𝒹\ndscy ѕ\ndsol ⧶\ndstrok đ\ndtdot ⋱\ndtri ▿\ndtrif ▾\nduarr ⇵\nduhar ⥯\ndwangle ⦦\ndzcy џ\ndzigrarr ⟿\neDDot ⩷\neDot ≑\neacute é\neaster ⩮\necaron ě\necir ≖\necirc ê\necolon ≕\necy э\nedot ė\nee ⅇ\nefDot ≒\nefr 𝔢\neg ⪚\negrave è\negs ⪖\negsdot ⪘\nel ⪙\nelinters ⏧\nell ℓ\nels ⪕\nelsdot ⪗\nemacr ē\nempty ∅\nemptyset ∅\nemptyv ∅\nemsp \nemsp13 \nemsp14 \neng ŋ\nensp \neogon ę\neopf 𝕖\nepar ⋕\neparsl ⧣\neplus ⩱\nepsi ε\nepsilon ε\nepsiv ϵ\neqcirc ≖\neqcolon ≕\neqsim ≂\neqslantgtr ⪖\neqslantless ⪕\nequals =\nequest ≟\nequiv ≡\nequivDD ⩸\neqvparsl ⧥\nerDot ≓\nerarr ⥱\nescr ℯ\nesdot ≐\nesim ≂\neta η\neth ð\neuml ë\neuro €\nexcl !\nexist ∃\nexpectation ℰ\nexponentiale ⅇ\nfallingdotseq ≒\nfcy ф\nfemale ♀\nffilig ffi\nfflig ff\nffllig ffl\nffr 𝔣\nfilig fi\nfjlig fj\nflat ♭\nfllig fl\nfltns ▱\nfnof ƒ\nfopf 𝕗\nforall ∀\nfork ⋔\nforkv ⫙\nfpartint ⨍\nfrac12 ½\nfrac13 ⅓\nfrac14 ¼\nfrac15 ⅕\nfrac16 ⅙\nfrac18 ⅛\nfrac23 ⅔\nfrac25 ⅖\nfrac34 ¾\nfrac35 ⅗\nfrac38 ⅜\nfrac45 ⅘\nfrac56 ⅚\nfrac58 ⅝\nfrac78 ⅞\nfrasl ⁄\nfrown ⌢\nfscr 𝒻\ngE ≧\ngEl ⪌\ngacute ǵ\ngamma γ\ngammad ϝ\ngap ⪆\ngbreve ğ\ngcirc ĝ\ngcy г\ngdot ġ\nge ≥\ngel ⋛\ngeq ≥\ngeqq ≧\ngeqslant ⩾\nges ⩾\ngescc ⪩\ngesdot ⪀\ngesdoto ⪂\ngesdotol ⪄\ngesl ⋛︀\ngesles ⪔\ngfr 𝔤\ngg ≫\nggg ⋙\ngimel ℷ\ngjcy ѓ\ngl ≷\nglE ⪒\ngla ⪥\nglj ⪤\ngnE ≩\ngnap ⪊\ngnapprox ⪊\ngne ⪈\ngneq ⪈\ngneqq ≩\ngnsim ⋧\ngopf 𝕘\ngrave `\ngscr ℊ\ngsim ≳\ngsime ⪎\ngsiml ⪐\ngt >\ngtcc ⪧\ngtcir ⩺\ngtdot ⋗\ngtlPar ⦕\ngtquest ⩼\ngtrapprox ⪆\ngtrarr ⥸\ngtrdot ⋗\ngtreqless ⋛\ngtreqqless ⪌\ngtrless ≷\ngtrsim ≳\ngvertneqq ≩︀\ngvnE ≩︀\nhArr ⇔\nhairsp \nhalf ½\nhamilt ℋ\nhardcy ъ\nharr ↔\nharrcir ⥈\nharrw ↭\nhbar ℏ\nhcirc ĥ\nhearts ♥\nheartsuit ♥\nhellip …\nhercon ⊹\nhfr 𝔥\nhksearow ⤥\nhkswarow ⤦\nhoarr ⇿\nhomtht ∻\nhookleftarrow ↩\nhookrightarrow ↪\nhopf 𝕙\nhorbar ―\nhscr 𝒽\nhslash ℏ\nhstrok ħ\nhybull ⁃\nhyphen ‐\niacute í\nic \nicirc î\nicy и\niecy е\niexcl ¡\niff ⇔\nifr 𝔦\nigrave ì\nii ⅈ\niiiint ⨌\niiint ∭\niinfin ⧜\niiota ℩\nijlig ij\nimacr ī\nimage ℑ\nimagline ℐ\nimagpart ℑ\nimath ı\nimof ⊷\nimped Ƶ\nin ∈\nincare ℅\ninfin ∞\ninfintie ⧝\ninodot ı\nint ∫\nintcal ⊺\nintegers ℤ\nintercal ⊺\nintlarhk ⨗\nintprod ⨼\niocy ё\niogon į\niopf 𝕚\niota ι\niprod ⨼\niquest ¿\niscr 𝒾\nisin ∈\nisinE ⋹\nisindot ⋵\nisins ⋴\nisinsv ⋳\nisinv ∈\nit \nitilde ĩ\niukcy і\niuml ï\njcirc ĵ\njcy й\njfr 𝔧\njmath ȷ\njopf 𝕛\njscr 𝒿\njsercy ј\njukcy є\nkappa κ\nkappav ϰ\nkcedil ķ\nkcy к\nkfr 𝔨\nkgreen ĸ\nkhcy х\nkjcy ќ\nkopf 𝕜\nkscr 𝓀\nlAarr ⇚\nlArr ⇐\nlAtail ⤛\nlBarr ⤎\nlE ≦\nlEg ⪋\nlHar ⥢\nlacute ĺ\nlaemptyv ⦴\nlagran ℒ\nlambda λ\nlang ⟨\nlangd ⦑\nlangle ⟨\nlap ⪅\nlaquo «\nlarr ←\nlarrb ⇤\nlarrbfs ⤟\nlarrfs ⤝\nlarrhk ↩\nlarrlp ↫\nlarrpl ⤹\nlarrsim ⥳\nlarrtl ↢\nlat ⪫\nlatail ⤙\nlate ⪭\nlates ⪭︀\nlbarr ⤌\nlbbrk ❲\nlbrace {\nlbrack [\nlbrke ⦋\nlbrksld ⦏\nlbrkslu ⦍\nlcaron ľ\nlcedil ļ\nlceil ⌈\nlcub {\nlcy л\nldca ⤶\nldquo “\nldquor „\nldrdhar ⥧\nldrushar ⥋\nldsh ↲\nle ≤\nleftarrow ←\nleftarrowtail ↢\nleftharpoondown ↽\nleftharpoonup ↼\nleftleftarrows ⇇\nleftrightarrow ↔\nleftrightarrows ⇆\nleftrightharpoons ⇋\nleftrightsquigarrow ↭\nleftthreetimes ⋋\nleg ⋚\nleq ≤\nleqq ≦\nleqslant ⩽\nles ⩽\nlescc ⪨\nlesdot ⩿\nlesdoto ⪁\nlesdotor ⪃\nlesg ⋚︀\nlesges ⪓\nlessapprox ⪅\nlessdot ⋖\nlesseqgtr ⋚\nlesseqqgtr ⪋\nlessgtr ≶\nlesssim ≲\nlfisht ⥼\nlfloor ⌊\nlfr 𝔩\nlg ≶\nlgE ⪑\nlhard ↽\nlharu ↼\nlharul ⥪\nlhblk ▄\nljcy љ\nll ≪\nllarr ⇇\nllcorner ⌞\nllhard ⥫\nlltri ◺\nlmidot ŀ\nlmoust ⎰\nlmoustache ⎰\nlnE ≨\nlnap ⪉\nlnapprox ⪉\nlne ⪇\nlneq ⪇\nlneqq ≨\nlnsim ⋦\nloang ⟬\nloarr ⇽\nlobrk ⟦\nlongleftarrow ⟵\nlongleftrightarrow ⟷\nlongmapsto ⟼\nlongrightarrow ⟶\nlooparrowleft ↫\nlooparrowright ↬\nlopar ⦅\nlopf 𝕝\nloplus ⨭\nlotimes ⨴\nlowast ∗\nlowbar _\nloz ◊\nlozenge ◊\nlozf ⧫\nlpar (\nlparlt ⦓\nlrarr ⇆\nlrcorner ⌟\nlrhar ⇋\nlrhard ⥭\nlrm \nlrtri ⊿\nlsaquo ‹\nlscr 𝓁\nlsh ↰\nlsim ≲\nlsime ⪍\nlsimg ⪏\nlsqb [\nlsquo ‘\nlsquor ‚\nlstrok ł\nlt <\nltcc ⪦\nltcir ⩹\nltdot ⋖\nlthree ⋋\nltimes ⋉\nltlarr ⥶\nltquest ⩻\nltrPar ⦖\nltri ◃\nltrie ⊴\nltrif ◂\nlurdshar ⥊\nluruhar ⥦\nlvertneqq ≨︀\nlvnE ≨︀\nmDDot ∺\nmacr ¯\nmale ♂\nmalt ✠\nmaltese ✠\nmap ↦\nmapsto ↦\nmapstodown ↧\nmapstoleft ↤\nmapstoup ↥\nmarker ▮\nmcomma ⨩\nmcy м\nmdash —\nmeasuredangle ∡\nmfr 𝔪\nmho ℧\nmicro µ\nmid ∣\nmidast *\nmidcir ⫰\nmiddot ·\nminus −\nminusb ⊟\nminusd ∸\nminusdu ⨪\nmlcp ⫛\nmldr …\nmnplus ∓\nmodels ⊧\nmopf 𝕞\nmp ∓\nmscr 𝓂\nmstpos ∾\nmu μ\nmultimap ⊸\nmumap ⊸\nnGg ⋙̸\nnGt ≫⃒\nnGtv ≫̸\nnLeftarrow ⇍\nnLeftrightarrow ⇎\nnLl ⋘̸\nnLt ≪⃒\nnLtv ≪̸\nnRightarrow ⇏\nnVDash ⊯\nnVdash ⊮\nnabla ∇\nnacute ń\nnang ∠⃒\nnap ≉\nnapE ⩰̸\nnapid ≋̸\nnapos ʼn\nnapprox ≉\nnatur ♮\nnatural ♮\nnaturals ℕ\nnbsp \xA0\nnbump ≎̸\nnbumpe ≏̸\nncap ⩃\nncaron ň\nncedil ņ\nncong ≇\nncongdot ⩭̸\nncup ⩂\nncy н\nndash –\nne ≠\nneArr ⇗\nnearhk ⤤\nnearr ↗\nnearrow ↗\nnedot ≐̸\nnequiv ≢\nnesear ⤨\nnesim ≂̸\nnexist ∄\nnexists ∄\nnfr 𝔫\nngE ≧̸\nnge ≱\nngeq ≱\nngeqq ≧̸\nngeqslant ⩾̸\nnges ⩾̸\nngsim ≵\nngt ≯\nngtr ≯\nnhArr ⇎\nnharr ↮\nnhpar ⫲\nni ∋\nnis ⋼\nnisd ⋺\nniv ∋\nnjcy њ\nnlArr ⇍\nnlE ≦̸\nnlarr ↚\nnldr ‥\nnle ≰\nnleftarrow ↚\nnleftrightarrow ↮\nnleq ≰\nnleqq ≦̸\nnleqslant ⩽̸\nnles ⩽̸\nnless ≮\nnlsim ≴\nnlt ≮\nnltri ⋪\nnltrie ⋬\nnmid ∤\nnopf 𝕟\nnot ¬\nnotin ∉\nnotinE ⋹̸\nnotindot ⋵̸\nnotinva ∉\nnotinvb ⋷\nnotinvc ⋶\nnotni ∌\nnotniva ∌\nnotnivb ⋾\nnotnivc ⋽\nnpar ∦\nnparallel ∦\nnparsl ⫽⃥\nnpart ∂̸\nnpolint ⨔\nnpr ⊀\nnprcue ⋠\nnpre ⪯̸\nnprec ⊀\nnpreceq ⪯̸\nnrArr ⇏\nnrarr ↛\nnrarrc ⤳̸\nnrarrw ↝̸\nnrightarrow ↛\nnrtri ⋫\nnrtrie ⋭\nnsc ⊁\nnsccue ⋡\nnsce ⪰̸\nnscr 𝓃\nnshortmid ∤\nnshortparallel ∦\nnsim ≁\nnsime ≄\nnsimeq ≄\nnsmid ∤\nnspar ∦\nnsqsube ⋢\nnsqsupe ⋣\nnsub ⊄\nnsubE ⫅̸\nnsube ⊈\nnsubset ⊂⃒\nnsubseteq ⊈\nnsubseteqq ⫅̸\nnsucc ⊁\nnsucceq ⪰̸\nnsup ⊅\nnsupE ⫆̸\nnsupe ⊉\nnsupset ⊃⃒\nnsupseteq ⊉\nnsupseteqq ⫆̸\nntgl ≹\nntilde ñ\nntlg ≸\nntriangleleft ⋪\nntrianglelefteq ⋬\nntriangleright ⋫\nntrianglerighteq ⋭\nnu ν\nnum #\nnumero №\nnumsp \nnvDash ⊭\nnvHarr ⤄\nnvap ≍⃒\nnvdash ⊬\nnvge ≥⃒\nnvgt >⃒\nnvinfin ⧞\nnvlArr ⤂\nnvle ≤⃒\nnvlt <⃒\nnvltrie ⊴⃒\nnvrArr ⤃\nnvrtrie ⊵⃒\nnvsim ∼⃒\nnwArr ⇖\nnwarhk ⤣\nnwarr ↖\nnwarrow ↖\nnwnear ⤧\noS Ⓢ\noacute ó\noast ⊛\nocir ⊚\nocirc ô\nocy о\nodash ⊝\nodblac ő\nodiv ⨸\nodot ⊙\nodsold ⦼\noelig œ\nofcir ⦿\nofr 𝔬\nogon ˛\nograve ò\nogt ⧁\nohbar ⦵\nohm Ω\noint ∮\nolarr ↺\nolcir ⦾\nolcross ⦻\noline ‾\nolt ⧀\nomacr ō\nomega ω\nomicron ο\nomid ⦶\nominus ⊖\noopf 𝕠\nopar ⦷\noperp ⦹\noplus ⊕\nor ∨\norarr ↻\nord ⩝\norder ℴ\norderof ℴ\nordf ª\nordm º\norigof ⊶\noror ⩖\norslope ⩗\norv ⩛\noscr ℴ\noslash ø\nosol ⊘\notilde õ\notimes ⊗\notimesas ⨶\nouml ö\novbar ⌽\npar ∥\npara ¶\nparallel ∥\nparsim ⫳\nparsl ⫽\npart ∂\npcy п\npercnt %\nperiod .\npermil ‰\nperp ⊥\npertenk ‱\npfr 𝔭\nphi φ\nphiv ϕ\nphmmat ℳ\nphone ☎\npi π\npitchfork ⋔\npiv ϖ\nplanck ℏ\nplanckh ℎ\nplankv ℏ\nplus +\nplusacir ⨣\nplusb ⊞\npluscir ⨢\nplusdo ∔\nplusdu ⨥\npluse ⩲\nplusmn ±\nplussim ⨦\nplustwo ⨧\npm ±\npointint ⨕\npopf 𝕡\npound £\npr ≺\nprE ⪳\nprap ⪷\nprcue ≼\npre ⪯\nprec ≺\nprecapprox ⪷\npreccurlyeq ≼\npreceq ⪯\nprecnapprox ⪹\nprecneqq ⪵\nprecnsim ⋨\nprecsim ≾\nprime ′\nprimes ℙ\nprnE ⪵\nprnap ⪹\nprnsim ⋨\nprod ∏\nprofalar ⌮\nprofline ⌒\nprofsurf ⌓\nprop ∝\npropto ∝\nprsim ≾\nprurel ⊰\npscr 𝓅\npsi ψ\npuncsp \nqfr 𝔮\nqint ⨌\nqopf 𝕢\nqprime ⁗\nqscr 𝓆\nquaternions ℍ\nquatint ⨖\nquest ?\nquesteq ≟\nquot \"\nrAarr ⇛\nrArr ⇒\nrAtail ⤜\nrBarr ⤏\nrHar ⥤\nrace ∽̱\nracute ŕ\nradic √\nraemptyv ⦳\nrang ⟩\nrangd ⦒\nrange ⦥\nrangle ⟩\nraquo »\nrarr →\nrarrap ⥵\nrarrb ⇥\nrarrbfs ⤠\nrarrc ⤳\nrarrfs ⤞\nrarrhk ↪\nrarrlp ↬\nrarrpl ⥅\nrarrsim ⥴\nrarrtl ↣\nrarrw ↝\nratail ⤚\nratio ∶\nrationals ℚ\nrbarr ⤍\nrbbrk ❳\nrbrace }\nrbrack ]\nrbrke ⦌\nrbrksld ⦎\nrbrkslu ⦐\nrcaron ř\nrcedil ŗ\nrceil ⌉\nrcub }\nrcy р\nrdca ⤷\nrdldhar ⥩\nrdquo ”\nrdquor ”\nrdsh ↳\nreal ℜ\nrealine ℛ\nrealpart ℜ\nreals ℝ\nrect ▭\nreg ®\nrfisht ⥽\nrfloor ⌋\nrfr 𝔯\nrhard ⇁\nrharu ⇀\nrharul ⥬\nrho ρ\nrhov ϱ\nrightarrow →\nrightarrowtail ↣\nrightharpoondown ⇁\nrightharpoonup ⇀\nrightleftarrows ⇄\nrightleftharpoons ⇌\nrightrightarrows ⇉\nrightsquigarrow ↝\nrightthreetimes ⋌\nring ˚\nrisingdotseq ≓\nrlarr ⇄\nrlhar ⇌\nrlm \nrmoust ⎱\nrmoustache ⎱\nrnmid ⫮\nroang ⟭\nroarr ⇾\nrobrk ⟧\nropar ⦆\nropf 𝕣\nroplus ⨮\nrotimes ⨵\nrpar )\nrpargt ⦔\nrppolint ⨒\nrrarr ⇉\nrsaquo ›\nrscr 𝓇\nrsh ↱\nrsqb ]\nrsquo ’\nrsquor ’\nrthree ⋌\nrtimes ⋊\nrtri ▹\nrtrie ⊵\nrtrif ▸\nrtriltri ⧎\nruluhar ⥨\nrx ℞\nsacute ś\nsbquo ‚\nsc ≻\nscE ⪴\nscap ⪸\nscaron š\nsccue ≽\nsce ⪰\nscedil ş\nscirc ŝ\nscnE ⪶\nscnap ⪺\nscnsim ⋩\nscpolint ⨓\nscsim ≿\nscy с\nsdot ⋅\nsdotb ⊡\nsdote ⩦\nseArr ⇘\nsearhk ⤥\nsearr ↘\nsearrow ↘\nsect §\nsemi ;\nseswar ⤩\nsetminus ∖\nsetmn ∖\nsext ✶\nsfr 𝔰\nsfrown ⌢\nsharp ♯\nshchcy щ\nshcy ш\nshortmid ∣\nshortparallel ∥\nshy \nsigma σ\nsigmaf ς\nsigmav ς\nsim ∼\nsimdot ⩪\nsime ≃\nsimeq ≃\nsimg ⪞\nsimgE ⪠\nsiml ⪝\nsimlE ⪟\nsimne ≆\nsimplus ⨤\nsimrarr ⥲\nslarr ←\nsmallsetminus ∖\nsmashp ⨳\nsmeparsl ⧤\nsmid ∣\nsmile ⌣\nsmt ⪪\nsmte ⪬\nsmtes ⪬︀\nsoftcy ь\nsol /\nsolb ⧄\nsolbar ⌿\nsopf 𝕤\nspades ♠\nspadesuit ♠\nspar ∥\nsqcap ⊓\nsqcaps ⊓︀\nsqcup ⊔\nsqcups ⊔︀\nsqsub ⊏\nsqsube ⊑\nsqsubset ⊏\nsqsubseteq ⊑\nsqsup ⊐\nsqsupe ⊒\nsqsupset ⊐\nsqsupseteq ⊒\nsqu □\nsquare □\nsquarf ▪\nsquf ▪\nsrarr →\nsscr 𝓈\nssetmn ∖\nssmile ⌣\nsstarf ⋆\nstar ☆\nstarf ★\nstraightepsilon ϵ\nstraightphi ϕ\nstrns ¯\nsub ⊂\nsubE ⫅\nsubdot ⪽\nsube ⊆\nsubedot ⫃\nsubmult ⫁\nsubnE ⫋\nsubne ⊊\nsubplus ⪿\nsubrarr ⥹\nsubset ⊂\nsubseteq ⊆\nsubseteqq ⫅\nsubsetneq ⊊\nsubsetneqq ⫋\nsubsim ⫇\nsubsub ⫕\nsubsup ⫓\nsucc ≻\nsuccapprox ⪸\nsucccurlyeq ≽\nsucceq ⪰\nsuccnapprox ⪺\nsuccneqq ⪶\nsuccnsim ⋩\nsuccsim ≿\nsum ∑\nsung ♪\nsup ⊃\nsup1 ¹\nsup2 ²\nsup3 ³\nsupE ⫆\nsupdot ⪾\nsupdsub ⫘\nsupe ⊇\nsupedot ⫄\nsuphsol ⟉\nsuphsub ⫗\nsuplarr ⥻\nsupmult ⫂\nsupnE ⫌\nsupne ⊋\nsupplus ⫀\nsupset ⊃\nsupseteq ⊇\nsupseteqq ⫆\nsupsetneq ⊋\nsupsetneqq ⫌\nsupsim ⫈\nsupsub ⫔\nsupsup ⫖\nswArr ⇙\nswarhk ⤦\nswarr ↙\nswarrow ↙\nswnwar ⤪\nszlig ß\ntarget ⌖\ntau τ\ntbrk ⎴\ntcaron ť\ntcedil ţ\ntcy т\ntdot ⃛\ntelrec ⌕\ntfr 𝔱\nthere4 ∴\ntherefore ∴\ntheta θ\nthetasym ϑ\nthetav ϑ\nthickapprox ≈\nthicksim ∼\nthinsp \nthkap ≈\nthksim ∼\nthorn þ\ntilde ˜\ntimes ×\ntimesb ⊠\ntimesbar ⨱\ntimesd ⨰\ntint ∭\ntoea ⤨\ntop ⊤\ntopbot ⌶\ntopcir ⫱\ntopf 𝕥\ntopfork ⫚\ntosa ⤩\ntprime ‴\ntrade ™\ntriangle ▵\ntriangledown ▿\ntriangleleft ◃\ntrianglelefteq ⊴\ntriangleq ≜\ntriangleright ▹\ntrianglerighteq ⊵\ntridot ◬\ntrie ≜\ntriminus ⨺\ntriplus ⨹\ntrisb ⧍\ntritime ⨻\ntrpezium ⏢\ntscr 𝓉\ntscy ц\ntshcy ћ\ntstrok ŧ\ntwixt ≬\ntwoheadleftarrow ↞\ntwoheadrightarrow ↠\nuArr ⇑\nuHar ⥣\nuacute ú\nuarr ↑\nubrcy ў\nubreve ŭ\nucirc û\nucy у\nudarr ⇅\nudblac ű\nudhar ⥮\nufisht ⥾\nufr 𝔲\nugrave ù\nuharl ↿\nuharr ↾\nuhblk ▀\nulcorn ⌜\nulcorner ⌜\nulcrop ⌏\nultri ◸\numacr ū\numl ¨\nuogon ų\nuopf 𝕦\nuparrow ↑\nupdownarrow ↕\nupharpoonleft ↿\nupharpoonright ↾\nuplus ⊎\nupsi υ\nupsih ϒ\nupsilon υ\nupuparrows ⇈\nurcorn ⌝\nurcorner ⌝\nurcrop ⌎\nuring ů\nurtri ◹\nuscr 𝓊\nutdot ⋰\nutilde ũ\nutri ▵\nutrif ▴\nuuarr ⇈\nuuml ü\nuwangle ⦧\nvArr ⇕\nvBar ⫨\nvBarv ⫩\nvDash ⊨\nvangrt ⦜\nvarepsilon ϵ\nvarkappa ϰ\nvarnothing ∅\nvarphi ϕ\nvarpi ϖ\nvarpropto ∝\nvarr ↕\nvarrho ϱ\nvarsigma ς\nvarsubsetneq ⊊︀\nvarsubsetneqq ⫋︀\nvarsupsetneq ⊋︀\nvarsupsetneqq ⫌︀\nvartheta ϑ\nvartriangleleft ⊲\nvartriangleright ⊳\nvcy в\nvdash ⊢\nvee ∨\nveebar ⊻\nveeeq ≚\nvellip ⋮\nverbar |\nvert |\nvfr 𝔳\nvltri ⊲\nvnsub ⊂⃒\nvnsup ⊃⃒\nvopf 𝕧\nvprop ∝\nvrtri ⊳\nvscr 𝓋\nvsubnE ⫋︀\nvsubne ⊊︀\nvsupnE ⫌︀\nvsupne ⊋︀\nvzigzag ⦚\nwcirc ŵ\nwedbar ⩟\nwedge ∧\nwedgeq ≙\nweierp ℘\nwfr 𝔴\nwopf 𝕨\nwp ℘\nwr ≀\nwreath ≀\nwscr 𝓌\nxcap ⋂\nxcirc ◯\nxcup ⋃\nxdtri ▽\nxfr 𝔵\nxhArr ⟺\nxharr ⟷\nxi ξ\nxlArr ⟸\nxlarr ⟵\nxmap ⟼\nxnis ⋻\nxodot ⨀\nxopf 𝕩\nxoplus ⨁\nxotime ⨂\nxrArr ⟹\nxrarr ⟶\nxscr 𝓍\nxsqcup ⨆\nxuplus ⨄\nxutri △\nxvee ⋁\nxwedge ⋀\nyacute ý\nyacy я\nycirc ŷ\nycy ы\nyen ¥\nyfr 𝔶\nyicy ї\nyopf 𝕪\nyscr 𝓎\nyucy ю\nyuml ÿ\nzacute ź\nzcaron ž\nzcy з\nzdot ż\nzeetrf ℨ\nzeta ζ\nzfr 𝔷\nzhcy ж\nzigrarr ⇝\nzopf 𝕫\nzscr 𝓏\nzwj \nzwnj ";
|
|
7
|
+
export { ENTITY_TABLE };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=entity-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-table.js","names":[],"sources":["../../src/engine/entity-table.ts"],"sourcesContent":["/**\n * Every HTML5 named character reference CommonMark decodes.\n * One `name<tab>characters` per line. Generated by scripts/entities.ts; do not edit.\n */\nexport const ENTITY_TABLE =\n 'AElig\\tÆ\\nAMP\\t&\\nAacute\\tÁ\\nAbreve\\tĂ\\nAcirc\\tÂ\\nAcy\\tА\\nAfr\\t𝔄\\nAgrave\\tÀ\\nAlpha\\tΑ\\nAmacr\\tĀ\\nAnd\\t⩓\\nAogon\\tĄ\\nAopf\\t𝔸\\nApplyFunction\\t\\nAring\\tÅ\\nAscr\\t𝒜\\nAssign\\t≔\\nAtilde\\tÃ\\nAuml\\tÄ\\nBackslash\\t∖\\nBarv\\t⫧\\nBarwed\\t⌆\\nBcy\\tБ\\nBecause\\t∵\\nBernoullis\\tℬ\\nBeta\\tΒ\\nBfr\\t𝔅\\nBopf\\t𝔹\\nBreve\\t˘\\nBscr\\tℬ\\nBumpeq\\t≎\\nCHcy\\tЧ\\nCOPY\\t©\\nCacute\\tĆ\\nCap\\t⋒\\nCapitalDifferentialD\\tⅅ\\nCayleys\\tℭ\\nCcaron\\tČ\\nCcedil\\tÇ\\nCcirc\\tĈ\\nCconint\\t∰\\nCdot\\tĊ\\nCedilla\\t¸\\nCenterDot\\t·\\nCfr\\tℭ\\nChi\\tΧ\\nCircleDot\\t⊙\\nCircleMinus\\t⊖\\nCirclePlus\\t⊕\\nCircleTimes\\t⊗\\nClockwiseContourIntegral\\t∲\\nCloseCurlyDoubleQuote\\t”\\nCloseCurlyQuote\\t’\\nColon\\t∷\\nColone\\t⩴\\nCongruent\\t≡\\nConint\\t∯\\nContourIntegral\\t∮\\nCopf\\tℂ\\nCoproduct\\t∐\\nCounterClockwiseContourIntegral\\t∳\\nCross\\t⨯\\nCscr\\t𝒞\\nCup\\t⋓\\nCupCap\\t≍\\nDD\\tⅅ\\nDDotrahd\\t⤑\\nDJcy\\tЂ\\nDScy\\tЅ\\nDZcy\\tЏ\\nDagger\\t‡\\nDarr\\t↡\\nDashv\\t⫤\\nDcaron\\tĎ\\nDcy\\tД\\nDel\\t∇\\nDelta\\tΔ\\nDfr\\t𝔇\\nDiacriticalAcute\\t´\\nDiacriticalDot\\t˙\\nDiacriticalDoubleAcute\\t˝\\nDiacriticalGrave\\t`\\nDiacriticalTilde\\t˜\\nDiamond\\t⋄\\nDifferentialD\\tⅆ\\nDopf\\t𝔻\\nDot\\t¨\\nDotDot\\t⃜\\nDotEqual\\t≐\\nDoubleContourIntegral\\t∯\\nDoubleDot\\t¨\\nDoubleDownArrow\\t⇓\\nDoubleLeftArrow\\t⇐\\nDoubleLeftRightArrow\\t⇔\\nDoubleLeftTee\\t⫤\\nDoubleLongLeftArrow\\t⟸\\nDoubleLongLeftRightArrow\\t⟺\\nDoubleLongRightArrow\\t⟹\\nDoubleRightArrow\\t⇒\\nDoubleRightTee\\t⊨\\nDoubleUpArrow\\t⇑\\nDoubleUpDownArrow\\t⇕\\nDoubleVerticalBar\\t∥\\nDownArrow\\t↓\\nDownArrowBar\\t⤓\\nDownArrowUpArrow\\t⇵\\nDownBreve\\t̑\\nDownLeftRightVector\\t⥐\\nDownLeftTeeVector\\t⥞\\nDownLeftVector\\t↽\\nDownLeftVectorBar\\t⥖\\nDownRightTeeVector\\t⥟\\nDownRightVector\\t⇁\\nDownRightVectorBar\\t⥗\\nDownTee\\t⊤\\nDownTeeArrow\\t↧\\nDownarrow\\t⇓\\nDscr\\t𝒟\\nDstrok\\tĐ\\nENG\\tŊ\\nETH\\tÐ\\nEacute\\tÉ\\nEcaron\\tĚ\\nEcirc\\tÊ\\nEcy\\tЭ\\nEdot\\tĖ\\nEfr\\t𝔈\\nEgrave\\tÈ\\nElement\\t∈\\nEmacr\\tĒ\\nEmptySmallSquare\\t◻\\nEmptyVerySmallSquare\\t▫\\nEogon\\tĘ\\nEopf\\t𝔼\\nEpsilon\\tΕ\\nEqual\\t⩵\\nEqualTilde\\t≂\\nEquilibrium\\t⇌\\nEscr\\tℰ\\nEsim\\t⩳\\nEta\\tΗ\\nEuml\\tË\\nExists\\t∃\\nExponentialE\\tⅇ\\nFcy\\tФ\\nFfr\\t𝔉\\nFilledSmallSquare\\t◼\\nFilledVerySmallSquare\\t▪\\nFopf\\t𝔽\\nForAll\\t∀\\nFouriertrf\\tℱ\\nFscr\\tℱ\\nGJcy\\tЃ\\nGT\\t>\\nGamma\\tΓ\\nGammad\\tϜ\\nGbreve\\tĞ\\nGcedil\\tĢ\\nGcirc\\tĜ\\nGcy\\tГ\\nGdot\\tĠ\\nGfr\\t𝔊\\nGg\\t⋙\\nGopf\\t𝔾\\nGreaterEqual\\t≥\\nGreaterEqualLess\\t⋛\\nGreaterFullEqual\\t≧\\nGreaterGreater\\t⪢\\nGreaterLess\\t≷\\nGreaterSlantEqual\\t⩾\\nGreaterTilde\\t≳\\nGscr\\t𝒢\\nGt\\t≫\\nHARDcy\\tЪ\\nHacek\\tˇ\\nHat\\t^\\nHcirc\\tĤ\\nHfr\\tℌ\\nHilbertSpace\\tℋ\\nHopf\\tℍ\\nHorizontalLine\\t─\\nHscr\\tℋ\\nHstrok\\tĦ\\nHumpDownHump\\t≎\\nHumpEqual\\t≏\\nIEcy\\tЕ\\nIJlig\\tIJ\\nIOcy\\tЁ\\nIacute\\tÍ\\nIcirc\\tÎ\\nIcy\\tИ\\nIdot\\tİ\\nIfr\\tℑ\\nIgrave\\tÌ\\nIm\\tℑ\\nImacr\\tĪ\\nImaginaryI\\tⅈ\\nImplies\\t⇒\\nInt\\t∬\\nIntegral\\t∫\\nIntersection\\t⋂\\nInvisibleComma\\t\\nInvisibleTimes\\t\\nIogon\\tĮ\\nIopf\\t𝕀\\nIota\\tΙ\\nIscr\\tℐ\\nItilde\\tĨ\\nIukcy\\tІ\\nIuml\\tÏ\\nJcirc\\tĴ\\nJcy\\tЙ\\nJfr\\t𝔍\\nJopf\\t𝕁\\nJscr\\t𝒥\\nJsercy\\tЈ\\nJukcy\\tЄ\\nKHcy\\tХ\\nKJcy\\tЌ\\nKappa\\tΚ\\nKcedil\\tĶ\\nKcy\\tК\\nKfr\\t𝔎\\nKopf\\t𝕂\\nKscr\\t𝒦\\nLJcy\\tЉ\\nLT\\t<\\nLacute\\tĹ\\nLambda\\tΛ\\nLang\\t⟪\\nLaplacetrf\\tℒ\\nLarr\\t↞\\nLcaron\\tĽ\\nLcedil\\tĻ\\nLcy\\tЛ\\nLeftAngleBracket\\t⟨\\nLeftArrow\\t←\\nLeftArrowBar\\t⇤\\nLeftArrowRightArrow\\t⇆\\nLeftCeiling\\t⌈\\nLeftDoubleBracket\\t⟦\\nLeftDownTeeVector\\t⥡\\nLeftDownVector\\t⇃\\nLeftDownVectorBar\\t⥙\\nLeftFloor\\t⌊\\nLeftRightArrow\\t↔\\nLeftRightVector\\t⥎\\nLeftTee\\t⊣\\nLeftTeeArrow\\t↤\\nLeftTeeVector\\t⥚\\nLeftTriangle\\t⊲\\nLeftTriangleBar\\t⧏\\nLeftTriangleEqual\\t⊴\\nLeftUpDownVector\\t⥑\\nLeftUpTeeVector\\t⥠\\nLeftUpVector\\t↿\\nLeftUpVectorBar\\t⥘\\nLeftVector\\t↼\\nLeftVectorBar\\t⥒\\nLeftarrow\\t⇐\\nLeftrightarrow\\t⇔\\nLessEqualGreater\\t⋚\\nLessFullEqual\\t≦\\nLessGreater\\t≶\\nLessLess\\t⪡\\nLessSlantEqual\\t⩽\\nLessTilde\\t≲\\nLfr\\t𝔏\\nLl\\t⋘\\nLleftarrow\\t⇚\\nLmidot\\tĿ\\nLongLeftArrow\\t⟵\\nLongLeftRightArrow\\t⟷\\nLongRightArrow\\t⟶\\nLongleftarrow\\t⟸\\nLongleftrightarrow\\t⟺\\nLongrightarrow\\t⟹\\nLopf\\t𝕃\\nLowerLeftArrow\\t↙\\nLowerRightArrow\\t↘\\nLscr\\tℒ\\nLsh\\t↰\\nLstrok\\tŁ\\nLt\\t≪\\nMap\\t⤅\\nMcy\\tМ\\nMediumSpace\\t \\nMellintrf\\tℳ\\nMfr\\t𝔐\\nMinusPlus\\t∓\\nMopf\\t𝕄\\nMscr\\tℳ\\nMu\\tΜ\\nNJcy\\tЊ\\nNacute\\tŃ\\nNcaron\\tŇ\\nNcedil\\tŅ\\nNcy\\tН\\nNegativeMediumSpace\\t\\nNegativeThickSpace\\t\\nNegativeThinSpace\\t\\nNegativeVeryThinSpace\\t\\nNestedGreaterGreater\\t≫\\nNestedLessLess\\t≪\\nNewLine\\t\\n\\nNfr\\t𝔑\\nNoBreak\\t\\nNonBreakingSpace\\t \\nNopf\\tℕ\\nNot\\t⫬\\nNotCongruent\\t≢\\nNotCupCap\\t≭\\nNotDoubleVerticalBar\\t∦\\nNotElement\\t∉\\nNotEqual\\t≠\\nNotEqualTilde\\t≂̸\\nNotExists\\t∄\\nNotGreater\\t≯\\nNotGreaterEqual\\t≱\\nNotGreaterFullEqual\\t≧̸\\nNotGreaterGreater\\t≫̸\\nNotGreaterLess\\t≹\\nNotGreaterSlantEqual\\t⩾̸\\nNotGreaterTilde\\t≵\\nNotHumpDownHump\\t≎̸\\nNotHumpEqual\\t≏̸\\nNotLeftTriangle\\t⋪\\nNotLeftTriangleBar\\t⧏̸\\nNotLeftTriangleEqual\\t⋬\\nNotLess\\t≮\\nNotLessEqual\\t≰\\nNotLessGreater\\t≸\\nNotLessLess\\t≪̸\\nNotLessSlantEqual\\t⩽̸\\nNotLessTilde\\t≴\\nNotNestedGreaterGreater\\t⪢̸\\nNotNestedLessLess\\t⪡̸\\nNotPrecedes\\t⊀\\nNotPrecedesEqual\\t⪯̸\\nNotPrecedesSlantEqual\\t⋠\\nNotReverseElement\\t∌\\nNotRightTriangle\\t⋫\\nNotRightTriangleBar\\t⧐̸\\nNotRightTriangleEqual\\t⋭\\nNotSquareSubset\\t⊏̸\\nNotSquareSubsetEqual\\t⋢\\nNotSquareSuperset\\t⊐̸\\nNotSquareSupersetEqual\\t⋣\\nNotSubset\\t⊂⃒\\nNotSubsetEqual\\t⊈\\nNotSucceeds\\t⊁\\nNotSucceedsEqual\\t⪰̸\\nNotSucceedsSlantEqual\\t⋡\\nNotSucceedsTilde\\t≿̸\\nNotSuperset\\t⊃⃒\\nNotSupersetEqual\\t⊉\\nNotTilde\\t≁\\nNotTildeEqual\\t≄\\nNotTildeFullEqual\\t≇\\nNotTildeTilde\\t≉\\nNotVerticalBar\\t∤\\nNscr\\t𝒩\\nNtilde\\tÑ\\nNu\\tΝ\\nOElig\\tŒ\\nOacute\\tÓ\\nOcirc\\tÔ\\nOcy\\tО\\nOdblac\\tŐ\\nOfr\\t𝔒\\nOgrave\\tÒ\\nOmacr\\tŌ\\nOmega\\tΩ\\nOmicron\\tΟ\\nOopf\\t𝕆\\nOpenCurlyDoubleQuote\\t“\\nOpenCurlyQuote\\t‘\\nOr\\t⩔\\nOscr\\t𝒪\\nOslash\\tØ\\nOtilde\\tÕ\\nOtimes\\t⨷\\nOuml\\tÖ\\nOverBar\\t‾\\nOverBrace\\t⏞\\nOverBracket\\t⎴\\nOverParenthesis\\t⏜\\nPartialD\\t∂\\nPcy\\tП\\nPfr\\t𝔓\\nPhi\\tΦ\\nPi\\tΠ\\nPlusMinus\\t±\\nPoincareplane\\tℌ\\nPopf\\tℙ\\nPr\\t⪻\\nPrecedes\\t≺\\nPrecedesEqual\\t⪯\\nPrecedesSlantEqual\\t≼\\nPrecedesTilde\\t≾\\nPrime\\t″\\nProduct\\t∏\\nProportion\\t∷\\nProportional\\t∝\\nPscr\\t𝒫\\nPsi\\tΨ\\nQUOT\\t\"\\nQfr\\t𝔔\\nQopf\\tℚ\\nQscr\\t𝒬\\nRBarr\\t⤐\\nREG\\t®\\nRacute\\tŔ\\nRang\\t⟫\\nRarr\\t↠\\nRarrtl\\t⤖\\nRcaron\\tŘ\\nRcedil\\tŖ\\nRcy\\tР\\nRe\\tℜ\\nReverseElement\\t∋\\nReverseEquilibrium\\t⇋\\nReverseUpEquilibrium\\t⥯\\nRfr\\tℜ\\nRho\\tΡ\\nRightAngleBracket\\t⟩\\nRightArrow\\t→\\nRightArrowBar\\t⇥\\nRightArrowLeftArrow\\t⇄\\nRightCeiling\\t⌉\\nRightDoubleBracket\\t⟧\\nRightDownTeeVector\\t⥝\\nRightDownVector\\t⇂\\nRightDownVectorBar\\t⥕\\nRightFloor\\t⌋\\nRightTee\\t⊢\\nRightTeeArrow\\t↦\\nRightTeeVector\\t⥛\\nRightTriangle\\t⊳\\nRightTriangleBar\\t⧐\\nRightTriangleEqual\\t⊵\\nRightUpDownVector\\t⥏\\nRightUpTeeVector\\t⥜\\nRightUpVector\\t↾\\nRightUpVectorBar\\t⥔\\nRightVector\\t⇀\\nRightVectorBar\\t⥓\\nRightarrow\\t⇒\\nRopf\\tℝ\\nRoundImplies\\t⥰\\nRrightarrow\\t⇛\\nRscr\\tℛ\\nRsh\\t↱\\nRuleDelayed\\t⧴\\nSHCHcy\\tЩ\\nSHcy\\tШ\\nSOFTcy\\tЬ\\nSacute\\tŚ\\nSc\\t⪼\\nScaron\\tŠ\\nScedil\\tŞ\\nScirc\\tŜ\\nScy\\tС\\nSfr\\t𝔖\\nShortDownArrow\\t↓\\nShortLeftArrow\\t←\\nShortRightArrow\\t→\\nShortUpArrow\\t↑\\nSigma\\tΣ\\nSmallCircle\\t∘\\nSopf\\t𝕊\\nSqrt\\t√\\nSquare\\t□\\nSquareIntersection\\t⊓\\nSquareSubset\\t⊏\\nSquareSubsetEqual\\t⊑\\nSquareSuperset\\t⊐\\nSquareSupersetEqual\\t⊒\\nSquareUnion\\t⊔\\nSscr\\t𝒮\\nStar\\t⋆\\nSub\\t⋐\\nSubset\\t⋐\\nSubsetEqual\\t⊆\\nSucceeds\\t≻\\nSucceedsEqual\\t⪰\\nSucceedsSlantEqual\\t≽\\nSucceedsTilde\\t≿\\nSuchThat\\t∋\\nSum\\t∑\\nSup\\t⋑\\nSuperset\\t⊃\\nSupersetEqual\\t⊇\\nSupset\\t⋑\\nTHORN\\tÞ\\nTRADE\\t™\\nTSHcy\\tЋ\\nTScy\\tЦ\\nTab\\t\\t\\nTau\\tΤ\\nTcaron\\tŤ\\nTcedil\\tŢ\\nTcy\\tТ\\nTfr\\t𝔗\\nTherefore\\t∴\\nTheta\\tΘ\\nThickSpace\\t \\nThinSpace\\t \\nTilde\\t∼\\nTildeEqual\\t≃\\nTildeFullEqual\\t≅\\nTildeTilde\\t≈\\nTopf\\t𝕋\\nTripleDot\\t⃛\\nTscr\\t𝒯\\nTstrok\\tŦ\\nUacute\\tÚ\\nUarr\\t↟\\nUarrocir\\t⥉\\nUbrcy\\tЎ\\nUbreve\\tŬ\\nUcirc\\tÛ\\nUcy\\tУ\\nUdblac\\tŰ\\nUfr\\t𝔘\\nUgrave\\tÙ\\nUmacr\\tŪ\\nUnderBar\\t_\\nUnderBrace\\t⏟\\nUnderBracket\\t⎵\\nUnderParenthesis\\t⏝\\nUnion\\t⋃\\nUnionPlus\\t⊎\\nUogon\\tŲ\\nUopf\\t𝕌\\nUpArrow\\t↑\\nUpArrowBar\\t⤒\\nUpArrowDownArrow\\t⇅\\nUpDownArrow\\t↕\\nUpEquilibrium\\t⥮\\nUpTee\\t⊥\\nUpTeeArrow\\t↥\\nUparrow\\t⇑\\nUpdownarrow\\t⇕\\nUpperLeftArrow\\t↖\\nUpperRightArrow\\t↗\\nUpsi\\tϒ\\nUpsilon\\tΥ\\nUring\\tŮ\\nUscr\\t𝒰\\nUtilde\\tŨ\\nUuml\\tÜ\\nVDash\\t⊫\\nVbar\\t⫫\\nVcy\\tВ\\nVdash\\t⊩\\nVdashl\\t⫦\\nVee\\t⋁\\nVerbar\\t‖\\nVert\\t‖\\nVerticalBar\\t∣\\nVerticalLine\\t|\\nVerticalSeparator\\t❘\\nVerticalTilde\\t≀\\nVeryThinSpace\\t \\nVfr\\t𝔙\\nVopf\\t𝕍\\nVscr\\t𝒱\\nVvdash\\t⊪\\nWcirc\\tŴ\\nWedge\\t⋀\\nWfr\\t𝔚\\nWopf\\t𝕎\\nWscr\\t𝒲\\nXfr\\t𝔛\\nXi\\tΞ\\nXopf\\t𝕏\\nXscr\\t𝒳\\nYAcy\\tЯ\\nYIcy\\tЇ\\nYUcy\\tЮ\\nYacute\\tÝ\\nYcirc\\tŶ\\nYcy\\tЫ\\nYfr\\t𝔜\\nYopf\\t𝕐\\nYscr\\t𝒴\\nYuml\\tŸ\\nZHcy\\tЖ\\nZacute\\tŹ\\nZcaron\\tŽ\\nZcy\\tЗ\\nZdot\\tŻ\\nZeroWidthSpace\\t\\nZeta\\tΖ\\nZfr\\tℨ\\nZopf\\tℤ\\nZscr\\t𝒵\\naacute\\tá\\nabreve\\tă\\nac\\t∾\\nacE\\t∾̳\\nacd\\t∿\\nacirc\\tâ\\nacute\\t´\\nacy\\tа\\naelig\\tæ\\naf\\t\\nafr\\t𝔞\\nagrave\\tà\\nalefsym\\tℵ\\naleph\\tℵ\\nalpha\\tα\\namacr\\tā\\namalg\\t⨿\\namp\\t&\\nand\\t∧\\nandand\\t⩕\\nandd\\t⩜\\nandslope\\t⩘\\nandv\\t⩚\\nang\\t∠\\nange\\t⦤\\nangle\\t∠\\nangmsd\\t∡\\nangmsdaa\\t⦨\\nangmsdab\\t⦩\\nangmsdac\\t⦪\\nangmsdad\\t⦫\\nangmsdae\\t⦬\\nangmsdaf\\t⦭\\nangmsdag\\t⦮\\nangmsdah\\t⦯\\nangrt\\t∟\\nangrtvb\\t⊾\\nangrtvbd\\t⦝\\nangsph\\t∢\\nangst\\tÅ\\nangzarr\\t⍼\\naogon\\tą\\naopf\\t𝕒\\nap\\t≈\\napE\\t⩰\\napacir\\t⩯\\nape\\t≊\\napid\\t≋\\napos\\t\\'\\napprox\\t≈\\napproxeq\\t≊\\naring\\tå\\nascr\\t𝒶\\nast\\t*\\nasymp\\t≈\\nasympeq\\t≍\\natilde\\tã\\nauml\\tä\\nawconint\\t∳\\nawint\\t⨑\\nbNot\\t⫭\\nbackcong\\t≌\\nbackepsilon\\t϶\\nbackprime\\t‵\\nbacksim\\t∽\\nbacksimeq\\t⋍\\nbarvee\\t⊽\\nbarwed\\t⌅\\nbarwedge\\t⌅\\nbbrk\\t⎵\\nbbrktbrk\\t⎶\\nbcong\\t≌\\nbcy\\tб\\nbdquo\\t„\\nbecaus\\t∵\\nbecause\\t∵\\nbemptyv\\t⦰\\nbepsi\\t϶\\nbernou\\tℬ\\nbeta\\tβ\\nbeth\\tℶ\\nbetween\\t≬\\nbfr\\t𝔟\\nbigcap\\t⋂\\nbigcirc\\t◯\\nbigcup\\t⋃\\nbigodot\\t⨀\\nbigoplus\\t⨁\\nbigotimes\\t⨂\\nbigsqcup\\t⨆\\nbigstar\\t★\\nbigtriangledown\\t▽\\nbigtriangleup\\t△\\nbiguplus\\t⨄\\nbigvee\\t⋁\\nbigwedge\\t⋀\\nbkarow\\t⤍\\nblacklozenge\\t⧫\\nblacksquare\\t▪\\nblacktriangle\\t▴\\nblacktriangledown\\t▾\\nblacktriangleleft\\t◂\\nblacktriangleright\\t▸\\nblank\\t␣\\nblk12\\t▒\\nblk14\\t░\\nblk34\\t▓\\nblock\\t█\\nbne\\t=⃥\\nbnequiv\\t≡⃥\\nbnot\\t⌐\\nbopf\\t𝕓\\nbot\\t⊥\\nbottom\\t⊥\\nbowtie\\t⋈\\nboxDL\\t╗\\nboxDR\\t╔\\nboxDl\\t╖\\nboxDr\\t╓\\nboxH\\t═\\nboxHD\\t╦\\nboxHU\\t╩\\nboxHd\\t╤\\nboxHu\\t╧\\nboxUL\\t╝\\nboxUR\\t╚\\nboxUl\\t╜\\nboxUr\\t╙\\nboxV\\t║\\nboxVH\\t╬\\nboxVL\\t╣\\nboxVR\\t╠\\nboxVh\\t╫\\nboxVl\\t╢\\nboxVr\\t╟\\nboxbox\\t⧉\\nboxdL\\t╕\\nboxdR\\t╒\\nboxdl\\t┐\\nboxdr\\t┌\\nboxh\\t─\\nboxhD\\t╥\\nboxhU\\t╨\\nboxhd\\t┬\\nboxhu\\t┴\\nboxminus\\t⊟\\nboxplus\\t⊞\\nboxtimes\\t⊠\\nboxuL\\t╛\\nboxuR\\t╘\\nboxul\\t┘\\nboxur\\t└\\nboxv\\t│\\nboxvH\\t╪\\nboxvL\\t╡\\nboxvR\\t╞\\nboxvh\\t┼\\nboxvl\\t┤\\nboxvr\\t├\\nbprime\\t‵\\nbreve\\t˘\\nbrvbar\\t¦\\nbscr\\t𝒷\\nbsemi\\t⁏\\nbsim\\t∽\\nbsime\\t⋍\\nbsol\\t\\\\\\nbsolb\\t⧅\\nbsolhsub\\t⟈\\nbull\\t•\\nbullet\\t•\\nbump\\t≎\\nbumpE\\t⪮\\nbumpe\\t≏\\nbumpeq\\t≏\\ncacute\\tć\\ncap\\t∩\\ncapand\\t⩄\\ncapbrcup\\t⩉\\ncapcap\\t⩋\\ncapcup\\t⩇\\ncapdot\\t⩀\\ncaps\\t∩︀\\ncaret\\t⁁\\ncaron\\tˇ\\nccaps\\t⩍\\nccaron\\tč\\nccedil\\tç\\nccirc\\tĉ\\nccups\\t⩌\\nccupssm\\t⩐\\ncdot\\tċ\\ncedil\\t¸\\ncemptyv\\t⦲\\ncent\\t¢\\ncenterdot\\t·\\ncfr\\t𝔠\\nchcy\\tч\\ncheck\\t✓\\ncheckmark\\t✓\\nchi\\tχ\\ncir\\t○\\ncirE\\t⧃\\ncirc\\tˆ\\ncirceq\\t≗\\ncirclearrowleft\\t↺\\ncirclearrowright\\t↻\\ncircledR\\t®\\ncircledS\\tⓈ\\ncircledast\\t⊛\\ncircledcirc\\t⊚\\ncircleddash\\t⊝\\ncire\\t≗\\ncirfnint\\t⨐\\ncirmid\\t⫯\\ncirscir\\t⧂\\nclubs\\t♣\\nclubsuit\\t♣\\ncolon\\t:\\ncolone\\t≔\\ncoloneq\\t≔\\ncomma\\t,\\ncommat\\t@\\ncomp\\t∁\\ncompfn\\t∘\\ncomplement\\t∁\\ncomplexes\\tℂ\\ncong\\t≅\\ncongdot\\t⩭\\nconint\\t∮\\ncopf\\t𝕔\\ncoprod\\t∐\\ncopy\\t©\\ncopysr\\t℗\\ncrarr\\t↵\\ncross\\t✗\\ncscr\\t𝒸\\ncsub\\t⫏\\ncsube\\t⫑\\ncsup\\t⫐\\ncsupe\\t⫒\\nctdot\\t⋯\\ncudarrl\\t⤸\\ncudarrr\\t⤵\\ncuepr\\t⋞\\ncuesc\\t⋟\\ncularr\\t↶\\ncularrp\\t⤽\\ncup\\t∪\\ncupbrcap\\t⩈\\ncupcap\\t⩆\\ncupcup\\t⩊\\ncupdot\\t⊍\\ncupor\\t⩅\\ncups\\t∪︀\\ncurarr\\t↷\\ncurarrm\\t⤼\\ncurlyeqprec\\t⋞\\ncurlyeqsucc\\t⋟\\ncurlyvee\\t⋎\\ncurlywedge\\t⋏\\ncurren\\t¤\\ncurvearrowleft\\t↶\\ncurvearrowright\\t↷\\ncuvee\\t⋎\\ncuwed\\t⋏\\ncwconint\\t∲\\ncwint\\t∱\\ncylcty\\t⌭\\ndArr\\t⇓\\ndHar\\t⥥\\ndagger\\t†\\ndaleth\\tℸ\\ndarr\\t↓\\ndash\\t‐\\ndashv\\t⊣\\ndbkarow\\t⤏\\ndblac\\t˝\\ndcaron\\tď\\ndcy\\tд\\ndd\\tⅆ\\nddagger\\t‡\\nddarr\\t⇊\\nddotseq\\t⩷\\ndeg\\t°\\ndelta\\tδ\\ndemptyv\\t⦱\\ndfisht\\t⥿\\ndfr\\t𝔡\\ndharl\\t⇃\\ndharr\\t⇂\\ndiam\\t⋄\\ndiamond\\t⋄\\ndiamondsuit\\t♦\\ndiams\\t♦\\ndie\\t¨\\ndigamma\\tϝ\\ndisin\\t⋲\\ndiv\\t÷\\ndivide\\t÷\\ndivideontimes\\t⋇\\ndivonx\\t⋇\\ndjcy\\tђ\\ndlcorn\\t⌞\\ndlcrop\\t⌍\\ndollar\\t$\\ndopf\\t𝕕\\ndot\\t˙\\ndoteq\\t≐\\ndoteqdot\\t≑\\ndotminus\\t∸\\ndotplus\\t∔\\ndotsquare\\t⊡\\ndoublebarwedge\\t⌆\\ndownarrow\\t↓\\ndowndownarrows\\t⇊\\ndownharpoonleft\\t⇃\\ndownharpoonright\\t⇂\\ndrbkarow\\t⤐\\ndrcorn\\t⌟\\ndrcrop\\t⌌\\ndscr\\t𝒹\\ndscy\\tѕ\\ndsol\\t⧶\\ndstrok\\tđ\\ndtdot\\t⋱\\ndtri\\t▿\\ndtrif\\t▾\\nduarr\\t⇵\\nduhar\\t⥯\\ndwangle\\t⦦\\ndzcy\\tџ\\ndzigrarr\\t⟿\\neDDot\\t⩷\\neDot\\t≑\\neacute\\té\\neaster\\t⩮\\necaron\\tě\\necir\\t≖\\necirc\\tê\\necolon\\t≕\\necy\\tэ\\nedot\\tė\\nee\\tⅇ\\nefDot\\t≒\\nefr\\t𝔢\\neg\\t⪚\\negrave\\tè\\negs\\t⪖\\negsdot\\t⪘\\nel\\t⪙\\nelinters\\t⏧\\nell\\tℓ\\nels\\t⪕\\nelsdot\\t⪗\\nemacr\\tē\\nempty\\t∅\\nemptyset\\t∅\\nemptyv\\t∅\\nemsp\\t \\nemsp13\\t \\nemsp14\\t \\neng\\tŋ\\nensp\\t \\neogon\\tę\\neopf\\t𝕖\\nepar\\t⋕\\neparsl\\t⧣\\neplus\\t⩱\\nepsi\\tε\\nepsilon\\tε\\nepsiv\\tϵ\\neqcirc\\t≖\\neqcolon\\t≕\\neqsim\\t≂\\neqslantgtr\\t⪖\\neqslantless\\t⪕\\nequals\\t=\\nequest\\t≟\\nequiv\\t≡\\nequivDD\\t⩸\\neqvparsl\\t⧥\\nerDot\\t≓\\nerarr\\t⥱\\nescr\\tℯ\\nesdot\\t≐\\nesim\\t≂\\neta\\tη\\neth\\tð\\neuml\\të\\neuro\\t€\\nexcl\\t!\\nexist\\t∃\\nexpectation\\tℰ\\nexponentiale\\tⅇ\\nfallingdotseq\\t≒\\nfcy\\tф\\nfemale\\t♀\\nffilig\\tffi\\nfflig\\tff\\nffllig\\tffl\\nffr\\t𝔣\\nfilig\\tfi\\nfjlig\\tfj\\nflat\\t♭\\nfllig\\tfl\\nfltns\\t▱\\nfnof\\tƒ\\nfopf\\t𝕗\\nforall\\t∀\\nfork\\t⋔\\nforkv\\t⫙\\nfpartint\\t⨍\\nfrac12\\t½\\nfrac13\\t⅓\\nfrac14\\t¼\\nfrac15\\t⅕\\nfrac16\\t⅙\\nfrac18\\t⅛\\nfrac23\\t⅔\\nfrac25\\t⅖\\nfrac34\\t¾\\nfrac35\\t⅗\\nfrac38\\t⅜\\nfrac45\\t⅘\\nfrac56\\t⅚\\nfrac58\\t⅝\\nfrac78\\t⅞\\nfrasl\\t⁄\\nfrown\\t⌢\\nfscr\\t𝒻\\ngE\\t≧\\ngEl\\t⪌\\ngacute\\tǵ\\ngamma\\tγ\\ngammad\\tϝ\\ngap\\t⪆\\ngbreve\\tğ\\ngcirc\\tĝ\\ngcy\\tг\\ngdot\\tġ\\nge\\t≥\\ngel\\t⋛\\ngeq\\t≥\\ngeqq\\t≧\\ngeqslant\\t⩾\\nges\\t⩾\\ngescc\\t⪩\\ngesdot\\t⪀\\ngesdoto\\t⪂\\ngesdotol\\t⪄\\ngesl\\t⋛︀\\ngesles\\t⪔\\ngfr\\t𝔤\\ngg\\t≫\\nggg\\t⋙\\ngimel\\tℷ\\ngjcy\\tѓ\\ngl\\t≷\\nglE\\t⪒\\ngla\\t⪥\\nglj\\t⪤\\ngnE\\t≩\\ngnap\\t⪊\\ngnapprox\\t⪊\\ngne\\t⪈\\ngneq\\t⪈\\ngneqq\\t≩\\ngnsim\\t⋧\\ngopf\\t𝕘\\ngrave\\t`\\ngscr\\tℊ\\ngsim\\t≳\\ngsime\\t⪎\\ngsiml\\t⪐\\ngt\\t>\\ngtcc\\t⪧\\ngtcir\\t⩺\\ngtdot\\t⋗\\ngtlPar\\t⦕\\ngtquest\\t⩼\\ngtrapprox\\t⪆\\ngtrarr\\t⥸\\ngtrdot\\t⋗\\ngtreqless\\t⋛\\ngtreqqless\\t⪌\\ngtrless\\t≷\\ngtrsim\\t≳\\ngvertneqq\\t≩︀\\ngvnE\\t≩︀\\nhArr\\t⇔\\nhairsp\\t \\nhalf\\t½\\nhamilt\\tℋ\\nhardcy\\tъ\\nharr\\t↔\\nharrcir\\t⥈\\nharrw\\t↭\\nhbar\\tℏ\\nhcirc\\tĥ\\nhearts\\t♥\\nheartsuit\\t♥\\nhellip\\t…\\nhercon\\t⊹\\nhfr\\t𝔥\\nhksearow\\t⤥\\nhkswarow\\t⤦\\nhoarr\\t⇿\\nhomtht\\t∻\\nhookleftarrow\\t↩\\nhookrightarrow\\t↪\\nhopf\\t𝕙\\nhorbar\\t―\\nhscr\\t𝒽\\nhslash\\tℏ\\nhstrok\\tħ\\nhybull\\t⁃\\nhyphen\\t‐\\niacute\\tí\\nic\\t\\nicirc\\tî\\nicy\\tи\\niecy\\tе\\niexcl\\t¡\\niff\\t⇔\\nifr\\t𝔦\\nigrave\\tì\\nii\\tⅈ\\niiiint\\t⨌\\niiint\\t∭\\niinfin\\t⧜\\niiota\\t℩\\nijlig\\tij\\nimacr\\tī\\nimage\\tℑ\\nimagline\\tℐ\\nimagpart\\tℑ\\nimath\\tı\\nimof\\t⊷\\nimped\\tƵ\\nin\\t∈\\nincare\\t℅\\ninfin\\t∞\\ninfintie\\t⧝\\ninodot\\tı\\nint\\t∫\\nintcal\\t⊺\\nintegers\\tℤ\\nintercal\\t⊺\\nintlarhk\\t⨗\\nintprod\\t⨼\\niocy\\tё\\niogon\\tį\\niopf\\t𝕚\\niota\\tι\\niprod\\t⨼\\niquest\\t¿\\niscr\\t𝒾\\nisin\\t∈\\nisinE\\t⋹\\nisindot\\t⋵\\nisins\\t⋴\\nisinsv\\t⋳\\nisinv\\t∈\\nit\\t\\nitilde\\tĩ\\niukcy\\tі\\niuml\\tï\\njcirc\\tĵ\\njcy\\tй\\njfr\\t𝔧\\njmath\\tȷ\\njopf\\t𝕛\\njscr\\t𝒿\\njsercy\\tј\\njukcy\\tє\\nkappa\\tκ\\nkappav\\tϰ\\nkcedil\\tķ\\nkcy\\tк\\nkfr\\t𝔨\\nkgreen\\tĸ\\nkhcy\\tх\\nkjcy\\tќ\\nkopf\\t𝕜\\nkscr\\t𝓀\\nlAarr\\t⇚\\nlArr\\t⇐\\nlAtail\\t⤛\\nlBarr\\t⤎\\nlE\\t≦\\nlEg\\t⪋\\nlHar\\t⥢\\nlacute\\tĺ\\nlaemptyv\\t⦴\\nlagran\\tℒ\\nlambda\\tλ\\nlang\\t⟨\\nlangd\\t⦑\\nlangle\\t⟨\\nlap\\t⪅\\nlaquo\\t«\\nlarr\\t←\\nlarrb\\t⇤\\nlarrbfs\\t⤟\\nlarrfs\\t⤝\\nlarrhk\\t↩\\nlarrlp\\t↫\\nlarrpl\\t⤹\\nlarrsim\\t⥳\\nlarrtl\\t↢\\nlat\\t⪫\\nlatail\\t⤙\\nlate\\t⪭\\nlates\\t⪭︀\\nlbarr\\t⤌\\nlbbrk\\t❲\\nlbrace\\t{\\nlbrack\\t[\\nlbrke\\t⦋\\nlbrksld\\t⦏\\nlbrkslu\\t⦍\\nlcaron\\tľ\\nlcedil\\tļ\\nlceil\\t⌈\\nlcub\\t{\\nlcy\\tл\\nldca\\t⤶\\nldquo\\t“\\nldquor\\t„\\nldrdhar\\t⥧\\nldrushar\\t⥋\\nldsh\\t↲\\nle\\t≤\\nleftarrow\\t←\\nleftarrowtail\\t↢\\nleftharpoondown\\t↽\\nleftharpoonup\\t↼\\nleftleftarrows\\t⇇\\nleftrightarrow\\t↔\\nleftrightarrows\\t⇆\\nleftrightharpoons\\t⇋\\nleftrightsquigarrow\\t↭\\nleftthreetimes\\t⋋\\nleg\\t⋚\\nleq\\t≤\\nleqq\\t≦\\nleqslant\\t⩽\\nles\\t⩽\\nlescc\\t⪨\\nlesdot\\t⩿\\nlesdoto\\t⪁\\nlesdotor\\t⪃\\nlesg\\t⋚︀\\nlesges\\t⪓\\nlessapprox\\t⪅\\nlessdot\\t⋖\\nlesseqgtr\\t⋚\\nlesseqqgtr\\t⪋\\nlessgtr\\t≶\\nlesssim\\t≲\\nlfisht\\t⥼\\nlfloor\\t⌊\\nlfr\\t𝔩\\nlg\\t≶\\nlgE\\t⪑\\nlhard\\t↽\\nlharu\\t↼\\nlharul\\t⥪\\nlhblk\\t▄\\nljcy\\tљ\\nll\\t≪\\nllarr\\t⇇\\nllcorner\\t⌞\\nllhard\\t⥫\\nlltri\\t◺\\nlmidot\\tŀ\\nlmoust\\t⎰\\nlmoustache\\t⎰\\nlnE\\t≨\\nlnap\\t⪉\\nlnapprox\\t⪉\\nlne\\t⪇\\nlneq\\t⪇\\nlneqq\\t≨\\nlnsim\\t⋦\\nloang\\t⟬\\nloarr\\t⇽\\nlobrk\\t⟦\\nlongleftarrow\\t⟵\\nlongleftrightarrow\\t⟷\\nlongmapsto\\t⟼\\nlongrightarrow\\t⟶\\nlooparrowleft\\t↫\\nlooparrowright\\t↬\\nlopar\\t⦅\\nlopf\\t𝕝\\nloplus\\t⨭\\nlotimes\\t⨴\\nlowast\\t∗\\nlowbar\\t_\\nloz\\t◊\\nlozenge\\t◊\\nlozf\\t⧫\\nlpar\\t(\\nlparlt\\t⦓\\nlrarr\\t⇆\\nlrcorner\\t⌟\\nlrhar\\t⇋\\nlrhard\\t⥭\\nlrm\\t\\nlrtri\\t⊿\\nlsaquo\\t‹\\nlscr\\t𝓁\\nlsh\\t↰\\nlsim\\t≲\\nlsime\\t⪍\\nlsimg\\t⪏\\nlsqb\\t[\\nlsquo\\t‘\\nlsquor\\t‚\\nlstrok\\tł\\nlt\\t<\\nltcc\\t⪦\\nltcir\\t⩹\\nltdot\\t⋖\\nlthree\\t⋋\\nltimes\\t⋉\\nltlarr\\t⥶\\nltquest\\t⩻\\nltrPar\\t⦖\\nltri\\t◃\\nltrie\\t⊴\\nltrif\\t◂\\nlurdshar\\t⥊\\nluruhar\\t⥦\\nlvertneqq\\t≨︀\\nlvnE\\t≨︀\\nmDDot\\t∺\\nmacr\\t¯\\nmale\\t♂\\nmalt\\t✠\\nmaltese\\t✠\\nmap\\t↦\\nmapsto\\t↦\\nmapstodown\\t↧\\nmapstoleft\\t↤\\nmapstoup\\t↥\\nmarker\\t▮\\nmcomma\\t⨩\\nmcy\\tм\\nmdash\\t—\\nmeasuredangle\\t∡\\nmfr\\t𝔪\\nmho\\t℧\\nmicro\\tµ\\nmid\\t∣\\nmidast\\t*\\nmidcir\\t⫰\\nmiddot\\t·\\nminus\\t−\\nminusb\\t⊟\\nminusd\\t∸\\nminusdu\\t⨪\\nmlcp\\t⫛\\nmldr\\t…\\nmnplus\\t∓\\nmodels\\t⊧\\nmopf\\t𝕞\\nmp\\t∓\\nmscr\\t𝓂\\nmstpos\\t∾\\nmu\\tμ\\nmultimap\\t⊸\\nmumap\\t⊸\\nnGg\\t⋙̸\\nnGt\\t≫⃒\\nnGtv\\t≫̸\\nnLeftarrow\\t⇍\\nnLeftrightarrow\\t⇎\\nnLl\\t⋘̸\\nnLt\\t≪⃒\\nnLtv\\t≪̸\\nnRightarrow\\t⇏\\nnVDash\\t⊯\\nnVdash\\t⊮\\nnabla\\t∇\\nnacute\\tń\\nnang\\t∠⃒\\nnap\\t≉\\nnapE\\t⩰̸\\nnapid\\t≋̸\\nnapos\\tʼn\\nnapprox\\t≉\\nnatur\\t♮\\nnatural\\t♮\\nnaturals\\tℕ\\nnbsp\\t \\nnbump\\t≎̸\\nnbumpe\\t≏̸\\nncap\\t⩃\\nncaron\\tň\\nncedil\\tņ\\nncong\\t≇\\nncongdot\\t⩭̸\\nncup\\t⩂\\nncy\\tн\\nndash\\t–\\nne\\t≠\\nneArr\\t⇗\\nnearhk\\t⤤\\nnearr\\t↗\\nnearrow\\t↗\\nnedot\\t≐̸\\nnequiv\\t≢\\nnesear\\t⤨\\nnesim\\t≂̸\\nnexist\\t∄\\nnexists\\t∄\\nnfr\\t𝔫\\nngE\\t≧̸\\nnge\\t≱\\nngeq\\t≱\\nngeqq\\t≧̸\\nngeqslant\\t⩾̸\\nnges\\t⩾̸\\nngsim\\t≵\\nngt\\t≯\\nngtr\\t≯\\nnhArr\\t⇎\\nnharr\\t↮\\nnhpar\\t⫲\\nni\\t∋\\nnis\\t⋼\\nnisd\\t⋺\\nniv\\t∋\\nnjcy\\tњ\\nnlArr\\t⇍\\nnlE\\t≦̸\\nnlarr\\t↚\\nnldr\\t‥\\nnle\\t≰\\nnleftarrow\\t↚\\nnleftrightarrow\\t↮\\nnleq\\t≰\\nnleqq\\t≦̸\\nnleqslant\\t⩽̸\\nnles\\t⩽̸\\nnless\\t≮\\nnlsim\\t≴\\nnlt\\t≮\\nnltri\\t⋪\\nnltrie\\t⋬\\nnmid\\t∤\\nnopf\\t𝕟\\nnot\\t¬\\nnotin\\t∉\\nnotinE\\t⋹̸\\nnotindot\\t⋵̸\\nnotinva\\t∉\\nnotinvb\\t⋷\\nnotinvc\\t⋶\\nnotni\\t∌\\nnotniva\\t∌\\nnotnivb\\t⋾\\nnotnivc\\t⋽\\nnpar\\t∦\\nnparallel\\t∦\\nnparsl\\t⫽⃥\\nnpart\\t∂̸\\nnpolint\\t⨔\\nnpr\\t⊀\\nnprcue\\t⋠\\nnpre\\t⪯̸\\nnprec\\t⊀\\nnpreceq\\t⪯̸\\nnrArr\\t⇏\\nnrarr\\t↛\\nnrarrc\\t⤳̸\\nnrarrw\\t↝̸\\nnrightarrow\\t↛\\nnrtri\\t⋫\\nnrtrie\\t⋭\\nnsc\\t⊁\\nnsccue\\t⋡\\nnsce\\t⪰̸\\nnscr\\t𝓃\\nnshortmid\\t∤\\nnshortparallel\\t∦\\nnsim\\t≁\\nnsime\\t≄\\nnsimeq\\t≄\\nnsmid\\t∤\\nnspar\\t∦\\nnsqsube\\t⋢\\nnsqsupe\\t⋣\\nnsub\\t⊄\\nnsubE\\t⫅̸\\nnsube\\t⊈\\nnsubset\\t⊂⃒\\nnsubseteq\\t⊈\\nnsubseteqq\\t⫅̸\\nnsucc\\t⊁\\nnsucceq\\t⪰̸\\nnsup\\t⊅\\nnsupE\\t⫆̸\\nnsupe\\t⊉\\nnsupset\\t⊃⃒\\nnsupseteq\\t⊉\\nnsupseteqq\\t⫆̸\\nntgl\\t≹\\nntilde\\tñ\\nntlg\\t≸\\nntriangleleft\\t⋪\\nntrianglelefteq\\t⋬\\nntriangleright\\t⋫\\nntrianglerighteq\\t⋭\\nnu\\tν\\nnum\\t#\\nnumero\\t№\\nnumsp\\t \\nnvDash\\t⊭\\nnvHarr\\t⤄\\nnvap\\t≍⃒\\nnvdash\\t⊬\\nnvge\\t≥⃒\\nnvgt\\t>⃒\\nnvinfin\\t⧞\\nnvlArr\\t⤂\\nnvle\\t≤⃒\\nnvlt\\t<⃒\\nnvltrie\\t⊴⃒\\nnvrArr\\t⤃\\nnvrtrie\\t⊵⃒\\nnvsim\\t∼⃒\\nnwArr\\t⇖\\nnwarhk\\t⤣\\nnwarr\\t↖\\nnwarrow\\t↖\\nnwnear\\t⤧\\noS\\tⓈ\\noacute\\tó\\noast\\t⊛\\nocir\\t⊚\\nocirc\\tô\\nocy\\tо\\nodash\\t⊝\\nodblac\\tő\\nodiv\\t⨸\\nodot\\t⊙\\nodsold\\t⦼\\noelig\\tœ\\nofcir\\t⦿\\nofr\\t𝔬\\nogon\\t˛\\nograve\\tò\\nogt\\t⧁\\nohbar\\t⦵\\nohm\\tΩ\\noint\\t∮\\nolarr\\t↺\\nolcir\\t⦾\\nolcross\\t⦻\\noline\\t‾\\nolt\\t⧀\\nomacr\\tō\\nomega\\tω\\nomicron\\tο\\nomid\\t⦶\\nominus\\t⊖\\noopf\\t𝕠\\nopar\\t⦷\\noperp\\t⦹\\noplus\\t⊕\\nor\\t∨\\norarr\\t↻\\nord\\t⩝\\norder\\tℴ\\norderof\\tℴ\\nordf\\tª\\nordm\\tº\\norigof\\t⊶\\noror\\t⩖\\norslope\\t⩗\\norv\\t⩛\\noscr\\tℴ\\noslash\\tø\\nosol\\t⊘\\notilde\\tõ\\notimes\\t⊗\\notimesas\\t⨶\\nouml\\tö\\novbar\\t⌽\\npar\\t∥\\npara\\t¶\\nparallel\\t∥\\nparsim\\t⫳\\nparsl\\t⫽\\npart\\t∂\\npcy\\tп\\npercnt\\t%\\nperiod\\t.\\npermil\\t‰\\nperp\\t⊥\\npertenk\\t‱\\npfr\\t𝔭\\nphi\\tφ\\nphiv\\tϕ\\nphmmat\\tℳ\\nphone\\t☎\\npi\\tπ\\npitchfork\\t⋔\\npiv\\tϖ\\nplanck\\tℏ\\nplanckh\\tℎ\\nplankv\\tℏ\\nplus\\t+\\nplusacir\\t⨣\\nplusb\\t⊞\\npluscir\\t⨢\\nplusdo\\t∔\\nplusdu\\t⨥\\npluse\\t⩲\\nplusmn\\t±\\nplussim\\t⨦\\nplustwo\\t⨧\\npm\\t±\\npointint\\t⨕\\npopf\\t𝕡\\npound\\t£\\npr\\t≺\\nprE\\t⪳\\nprap\\t⪷\\nprcue\\t≼\\npre\\t⪯\\nprec\\t≺\\nprecapprox\\t⪷\\npreccurlyeq\\t≼\\npreceq\\t⪯\\nprecnapprox\\t⪹\\nprecneqq\\t⪵\\nprecnsim\\t⋨\\nprecsim\\t≾\\nprime\\t′\\nprimes\\tℙ\\nprnE\\t⪵\\nprnap\\t⪹\\nprnsim\\t⋨\\nprod\\t∏\\nprofalar\\t⌮\\nprofline\\t⌒\\nprofsurf\\t⌓\\nprop\\t∝\\npropto\\t∝\\nprsim\\t≾\\nprurel\\t⊰\\npscr\\t𝓅\\npsi\\tψ\\npuncsp\\t \\nqfr\\t𝔮\\nqint\\t⨌\\nqopf\\t𝕢\\nqprime\\t⁗\\nqscr\\t𝓆\\nquaternions\\tℍ\\nquatint\\t⨖\\nquest\\t?\\nquesteq\\t≟\\nquot\\t\"\\nrAarr\\t⇛\\nrArr\\t⇒\\nrAtail\\t⤜\\nrBarr\\t⤏\\nrHar\\t⥤\\nrace\\t∽̱\\nracute\\tŕ\\nradic\\t√\\nraemptyv\\t⦳\\nrang\\t⟩\\nrangd\\t⦒\\nrange\\t⦥\\nrangle\\t⟩\\nraquo\\t»\\nrarr\\t→\\nrarrap\\t⥵\\nrarrb\\t⇥\\nrarrbfs\\t⤠\\nrarrc\\t⤳\\nrarrfs\\t⤞\\nrarrhk\\t↪\\nrarrlp\\t↬\\nrarrpl\\t⥅\\nrarrsim\\t⥴\\nrarrtl\\t↣\\nrarrw\\t↝\\nratail\\t⤚\\nratio\\t∶\\nrationals\\tℚ\\nrbarr\\t⤍\\nrbbrk\\t❳\\nrbrace\\t}\\nrbrack\\t]\\nrbrke\\t⦌\\nrbrksld\\t⦎\\nrbrkslu\\t⦐\\nrcaron\\tř\\nrcedil\\tŗ\\nrceil\\t⌉\\nrcub\\t}\\nrcy\\tр\\nrdca\\t⤷\\nrdldhar\\t⥩\\nrdquo\\t”\\nrdquor\\t”\\nrdsh\\t↳\\nreal\\tℜ\\nrealine\\tℛ\\nrealpart\\tℜ\\nreals\\tℝ\\nrect\\t▭\\nreg\\t®\\nrfisht\\t⥽\\nrfloor\\t⌋\\nrfr\\t𝔯\\nrhard\\t⇁\\nrharu\\t⇀\\nrharul\\t⥬\\nrho\\tρ\\nrhov\\tϱ\\nrightarrow\\t→\\nrightarrowtail\\t↣\\nrightharpoondown\\t⇁\\nrightharpoonup\\t⇀\\nrightleftarrows\\t⇄\\nrightleftharpoons\\t⇌\\nrightrightarrows\\t⇉\\nrightsquigarrow\\t↝\\nrightthreetimes\\t⋌\\nring\\t˚\\nrisingdotseq\\t≓\\nrlarr\\t⇄\\nrlhar\\t⇌\\nrlm\\t\\nrmoust\\t⎱\\nrmoustache\\t⎱\\nrnmid\\t⫮\\nroang\\t⟭\\nroarr\\t⇾\\nrobrk\\t⟧\\nropar\\t⦆\\nropf\\t𝕣\\nroplus\\t⨮\\nrotimes\\t⨵\\nrpar\\t)\\nrpargt\\t⦔\\nrppolint\\t⨒\\nrrarr\\t⇉\\nrsaquo\\t›\\nrscr\\t𝓇\\nrsh\\t↱\\nrsqb\\t]\\nrsquo\\t’\\nrsquor\\t’\\nrthree\\t⋌\\nrtimes\\t⋊\\nrtri\\t▹\\nrtrie\\t⊵\\nrtrif\\t▸\\nrtriltri\\t⧎\\nruluhar\\t⥨\\nrx\\t℞\\nsacute\\tś\\nsbquo\\t‚\\nsc\\t≻\\nscE\\t⪴\\nscap\\t⪸\\nscaron\\tš\\nsccue\\t≽\\nsce\\t⪰\\nscedil\\tş\\nscirc\\tŝ\\nscnE\\t⪶\\nscnap\\t⪺\\nscnsim\\t⋩\\nscpolint\\t⨓\\nscsim\\t≿\\nscy\\tс\\nsdot\\t⋅\\nsdotb\\t⊡\\nsdote\\t⩦\\nseArr\\t⇘\\nsearhk\\t⤥\\nsearr\\t↘\\nsearrow\\t↘\\nsect\\t§\\nsemi\\t;\\nseswar\\t⤩\\nsetminus\\t∖\\nsetmn\\t∖\\nsext\\t✶\\nsfr\\t𝔰\\nsfrown\\t⌢\\nsharp\\t♯\\nshchcy\\tщ\\nshcy\\tш\\nshortmid\\t∣\\nshortparallel\\t∥\\nshy\\t\\nsigma\\tσ\\nsigmaf\\tς\\nsigmav\\tς\\nsim\\t∼\\nsimdot\\t⩪\\nsime\\t≃\\nsimeq\\t≃\\nsimg\\t⪞\\nsimgE\\t⪠\\nsiml\\t⪝\\nsimlE\\t⪟\\nsimne\\t≆\\nsimplus\\t⨤\\nsimrarr\\t⥲\\nslarr\\t←\\nsmallsetminus\\t∖\\nsmashp\\t⨳\\nsmeparsl\\t⧤\\nsmid\\t∣\\nsmile\\t⌣\\nsmt\\t⪪\\nsmte\\t⪬\\nsmtes\\t⪬︀\\nsoftcy\\tь\\nsol\\t/\\nsolb\\t⧄\\nsolbar\\t⌿\\nsopf\\t𝕤\\nspades\\t♠\\nspadesuit\\t♠\\nspar\\t∥\\nsqcap\\t⊓\\nsqcaps\\t⊓︀\\nsqcup\\t⊔\\nsqcups\\t⊔︀\\nsqsub\\t⊏\\nsqsube\\t⊑\\nsqsubset\\t⊏\\nsqsubseteq\\t⊑\\nsqsup\\t⊐\\nsqsupe\\t⊒\\nsqsupset\\t⊐\\nsqsupseteq\\t⊒\\nsqu\\t□\\nsquare\\t□\\nsquarf\\t▪\\nsquf\\t▪\\nsrarr\\t→\\nsscr\\t𝓈\\nssetmn\\t∖\\nssmile\\t⌣\\nsstarf\\t⋆\\nstar\\t☆\\nstarf\\t★\\nstraightepsilon\\tϵ\\nstraightphi\\tϕ\\nstrns\\t¯\\nsub\\t⊂\\nsubE\\t⫅\\nsubdot\\t⪽\\nsube\\t⊆\\nsubedot\\t⫃\\nsubmult\\t⫁\\nsubnE\\t⫋\\nsubne\\t⊊\\nsubplus\\t⪿\\nsubrarr\\t⥹\\nsubset\\t⊂\\nsubseteq\\t⊆\\nsubseteqq\\t⫅\\nsubsetneq\\t⊊\\nsubsetneqq\\t⫋\\nsubsim\\t⫇\\nsubsub\\t⫕\\nsubsup\\t⫓\\nsucc\\t≻\\nsuccapprox\\t⪸\\nsucccurlyeq\\t≽\\nsucceq\\t⪰\\nsuccnapprox\\t⪺\\nsuccneqq\\t⪶\\nsuccnsim\\t⋩\\nsuccsim\\t≿\\nsum\\t∑\\nsung\\t♪\\nsup\\t⊃\\nsup1\\t¹\\nsup2\\t²\\nsup3\\t³\\nsupE\\t⫆\\nsupdot\\t⪾\\nsupdsub\\t⫘\\nsupe\\t⊇\\nsupedot\\t⫄\\nsuphsol\\t⟉\\nsuphsub\\t⫗\\nsuplarr\\t⥻\\nsupmult\\t⫂\\nsupnE\\t⫌\\nsupne\\t⊋\\nsupplus\\t⫀\\nsupset\\t⊃\\nsupseteq\\t⊇\\nsupseteqq\\t⫆\\nsupsetneq\\t⊋\\nsupsetneqq\\t⫌\\nsupsim\\t⫈\\nsupsub\\t⫔\\nsupsup\\t⫖\\nswArr\\t⇙\\nswarhk\\t⤦\\nswarr\\t↙\\nswarrow\\t↙\\nswnwar\\t⤪\\nszlig\\tß\\ntarget\\t⌖\\ntau\\tτ\\ntbrk\\t⎴\\ntcaron\\tť\\ntcedil\\tţ\\ntcy\\tт\\ntdot\\t⃛\\ntelrec\\t⌕\\ntfr\\t𝔱\\nthere4\\t∴\\ntherefore\\t∴\\ntheta\\tθ\\nthetasym\\tϑ\\nthetav\\tϑ\\nthickapprox\\t≈\\nthicksim\\t∼\\nthinsp\\t \\nthkap\\t≈\\nthksim\\t∼\\nthorn\\tþ\\ntilde\\t˜\\ntimes\\t×\\ntimesb\\t⊠\\ntimesbar\\t⨱\\ntimesd\\t⨰\\ntint\\t∭\\ntoea\\t⤨\\ntop\\t⊤\\ntopbot\\t⌶\\ntopcir\\t⫱\\ntopf\\t𝕥\\ntopfork\\t⫚\\ntosa\\t⤩\\ntprime\\t‴\\ntrade\\t™\\ntriangle\\t▵\\ntriangledown\\t▿\\ntriangleleft\\t◃\\ntrianglelefteq\\t⊴\\ntriangleq\\t≜\\ntriangleright\\t▹\\ntrianglerighteq\\t⊵\\ntridot\\t◬\\ntrie\\t≜\\ntriminus\\t⨺\\ntriplus\\t⨹\\ntrisb\\t⧍\\ntritime\\t⨻\\ntrpezium\\t⏢\\ntscr\\t𝓉\\ntscy\\tц\\ntshcy\\tћ\\ntstrok\\tŧ\\ntwixt\\t≬\\ntwoheadleftarrow\\t↞\\ntwoheadrightarrow\\t↠\\nuArr\\t⇑\\nuHar\\t⥣\\nuacute\\tú\\nuarr\\t↑\\nubrcy\\tў\\nubreve\\tŭ\\nucirc\\tû\\nucy\\tу\\nudarr\\t⇅\\nudblac\\tű\\nudhar\\t⥮\\nufisht\\t⥾\\nufr\\t𝔲\\nugrave\\tù\\nuharl\\t↿\\nuharr\\t↾\\nuhblk\\t▀\\nulcorn\\t⌜\\nulcorner\\t⌜\\nulcrop\\t⌏\\nultri\\t◸\\numacr\\tū\\numl\\t¨\\nuogon\\tų\\nuopf\\t𝕦\\nuparrow\\t↑\\nupdownarrow\\t↕\\nupharpoonleft\\t↿\\nupharpoonright\\t↾\\nuplus\\t⊎\\nupsi\\tυ\\nupsih\\tϒ\\nupsilon\\tυ\\nupuparrows\\t⇈\\nurcorn\\t⌝\\nurcorner\\t⌝\\nurcrop\\t⌎\\nuring\\tů\\nurtri\\t◹\\nuscr\\t𝓊\\nutdot\\t⋰\\nutilde\\tũ\\nutri\\t▵\\nutrif\\t▴\\nuuarr\\t⇈\\nuuml\\tü\\nuwangle\\t⦧\\nvArr\\t⇕\\nvBar\\t⫨\\nvBarv\\t⫩\\nvDash\\t⊨\\nvangrt\\t⦜\\nvarepsilon\\tϵ\\nvarkappa\\tϰ\\nvarnothing\\t∅\\nvarphi\\tϕ\\nvarpi\\tϖ\\nvarpropto\\t∝\\nvarr\\t↕\\nvarrho\\tϱ\\nvarsigma\\tς\\nvarsubsetneq\\t⊊︀\\nvarsubsetneqq\\t⫋︀\\nvarsupsetneq\\t⊋︀\\nvarsupsetneqq\\t⫌︀\\nvartheta\\tϑ\\nvartriangleleft\\t⊲\\nvartriangleright\\t⊳\\nvcy\\tв\\nvdash\\t⊢\\nvee\\t∨\\nveebar\\t⊻\\nveeeq\\t≚\\nvellip\\t⋮\\nverbar\\t|\\nvert\\t|\\nvfr\\t𝔳\\nvltri\\t⊲\\nvnsub\\t⊂⃒\\nvnsup\\t⊃⃒\\nvopf\\t𝕧\\nvprop\\t∝\\nvrtri\\t⊳\\nvscr\\t𝓋\\nvsubnE\\t⫋︀\\nvsubne\\t⊊︀\\nvsupnE\\t⫌︀\\nvsupne\\t⊋︀\\nvzigzag\\t⦚\\nwcirc\\tŵ\\nwedbar\\t⩟\\nwedge\\t∧\\nwedgeq\\t≙\\nweierp\\t℘\\nwfr\\t𝔴\\nwopf\\t𝕨\\nwp\\t℘\\nwr\\t≀\\nwreath\\t≀\\nwscr\\t𝓌\\nxcap\\t⋂\\nxcirc\\t◯\\nxcup\\t⋃\\nxdtri\\t▽\\nxfr\\t𝔵\\nxhArr\\t⟺\\nxharr\\t⟷\\nxi\\tξ\\nxlArr\\t⟸\\nxlarr\\t⟵\\nxmap\\t⟼\\nxnis\\t⋻\\nxodot\\t⨀\\nxopf\\t𝕩\\nxoplus\\t⨁\\nxotime\\t⨂\\nxrArr\\t⟹\\nxrarr\\t⟶\\nxscr\\t𝓍\\nxsqcup\\t⨆\\nxuplus\\t⨄\\nxutri\\t△\\nxvee\\t⋁\\nxwedge\\t⋀\\nyacute\\tý\\nyacy\\tя\\nycirc\\tŷ\\nycy\\tы\\nyen\\t¥\\nyfr\\t𝔶\\nyicy\\tї\\nyopf\\t𝕪\\nyscr\\t𝓎\\nyucy\\tю\\nyuml\\tÿ\\nzacute\\tź\\nzcaron\\tž\\nzcy\\tз\\nzdot\\tż\\nzeetrf\\tℨ\\nzeta\\tζ\\nzfr\\t𝔷\\nzhcy\\tж\\nzigrarr\\t⇝\\nzopf\\t𝕫\\nzscr\\t𝓏\\nzwj\\t\\nzwnj\\t'\n"],"mappings":";;;;;AAIA,MAAa,eACX"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Node } from "./types.js";
|
|
2
|
+
export declare const escapeHtml: (text: string) => string;
|
|
3
|
+
export interface HtmlOptions {
|
|
4
|
+
/** Applies GFM's tag filter to raw HTML. */
|
|
5
|
+
tagFilter?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const toHtml: (root: Node, options?: HtmlOptions) => string;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { normalizeUri } from "./entities.js";
|
|
2
|
+
// src/engine/html.ts
|
|
3
|
+
/**
|
|
4
|
+
* The tree as HTML text, in the form the CommonMark and GFM specs print their examples: what the
|
|
5
|
+
* conformance tests compare, and what a page without React can put in a document.
|
|
6
|
+
*
|
|
7
|
+
* Raw HTML in the source is passed through as written. A page that shows text it did not write
|
|
8
|
+
* must sanitize the result; `<Markdown>` does so on its own.
|
|
9
|
+
*/
|
|
10
|
+
const reEscape = /[&<>"]/g;
|
|
11
|
+
const ESCAPES = {
|
|
12
|
+
"&": "&",
|
|
13
|
+
"<": "<",
|
|
14
|
+
">": ">",
|
|
15
|
+
"\"": """
|
|
16
|
+
};
|
|
17
|
+
const escapeHtml = (text) => reEscape.test(text) ? text.replace(reEscape, (char) => ESCAPES[char]) : text;
|
|
18
|
+
/** GFM's tag filter: the tags that change how the rest of a page is read are shown as text. */
|
|
19
|
+
const reFiltered = /<(?=\/?(?:title|textarea|style|xmp|iframe|noembed|noframes|script|plaintext)(?:[\s/>]|$))/gi;
|
|
20
|
+
const toHtml = (root, options = {}) => {
|
|
21
|
+
let out = "";
|
|
22
|
+
/**
|
|
23
|
+
* The last character written. `cr` asks for it after every block, and reading it from `out`
|
|
24
|
+
* would make the engine flatten the string built so far each time: quadratic in the document.
|
|
25
|
+
*/
|
|
26
|
+
let lastChar = 10;
|
|
27
|
+
const put = (text) => {
|
|
28
|
+
if (text === "") return;
|
|
29
|
+
out += text;
|
|
30
|
+
lastChar = text.charCodeAt(text.length - 1);
|
|
31
|
+
};
|
|
32
|
+
/** Starts a new line unless the output is already at the start of one (or of the document). */
|
|
33
|
+
const cr = () => {
|
|
34
|
+
if (lastChar !== 10) put("\n");
|
|
35
|
+
};
|
|
36
|
+
const raw = (value) => options.tagFilter ? value.replace(reFiltered, "<") : value;
|
|
37
|
+
/** Whether the nodes being written are text-level: HTML among them is not a block. */
|
|
38
|
+
let inline = false;
|
|
39
|
+
const all = (nodes, tight) => {
|
|
40
|
+
if (nodes) for (const node of nodes) one(node, tight);
|
|
41
|
+
};
|
|
42
|
+
const phrasing = (nodes) => {
|
|
43
|
+
const was = inline;
|
|
44
|
+
inline = true;
|
|
45
|
+
all(nodes, false);
|
|
46
|
+
inline = was;
|
|
47
|
+
};
|
|
48
|
+
const one = (node, tight) => {
|
|
49
|
+
switch (node.type) {
|
|
50
|
+
case "root":
|
|
51
|
+
all(node.children, false);
|
|
52
|
+
break;
|
|
53
|
+
case "text":
|
|
54
|
+
put(escapeHtml(node.value ?? ""));
|
|
55
|
+
break;
|
|
56
|
+
case "break":
|
|
57
|
+
put("<br />\n");
|
|
58
|
+
break;
|
|
59
|
+
case "emphasis":
|
|
60
|
+
put("<em>");
|
|
61
|
+
all(node.children, false);
|
|
62
|
+
put("</em>");
|
|
63
|
+
break;
|
|
64
|
+
case "strong":
|
|
65
|
+
put("<strong>");
|
|
66
|
+
all(node.children, false);
|
|
67
|
+
put("</strong>");
|
|
68
|
+
break;
|
|
69
|
+
case "delete":
|
|
70
|
+
put("<del>");
|
|
71
|
+
all(node.children, false);
|
|
72
|
+
put("</del>");
|
|
73
|
+
break;
|
|
74
|
+
case "inlineCode":
|
|
75
|
+
put(`<code>${escapeHtml(node.value ?? "")}</code>`);
|
|
76
|
+
break;
|
|
77
|
+
case "link":
|
|
78
|
+
put(`<a href="${escapeHtml(node.url ?? "")}"`);
|
|
79
|
+
if (node.title) put(` title="${escapeHtml(node.title)}"`);
|
|
80
|
+
put(">");
|
|
81
|
+
all(node.children, false);
|
|
82
|
+
put("</a>");
|
|
83
|
+
break;
|
|
84
|
+
case "image":
|
|
85
|
+
put(`<img src="${escapeHtml(node.url ?? "")}" alt="${escapeHtml(node.alt ?? "")}"`);
|
|
86
|
+
if (node.title) put(` title="${escapeHtml(node.title)}"`);
|
|
87
|
+
put(" />");
|
|
88
|
+
break;
|
|
89
|
+
case "footnoteReference": {
|
|
90
|
+
const id = normalizeUri(node.label ?? "");
|
|
91
|
+
const nth = (node.occurrence ?? 1) > 1 ? `-${node.occurrence}` : "";
|
|
92
|
+
put(`<sup class="footnote-ref"><a href="#fn-${id}" id="fnref-${id}${nth}" data-footnote-ref>${node.index}</a></sup>`);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case "footnotes":
|
|
96
|
+
cr();
|
|
97
|
+
put("<section class=\"footnotes\" data-footnotes>\n<ol>\n");
|
|
98
|
+
all(node.children, false);
|
|
99
|
+
put("</ol>\n</section>\n");
|
|
100
|
+
break;
|
|
101
|
+
case "footnoteDefinition": {
|
|
102
|
+
const id = normalizeUri(node.label ?? "");
|
|
103
|
+
let back = "";
|
|
104
|
+
for (let nth = 1; nth <= (node.count ?? 1); nth++) {
|
|
105
|
+
const suffix = nth > 1 ? `-${nth}` : "";
|
|
106
|
+
back += `${nth > 1 ? " " : ""}<a href="#fnref-${id}${suffix}" class="footnote-backref" data-footnote-backref data-footnote-backref-idx="${node.index}${suffix}" aria-label="Back to reference ${node.index}${suffix}">↩${nth > 1 ? `<sup class="footnote-ref">${nth}</sup>` : ""}</a>`;
|
|
107
|
+
}
|
|
108
|
+
put(`<li id="fn-${id}">\n`);
|
|
109
|
+
const children = node.children ?? [];
|
|
110
|
+
const last = children[children.length - 1];
|
|
111
|
+
for (const child of children) if (child === last && child.type === "paragraph") {
|
|
112
|
+
put("<p>");
|
|
113
|
+
phrasing(child.children);
|
|
114
|
+
put(` ${back}</p>\n`);
|
|
115
|
+
} else one(child, false);
|
|
116
|
+
if (last === void 0 || last.type !== "paragraph") put(`${back}\n`);
|
|
117
|
+
put("</li>\n");
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case "paragraph":
|
|
121
|
+
if (tight) phrasing(node.children);
|
|
122
|
+
else {
|
|
123
|
+
cr();
|
|
124
|
+
put("<p>");
|
|
125
|
+
phrasing(node.children);
|
|
126
|
+
put("</p>\n");
|
|
127
|
+
}
|
|
128
|
+
break;
|
|
129
|
+
case "heading":
|
|
130
|
+
cr();
|
|
131
|
+
put(`<h${node.depth}>`);
|
|
132
|
+
phrasing(node.children);
|
|
133
|
+
put(`</h${node.depth}>\n`);
|
|
134
|
+
break;
|
|
135
|
+
case "thematicBreak":
|
|
136
|
+
cr();
|
|
137
|
+
put("<hr />\n");
|
|
138
|
+
break;
|
|
139
|
+
case "blockquote":
|
|
140
|
+
cr();
|
|
141
|
+
put("<blockquote>\n");
|
|
142
|
+
all(node.children, false);
|
|
143
|
+
cr();
|
|
144
|
+
put("</blockquote>\n");
|
|
145
|
+
break;
|
|
146
|
+
case "code":
|
|
147
|
+
cr();
|
|
148
|
+
put(node.lang ? `<pre><code class="language-${escapeHtml(node.lang)}">` : "<pre><code>");
|
|
149
|
+
put(`${escapeHtml(node.value ?? "")}</code></pre>\n`);
|
|
150
|
+
break;
|
|
151
|
+
case "html":
|
|
152
|
+
if (inline) put(raw(node.value ?? ""));
|
|
153
|
+
else {
|
|
154
|
+
cr();
|
|
155
|
+
put(`${raw(node.value ?? "")}\n`);
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
case "list": {
|
|
159
|
+
const tag = node.ordered ? "ol" : "ul";
|
|
160
|
+
cr();
|
|
161
|
+
put(node.ordered && node.start !== 1 ? `<ol start="${node.start}">\n` : `<${tag}>\n`);
|
|
162
|
+
all(node.children, node.spread === false);
|
|
163
|
+
cr();
|
|
164
|
+
put(`</${tag}>\n`);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case "listItem":
|
|
168
|
+
put("<li>");
|
|
169
|
+
if (node.checked !== void 0) put(`<input ${node.checked ? "checked=\"\" " : ""}disabled="" type="checkbox"> `);
|
|
170
|
+
all(node.children, tight);
|
|
171
|
+
put("</li>\n");
|
|
172
|
+
break;
|
|
173
|
+
case "table": {
|
|
174
|
+
const rows = node.children ?? [];
|
|
175
|
+
cr();
|
|
176
|
+
put("<table>\n<thead>\n");
|
|
177
|
+
if (rows[0]) one(rows[0], false);
|
|
178
|
+
put("</thead>\n");
|
|
179
|
+
if (rows.length > 1) {
|
|
180
|
+
put("<tbody>\n");
|
|
181
|
+
for (let index = 1; index < rows.length; index++) one(rows[index], false);
|
|
182
|
+
put("</tbody>\n");
|
|
183
|
+
}
|
|
184
|
+
put("</table>\n");
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case "tableRow":
|
|
188
|
+
put("<tr>\n");
|
|
189
|
+
all(node.children, false);
|
|
190
|
+
put("</tr>\n");
|
|
191
|
+
break;
|
|
192
|
+
case "tableCell": {
|
|
193
|
+
const tag = node.header ? "th" : "td";
|
|
194
|
+
put(node.cellAlign ? `<${tag} align="${node.cellAlign}">` : `<${tag}>`);
|
|
195
|
+
phrasing(node.children);
|
|
196
|
+
put(`</${tag}>\n`);
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
default: all(node.children, tight);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
one(root, false);
|
|
203
|
+
return out;
|
|
204
|
+
};
|
|
205
|
+
export { escapeHtml, toHtml };
|
|
206
|
+
|
|
207
|
+
//# sourceMappingURL=html.js.map
|