chaffjs 0.28.0 → 0.30.0
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/dist/ai-score/of-document.d.ts.map +1 -1
- package/dist/ai-score/of-document.js +23 -14
- package/dist/ai-score/of-document.js.map +1 -1
- package/dist/ai-score/render.d.ts.map +1 -1
- package/dist/ai-score/render.js +13 -4
- package/dist/ai-score/render.js.map +1 -1
- package/dist/ai-score/score.d.ts +16 -1
- package/dist/ai-score/score.d.ts.map +1 -1
- package/dist/ai-score/score.js +15 -3
- package/dist/ai-score/score.js.map +1 -1
- package/dist/ai-score/signals.d.ts +2 -4
- package/dist/ai-score/signals.d.ts.map +1 -1
- package/dist/ai-score/signals.js +11 -2
- package/dist/ai-score/signals.js.map +1 -1
- package/dist/ai-score/text.d.ts +2 -0
- package/dist/ai-score/text.d.ts.map +1 -1
- package/dist/ai-score/text.js +4 -2
- package/dist/ai-score/text.js.map +1 -1
- package/dist/announced-count.d.ts +2 -0
- package/dist/announced-count.d.ts.map +1 -1
- package/dist/announced-count.js +14 -7
- package/dist/announced-count.js.map +1 -1
- package/dist/check-source.d.ts +3 -1
- package/dist/check-source.d.ts.map +1 -1
- package/dist/check-source.js +3 -1
- package/dist/check-source.js.map +1 -1
- package/dist/cli-text.d.ts.map +1 -1
- package/dist/cli-text.js +38 -16
- package/dist/cli-text.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/cite-claims.d.ts +36 -0
- package/dist/commands/cite-claims.d.ts.map +1 -0
- package/dist/commands/cite-claims.js +81 -0
- package/dist/commands/cite-claims.js.map +1 -0
- package/dist/commands/cite-page.d.ts +14 -0
- package/dist/commands/cite-page.d.ts.map +1 -0
- package/dist/commands/cite-page.js +47 -0
- package/dist/commands/cite-page.js.map +1 -0
- package/dist/commands/cite-scaffold.d.ts +16 -0
- package/dist/commands/cite-scaffold.d.ts.map +1 -0
- package/dist/commands/cite-scaffold.js +21 -0
- package/dist/commands/cite-scaffold.js.map +1 -0
- package/dist/commands/cite.d.ts +3 -12
- package/dist/commands/cite.d.ts.map +1 -1
- package/dist/commands/cite.js +110 -51
- package/dist/commands/cite.js.map +1 -1
- package/dist/company-names.d.ts +34 -0
- package/dist/company-names.d.ts.map +1 -0
- package/dist/company-names.js +158 -0
- package/dist/company-names.js.map +1 -0
- package/dist/default-values.d.ts +17 -0
- package/dist/default-values.d.ts.map +1 -0
- package/dist/default-values.js +134 -0
- package/dist/default-values.js.map +1 -0
- package/dist/deprecated-use.d.ts +17 -0
- package/dist/deprecated-use.d.ts.map +1 -0
- package/dist/deprecated-use.js +95 -0
- package/dist/deprecated-use.js.map +1 -0
- package/dist/derived/session-hours.d.ts +26 -0
- package/dist/derived/session-hours.d.ts.map +1 -0
- package/dist/derived/session-hours.js +29 -0
- package/dist/derived/session-hours.js.map +1 -0
- package/dist/derived/stays.d.ts +43 -0
- package/dist/derived/stays.d.ts.map +1 -0
- package/dist/derived/stays.js +105 -0
- package/dist/derived/stays.js.map +1 -0
- package/dist/derived/time-lengths.d.ts +37 -0
- package/dist/derived/time-lengths.d.ts.map +1 -0
- package/dist/derived/time-lengths.js +168 -0
- package/dist/derived/time-lengths.js.map +1 -0
- package/dist/derived/unit-counts.d.ts +7 -0
- package/dist/derived/unit-counts.d.ts.map +1 -0
- package/dist/derived/unit-counts.js +13 -0
- package/dist/derived/unit-counts.js.map +1 -0
- package/dist/derived/working-hours.d.ts +36 -0
- package/dist/derived/working-hours.d.ts.map +1 -0
- package/dist/derived/working-hours.js +55 -0
- package/dist/derived/working-hours.js.map +1 -0
- package/dist/detectors/acronym-context.d.ts +2 -2
- package/dist/detectors/acronym-context.d.ts.map +1 -1
- package/dist/detectors/acronym-context.js +6 -0
- package/dist/detectors/acronym-context.js.map +1 -1
- package/dist/detectors/acronym-expansion.d.ts +1 -1
- package/dist/detectors/acronym-expansion.d.ts.map +1 -1
- package/dist/detectors/acronym-expansion.js +46 -2
- package/dist/detectors/acronym-expansion.js.map +1 -1
- package/dist/detectors/address-word.d.ts +3 -0
- package/dist/detectors/address-word.d.ts.map +1 -0
- package/dist/detectors/address-word.js +7 -0
- package/dist/detectors/address-word.js.map +1 -0
- package/dist/detectors/agreement-slip.d.ts.map +1 -1
- package/dist/detectors/agreement-slip.js +4 -1
- package/dist/detectors/agreement-slip.js.map +1 -1
- package/dist/detectors/ai-phrasing.d.ts +0 -4
- package/dist/detectors/ai-phrasing.d.ts.map +1 -1
- package/dist/detectors/ai-phrasing.js +5 -1
- package/dist/detectors/ai-phrasing.js.map +1 -1
- package/dist/detectors/amount-range.d.ts +3 -0
- package/dist/detectors/amount-range.d.ts.map +1 -0
- package/dist/detectors/amount-range.js +38 -0
- package/dist/detectors/amount-range.js.map +1 -0
- package/dist/detectors/amount-scale.d.ts +6 -1
- package/dist/detectors/amount-scale.d.ts.map +1 -1
- package/dist/detectors/amount-scale.js +33 -9
- package/dist/detectors/amount-scale.js.map +1 -1
- package/dist/detectors/announced-count.d.ts +1 -1
- package/dist/detectors/announced-count.d.ts.map +1 -1
- package/dist/detectors/announced-count.js +18 -3
- package/dist/detectors/announced-count.js.map +1 -1
- package/dist/detectors/bare-comparative.d.ts.map +1 -1
- package/dist/detectors/bare-comparative.js +4 -1
- package/dist/detectors/bare-comparative.js.map +1 -1
- package/dist/detectors/block-quotation.d.ts +13 -0
- package/dist/detectors/block-quotation.d.ts.map +1 -0
- package/dist/detectors/block-quotation.js +86 -0
- package/dist/detectors/block-quotation.js.map +1 -0
- package/dist/detectors/bracket-label.d.ts +10 -0
- package/dist/detectors/bracket-label.d.ts.map +1 -0
- package/dist/detectors/bracket-label.js +51 -0
- package/dist/detectors/bracket-label.js.map +1 -0
- package/dist/detectors/capitalised-term.d.ts +44 -0
- package/dist/detectors/capitalised-term.d.ts.map +1 -0
- package/dist/detectors/capitalised-term.js +101 -0
- package/dist/detectors/capitalised-term.js.map +1 -0
- package/dist/detectors/citation-entry.d.ts +5 -0
- package/dist/detectors/citation-entry.d.ts.map +1 -1
- package/dist/detectors/citation-entry.js +19 -5
- package/dist/detectors/citation-entry.js.map +1 -1
- package/dist/detectors/code-before.d.ts +6 -0
- package/dist/detectors/code-before.d.ts.map +1 -0
- package/dist/detectors/code-before.js +15 -0
- package/dist/detectors/code-before.js.map +1 -0
- package/dist/detectors/connective-hierarchy.d.ts +11 -1
- package/dist/detectors/connective-hierarchy.d.ts.map +1 -1
- package/dist/detectors/connective-hierarchy.js +26 -6
- package/dist/detectors/connective-hierarchy.js.map +1 -1
- package/dist/detectors/currency-notation.d.ts.map +1 -1
- package/dist/detectors/currency-notation.js +2 -1
- package/dist/detectors/currency-notation.js.map +1 -1
- package/dist/detectors/date-outside-period.d.ts +4 -0
- package/dist/detectors/date-outside-period.d.ts.map +1 -0
- package/dist/detectors/date-outside-period.js +37 -0
- package/dist/detectors/date-outside-period.js.map +1 -0
- package/dist/detectors/default-values.d.ts +3 -0
- package/dist/detectors/default-values.d.ts.map +1 -0
- package/dist/detectors/default-values.js +14 -0
- package/dist/detectors/default-values.js.map +1 -0
- package/dist/detectors/defined-term-form.d.ts +6 -2
- package/dist/detectors/defined-term-form.d.ts.map +1 -1
- package/dist/detectors/defined-term-form.js +72 -12
- package/dist/detectors/defined-term-form.js.map +1 -1
- package/dist/detectors/definition-use.d.ts.map +1 -1
- package/dist/detectors/definition-use.js +8 -1
- package/dist/detectors/definition-use.js.map +1 -1
- package/dist/detectors/deprecated-use.d.ts +3 -0
- package/dist/detectors/deprecated-use.d.ts.map +1 -0
- package/dist/detectors/deprecated-use.js +14 -0
- package/dist/detectors/deprecated-use.js.map +1 -0
- package/dist/detectors/derived-numbers.d.ts +3 -1
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +119 -10
- package/dist/detectors/derived-numbers.js.map +1 -1
- package/dist/detectors/document-shape.d.ts +1 -0
- package/dist/detectors/document-shape.d.ts.map +1 -1
- package/dist/detectors/document-shape.js +4 -1
- package/dist/detectors/document-shape.js.map +1 -1
- package/dist/detectors/due-date.d.ts +3 -0
- package/dist/detectors/due-date.d.ts.map +1 -0
- package/dist/detectors/due-date.js +38 -0
- package/dist/detectors/due-date.js.map +1 -0
- package/dist/detectors/en-shape.d.ts.map +1 -1
- package/dist/detectors/en-shape.js +17 -9
- package/dist/detectors/en-shape.js.map +1 -1
- package/dist/detectors/fact-consistency.d.ts.map +1 -1
- package/dist/detectors/fact-consistency.js +76 -2
- package/dist/detectors/fact-consistency.js.map +1 -1
- package/dist/detectors/heading-echo.d.ts.map +1 -1
- package/dist/detectors/heading-echo.js +10 -1
- package/dist/detectors/heading-echo.js.map +1 -1
- package/dist/detectors/kana-function-word.d.ts +12 -0
- package/dist/detectors/kana-function-word.d.ts.map +1 -0
- package/dist/detectors/kana-function-word.js +59 -0
- package/dist/detectors/kana-function-word.js.map +1 -0
- package/dist/detectors/line-amount.d.ts +3 -0
- package/dist/detectors/line-amount.d.ts.map +1 -0
- package/dist/detectors/line-amount.js +22 -0
- package/dist/detectors/line-amount.js.map +1 -0
- package/dist/detectors/location-pointer.d.ts +6 -0
- package/dist/detectors/location-pointer.d.ts.map +1 -0
- package/dist/detectors/location-pointer.js +22 -0
- package/dist/detectors/location-pointer.js.map +1 -0
- package/dist/detectors/mark-shape.d.ts.map +1 -1
- package/dist/detectors/mark-shape.js +13 -1
- package/dist/detectors/mark-shape.js.map +1 -1
- package/dist/detectors/nado-closed-list.d.ts +3 -0
- package/dist/detectors/nado-closed-list.d.ts.map +1 -0
- package/dist/detectors/nado-closed-list.js +21 -0
- package/dist/detectors/nado-closed-list.js.map +1 -0
- package/dist/detectors/name-variant.d.ts.map +1 -1
- package/dist/detectors/name-variant.js +129 -8
- package/dist/detectors/name-variant.js.map +1 -1
- package/dist/detectors/next-word.d.ts.map +1 -1
- package/dist/detectors/next-word.js +41 -8
- package/dist/detectors/next-word.js.map +1 -1
- package/dist/detectors/number-word-figure.d.ts +5 -0
- package/dist/detectors/number-word-figure.d.ts.map +1 -0
- package/dist/detectors/number-word-figure.js +32 -0
- package/dist/detectors/number-word-figure.js.map +1 -0
- package/dist/detectors/obligation-without-deadline.d.ts +39 -0
- package/dist/detectors/obligation-without-deadline.d.ts.map +1 -0
- package/dist/detectors/obligation-without-deadline.js +148 -0
- package/dist/detectors/obligation-without-deadline.js.map +1 -0
- package/dist/detectors/open-end-names.d.ts +23 -0
- package/dist/detectors/open-end-names.d.ts.map +1 -0
- package/dist/detectors/open-end-names.js +95 -0
- package/dist/detectors/open-end-names.js.map +1 -0
- package/dist/detectors/ordinal-run-gaps.d.ts +8 -0
- package/dist/detectors/ordinal-run-gaps.d.ts.map +1 -0
- package/dist/detectors/ordinal-run-gaps.js +80 -0
- package/dist/detectors/ordinal-run-gaps.js.map +1 -0
- package/dist/detectors/orthographic-variant.d.ts.map +1 -1
- package/dist/detectors/orthographic-variant.js +26 -9
- package/dist/detectors/orthographic-variant.js.map +1 -1
- package/dist/detectors/orthography.d.ts.map +1 -1
- package/dist/detectors/orthography.js +5 -0
- package/dist/detectors/orthography.js.map +1 -1
- package/dist/detectors/parameter-table.d.ts +3 -0
- package/dist/detectors/parameter-table.d.ts.map +1 -0
- package/dist/detectors/parameter-table.js +16 -0
- package/dist/detectors/parameter-table.js.map +1 -0
- package/dist/detectors/party-order.d.ts +3 -0
- package/dist/detectors/party-order.d.ts.map +1 -0
- package/dist/detectors/party-order.js +46 -0
- package/dist/detectors/party-order.js.map +1 -0
- package/dist/detectors/phone-number-variant.d.ts +3 -0
- package/dist/detectors/phone-number-variant.d.ts.map +1 -0
- package/dist/detectors/phone-number-variant.js +18 -0
- package/dist/detectors/phone-number-variant.js.map +1 -0
- package/dist/detectors/prerequisite-order.d.ts +3 -0
- package/dist/detectors/prerequisite-order.d.ts.map +1 -0
- package/dist/detectors/prerequisite-order.js +30 -0
- package/dist/detectors/prerequisite-order.js.map +1 -0
- package/dist/detectors/quote-unnamed-speaker.d.ts +3 -0
- package/dist/detectors/quote-unnamed-speaker.d.ts.map +1 -0
- package/dist/detectors/quote-unnamed-speaker.js +18 -0
- package/dist/detectors/quote-unnamed-speaker.js.map +1 -0
- package/dist/detectors/quote-without-source.d.ts +12 -2
- package/dist/detectors/quote-without-source.d.ts.map +1 -1
- package/dist/detectors/quote-without-source.js +45 -11
- package/dist/detectors/quote-without-source.js.map +1 -1
- package/dist/detectors/registry/amount-range.d.ts +3 -0
- package/dist/detectors/registry/amount-range.d.ts.map +1 -0
- package/dist/detectors/registry/amount-range.js +3 -0
- package/dist/detectors/registry/amount-range.js.map +1 -0
- package/dist/detectors/registry/arrival-before-departure.d.ts +3 -0
- package/dist/detectors/registry/arrival-before-departure.d.ts.map +1 -0
- package/dist/detectors/registry/arrival-before-departure.js +3 -0
- package/dist/detectors/registry/arrival-before-departure.js.map +1 -0
- package/dist/detectors/registry/connection-time-short.d.ts +3 -0
- package/dist/detectors/registry/connection-time-short.d.ts.map +1 -0
- package/dist/detectors/registry/connection-time-short.js +3 -0
- package/dist/detectors/registry/connection-time-short.js.map +1 -0
- package/dist/detectors/registry/date-outside-period.d.ts +3 -0
- package/dist/detectors/registry/date-outside-period.d.ts.map +1 -0
- package/dist/detectors/registry/date-outside-period.js +3 -0
- package/dist/detectors/registry/date-outside-period.js.map +1 -0
- package/dist/detectors/registry/default-values.d.ts +3 -0
- package/dist/detectors/registry/default-values.d.ts.map +1 -0
- package/dist/detectors/registry/default-values.js +3 -0
- package/dist/detectors/registry/default-values.js.map +1 -0
- package/dist/detectors/registry/deprecated-use.d.ts +3 -0
- package/dist/detectors/registry/deprecated-use.d.ts.map +1 -0
- package/dist/detectors/registry/deprecated-use.js +3 -0
- package/dist/detectors/registry/deprecated-use.js.map +1 -0
- package/dist/detectors/registry/due-date.d.ts +3 -0
- package/dist/detectors/registry/due-date.d.ts.map +1 -0
- package/dist/detectors/registry/due-date.js +3 -0
- package/dist/detectors/registry/due-date.js.map +1 -0
- package/dist/detectors/registry/duration-product-mismatch.d.ts +3 -0
- package/dist/detectors/registry/duration-product-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/duration-product-mismatch.js +3 -0
- package/dist/detectors/registry/duration-product-mismatch.js.map +1 -0
- package/dist/detectors/registry/kana-function-word.d.ts +3 -0
- package/dist/detectors/registry/kana-function-word.d.ts.map +1 -0
- package/dist/detectors/registry/kana-function-word.js +3 -0
- package/dist/detectors/registry/kana-function-word.js.map +1 -0
- package/dist/detectors/registry/line-amount.d.ts +3 -0
- package/dist/detectors/registry/line-amount.d.ts.map +1 -0
- package/dist/detectors/registry/line-amount.js +3 -0
- package/dist/detectors/registry/line-amount.js.map +1 -0
- package/dist/detectors/registry/nado-closed-list.d.ts +3 -0
- package/dist/detectors/registry/nado-closed-list.d.ts.map +1 -0
- package/dist/detectors/registry/nado-closed-list.js +3 -0
- package/dist/detectors/registry/nado-closed-list.js.map +1 -0
- package/dist/detectors/registry/number-word-figure.d.ts +3 -0
- package/dist/detectors/registry/number-word-figure.d.ts.map +1 -0
- package/dist/detectors/registry/number-word-figure.js +3 -0
- package/dist/detectors/registry/number-word-figure.js.map +1 -0
- package/dist/detectors/registry/obligation-without-deadline.d.ts +3 -0
- package/dist/detectors/registry/obligation-without-deadline.d.ts.map +1 -0
- package/dist/detectors/registry/obligation-without-deadline.js +3 -0
- package/dist/detectors/registry/obligation-without-deadline.js.map +1 -0
- package/dist/detectors/registry/parameter-table.d.ts +3 -0
- package/dist/detectors/registry/parameter-table.d.ts.map +1 -0
- package/dist/detectors/registry/parameter-table.js +3 -0
- package/dist/detectors/registry/parameter-table.js.map +1 -0
- package/dist/detectors/registry/party-order.d.ts +3 -0
- package/dist/detectors/registry/party-order.d.ts.map +1 -0
- package/dist/detectors/registry/party-order.js +3 -0
- package/dist/detectors/registry/party-order.js.map +1 -0
- package/dist/detectors/registry/phone-number-variant.d.ts +3 -0
- package/dist/detectors/registry/phone-number-variant.d.ts.map +1 -0
- package/dist/detectors/registry/phone-number-variant.js +3 -0
- package/dist/detectors/registry/phone-number-variant.js.map +1 -0
- package/dist/detectors/registry/prerequisite-order.d.ts +3 -0
- package/dist/detectors/registry/prerequisite-order.d.ts.map +1 -0
- package/dist/detectors/registry/prerequisite-order.js +3 -0
- package/dist/detectors/registry/prerequisite-order.js.map +1 -0
- package/dist/detectors/registry/quote-unnamed-speaker.d.ts +3 -0
- package/dist/detectors/registry/quote-unnamed-speaker.d.ts.map +1 -0
- package/dist/detectors/registry/quote-unnamed-speaker.js +3 -0
- package/dist/detectors/registry/quote-unnamed-speaker.js.map +1 -0
- package/dist/detectors/registry/requirement-lists.d.ts +3 -0
- package/dist/detectors/registry/requirement-lists.d.ts.map +1 -0
- package/dist/detectors/registry/requirement-lists.js +3 -0
- package/dist/detectors/registry/requirement-lists.js.map +1 -0
- package/dist/detectors/registry/return-type.d.ts +3 -0
- package/dist/detectors/registry/return-type.d.ts.map +1 -0
- package/dist/detectors/registry/return-type.js +3 -0
- package/dist/detectors/registry/return-type.js.map +1 -0
- package/dist/detectors/registry/tax-amount.d.ts +3 -0
- package/dist/detectors/registry/tax-amount.d.ts.map +1 -0
- package/dist/detectors/registry/tax-amount.js +3 -0
- package/dist/detectors/registry/tax-amount.js.map +1 -0
- package/dist/detectors/registry/time-order.d.ts +3 -0
- package/dist/detectors/registry/time-order.d.ts.map +1 -0
- package/dist/detectors/registry/time-order.js +3 -0
- package/dist/detectors/registry/time-order.js.map +1 -0
- package/dist/detectors/registry/ui-label.d.ts +3 -0
- package/dist/detectors/registry/ui-label.d.ts.map +1 -0
- package/dist/detectors/registry/ui-label.js +3 -0
- package/dist/detectors/registry/ui-label.js.map +1 -0
- package/dist/detectors/registry/undefined-call.d.ts +3 -0
- package/dist/detectors/registry/undefined-call.d.ts.map +1 -0
- package/dist/detectors/registry/undefined-call.js +3 -0
- package/dist/detectors/registry/undefined-call.js.map +1 -0
- package/dist/detectors/registry/undefined-term.d.ts +3 -0
- package/dist/detectors/registry/undefined-term.d.ts.map +1 -0
- package/dist/detectors/registry/undefined-term.js +3 -0
- package/dist/detectors/registry/undefined-term.js.map +1 -0
- package/dist/detectors/registry/version-order.d.ts +3 -0
- package/dist/detectors/registry/version-order.d.ts.map +1 -0
- package/dist/detectors/registry/version-order.js +3 -0
- package/dist/detectors/registry/version-order.js.map +1 -0
- package/dist/detectors/registry/warning-action.d.ts +3 -0
- package/dist/detectors/registry/warning-action.d.ts.map +1 -0
- package/dist/detectors/registry/warning-action.js +3 -0
- package/dist/detectors/registry/warning-action.js.map +1 -0
- package/dist/detectors/requirement-lists.d.ts +3 -0
- package/dist/detectors/requirement-lists.d.ts.map +1 -0
- package/dist/detectors/requirement-lists.js +46 -0
- package/dist/detectors/requirement-lists.js.map +1 -0
- package/dist/detectors/requirement-smell.d.ts.map +1 -1
- package/dist/detectors/requirement-smell.js +25 -8
- package/dist/detectors/requirement-smell.js.map +1 -1
- package/dist/detectors/return-type.d.ts +3 -0
- package/dist/detectors/return-type.d.ts.map +1 -0
- package/dist/detectors/return-type.js +24 -0
- package/dist/detectors/return-type.js.map +1 -0
- package/dist/detectors/structure-tree.d.ts +12 -4
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +40 -15
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/superlative-scope.d.ts.map +1 -1
- package/dist/detectors/superlative-scope.js +11 -1
- package/dist/detectors/superlative-scope.js.map +1 -1
- package/dist/detectors/tax-amount.d.ts +3 -0
- package/dist/detectors/tax-amount.d.ts.map +1 -0
- package/dist/detectors/tax-amount.js +19 -0
- package/dist/detectors/tax-amount.js.map +1 -0
- package/dist/detectors/technical-docs.d.ts.map +1 -1
- package/dist/detectors/technical-docs.js +5 -1
- package/dist/detectors/technical-docs.js.map +1 -1
- package/dist/detectors/term-extension.d.ts +14 -0
- package/dist/detectors/term-extension.d.ts.map +1 -0
- package/dist/detectors/term-extension.js +67 -0
- package/dist/detectors/term-extension.js.map +1 -0
- package/dist/detectors/time-order.d.ts +5 -0
- package/dist/detectors/time-order.d.ts.map +1 -0
- package/dist/detectors/time-order.js +58 -0
- package/dist/detectors/time-order.js.map +1 -0
- package/dist/detectors/ui-label.d.ts +3 -0
- package/dist/detectors/ui-label.d.ts.map +1 -0
- package/dist/detectors/ui-label.js +16 -0
- package/dist/detectors/ui-label.js.map +1 -0
- package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
- package/dist/detectors/unbalanced-bracket.js +8 -13
- package/dist/detectors/unbalanced-bracket.js.map +1 -1
- package/dist/detectors/undefined-call.d.ts +3 -0
- package/dist/detectors/undefined-call.d.ts.map +1 -0
- package/dist/detectors/undefined-call.js +18 -0
- package/dist/detectors/undefined-call.js.map +1 -0
- package/dist/detectors/undefined-term.d.ts +22 -0
- package/dist/detectors/undefined-term.d.ts.map +1 -0
- package/dist/detectors/undefined-term.js +101 -0
- package/dist/detectors/undefined-term.js.map +1 -0
- package/dist/detectors/unknown-word.d.ts +1 -1
- package/dist/detectors/unknown-word.js +3 -3
- package/dist/detectors/unknown-word.js.map +1 -1
- package/dist/detectors/vague-deadline.d.ts +4 -0
- package/dist/detectors/vague-deadline.d.ts.map +1 -1
- package/dist/detectors/vague-deadline.js +3 -3
- package/dist/detectors/vague-deadline.js.map +1 -1
- package/dist/detectors/version-mismatch.d.ts.map +1 -1
- package/dist/detectors/version-mismatch.js +18 -1
- package/dist/detectors/version-mismatch.js.map +1 -1
- package/dist/detectors/version-order.d.ts +3 -0
- package/dist/detectors/version-order.d.ts.map +1 -0
- package/dist/detectors/version-order.js +43 -0
- package/dist/detectors/version-order.js.map +1 -0
- package/dist/detectors/warning-action.d.ts +3 -0
- package/dist/detectors/warning-action.d.ts.map +1 -0
- package/dist/detectors/warning-action.js +48 -0
- package/dist/detectors/warning-action.js.map +1 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +4 -1
- package/dist/document.js.map +1 -1
- package/dist/facts/condition-pairs.d.ts +51 -0
- package/dist/facts/condition-pairs.d.ts.map +1 -0
- package/dist/facts/condition-pairs.js +203 -0
- package/dist/facts/condition-pairs.js.map +1 -0
- package/dist/facts/event-dates.d.ts +26 -0
- package/dist/facts/event-dates.d.ts.map +1 -0
- package/dist/facts/event-dates.js +38 -0
- package/dist/facts/event-dates.js.map +1 -0
- package/dist/facts/fact-scope.d.ts +2 -0
- package/dist/facts/fact-scope.d.ts.map +1 -1
- package/dist/facts/fact-scope.js +5 -0
- package/dist/facts/fact-scope.js.map +1 -1
- package/dist/facts/labelled-facts.d.ts +2 -0
- package/dist/facts/labelled-facts.d.ts.map +1 -1
- package/dist/facts/labelled-facts.js +9 -1
- package/dist/facts/labelled-facts.js.map +1 -1
- package/dist/facts/table-facts.d.ts +18 -0
- package/dist/facts/table-facts.d.ts.map +1 -1
- package/dist/facts/table-facts.js +4 -2
- package/dist/facts/table-facts.js.map +1 -1
- package/dist/grade/ai-score.d.ts +1 -1
- package/dist/grade/ai-score.d.ts.map +1 -1
- package/dist/grade/text.js +2 -2
- package/dist/grade/text.js.map +1 -1
- package/dist/heading-numbering.js +2 -2
- package/dist/heading-numbering.js.map +1 -1
- package/dist/html/fetch-page.d.ts +20 -0
- package/dist/html/fetch-page.d.ts.map +1 -0
- package/dist/html/fetch-page.js +51 -0
- package/dist/html/fetch-page.js.map +1 -0
- package/dist/html/fetched-text.d.ts +5 -0
- package/dist/html/fetched-text.d.ts.map +1 -0
- package/dist/html/fetched-text.js +25 -0
- package/dist/html/fetched-text.js.map +1 -0
- package/dist/html/html-content-block.d.ts +6 -0
- package/dist/html/html-content-block.d.ts.map +1 -0
- package/dist/html/html-content-block.js +86 -0
- package/dist/html/html-content-block.js.map +1 -0
- package/dist/html/html-elements.d.ts +41 -0
- package/dist/html/html-elements.d.ts.map +1 -0
- package/dist/html/html-elements.js +91 -0
- package/dist/html/html-elements.js.map +1 -0
- package/dist/html/html-footnote-marks.d.ts +2 -0
- package/dist/html/html-footnote-marks.d.ts.map +1 -0
- package/dist/html/html-footnote-marks.js +15 -0
- package/dist/html/html-footnote-marks.js.map +1 -0
- package/dist/html/html-heading-links.d.ts +6 -0
- package/dist/html/html-heading-links.d.ts.map +1 -0
- package/dist/html/html-heading-links.js +71 -0
- package/dist/html/html-heading-links.js.map +1 -0
- package/dist/html/html-lost-tags.d.ts +3 -0
- package/dist/html/html-lost-tags.d.ts.map +1 -0
- package/dist/html/html-lost-tags.js +11 -0
- package/dist/html/html-lost-tags.js.map +1 -0
- package/dist/html/html-markdown.d.ts +2 -0
- package/dist/html/html-markdown.d.ts.map +1 -0
- package/dist/html/html-markdown.js +347 -0
- package/dist/html/html-markdown.js.map +1 -0
- package/dist/html/html-preformatted.d.ts +17 -0
- package/dist/html/html-preformatted.d.ts.map +1 -0
- package/dist/html/html-preformatted.js +82 -0
- package/dist/html/html-preformatted.js.map +1 -0
- package/dist/html/html-reader-only.d.ts +6 -0
- package/dist/html/html-reader-only.d.ts.map +1 -0
- package/dist/html/html-reader-only.js +63 -0
- package/dist/html/html-reader-only.js.map +1 -0
- package/dist/html/html-run-in-headings.d.ts +2 -0
- package/dist/html/html-run-in-headings.d.ts.map +1 -0
- package/dist/html/html-run-in-headings.js +36 -0
- package/dist/html/html-run-in-headings.js.map +1 -0
- package/dist/html/html-tables.d.ts +3 -0
- package/dist/html/html-tables.d.ts.map +1 -0
- package/dist/html/html-tables.js +58 -0
- package/dist/html/html-tables.js.map +1 -0
- package/dist/html/html-widgets.d.ts +3 -0
- package/dist/html/html-widgets.d.ts.map +1 -0
- package/dist/html/html-widgets.js +71 -0
- package/dist/html/html-widgets.js.map +1 -0
- package/dist/html/markup-text.d.ts +5 -0
- package/dist/html/markup-text.d.ts.map +1 -0
- package/dist/html/markup-text.js +32 -0
- package/dist/html/markup-text.js.map +1 -0
- package/dist/html/page-document.d.ts +9 -0
- package/dist/html/page-document.d.ts.map +1 -0
- package/dist/html/page-document.js +19 -0
- package/dist/html/page-document.js.map +1 -0
- package/dist/inline-count.d.ts +19 -0
- package/dist/inline-count.d.ts.map +1 -0
- package/dist/inline-count.js +109 -0
- package/dist/inline-count.js.map +1 -0
- package/dist/kana-spelling.d.ts +5 -0
- package/dist/kana-spelling.d.ts.map +1 -1
- package/dist/kana-spelling.js +5 -0
- package/dist/kana-spelling.js.map +1 -1
- package/dist/location-part.d.ts +13 -0
- package/dist/location-part.d.ts.map +1 -0
- package/dist/location-part.js +24 -0
- package/dist/location-part.js.map +1 -0
- package/dist/nado-closed-list.d.ts +20 -0
- package/dist/nado-closed-list.d.ts.map +1 -0
- package/dist/nado-closed-list.js +72 -0
- package/dist/nado-closed-list.js.map +1 -0
- package/dist/name-cue.d.ts +17 -0
- package/dist/name-cue.d.ts.map +1 -0
- package/dist/name-cue.js +29 -0
- package/dist/name-cue.js.map +1 -0
- package/dist/name-variants.d.ts +29 -2
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +107 -8
- package/dist/name-variants.js.map +1 -1
- package/dist/name-word-order.d.ts +49 -0
- package/dist/name-word-order.d.ts.map +1 -0
- package/dist/name-word-order.js +114 -0
- package/dist/name-word-order.js.map +1 -0
- package/dist/paragraph-runs.d.ts +6 -1
- package/dist/paragraph-runs.d.ts.map +1 -1
- package/dist/paragraph-runs.js +9 -2
- package/dist/paragraph-runs.js.map +1 -1
- package/dist/parameter-table.d.ts +19 -0
- package/dist/parameter-table.d.ts.map +1 -0
- package/dist/parameter-table.js +191 -0
- package/dist/parameter-table.js.map +1 -0
- package/dist/phone-numbers.d.ts +23 -0
- package/dist/phone-numbers.d.ts.map +1 -0
- package/dist/phone-numbers.js +83 -0
- package/dist/phone-numbers.js.map +1 -0
- package/dist/place-names.d.ts +55 -0
- package/dist/place-names.d.ts.map +1 -0
- package/dist/place-names.js +196 -0
- package/dist/place-names.js.map +1 -0
- package/dist/plugin.d.ts +11 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/prerequisite-order.d.ts +16 -0
- package/dist/prerequisite-order.d.ts.map +1 -0
- package/dist/prerequisite-order.js +29 -0
- package/dist/prerequisite-order.js.map +1 -0
- package/dist/profile/parse.d.ts.map +1 -1
- package/dist/profile/parse.js +10 -1
- package/dist/profile/parse.js.map +1 -1
- package/dist/reasons.d.ts +2 -0
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +2 -0
- package/dist/reasons.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +4 -0
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/rules-table.d.ts.map +1 -1
- package/dist/render/rules-table.js +6 -2
- package/dist/render/rules-table.js.map +1 -1
- package/dist/return-type.d.ts +33 -0
- package/dist/return-type.d.ts.map +1 -0
- package/dist/return-type.js +302 -0
- package/dist/return-type.js.map +1 -0
- package/dist/rule-genres.d.ts +5 -2
- package/dist/rule-genres.d.ts.map +1 -1
- package/dist/rule-genres.js +2 -0
- package/dist/rule-genres.js.map +1 -1
- package/dist/rule-load.d.ts.map +1 -1
- package/dist/rule-load.js +2 -1
- package/dist/rule-load.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +5 -1
- package/dist/run.js.map +1 -1
- package/dist/spelling.d.ts +2 -0
- package/dist/spelling.d.ts.map +1 -1
- package/dist/spelling.js +6 -0
- package/dist/spelling.js.map +1 -1
- package/dist/structure/action-due.d.ts +21 -0
- package/dist/structure/action-due.d.ts.map +1 -0
- package/dist/structure/action-due.js +126 -0
- package/dist/structure/action-due.js.map +1 -0
- package/dist/structure/amount-range.d.ts +30 -0
- package/dist/structure/amount-range.d.ts.map +1 -0
- package/dist/structure/amount-range.js +153 -0
- package/dist/structure/amount-range.js.map +1 -0
- package/dist/structure/amount-scale.d.ts +6 -0
- package/dist/structure/amount-scale.d.ts.map +1 -1
- package/dist/structure/amount-scale.js +13 -0
- package/dist/structure/amount-scale.js.map +1 -1
- package/dist/structure/cite.d.ts +5 -2
- package/dist/structure/cite.d.ts.map +1 -1
- package/dist/structure/cite.js +20 -1
- package/dist/structure/cite.js.map +1 -1
- package/dist/structure/connection-times.d.ts +56 -0
- package/dist/structure/connection-times.d.ts.map +1 -0
- package/dist/structure/connection-times.js +165 -0
- package/dist/structure/connection-times.js.map +1 -0
- package/dist/structure/counted-amounts.d.ts +12 -0
- package/dist/structure/counted-amounts.d.ts.map +1 -0
- package/dist/structure/counted-amounts.js +30 -0
- package/dist/structure/counted-amounts.js.map +1 -0
- package/dist/structure/date-order-tie.d.ts +13 -0
- package/dist/structure/date-order-tie.d.ts.map +1 -0
- package/dist/structure/date-order-tie.js +61 -0
- package/dist/structure/date-order-tie.js.map +1 -0
- package/dist/structure/date-order.d.ts +24 -3
- package/dist/structure/date-order.d.ts.map +1 -1
- package/dist/structure/date-order.js +66 -17
- package/dist/structure/date-order.js.map +1 -1
- package/dist/structure/date-outside-period.d.ts +33 -0
- package/dist/structure/date-outside-period.d.ts.map +1 -0
- package/dist/structure/date-outside-period.js +132 -0
- package/dist/structure/date-outside-period.js.map +1 -0
- package/dist/structure/date-range.d.ts +5 -2
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +37 -9
- package/dist/structure/date-range.js.map +1 -1
- package/dist/structure/definition-use.d.ts +5 -2
- package/dist/structure/definition-use.d.ts.map +1 -1
- package/dist/structure/definition-use.js +11 -3
- package/dist/structure/definition-use.js.map +1 -1
- package/dist/structure/due-date.d.ts +19 -0
- package/dist/structure/due-date.d.ts.map +1 -0
- package/dist/structure/due-date.js +30 -0
- package/dist/structure/due-date.js.map +1 -0
- package/dist/structure/heading-runs.d.ts +9 -0
- package/dist/structure/heading-runs.d.ts.map +1 -0
- package/dist/structure/heading-runs.js +23 -0
- package/dist/structure/heading-runs.js.map +1 -0
- package/dist/structure/install-pin.d.ts +46 -0
- package/dist/structure/install-pin.d.ts.map +1 -0
- package/dist/structure/install-pin.js +85 -0
- package/dist/structure/install-pin.js.map +1 -0
- package/dist/structure/leg-times.d.ts +36 -0
- package/dist/structure/leg-times.d.ts.map +1 -0
- package/dist/structure/leg-times.js +148 -0
- package/dist/structure/leg-times.js.map +1 -0
- package/dist/structure/line-amount-unit.d.ts +24 -0
- package/dist/structure/line-amount-unit.d.ts.map +1 -0
- package/dist/structure/line-amount-unit.js +24 -0
- package/dist/structure/line-amount-unit.js.map +1 -0
- package/dist/structure/line-amount.d.ts +40 -0
- package/dist/structure/line-amount.d.ts.map +1 -0
- package/dist/structure/line-amount.js +118 -0
- package/dist/structure/line-amount.js.map +1 -0
- package/dist/structure/number-word-figure.d.ts +37 -0
- package/dist/structure/number-word-figure.d.ts.map +1 -0
- package/dist/structure/number-word-figure.js +151 -0
- package/dist/structure/number-word-figure.js.map +1 -0
- package/dist/structure/numbering.d.ts +1 -0
- package/dist/structure/numbering.d.ts.map +1 -1
- package/dist/structure/numbering.js +3 -0
- package/dist/structure/numbering.js.map +1 -1
- package/dist/structure/ordinal-runs.d.ts +45 -0
- package/dist/structure/ordinal-runs.d.ts.map +1 -0
- package/dist/structure/ordinal-runs.js +78 -0
- package/dist/structure/ordinal-runs.js.map +1 -0
- package/dist/structure/party-order.d.ts +33 -0
- package/dist/structure/party-order.d.ts.map +1 -0
- package/dist/structure/party-order.js +79 -0
- package/dist/structure/party-order.js.map +1 -0
- package/dist/structure/percent-sum-prose.d.ts +1 -1
- package/dist/structure/percent-sum-prose.d.ts.map +1 -1
- package/dist/structure/percent-sum-prose.js +45 -3
- package/dist/structure/percent-sum-prose.js.map +1 -1
- package/dist/structure/percent-sum.d.ts +8 -0
- package/dist/structure/percent-sum.d.ts.map +1 -1
- package/dist/structure/percent-sum.js +8 -1
- package/dist/structure/percent-sum.js.map +1 -1
- package/dist/structure/release-list.d.ts +9 -0
- package/dist/structure/release-list.d.ts.map +1 -0
- package/dist/structure/release-list.js +46 -0
- package/dist/structure/release-list.js.map +1 -0
- package/dist/structure/requirement-lists.d.ts +37 -0
- package/dist/structure/requirement-lists.d.ts.map +1 -0
- package/dist/structure/requirement-lists.js +89 -0
- package/dist/structure/requirement-lists.js.map +1 -0
- package/dist/structure/share-column.d.ts +7 -0
- package/dist/structure/share-column.d.ts.map +1 -0
- package/dist/structure/share-column.js +22 -0
- package/dist/structure/share-column.js.map +1 -0
- package/dist/structure/stated-period.d.ts +31 -0
- package/dist/structure/stated-period.d.ts.map +1 -0
- package/dist/structure/stated-period.js +127 -0
- package/dist/structure/stated-period.js.map +1 -0
- package/dist/structure/tax.d.ts +25 -0
- package/dist/structure/tax.d.ts.map +1 -0
- package/dist/structure/tax.js +86 -0
- package/dist/structure/tax.js.map +1 -0
- package/dist/structure/time-marks.d.ts +58 -0
- package/dist/structure/time-marks.d.ts.map +1 -0
- package/dist/structure/time-marks.js +74 -0
- package/dist/structure/time-marks.js.map +1 -0
- package/dist/structure/time-order.d.ts +42 -0
- package/dist/structure/time-order.d.ts.map +1 -0
- package/dist/structure/time-order.js +107 -0
- package/dist/structure/time-order.js.map +1 -0
- package/dist/structure/title-lines.d.ts +8 -0
- package/dist/structure/title-lines.d.ts.map +1 -0
- package/dist/structure/title-lines.js +27 -0
- package/dist/structure/title-lines.js.map +1 -0
- package/dist/structure/total.d.ts.map +1 -1
- package/dist/structure/total.js +3 -1
- package/dist/structure/total.js.map +1 -1
- package/dist/structure/version-mismatch.d.ts +1 -5
- package/dist/structure/version-mismatch.d.ts.map +1 -1
- package/dist/structure/version-mismatch.js +65 -12
- package/dist/structure/version-mismatch.js.map +1 -1
- package/dist/structure/version-order.d.ts +25 -0
- package/dist/structure/version-order.d.ts.map +1 -0
- package/dist/structure/version-order.js +77 -0
- package/dist/structure/version-order.js.map +1 -0
- package/dist/surname-near.d.ts +6 -0
- package/dist/surname-near.d.ts.map +1 -0
- package/dist/surname-near.js +31 -0
- package/dist/surname-near.js.map +1 -0
- package/dist/table-cells.d.ts +13 -0
- package/dist/table-cells.d.ts.map +1 -0
- package/dist/table-cells.js +36 -0
- package/dist/table-cells.js.map +1 -0
- package/dist/table-names.d.ts +42 -0
- package/dist/table-names.d.ts.map +1 -0
- package/dist/table-names.js +94 -0
- package/dist/table-names.js.map +1 -0
- package/dist/table-text.d.ts +9 -0
- package/dist/table-text.d.ts.map +1 -0
- package/dist/table-text.js +36 -0
- package/dist/table-text.js.map +1 -0
- package/dist/ui-labels.d.ts +16 -0
- package/dist/ui-labels.d.ts.map +1 -0
- package/dist/ui-labels.js +42 -0
- package/dist/ui-labels.js.map +1 -0
- package/dist/undefined-call.d.ts +13 -0
- package/dist/undefined-call.d.ts.map +1 -0
- package/dist/undefined-call.js +55 -0
- package/dist/undefined-call.js.map +1 -0
- package/dist/unnamed-speaker.d.ts +23 -0
- package/dist/unnamed-speaker.d.ts.map +1 -0
- package/dist/unnamed-speaker.js +176 -0
- package/dist/unnamed-speaker.js.map +1 -0
- package/dist/warning-action.d.ts +22 -0
- package/dist/warning-action.d.ts.map +1 -0
- package/dist/warning-action.js +58 -0
- package/dist/warning-action.js.map +1 -0
- package/genres.yaml +2 -0
- package/package.json +4 -3
- package/profiles/statute.yaml +8 -0
- package/rules/agreement-slip.yaml +2 -2
- package/rules/amount-range-reversed.yaml +52 -0
- package/rules/amount-scale-consistency.yaml +4 -4
- package/rules/announced-count-mismatch.yaml +9 -4
- package/rules/arrival-before-departure.yaml +48 -0
- package/rules/connection-time-short.yaml +52 -0
- package/rules/connective-hierarchy.yaml +3 -3
- package/rules/currency-notation-consistency.yaml +2 -2
- package/rules/date-order.yaml +9 -4
- package/rules/date-outside-period.yaml +64 -0
- package/rules/default-value-mismatch.yaml +79 -0
- package/rules/defined-term-form.yaml +9 -7
- package/rules/deprecated-option-used.yaml +78 -0
- package/rules/doubled-nado.yaml +28 -12
- package/rules/due-before-issue.yaml +68 -0
- package/rules/duplicate-definition.yaml +2 -2
- package/rules/duration-mismatch.yaml +15 -4
- package/rules/duration-product-mismatch.yaml +73 -0
- package/rules/heading-echo.yaml +2 -2
- package/rules/hyphen-as-dash.yaml +2 -2
- package/rules/kana-function-word.yaml +58 -0
- package/rules/latin-spacing.yaml +6 -5
- package/rules/line-amount-mismatch.yaml +58 -0
- package/rules/nado-closed-list.yaml +77 -0
- package/rules/name-variant.yaml +20 -2
- package/rules/number-word-figure-mismatch.yaml +76 -0
- package/rules/numbering-gap.yaml +2 -2
- package/rules/obligation-without-deadline.yaml +95 -0
- package/rules/one-sentence-paragraph-run.yaml +2 -3
- package/rules/parameter-table-mismatch.yaml +90 -0
- package/rules/party-order.yaml +84 -0
- package/rules/percent-sum-mismatch.yaml +2 -2
- package/rules/phone-number-variant.yaml +68 -0
- package/rules/prerequisite-after-step.yaml +78 -0
- package/rules/quote-unnamed-speaker.yaml +67 -0
- package/rules/quote-without-source.yaml +6 -6
- package/rules/required-listed-as-preferred.yaml +102 -0
- package/rules/requirement-smell.yaml +3 -3
- package/rules/return-type-mismatch.yaml +79 -0
- package/rules/sentence-initial-conjunction-run.yaml +13 -7
- package/rules/summary-fact-mismatch.yaml +4 -4
- package/rules/tax-mismatch.yaml +71 -0
- package/rules/time-order.yaml +65 -0
- package/rules/title-length.yaml +2 -2
- package/rules/ui-label-variant.yaml +70 -0
- package/rules/unbalanced-bracket.yaml +4 -4
- package/rules/uncomparable-graded.yaml +29 -10
- package/rules/undefined-function-call.yaml +77 -0
- package/rules/undefined-term.yaml +86 -0
- package/rules/unknown-word.yaml +2 -2
- package/rules/unqualified-superlative.yaml +2 -2
- package/rules/use-before-definition.yaml +2 -2
- package/rules/version-mismatch.yaml +12 -4
- package/rules/version-order.yaml +85 -0
- package/rules/very-adjective.yaml +31 -13
- package/rules/warning-without-action.yaml +64 -0
- package/rules/wordy-phrase.yaml +27 -9
- package/src/ai-score/of-document.ts +19 -9
- package/src/ai-score/render.ts +24 -4
- package/src/ai-score/score.ts +24 -3
- package/src/ai-score/signals.ts +12 -2
- package/src/ai-score/text.ts +7 -2
- package/src/announced-count.ts +19 -12
- package/src/check-source.ts +11 -2
- package/src/cli-text.ts +38 -16
- package/src/cli.ts +2 -1
- package/src/commands/cite-claims.ts +103 -0
- package/src/commands/cite-page.ts +61 -0
- package/src/commands/cite-scaffold.ts +27 -0
- package/src/commands/cite.ts +127 -58
- package/src/company-names.ts +202 -0
- package/src/default-values.ts +158 -0
- package/src/deprecated-use.ts +122 -0
- package/src/derived/session-hours.ts +62 -0
- package/src/derived/stays.ts +145 -0
- package/src/derived/time-lengths.ts +226 -0
- package/src/derived/unit-counts.ts +18 -0
- package/src/derived/working-hours.ts +97 -0
- package/src/detectors/acronym-context.ts +10 -2
- package/src/detectors/acronym-expansion.ts +57 -2
- package/src/detectors/address-word.ts +9 -0
- package/src/detectors/agreement-slip.ts +7 -1
- package/src/detectors/ai-phrasing.ts +6 -1
- package/src/detectors/amount-range.ts +54 -0
- package/src/detectors/amount-scale.ts +50 -17
- package/src/detectors/announced-count.ts +29 -11
- package/src/detectors/bare-comparative.ts +7 -2
- package/src/detectors/block-quotation.ts +95 -0
- package/src/detectors/bracket-label.ts +58 -0
- package/src/detectors/capitalised-term.ts +147 -0
- package/src/detectors/citation-entry.ts +20 -5
- package/src/detectors/code-before.ts +14 -0
- package/src/detectors/connective-hierarchy.ts +39 -11
- package/src/detectors/currency-notation.ts +2 -1
- package/src/detectors/date-outside-period.ts +41 -0
- package/src/detectors/default-values.ts +17 -0
- package/src/detectors/defined-term-form.ts +84 -15
- package/src/detectors/definition-use.ts +10 -2
- package/src/detectors/deprecated-use.ts +17 -0
- package/src/detectors/derived-numbers.ts +174 -10
- package/src/detectors/document-shape.ts +6 -1
- package/src/detectors/due-date.ts +47 -0
- package/src/detectors/en-shape.ts +27 -11
- package/src/detectors/fact-consistency.ts +95 -3
- package/src/detectors/heading-echo.ts +11 -1
- package/src/detectors/kana-function-word.ts +71 -0
- package/src/detectors/line-amount.ts +33 -0
- package/src/detectors/location-pointer.ts +30 -0
- package/src/detectors/mark-shape.ts +18 -1
- package/src/detectors/nado-closed-list.ts +25 -0
- package/src/detectors/name-variant.ts +164 -13
- package/src/detectors/next-word.ts +56 -9
- package/src/detectors/number-word-figure.ts +43 -0
- package/src/detectors/obligation-without-deadline.ts +192 -0
- package/src/detectors/open-end-names.ts +140 -0
- package/src/detectors/ordinal-run-gaps.ts +101 -0
- package/src/detectors/orthographic-variant.ts +39 -14
- package/src/detectors/orthography.ts +6 -1
- package/src/detectors/parameter-table.ts +17 -0
- package/src/detectors/party-order.ts +50 -0
- package/src/detectors/phone-number-variant.ts +18 -0
- package/src/detectors/prerequisite-order.ts +35 -0
- package/src/detectors/quote-unnamed-speaker.ts +19 -0
- package/src/detectors/quote-without-source.ts +57 -10
- package/src/detectors/registry/amount-range.ts +4 -0
- package/src/detectors/registry/arrival-before-departure.ts +4 -0
- package/src/detectors/registry/connection-time-short.ts +4 -0
- package/src/detectors/registry/date-outside-period.ts +4 -0
- package/src/detectors/registry/default-values.ts +4 -0
- package/src/detectors/registry/deprecated-use.ts +4 -0
- package/src/detectors/registry/due-date.ts +4 -0
- package/src/detectors/registry/duration-product-mismatch.ts +4 -0
- package/src/detectors/registry/kana-function-word.ts +4 -0
- package/src/detectors/registry/line-amount.ts +4 -0
- package/src/detectors/registry/nado-closed-list.ts +4 -0
- package/src/detectors/registry/number-word-figure.ts +4 -0
- package/src/detectors/registry/obligation-without-deadline.ts +4 -0
- package/src/detectors/registry/parameter-table.ts +4 -0
- package/src/detectors/registry/party-order.ts +4 -0
- package/src/detectors/registry/phone-number-variant.ts +4 -0
- package/src/detectors/registry/prerequisite-order.ts +4 -0
- package/src/detectors/registry/quote-unnamed-speaker.ts +4 -0
- package/src/detectors/registry/requirement-lists.ts +4 -0
- package/src/detectors/registry/return-type.ts +4 -0
- package/src/detectors/registry/tax-amount.ts +4 -0
- package/src/detectors/registry/time-order.ts +4 -0
- package/src/detectors/registry/ui-label.ts +4 -0
- package/src/detectors/registry/undefined-call.ts +4 -0
- package/src/detectors/registry/undefined-term.ts +4 -0
- package/src/detectors/registry/version-order.ts +4 -0
- package/src/detectors/registry/warning-action.ts +4 -0
- package/src/detectors/requirement-lists.ts +65 -0
- package/src/detectors/requirement-smell.ts +29 -9
- package/src/detectors/return-type.ts +30 -0
- package/src/detectors/structure-tree.ts +55 -22
- package/src/detectors/superlative-scope.ts +13 -1
- package/src/detectors/tax-amount.ts +25 -0
- package/src/detectors/technical-docs.ts +7 -1
- package/src/detectors/term-extension.ts +67 -0
- package/src/detectors/time-order.ts +84 -0
- package/src/detectors/ui-label.ts +17 -0
- package/src/detectors/unbalanced-bracket.ts +7 -14
- package/src/detectors/undefined-call.ts +19 -0
- package/src/detectors/undefined-term.ts +120 -0
- package/src/detectors/unknown-word.ts +3 -3
- package/src/detectors/vague-deadline.ts +3 -3
- package/src/detectors/version-mismatch.ts +26 -5
- package/src/detectors/version-order.ts +50 -0
- package/src/detectors/warning-action.ts +49 -0
- package/src/document.ts +4 -1
- package/src/facts/condition-pairs.ts +289 -0
- package/src/facts/event-dates.ts +63 -0
- package/src/facts/fact-scope.ts +6 -0
- package/src/facts/labelled-facts.ts +13 -1
- package/src/facts/table-facts.ts +6 -3
- package/src/grade/ai-score.ts +1 -1
- package/src/grade/text.ts +2 -2
- package/src/heading-numbering.ts +2 -2
- package/src/html/fetch-page.ts +64 -0
- package/src/html/fetched-text.ts +32 -0
- package/src/html/html-content-block.ts +107 -0
- package/src/html/html-elements.ts +127 -0
- package/src/html/html-footnote-marks.ts +20 -0
- package/src/html/html-heading-links.ts +93 -0
- package/src/html/html-lost-tags.ts +14 -0
- package/src/html/html-markdown.ts +481 -0
- package/src/html/html-preformatted.ts +110 -0
- package/src/html/html-reader-only.ts +82 -0
- package/src/html/html-run-in-headings.ts +43 -0
- package/src/html/html-tables.ts +76 -0
- package/src/html/html-widgets.ts +114 -0
- package/src/html/markup-text.ts +35 -0
- package/src/html/page-document.ts +22 -0
- package/src/inline-count.ts +146 -0
- package/src/kana-spelling.ts +7 -0
- package/src/location-part.ts +30 -0
- package/src/nado-closed-list.ts +106 -0
- package/src/name-cue.ts +35 -0
- package/src/name-variants.ts +133 -12
- package/src/name-word-order.ts +149 -0
- package/src/paragraph-runs.ts +12 -2
- package/src/parameter-table.ts +208 -0
- package/src/phone-numbers.ts +98 -0
- package/src/place-names.ts +248 -0
- package/src/plugin.ts +9 -0
- package/src/prerequisite-order.ts +39 -0
- package/src/profile/parse.ts +10 -1
- package/src/reasons.ts +4 -0
- package/src/render/rules-json.ts +4 -0
- package/src/render/rules-table.ts +6 -3
- package/src/return-type.ts +361 -0
- package/src/rule-genres.ts +5 -2
- package/src/rule-load.ts +3 -2
- package/src/run.ts +3 -1
- package/src/spelling.ts +8 -0
- package/src/structure/action-due.ts +179 -0
- package/src/structure/amount-range.ts +219 -0
- package/src/structure/amount-scale.ts +18 -0
- package/src/structure/cite.ts +21 -2
- package/src/structure/connection-times.ts +226 -0
- package/src/structure/counted-amounts.ts +42 -0
- package/src/structure/date-order-tie.ts +86 -0
- package/src/structure/date-order.ts +100 -23
- package/src/structure/date-outside-period.ts +192 -0
- package/src/structure/date-range.ts +45 -9
- package/src/structure/definition-use.ts +24 -3
- package/src/structure/due-date.ts +46 -0
- package/src/structure/heading-runs.ts +24 -0
- package/src/structure/install-pin.ts +115 -0
- package/src/structure/leg-times.ts +213 -0
- package/src/structure/line-amount-unit.ts +35 -0
- package/src/structure/line-amount.ts +162 -0
- package/src/structure/number-word-figure.ts +199 -0
- package/src/structure/numbering.ts +3 -0
- package/src/structure/ordinal-runs.ts +107 -0
- package/src/structure/party-order.ts +115 -0
- package/src/structure/percent-sum-prose.ts +46 -3
- package/src/structure/percent-sum.ts +16 -2
- package/src/structure/release-list.ts +69 -0
- package/src/structure/requirement-lists.ts +145 -0
- package/src/structure/share-column.ts +25 -0
- package/src/structure/stated-period.ts +161 -0
- package/src/structure/tax.ts +114 -0
- package/src/structure/time-marks.ts +127 -0
- package/src/structure/time-order.ts +141 -0
- package/src/structure/title-lines.ts +33 -0
- package/src/structure/total.ts +5 -1
- package/src/structure/version-mismatch.ts +67 -13
- package/src/structure/version-order.ts +94 -0
- package/src/surname-near.ts +31 -0
- package/src/table-cells.ts +41 -0
- package/src/table-names.ts +113 -0
- package/src/table-text.ts +39 -0
- package/src/ui-labels.ts +55 -0
- package/src/undefined-call.ts +65 -0
- package/src/unnamed-speaker.ts +224 -0
- package/src/warning-action.ts +73 -0
- package/styles/koyobun.yaml +7 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// A footnote's reference mark: a superscript that is a link (<sup><a …>1</a></sup>), or a link to a place on the same
|
|
2
|
+
// page holding nothing but a superscript (<a href="#fn1"><sup>1</sup></a>). Read as text the number sticks to the
|
|
3
|
+
// sentence it follows ("recessions.1 Over"), so the mark is dropped; the note itself stays where the page has it. A
|
|
4
|
+
// superscript that is a link is a mark wherever the link goes (the notes may be on another page); a link around a
|
|
5
|
+
// superscript is one only when it stays on this page, since "Brand<a href=…><sup>TM</sup></a>" is a sign. A superscript
|
|
6
|
+
// with no link ("25<sup>th</sup>") is text. Pure.
|
|
7
|
+
const LINK_IN_SUPERSCRIPT = /<sup\b[^>]*>\s*<a\b[^>]*>[^<]*<\/a\s*>\s*<\/sup\s*>/giu;
|
|
8
|
+
const SUPERSCRIPT_LINK = /<a\b([^>]*)>\s*<sup\b[^>]*>([^<]*)<\/sup\s*>\s*<\/a\s*>/giu;
|
|
9
|
+
// The fragment must name something: href="#" alone goes nowhere and is a control.
|
|
10
|
+
const IN_PAGE_HREF = /\shref\s*=\s*(?:"#[^"\s]+"|'#[^'\s]+'|#[^\s"'>]+)/iu;
|
|
11
|
+
const isFootnoteLink = (attributes, mark) => IN_PAGE_HREF.test(attributes) && mark.trim() !== "";
|
|
12
|
+
export const withoutFootnoteMarks = (html) => html
|
|
13
|
+
.replace(LINK_IN_SUPERSCRIPT, "")
|
|
14
|
+
.replace(SUPERSCRIPT_LINK, (link, attributes, mark) => (isFootnoteLink(attributes, mark) ? "" : link));
|
|
15
|
+
//# sourceMappingURL=html-footnote-marks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-footnote-marks.js","sourceRoot":"","sources":["../../src/html/html-footnote-marks.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,kHAAkH;AAClH,oHAAoH;AACpH,kHAAkH;AAClH,wHAAwH;AACxH,kDAAkD;AAElD,MAAM,mBAAmB,GAAG,wDAAwD,CAAC;AAErF,MAAM,gBAAgB,GAAG,4DAA4D,CAAC;AAEtF,kFAAkF;AAClF,MAAM,YAAY,GAAG,qDAAqD,CAAC;AAE3E,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAE1H,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC3D,IAAI;KACD,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;KAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC,IAAY,EAAE,UAAkB,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A heading's link to its own section goes when it stands just after the heading ("Copy link to Context"), or inside
|
|
3
|
+
* it as a mark without words ("Scope ¶"). A link with words inside the heading is its title and stays.
|
|
4
|
+
*/
|
|
5
|
+
export declare const withoutHeadingSelfLinks: (html: string) => string;
|
|
6
|
+
//# sourceMappingURL=html-heading-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-heading-links.d.ts","sourceRoot":"","sources":["../../src/html/html-heading-links.ts"],"names":[],"mappings":"AA8EA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,MAUtD,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// A heading's link to its own section (a permalink beside or after the title), taken out of an HTML page. Pure.
|
|
2
|
+
import { ANY_LINK, ATTRIBUTES, elementRanges, hasNoWords, plainText } from "./html-elements.js";
|
|
3
|
+
import { decodeEntities } from "./markup-text.js";
|
|
4
|
+
const ID = new RegExp(String.raw `<([a-z][a-z0-9-]*)${ATTRIBUTES}\s+id\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+))`, "giu");
|
|
5
|
+
/** Where each id's element opens, and which element it is; the first one when an id is repeated. */
|
|
6
|
+
const idTargets = (html) => [...html.matchAll(ID)].reduce((targets, match) => {
|
|
7
|
+
const id = decodeEntities(match[2] ?? match[3] ?? match[4] ?? "");
|
|
8
|
+
return targets.has(id) ? targets : targets.set(id, { start: match.index, tag: (match[1] ?? "").toLowerCase() });
|
|
9
|
+
}, new Map());
|
|
10
|
+
const FRAGMENT = /^<a\b[^>]*\bhref\s*=\s*["']?[^"'#\s>]*#([^"'\s>]+)/iu;
|
|
11
|
+
/** The id a link's fragment names, its character references and percent escapes undone. */
|
|
12
|
+
const fragmentId = (link) => {
|
|
13
|
+
const fragment = FRAGMENT.exec(link)?.[1];
|
|
14
|
+
if (fragment === undefined)
|
|
15
|
+
return undefined;
|
|
16
|
+
const decoded = decodeEntities(fragment);
|
|
17
|
+
try {
|
|
18
|
+
return decodeURIComponent(decoded);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return decoded;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const HEADING_OPENING = /<h[1-6]\b/iu;
|
|
25
|
+
/** The target opens before the heading and closes after it, with no other heading opening in between. */
|
|
26
|
+
const isSectionOf = (target, place) => place.rangesOf(target.tag).some((range) => range.start === target.start && range.end >= place.end) &&
|
|
27
|
+
!HEADING_OPENING.test(place.html.slice(target.start, place.start));
|
|
28
|
+
/** A link to the heading's own section: the heading, something inside it, or the block it opens (a permalink, "Copy link to Context"). */
|
|
29
|
+
const isSelfLink = (link, place) => {
|
|
30
|
+
const id = fragmentId(link);
|
|
31
|
+
const target = id === undefined ? undefined : place.ids.get(id);
|
|
32
|
+
if (target === undefined || target.start >= place.end)
|
|
33
|
+
return false;
|
|
34
|
+
return target.start >= place.start || isSectionOf(target, place);
|
|
35
|
+
};
|
|
36
|
+
/** A permalink mark inside the heading (¶, #, an icon); a self-link with words is the title, or part of it. */
|
|
37
|
+
const isPermalinkMark = (link, place) => hasNoWords(plainText(link)) && isSelfLink(link, place);
|
|
38
|
+
const HEADING_THEN_LINK = /(<h([1-6])\b[^>]*>)([\s\S]*?)(<\/h\2\s*>)(\s*<a\b[^>]*>[\s\S]*?<\/a\s*>)?/giu;
|
|
39
|
+
/** The heading as matched, without its permalink marks or the self-link standing after it. */
|
|
40
|
+
const headingWithoutSelfLinks = (match, page) => {
|
|
41
|
+
const [, open = "", , inside = "", close = "", after] = match;
|
|
42
|
+
const place = { ...page, start: match.index, end: match.index + open.length + inside.length + close.length };
|
|
43
|
+
const kept = inside.replace(ANY_LINK, (link) => (isPermalinkMark(link, place) ? " " : link));
|
|
44
|
+
const next = after === undefined || isSelfLink(after.trim(), place) ? "" : after;
|
|
45
|
+
return `${open}${kept}${close}${next}`;
|
|
46
|
+
};
|
|
47
|
+
/** elementRanges for each tag, computed once. */
|
|
48
|
+
const rangesByTag = (html) => {
|
|
49
|
+
const cache = new Map();
|
|
50
|
+
return (tag) => {
|
|
51
|
+
const known = cache.get(tag);
|
|
52
|
+
if (known !== undefined)
|
|
53
|
+
return known;
|
|
54
|
+
const ranges = elementRanges(html, tag);
|
|
55
|
+
cache.set(tag, ranges);
|
|
56
|
+
return ranges;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* A heading's link to its own section goes when it stands just after the heading ("Copy link to Context"), or inside
|
|
61
|
+
* it as a mark without words ("Scope ¶"). A link with words inside the heading is its title and stays.
|
|
62
|
+
*/
|
|
63
|
+
export const withoutHeadingSelfLinks = (html) => {
|
|
64
|
+
const page = { ids: idTargets(html), html, rangesOf: rangesByTag(html) };
|
|
65
|
+
const cut = [...html.matchAll(HEADING_THEN_LINK)].reduce((acc, match) => ({
|
|
66
|
+
parts: [...acc.parts, html.slice(acc.from, match.index), headingWithoutSelfLinks(match, page)],
|
|
67
|
+
from: match.index + match[0].length,
|
|
68
|
+
}), { parts: [], from: 0 });
|
|
69
|
+
return [...cut.parts, html.slice(cut.from)].join("");
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=html-heading-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-heading-links.js","sourceRoot":"","sources":["../../src/html/html-heading-links.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-lost-tags.d.ts","sourceRoot":"","sources":["../../src/html/html-lost-tags.ts"],"names":[],"mappings":"AAWA,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAC2C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// A paragraph's start tag that lost its "<" upstream and so reached the page as text: the eCFR serves 16 CFR 310.4(b)
|
|
2
|
+
// with "… 45 CFR 160.103. P>(2) It is an abusive …", where "P>" is what is left of the <P> that opened paragraph (2).
|
|
3
|
+
// Read as text it glues the paragraph to the one before and leaves "P>" in the sentence. Only a P and a ">" standing
|
|
4
|
+
// after a sentence's end and right before a paragraph's designation ("(2)", "(iv)", "(A)") and a capital are taken for the lost
|
|
5
|
+
// tag; "P>0.05", "P > (2)" and a formula opening a sentence ("P>(2) follows") stay text. Pure.
|
|
6
|
+
const LOST_PARAGRAPH_TAG = /(?<=[.;:][)"'”’]?[ \t])[Pp](?:>|>)(?=\([0-9A-Za-z]{1,4}\)[ \t]\p{Lu})/gu;
|
|
7
|
+
/** Whether at is inside a tag. An attribute's ">" is escaped by then (withAttributeMarkupEscaped), so a tag has none before its end. */
|
|
8
|
+
const isInsideTag = (html, at) => html.lastIndexOf("<", at) > html.lastIndexOf(">", at - 1);
|
|
9
|
+
/** The HTML with each lost paragraph start tag in its text put back as <p>. */
|
|
10
|
+
export const withLostParagraphTagsRestored = (html) => html.replace(LOST_PARAGRAPH_TAG, (lost, at) => (isInsideTag(html, at) ? lost : "<p>"));
|
|
11
|
+
//# sourceMappingURL=html-lost-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-lost-tags.js","sourceRoot":"","sources":["../../src/html/html-lost-tags.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,yHAAyH;AACzH,qHAAqH;AACrH,gIAAgI;AAChI,+FAA+F;AAE/F,MAAM,kBAAkB,GAAG,4EAA4E,CAAC;AAExG,wIAAwI;AACxI,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAU,EAAW,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAErH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAY,EAAU,EAAE,CACpE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-markdown.d.ts","sourceRoot":"","sources":["../../src/html/html-markdown.ts"],"names":[],"mappings":"AA+cA,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAiB7C,CAAC"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
// An HTML page (a CRS report as EveryCRSReport serves it, a ministry's page) as plain Markdown: headings, paragraphs,
|
|
2
|
+
// list items and the text of links; ruby keeps its base text and loses its reading. Only the <main> element (else the
|
|
3
|
+
// role="main" element, else a sole <article>, else the block holding the title and nearly every sentence) is read when
|
|
4
|
+
// the page has one. Scripts, styles, the head, navigation (by
|
|
5
|
+
// element or by role, and breadcrumbs), asides, footers, forms, tables without sentences (html-tables.ts), footnote marks, lists and blocks of nothing but
|
|
6
|
+
// links (a menu, a table of contents, previous/next links, a breadcrumb trail, also as a list ending in the page's
|
|
7
|
+
// title), a list of the page in other languages, a block of icons with only a label, a block before the page's title that holds a menu or only links and no sentence (the site's header, with its tagline and
|
|
8
|
+
// labels), buttons outside a heading, controls (html-widgets.ts: tooltips, media players, scripted link buttons, paging
|
|
9
|
+
// bars, unspoken text), hidden elements, text for a screen reader only (a visually-hidden class, a skip
|
|
10
|
+
// link's target), a heading's link to its own section beside or after its title,
|
|
11
|
+
// lines of nothing but in-page or script links (never a heading), a heading drawn as an image unless its alt text is the page's
|
|
12
|
+
// title, blocks of nothing but links closing the page, and a copyright notice closing the page, with an address just
|
|
13
|
+
// before it, are dropped. A paragraph tag that lost its "<" upstream (html-lost-tags.ts) opens its paragraph again. Markup's spacing collapses; U+3000 is text and stays. Pure; a regular-expression reading that
|
|
14
|
+
// is enough for the documents in the corpus, not a parser for any HTML.
|
|
15
|
+
import { ANY_LINK, ATTRIBUTES, CLOSED_SENTENCE, asMarkup, elementRanges, hasNoWords, hasSentence, isFileLink, isInside, headingRanges, plainText, stripTags, withAttributeMarkupEscaped, withoutElementsOpening, withoutElementsWhere, withoutRanges, untilStable, } from "./html-elements.js";
|
|
16
|
+
import { contentBlock } from "./html-content-block.js";
|
|
17
|
+
import { withoutFootnoteMarks } from "./html-footnote-marks.js";
|
|
18
|
+
import { withoutHeadingSelfLinks } from "./html-heading-links.js";
|
|
19
|
+
import { withLostParagraphTagsRestored } from "./html-lost-tags.js";
|
|
20
|
+
import { withoutReaderOnlyText } from "./html-reader-only.js";
|
|
21
|
+
import { withRunInHeadingsRead } from "./html-run-in-headings.js";
|
|
22
|
+
import { withoutWidgets } from "./html-widgets.js";
|
|
23
|
+
import { withPreformattedRestored, withPreformattedStashed } from "./html-preformatted.js";
|
|
24
|
+
import { withTablesRead } from "./html-tables.js";
|
|
25
|
+
import { decodeEntities, tidyLines } from "./markup-text.js";
|
|
26
|
+
const DROPPED = ["script", "style", "head", "nav", "aside", "footer", "form", "noscript", "svg"];
|
|
27
|
+
const withoutElement = (html, tag) => {
|
|
28
|
+
const innermost = new RegExp(`<${tag}\\b[^>]*>(?:(?!<${tag}\\b)[\\s\\S])*?</${tag}\\s*>`, "giu");
|
|
29
|
+
return untilStable(html, (text) => text.replace(innermost, " "));
|
|
30
|
+
};
|
|
31
|
+
// HTML lets a ruby's parts omit their closing tags: a reading container (<rtc>) ends at the next <rb> or <rtc>, a
|
|
32
|
+
// reading (<rt>) or its bracket (<rp>) at the next <rb>, <rt> or <rp>; any of them at the end of the <ruby>.
|
|
33
|
+
const RUBY_TEXT_CONTAINER = /<rtc\b[^>]*>[\s\S]*?(?:<\/rtc\s*>|(?=<(?:rb|rtc)\b|$))/giu;
|
|
34
|
+
const RUBY_TEXT = /<(rt|rp)\b[^>]*>[\s\S]*?(?:<\/\1\s*>|(?=<(?:rb|rt|rp)\b|$))/giu;
|
|
35
|
+
/** Ruby as its base text alone: 漢字 with its reading becomes 漢字. */
|
|
36
|
+
const withoutRubyText = (html) => html.replace(/<ruby\b[^>]*>([\s\S]*?)<\/ruby\s*>/giu, (_whole, inside) => inside.replace(RUBY_TEXT_CONTAINER, "").replace(RUBY_TEXT, ""));
|
|
37
|
+
/**
|
|
38
|
+
* A link that moves within the page (a table of contents, "back to top"), through a series (rel="prev" / "next"), or
|
|
39
|
+
* goes nowhere and runs a script instead (href="javascript:…", a print or share button).
|
|
40
|
+
*/
|
|
41
|
+
const isChromeLink = (link) => /^<a\b[^>]*\bhref\s*=\s*(?:["']\s*)?(?:#|javascript:)/iu.test(link) || /^<a\b[^>]*\brel\s*=\s*(?:["'][^"']*\b)?(?:prev|next)\b/iu.test(link);
|
|
42
|
+
/** A list whose every item is only a link, such as a site menu or a table of contents. */
|
|
43
|
+
const isNavigation = (body) => [...body.matchAll(ANY_LINK)].length > 0 && stripTags(body.replace(ANY_LINK, "")).trim() === "";
|
|
44
|
+
// A role is a list of tokens and the first one counts: role="main document" is main.
|
|
45
|
+
const MAIN_ROLE = String.raw `${ATTRIBUTES}\s+role\s*=\s*(?:"\s*main(?:\s[^"]*)?"|'\s*main(?:\s[^']*)?'|main(?=[\s/>]))`;
|
|
46
|
+
/** The first element marked role="main" (a CMS's <article id="contents" role="main">), matched to its own closing tag. */
|
|
47
|
+
const mainLandmark = (html) => {
|
|
48
|
+
const tag = new RegExp(String.raw `<([a-z][a-z0-9]*)${MAIN_ROLE}`, "iu").exec(html)?.[1];
|
|
49
|
+
if (tag === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
return elementRanges(html, tag).find((range) => new RegExp(String.raw `^<[a-z][a-z0-9]*${MAIN_ROLE}`, "iu").test(range.openTag))?.inner;
|
|
52
|
+
};
|
|
53
|
+
const isOutermost = (range, _index, all) => !all.some((outer) => isInside(outer, range));
|
|
54
|
+
const holdsEveryTitle = (html, range) => [...html.matchAll(/<h1\b/giu)].every((title) => title.index > range.start && title.index < range.end);
|
|
55
|
+
/**
|
|
56
|
+
* The one <article> not nested in another, when the page has exactly one and no <h1> outside it: the composition the
|
|
57
|
+
* page was made for. A page title outside the article means the article is only part of the page's content.
|
|
58
|
+
*/
|
|
59
|
+
const soleArticle = (html) => {
|
|
60
|
+
const [only, ...others] = elementRanges(html, "article").filter(isOutermost);
|
|
61
|
+
return only !== undefined && others.length === 0 && holdsEveryTitle(html, only) ? only.inner : undefined;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The page's own content: inside <main>, else the element marked role="main", else a sole <article>, else the block
|
|
65
|
+
* holding the title and nearly every sentence (html-content-block.ts), else the whole page.
|
|
66
|
+
*/
|
|
67
|
+
const mainContent = (html) => /<main\b[^>]*>([\s\S]*)<\/main\s*>/iu.exec(html)?.[1] ?? mainLandmark(html) ?? soleArticle(html) ?? contentBlock(html) ?? html;
|
|
68
|
+
const LANDMARK = String.raw `(?:\brole\s*=\s*["']?navigation\b|\baria-label\s*=\s*(?:["'][^"']*|[^\s"'>]*)breadcrumb)`;
|
|
69
|
+
const LANDMARK_OPENING = new RegExp(String.raw `<([a-z][a-z0-9]*)\b[^>]*${LANDMARK}`, "giu");
|
|
70
|
+
const isLandmark = (range) => new RegExp(`^<[^>]*${LANDMARK}`, "iu").test(range.openTag);
|
|
71
|
+
/** Navigation that is not a <nav>: any element with role="navigation", or labelled as a breadcrumb. */
|
|
72
|
+
const withoutNavigationLandmarks = (html) => withoutElementsOpening(html, LANDMARK_OPENING, isLandmark);
|
|
73
|
+
// hidden="until-found" is found by the browser's search and opened, so its text is the page's.
|
|
74
|
+
const HIDDEN = String.raw `${ATTRIBUTES}\s+hidden(?=[\s/>=])(?!\s*=\s*(?:"until-found"|'until-found'|until-found(?=[\s/>])))`;
|
|
75
|
+
const HIDDEN_OPENING = new RegExp(String.raw `<([a-z][a-z0-9-]*)${HIDDEN}`, "giu");
|
|
76
|
+
const isHidden = (range) => new RegExp(String.raw `^<[a-z][a-z0-9-]*${HIDDEN}`, "iu").test(range.openTag);
|
|
77
|
+
/** Elements the page does not show (the hidden attribute): a tooltip, a closed menu. */
|
|
78
|
+
const withoutHiddenElements = (html) => withoutElementsOpening(html, HIDDEN_OPENING, isHidden);
|
|
79
|
+
/**
|
|
80
|
+
* Buttons are controls ("Close", "Share", "Cite this publication"), not prose, except one inside a heading, which is
|
|
81
|
+
* how an accordion draws its section's title.
|
|
82
|
+
*/
|
|
83
|
+
const withoutButtons = (html) => {
|
|
84
|
+
const headings = headingRanges(html);
|
|
85
|
+
return withoutElementsWhere(html, "button", (button) => !headings.some((heading) => isInside(heading, button)));
|
|
86
|
+
};
|
|
87
|
+
const LINK_MARK = "\u0003";
|
|
88
|
+
/** Links joined by ">" or another arrow, then the current page's name as plain text. */
|
|
89
|
+
const BREADCRUMB_TRAIL = new RegExp(`^\\s*(?:${LINK_MARK}\\s*[>›»>→]\\s*){2,}[^${LINK_MARK}>›»>→]*$`, "u");
|
|
90
|
+
/** A link wrapping blocks (a card with a title and a summary) carries content, not a way around the site. */
|
|
91
|
+
const isCard = (link) => /<(?:div|p|h[1-6]|ul|ol|dl|section|article|figure)\b/iu.test(link);
|
|
92
|
+
/** The links in html, or none when one of them wraps blocks. */
|
|
93
|
+
const plainLinks = (html) => {
|
|
94
|
+
const links = [...html.matchAll(ANY_LINK)].map((link) => link[0]);
|
|
95
|
+
return links.some(isCard) ? [] : links;
|
|
96
|
+
};
|
|
97
|
+
/** The text with each link standing as one mark. */
|
|
98
|
+
const withLinksMarked = (html) => decodeEntities(stripTags(html.replace(ANY_LINK, LINK_MARK)));
|
|
99
|
+
const isBreadcrumbTrail = (html) => plainLinks(html).length > 0 && BREADCRUMB_TRAIL.test(withLinksMarked(html));
|
|
100
|
+
const isOnlyLinks = (html) => hasNoWords(withLinksMarked(html).replaceAll(LINK_MARK, ""));
|
|
101
|
+
const MIN_GROUP_LINKS = 2;
|
|
102
|
+
/** A block made of two or more links and nothing else (a menu, previous and next), or a breadcrumb trail. */
|
|
103
|
+
const isLinkGroup = (range) => {
|
|
104
|
+
const links = plainLinks(range.inner);
|
|
105
|
+
if (links.length === 0)
|
|
106
|
+
return false;
|
|
107
|
+
return isOnlyLinks(range.inner) ? links.length >= MIN_GROUP_LINKS : isBreadcrumbTrail(range.inner);
|
|
108
|
+
};
|
|
109
|
+
/** A block of links and nothing else, even a single one: before the page's title, a way around the site ("English"). */
|
|
110
|
+
const isLinksOnly = (range) => plainLinks(range.inner).length > 0 && isOnlyLinks(range.inner);
|
|
111
|
+
const withoutLinkGroups = (html) => ["div", "section", "p"].reduce((text, tag) => withoutElementsWhere(text, tag, isLinkGroup), html);
|
|
112
|
+
/** The page's first <h1>: what it reads and where it opens. */
|
|
113
|
+
const pageTitle = (html) => {
|
|
114
|
+
const title = /<h1\b[^>]*>([\s\S]*?)<\/h1\s*>/iu.exec(html);
|
|
115
|
+
return title === null ? undefined : { text: plainText(title[1] ?? ""), start: title.index };
|
|
116
|
+
};
|
|
117
|
+
const MIN_TRAIL_LINKS = 2;
|
|
118
|
+
/**
|
|
119
|
+
* A breadcrumb as a list above the page's title: two or more items that are each only a link, then the title itself as
|
|
120
|
+
* the last item. The same list further down is the page's own content (steps ending in the one this page is about).
|
|
121
|
+
*/
|
|
122
|
+
const isBreadcrumbList = (body, at, title) => {
|
|
123
|
+
const items = body.split(/<li\b[^>]*>/iu).slice(1);
|
|
124
|
+
const current = items.at(-1);
|
|
125
|
+
const trail = items.slice(0, -1);
|
|
126
|
+
return (title !== undefined &&
|
|
127
|
+
at < title.start &&
|
|
128
|
+
current !== undefined &&
|
|
129
|
+
plainText(current) === title.text &&
|
|
130
|
+
trail.length >= MIN_TRAIL_LINKS &&
|
|
131
|
+
trail.every(isNavigation));
|
|
132
|
+
};
|
|
133
|
+
/** A list with items and not a word in them: buttons drawn as images, such as a text-size switch. */
|
|
134
|
+
const isWordlessList = (body) => /<li\b/iu.test(body) && hasNoWords(plainText(body));
|
|
135
|
+
const HREFLANG = /^<a\b[^>]*\shreflang\s*=/iu;
|
|
136
|
+
/**
|
|
137
|
+
* A list of this page in other languages: every link names its language (hreflang) and opens a page, and every other
|
|
138
|
+
* item is only a label, the language being read ("English", "Español"). An item with a sentence, or a link to a file
|
|
139
|
+
* (a form in each language), makes it the document's.
|
|
140
|
+
*/
|
|
141
|
+
const isLanguageSwitch = (body) => {
|
|
142
|
+
const links = [...body.matchAll(ANY_LINK)].map((link) => link[0]);
|
|
143
|
+
const items = body.split(/<li\b[^>]*>/iu).slice(1);
|
|
144
|
+
return (links.length > 0 &&
|
|
145
|
+
links.every((link) => HREFLANG.test(link) && !isFileLink(link)) &&
|
|
146
|
+
items.every((item) => isNavigation(item) || !/<a\b/iu.test(item)) &&
|
|
147
|
+
!hasSentence(body));
|
|
148
|
+
};
|
|
149
|
+
/** From the inside out, so a nested table of contents goes too once its inner lists are gone. */
|
|
150
|
+
const withoutNavigation = (html) => untilStable(html, (text) => {
|
|
151
|
+
const title = pageTitle(text);
|
|
152
|
+
return text.replace(/<(ul|ol)\b[^>]*>((?:(?!<[uo]l\b)[\s\S])*?)<\/\1\s*>/giu, (whole, _tag, body, at) => isNavigation(body) || isWordlessList(body) || isLanguageSwitch(body) || isBreadcrumbList(body, at, title) ? " " : whole);
|
|
153
|
+
});
|
|
154
|
+
const DEFINITION = /<dd\b[^>]*>([\s\S]*?)(?:<\/dd\s*>|(?=<d[dt]\b)|$)/giu;
|
|
155
|
+
const isMenuDefinition = (definition) => isNavigation(definition) || isBreadcrumbTrail(definition);
|
|
156
|
+
/**
|
|
157
|
+
* A definition list whose every definition is only links or a breadcrumb trail: a menu with its label as the term
|
|
158
|
+
* ("文字サイズ: 標準 大", "現在位置: トップ > 教育 > この頁").
|
|
159
|
+
*/
|
|
160
|
+
const isLabelledMenu = (list) => [...list.matchAll(DEFINITION)].every((definition) => isMenuDefinition(definition[1] ?? ""));
|
|
161
|
+
const isDefinitionList = (range) => /^<dl\b/iu.test(range.openTag);
|
|
162
|
+
/** What a block holds besides its menus: its link-only lists taken out, or a labelled menu's terms. */
|
|
163
|
+
const besideMenus = (range) => isDefinitionList(range) && isLabelledMenu(range.inner) ? range.inner.replace(DEFINITION, " ") : withoutNavigation(range.inner);
|
|
164
|
+
const holdsMenu = (range) => besideMenus(range) !== range.inner || isLinksOnly(range);
|
|
165
|
+
/** Nothing but labels beside the menus: a sentence beside a menu makes the block the document's. */
|
|
166
|
+
const hasNoSentenceBesideMenus = (range) => !CLOSED_SENTENCE.test(plainText(besideMenus(range)));
|
|
167
|
+
const HEADER_BLOCKS = ["div", "section", "header", "dl"];
|
|
168
|
+
/**
|
|
169
|
+
* The innermost block that closes before the page's title opens and holds a menu (or only links), with no sentence beside it, is part
|
|
170
|
+
* of the site's header: it goes whole, with the tagline and labels beside the menu. Only the innermost, so that text
|
|
171
|
+
* sharing an outer block with a menu block (an agency and docket number) is kept; so is a block with a sentence in it.
|
|
172
|
+
*/
|
|
173
|
+
const withoutSiteHeader = (html) => {
|
|
174
|
+
const title = pageTitle(html);
|
|
175
|
+
if (title === undefined)
|
|
176
|
+
return html;
|
|
177
|
+
const menus = HEADER_BLOCKS.flatMap((tag) => elementRanges(html, tag)).filter((range) => range.end <= title.start && holdsMenu(range));
|
|
178
|
+
const innermost = menus.filter((range) => !menus.some((inner) => isInside(range, inner)));
|
|
179
|
+
return withoutRanges(html, innermost.filter(hasNoSentenceBesideMenus).toSorted((left, right) => left.start - right.start));
|
|
180
|
+
};
|
|
181
|
+
const ICON_MENU_BLOCKS = ["div", "section"];
|
|
182
|
+
const LIST = /<(ul|ol)\b[^>]*>(?:(?!<[uo]l\b)[\s\S])*?<\/\1\s*>/giu;
|
|
183
|
+
const wordlessLists = (html) => [...html.matchAll(LIST)].map((list) => list[0]).filter((list) => isWordlessList(list.replace(/^<[^>]*>/u, "")));
|
|
184
|
+
/** What a block holds beside its lists of icons. */
|
|
185
|
+
const besideIcons = (range) => wordlessLists(range.inner).reduce((text, list) => text.replace(list, " "), range.inner);
|
|
186
|
+
/**
|
|
187
|
+
* Beside its wordless lists, one line, no sentence and no heading: the label of a row of icons ("Share & print",
|
|
188
|
+
* "Follow us"). A heading beside share buttons is the page's title.
|
|
189
|
+
*/
|
|
190
|
+
const isIconMenu = (range) => {
|
|
191
|
+
const beside = besideIcons(range);
|
|
192
|
+
return textLines(beside).length === 1 && !hasSentence(beside) && !/<h[1-6]\b/iu.test(beside);
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* The innermost block holding a list of icons (share buttons, social links) and anything else goes whole when that is
|
|
196
|
+
* only a label; a wrapper around the list alone is passed over for the block that holds its label.
|
|
197
|
+
*/
|
|
198
|
+
const withoutIconMenus = (html) => {
|
|
199
|
+
const menus = ICON_MENU_BLOCKS.flatMap((tag) => elementRanges(html, tag)).filter((range) => wordlessLists(range.inner).length > 0 && textLines(besideIcons(range)).length > 0);
|
|
200
|
+
const innermost = menus.filter((range) => !menus.some((inner) => isInside(range, inner)));
|
|
201
|
+
return withoutRanges(html, innermost.filter(isIconMenu).toSorted((left, right) => left.start - right.start));
|
|
202
|
+
};
|
|
203
|
+
const IMAGE = /<img\b[^>]*>/giu;
|
|
204
|
+
const ALT = /\salt\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+))/iu;
|
|
205
|
+
const altText = (image) => {
|
|
206
|
+
const alt = ALT.exec(image);
|
|
207
|
+
return plainText(alt?.[1] ?? alt?.[2] ?? alt?.[3] ?? "");
|
|
208
|
+
};
|
|
209
|
+
/** The page's <title>, which names the page wherever it is shown (a tab, a bookmark, a search result). */
|
|
210
|
+
const documentTitle = (html) => plainText(/<title\b[^>]*>([\s\S]*?)<\/title\s*>/iu.exec(html)?.[1] ?? "");
|
|
211
|
+
/**
|
|
212
|
+
* A heading holding images and nothing else (a logo, a banner, a title set as a picture) carries the images' alt text
|
|
213
|
+
* only when that text is the page's title, which the reader sees drawn there; otherwise it goes whole, since the
|
|
214
|
+
* converter keeps no image's alt text anywhere else either.
|
|
215
|
+
*/
|
|
216
|
+
const withImageHeadingsRead = (html, title) => html.replace(/<h([1-6])\b([^>]*)>([\s\S]*?)<\/h\1\s*>/giu, (whole, level, attributes, inside) => {
|
|
217
|
+
const images = inside.match(IMAGE) ?? [];
|
|
218
|
+
if (images.length === 0 || plainText(inside) !== "")
|
|
219
|
+
return whole;
|
|
220
|
+
const alt = images.map(altText).join(" ").trim();
|
|
221
|
+
return alt !== "" && alt === title ? `<h${level}${attributes}>${asMarkup(alt)}</h${level}>` : " ";
|
|
222
|
+
});
|
|
223
|
+
// An in-page link is wrapped in these marks so that one standing alone on its line ("Jump to main text") can be told
|
|
224
|
+
// from one inside a sentence ("see Table 1"); the first is dropped, the second keeps its text.
|
|
225
|
+
const LINK_START = "\u0001";
|
|
226
|
+
const LINK_END = "\u0002";
|
|
227
|
+
const markChromeLinks = (html) => html.replace(ANY_LINK, (link) => (isChromeLink(link) ? `${LINK_START}${stripTags(link)}${LINK_END}` : link));
|
|
228
|
+
const MARKED_LINK = new RegExp(`${LINK_START}[^${LINK_END}]*${LINK_END}`, "gu");
|
|
229
|
+
/**
|
|
230
|
+
* A line of in-page or paging links and at most a mark such as "▲" or "|" between them. Never a heading: a heading
|
|
231
|
+
* wrapped in a link back to the table of contents is still the section's title.
|
|
232
|
+
*/
|
|
233
|
+
const isChromeLinkLine = (line) => headingLevel(line) === 0 && line.includes(LINK_START) && hasNoWords(line.replace(MARKED_LINK, ""));
|
|
234
|
+
// Without a year only the sign marks a notice: "(c)" alone opens an enumerated paragraph, "Copyright" alone a sentence.
|
|
235
|
+
const COPYRIGHT_NOTICE = /^(?:(?:copyright\s*)?(?:©|\(c\)|copyright)\s*\d{4}\b|copyright\s*(?:©|\(c\))|©)/iu;
|
|
236
|
+
/** A copyright notice at the very end of the page, where a site puts it when it has no <footer>. */
|
|
237
|
+
const withoutClosingCopyright = (lines) => {
|
|
238
|
+
const last = lines.findLastIndex((line) => line !== "");
|
|
239
|
+
return last >= 0 && COPYRIGHT_NOTICE.test(lines[last] ?? "") ? withoutClosingCopyright(lines.slice(0, last)) : [...lines];
|
|
240
|
+
};
|
|
241
|
+
const headingLevel = (line) => /^#{1,6} /u.exec(line)?.[0].length ?? 0;
|
|
242
|
+
/** A rule drawn with characters ("_____", "-----"), which Markdown reads as a thematic break: a line, not text. */
|
|
243
|
+
const isDrawnRule = (line) => /^(?:([-_*=])\s*)(?:\1\s*){2,}$/u.test(line);
|
|
244
|
+
/**
|
|
245
|
+
* Headings with nothing under them before the next heading of the same or a higher level: what dropped navigation left.
|
|
246
|
+
* A drawn rule under a heading is not something under it.
|
|
247
|
+
*/
|
|
248
|
+
const withoutEmptySections = (lines) => lines.reduceRight((state, line) => {
|
|
249
|
+
if (line === "" || isDrawnRule(line))
|
|
250
|
+
return { kept: [line, ...state.kept], nextLevel: state.nextLevel };
|
|
251
|
+
const level = headingLevel(line) - 1;
|
|
252
|
+
if (level < 0)
|
|
253
|
+
return { kept: [line, ...state.kept], nextLevel: Number.POSITIVE_INFINITY };
|
|
254
|
+
if (state.nextLevel <= level)
|
|
255
|
+
return state;
|
|
256
|
+
return { kept: [line, ...state.kept], nextLevel: level };
|
|
257
|
+
}, { kept: [], nextLevel: 0 }).kept;
|
|
258
|
+
const BLOCK_TAGS = new Set([
|
|
259
|
+
"p",
|
|
260
|
+
"div",
|
|
261
|
+
"ul",
|
|
262
|
+
"ol",
|
|
263
|
+
"hr",
|
|
264
|
+
"blockquote",
|
|
265
|
+
"section",
|
|
266
|
+
"article",
|
|
267
|
+
"header",
|
|
268
|
+
"footer",
|
|
269
|
+
"main",
|
|
270
|
+
"aside",
|
|
271
|
+
"dl",
|
|
272
|
+
"dt",
|
|
273
|
+
"dd",
|
|
274
|
+
"figure",
|
|
275
|
+
"figcaption",
|
|
276
|
+
"pre",
|
|
277
|
+
"body",
|
|
278
|
+
"html",
|
|
279
|
+
]);
|
|
280
|
+
const heading = (_whole, level, inside) => `\n\n${"#".repeat(Number(level))} ${stripTags(inside).trim()}\n\n`;
|
|
281
|
+
const asLines = (html) => html
|
|
282
|
+
.replace(/<h([1-6])\b[^>]*>([\s\S]*?)<\/h\1\s*>/giu, heading)
|
|
283
|
+
.replace(/<li\b[^>]*>/giu, "\n- ")
|
|
284
|
+
.replace(/<\/li\s*>/giu, "")
|
|
285
|
+
.replace(/<br\s*\/?>/giu, "\n")
|
|
286
|
+
.replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>/giu, (whole, tag) => (BLOCK_TAGS.has(tag.toLowerCase()) ? "\n\n" : whole));
|
|
287
|
+
const textLines = (html) => decodeEntities(stripTags(asLines(html)))
|
|
288
|
+
.split("\n")
|
|
289
|
+
.map((line) => line.trim())
|
|
290
|
+
.filter((line) => line !== "");
|
|
291
|
+
const ADDRESS = /<address\b[^>]*>[\s\S]*?<\/address\s*>/giu;
|
|
292
|
+
const isOnlyNotices = (html) => {
|
|
293
|
+
const lines = textLines(html);
|
|
294
|
+
return lines.length > 0 && lines.every((line) => COPYRIGHT_NOTICE.test(line));
|
|
295
|
+
};
|
|
296
|
+
const ADDRESS_BLOCKS = ["div", "section"];
|
|
297
|
+
/** What the innermost block around the address holds besides it, when it holds anything else. */
|
|
298
|
+
const besideAddress = (html, address) => {
|
|
299
|
+
const end = address.index + address[0].length;
|
|
300
|
+
const around = ADDRESS_BLOCKS.flatMap((tag) => elementRanges(html, tag))
|
|
301
|
+
.filter((range) => range.start < address.index && end <= range.end)
|
|
302
|
+
.toSorted((left, right) => right.start - left.start)
|
|
303
|
+
.map((range) => range.inner.replace(address[0], " "));
|
|
304
|
+
return around.find((beside) => textLines(beside).length > 0);
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* An <address> that shares its block with nothing but copyright notices, and has nothing but them after it, closes
|
|
308
|
+
* the page: the site's own contact line, in a footer written without <footer>. An address beside any other text (a
|
|
309
|
+
* label such as "Send comments to:"), with anything else after it, or with nothing after it, is kept.
|
|
310
|
+
*/
|
|
311
|
+
const withoutClosingAddress = (html) => {
|
|
312
|
+
const last = [...html.matchAll(ADDRESS)].at(-1);
|
|
313
|
+
if (last === undefined)
|
|
314
|
+
return html;
|
|
315
|
+
const end = last.index + last[0].length;
|
|
316
|
+
const beside = besideAddress(html, last);
|
|
317
|
+
const isFooter = beside !== undefined && isOnlyNotices(beside) && isOnlyNotices(html.slice(end));
|
|
318
|
+
return isFooter ? `${html.slice(0, last.index)} ${html.slice(end)}` : html;
|
|
319
|
+
};
|
|
320
|
+
const CLOSING_BLOCKS = ["div", "section", "p"];
|
|
321
|
+
const isClosingMenu = (text, range) => isLinksOnly(range) && !plainLinks(range.inner).some(isFileLink) && textLines(text.slice(range.end)).length === 0;
|
|
322
|
+
/** Blocks of links to pages with nothing after them ("一覧に戻る"): a way around the site, as a menu is above the title. */
|
|
323
|
+
const withoutClosingLinks = (html) => untilStable(html, (text) => {
|
|
324
|
+
const closing = CLOSING_BLOCKS.flatMap((tag) => elementRanges(text, tag)).filter((range) => isClosingMenu(text, range));
|
|
325
|
+
return withoutRanges(text, closing.toSorted((left, right) => left.start - right.start));
|
|
326
|
+
});
|
|
327
|
+
// Markup's own spacing, collapsed as HTML does; U+3000 is a character Japanese text writes (a clause number and its text), so it stays.
|
|
328
|
+
const MARKUP_SPACE = /[^\S\u3000]+/gu;
|
|
329
|
+
// A zero-width space or joiner draws nothing, so a line of nothing else is empty (a page-number anchor).
|
|
330
|
+
const INVISIBLE_ONLY = /^[\s\p{Cf}]*$/u;
|
|
331
|
+
// An <h2> with no text in it (a spacer, an emptied widget) becomes "##": a heading with nothing to read.
|
|
332
|
+
const UNTITLED_HEADING = /^#{1,6}$/u;
|
|
333
|
+
export const htmlToMarkdown = (html) => {
|
|
334
|
+
const uncommented = withLostParagraphTagsRestored(withAttributeMarkupEscaped(html).replace(/<!--[\s\S]*?-->|<\?[\s\S]*?\?>/gu, ""));
|
|
335
|
+
const preformatted = withPreformattedStashed(withTablesRead(DROPPED.reduce(withoutElement, withoutRubyText(uncommented))));
|
|
336
|
+
const kept = withoutFootnoteMarks(withoutHeadingSelfLinks(withoutWidgets(withoutButtons(withoutReaderOnlyText(withoutHiddenElements(mainContent(preformatted.html))))))).replace(MARKUP_SPACE, " ");
|
|
337
|
+
const content = withoutClosingLinks(withoutLinkGroups(withoutNavigation(withoutIconMenus(withoutSiteHeader(withoutNavigationLandmarks(withoutClosingAddress(kept)))))));
|
|
338
|
+
const text = decodeEntities(stripTags(asLines(markChromeLinks(withImageHeadingsRead(withRunInHeadingsRead(content), documentTitle(uncommented))))));
|
|
339
|
+
const lines = text
|
|
340
|
+
.split("\n")
|
|
341
|
+
.map((line) => (INVISIBLE_ONLY.test(line) ? "" : line.trim()))
|
|
342
|
+
.filter((line) => line !== "-" && !isChromeLinkLine(line))
|
|
343
|
+
.map((line) => line.replaceAll(LINK_START, "").replaceAll(LINK_END, ""))
|
|
344
|
+
.filter((line) => !UNTITLED_HEADING.test(line));
|
|
345
|
+
return tidyLines(withPreformattedRestored(withoutEmptySections(withoutClosingCopyright(withoutEmptySections(lines))), preformatted.blocks));
|
|
346
|
+
};
|
|
347
|
+
//# sourceMappingURL=html-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-markdown.js","sourceRoot":"","sources":["../../src/html/html-markdown.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,sHAAsH;AACtH,uHAAuH;AACvH,8DAA8D;AAC9D,2JAA2J;AAC3J,mHAAmH;AACnH,8MAA8M;AAC9M,wHAAwH;AACxH,wGAAwG;AACxG,iFAAiF;AACjF,gIAAgI;AAChI,qHAAqH;AACrH,kNAAkN;AAClN,wEAAwE;AACxE,OAAO,EACL,QAAQ,EACR,UAAU,EACV,eAAe,EACf,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,EACT,SAAS,EACT,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAEjG,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE;IAC3D,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;IACjG,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,kHAAkH;AAClH,6GAA6G;AAC7G,MAAM,mBAAmB,GAAG,2DAA2D,CAAC;AACxF,MAAM,SAAS,GAAG,gEAAgE,CAAC;AAEnF,mEAAmE;AACnE,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/C,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAE5J;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE,CAC7C,wDAAwD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,0DAA0D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE/I,0FAA0F;AAC1F,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAE/I,qFAAqF;AACrF,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA,GAAG,UAAU,8EAA8E,CAAC;AAExH,0HAA0H;AAC1H,MAAM,YAAY,GAAG,CAAC,IAAY,EAAsB,EAAE;IACxD,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,oBAAoB,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,mBAAmB,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC;AACzI,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAE,MAAc,EAAE,GAA4B,EAAW,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEjJ,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,KAAmB,EAAW,EAAE,CACrE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAExG;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAsB,EAAE;IACvD,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7E,OAAO,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3G,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAC3C,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAEjI,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA,0FAA0F,CAAC;AAEtH,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,2BAA2B,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;AAE5F,MAAM,UAAU,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,IAAI,MAAM,CAAC,UAAU,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEhH,uGAAuG;AACvG,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAExH,+FAA+F;AAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA,GAAG,UAAU,sFAAsF,CAAC;AAE7H,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,qBAAqB,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AAElF,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,oBAAoB,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEhI,wFAAwF;AACxF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;AAE/G;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAClH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,QAAQ,CAAC;AAE3B,wFAAwF;AACxF,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,WAAW,SAAS,yBAAyB,SAAS,UAAU,EAAE,GAAG,CAAC,CAAC;AAE3G,6GAA6G;AAC7G,MAAM,MAAM,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,uDAAuD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE7G,gEAAgE;AAChE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAY,EAAE;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACzC,CAAC,CAAC;AAEF,oDAAoD;AACpD,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/G,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjI,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAE3G,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,6GAA6G;AAC7G,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAW,EAAE;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,wHAAwH;AACxH,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAErH,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAItJ,+DAA+D;AAC/D,MAAM,SAAS,GAAG,CAAC,IAAY,EAAyB,EAAE;IACxD,MAAM,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,KAA4B,EAAW,EAAE;IAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,EAAE,GAAG,KAAK,CAAC,KAAK;QAChB,OAAO,KAAK,SAAS;QACrB,SAAS,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI;QACjC,KAAK,CAAC,MAAM,IAAI,eAAe;QAC/B,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,qGAAqG;AACrG,MAAM,cAAc,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtG,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE;IACjD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,CACL,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC,WAAW,CAAC,IAAI,CAAC,CACnB,CAAC;AACJ,CAAC,CAAC;AAEF,iGAAiG;AACjG,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE,CACjD,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;IACzB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,wDAAwD,EAAE,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY,EAAE,EAAU,EAAE,EAAE,CACtI,YAAY,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CACxH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM,UAAU,GAAG,sDAAsD,CAAC;AAE1E,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAW,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAEpH;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAE9I,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE1F,uGAAuG;AACvG,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAU,EAAE,CAClD,gBAAgB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEjI,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AAE7G,oGAAoG;AACpG,MAAM,wBAAwB,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAExH,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IACjD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACvI,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,aAAa,CAClB,IAAI,EACJ,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAC/F,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAE5C,MAAM,IAAI,GAAG,sDAAsD,CAAC;AAEpE,MAAM,aAAa,GAAG,CAAC,IAAY,EAAY,EAAE,CAC/C,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAElH,oDAAoD;AACpD,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAU,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAE7I;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,KAAmB,EAAW,EAAE;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE;IAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAC9E,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAC7F,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,aAAa,CAClB,IAAI,EACJ,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CACjF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAEhC,MAAM,GAAG,GAAG,mDAAmD,CAAC;AAEhE,MAAM,OAAO,GAAG,CAAC,KAAa,EAAU,EAAE;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,0GAA0G;AAC1G,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,SAAS,CAAC,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAE1H;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CACpE,IAAI,CAAC,OAAO,CAAC,4CAA4C,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,UAAkB,EAAE,MAAc,EAAE,EAAE;IAC9H,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACpG,CAAC,CAAC,CAAC;AAEL,qHAAqH;AACrH,+FAA+F;AAC/F,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAE1B,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvH,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,GAAG,UAAU,KAAK,QAAQ,KAAK,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;AAEhF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAEvJ,wHAAwH;AACxH,MAAM,gBAAgB,GAAG,mFAAmF,CAAC;AAE7G,oGAAoG;AACpG,MAAM,uBAAuB,GAAG,CAAC,KAAwB,EAAY,EAAE;IACrE,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,IAAI,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5H,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAEvF,mHAAmH;AACnH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE5F;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAwB,EAAY,EAAE,CAClE,KAAK,CAAC,WAAW,CACf,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACd,IAAI,IAAI,KAAK,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACzG,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC3F,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC,EACD,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAC3B,CAAC,IAAI,CAAC;AAET,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,GAAG;IACH,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,YAAY;IACZ,SAAS;IACT,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,YAAY;IACZ,KAAK;IACL,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,MAAc,EAAU,EAAE,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC;AAE9I,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CACvC,IAAI;KACD,OAAO,CAAC,0CAA0C,EAAE,OAAO,CAAC;KAC5D,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC;KACjC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;KAC3B,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;KAC9B,OAAO,CAAC,iCAAiC,EAAE,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAEtI,MAAM,SAAS,GAAG,CAAC,IAAY,EAAY,EAAE,CAC3C,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;KACrC,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,2CAA2C,CAAC;AAE5D,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAE1C,iGAAiG;AACjG,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,OAAwB,EAAsB,EAAE;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACrE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;SAClE,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAU,EAAE;IACrD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjG,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAE/C,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAmB,EAAW,EAAE,CACnE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAEnH,uHAAuH;AACvH,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE,CACnD,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;IACzB,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxH,OAAO,aAAa,CAClB,IAAI,EACJ,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAC5D,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,wIAAwI;AACxI,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,yGAAyG;AACzG,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,yGAAyG;AACzG,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IACrD,MAAM,WAAW,GAAG,6BAA6B,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpI,MAAM,YAAY,GAAG,uBAAuB,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3H,MAAM,IAAI,GAAG,oBAAoB,CAC/B,uBAAuB,CAAC,cAAc,CAAC,cAAc,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,mBAAmB,CACjC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACnI,CAAC;IACF,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpJ,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SACvE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,OAAO,SAAS,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9I,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type Preformatted = {
|
|
2
|
+
readonly isCode: boolean;
|
|
3
|
+
readonly lines: readonly string[];
|
|
4
|
+
};
|
|
5
|
+
export type StashedPage = {
|
|
6
|
+
readonly html: string;
|
|
7
|
+
readonly blocks: readonly Preformatted[];
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Every <pre> replaced by a placeholder holding its text on one line, as the page read before, so that what decides
|
|
11
|
+
* about the blocks around it (a menu, a sentence, a heading's content) sees the same words.
|
|
12
|
+
*/
|
|
13
|
+
export declare const withPreformattedStashed: (html: string) => StashedPage;
|
|
14
|
+
/** Each line that is a placeholder as its block; a placeholder inside a longer line (a heading) as its text on that line. */
|
|
15
|
+
export declare const withPreformattedRestored: (lines: readonly string[], blocks: readonly Preformatted[]) => string[];
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=html-preformatted.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-preformatted.d.ts","sourceRoot":"","sources":["../../src/html/html-preformatted.ts"],"names":[],"mappings":"AAOA,KAAK,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;CAAE,CAAC;AAuD9F;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,WAYtD,CAAC;AAqBF,6HAA6H;AAC7H,eAAO,MAAM,wBAAwB,GAAI,OAAO,SAAS,MAAM,EAAE,EAAE,QAAQ,SAAS,YAAY,EAAE,KAAG,MAAM,EAOnG,CAAC"}
|