chaffjs 0.28.0 → 0.29.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/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/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/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/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 +34 -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 +1 -1
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +70 -15
- 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 +82 -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/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/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/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/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/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-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/structure-tree.d.ts +12 -4
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +31 -14
- 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 +4 -0
- package/dist/detectors/time-order.d.ts.map +1 -0
- package/dist/detectors/time-order.js +32 -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 +85 -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/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 +16 -0
- package/dist/facts/table-facts.d.ts.map +1 -1
- package/dist/facts/table-facts.js +2 -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 +23 -1
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +39 -8
- package/dist/name-variants.js.map +1 -1
- 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 +4 -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/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/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.d.ts +24 -3
- package/dist/structure/date-order.d.ts.map +1 -1
- package/dist/structure/date-order.js +49 -17
- package/dist/structure/date-order.js.map +1 -1
- package/dist/structure/date-outside-period.d.ts +27 -0
- package/dist/structure/date-outside-period.d.ts.map +1 -0
- package/dist/structure/date-outside-period.js +86 -0
- package/dist/structure/date-outside-period.js.map +1 -0
- 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 +34 -0
- package/dist/structure/leg-times.d.ts.map +1 -0
- package/dist/structure/leg-times.js +135 -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/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/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 +21 -0
- package/dist/structure/time-order.d.ts.map +1 -0
- package/dist/structure/time-order.js +108 -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 +23 -0
- package/dist/structure/version-order.d.ts.map +1 -0
- package/dist/structure/version-order.js +67 -0
- package/dist/structure/version-order.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/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 +12 -4
- 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 +14 -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/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/requirement-smell.yaml +3 -3
- 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 +72 -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/stays.ts +145 -0
- package/src/detectors/acronym-context.ts +10 -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/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 +38 -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 +106 -15
- 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 +106 -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/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/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/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/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/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-smell.ts +29 -9
- package/src/detectors/structure-tree.ts +43 -21
- 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 +49 -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 +103 -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/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 +3 -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 +57 -11
- 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 +4 -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/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/counted-amounts.ts +42 -0
- package/src/structure/date-order.ts +72 -22
- package/src/structure/date-outside-period.ts +127 -0
- 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 +198 -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/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/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 +140 -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 +84 -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 @@
|
|
|
1
|
+
{"version":3,"file":"html-reader-only.js","sourceRoot":"","sources":["../../src/html/html-reader-only.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-run-in-headings.d.ts","sourceRoot":"","sources":["../../src/html/html-run-in-headings.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAKjD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// A section title drawn as a bold first line of its paragraph: <p><strong>Conclusion</strong><br />In closing, …</p>.
|
|
2
|
+
// Read as text the title runs into the paragraph as one line. The bold run becomes a heading one level below the
|
|
3
|
+
// heading before it (h2 when none), and the rest stays the paragraph. Only a bold run that opens the paragraph, holds
|
|
4
|
+
// plain text, is short, does not end as a sentence or a label (".", ":") and has a sentence (or a lead-in ending in a
|
|
5
|
+
// colon) after its line break is taken for a title; a name over its role ("Jane Roe<br>Secretary") is a signature. Pure.
|
|
6
|
+
import { hasSentence, plainText } from "./html-elements.js";
|
|
7
|
+
const MAX_TITLE_LENGTH = 100;
|
|
8
|
+
const DEEPEST_LEVEL = 6;
|
|
9
|
+
const TOP_LEVEL = 1;
|
|
10
|
+
// A paragraph's start, a bold run and a line break: the paragraph's text follows up to its end tag.
|
|
11
|
+
const OPENING = /<p\b([^>]*)>\s*<(strong|b)\b[^>]*>([^<]*)<\/\2\s*>\s*<br\b[^>]*>/giu;
|
|
12
|
+
/** The paragraph's text after from, up to its end tag; undefined when another paragraph opens first or none closes. */
|
|
13
|
+
const restOfParagraph = (html, from) => {
|
|
14
|
+
const next = /<(\/?)p\b/iu.exec(html.slice(from));
|
|
15
|
+
return next?.[1] === "/" ? html.slice(from, from + next.index) : undefined;
|
|
16
|
+
};
|
|
17
|
+
// A sentence's end, a label's colon, or a clause's comma or semicolon: the bold run is part of the text, not a title.
|
|
18
|
+
const ENDS_AS_TEXT = /[.!?:;,。!?:;、]$/u;
|
|
19
|
+
/** A sentence, or a lead-in to a list ("… with the same:"): what a section holds, unlike a role under a name. */
|
|
20
|
+
const isProse = (html) => hasSentence(html) || /[::]$/u.test(plainText(html));
|
|
21
|
+
const isTitle = (bold, rest) => {
|
|
22
|
+
const title = bold.trim();
|
|
23
|
+
return title !== "" && title.length <= MAX_TITLE_LENGTH && !ENDS_AS_TEXT.test(title) && rest !== undefined && isProse(rest);
|
|
24
|
+
};
|
|
25
|
+
/** The level of the last heading opening before at; 1 when there is none, as if under the page's title. */
|
|
26
|
+
const levelBefore = (html, at) => {
|
|
27
|
+
const headings = [...html.slice(0, at).matchAll(/<h([1-6])\b/giu)];
|
|
28
|
+
return Number(headings.at(-1)?.[1] ?? TOP_LEVEL);
|
|
29
|
+
};
|
|
30
|
+
export const withRunInHeadingsRead = (html) => html.replace(OPENING, (opening, attributes, _tag, bold, at) => {
|
|
31
|
+
if (!isTitle(bold, restOfParagraph(html, at + opening.length)))
|
|
32
|
+
return opening;
|
|
33
|
+
const level = String(Math.min(levelBefore(html, at) + 1, DEEPEST_LEVEL));
|
|
34
|
+
return `<h${level}>${bold.trim()}</h${level}><p${attributes}>`;
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=html-run-in-headings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-run-in-headings.js","sourceRoot":"","sources":["../../src/html/html-run-in-headings.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,iHAAiH;AACjH,sHAAsH;AACtH,sHAAsH;AACtH,yHAAyH;AACzH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,oGAAoG;AACpG,MAAM,OAAO,GAAG,qEAAqE,CAAC;AAEtF,uHAAuH;AACvH,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAY,EAAsB,EAAE;IACzE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC,CAAC;AAEF,sHAAsH;AACtH,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,iHAAiH;AACjH,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAE/F,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAwB,EAAW,EAAE;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,gBAAgB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9H,CAAC,CAAC;AAEF,2GAA2G;AAC3G,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAU,EAAU,EAAE;IACvD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC5D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAe,EAAE,UAAkB,EAAE,IAAY,EAAE,IAAY,EAAE,EAAU,EAAE,EAAE;IACpG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IACzE,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,UAAU,GAAG,CAAC;AACjE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-tables.d.ts","sourceRoot":"","sources":["../../src/html/html-tables.ts"],"names":[],"mappings":"AA0EA,iHAAiH;AACjH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAA+E,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Tables as the HTML converter reads them. A table whose rows are sentences (a glossary of terms and what they mean,
|
|
2
|
+
// a list of routes and how each one works) keeps each cell as a block of its own, so its sentences are read as prose;
|
|
3
|
+
// its header rows go. Any other table (figures, a grid of links) goes whole, as before. Nested tables are read from
|
|
4
|
+
// the inside out. Pure; a regular-expression reading, not a parser.
|
|
5
|
+
import { plainText, untilStable } from "./html-elements.js";
|
|
6
|
+
const INNERMOST_TABLE = /<table\b[^>]*>((?:(?!<table\b)[\s\S])*?)<\/table\s*>/giu;
|
|
7
|
+
// A row and a cell may leave out their closing tags: each ends where the next one opens.
|
|
8
|
+
const ROW_OPENING = /<tr\b[^>]*>/iu;
|
|
9
|
+
const ROW_END = /<\/(?:tr|thead|tbody|tfoot)\s*>[\s\S]*$/iu;
|
|
10
|
+
const CELL_OPENING = /<(t[dh])\b[^>]*>/giu;
|
|
11
|
+
const CELL_END = /<\/t[dh]\s*>[\s\S]*$/iu;
|
|
12
|
+
const cellsOf = (row) => {
|
|
13
|
+
const openings = [...row.matchAll(CELL_OPENING)];
|
|
14
|
+
return openings.map((opening, index) => {
|
|
15
|
+
const end = openings[index + 1]?.index ?? row.length;
|
|
16
|
+
const html = row.slice(opening.index + opening[0].length, end).replace(CELL_END, "");
|
|
17
|
+
return { header: opening[1]?.toLowerCase() === "th", html };
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
const rowsOf = (table) => table
|
|
21
|
+
.split(ROW_OPENING)
|
|
22
|
+
.slice(1)
|
|
23
|
+
.map((row) => cellsOf(row.replace(ROW_END, "")));
|
|
24
|
+
const hasText = (cell) => plainText(cell.html) !== "";
|
|
25
|
+
// A cell ends a sentence with its last mark. A point inside it ("H.Con.Res. 218") or after a short capitalised word
|
|
26
|
+
// or a letter after a point ("Inc.", "U.S.") is an abbreviation.
|
|
27
|
+
const ENDS_SENTENCE = /(?:[。.!?!?]|(?<!\b[A-Z][A-Za-z]{0,3}|\.[A-Za-z])\.)[)\]"'”’」』)]*$/u;
|
|
28
|
+
const holdsSentence = (cell) => ENDS_SENTENCE.test(plainText(cell.html));
|
|
29
|
+
// A cell that opens with a number and holds no word of the Latin alphabet: a row number ("1", "2."), a figure or a
|
|
30
|
+
// range ("0.3 以上 1.6未満", "1未満"), a section ("302(c)"). "401(k) plan" and "24/7 desk" are names.
|
|
31
|
+
const isNumberLabel = (text) => /^\p{Nd}/u.test(text) && !/[A-Za-z]{2,}/u.test(text);
|
|
32
|
+
/**
|
|
33
|
+
* A cell kept as a block: one with a sentence, or a label in words. A number label is read by no prose rule, and alone
|
|
34
|
+
* on a line it would read as a section number.
|
|
35
|
+
*/
|
|
36
|
+
const isKept = (cell) => holdsSentence(cell) || (hasText(cell) && !isNumberLabel(plainText(cell.html)));
|
|
37
|
+
/** A row of nothing but header cells labels the columns. */
|
|
38
|
+
const isHeaderRow = (row) => row.length > 0 && row.every((cell) => cell.header);
|
|
39
|
+
/** At least half of the rows with text in them, header rows aside, hold a sentence. */
|
|
40
|
+
const isProse = (rows) => {
|
|
41
|
+
const written = rows.filter((row) => !isHeaderRow(row) && row.some(hasText));
|
|
42
|
+
const sentences = written.filter((row) => row.some(holdsSentence)).length;
|
|
43
|
+
return sentences > 0 && sentences * 2 >= written.length;
|
|
44
|
+
};
|
|
45
|
+
const CAPTION = /<caption\b[^>]*>([\s\S]*?)<\/caption\s*>/iu;
|
|
46
|
+
/** Each cell with text as a block, the caption first. */
|
|
47
|
+
const asBlocks = (table, rows) => {
|
|
48
|
+
const caption = CAPTION.exec(table)?.[1];
|
|
49
|
+
const cells = rows.filter((row) => !isHeaderRow(row)).flatMap((row) => row.filter(isKept).map((cell) => cell.html));
|
|
50
|
+
return ["<div>", ...[caption ?? "", ...cells].filter((html) => html !== "").map((html) => `<div>${html}</div>`), "</div>"].join("");
|
|
51
|
+
};
|
|
52
|
+
const readTable = (_whole, inside) => {
|
|
53
|
+
const rows = rowsOf(inside);
|
|
54
|
+
return isProse(rows) ? asBlocks(inside, rows) : " ";
|
|
55
|
+
};
|
|
56
|
+
/** Every table read from the inside out: a table of sentences as blocks, any other table replaced by a space. */
|
|
57
|
+
export const withTablesRead = (html) => untilStable(html, (text) => text.replace(INNERMOST_TABLE, readTable));
|
|
58
|
+
//# sourceMappingURL=html-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-tables.js","sourceRoot":"","sources":["../../src/html/html-tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-widgets.d.ts","sourceRoot":"","sources":["../../src/html/html-widgets.ts"],"names":[],"mappings":"AAgHA,8GAA8G;AAC9G,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAA2G,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Parts of a page that are controls rather than the document: a tooltip, a media player with its buttons, a block a
|
|
2
|
+
// script runs when clicked, a bar of previous and next links between arrows, and text marked never to be spoken.
|
|
3
|
+
// Each is told by its structure (a role, an <audio> or <video>, an event handler, the arrows), never by a site's class
|
|
4
|
+
// names. Pure; a regular-expression reading.
|
|
5
|
+
import { ANY_LINK, ATTRIBUTES, elementRanges, fileExtension, hasNoWords, hasSentence, isFileLink, plainText, withoutElementsOpening, withoutRanges, } from "./html-elements.js";
|
|
6
|
+
/** Every element whose opening tag carries attribute (name and value as a pattern), matched to its own closing tag. */
|
|
7
|
+
const withoutElementsWithAttribute = (html, attribute) => {
|
|
8
|
+
const opening = new RegExp(String.raw `<([a-z][a-z0-9-]*)${ATTRIBUTES}\s+${attribute}`, "giu");
|
|
9
|
+
const marked = new RegExp(String.raw `^<[a-z][a-z0-9-]*${ATTRIBUTES}\s+${attribute}`, "iu");
|
|
10
|
+
return withoutElementsOpening(html, opening, (range) => marked.test(range.openTag));
|
|
11
|
+
};
|
|
12
|
+
// A role is a list of tokens and the first one counts, as for role="main".
|
|
13
|
+
const TOOLTIP_ROLE = String.raw `role\s*=\s*(?:"\s*tooltip(?:\s[^"]*)?"|'\s*tooltip(?:\s[^']*)?'|tooltip(?=[\s/>]))`;
|
|
14
|
+
// speak: none in a style says the text is not to be read out: data for scripts, such as an id beside a title.
|
|
15
|
+
const UNSPOKEN_STYLE = String.raw `style\s*=\s*(?:"[^"]*\bspeak\s*:\s*none\b[^"]*"|'[^']*\bspeak\s*:\s*none\b[^']*')`;
|
|
16
|
+
/** A tooltip ("The code has been copied to your clipboard.") shows beside a control, and unspoken text is not read. */
|
|
17
|
+
const withoutTooltipsAndUnspoken = (html) => withoutElementsWithAttribute(withoutElementsWithAttribute(html, TOOLTIP_ROLE), UNSPOKEN_STYLE);
|
|
18
|
+
const MEDIA_ELEMENT = /<(audio|video)\b[^>]*>[\s\S]*?<\/\1\s*>/giu;
|
|
19
|
+
const PLAYER_BLOCKS = ["div", "section", "figure"];
|
|
20
|
+
// A caption is the document's even when it is not a sentence ("Interview with the mayor"), so its block is no player.
|
|
21
|
+
const holdsMedia = (range) => /<(?:audio|video)\b/iu.test(range.inner) && !/<figcaption\b/iu.test(range.inner);
|
|
22
|
+
/** The text around the media, without the words a browser shows only when it cannot play it. */
|
|
23
|
+
const hasSentenceBesideMedia = (range) => hasSentence(range.inner.replace(MEDIA_ELEMENT, " "));
|
|
24
|
+
const MEDIA_EXTENSION = /^(?:mp3|m4a|aac|wav|ogg|oga|opus|mp4|m4v|webm|mov)$/iu;
|
|
25
|
+
/** A link to a file other than the media itself (a transcript in PDF, an address) is the document's. */
|
|
26
|
+
const isDocumentFile = (link) => isFileLink(link) && !MEDIA_EXTENSION.test(fileExtension(link) ?? "");
|
|
27
|
+
const isPlayer = (range) => holdsMedia(range) && !hasSentenceBesideMedia(range) && ![...range.inner.matchAll(ANY_LINK)].some((link) => isDocumentFile(link[0]));
|
|
28
|
+
/**
|
|
29
|
+
* A block holding an <audio> or <video> and not a sentence is its player: the controls, the timer, "Embed", "share",
|
|
30
|
+
* "Direct link" to the media's own file. The outermost such block goes; a block with a sentence, a caption or a link
|
|
31
|
+
* to another file stays.
|
|
32
|
+
*/
|
|
33
|
+
const withoutMediaPlayers = (html) => {
|
|
34
|
+
const players = PLAYER_BLOCKS.flatMap((tag) => elementRanges(html, tag)).filter(isPlayer);
|
|
35
|
+
return withoutRanges(html, players.toSorted((left, right) => left.start - right.start || right.end - left.end));
|
|
36
|
+
};
|
|
37
|
+
const EVENT_HANDLER = String.raw `on[a-z]+\s*=`;
|
|
38
|
+
const CONTROL_OPENING = new RegExp(String.raw `<(div|p|span|li)${ATTRIBUTES}\s+${EVENT_HANDLER}`, "giu");
|
|
39
|
+
/** Links and nothing else, but no link that wraps blocks. */
|
|
40
|
+
const isOnlyPlainLinks = (inner) => {
|
|
41
|
+
const links = [...inner.matchAll(ANY_LINK)].map((link) => link[0]);
|
|
42
|
+
return links.length > 0 && !links.some((link) => /<(?:div|p|h[1-6]|ul|ol)\b/iu.test(link)) && hasNoWords(plainText(inner.replace(ANY_LINK, " ")));
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* A block that runs a script when clicked (onclick) and holds only a link ("Start Quiz") is a button drawn as a link.
|
|
46
|
+
* A link with a handler of its own, inside a sentence, stays: it is only counted when followed.
|
|
47
|
+
*/
|
|
48
|
+
const isScriptedControl = (range) => new RegExp(String.raw `^<[a-z]+${ATTRIBUTES}\s+${EVENT_HANDLER}`, "iu").test(range.openTag) && isOnlyPlainLinks(range.inner);
|
|
49
|
+
const withoutScriptedControls = (html) => withoutElementsOpening(html, CONTROL_OPENING, isScriptedControl);
|
|
50
|
+
const BACK_ARROW = "[←‹«◀◁]";
|
|
51
|
+
const FORWARD_ARROW = "[→›»▶▷]";
|
|
52
|
+
const PAGING_TEXT = new RegExp(`^${BACK_ARROW}.*${FORWARD_ARROW}$`, "u");
|
|
53
|
+
const MIN_PAGING_LINKS = 2;
|
|
54
|
+
const PAGING_BLOCKS = ["div", "section", "p", "td"];
|
|
55
|
+
/**
|
|
56
|
+
* Opens with a back arrow and closes with a forward one around two or more links to pages (never a file), with no sentence beside them: "←
|
|
57
|
+
* Previous | Title | Next →". Link text is not looked at, since a name's initial ("John P.") is not a sentence.
|
|
58
|
+
*/
|
|
59
|
+
const isPagingBar = (range) => {
|
|
60
|
+
const links = [...range.inner.matchAll(ANY_LINK)].map((link) => link[0]);
|
|
61
|
+
return (PAGING_TEXT.test(plainText(range.inner)) && links.length >= MIN_PAGING_LINKS && !links.some(isFileLink) && !hasSentence(range.inner.replace(ANY_LINK, " ")));
|
|
62
|
+
};
|
|
63
|
+
/** The innermost blocks that are a bar of previous and next links, as a work's header draws them over each chapter. */
|
|
64
|
+
const withoutPagingBars = (html) => {
|
|
65
|
+
const bars = PAGING_BLOCKS.flatMap((tag) => elementRanges(html, tag)).filter(isPagingBar);
|
|
66
|
+
const innermost = bars.filter((outer) => !bars.some((inner) => inner !== outer && outer.start <= inner.start && inner.end <= outer.end));
|
|
67
|
+
return withoutRanges(html, innermost.toSorted((left, right) => left.start - right.start));
|
|
68
|
+
};
|
|
69
|
+
/** Controls and their text: tooltips, unspoken data, media players, scripted link buttons and paging bars. */
|
|
70
|
+
export const withoutWidgets = (html) => withoutPagingBars(withoutScriptedControls(withoutMediaPlayers(withoutTooltipsAndUnspoken(html))));
|
|
71
|
+
//# sourceMappingURL=html-widgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-widgets.js","sourceRoot":"","sources":["../../src/html/html-widgets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** In one pass, so "&lt;" is "<" and not "<". An unknown name is left as written. */
|
|
2
|
+
export declare const decodeEntities: (text: string) => string;
|
|
3
|
+
/** Trailing spaces removed, runs of blank lines made one, and a single newline at the end. */
|
|
4
|
+
export declare const tidyLines: (lines: readonly string[]) => string;
|
|
5
|
+
//# sourceMappingURL=markup-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markup-text.d.ts","sourceRoot":"","sources":["../../src/html/markup-text.ts"],"names":[],"mappings":"AAsBA,4FAA4F;AAC5F,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MACmE,CAAC;AAElH,8FAA8F;AAC9F,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,MAAM,EAAE,KAAG,MAOpD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// What the wikitext and HTML converters share: character references turned back into characters, and the blank
|
|
2
|
+
// lines and trailing spaces a converter leaves behind tidied away. Pure.
|
|
3
|
+
import { characterEntities } from "character-entities";
|
|
4
|
+
// A named space ( ,  ) is read as a plain space, like the spacing between the page's other words.
|
|
5
|
+
const isSpace = (value) => /^\p{Zs}+$/u.test(value);
|
|
6
|
+
/** A name of the HTML standard, matched as written: "Ø" is Ø and "ø" is ø. */
|
|
7
|
+
const decodeName = (name, whole) => {
|
|
8
|
+
const value = Object.hasOwn(characterEntities, name) ? characterEntities[name] : undefined;
|
|
9
|
+
if (value === undefined)
|
|
10
|
+
return whole;
|
|
11
|
+
return isSpace(value) ? " " : value;
|
|
12
|
+
};
|
|
13
|
+
const fromCodePoint = (code, whole) => (Number.isInteger(code) && code > 0 && code <= 0x10ffff ? String.fromCodePoint(code) : whole);
|
|
14
|
+
const decodeOne = (whole, name) => {
|
|
15
|
+
if (name.startsWith("#x") || name.startsWith("#X"))
|
|
16
|
+
return fromCodePoint(Number.parseInt(name.slice(2), 16), whole);
|
|
17
|
+
if (name.startsWith("#"))
|
|
18
|
+
return fromCodePoint(Number.parseInt(name.slice(1), 10), whole);
|
|
19
|
+
return decodeName(name, whole);
|
|
20
|
+
};
|
|
21
|
+
/** In one pass, so "&lt;" is "<" and not "<". An unknown name is left as written. */
|
|
22
|
+
export const decodeEntities = (text) => text.replace(/&(#x[0-9a-f]+|#\d+|[a-z][a-z0-9]*);/giu, (whole, name) => decodeOne(whole, name));
|
|
23
|
+
/** Trailing spaces removed, runs of blank lines made one, and a single newline at the end. */
|
|
24
|
+
export const tidyLines = (lines) => {
|
|
25
|
+
const text = lines
|
|
26
|
+
.map((line) => line.trimEnd())
|
|
27
|
+
.join("\n")
|
|
28
|
+
.replace(/\n{3,}/gu, "\n\n")
|
|
29
|
+
.trim();
|
|
30
|
+
return text === "" ? "" : `${text}\n`;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=markup-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markup-text.js","sourceRoot":"","sources":["../../src/html/markup-text.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,yEAAyE;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,8GAA8G;AAC9G,MAAM,OAAO,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAErE,4FAA4F;AAC5F,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE7J,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,IAAY,EAAU,EAAE;IACxD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACpH,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1F,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CACrD,IAAI,CAAC,OAAO,CAAC,wCAAwC,EAAE,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAElH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAU,EAAE;IAC5D,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;SAC3B,IAAI,EAAE,CAAC;IACV,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;AACxC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** The document a page reads as: the name that says how to read it (.md or .txt), and its text. */
|
|
2
|
+
export type PageDocument = {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly text: string;
|
|
5
|
+
} | {
|
|
6
|
+
readonly unsupported: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const pageDocument: (contentType: string | null, body: string) => PageDocument;
|
|
9
|
+
//# sourceMappingURL=page-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-document.d.ts","sourceRoot":"","sources":["../../src/html/page-document.ts"],"names":[],"mappings":"AAIA,mGAAmG;AACnG,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAU/G,eAAO,MAAM,YAAY,GAAI,aAAa,MAAM,GAAG,IAAI,EAAE,MAAM,MAAM,KAAG,YAMvE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// A fetched page as a document chaff reads: HTML turned into Markdown (headings become addresses), Markdown and plain
|
|
2
|
+
// text as they are. Anything else (a PDF, JSON, an image) is not text a quotation can be found in. Pure.
|
|
3
|
+
import { htmlToMarkdown } from "./html-markdown.js";
|
|
4
|
+
const mediaTypeOf = (contentType) => (contentType ?? "").split(";")[0]?.trim().toLowerCase() ?? "";
|
|
5
|
+
/** A body sent with no Content-Type is HTML when it opens like markup. */
|
|
6
|
+
const LOOKS_LIKE_HTML = /^\s*(?:<!doctype html|<html[\s>]|<head[\s>]|<body[\s>])/iu;
|
|
7
|
+
const HTML_TYPES = new Set(["text/html", "application/xhtml+xml"]);
|
|
8
|
+
const MARKDOWN_TYPES = new Set(["text/markdown", "text/x-markdown"]);
|
|
9
|
+
export const pageDocument = (contentType, body) => {
|
|
10
|
+
const type = mediaTypeOf(contentType);
|
|
11
|
+
if (HTML_TYPES.has(type) || (type === "" && LOOKS_LIKE_HTML.test(body)))
|
|
12
|
+
return { path: "page.md", text: htmlToMarkdown(body) };
|
|
13
|
+
if (MARKDOWN_TYPES.has(type))
|
|
14
|
+
return { path: "page.md", text: body };
|
|
15
|
+
if (type === "" || type.startsWith("text/"))
|
|
16
|
+
return { path: "page.txt", text: body };
|
|
17
|
+
return { unsupported: type };
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=page-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-document.js","sourceRoot":"","sources":["../../src/html/page-document.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,yGAAyG;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,WAAW,GAAG,CAAC,WAA0B,EAAU,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;AAE1H,0EAA0E;AAC1E,MAAM,eAAe,GAAG,2DAA2D,CAAC;AAEpF,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;AACxF,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAA0B,EAAE,IAAY,EAAgB,EAAE;IACrF,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAChI,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrF,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CountMismatch, type CountWords } from "./announced-count.ts";
|
|
2
|
+
/**
|
|
3
|
+
* 一行に並べた名前の予告(出席者(6名):田中、鈴木、佐藤 / Attendees (6): Tanaka, Suzuki)。ラベルの後ろの括弧の数と、
|
|
4
|
+
* コロンの後ろに区切って並べた名前の数を比べる。区切りが決まらない並び(名前をつなぐ語がある、括弧が閉じていない、文が続く)と、
|
|
5
|
+
* 閉じていない並び(ほか、etc.)は数えない。言語の知識(区切り、つなぐ語、閉じていないことを言う語)は語彙表から受け取る。
|
|
6
|
+
*/
|
|
7
|
+
export type MemberWords = {
|
|
8
|
+
/** 名前の区切り。、 , */
|
|
9
|
+
readonly separators: readonly string[];
|
|
10
|
+
/** 名前をつなぐ語。と、and。 */
|
|
11
|
+
readonly joiners: readonly string[];
|
|
12
|
+
/** 並びが閉じていないことを言う語。ほか、etc。 */
|
|
13
|
+
readonly open: readonly string[];
|
|
14
|
+
};
|
|
15
|
+
/** 区切って並べた名前の数。並びとして読めないときは undefined。 */
|
|
16
|
+
export declare const memberCount: (members: string, words: MemberWords) => number | undefined;
|
|
17
|
+
/** 本文(コードや強調の印を空白で覆ったもの)の、一行に並べた名前の予告で、数が合わないもの。 */
|
|
18
|
+
export declare const inlineCountMismatches: (text: string, words: CountWords, members: MemberWords) => CountMismatch[];
|
|
19
|
+
//# sourceMappingURL=inline-count.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-count.d.ts","sourceRoot":"","sources":["../src/inline-count.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,iBAAiB;IACjB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AA8DF,0CAA0C;AAC1C,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,OAAO,WAAW,KAAG,MAAM,GAAG,SAQ1E,CAAC;AAgDF,oDAAoD;AACpD,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,OAAO,UAAU,EAAE,SAAS,WAAW,KAAG,aAAa,EAU1G,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { escapeRegExp } from "./orthography.js";
|
|
2
|
+
import { alternation, valueOf } from "./announced-count.js";
|
|
3
|
+
const MAX_LABEL_CHARS = 30;
|
|
4
|
+
const MAX_MEMBER_CHARS = 40;
|
|
5
|
+
const MIN_MEMBERS = 2;
|
|
6
|
+
/** 一行に並べる名前の数として読む上限。括弧の年(Holland (1993): ...)を数に読まない。 */
|
|
7
|
+
const MAX_ANNOUNCED = 99;
|
|
8
|
+
/**
|
|
9
|
+
* 行頭(箇条書きの印の後ろでもよい)のラベル、括弧の中の数(数える語は付いても付かなくてもよい)、コロン。
|
|
10
|
+
* 括弧の中に数以外の語があるもの(約6名、6名以上、5名ほか)は形が合わず、ここで外れる。
|
|
11
|
+
*/
|
|
12
|
+
const headPattern = (words) => {
|
|
13
|
+
const numbers = words.numbers.length === 0 ? "\\p{Nd}+" : `\\p{Nd}+|${alternation(words.numbers)}`;
|
|
14
|
+
const counter = words.counters.length === 0 ? "" : `(?:[ \\t]?(?<counter>${alternation(words.counters)})(?![A-Za-z]))?`;
|
|
15
|
+
const label = `(?<label>[^\\s\\p{Nd}((::|>#*+-][^((::\\n]{0,${MAX_LABEL_CHARS}})`;
|
|
16
|
+
const listMark = String.raw `(?:(?:[-*+]|\d{1,9}[.)])[ \t]+)?`;
|
|
17
|
+
return new RegExp(`^[ \\t]*${listMark}${label}[((][ \\t]*(?<phrase>(?<number>${numbers})${counter})[ \\t]*[))][ \\t]*[::][ \\t]*`, "diu");
|
|
18
|
+
};
|
|
19
|
+
const LATIN_LETTER = /[A-Za-z]/u;
|
|
20
|
+
/** 英語の語は語の切れ目で照らす(and が Anderson に当たらない)。日本語の語は字面どおり。atEnd なら末尾の語だけ。 */
|
|
21
|
+
const wordPattern = (word, atEnd = false) => {
|
|
22
|
+
const before = LATIN_LETTER.test(word[0] ?? "") ? "(?<![A-Za-z])" : "";
|
|
23
|
+
const after = LATIN_LETTER.test(word.at(-1) ?? "") ? "(?![A-Za-z])" : "";
|
|
24
|
+
return new RegExp(`${before}${escapeRegExp(word)}${after}${atEnd ? "\\s*$" : ""}`, "iu");
|
|
25
|
+
};
|
|
26
|
+
const BRACKETED = /\([^()()]*\)|([^()()]*)|「[^「」]*」|\[[^[\]]*\]/gu;
|
|
27
|
+
const BRACKET = /[()()「」[\]]/u;
|
|
28
|
+
/** 並びの途中で文が切れる、別のラベルが始まる。名前の並びでなく文なので数えない。 */
|
|
29
|
+
const NOT_A_NAME_LIST = /[。..::;;]/u;
|
|
30
|
+
const TRAILING_END = /[。..]\s*$/u;
|
|
31
|
+
/** 括弧の中の注記(議長)を除いた並び。括弧が閉じていなければ undefined。 */
|
|
32
|
+
const withoutNotes = (members) => {
|
|
33
|
+
const stripped = members.replace(BRACKETED, "");
|
|
34
|
+
return BRACKET.test(stripped) ? undefined : stripped;
|
|
35
|
+
};
|
|
36
|
+
const hasAny = (text, words) => words.some((word) => wordPattern(word).test(text));
|
|
37
|
+
/** 閉じていないことを言う語は名前の後ろに付く(田中ほか、etc)。名前の中の字(等々力)は数える。 */
|
|
38
|
+
const endsOpen = (member, open) => open.some((word) => wordPattern(word, true).test(member));
|
|
39
|
+
/** 最後の名前の前のつなぐ語(, and Ito)は並びの終わりの印で、名前の一部ではない。 */
|
|
40
|
+
const withoutLeadingJoiner = (member, joiners) => {
|
|
41
|
+
const leading = joiners.find((joiner) => new RegExp(`^${escapeRegExp(joiner)}\\s+`, "iu").test(member));
|
|
42
|
+
return leading === undefined ? member : member.slice(leading.length).trimStart();
|
|
43
|
+
};
|
|
44
|
+
const splitMembers = (text, separators) => text.split(new RegExp(separators.map(escapeRegExp).join("|"), "u")).map((part) => part.trim());
|
|
45
|
+
const withLastJoinerOff = (parts, joiners) => {
|
|
46
|
+
const last = parts.at(-1);
|
|
47
|
+
return last === undefined ? [...parts] : [...parts.slice(0, -1), withoutLeadingJoiner(last, joiners)];
|
|
48
|
+
};
|
|
49
|
+
const isNameLike = (member, words) => member !== "" && member.length <= MAX_MEMBER_CHARS && !hasAny(member, words.joiners);
|
|
50
|
+
/** 区切って並べた名前の数。並びとして読めないときは undefined。 */
|
|
51
|
+
export const memberCount = (members, words) => {
|
|
52
|
+
if (words.separators.length === 0)
|
|
53
|
+
return undefined;
|
|
54
|
+
const notes = withoutNotes(members.trim().replace(TRAILING_END, ""));
|
|
55
|
+
if (notes === undefined || NOT_A_NAME_LIST.test(notes))
|
|
56
|
+
return undefined;
|
|
57
|
+
const parts = splitMembers(notes, words.separators);
|
|
58
|
+
if (parts.some((part) => endsOpen(part, words.open)))
|
|
59
|
+
return undefined;
|
|
60
|
+
const names = withLastJoinerOff(parts, words.joiners);
|
|
61
|
+
return names.length >= MIN_MEMBERS && names.every((name) => isNameLike(name, words)) ? names.length : undefined;
|
|
62
|
+
};
|
|
63
|
+
/** 次の行に並びが続いてよい行。空行、箇条書き、見出し、引用、表の行は別のもの。 */
|
|
64
|
+
const CONTINUATION = /^[ \t]*[^\s\-*+#>|]/u;
|
|
65
|
+
const endsWithSeparator = (text, words) => words.separators.some((separator) => text.trimEnd().endsWith(separator));
|
|
66
|
+
/** 区切りで終わる行は、次の行に並びが続く。 */
|
|
67
|
+
const membersFrom = (lines, next, soFar, words) => {
|
|
68
|
+
const line = lines[next] ?? "";
|
|
69
|
+
return endsWithSeparator(soFar, words) && CONTINUATION.test(line) ? membersFrom(lines, next + 1, soFar + line, words) : soFar;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* ラベルは短い名前(出席者、Attendees)。区切りを含むもの(Dunn, G.E. (1960):)は文献の著者で、番号で終わるもの(Step 2 (3):)は
|
|
73
|
+
* 番号の付いた項目。どちらも括弧の数は並べた名前の数ではない。
|
|
74
|
+
*/
|
|
75
|
+
const isLabel = (label, members) => !/\p{Nd}\s*$/u.test(label) && !members.separators.some((separator) => label.includes(separator));
|
|
76
|
+
/** 数える語の無い数(Attendees (6))は、ラベル自身が数えるもの(attendees、items)を言うときだけ数。Appendix (3) は番号。 */
|
|
77
|
+
const labelCounts = (label, counters) => counters.some((counter) => wordPattern(counter, true).test(label));
|
|
78
|
+
const linesOf = (text) => {
|
|
79
|
+
const starts = [0, ...[...text.matchAll(/\n/gu)].map((match) => match.index + 1)];
|
|
80
|
+
return text.split("\n").map((line, index) => ({ text: line, start: starts[index] ?? 0 }));
|
|
81
|
+
};
|
|
82
|
+
/** 数える語が数に付いているか、ラベルが数えるものを言っている(Attendees (6))ときだけ、括弧の数を名前の数に読む。 */
|
|
83
|
+
const isCount = (announced, counter, label, words) => (counter !== undefined || labelCounts(label, words.counters)) && announced >= 1 && announced <= MAX_ANNOUNCED;
|
|
84
|
+
const headOf = (text, head, words, members) => {
|
|
85
|
+
const match = head.exec(text);
|
|
86
|
+
const groups = match?.groups;
|
|
87
|
+
const phraseAt = match?.indices?.groups?.["phrase"]?.[0];
|
|
88
|
+
const label = groups?.["label"] ?? "";
|
|
89
|
+
if (match === null || groups === undefined || phraseAt === undefined || !isLabel(label, members))
|
|
90
|
+
return undefined;
|
|
91
|
+
const announced = valueOf(groups["number"] ?? "", words.numbers);
|
|
92
|
+
if (!isCount(announced, groups["counter"], label, words))
|
|
93
|
+
return undefined;
|
|
94
|
+
return { phrase: (groups["phrase"] ?? "").trim(), phraseAt, announced, rest: text.slice(match[0].length) };
|
|
95
|
+
};
|
|
96
|
+
/** 本文(コードや強調の印を空白で覆ったもの)の、一行に並べた名前の予告で、数が合わないもの。 */
|
|
97
|
+
export const inlineCountMismatches = (text, words, members) => {
|
|
98
|
+
const head = headPattern(words);
|
|
99
|
+
const lines = linesOf(text);
|
|
100
|
+
const texts = lines.map((line) => line.text);
|
|
101
|
+
return lines.flatMap((line, index) => {
|
|
102
|
+
const found = headOf(line.text, head, words, members);
|
|
103
|
+
const listed = found === undefined ? undefined : memberCount(membersFrom(texts, index + 1, found.rest, members), members);
|
|
104
|
+
if (found === undefined || listed === undefined || listed === found.announced)
|
|
105
|
+
return [];
|
|
106
|
+
return [{ offset: line.start + found.phraseAt, phrase: found.phrase, announced: found.announced, listed }];
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=inline-count.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-count.js","sourceRoot":"","sources":["../src/inline-count.ts"],"names":[],"mappings":"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"}
|
package/dist/kana-spelling.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ export declare const toKatakana: (text: string) => string;
|
|
|
3
3
|
export declare const isKanaOnly: (text: string) => boolean;
|
|
4
4
|
/** The kanji of a spelling, in order: 引越 for both 引っ越し and 引越し, nothing for できる. */
|
|
5
5
|
export declare const kanjiSkeleton: (text: string) => string;
|
|
6
|
+
/**
|
|
7
|
+
* Whether a spelling is the kanji alone of a word the others spell with okurigana: 取扱 beside 取扱い, 締切 beside 締切り. Official
|
|
8
|
+
* Japanese drops okurigana at the head of a compound (取扱事業者) and keeps it on the word alone, so the two are one convention.
|
|
9
|
+
*/
|
|
10
|
+
export declare const dropsOkurigana: (spelling: string, spellings: readonly string[]) => boolean;
|
|
6
11
|
/**
|
|
7
12
|
* The reading of the dictionary form, from the reading of the written form: 下さい (クダサイ) with lemma 下さる reads クダサル.
|
|
8
13
|
* The written form and the lemma differ only in their kana ending, so that ending is swapped in the reading. When the ending is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kana-spelling.d.ts","sourceRoot":"","sources":["../src/kana-spelling.ts"],"names":[],"mappings":"AASA,6DAA6D;AAC7D,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAmH,CAAC;AAE9J,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAA+B,CAAC;AAE1E,oFAAoF;AACpF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAAqE,CAAC;
|
|
1
|
+
{"version":3,"file":"kana-spelling.d.ts","sourceRoot":"","sources":["../src/kana-spelling.ts"],"names":[],"mappings":"AASA,6DAA6D;AAC7D,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAmH,CAAC;AAE9J,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAA+B,CAAC;AAE1E,oFAAoF;AACpF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAAqE,CAAC;AAEnH;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,EAAE,WAAW,SAAS,MAAM,EAAE,KAAG,OAC+D,CAAC;AAUhJ;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAOvF,CAAC;AAKF,oHAAoH;AACpH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,MAKrB,CAAC"}
|
package/dist/kana-spelling.js
CHANGED
|
@@ -10,6 +10,11 @@ export const toKatakana = (text) => text.replace(HIRAGANA, (char) => String.from
|
|
|
10
10
|
export const isKanaOnly = (text) => KANA_ONLY.test(text);
|
|
11
11
|
/** The kanji of a spelling, in order: 引越 for both 引っ越し and 引越し, nothing for できる. */
|
|
12
12
|
export const kanjiSkeleton = (text) => [...text.matchAll(KANJI)].map((match) => match[0]).join("");
|
|
13
|
+
/**
|
|
14
|
+
* Whether a spelling is the kanji alone of a word the others spell with okurigana: 取扱 beside 取扱い, 締切 beside 締切り. Official
|
|
15
|
+
* Japanese drops okurigana at the head of a compound (取扱事業者) and keeps it on the word alone, so the two are one convention.
|
|
16
|
+
*/
|
|
17
|
+
export const dropsOkurigana = (spelling, spellings) => spelling !== "" && kanjiSkeleton(spelling) === spelling && spellings.some((other) => other !== spelling && kanjiSkeleton(other) === spelling);
|
|
13
18
|
/** The length, in UTF-16 units, of the start both strings share, compared character by character (𠮟 is one character, two units). */
|
|
14
19
|
const sharedPrefixLength = (left, right) => {
|
|
15
20
|
const [leftChars, rightChars] = [[...left], [...right]];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kana-spelling.js","sourceRoot":"","sources":["../src/kana-spelling.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kana-spelling.js","sourceRoot":"","sources":["../src/kana-spelling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Span, Token } from "./plugin.ts";
|
|
2
|
+
/** units は階・部屋の番号の単位(語彙表 floor-unit)、levels は番号の前に書いて階の名前の一部になる語(語彙表 floor-level)。 */
|
|
3
|
+
export type FloorWords = {
|
|
4
|
+
readonly units: ReadonlySet<string>;
|
|
5
|
+
readonly levels: ReadonlySet<string>;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 「本社 5階 第2会議室」「研究所 3階 セミナー室」のように、名前の語の後ろに空白で区切って書いた階・部屋の番号。
|
|
9
|
+
* その前の空白は所在の組を分ける区切りで、日本語と数字のあいだの空け方の好みではない。「地下 1階」「地上 5階」の空白は階の名前の中の空け方なので、区切りと読まない。
|
|
10
|
+
* 番号は数字だけで、単位の後ろで組が閉じる(空白・読点・文末・英字が続く)ものだけ。tokens は文書全体の座標で、base は text の先頭の位置。
|
|
11
|
+
*/
|
|
12
|
+
export declare const isSpacedLocationPart: (text: string, run: Span, tokens: readonly Token[] | undefined, base: number, words: FloorWords) => boolean;
|
|
13
|
+
//# sourceMappingURL=location-part.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"location-part.d.ts","sourceRoot":"","sources":["../src/location-part.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAU/C,sFAAsF;AACtF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAMvG;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,KAAK,IAAI,EAAE,QAAQ,SAAS,KAAK,EAAE,GAAG,SAAS,EAAE,MAAM,MAAM,EAAE,OAAO,UAAU,KAAG,OAOrI,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** 空白の前の、建物や場所の名前になる語の品詞。助詞の後ろ(「会場は 5階」)は名前の区切りではない。 */
|
|
2
|
+
const NAME_POS = new Set(["NOUN", "PROPN"]);
|
|
3
|
+
/** 階・部屋の番号の後ろに続けば、番号が語の一部(5階建て、5階です)で、所在の組を閉じていない字。 */
|
|
4
|
+
const WORD_CHAR = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}]/u;
|
|
5
|
+
const SPACES = new Set([" ", " "]);
|
|
6
|
+
/** run のすぐ後ろに書いた、units のうち最も長い語。無ければ undefined。 */
|
|
7
|
+
const unitAfter = (text, run, units) => [...units].filter((unit) => text.startsWith(unit, run.end)).toSorted((left, right) => right.length - left.length)[0];
|
|
8
|
+
/**
|
|
9
|
+
* 「本社 5階 第2会議室」「研究所 3階 セミナー室」のように、名前の語の後ろに空白で区切って書いた階・部屋の番号。
|
|
10
|
+
* その前の空白は所在の組を分ける区切りで、日本語と数字のあいだの空け方の好みではない。「地下 1階」「地上 5階」の空白は階の名前の中の空け方なので、区切りと読まない。
|
|
11
|
+
* 番号は数字だけで、単位の後ろで組が閉じる(空白・読点・文末・英字が続く)ものだけ。tokens は文書全体の座標で、base は text の先頭の位置。
|
|
12
|
+
*/
|
|
13
|
+
export const isSpacedLocationPart = (text, run, tokens, base, words) => {
|
|
14
|
+
if (tokens === undefined || !SPACES.has(text[run.start - 1] ?? ""))
|
|
15
|
+
return false;
|
|
16
|
+
if (!/^\d+$/u.test(text.slice(run.start, run.end)))
|
|
17
|
+
return false;
|
|
18
|
+
const unit = unitAfter(text, run, words.units);
|
|
19
|
+
if (unit === undefined || WORD_CHAR.test(text[run.end + unit.length] ?? ""))
|
|
20
|
+
return false;
|
|
21
|
+
const named = tokens.find((token) => token.span.end === base + run.start - 1);
|
|
22
|
+
return named !== undefined && NAME_POS.has(named.pos) && !words.levels.has(named.surface);
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=location-part.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"location-part.js","sourceRoot":"","sources":["../src/location-part.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5C,uDAAuD;AACvD,MAAM,SAAS,GAAG,yDAAyD,CAAC;AAE5E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAKnC,mDAAmD;AACnD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,GAAS,EAAE,KAA0B,EAAsB,EAAE,CAC5F,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,GAAS,EAAE,MAAoC,EAAE,IAAY,EAAE,KAAiB,EAAW,EAAE;IAC9I,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACjF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9E,OAAO,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5F,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LexiconEntry, Token } from "./plugin.ts";
|
|
2
|
+
export type ClosedListWords = {
|
|
3
|
+
readonly open: readonly string[];
|
|
4
|
+
/** A limit right after the open word (等に限り, etc. only). */
|
|
5
|
+
readonly limitsAfter: readonly string[];
|
|
6
|
+
/** A limit before the list it governs (only A, B, etc.). */
|
|
7
|
+
readonly limitsBefore: readonly string[];
|
|
8
|
+
/** A phrase holding a limit's letters that closes nothing (に限らず, not only). */
|
|
9
|
+
readonly notLimits: readonly string[];
|
|
10
|
+
};
|
|
11
|
+
/** An open word on a closed list: where it is in the sentence, the word and the limit. */
|
|
12
|
+
export type OpenOnClosed = {
|
|
13
|
+
readonly offset: number;
|
|
14
|
+
readonly open: string;
|
|
15
|
+
readonly limit: string;
|
|
16
|
+
};
|
|
17
|
+
export declare const closedListWordsOf: (entries: readonly LexiconEntry[]) => ClosedListWords;
|
|
18
|
+
/** The open words of one sentence that a limit closes, by their offset in the sentence. */
|
|
19
|
+
export declare const openWordsOnClosedLists: (text: string, tokens: readonly Token[], words: ClosedListWords) => OpenOnClosed[];
|
|
20
|
+
//# sourceMappingURL=nado-closed-list.d.ts.map
|