mdrefine 0.2.1 → 0.2.2
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/CHANGELOG.md +40 -0
- package/CONTRIBUTING.md +13 -0
- package/README.md +1 -1
- package/dist/core/engine.js +73 -10
- package/dist/core/engine.js.map +1 -1
- package/dist/rules/blocks.js +10 -3
- package/dist/rules/blocks.js.map +1 -1
- package/dist/rules/dialects.js +12 -2
- package/dist/rules/dialects.js.map +1 -1
- package/dist/rules/lists.js +17 -0
- package/dist/rules/lists.js.map +1 -1
- package/dist/rules/style.js +49 -19
- package/dist/rules/style.js.map +1 -1
- package/dist/syntax/misread-lists.d.ts +46 -0
- package/dist/syntax/misread-lists.js +100 -0
- package/dist/syntax/misread-lists.js.map +1 -0
- package/dist/syntax/parse.d.ts +27 -3
- package/dist/syntax/parse.js +52 -6
- package/dist/syntax/parse.js.map +1 -1
- package/docs/design.md +43 -21
- package/docs/dialects.md +13 -10
- package/docs/plugins.md +4 -4
- package/docs/quick-start.md +1 -1
- package/docs/rules.md +50 -17
- package/package.json +4 -1
package/dist/rules/lists.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/rules/lists.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Blockquote, FootnoteDefinition, List, ListItem, Nodes, Parents } from \"mdast\";\nimport type { Document, Finding, Rule } from \"../core/types.js\";\nimport { optionsSchema } from \"./style.js\";\n\n/**\n * The list rules edit the markers of list items and the indentation that the\n * items' lines need. Each rule proposes one edit for each group of adjacent\n * lists outside other lists, which holds all its changes there, nested lists\n * included, so that an engine that applies some edits and holds others back\n * never applies half of a list's changes: a marker moved without its item's\n * lines would move the item's content.\n *\n * A list item's lines need as many columns of indentation as its marker,\n * the marker's indentation, and the space after it take up, counted from\n * where its container's part of the line starts. Lines with less are lazy\n * continuations of a paragraph. Changing those columns moves the item's\n * lines with them, and where that would change what a line belongs to, the\n * rule leaves the list as written.\n */\n\ntype Container = Blockquote | ListItem | FootnoteDefinition;\n\n/** A physical line of the source, without its line break. */\ninterface Line {\n start: number;\n end: number;\n}\n\ninterface Item {\n node: ListItem;\n list: ListGroup;\n index: number;\n /** The line indexes of the marker and of the item's last line. */\n first: number;\n last: number;\n marker: number;\n markerEnd: number;\n /** The number of an ordered item as written. */\n digits: string;\n /** The end of the whitespace after the marker. */\n spaceEnd: number;\n markerColumn: number;\n markerEndColumn: number;\n /** The columns of whitespace after the marker. */\n spacing: number;\n /** Whether nothing but whitespace follows the marker on its line. */\n blankFirst: boolean;\n /**\n * Where the item's part of its marker line starts, after the prefixes of\n * its containers, the columns of indentation before the marker, and the\n * columns that the item's other lines need from there. Undefined when the\n * marker line cannot be read exactly, such as when a tab spans a\n * container's prefix.\n */\n start?: number;\n offset?: number;\n width?: number;\n}\ninterface ListGroup {\n node: List;\n items: Item[];\n /** The nearest block quote, list item, or footnote definition around it. */\n parent: Container | undefined;\n /** The list directly before it, which its first line could continue. */\n previous: ListGroup | undefined;\n}\n/** Adjacent lists outside other lists, with the lists nested in them. */\ninterface Unit {\n lists: ListGroup[];\n /** Runs of adjacent sibling lists of one kind, in the unit and nested in it. */\n runs: ListGroup[][];\n valid: boolean;\n}\ninterface ContainerInfo {\n parent: Container | undefined;\n first: number;\n last: number;\n}\n/**\n * How one line passes through one of its containers. `content`: the line\n * continues inside the container from `end`. `blank`: only whitespace\n * follows `start`. `lazy`: the line lacks the container's prefix and\n * continues a paragraph. `unsupported`: a tab spans the prefix's end, or the\n * source does not have the expected shape.\n */\ninterface Level {\n node: Container;\n kind: \"content\" | \"blank\" | \"lazy\" | \"unsupported\";\n start: number;\n startColumn: number;\n end: number;\n endColumn: number;\n /** The columns of whitespace after `start`, for blank and lazy lines. */\n indent: number;\n}\ninterface Matched {\n chain: Container[];\n levels: Level[];\n}\ninterface Analysis {\n source: string;\n lines: Line[];\n units: Unit[];\n items: Map<ListItem, Item>;\n containers: Map<Container, ContainerInfo>;\n /** Later lines of inline code, math, and other inline nodes that keep their whitespace. */\n sensitive: Set<number>;\n match(line: number): Matched;\n}\ninterface Op {\n start: number;\n end: number;\n text: string;\n /** What the change does, for the finding when it is the first one. */\n message?: string;\n}\n\nconst tabStop = (column: number) => column + 4 - (column % 4);\nconst isSpace = (character: string | undefined) => character === \" \" || character === \"\\t\";\n/** The column reached from `column` at `from` after the characters up to `to`. */\nfunction columnAt(source: string, from: number, to: number, column: number): number {\n for (let at = from; at < to; at++) column = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n return column;\n}\nfunction splitLines(source: string): Line[] {\n const lines: Line[] = [];\n let start = 0;\n for (const match of source.matchAll(/\\r\\n|\\r|\\n/g)) {\n lines.push({ start, end: match.index });\n start = match.index + match[0].length;\n }\n lines.push({ start, end: source.length });\n return lines;\n}\nconst located = (node: Nodes) =>\n node.position?.start.offset !== undefined && node.position.end.offset !== undefined;\nconst isContainer = (node: Nodes): node is Container =>\n node.type === \"blockquote\" || node.type === \"listItem\" || node.type === \"footnoteDefinition\";\n\nconst analyses = new WeakMap<Document, Analysis>();\n/** The lists of a document and the means to read their lines, shared by the list rules. */\nfunction analyze(document: Document): Analysis {\n const known = analyses.get(document);\n if (known) return known;\n const { source } = document;\n const lines = splitLines(source);\n const units: Unit[] = [];\n const items = new Map<ListItem, Item>();\n const containers = new Map<Container, ContainerInfo>();\n const sensitive = new Set<number>();\n /** The innermost container of each line, by line index. */\n const innermost: (Container | undefined)[] = [];\n\n const visit = (node: Parents, parent: Container | undefined, unit: Unit | undefined) => {\n const children = node.children as Nodes[];\n let group: Unit | undefined;\n let run: ListGroup[] | undefined;\n let before: ListGroup | undefined;\n for (let index = 0; index < children.length; index++) {\n const child = children[index]!;\n if (!located(child)) {\n if (unit) unit.valid = false;\n continue;\n }\n const firstLine = child.position!.start.line - 1;\n let lastLine = child.position!.end.line - 1;\n // A list item in a footnote definition can end past the next item's\n // start; a block ends before the next one starts.\n const next = children[index + 1];\n if (next && located(next)) lastLine = Math.min(lastLine, next.position!.start.line - 2);\n if (parent) lastLine = Math.min(lastLine, containers.get(parent)!.last);\n if (child.type === \"list\") {\n let target = unit;\n if (!target) {\n if (children[index - 1]?.type !== \"list\" || !group) {\n group = { lists: [], runs: [], valid: true };\n units.push(group);\n }\n target = group;\n }\n const previous = children[index - 1];\n if (!run || previous?.type !== \"list\" || previous.ordered !== child.ordered) {\n run = [];\n target.runs.push(run);\n }\n const list: ListGroup = {\n node: child,\n items: [],\n parent,\n previous: children[index - 1]?.type === \"list\" ? before : undefined,\n };\n before = list;\n run.push(list);\n target.lists.push(list);\n for (const [position, entry] of child.children.entries()) {\n const item = readItem(entry, list, position, target);\n if (item) list.items.push(item);\n }\n visit(child, parent, target);\n continue;\n }\n run = undefined;\n if (isContainer(child)) {\n containers.set(child, { parent, first: firstLine, last: Math.max(firstLine, lastLine) });\n for (let line = firstLine; line <= lastLine; line++) innermost[line] = child;\n visit(child, child, unit);\n continue;\n }\n // Code and other blocks that hold text as written have no inline nodes.\n if (unit && !(\"value\" in child)) collectInline(child, unit);\n }\n };\n /**\n * The later lines of nodes that keep the whitespace at the start of their\n * lines, such as code spans, math, and titles, and nodes without positions.\n */\n const collectInline = (node: Nodes, unit: Unit) => {\n if (!located(node)) {\n unit.valid = false;\n return;\n }\n const keeps =\n node.type === \"definition\" ||\n (\"title\" in node && typeof node.title === \"string\") ||\n (\"value\" in node &&\n typeof node.value === \"string\" &&\n node.type !== \"text\" &&\n node.type !== \"html\");\n if (keeps)\n for (let line = node.position!.start.line; line < node.position!.end.line; line++)\n sensitive.add(line);\n if (\"children\" in node)\n for (const child of node.children as Nodes[]) collectInline(child, unit);\n };\n const readItem = (\n node: ListItem,\n list: ListGroup,\n index: number,\n unit: Unit,\n ): Item | undefined => {\n if (!located(node)) {\n unit.valid = false;\n return undefined;\n }\n const marker = node.position!.start.offset!;\n const first = node.position!.start.line - 1;\n const line = lines[first]!;\n let markerEnd = marker;\n let digits = \"\";\n if (list.node.ordered) {\n digits = /^\\d{1,9}/.exec(source.slice(marker, marker + 10))?.[0] ?? \"\";\n markerEnd = marker + digits.length;\n if (!digits || (source[markerEnd] !== \".\" && source[markerEnd] !== \")\")) unit.valid = false;\n markerEnd++;\n } else {\n if (!\"-+*\".includes(source[marker] ?? \"_\")) unit.valid = false;\n markerEnd++;\n }\n let spaceEnd = markerEnd;\n while (spaceEnd < line.end && isSpace(source[spaceEnd])) spaceEnd++;\n const markerColumn = columnAt(source, line.start, marker, 0);\n const markerEndColumn = markerColumn + markerEnd - marker;\n const item: Item = {\n node,\n list,\n index,\n first,\n last: first,\n marker,\n markerEnd,\n digits,\n spaceEnd,\n markerColumn,\n markerEndColumn,\n spacing: columnAt(source, markerEnd, spaceEnd, markerEndColumn) - markerEndColumn,\n blankFirst: spaceEnd === line.end,\n };\n items.set(node, item);\n return item;\n };\n visit(document.tree, undefined, undefined);\n for (const item of items.values()) item.last = containers.get(item.node)?.last ?? item.first;\n for (const unit of units)\n for (const list of unit.lists)\n for (const item of list.items)\n if (item.last < item.first || (list.items[item.index + 1]?.first ?? Infinity) <= item.last)\n unit.valid = false;\n\n const enclosing = (line: number) => {\n const chain: Container[] = [];\n for (let node = innermost[line]; node; node = containers.get(node)?.parent) chain.unshift(node);\n return chain;\n };\n const chains = new Map<number, Container[]>();\n /** A line with nothing but whitespace and `>`, which starts no container. */\n const blank = (line: number) => {\n const { start, end } = lines[line]!;\n const node = innermost[line];\n return (\n (!node || containers.get(node)!.first !== line) && /^[ \\t>]*$/.test(source.slice(start, end))\n );\n };\n /**\n * The containers that a line passes through. A blank line belongs to every\n * container that the line before it is in, until a later line closes them,\n * though the tree ends a container at its last line with content: in a list\n * item that ends with indented code, a blank line's spaces beyond the code's\n * indentation become part of the code.\n */\n const open = (line: number): Container[] => {\n let from = line;\n while (from > 0 && !chains.has(from) && !chains.has(from - 1) && blank(from)) from--;\n for (let at = from; at <= line; at++) {\n if (chains.has(at)) continue;\n let chain = enclosing(at);\n const before = at > 0 && blank(at) ? chains.get(at - 1) : undefined;\n if (before && chain.every((node, index) => before[index] === node)) chain = before;\n chains.set(at, chain);\n }\n return chains.get(line)!;\n };\n const memo = new Map<number, Matched>();\n const match = (line: number): Matched => {\n const known = memo.get(line);\n if (known) return known;\n const chain = open(line);\n const levels: Level[] = [];\n const result = { chain, levels };\n memo.set(line, result);\n let at = lines[line]!.start;\n let column = 0;\n for (const node of chain) {\n const level = matchLevel(node, line, at, column);\n levels.push(level);\n if (level.kind !== \"content\") break;\n at = level.end;\n column = level.endColumn;\n }\n return result;\n };\n /** How `line`, from `start` at `column`, passes through the prefix of `node`. */\n const matchLevel = (node: Container, line: number, start: number, column: number): Level => {\n const { end: lineEnd } = lines[line]!;\n const level: Level = {\n node,\n kind: \"unsupported\",\n start,\n startColumn: column,\n end: start,\n endColumn: column,\n indent: 0,\n };\n const info = containers.get(node)!;\n if (node.type === \"listItem\") {\n const item = items.get(node);\n if (!item) return level;\n if (line === item.first) {\n if (!/^[ \\t]*$/.test(source.slice(start, item.marker))) return level;\n const offset = item.markerColumn - column;\n if (offset > 3) return level;\n const content =\n item.blankFirst || item.spacing >= 5\n ? item.markerEndColumn + 1\n : item.markerEndColumn + item.spacing;\n item.start = start;\n item.offset = offset;\n item.width = content - column;\n if (item.blankFirst) return { ...level, kind: \"content\", end: lineEnd, endColumn: content };\n if (item.spacing >= 5) {\n // A tab right after the marker gives one of its columns to the marker.\n if (source[item.markerEnd] !== \" \") return level;\n return { ...level, kind: \"content\", end: item.markerEnd + 1, endColumn: content };\n }\n return { ...level, kind: \"content\", end: item.spaceEnd, endColumn: content };\n }\n if (item.width === undefined) match(item.first);\n if (item.width === undefined) return level;\n return indented(level, item.width, lineEnd);\n }\n if (node.type === \"blockquote\") {\n let at = start;\n let reached = column;\n if (line === info.first) at = node.position!.start.offset!;\n else\n while (at < lineEnd && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(reached) : reached + 1;\n if (next - column > 3) break;\n reached = next;\n at++;\n }\n if (source[at] !== \">\" || !/^[ \\t]*$/.test(source.slice(start, at)))\n return /^[ \\t]*$/.test(source.slice(start, lineEnd))\n ? { ...level, kind: \"blank\", indent: columnAt(source, start, lineEnd, column) - column }\n : line === info.first\n ? level\n : { ...level, kind: \"lazy\", indent: columnAt(source, start, at, column) - column };\n reached = columnAt(source, start, at, column) + 1;\n at++;\n if (source[at] === \"\\t\") return level;\n if (source[at] === \" \") {\n at++;\n reached++;\n }\n return { ...level, kind: \"content\", end: at, endColumn: reached };\n }\n // A footnote definition: its first line's content starts with its first\n // block, and its other lines need four columns.\n if (line === info.first) {\n const child = node.children[0];\n const end =\n child && located(child) && child.position!.start.line - 1 === line\n ? child.position!.start.offset!\n : lineEnd;\n return {\n ...level,\n kind: \"content\",\n end,\n endColumn: columnAt(source, start, end, column),\n };\n }\n return indented(level, 4, lineEnd);\n };\n /** A line that needs `width` columns of indentation to continue a container. */\n const indented = (level: Level, width: number, lineEnd: number): Level => {\n let at = level.start;\n let column = level.startColumn;\n if (/^[ \\t]*$/.test(source.slice(at, lineEnd)))\n return {\n ...level,\n kind: \"blank\",\n indent: columnAt(source, at, lineEnd, column) - column,\n };\n while (column - level.startColumn < width && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n if (next - level.startColumn > width) return level;\n column = next;\n at++;\n }\n if (column - level.startColumn < width)\n return { ...level, kind: \"lazy\", indent: column - level.startColumn };\n return { ...level, kind: \"content\", end: at, endColumn: column };\n };\n const analysis = { source, lines, units, items, containers, sensitive, match };\n analyses.set(document, analysis);\n return analysis;\n}\n\n/** A tab among the whitespace and container markers that start the rest of a line. */\nfunction structuralTab(source: string, from: number, to: number): boolean {\n const prefix = /^(?:[ \\t>]|(?:[-+*]|\\d{1,9}[.)])(?=[ \\t]|$))*/.exec(source.slice(from, to))![0];\n return prefix.includes(\"\\t\");\n}\nconst onlySpaces = (source: string, from: number, to: number) =>\n from <= to && /^ *$/.test(source.slice(from, to));\n/**\n * Whether a lazy line can join its item: once the item needs fewer columns,\n * the line may have enough and continue the item's paragraph from inside it.\n * Text that starts with a letter, or a number that is no list marker, does\n * that; anything else could start a block there, and inline code or math\n * would keep the indentation that the line no longer has.\n */\nfunction lazySafe(analysis: Analysis, line: number, level: Level): boolean {\n const { source, lines } = analysis;\n const text = source.slice(level.start, lines[line]!.end).trimStart();\n return (\n !analysis.sensitive.has(line) &&\n !text.includes(\"|\") &&\n /^(?:\\p{L}|[0-9]+(?![.)0-9]))/u.test(text)\n );\n}\n/**\n * Whether the item's column changes are possible without moving content: an\n * item's lines must be read exactly, and none of the lines around it may\n * start or stop belonging to it. `delta` gives the change of each item's\n * column, `minimum` the fewest columns that an item can need once the list\n * rules are done, and `siblings` says whether the other items of the list\n * move to the start of their container's part of the line too.\n */\nfunction feasible(\n analysis: Analysis,\n list: ListGroup,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n for (const item of list.items) analysis.match(item.first);\n for (const item of list.items) {\n const change = delta.get(item) ?? 0;\n if (!change) continue;\n if (item.width === undefined) return false;\n for (const line of linesWithBlanks(analysis, item.first + 1, item.last)) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(item.node);\n if (at < 0) {\n if (line > item.last) continue;\n return false;\n }\n const level = levels[at];\n if (!level) {\n const last = levels.at(-1);\n if (!last || last.kind === \"unsupported\") return false;\n if (last.kind === \"blank\" && !blankFeasible(analysis, line, chain, levels.length - 1))\n return false;\n continue;\n }\n if (level.kind === \"unsupported\") return false;\n if (level.kind === \"blank\") {\n if (!blankFeasible(analysis, line, chain, at)) return false;\n continue;\n }\n if (level.kind === \"lazy\") {\n if (change < 0 && level.indent >= minimum(item) && !lazySafe(analysis, line, level))\n return false;\n continue;\n }\n const lineEnd = lines[line]!.end;\n if (mode === \"start\") {\n if (change < 0 && !onlySpaces(source, level.start, level.start - change)) return false;\n if (structuralTab(source, level.start, lineEnd)) return false;\n } else {\n if (change < 0 && !onlySpaces(source, level.end + change, level.end)) return false;\n if (structuralTab(source, level.end + Math.min(0, change), lineEnd)) return false;\n }\n }\n if (change < 0 && !captureFree(analysis, item, change, minimum, siblings)) return false;\n }\n return true;\n}\n/**\n * The items and footnote definitions whose prefixes a blank line's\n * whitespace stands for, from the level where the line is blank down to the\n * deepest container still open there; a block quote that the line has no `>`\n * for ends there. Undefined when an item's columns are not known.\n */\nfunction blankPath(analysis: Analysis, chain: Container[], from: number) {\n const path: (Item | undefined)[] = [];\n let width = 0;\n for (const node of chain.slice(from)) {\n if (node.type === \"blockquote\") break;\n if (node.type === \"footnoteDefinition\") {\n path.push(undefined);\n width += 4;\n continue;\n }\n const item = analysis.items.get(node);\n if (item?.width === undefined) return undefined;\n path.push(item);\n width += item.width;\n }\n return { items: path, width };\n}\n/** Whether a blank line can keep its whitespace beyond its containers' prefixes. */\nfunction blankFeasible(analysis: Analysis, line: number, chain: Container[], from: number) {\n const path = blankPath(analysis, chain, from);\n if (!path) return false;\n const level = analysis.match(line).levels[from]!;\n return (\n !path.items.length ||\n !analysis.source.slice(level.start, analysis.lines[line]!.end).includes(\"\\t\")\n );\n}\n/** The line indexes from `first` to `last`, and the blank lines after them. */\nfunction* linesWithBlanks(analysis: Analysis, first: number, last: number) {\n const { source, lines } = analysis;\n for (let line = first; line <= last; line++) yield line;\n for (let line = last + 1; line < lines.length; line++) {\n if (!/^[ \\t>]*$/.test(source.slice(lines[line]!.start, lines[line]!.end))) break;\n yield line;\n }\n}\n/**\n * Whether the line after an item that needs fewer columns stays out of it:\n * the next item of its list, unless that moves too, or the first line after\n * the item that its container continues with.\n */\nfunction captureFree(\n analysis: Analysis,\n item: Item,\n change: number,\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n const next = item.list.items[item.index + 1];\n if (next) {\n if (siblings === \"move\") return true;\n return next.offset !== undefined && next.offset < item.width! + change;\n }\n const { parent } = item.list;\n const last = parent ? analysis.containers.get(parent)!.last : lines.length - 1;\n for (let line = item.last + 1; line <= last; line++) {\n let start = lines[line]!.start;\n let column = 0;\n if (parent) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(parent);\n if (at < 0) return false;\n const level = levels[at];\n const reached = level ?? levels.at(-1);\n if (!reached || reached.kind === \"unsupported\") return false;\n if (reached.kind === \"blank\") continue;\n if (!level || level.kind === \"lazy\") return true;\n start = level.end;\n column = level.endColumn;\n }\n const text = source.slice(start, lines[line]!.end);\n if (/^[ \\t]*$/.test(text)) continue;\n const indent = /^[ \\t]*/.exec(text)![0];\n return columnAt(source, start, start + indent.length, column) - column < minimum(item);\n }\n return true;\n}\n/**\n * The changes to the lines of items whose columns change by `delta`: the\n * columns are removed or added at the start of each item's part of a line,\n * or at its end, where its content starts. A blank line in code keeps the\n * whitespace that the code holds there.\n */\nfunction shiftOps(\n analysis: Analysis,\n unit: Unit,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n): Op[] {\n const ops: Op[] = [];\n if (![...delta.values()].some(Boolean)) return ops;\n const { lines } = analysis;\n let firstLine = Infinity;\n let lastLine = -1;\n for (const { items } of unit.lists) {\n firstLine = Math.min(firstLine, items[0]?.first ?? Infinity);\n lastLine = Math.max(lastLine, items.at(-1)?.last ?? -1);\n }\n for (const line of linesWithBlanks(analysis, firstLine, lastLine)) {\n const { chain, levels } = analysis.match(line);\n for (const [at, level] of levels.entries()) {\n if (level.kind === \"blank\") {\n // The whitespace beyond the prefixes of the containers still open\n // stays: in code, it is part of the code.\n const path = blankPath(analysis, chain, at);\n if (!path) break;\n const change = path.items.reduce((sum, item) => sum + ((item && delta.get(item)) ?? 0), 0);\n const indent =\n level.indent >= path.width\n ? level.indent + change\n : Math.min(level.indent, path.width + change);\n if (change && indent !== level.indent)\n ops.push({ start: level.start, end: lines[line]!.end, text: \" \".repeat(indent) });\n break;\n }\n if (level.kind !== \"content\") break;\n if (level.node.type !== \"listItem\") continue;\n const item = analysis.items.get(level.node)!;\n const change = delta.get(item) ?? 0;\n if (!change || line === item.first) continue;\n if (mode === \"start\")\n ops.push(\n change > 0\n ? { start: level.start, end: level.start, text: \" \".repeat(change) }\n : { start: level.start, end: level.start - change, text: \"\" },\n );\n else if (change > 0) ops.push({ start: level.end, end: level.end, text: \" \".repeat(change) });\n else ops.push({ start: level.end + change, end: level.end, text: \"\" });\n }\n }\n return ops;\n}\n/**\n * One finding for a unit's changes, with the edit that makes all of them and\n * the message of the first change that has one.\n */\nfunction unitFinding(source: string, ops: Op[]): Finding | undefined {\n if (!ops.length) return undefined;\n ops.sort((a, b) => a.start - b.start || a.end - b.end);\n for (let index = 1; index < ops.length; index++)\n if (ops[index]!.start < ops[index - 1]!.end) return undefined;\n const start = ops[0]!.start;\n const end = ops.at(-1)!.end;\n let text = \"\";\n let cursor = start;\n for (const op of ops) {\n text += source.slice(cursor, op.start) + op.text;\n cursor = op.end;\n }\n text += source.slice(cursor, end);\n const message = ops.find((op) => op.message)?.message ?? \"Format the list.\";\n return { start, end, message, edit: { start, end, text } };\n}\n\nconst bullets = [\"-\", \"*\", \"+\"] as const;\n/** The marker after `marker` in the order `-`, `*`, `+`. */\nconst nextBullet = (marker: string) => bullets[(bullets.indexOf(marker as \"-\") + 1) % 3]!;\n/** A line that reads as a thematic break. */\nconst thematicBreak = /^([-*_])(?:[ \\t]*\\1){2,}[ \\t]*$/;\n\n/** The number of bullet lists that a list is nested in. */\nfunction bulletDepth(analysis: Analysis, list: ListGroup): number {\n let depth = 0;\n for (let node = list.parent; node; node = analysis.containers.get(node)?.parent)\n if (node.type === \"listItem\" && !analysis.items.get(node)?.list.node.ordered) depth++;\n return depth;\n}\n/**\n * The marker that each bullet list of a document gets before lists that\n * follow one another alternate: the configured one, the first list's with\n * `consistent`, or with `sublist` the first list's at each depth, unless the\n * depth above has that marker, in which case the next one.\n */\nfunction bulletMarkers(analysis: Analysis, marker: string): (list: ListGroup) => string {\n if (marker !== \"consistent\" && marker !== \"sublist\") return () => marker;\n const { source } = analysis;\n const lists = analysis.units.flatMap((unit) =>\n unit.lists.filter(\n (list) => !list.node.ordered && bullets.includes(source[list.items[0]?.marker ?? -1] as \"-\"),\n ),\n );\n const written = (list: ListGroup) => source[list.items[0]!.marker]!;\n if (marker === \"consistent\") {\n const first = lists[0] ? written(lists[0]) : \"-\";\n return () => first;\n }\n const byDepth: string[] = [];\n const depths = new Map(lists.map((list) => [list, bulletDepth(analysis, list)]));\n for (const list of lists) {\n const depth = depths.get(list)!;\n // The lists that a list is nested in come before it.\n if (byDepth[depth] !== undefined) continue;\n const own = written(list);\n byDepth[depth] = depth && own === byDepth[depth - 1] ? nextBullet(own) : own;\n }\n return (list) => byDepth[depths.get(list) ?? 0] ?? \"-\";\n}\n\nconst listMarker: Rule = {\n description: \"Use one bullet list marker, and the next one for a list that follows another.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({ marker: { enum: [...bullets, \"consistent\", \"sublist\"] } }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const base = bulletMarkers(analysis, String(options.marker ?? \"-\"));\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const target = new Map<Item, string>();\n const runOf = new Map<Item, ListGroup[]>();\n for (const run of unit.runs) {\n if (run[0]!.node.ordered) continue;\n const preferred = base(run[0]!);\n run.forEach((list, index) => {\n for (const item of list.items) {\n target.set(item, index % 2 ? nextBullet(preferred) : preferred);\n runOf.set(item, run);\n }\n });\n }\n // A run keeps its markers where a new one would turn a line into a\n // thematic break, also together with the markers of lists nested on it.\n const kept = new Set<ListGroup[]>();\n const byLine = new Map<number, Item[]>();\n for (const item of target.keys())\n byLine.set(item.first, [...(byLine.get(item.first) ?? []), item]);\n for (let changed = true; changed;) {\n changed = false;\n for (const [line, onLine] of byLine) {\n const marked = (item: Item) =>\n kept.has(runOf.get(item)!) ? source[item.marker]! : target.get(item)!;\n if (onLine.every((item) => marked(item) === source[item.marker])) continue;\n const { start, end } = lines[line]!;\n let text = source.slice(start, end);\n for (const item of onLine)\n text =\n text.slice(0, item.marker - start) +\n marked(item) +\n text.slice(item.marker - start + 1);\n if (onLine.some((item) => thematicBreak.test(text.slice(item.marker - start)))) {\n for (const item of onLine)\n if (marked(item) !== source[item.marker]) kept.add(runOf.get(item)!);\n changed = true;\n }\n }\n }\n const ops: Op[] = [];\n for (const [item, marker] of target)\n if (!kept.has(runOf.get(item)!) && source[item.marker] !== marker)\n ops.push({\n start: item.marker,\n end: item.marker + 1,\n text: marker,\n message: `Use ${JSON.stringify(marker)} as the bullet list marker.`,\n });\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The numbers that `numbering` gives a list's items, or undefined to keep them. */\nfunction renumbered(digits: string[], numbering: string): string[] | undefined {\n if (digits.length < 2 || digits.some((value) => value.length > 1 && value.startsWith(\"0\")))\n return undefined;\n const first = Number(digits[0]);\n const same = numbering === \"same\" || (numbering !== \"ordered\" && Number(digits[1]) === first);\n const numbers = digits.map((value, index) =>\n index === 0 ? first : same ? first : first + index,\n );\n if (numbers.some((value) => value > 999_999_999)) return undefined;\n return numbers.map((value, index) => (index === 0 ? digits[0]! : String(value)));\n}\n\nconst orderedList: Rule = {\n description: \"Use one delimiter after list numbers, and number list items consistently.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n delimiter: { enum: [\".\", \")\", \"consistent\"] },\n numbering: { enum: [\"auto\", \"ordered\", \"same\"] },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source } = analysis;\n let preferred = String(options.delimiter ?? \".\");\n if (preferred === \"consistent\") {\n // The delimiter of the document's first ordered list.\n const first = analysis.units\n .flatMap((unit) => unit.lists)\n .find((list) => list.node.ordered && list.items.length);\n preferred = source[(first?.items[0]?.markerEnd ?? 0) - 1] === \")\" ? \")\" : \".\";\n }\n const other = preferred === \".\" ? \")\" : \".\";\n const numbering = String(options.numbering ?? \"auto\");\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const delimiter = new Map<ListGroup, string>();\n for (const run of unit.runs)\n if (run[0]!.node.ordered)\n run.forEach((list, index) => delimiter.set(list, index % 2 ? other : preferred));\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n for (const list of unit.lists) {\n if (!list.node.ordered) continue;\n const digits = list.items.map((item) => item.digits);\n let numbers = renumbered(digits, numbering) ?? digits;\n const changes = new Map<Item, number>();\n for (const item of list.items) {\n const change = numbers[item.index]!.length - item.digits.length;\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) => numbers[item.index]!.length + 2;\n if (changes.size) {\n // The marker line's content moves with the number; a tab after it\n // would change its width instead.\n const readable = [...changes.keys()].every(\n (item) => !structuralTab(source, item.markerEnd, analysis.lines[item.first]!.end),\n );\n if (!readable || !feasible(analysis, list, changes, \"end\", minimum, \"stay\")) {\n numbers = digits;\n changes.clear();\n }\n }\n for (const [item, change] of changes) delta.set(item, change);\n const mark = delimiter.get(list) ?? preferred;\n for (const item of list.items) {\n const text = numbers[item.index]! + mark;\n if (source.slice(item.marker, item.markerEnd) === text) continue;\n ops.push({\n start: item.marker,\n end: item.markerEnd,\n text,\n message:\n source[item.markerEnd - 1] !== mark\n ? `Use ${JSON.stringify(mark)} after list item numbers.`\n : `Number this list item ${numbers[item.index]}.`,\n });\n }\n }\n for (const op of shiftOps(analysis, unit, delta, \"end\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The columns from an item's marker to its text. */\nconst reachOf = (item: Item, spacing = item.spacing) =>\n item.markerEnd - item.marker + (item.blankFirst || item.spacing >= 5 ? 1 : spacing);\nconst spaces = { type: \"integer\", minimum: 1, maximum: 4 };\n\nconst listIndent: Rule = {\n description: \"Indent list items consistently, with the configured spaces after the marker.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n bulletSpaces: spaces,\n orderedSpaces: spaces,\n bulletSpacesMultiline: spaces,\n orderedSpacesMultiline: spaces,\n nestedIndent: { type: \"integer\", minimum: 1, maximum: 8 },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const bullet = Number(options.bulletSpaces ?? 1);\n const ordered = Number(options.orderedSpaces ?? 1);\n const spacing = {\n bullet: [bullet, Number(options.bulletSpacesMultiline ?? bullet)],\n ordered: [ordered, Number(options.orderedSpacesMultiline ?? ordered)],\n };\n const nested = options.nestedIndent === undefined ? undefined : Number(options.nestedIndent);\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n // The columns from each item's marker to its text once the rule is done,\n // and the fewest columns that its lines can need then.\n const reach = new Map<Item, number>();\n const lowest = new Map<Item, number>();\n for (const list of unit.lists) {\n for (const item of list.items) analysis.match(item.first);\n // As in markdownlint, a list whose items each take one line, with no\n // blank line between them, gets the spacing for single lines.\n const single = list.items.every(\n (item, index) =>\n item.first === item.last && (!index || item.first === list.items[index - 1]!.last + 1),\n );\n const wanted = spacing[list.node.ordered ? \"ordered\" : \"bullet\"][single ? 0 : 1]!;\n const holder =\n list.parent?.type === \"listItem\" ? analysis.items.get(list.parent) : undefined;\n // A nested list starts under its item's text, or as many columns from\n // the item's marker as configured, where CommonMark lets it start. On\n // the item's own marker line, columns before the nested marker would\n // be the item's spacing, so a list that starts there stays. A first\n // line that the last item of the list before it would continue would\n // join that item.\n const before = list.previous?.items.at(-1);\n const indent =\n nested !== undefined && holder && list.items[0]?.first !== holder.first\n ? Math.max(\n 0,\n Math.min(\n 3,\n nested - (reach.get(holder) ?? reachOf(holder)),\n (before ? (lowest.get(before) ?? 0) : Infinity) - 1,\n ),\n )\n : 0;\n const marks: Op[] = [];\n const changes = new Map<Item, number>();\n let possible = true;\n for (const item of list.items) {\n if (item.width === undefined || item.start === undefined) {\n possible = false;\n break;\n }\n const offset = item.offset!;\n // The spacing stays where the item starts with indented code, which\n // depends on it, or with a blank line, which has none.\n const keep = item.blankFirst || item.spacing >= 5;\n const target = keep ? item.spacing : wanted;\n if (offset === indent && target === item.spacing) continue;\n const lineEnd = lines[item.first]!.end;\n if (\n (offset !== indent && !onlySpaces(source, item.start, item.marker)) ||\n (target !== item.spacing && !onlySpaces(source, item.markerEnd, item.spaceEnd)) ||\n structuralTab(source, item.start, lineEnd)\n ) {\n possible = false;\n break;\n }\n const count = (value: number) => (value === 1 ? \"one space\" : `${value} spaces`);\n if (offset !== indent)\n marks.push({\n start: item.start,\n end: item.marker,\n text: \" \".repeat(indent),\n message: indent\n ? `Indent the list marker by ${count(indent)}.`\n : \"Remove the indentation before the list marker.\",\n });\n if (target !== item.spacing)\n marks.push({\n start: item.markerEnd,\n end: item.spaceEnd,\n text: \" \".repeat(target),\n message: `Put ${count(target)} after the list marker.`,\n });\n const change = indent - offset + (keep ? 0 : target - item.spacing);\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) =>\n indent +\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : wanted);\n const accepted =\n possible &&\n marks.length > 0 &&\n feasible(analysis, list, changes, \"start\", minimum, \"move\");\n for (const item of list.items) {\n reach.set(item, accepted ? reachOf(item, wanted) : reachOf(item));\n const narrowest =\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : accepted ? wanted : item.spacing);\n lowest.set(item, (accepted ? indent : (item.offset ?? 0)) + narrowest);\n }\n if (!accepted) continue;\n for (const op of marks) ops.push(op);\n for (const [item, change] of changes) delta.set(item, change);\n }\n for (const op of shiftOps(analysis, unit, delta, \"start\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\nexport const listRules: Record<string, Rule> = {\n \"style/list-indent\": listIndent,\n \"style/list-marker\": listMarker,\n \"style/ordered-list\": orderedList,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/rules/lists.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmH3C,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,CAAC,SAA6B,EAAE,EAAE,CAAC,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,IAAI,CAAC;AAC3F,kFAAkF;AAClF,SAAS,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU,EAAE,MAAc;IACxE,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;QAAE,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/F,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,OAAO,GAAG,CAAC,IAAW,EAAE,EAAE,CAC9B,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;AACtF,MAAM,WAAW,GAAG,CAAC,IAAW,EAAqB,EAAE,CACrD,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC;AAE/F,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAsB,CAAC;AACnD,2FAA2F;AAC3F,SAAS,OAAO,CAAC,QAAkB;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,2DAA2D;IAC3D,MAAM,SAAS,GAA8B,EAAE,CAAC;IAEhD,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,MAA6B,EAAE,IAAsB,EAAE,EAAE;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAmB,CAAC;QAC1C,IAAI,KAAuB,CAAC;QAC5B,IAAI,GAA4B,CAAC;QACjC,IAAI,MAA6B,CAAC;QAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,IAAI;oBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC7B,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACjD,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5C,oEAAoE;YACpE,kDAAkD;YAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACxF,IAAI,MAAM;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,IAAI,MAAM,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;wBACnD,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;wBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpB,CAAC;oBACD,MAAM,GAAG,KAAK,CAAC;gBACjB,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC5E,GAAG,GAAG,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;gBACD,MAAM,IAAI,GAAc;oBACtB,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,EAAE;oBACT,MAAM;oBACN,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;iBACpE,CAAC;gBACF,MAAM,GAAG,IAAI,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;oBACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACrD,IAAI,IAAI;wBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7B,SAAS;YACX,CAAC;YACD,GAAG,GAAG,SAAS,CAAC;YAChB,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzF,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE;oBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC7E,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,wEAAwE;YACxE,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;gBAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC;IACF;;;OAGG;IACH,MAAM,aAAa,GAAG,CAAC,IAAW,EAAE,IAAU,EAAE,EAAE;QAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,YAAY;YAC1B,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;YACnD,CAAC,OAAO,IAAI,IAAI;gBACd,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAC9B,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpB,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC1B,IAAI,KAAK;YACP,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE;gBAC/E,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,UAAU,IAAI,IAAI;YACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAmB;gBAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CACf,IAAc,EACd,IAAe,EACf,KAAa,EACb,IAAU,EACQ,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,MAAO,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC3B,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAC5F,SAAS,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAC/D,SAAS,EAAE,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,GAAG,SAAS,CAAC;QACzB,OAAO,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAE,QAAQ,EAAE,CAAC;QACpE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;QAC1D,MAAM,IAAI,GAAS;YACjB,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,KAAK;YACL,IAAI,EAAE,KAAK;YACX,MAAM;YACN,SAAS;YACT,MAAM;YACN,QAAQ;YACR,YAAY;YACZ,eAAe;YACf,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,eAAe;YACjF,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAG;SAClC,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,qBAAqB;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;IACtF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;IAC7F,KAAK,MAAM,IAAI,IAAI,KAAK;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;gBAC3B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI;oBACxF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAE3B,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM;YAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,6EAA6E;IAC7E,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,CACL,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAC9F,CAAC;IACJ,CAAC,CAAC;IACF;;;;;;OAMG;IACH,MAAM,IAAI,GAAG,CAAC,IAAY,EAAe,EAAE;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;YAAE,IAAI,EAAE,CAAC;QACrF,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC7B,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;gBAAE,KAAK,GAAG,MAAM,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAC3B,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAW,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC;QAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM;YACpC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC;YACf,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,iFAAiF;IACjF,MAAM,UAAU,GAAG,CAAC,IAAe,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc,EAAS,EAAE;QACzF,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QACtC,MAAM,KAAK,GAAU;YACnB,IAAI;YACJ,IAAI,EAAE,aAAa;YACnB,KAAK;YACL,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,KAAK;YACV,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC;SACV,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;gBAC1C,IAAI,MAAM,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC7B,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC;oBAClC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC;oBAC1B,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;gBAC9B,IAAI,IAAI,CAAC,UAAU;oBAAE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;gBAC5F,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;oBACtB,uEAAuE;oBACvE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG;wBAAE,OAAO,KAAK,CAAC;oBACjD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;gBACpF,CAAC;gBACD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YAC/E,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC3C,OAAO,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,IAAI,EAAE,GAAG,KAAK,CAAC;YACf,IAAI,OAAO,GAAG,MAAM,CAAC;YACrB,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK;gBAAE,EAAE,GAAG,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,MAAO,CAAC;;gBAEzD,OAAO,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;oBAClE,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC;wBAAE,MAAM;oBAC7B,OAAO,GAAG,IAAI,CAAC;oBACf,EAAE,EAAE,CAAC;gBACP,CAAC;YACH,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACjE,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAClD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;oBACxF,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;wBACnB,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YACzF,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,EAAE,EAAE,CAAC;YACL,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;gBACvB,EAAE,EAAE,CAAC;gBACL,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACpE,CAAC;QACD,wEAAwE;QACxE,gDAAgD;QAChD,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,GAAG,GACP,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI;gBAChE,CAAC,CAAC,KAAK,CAAC,QAAS,CAAC,KAAK,CAAC,MAAO;gBAC/B,CAAC,CAAC,OAAO,CAAC;YACd,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,SAAS;gBACf,GAAG;gBACH,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC;aAChD,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,gFAAgF;IAChF,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,KAAa,EAAE,OAAe,EAAS,EAAE;QACvE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;QACrB,IAAI,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;QAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM;aACvD,CAAC;QACJ,OAAO,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,IAAI,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAC;YACnD,MAAM,GAAG,IAAI,CAAC;YACd,EAAE,EAAE,CAAC;QACP,CAAC;QACD,IAAI,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK;YACpC,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACxE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACnE,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC/E,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sFAAsF;AACtF,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU;IAC7D,MAAM,MAAM,GAAG,+CAA+C,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU,EAAE,EAAE,CAC9D,IAAI,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACpD;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,QAAkB,EAAE,IAAY,EAAE,KAAY;IAC9D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IACrE,OAAO,CACL,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3C,CAAC;AACJ,CAAC;AACD;;;;;;;GAOG;AACH,SAAS,QAAQ,CACf,QAAkB,EAClB,IAAe,EACf,KAAwB,EACxB,IAAqB,EACrB,OAA+B,EAC/B,QAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;QAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,KAAK,CAAC;gBACvD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnF,OAAO,KAAK,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;gBAAE,OAAO,KAAK,CAAC;YAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC5D,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;oBACjF,OAAO,KAAK,CAAC;gBACf,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC;YACjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACvF,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACnF,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAC;YACpF,CAAC;QACH,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD;;;;;GAKG;AACH,SAAS,SAAS,CAAC,QAAkB,EAAE,KAAkB,EAAE,IAAY;IACrE,MAAM,IAAI,GAAyB,EAAE,CAAC;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AACD,oFAAoF;AACpF,SAAS,aAAa,CAAC,QAAkB,EAAE,IAAY,EAAE,KAAkB,EAAE,IAAY;IACvF,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;IACjD,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;QAClB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9E,CAAC;AACJ,CAAC;AACD,+EAA+E;AAC/E,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAkB,EAAE,KAAa,EAAE,IAAY;IACvE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACnC,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE;QAAE,MAAM,IAAI,CAAC;IACxD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,CAAC;YAAE,MAAM;QACjF,MAAM,IAAI,CAAC;IACb,CAAC;AACH,CAAC;AACD;;;;GAIG;AACH,SAAS,WAAW,CAClB,QAAkB,EAClB,IAAU,EACV,MAAc,EACd,OAA+B,EAC/B,QAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAM,GAAG,MAAM,CAAC;IACzE,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/E,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QACpD,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC;QAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa;gBAAE,OAAO,KAAK,CAAC;YAC7D,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YACjD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;YAClB,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;QAC3B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD;;;;;GAKG;AACH,SAAS,QAAQ,CACf,QAAkB,EAClB,IAAU,EACV,KAAwB,EACxB,IAAqB;IAErB,MAAM,GAAG,GAAS,EAAE,CAAC;IACrB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC;IACnD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAC3B,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC,CAAC;QAC7D,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QAClE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,kEAAkE;gBAClE,0CAA0C;gBAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI;oBAAE,MAAM;gBACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3F,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK;oBACxB,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;gBAClD,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;oBACnC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpF,MAAM;YACR,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM;YACpC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK;gBAAE,SAAS;YAC7C,IAAI,IAAI,KAAK,OAAO;gBAClB,GAAG,CAAC,IAAI,CACN,MAAM,GAAG,CAAC;oBACR,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBACpE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAChE,CAAC;iBACC,IAAI,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;gBACzF,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AACD;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAc,EAAE,GAAS;IAC5C,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAClC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE;QAC7C,IAAI,GAAG,CAAC,KAAK,CAAE,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;IAChE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;IAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC;IAC5B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACjD,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,kBAAkB,CAAC;IAC5E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AACzC,4DAA4D;AAC5D,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAa,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;AAC1F,6CAA6C;AAC7C,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAExD,2DAA2D;AAC3D,SAAS,WAAW,CAAC,QAAkB,EAAE,IAAe;IACtD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM;QAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,KAAK,EAAE,CAAC;IACxF,OAAO,KAAK,CAAC;AACf,CAAC;AACD;;;;;GAKG;AACH,SAAS,aAAa,CAAC,QAAkB,EAAE,MAAc;IACvD,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CACf,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAQ,CAAC,CAC7F,CACF,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAE,CAAC;IACpE,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAChC,qDAAqD;QACrD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,SAAS;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/E,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,GAAS;IACvB,WAAW,EAAE,+EAA+E;IAC5F,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;IAClF,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QACnC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;gBAChC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBAChE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;gBAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,OAAO,GAAG,IAAI,EAAE,OAAO,GAAG,CAAC;gBAClC,OAAO,GAAG,KAAK,CAAC;gBAChB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,EAAE,CAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;oBACxE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAAE,SAAS;oBAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;oBACpC,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACpC,KAAK,MAAM,IAAI,IAAI,MAAM;wBACvB,IAAI;4BACF,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gCAClC,MAAM,CAAC,IAAI,CAAC;gCACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/E,KAAK,MAAM,IAAI,IAAI,MAAM;4BACvB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gCAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;wBACvE,OAAO,GAAG,IAAI,CAAC;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAS,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM;oBAC/D,GAAG,CAAC,IAAI,CAAC;wBACP,KAAK,EAAE,IAAI,CAAC,MAAM;wBAClB,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;wBACpB,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,6BAA6B;qBACpE,CAAC,CAAC;YACP,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,oFAAoF;AACpF,SAAS,UAAU,CAAC,MAAgB,EAAE,SAAiB;IACrD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxF,OAAO,SAAS,CAAC;IACnB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,SAAS,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC1C,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CACnD,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,WAAW,GAAS;IACxB,WAAW,EAAE,2EAA2E;IACxF,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,aAAa,CAAC;QACpB,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE;QAC7C,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;KACjD,CAAC;IACF,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC5B,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YAC/B,sDAAsD;YACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;iBACzB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;iBAC7B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1D,SAAS,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChF,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;YAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI;gBACzB,IAAI,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,OAAO;oBACtB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACrF,MAAM,GAAG,GAAS,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;gBACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;oBAChE,IAAI,MAAM;wBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,kEAAkE;oBAClE,kCAAkC;oBAClC,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,CAClF,CAAC;oBACF,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;wBAC5E,OAAO,GAAG,MAAM,CAAC;wBACjB,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO;oBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;gBAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAE,GAAG,IAAI,CAAC;oBACzC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;wBAAE,SAAS;oBACjE,GAAG,CAAC,IAAI,CAAC;wBACP,KAAK,EAAE,IAAI,CAAC,MAAM;wBAClB,GAAG,EAAE,IAAI,CAAC,SAAS;wBACnB,IAAI;wBACJ,OAAO,EACL,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI;4BACjC,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,2BAA2B;4BACxD,CAAC,CAAC,yBAAyB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;qBACtD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,qDAAqD;AACrD,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACtF,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAE3D,MAAM,UAAU,GAAS;IACvB,WAAW,EAAE,8EAA8E;IAC3F,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,aAAa,CAAC;QACpB,YAAY,EAAE,MAAM;QACpB,aAAa,EAAE,MAAM;QACrB,qBAAqB,EAAE,MAAM;QAC7B,sBAAsB,EAAE,MAAM;QAC9B,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAC1D,CAAC;IACF,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,qBAAqB,IAAI,MAAM,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,sBAAsB,IAAI,OAAO,CAAC,CAAC;SACtE,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAC1B,MAAM,GAAG,GAAS,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;YACtC,yEAAyE;YACzE,uDAAuD;YACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;oBAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1D,qEAAqE;gBACrE,8DAA8D;gBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAC7B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CACzF,CAAC;gBACF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAClF,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACjF,sEAAsE;gBACtE,sEAAsE;gBACtE,qEAAqE;gBACrE,oEAAoE;gBACpE,qEAAqE;gBACrE,kBAAkB;gBAClB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,MAAM,GACV,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK;oBACrE,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,GAAG,CACN,CAAC,EACD,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,EAC/C,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACpD,CACF;oBACH,CAAC,CAAC,CAAC,CAAC;gBACR,MAAM,KAAK,GAAS,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;gBACxC,IAAI,QAAQ,GAAG,IAAI,CAAC;gBACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBACzD,QAAQ,GAAG,KAAK,CAAC;wBACjB,MAAM;oBACR,CAAC;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC;oBAC5B,oEAAoE;oBACpE,uDAAuD;oBACvD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC5C,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO;wBAAE,SAAS;oBAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC;oBACvC,IACE,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBACnE,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC/E,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAC1C,CAAC;wBACD,QAAQ,GAAG,KAAK,CAAC;wBACjB,MAAM;oBACR,CAAC;oBACD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;oBACjF,IAAI,MAAM,KAAK,MAAM;wBACnB,KAAK,CAAC,IAAI,CAAC;4BACT,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,GAAG,EAAE,IAAI,CAAC,MAAM;4BAChB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;4BACxB,OAAO,EAAE,MAAM;gCACb,CAAC,CAAC,6BAA6B,KAAK,CAAC,MAAM,CAAC,GAAG;gCAC/C,CAAC,CAAC,gDAAgD;yBACrD,CAAC,CAAC;oBACL,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO;wBACzB,KAAK,CAAC,IAAI,CAAC;4BACT,KAAK,EAAE,IAAI,CAAC,SAAS;4BACrB,GAAG,EAAE,IAAI,CAAC,QAAQ;4BAClB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;4BACxB,OAAO,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,yBAAyB;yBACvD,CAAC,CAAC;oBACL,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpE,IAAI,MAAM;wBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,EAAE,CAC7B,MAAM;oBACN,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBAClE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACtD,MAAM,QAAQ,GACZ,QAAQ;oBACR,KAAK,CAAC,MAAM,GAAG,CAAC;oBAChB,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClE,MAAM,SAAS,GACb,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;wBAClE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAChF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBACzE,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBACxB,KAAK,MAAM,EAAE,IAAI,KAAK;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO;oBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChE,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAyB;IAC7C,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,UAAU;IAC/B,oBAAoB,EAAE,WAAW;CAClC,CAAC","sourcesContent":["import type { Blockquote, FootnoteDefinition, List, ListItem, Nodes, Parents } from \"mdast\";\nimport type { Document, Finding, Rule } from \"../core/types.js\";\nimport { misreadLists } from \"../syntax/misread-lists.js\";\nimport { joinsTomlFrontMatter } from \"../syntax/parse.js\";\nimport { optionsSchema } from \"./style.js\";\n\n/**\n * The list rules edit the markers of list items and the indentation that the\n * items' lines need. Each rule proposes one edit for each group of adjacent\n * lists outside other lists, which holds all its changes there, nested lists\n * included, so that an engine that applies some edits and holds others back\n * never applies half of a list's changes: a marker moved without its item's\n * lines would move the item's content.\n *\n * A list item's lines need as many columns of indentation as its marker,\n * the marker's indentation, and the space after it take up, counted from\n * where its container's part of the line starts. Lines with less are lazy\n * continuations of a paragraph. Changing those columns moves the item's\n * lines with them, and where that would change what a line belongs to, the\n * rule leaves the list as written.\n */\n\ntype Container = Blockquote | ListItem | FootnoteDefinition;\n\n/** A physical line of the source, without its line break. */\ninterface Line {\n start: number;\n end: number;\n}\n\ninterface Item {\n node: ListItem;\n list: ListGroup;\n index: number;\n /** The line indexes of the marker and of the item's last line. */\n first: number;\n last: number;\n marker: number;\n markerEnd: number;\n /** The number of an ordered item as written. */\n digits: string;\n /** The end of the whitespace after the marker. */\n spaceEnd: number;\n markerColumn: number;\n markerEndColumn: number;\n /** The columns of whitespace after the marker. */\n spacing: number;\n /** Whether nothing but whitespace follows the marker on its line. */\n blankFirst: boolean;\n /**\n * Where the item's part of its marker line starts, after the prefixes of\n * its containers, the columns of indentation before the marker, and the\n * columns that the item's other lines need from there. Undefined when the\n * marker line cannot be read exactly, such as when a tab spans a\n * container's prefix.\n */\n start?: number;\n offset?: number;\n width?: number;\n}\ninterface ListGroup {\n node: List;\n items: Item[];\n /** The nearest block quote, list item, or footnote definition around it. */\n parent: Container | undefined;\n /** The list directly before it, which its first line could continue. */\n previous: ListGroup | undefined;\n}\n/** Adjacent lists outside other lists, with the lists nested in them. */\ninterface Unit {\n lists: ListGroup[];\n /** Runs of adjacent sibling lists of one kind, in the unit and nested in it. */\n runs: ListGroup[][];\n valid: boolean;\n}\ninterface ContainerInfo {\n parent: Container | undefined;\n first: number;\n last: number;\n}\n/**\n * How one line passes through one of its containers. `content`: the line\n * continues inside the container from `end`. `blank`: only whitespace\n * follows `start`. `lazy`: the line lacks the container's prefix and\n * continues a paragraph. `unsupported`: a tab spans the prefix's end, or the\n * source does not have the expected shape.\n */\ninterface Level {\n node: Container;\n kind: \"content\" | \"blank\" | \"lazy\" | \"unsupported\";\n start: number;\n startColumn: number;\n end: number;\n endColumn: number;\n /** The columns of whitespace after `start`, for blank and lazy lines. */\n indent: number;\n}\ninterface Matched {\n chain: Container[];\n levels: Level[];\n}\ninterface Analysis {\n source: string;\n lines: Line[];\n units: Unit[];\n items: Map<ListItem, Item>;\n containers: Map<Container, ContainerInfo>;\n /** Later lines of inline code, math, and other inline nodes that keep their whitespace. */\n sensitive: Set<number>;\n match(line: number): Matched;\n}\ninterface Op {\n start: number;\n end: number;\n text: string;\n /** What the change does, for the finding when it is the first one. */\n message?: string;\n}\n\nconst tabStop = (column: number) => column + 4 - (column % 4);\nconst isSpace = (character: string | undefined) => character === \" \" || character === \"\\t\";\n/** The column reached from `column` at `from` after the characters up to `to`. */\nfunction columnAt(source: string, from: number, to: number, column: number): number {\n for (let at = from; at < to; at++) column = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n return column;\n}\nfunction splitLines(source: string): Line[] {\n const lines: Line[] = [];\n let start = 0;\n for (const match of source.matchAll(/\\r\\n|\\r|\\n/g)) {\n lines.push({ start, end: match.index });\n start = match.index + match[0].length;\n }\n lines.push({ start, end: source.length });\n return lines;\n}\nconst located = (node: Nodes) =>\n node.position?.start.offset !== undefined && node.position.end.offset !== undefined;\nconst isContainer = (node: Nodes): node is Container =>\n node.type === \"blockquote\" || node.type === \"listItem\" || node.type === \"footnoteDefinition\";\n\nconst analyses = new WeakMap<Document, Analysis>();\n/** The lists of a document and the means to read their lines, shared by the list rules. */\nfunction analyze(document: Document): Analysis {\n const known = analyses.get(document);\n if (known) return known;\n const { source } = document;\n const lines = splitLines(source);\n const units: Unit[] = [];\n const items = new Map<ListItem, Item>();\n const containers = new Map<Container, ContainerInfo>();\n const sensitive = new Set<number>();\n /** The innermost container of each line, by line index. */\n const innermost: (Container | undefined)[] = [];\n\n // Renderers may read a list where the parser read text that starts with a\n // list marker, the blocks indented below it inside that list's last item,\n // and the block after those as more of its items (issue #191). Another\n // marker or indentation could move a list among them into or out of that\n // item, or join it to that list, so its group of lists stays as written.\n const misread = misreadLists(document);\n\n const visit = (node: Parents, parent: Container | undefined, unit: Unit | undefined) => {\n const children = node.children as Nodes[];\n let group: Unit | undefined;\n let run: ListGroup[] | undefined;\n let before: ListGroup | undefined;\n for (let index = 0; index < children.length; index++) {\n const child = children[index]!;\n if (!located(child)) {\n if (unit) unit.valid = false;\n continue;\n }\n const firstLine = child.position!.start.line - 1;\n let lastLine = child.position!.end.line - 1;\n // A list item in a footnote definition can end past the next item's\n // start; a block ends before the next one starts.\n const next = children[index + 1];\n if (next && located(next)) lastLine = Math.min(lastLine, next.position!.start.line - 2);\n if (parent) lastLine = Math.min(lastLine, containers.get(parent)!.last);\n if (child.type === \"list\") {\n let target = unit;\n if (!target) {\n if (children[index - 1]?.type !== \"list\" || !group) {\n group = { lists: [], runs: [], valid: true };\n units.push(group);\n }\n target = group;\n }\n if (misread.nested.has(child) || misread.next.has(child)) target.valid = false;\n const previous = children[index - 1];\n if (!run || previous?.type !== \"list\" || previous.ordered !== child.ordered) {\n run = [];\n target.runs.push(run);\n }\n const list: ListGroup = {\n node: child,\n items: [],\n parent,\n previous: children[index - 1]?.type === \"list\" ? before : undefined,\n };\n before = list;\n run.push(list);\n target.lists.push(list);\n for (const [position, entry] of child.children.entries()) {\n const item = readItem(entry, list, position, target);\n if (item) list.items.push(item);\n }\n visit(child, parent, target);\n continue;\n }\n run = undefined;\n if (isContainer(child)) {\n containers.set(child, { parent, first: firstLine, last: Math.max(firstLine, lastLine) });\n for (let line = firstLine; line <= lastLine; line++) innermost[line] = child;\n visit(child, child, unit);\n continue;\n }\n // Code and other blocks that hold text as written have no inline nodes.\n if (unit && !(\"value\" in child)) collectInline(child, unit);\n }\n };\n /**\n * The later lines of nodes that keep the whitespace at the start of their\n * lines, such as code spans, math, and titles, and nodes without positions.\n */\n const collectInline = (node: Nodes, unit: Unit) => {\n if (!located(node)) {\n unit.valid = false;\n return;\n }\n const keeps =\n node.type === \"definition\" ||\n (\"title\" in node && typeof node.title === \"string\") ||\n (\"value\" in node &&\n typeof node.value === \"string\" &&\n node.type !== \"text\" &&\n node.type !== \"html\");\n if (keeps)\n for (let line = node.position!.start.line; line < node.position!.end.line; line++)\n sensitive.add(line);\n if (\"children\" in node)\n for (const child of node.children as Nodes[]) collectInline(child, unit);\n };\n const readItem = (\n node: ListItem,\n list: ListGroup,\n index: number,\n unit: Unit,\n ): Item | undefined => {\n if (!located(node)) {\n unit.valid = false;\n return undefined;\n }\n const marker = node.position!.start.offset!;\n const first = node.position!.start.line - 1;\n const line = lines[first]!;\n let markerEnd = marker;\n let digits = \"\";\n if (list.node.ordered) {\n digits = /^\\d{1,9}/.exec(source.slice(marker, marker + 10))?.[0] ?? \"\";\n markerEnd = marker + digits.length;\n if (!digits || (source[markerEnd] !== \".\" && source[markerEnd] !== \")\")) unit.valid = false;\n markerEnd++;\n } else {\n if (!\"-+*\".includes(source[marker] ?? \"_\")) unit.valid = false;\n markerEnd++;\n }\n let spaceEnd = markerEnd;\n while (spaceEnd < line.end && isSpace(source[spaceEnd])) spaceEnd++;\n const markerColumn = columnAt(source, line.start, marker, 0);\n const markerEndColumn = markerColumn + markerEnd - marker;\n const item: Item = {\n node,\n list,\n index,\n first,\n last: first,\n marker,\n markerEnd,\n digits,\n spaceEnd,\n markerColumn,\n markerEndColumn,\n spacing: columnAt(source, markerEnd, spaceEnd, markerEndColumn) - markerEndColumn,\n blankFirst: spaceEnd === line.end,\n };\n items.set(node, item);\n return item;\n };\n visit(document.tree, undefined, undefined);\n // Renderers without TOML front matter read its lines as a paragraph, which\n // a list directly below continues where it cannot interrupt one: a numbered\n // list that does not start at 1, or one whose first item starts with a blank\n // line (issue #333).\n const below = units[0]?.lists[0];\n if (below && joinsTomlFrontMatter(document.tree, below.node)) units[0]!.valid = false;\n for (const item of items.values()) item.last = containers.get(item.node)?.last ?? item.first;\n for (const unit of units)\n for (const list of unit.lists)\n for (const item of list.items)\n if (item.last < item.first || (list.items[item.index + 1]?.first ?? Infinity) <= item.last)\n unit.valid = false;\n\n const enclosing = (line: number) => {\n const chain: Container[] = [];\n for (let node = innermost[line]; node; node = containers.get(node)?.parent) chain.unshift(node);\n return chain;\n };\n const chains = new Map<number, Container[]>();\n /** A line with nothing but whitespace and `>`, which starts no container. */\n const blank = (line: number) => {\n const { start, end } = lines[line]!;\n const node = innermost[line];\n return (\n (!node || containers.get(node)!.first !== line) && /^[ \\t>]*$/.test(source.slice(start, end))\n );\n };\n /**\n * The containers that a line passes through. A blank line belongs to every\n * container that the line before it is in, until a later line closes them,\n * though the tree ends a container at its last line with content: in a list\n * item that ends with indented code, a blank line's spaces beyond the code's\n * indentation become part of the code.\n */\n const open = (line: number): Container[] => {\n let from = line;\n while (from > 0 && !chains.has(from) && !chains.has(from - 1) && blank(from)) from--;\n for (let at = from; at <= line; at++) {\n if (chains.has(at)) continue;\n let chain = enclosing(at);\n const before = at > 0 && blank(at) ? chains.get(at - 1) : undefined;\n if (before && chain.every((node, index) => before[index] === node)) chain = before;\n chains.set(at, chain);\n }\n return chains.get(line)!;\n };\n const memo = new Map<number, Matched>();\n const match = (line: number): Matched => {\n const known = memo.get(line);\n if (known) return known;\n const chain = open(line);\n const levels: Level[] = [];\n const result = { chain, levels };\n memo.set(line, result);\n let at = lines[line]!.start;\n let column = 0;\n for (const node of chain) {\n const level = matchLevel(node, line, at, column);\n levels.push(level);\n if (level.kind !== \"content\") break;\n at = level.end;\n column = level.endColumn;\n }\n return result;\n };\n /** How `line`, from `start` at `column`, passes through the prefix of `node`. */\n const matchLevel = (node: Container, line: number, start: number, column: number): Level => {\n const { end: lineEnd } = lines[line]!;\n const level: Level = {\n node,\n kind: \"unsupported\",\n start,\n startColumn: column,\n end: start,\n endColumn: column,\n indent: 0,\n };\n const info = containers.get(node)!;\n if (node.type === \"listItem\") {\n const item = items.get(node);\n if (!item) return level;\n if (line === item.first) {\n if (!/^[ \\t]*$/.test(source.slice(start, item.marker))) return level;\n const offset = item.markerColumn - column;\n if (offset > 3) return level;\n const content =\n item.blankFirst || item.spacing >= 5\n ? item.markerEndColumn + 1\n : item.markerEndColumn + item.spacing;\n item.start = start;\n item.offset = offset;\n item.width = content - column;\n if (item.blankFirst) return { ...level, kind: \"content\", end: lineEnd, endColumn: content };\n if (item.spacing >= 5) {\n // A tab right after the marker gives one of its columns to the marker.\n if (source[item.markerEnd] !== \" \") return level;\n return { ...level, kind: \"content\", end: item.markerEnd + 1, endColumn: content };\n }\n return { ...level, kind: \"content\", end: item.spaceEnd, endColumn: content };\n }\n if (item.width === undefined) match(item.first);\n if (item.width === undefined) return level;\n return indented(level, item.width, lineEnd);\n }\n if (node.type === \"blockquote\") {\n let at = start;\n let reached = column;\n if (line === info.first) at = node.position!.start.offset!;\n else\n while (at < lineEnd && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(reached) : reached + 1;\n if (next - column > 3) break;\n reached = next;\n at++;\n }\n if (source[at] !== \">\" || !/^[ \\t]*$/.test(source.slice(start, at)))\n return /^[ \\t]*$/.test(source.slice(start, lineEnd))\n ? { ...level, kind: \"blank\", indent: columnAt(source, start, lineEnd, column) - column }\n : line === info.first\n ? level\n : { ...level, kind: \"lazy\", indent: columnAt(source, start, at, column) - column };\n reached = columnAt(source, start, at, column) + 1;\n at++;\n if (source[at] === \"\\t\") return level;\n if (source[at] === \" \") {\n at++;\n reached++;\n }\n return { ...level, kind: \"content\", end: at, endColumn: reached };\n }\n // A footnote definition: its first line's content starts with its first\n // block, and its other lines need four columns.\n if (line === info.first) {\n const child = node.children[0];\n const end =\n child && located(child) && child.position!.start.line - 1 === line\n ? child.position!.start.offset!\n : lineEnd;\n return {\n ...level,\n kind: \"content\",\n end,\n endColumn: columnAt(source, start, end, column),\n };\n }\n return indented(level, 4, lineEnd);\n };\n /** A line that needs `width` columns of indentation to continue a container. */\n const indented = (level: Level, width: number, lineEnd: number): Level => {\n let at = level.start;\n let column = level.startColumn;\n if (/^[ \\t]*$/.test(source.slice(at, lineEnd)))\n return {\n ...level,\n kind: \"blank\",\n indent: columnAt(source, at, lineEnd, column) - column,\n };\n while (column - level.startColumn < width && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n if (next - level.startColumn > width) return level;\n column = next;\n at++;\n }\n if (column - level.startColumn < width)\n return { ...level, kind: \"lazy\", indent: column - level.startColumn };\n return { ...level, kind: \"content\", end: at, endColumn: column };\n };\n const analysis = { source, lines, units, items, containers, sensitive, match };\n analyses.set(document, analysis);\n return analysis;\n}\n\n/** A tab among the whitespace and container markers that start the rest of a line. */\nfunction structuralTab(source: string, from: number, to: number): boolean {\n const prefix = /^(?:[ \\t>]|(?:[-+*]|\\d{1,9}[.)])(?=[ \\t]|$))*/.exec(source.slice(from, to))![0];\n return prefix.includes(\"\\t\");\n}\nconst onlySpaces = (source: string, from: number, to: number) =>\n from <= to && /^ *$/.test(source.slice(from, to));\n/**\n * Whether a lazy line can join its item: once the item needs fewer columns,\n * the line may have enough and continue the item's paragraph from inside it.\n * Text that starts with a letter, or a number that is no list marker, does\n * that; anything else could start a block there, and inline code or math\n * would keep the indentation that the line no longer has.\n */\nfunction lazySafe(analysis: Analysis, line: number, level: Level): boolean {\n const { source, lines } = analysis;\n const text = source.slice(level.start, lines[line]!.end).trimStart();\n return (\n !analysis.sensitive.has(line) &&\n !text.includes(\"|\") &&\n /^(?:\\p{L}|[0-9]+(?![.)0-9]))/u.test(text)\n );\n}\n/**\n * Whether the item's column changes are possible without moving content: an\n * item's lines must be read exactly, and none of the lines around it may\n * start or stop belonging to it. `delta` gives the change of each item's\n * column, `minimum` the fewest columns that an item can need once the list\n * rules are done, and `siblings` says whether the other items of the list\n * move to the start of their container's part of the line too.\n */\nfunction feasible(\n analysis: Analysis,\n list: ListGroup,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n for (const item of list.items) analysis.match(item.first);\n for (const item of list.items) {\n const change = delta.get(item) ?? 0;\n if (!change) continue;\n if (item.width === undefined) return false;\n for (const line of linesWithBlanks(analysis, item.first + 1, item.last)) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(item.node);\n if (at < 0) {\n if (line > item.last) continue;\n return false;\n }\n const level = levels[at];\n if (!level) {\n const last = levels.at(-1);\n if (!last || last.kind === \"unsupported\") return false;\n if (last.kind === \"blank\" && !blankFeasible(analysis, line, chain, levels.length - 1))\n return false;\n continue;\n }\n if (level.kind === \"unsupported\") return false;\n if (level.kind === \"blank\") {\n if (!blankFeasible(analysis, line, chain, at)) return false;\n continue;\n }\n if (level.kind === \"lazy\") {\n if (change < 0 && level.indent >= minimum(item) && !lazySafe(analysis, line, level))\n return false;\n continue;\n }\n const lineEnd = lines[line]!.end;\n if (mode === \"start\") {\n if (change < 0 && !onlySpaces(source, level.start, level.start - change)) return false;\n if (structuralTab(source, level.start, lineEnd)) return false;\n } else {\n if (change < 0 && !onlySpaces(source, level.end + change, level.end)) return false;\n if (structuralTab(source, level.end + Math.min(0, change), lineEnd)) return false;\n }\n }\n if (change < 0 && !captureFree(analysis, item, change, minimum, siblings)) return false;\n }\n return true;\n}\n/**\n * The items and footnote definitions whose prefixes a blank line's\n * whitespace stands for, from the level where the line is blank down to the\n * deepest container still open there; a block quote that the line has no `>`\n * for ends there. Undefined when an item's columns are not known.\n */\nfunction blankPath(analysis: Analysis, chain: Container[], from: number) {\n const path: (Item | undefined)[] = [];\n let width = 0;\n for (const node of chain.slice(from)) {\n if (node.type === \"blockquote\") break;\n if (node.type === \"footnoteDefinition\") {\n path.push(undefined);\n width += 4;\n continue;\n }\n const item = analysis.items.get(node);\n if (item?.width === undefined) return undefined;\n path.push(item);\n width += item.width;\n }\n return { items: path, width };\n}\n/** Whether a blank line can keep its whitespace beyond its containers' prefixes. */\nfunction blankFeasible(analysis: Analysis, line: number, chain: Container[], from: number) {\n const path = blankPath(analysis, chain, from);\n if (!path) return false;\n const level = analysis.match(line).levels[from]!;\n return (\n !path.items.length ||\n !analysis.source.slice(level.start, analysis.lines[line]!.end).includes(\"\\t\")\n );\n}\n/** The line indexes from `first` to `last`, and the blank lines after them. */\nfunction* linesWithBlanks(analysis: Analysis, first: number, last: number) {\n const { source, lines } = analysis;\n for (let line = first; line <= last; line++) yield line;\n for (let line = last + 1; line < lines.length; line++) {\n if (!/^[ \\t>]*$/.test(source.slice(lines[line]!.start, lines[line]!.end))) break;\n yield line;\n }\n}\n/**\n * Whether the line after an item that needs fewer columns stays out of it:\n * the next item of its list, unless that moves too, or the first line after\n * the item that its container continues with.\n */\nfunction captureFree(\n analysis: Analysis,\n item: Item,\n change: number,\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n const next = item.list.items[item.index + 1];\n if (next) {\n if (siblings === \"move\") return true;\n return next.offset !== undefined && next.offset < item.width! + change;\n }\n const { parent } = item.list;\n const last = parent ? analysis.containers.get(parent)!.last : lines.length - 1;\n for (let line = item.last + 1; line <= last; line++) {\n let start = lines[line]!.start;\n let column = 0;\n if (parent) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(parent);\n if (at < 0) return false;\n const level = levels[at];\n const reached = level ?? levels.at(-1);\n if (!reached || reached.kind === \"unsupported\") return false;\n if (reached.kind === \"blank\") continue;\n if (!level || level.kind === \"lazy\") return true;\n start = level.end;\n column = level.endColumn;\n }\n const text = source.slice(start, lines[line]!.end);\n if (/^[ \\t]*$/.test(text)) continue;\n const indent = /^[ \\t]*/.exec(text)![0];\n return columnAt(source, start, start + indent.length, column) - column < minimum(item);\n }\n return true;\n}\n/**\n * The changes to the lines of items whose columns change by `delta`: the\n * columns are removed or added at the start of each item's part of a line,\n * or at its end, where its content starts. A blank line in code keeps the\n * whitespace that the code holds there.\n */\nfunction shiftOps(\n analysis: Analysis,\n unit: Unit,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n): Op[] {\n const ops: Op[] = [];\n if (![...delta.values()].some(Boolean)) return ops;\n const { lines } = analysis;\n let firstLine = Infinity;\n let lastLine = -1;\n for (const { items } of unit.lists) {\n firstLine = Math.min(firstLine, items[0]?.first ?? Infinity);\n lastLine = Math.max(lastLine, items.at(-1)?.last ?? -1);\n }\n for (const line of linesWithBlanks(analysis, firstLine, lastLine)) {\n const { chain, levels } = analysis.match(line);\n for (const [at, level] of levels.entries()) {\n if (level.kind === \"blank\") {\n // The whitespace beyond the prefixes of the containers still open\n // stays: in code, it is part of the code.\n const path = blankPath(analysis, chain, at);\n if (!path) break;\n const change = path.items.reduce((sum, item) => sum + ((item && delta.get(item)) ?? 0), 0);\n const indent =\n level.indent >= path.width\n ? level.indent + change\n : Math.min(level.indent, path.width + change);\n if (change && indent !== level.indent)\n ops.push({ start: level.start, end: lines[line]!.end, text: \" \".repeat(indent) });\n break;\n }\n if (level.kind !== \"content\") break;\n if (level.node.type !== \"listItem\") continue;\n const item = analysis.items.get(level.node)!;\n const change = delta.get(item) ?? 0;\n if (!change || line === item.first) continue;\n if (mode === \"start\")\n ops.push(\n change > 0\n ? { start: level.start, end: level.start, text: \" \".repeat(change) }\n : { start: level.start, end: level.start - change, text: \"\" },\n );\n else if (change > 0) ops.push({ start: level.end, end: level.end, text: \" \".repeat(change) });\n else ops.push({ start: level.end + change, end: level.end, text: \"\" });\n }\n }\n return ops;\n}\n/**\n * One finding for a unit's changes, with the edit that makes all of them and\n * the message of the first change that has one.\n */\nfunction unitFinding(source: string, ops: Op[]): Finding | undefined {\n if (!ops.length) return undefined;\n ops.sort((a, b) => a.start - b.start || a.end - b.end);\n for (let index = 1; index < ops.length; index++)\n if (ops[index]!.start < ops[index - 1]!.end) return undefined;\n const start = ops[0]!.start;\n const end = ops.at(-1)!.end;\n let text = \"\";\n let cursor = start;\n for (const op of ops) {\n text += source.slice(cursor, op.start) + op.text;\n cursor = op.end;\n }\n text += source.slice(cursor, end);\n const message = ops.find((op) => op.message)?.message ?? \"Format the list.\";\n return { start, end, message, edit: { start, end, text } };\n}\n\nconst bullets = [\"-\", \"*\", \"+\"] as const;\n/** The marker after `marker` in the order `-`, `*`, `+`. */\nconst nextBullet = (marker: string) => bullets[(bullets.indexOf(marker as \"-\") + 1) % 3]!;\n/** A line that reads as a thematic break. */\nconst thematicBreak = /^([-*_])(?:[ \\t]*\\1){2,}[ \\t]*$/;\n\n/** The number of bullet lists that a list is nested in. */\nfunction bulletDepth(analysis: Analysis, list: ListGroup): number {\n let depth = 0;\n for (let node = list.parent; node; node = analysis.containers.get(node)?.parent)\n if (node.type === \"listItem\" && !analysis.items.get(node)?.list.node.ordered) depth++;\n return depth;\n}\n/**\n * The marker that each bullet list of a document gets before lists that\n * follow one another alternate: the configured one, the first list's with\n * `consistent`, or with `sublist` the first list's at each depth, unless the\n * depth above has that marker, in which case the next one.\n */\nfunction bulletMarkers(analysis: Analysis, marker: string): (list: ListGroup) => string {\n if (marker !== \"consistent\" && marker !== \"sublist\") return () => marker;\n const { source } = analysis;\n const lists = analysis.units.flatMap((unit) =>\n unit.lists.filter(\n (list) => !list.node.ordered && bullets.includes(source[list.items[0]?.marker ?? -1] as \"-\"),\n ),\n );\n const written = (list: ListGroup) => source[list.items[0]!.marker]!;\n if (marker === \"consistent\") {\n const first = lists[0] ? written(lists[0]) : \"-\";\n return () => first;\n }\n const byDepth: string[] = [];\n const depths = new Map(lists.map((list) => [list, bulletDepth(analysis, list)]));\n for (const list of lists) {\n const depth = depths.get(list)!;\n // The lists that a list is nested in come before it.\n if (byDepth[depth] !== undefined) continue;\n const own = written(list);\n byDepth[depth] = depth && own === byDepth[depth - 1] ? nextBullet(own) : own;\n }\n return (list) => byDepth[depths.get(list) ?? 0] ?? \"-\";\n}\n\nconst listMarker: Rule = {\n description: \"Use one bullet list marker, and the next one for a list that follows another.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({ marker: { enum: [...bullets, \"consistent\", \"sublist\"] } }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const base = bulletMarkers(analysis, String(options.marker ?? \"-\"));\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const target = new Map<Item, string>();\n const runOf = new Map<Item, ListGroup[]>();\n for (const run of unit.runs) {\n if (run[0]!.node.ordered) continue;\n const preferred = base(run[0]!);\n run.forEach((list, index) => {\n for (const item of list.items) {\n target.set(item, index % 2 ? nextBullet(preferred) : preferred);\n runOf.set(item, run);\n }\n });\n }\n // A run keeps its markers where a new one would turn a line into a\n // thematic break, also together with the markers of lists nested on it.\n const kept = new Set<ListGroup[]>();\n const byLine = new Map<number, Item[]>();\n for (const item of target.keys())\n byLine.set(item.first, [...(byLine.get(item.first) ?? []), item]);\n for (let changed = true; changed;) {\n changed = false;\n for (const [line, onLine] of byLine) {\n const marked = (item: Item) =>\n kept.has(runOf.get(item)!) ? source[item.marker]! : target.get(item)!;\n if (onLine.every((item) => marked(item) === source[item.marker])) continue;\n const { start, end } = lines[line]!;\n let text = source.slice(start, end);\n for (const item of onLine)\n text =\n text.slice(0, item.marker - start) +\n marked(item) +\n text.slice(item.marker - start + 1);\n if (onLine.some((item) => thematicBreak.test(text.slice(item.marker - start)))) {\n for (const item of onLine)\n if (marked(item) !== source[item.marker]) kept.add(runOf.get(item)!);\n changed = true;\n }\n }\n }\n const ops: Op[] = [];\n for (const [item, marker] of target)\n if (!kept.has(runOf.get(item)!) && source[item.marker] !== marker)\n ops.push({\n start: item.marker,\n end: item.marker + 1,\n text: marker,\n message: `Use ${JSON.stringify(marker)} as the bullet list marker.`,\n });\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The numbers that `numbering` gives a list's items, or undefined to keep them. */\nfunction renumbered(digits: string[], numbering: string): string[] | undefined {\n if (digits.length < 2 || digits.some((value) => value.length > 1 && value.startsWith(\"0\")))\n return undefined;\n const first = Number(digits[0]);\n const same = numbering === \"same\" || (numbering !== \"ordered\" && Number(digits[1]) === first);\n const numbers = digits.map((value, index) =>\n index === 0 ? first : same ? first : first + index,\n );\n if (numbers.some((value) => value > 999_999_999)) return undefined;\n return numbers.map((value, index) => (index === 0 ? digits[0]! : String(value)));\n}\n\nconst orderedList: Rule = {\n description: \"Use one delimiter after list numbers, and number list items consistently.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n delimiter: { enum: [\".\", \")\", \"consistent\"] },\n numbering: { enum: [\"auto\", \"ordered\", \"same\"] },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source } = analysis;\n let preferred = String(options.delimiter ?? \".\");\n if (preferred === \"consistent\") {\n // The delimiter of the document's first ordered list.\n const first = analysis.units\n .flatMap((unit) => unit.lists)\n .find((list) => list.node.ordered && list.items.length);\n preferred = source[(first?.items[0]?.markerEnd ?? 0) - 1] === \")\" ? \")\" : \".\";\n }\n const other = preferred === \".\" ? \")\" : \".\";\n const numbering = String(options.numbering ?? \"auto\");\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const delimiter = new Map<ListGroup, string>();\n for (const run of unit.runs)\n if (run[0]!.node.ordered)\n run.forEach((list, index) => delimiter.set(list, index % 2 ? other : preferred));\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n for (const list of unit.lists) {\n if (!list.node.ordered) continue;\n const digits = list.items.map((item) => item.digits);\n let numbers = renumbered(digits, numbering) ?? digits;\n const changes = new Map<Item, number>();\n for (const item of list.items) {\n const change = numbers[item.index]!.length - item.digits.length;\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) => numbers[item.index]!.length + 2;\n if (changes.size) {\n // The marker line's content moves with the number; a tab after it\n // would change its width instead.\n const readable = [...changes.keys()].every(\n (item) => !structuralTab(source, item.markerEnd, analysis.lines[item.first]!.end),\n );\n if (!readable || !feasible(analysis, list, changes, \"end\", minimum, \"stay\")) {\n numbers = digits;\n changes.clear();\n }\n }\n for (const [item, change] of changes) delta.set(item, change);\n const mark = delimiter.get(list) ?? preferred;\n for (const item of list.items) {\n const text = numbers[item.index]! + mark;\n if (source.slice(item.marker, item.markerEnd) === text) continue;\n ops.push({\n start: item.marker,\n end: item.markerEnd,\n text,\n message:\n source[item.markerEnd - 1] !== mark\n ? `Use ${JSON.stringify(mark)} after list item numbers.`\n : `Number this list item ${numbers[item.index]}.`,\n });\n }\n }\n for (const op of shiftOps(analysis, unit, delta, \"end\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The columns from an item's marker to its text. */\nconst reachOf = (item: Item, spacing = item.spacing) =>\n item.markerEnd - item.marker + (item.blankFirst || item.spacing >= 5 ? 1 : spacing);\nconst spaces = { type: \"integer\", minimum: 1, maximum: 4 };\n\nconst listIndent: Rule = {\n description: \"Indent list items consistently, with the configured spaces after the marker.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n bulletSpaces: spaces,\n orderedSpaces: spaces,\n bulletSpacesMultiline: spaces,\n orderedSpacesMultiline: spaces,\n nestedIndent: { type: \"integer\", minimum: 1, maximum: 8 },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const bullet = Number(options.bulletSpaces ?? 1);\n const ordered = Number(options.orderedSpaces ?? 1);\n const spacing = {\n bullet: [bullet, Number(options.bulletSpacesMultiline ?? bullet)],\n ordered: [ordered, Number(options.orderedSpacesMultiline ?? ordered)],\n };\n const nested = options.nestedIndent === undefined ? undefined : Number(options.nestedIndent);\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n // The columns from each item's marker to its text once the rule is done,\n // and the fewest columns that its lines can need then.\n const reach = new Map<Item, number>();\n const lowest = new Map<Item, number>();\n for (const list of unit.lists) {\n for (const item of list.items) analysis.match(item.first);\n // As in markdownlint, a list whose items each take one line, with no\n // blank line between them, gets the spacing for single lines.\n const single = list.items.every(\n (item, index) =>\n item.first === item.last && (!index || item.first === list.items[index - 1]!.last + 1),\n );\n const wanted = spacing[list.node.ordered ? \"ordered\" : \"bullet\"][single ? 0 : 1]!;\n const holder =\n list.parent?.type === \"listItem\" ? analysis.items.get(list.parent) : undefined;\n // A nested list starts under its item's text, or as many columns from\n // the item's marker as configured, where CommonMark lets it start. On\n // the item's own marker line, columns before the nested marker would\n // be the item's spacing, so a list that starts there stays. A first\n // line that the last item of the list before it would continue would\n // join that item.\n const before = list.previous?.items.at(-1);\n const indent =\n nested !== undefined && holder && list.items[0]?.first !== holder.first\n ? Math.max(\n 0,\n Math.min(\n 3,\n nested - (reach.get(holder) ?? reachOf(holder)),\n (before ? (lowest.get(before) ?? 0) : Infinity) - 1,\n ),\n )\n : 0;\n const marks: Op[] = [];\n const changes = new Map<Item, number>();\n let possible = true;\n for (const item of list.items) {\n if (item.width === undefined || item.start === undefined) {\n possible = false;\n break;\n }\n const offset = item.offset!;\n // The spacing stays where the item starts with indented code, which\n // depends on it, or with a blank line, which has none.\n const keep = item.blankFirst || item.spacing >= 5;\n const target = keep ? item.spacing : wanted;\n if (offset === indent && target === item.spacing) continue;\n const lineEnd = lines[item.first]!.end;\n if (\n (offset !== indent && !onlySpaces(source, item.start, item.marker)) ||\n (target !== item.spacing && !onlySpaces(source, item.markerEnd, item.spaceEnd)) ||\n structuralTab(source, item.start, lineEnd)\n ) {\n possible = false;\n break;\n }\n const count = (value: number) => (value === 1 ? \"one space\" : `${value} spaces`);\n if (offset !== indent)\n marks.push({\n start: item.start,\n end: item.marker,\n text: \" \".repeat(indent),\n message: indent\n ? `Indent the list marker by ${count(indent)}.`\n : \"Remove the indentation before the list marker.\",\n });\n if (target !== item.spacing)\n marks.push({\n start: item.markerEnd,\n end: item.spaceEnd,\n text: \" \".repeat(target),\n message: `Put ${count(target)} after the list marker.`,\n });\n const change = indent - offset + (keep ? 0 : target - item.spacing);\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) =>\n indent +\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : wanted);\n const accepted =\n possible &&\n marks.length > 0 &&\n feasible(analysis, list, changes, \"start\", minimum, \"move\");\n for (const item of list.items) {\n reach.set(item, accepted ? reachOf(item, wanted) : reachOf(item));\n const narrowest =\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : accepted ? wanted : item.spacing);\n lowest.set(item, (accepted ? indent : (item.offset ?? 0)) + narrowest);\n }\n if (!accepted) continue;\n for (const op of marks) ops.push(op);\n for (const [item, change] of changes) delta.set(item, change);\n }\n for (const op of shiftOps(analysis, unit, delta, \"start\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\nexport const listRules: Record<string, Rule> = {\n \"style/list-indent\": listIndent,\n \"style/list-marker\": listMarker,\n \"style/ordered-list\": orderedList,\n};\n"]}
|
package/dist/rules/style.js
CHANGED
|
@@ -2,7 +2,8 @@ import { walk } from "../syntax/walk.js";
|
|
|
2
2
|
import stringWidth from "string-width";
|
|
3
3
|
import { directive } from "../core/directives.js";
|
|
4
4
|
import { blockIdentifier } from "../syntax/block-identifier.js";
|
|
5
|
-
import {
|
|
5
|
+
import { misreadLists } from "../syntax/misread-lists.js";
|
|
6
|
+
import { codeSpanText, joinsTomlFrontMatter, labelEnd, lazyIndentation, parse, range, startsWithMarker, } from "../syntax/parse.js";
|
|
6
7
|
import { changesForgeHeading, headingAttributeBlock } from "../workspace/heading-attributes.js";
|
|
7
8
|
import { takesFinalLineEnding, takesLines, underlinedHeadings, underlineEdit } from "./blocks.js";
|
|
8
9
|
export function optionsSchema(properties) {
|
|
@@ -755,7 +756,15 @@ function inlineAtoms(paragraph, start, wholeLinks) {
|
|
|
755
756
|
visit(child);
|
|
756
757
|
}
|
|
757
758
|
else if (child.type === "inlineCode")
|
|
758
|
-
atoms.push({
|
|
759
|
+
atoms.push({
|
|
760
|
+
from: a,
|
|
761
|
+
to: b,
|
|
762
|
+
// The spaces that start a lazy continuation line stay in the span,
|
|
763
|
+
// which joining would drop, as after `>* ` with no space (issue #339).
|
|
764
|
+
joining: lazyIndentation(child)
|
|
765
|
+
? { reason: "code span continuing on an indented lazy line" }
|
|
766
|
+
: "code",
|
|
767
|
+
});
|
|
759
768
|
else if ((child.type === "image" || child.type === "imageReference") && labelEnd(child)) {
|
|
760
769
|
const close = labelEnd(child);
|
|
761
770
|
atoms.push({ from: a, to: close, joining: "description" });
|
|
@@ -1162,6 +1171,11 @@ const wrap = {
|
|
|
1162
1171
|
// keeps. A lazy line, which keeps them, is not supported above.
|
|
1163
1172
|
if (joining === "description" && /(?: {2}|\\)$/.test(last))
|
|
1164
1173
|
failure = "hard line break";
|
|
1174
|
+
// In a code span, a backslash before the line ending is a hard
|
|
1175
|
+
// break wherever the backticks do not pair, as on GitHub after an
|
|
1176
|
+
// unpaired longer run (issue #335).
|
|
1177
|
+
if (joining === "code" && last.endsWith("\\"))
|
|
1178
|
+
failure = "backslash at a line end in a code span";
|
|
1165
1179
|
const trimmed = line.replace(/^[ \t]+/, "");
|
|
1166
1180
|
lineAt += line.length - trimmed.length;
|
|
1167
1181
|
line = trimmed;
|
|
@@ -1283,19 +1297,19 @@ const table = {
|
|
|
1283
1297
|
};
|
|
1284
1298
|
/** A line holding nothing but block quote markers and blank space. */
|
|
1285
1299
|
const blankLine = /^[ \t>]*$/;
|
|
1286
|
-
|
|
1287
|
-
* A list item or quote marker followed by another list marker on its line,
|
|
1288
|
-
* including the ones that cannot open a list there, such as `* * *`.
|
|
1289
|
-
*/
|
|
1290
|
-
const nestedListStart = /^[ \t]*(?:[-+*]|\d{1,9}[.)]|>)[ \t>]*(?:[-+*]|\d{1,9}[.)])(?:[ \t]|$)/;
|
|
1300
|
+
const blockContainers = ["blockquote", "list", "listItem", "footnoteDefinition"];
|
|
1291
1301
|
/** The innermost last block of a container, where its text ends. */
|
|
1292
1302
|
function lastBlock(node) {
|
|
1293
|
-
while (
|
|
1294
|
-
"children" in node &&
|
|
1295
|
-
node.children.length)
|
|
1303
|
+
while (blockContainers.includes(node.type) && "children" in node && node.children.length)
|
|
1296
1304
|
node = node.children.at(-1);
|
|
1297
1305
|
return node;
|
|
1298
1306
|
}
|
|
1307
|
+
/** The innermost first block of a container, where its text starts. */
|
|
1308
|
+
function firstBlock(node) {
|
|
1309
|
+
while (blockContainers.includes(node.type) && "children" in node && node.children.length)
|
|
1310
|
+
node = node.children[0];
|
|
1311
|
+
return node;
|
|
1312
|
+
}
|
|
1299
1313
|
/**
|
|
1300
1314
|
* Whether two neighboring blocks have to stay as they are, although one of
|
|
1301
1315
|
* them is a heading or a list, because a blank line between them would change
|
|
@@ -1347,17 +1361,24 @@ function together(document, parent, index, directiveLines) {
|
|
|
1347
1361
|
last.type === "footnoteDefinition" &&
|
|
1348
1362
|
!last.children.length)
|
|
1349
1363
|
return true;
|
|
1350
|
-
//
|
|
1351
|
-
//
|
|
1352
|
-
// a
|
|
1353
|
-
//
|
|
1354
|
-
//
|
|
1355
|
-
|
|
1364
|
+
// Renderers may read a list where the parser read text that starts with a
|
|
1365
|
+
// list marker, the blocks indented below it inside that list's last item,
|
|
1366
|
+
// and a list after those as more of its items (issue #191). A blank line
|
|
1367
|
+
// above a list or quote that starts with such text, as `- -` or `- 2. Step`
|
|
1368
|
+
// directly below text, would make the parser read the list too, and one
|
|
1369
|
+
// between the blocks of such a list would make it loose.
|
|
1370
|
+
const misread = misreadLists(document);
|
|
1371
|
+
if (misread.nested.has(after) ||
|
|
1372
|
+
(after.type === "list" && misread.next.has(after)) ||
|
|
1373
|
+
misread.text.has(firstBlock(after)))
|
|
1374
|
+
return true;
|
|
1375
|
+
// Directly below text or a link reference definition, `-` underlined with
|
|
1376
|
+
// `---` is a heading, and below a blank line an empty list item and a
|
|
1377
|
+
// thematic break.
|
|
1378
|
+
if (after.type !== "heading" || !["paragraph", "definition"].includes(lastBlock(before).type))
|
|
1356
1379
|
return false;
|
|
1357
1380
|
const firstLine = source.slice(afterStart, lineBounds(source, afterStart, afterStart)[1]);
|
|
1358
|
-
|
|
1359
|
-
return !/^[ \t]*#/.test(firstLine);
|
|
1360
|
-
return (after.type === "list" || after.type === "blockquote") && nestedListStart.test(firstLine);
|
|
1381
|
+
return !/^[ \t]*#/.test(firstLine);
|
|
1361
1382
|
}
|
|
1362
1383
|
const blockSpacing = {
|
|
1363
1384
|
description: "Separate headings and lists from neighboring blocks with a blank line.",
|
|
@@ -1469,6 +1490,11 @@ export const styleRules = {
|
|
|
1469
1490
|
// marker, which holds an Obsidian callout's title.
|
|
1470
1491
|
if (titles.some(([a, b]) => start >= a && start < b))
|
|
1471
1492
|
return;
|
|
1493
|
+
// Where its backticks do not pair, as on GitHub after an unpaired
|
|
1494
|
+
// longer run, a backslash at the end of a line is a hard line break
|
|
1495
|
+
// (issue #335).
|
|
1496
|
+
if (/\\(?:\r\n|\r|\n)/.test(source.slice(start, end)))
|
|
1497
|
+
return;
|
|
1472
1498
|
if (document.dialect === "obsidian") {
|
|
1473
1499
|
// Obsidian reads highlights and wikilinks only within a line. Once
|
|
1474
1500
|
// the lines are one, an `==` or `[[` left as text could open one that
|
|
@@ -1593,6 +1619,10 @@ export const styleRules = {
|
|
|
1593
1619
|
}
|
|
1594
1620
|
if (underlined || !first || !last)
|
|
1595
1621
|
return;
|
|
1622
|
+
// Renderers without TOML front matter read its lines as part of a
|
|
1623
|
+
// heading underlined directly below it (issue #333).
|
|
1624
|
+
if (joinsTomlFrontMatter(document.tree, node))
|
|
1625
|
+
return;
|
|
1596
1626
|
// Below link reference definitions, the heading's position starts at
|
|
1597
1627
|
// the first definition; its own text starts on a later line. Headings
|
|
1598
1628
|
// that are indented or inside lists or block quotes are left as written.
|