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,106 @@
|
|
|
1
|
+
// A list left open (等, など, etc.) that a limit closes in the same breath (自転車等に限ります, only A, B, etc.). Pure: reads one
|
|
2
|
+
// sentence's text and tokens; the open words, the limits and the phrases that look like a limit without being one come
|
|
3
|
+
// from the language's nado-closed-list lexicon.
|
|
4
|
+
import type { LexiconEntry, Token } from "./plugin.ts";
|
|
5
|
+
import { escapeRegExp } from "./orthography.ts";
|
|
6
|
+
|
|
7
|
+
export type ClosedListWords = {
|
|
8
|
+
readonly open: readonly string[];
|
|
9
|
+
/** A limit right after the open word (等に限り, etc. only). */
|
|
10
|
+
readonly limitsAfter: readonly string[];
|
|
11
|
+
/** A limit before the list it governs (only A, B, etc.). */
|
|
12
|
+
readonly limitsBefore: readonly string[];
|
|
13
|
+
/** A phrase holding a limit's letters that closes nothing (に限らず, not only). */
|
|
14
|
+
readonly notLimits: readonly string[];
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/** An open word on a closed list: where it is in the sentence, the word and the limit. */
|
|
18
|
+
export type OpenOnClosed = { readonly offset: number; readonly open: string; readonly limit: string };
|
|
19
|
+
|
|
20
|
+
const patternsOf = (entries: readonly LexiconEntry[], group: string, position?: "before" | "after"): string[] =>
|
|
21
|
+
entries.filter((entry) => entry.group === group && (position === undefined || entry.position === position)).map((entry) => entry.pattern);
|
|
22
|
+
|
|
23
|
+
export const closedListWordsOf = (entries: readonly LexiconEntry[]): ClosedListWords => ({
|
|
24
|
+
open: patternsOf(entries, "open"),
|
|
25
|
+
limitsAfter: patternsOf(entries, "limit", "after"),
|
|
26
|
+
limitsBefore: patternsOf(entries, "limit", "before"),
|
|
27
|
+
notLimits: patternsOf(entries, "not-limit"),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const LATIN_START = /^[A-Za-z]/u;
|
|
31
|
+
const LETTER = /\p{L}/u;
|
|
32
|
+
/** What may stand between an open word and a limit right after it: spaces, a comma, a closing bracket. */
|
|
33
|
+
const BETWEEN_OPEN_AND_LIMIT = /^[\s,、))」』]*/u;
|
|
34
|
+
/** A word that is a counter or a class (1等, 2等), not an open word, by the tagger's features. */
|
|
35
|
+
const CLASS_NOUN = "Class";
|
|
36
|
+
/** What makes the words between a limit and an open word a clause of their own, not the list it governs. */
|
|
37
|
+
const CLAUSE_POS: ReadonlySet<string> = new Set(["AUX", "VERB"]);
|
|
38
|
+
/** A verb form that modifies a noun inside a list (a driving licence, used cars). */
|
|
39
|
+
const NOUN_MODIFYING_FORMS: ReadonlySet<string> = new Set(["Ger", "Part"]);
|
|
40
|
+
const LIST_SEPARATOR = /[,、]/u;
|
|
41
|
+
|
|
42
|
+
/** Where a word occurs in a text; a Latin word only as whole words, any case. */
|
|
43
|
+
const placesOf = (text: string, word: string): number[] => {
|
|
44
|
+
const latin = LATIN_START.test(word);
|
|
45
|
+
const matches = [...text.matchAll(new RegExp(escapeRegExp(word), latin ? "giu" : "gu"))].map((match) => match.index);
|
|
46
|
+
if (!latin) return matches;
|
|
47
|
+
return matches.filter((at) => !LETTER.test(text[at - 1] ?? "") && !LETTER.test(text[at + word.length] ?? ""));
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const startsWithWord = (text: string, word: string): boolean => placesOf(text.slice(0, word.length + 1), word).includes(0);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The open word stands as a word of its own: a token starts there, is no longer than the word (等しい, 同等 are other
|
|
54
|
+
* words), and is not a counter (1等). Token spans are the sentence's own offsets. Without tokens only a Latin word is read.
|
|
55
|
+
*/
|
|
56
|
+
const standsAsOpenWord = (tokens: readonly Token[], at: number, open: string): boolean => {
|
|
57
|
+
if (tokens.length === 0) return LATIN_START.test(open);
|
|
58
|
+
const token = tokens.find((candidate) => candidate.span.start === at);
|
|
59
|
+
return token !== undefined && open.toLowerCase().startsWith(token.surface.toLowerCase()) && token.features?.NounType !== CLASS_NOUN;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const limitRightAfter = (rest: string, words: ClosedListWords): string | undefined => {
|
|
63
|
+
const after = rest.slice(BETWEEN_OPEN_AND_LIMIT.exec(rest)?.[0].length ?? 0);
|
|
64
|
+
if (words.notLimits.some((phrase) => startsWithWord(after, phrase))) return undefined;
|
|
65
|
+
return longestFirst(words.limitsAfter).find((limit) => startsWithWord(after, limit));
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const longestFirst = (words: readonly string[]): string[] => [...words].sort((a, b) => b.length - a.length);
|
|
69
|
+
|
|
70
|
+
const insideNotLimit = (text: string, at: number, notLimits: readonly string[]): boolean =>
|
|
71
|
+
notLimits.some((phrase) => placesOf(text, phrase).some((start) => start <= at && at < start + phrase.length));
|
|
72
|
+
|
|
73
|
+
const OPEN_BRACKETS = /[((]/gu;
|
|
74
|
+
const CLOSE_BRACKETS = /[))]/gu;
|
|
75
|
+
|
|
76
|
+
/** A bracket opened and not closed between the limit and the list: the list explains a word the limit governs. */
|
|
77
|
+
const opensBracket = (between: string): boolean => (between.match(OPEN_BRACKETS)?.length ?? 0) > (between.match(CLOSE_BRACKETS)?.length ?? 0);
|
|
78
|
+
|
|
79
|
+
/** The words between a limit and the open word are a list it governs: separated by commas, with no clause of their own. */
|
|
80
|
+
const governsList = (text: string, tokens: readonly Token[], from: number, to: number): boolean =>
|
|
81
|
+
LIST_SEPARATOR.test(text.slice(from, to)) &&
|
|
82
|
+
!opensBracket(text.slice(from, to)) &&
|
|
83
|
+
!tokens.some(
|
|
84
|
+
(token) => token.span.start >= from && token.span.end <= to && CLAUSE_POS.has(token.pos) && !NOUN_MODIFYING_FORMS.has(token.features?.VerbForm ?? ""),
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
const limitBefore = (text: string, tokens: readonly Token[], at: number, words: ClosedListWords): string | undefined => {
|
|
88
|
+
const limits = words.limitsBefore.flatMap((limit) =>
|
|
89
|
+
placesOf(text.slice(0, at), limit).map((start) => ({ limit, start, end: start + limit.length, negated: insideNotLimit(text, start, words.notLimits) })),
|
|
90
|
+
);
|
|
91
|
+
const nearest = limits.toSorted((a, b) => b.start - a.start)[0];
|
|
92
|
+
if (nearest === undefined || nearest.negated) return undefined;
|
|
93
|
+
return governsList(text, tokens, nearest.end, at) ? nearest.limit : undefined;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/** The open words of one sentence that a limit closes, by their offset in the sentence. */
|
|
97
|
+
export const openWordsOnClosedLists = (text: string, tokens: readonly Token[], words: ClosedListWords): OpenOnClosed[] =>
|
|
98
|
+
words.open
|
|
99
|
+
.flatMap((open) => placesOf(text, open).map((at) => ({ open, at })))
|
|
100
|
+
.filter(({ open, at }) => standsAsOpenWord(tokens, at, open))
|
|
101
|
+
.flatMap(({ open, at }) => {
|
|
102
|
+
const limit = limitRightAfter(text.slice(at + open.length), words) ?? limitBefore(text, tokens, at, words);
|
|
103
|
+
return limit === undefined ? [] : [{ offset: at, open, limit }];
|
|
104
|
+
})
|
|
105
|
+
.sort((a, b) => a.offset - b.offset || b.open.length - a.open.length)
|
|
106
|
+
.filter((hit, index, hits) => hits[index - 1]?.offset !== hit.offset);
|
package/src/name-cue.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// 敬称も、解析器の人名の印も無い名前(担当の斎藤です、斉藤までご連絡ください)を、前後の語から人の名前と読む。
|
|
2
|
+
|
|
3
|
+
/** 人を指す前置き(担当の、私、)、敬称(様、さん)、名前のすぐ後ろに来る語(です、まで)。語彙表から。 */
|
|
4
|
+
export type NameCues = { readonly leads: readonly string[]; readonly suffixes: readonly string[]; readonly particles: readonly string[] };
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* person: 人の名前と言える(前に「担当の」、後ろに敬称)。slot: 名前の来る場所(後ろに「です」「まで」)。bare: どちらでもない。
|
|
8
|
+
* 名前の形でないもの(字数が違う、漢字以外を含む、長い漢字の連なりの一部)は undefined。
|
|
9
|
+
*/
|
|
10
|
+
export type NameCue = "person" | "slot" | "bare";
|
|
11
|
+
|
|
12
|
+
const MIN_NAME = 2;
|
|
13
|
+
const MAX_NAME = 4;
|
|
14
|
+
/** 前後の一字を読むのに要る長さ(UTF-16 の単位)。𠮷 は二つ。 */
|
|
15
|
+
const SURROGATE_PAIR = 2;
|
|
16
|
+
const HAN = /^\p{Script=Han}$/u;
|
|
17
|
+
|
|
18
|
+
const isHan = (letter: string | undefined): boolean => letter !== undefined && HAN.test(letter);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* offset から書いた surface を、前後の語で読む。名前は 2〜4 字の漢字で、前後に漢字が続かない(鹿嶋市、株式会社髙橋は地名や会社の名前の
|
|
22
|
+
* 一部)。敬称だけは漢字(様、氏)でも名前のすぐ後ろに続いてよい。
|
|
23
|
+
*/
|
|
24
|
+
export const nameCueAt = (text: string, offset: number, surface: string, cues: NameCues): NameCue | undefined => {
|
|
25
|
+
const letters = [...surface];
|
|
26
|
+
if (letters.length < MIN_NAME || letters.length > MAX_NAME || !letters.every((letter) => isHan(letter))) return undefined;
|
|
27
|
+
const context = Math.max(SURROGATE_PAIR, ...[...cues.leads, ...cues.suffixes, ...cues.particles].map((word) => word.length));
|
|
28
|
+
const before = text.slice(Math.max(0, offset - context), offset);
|
|
29
|
+
const after = text.slice(offset + surface.length, offset + surface.length + context);
|
|
30
|
+
if (isHan([...before].at(-1))) return undefined;
|
|
31
|
+
if (cues.suffixes.some((suffix) => after.startsWith(suffix))) return "person";
|
|
32
|
+
if (isHan([...after][0])) return undefined;
|
|
33
|
+
if (cues.leads.some((lead) => before.endsWith(lead))) return "person";
|
|
34
|
+
return cues.particles.some((particle) => after.startsWith(particle)) ? "slot" : "bare";
|
|
35
|
+
};
|
package/src/name-variants.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { Token } from "./plugin.ts";
|
|
2
2
|
import { escapeRegExp } from "./orthography.ts";
|
|
3
|
+
import { nameCueAt, type NameCue, type NameCues } from "./name-cue.ts";
|
|
4
|
+
import { isNearSurname } from "./surname-near.ts";
|
|
3
5
|
|
|
4
6
|
// 同じ名前(人・会社・製品)を、文書の中で少しだけ違う形に書いた所。どの形が正しいかは決めず、少ないほうを指す。
|
|
5
7
|
// 三通りで同じ名前と見る。書き方の違いだけ(GitHub と Github、Mac OS と macOS)、読みが同じ(山田太郎 と 山田太朗)、
|
|
@@ -7,7 +9,7 @@ import { escapeRegExp } from "./orthography.ts";
|
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* words は名前の語(記号を除く)。読みが同じ二つの名前が、どの語で違うかを見るため。person は人の名前と読めるもの(解析器が
|
|
10
|
-
* 人名と読むか、敬称が付く)。
|
|
12
|
+
* 人名と読むか、敬称が付く)。cue は前後の語から見た名前らしさ(name-cue.ts)。
|
|
11
13
|
*/
|
|
12
14
|
export type NameMention = {
|
|
13
15
|
readonly surface: string;
|
|
@@ -15,9 +17,14 @@ export type NameMention = {
|
|
|
15
17
|
readonly reading: string | undefined;
|
|
16
18
|
readonly words: readonly string[];
|
|
17
19
|
readonly person?: boolean;
|
|
20
|
+
readonly cue?: NameCue;
|
|
18
21
|
};
|
|
19
22
|
|
|
20
|
-
export type NameVariant = {
|
|
23
|
+
export type NameVariant = {
|
|
24
|
+
readonly mention: NameMention;
|
|
25
|
+
readonly usual: string;
|
|
26
|
+
readonly kind: "spelling" | "reading" | "near" | "surname" | "character";
|
|
27
|
+
};
|
|
21
28
|
|
|
22
29
|
/** 字体の違う同じ字(斎・斉・齋)。字から、その組の代表の字へ。 */
|
|
23
30
|
export type VariantChars = ReadonlyMap<string, string>;
|
|
@@ -97,6 +104,61 @@ export const mentionsIn = (tokens: readonly Token[], source: string, personSuffi
|
|
|
97
104
|
return [{ surface, offset: first.span.start, reading, words: words.map((token) => token.surface), person }];
|
|
98
105
|
});
|
|
99
106
|
|
|
107
|
+
/** 隣の語を探す範囲(UTF-16 の単位)。 */
|
|
108
|
+
const NEIGHBOUR_LOOKBACK = 40;
|
|
109
|
+
/** 隣の語の外側の記号((Rachel、Floyd.)。名前の側の記号(Rachel, Whitford の ,)は語を切るので残す。 */
|
|
110
|
+
const MARK = /\p{P}/u;
|
|
111
|
+
const withoutLeadingMarks = (word: string): string => {
|
|
112
|
+
const chars = [...word];
|
|
113
|
+
const start = chars.findIndex((char) => !MARK.test(char));
|
|
114
|
+
return start < 0 ? "" : chars.slice(start).join("");
|
|
115
|
+
};
|
|
116
|
+
const withoutTrailingMarks = (word: string): string => {
|
|
117
|
+
const chars = [...word];
|
|
118
|
+
return chars.slice(0, chars.findLastIndex((char) => !MARK.test(char)) + 1).join("");
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const wordBeforeAt = (source: string, offset: number): string | undefined => {
|
|
122
|
+
if (source.charAt(offset - 1) !== " ") return undefined;
|
|
123
|
+
const from = Math.max(0, offset - 1 - NEIGHBOUR_LOOKBACK);
|
|
124
|
+
const parts = source.slice(from, offset - 1).split(/\s/u);
|
|
125
|
+
const word = withoutLeadingMarks(parts.at(-1) ?? "");
|
|
126
|
+
return word === "" || (from > 0 && parts.length === 1) ? undefined : word;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const wordAfterAt = (source: string, end: number): string | undefined => {
|
|
130
|
+
if (source.charAt(end) !== " ") return undefined;
|
|
131
|
+
const word = withoutTrailingMarks(source.slice(end + 1, end + 1 + NEIGHBOUR_LOOKBACK).split(/\s/u)[0] ?? "");
|
|
132
|
+
return word === "" ? undefined : word;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* 解析器が名前の一語を名前と読まなかった所(to Rachel Whitford の Rachel を動詞と読む)。空白一つで隣の語と合わせた形を、ほかの所で
|
|
137
|
+
* 名前と読めていれば、その形の現れと見る。隣の語がほかの名前の現れに入るなら合わせない。
|
|
138
|
+
*/
|
|
139
|
+
export const withKnownNeighbours = (mentions: readonly NameMention[], source: string): NameMention[] => {
|
|
140
|
+
const known = new Set(mentions.filter((mention) => mention.words.length >= 2).map((mention) => mention.surface));
|
|
141
|
+
const taken = (start: number, end: number): boolean => mentions.some((mention) => mention.offset < end && start < mention.offset + mention.surface.length);
|
|
142
|
+
return mentions.map((mention) => {
|
|
143
|
+
const end = mention.offset + mention.surface.length;
|
|
144
|
+
const before = wordBeforeAt(source, mention.offset);
|
|
145
|
+
const after = wordAfterAt(source, end);
|
|
146
|
+
if (before !== undefined && known.has(`${before} ${mention.surface}`) && !taken(mention.offset - 1 - before.length, mention.offset - 1)) {
|
|
147
|
+
return {
|
|
148
|
+
...mention,
|
|
149
|
+
surface: `${before} ${mention.surface}`,
|
|
150
|
+
offset: mention.offset - 1 - before.length,
|
|
151
|
+
reading: undefined,
|
|
152
|
+
words: [before, ...mention.words],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
if (after !== undefined && known.has(`${mention.surface} ${after}`) && !taken(end + 1, end + 1 + after.length)) {
|
|
156
|
+
return { ...mention, surface: `${mention.surface} ${after}`, reading: undefined, words: [...mention.words, after] };
|
|
157
|
+
}
|
|
158
|
+
return mention;
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
|
|
100
162
|
/** 敬称の前の名前の字数(髙橋、髙橋太郎)。長い漢字の連なり(株式会社髙橋)は名前だけを切り出せない。 */
|
|
101
163
|
const MAX_SUFFIXED_NAME = 4;
|
|
102
164
|
const MIN_SUFFIXED_NAME = 2;
|
|
@@ -126,6 +188,22 @@ export const suffixedNamesIn = (source: string, suffixes: readonly string[], cha
|
|
|
126
188
|
}),
|
|
127
189
|
);
|
|
128
190
|
|
|
191
|
+
const HAN_RUN = /\p{Script=Han}+/gu;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* 解析器が名前と読めず、敬称も無いが、前後の語で名前と読める、字体の違う字を含む漢字(担当の髙橋です、髙橋まで)。
|
|
195
|
+
* ほかの名前の現れと重ならないもの。
|
|
196
|
+
*/
|
|
197
|
+
export const cuedNamesIn = (source: string, cues: NameCues, chars: VariantChars, taken: readonly NameMention[]): NameMention[] =>
|
|
198
|
+
[...source.matchAll(HAN_RUN)].flatMap((match) => {
|
|
199
|
+
const [run] = match;
|
|
200
|
+
const cue = nameCueAt(source, match.index, run, cues);
|
|
201
|
+
if (cue === undefined || cue === "bare" || ![...run].some((letter) => chars.has(letter))) return [];
|
|
202
|
+
const end = match.index + run.length;
|
|
203
|
+
if (taken.some((mention) => mention.offset < end && match.index < mention.offset + mention.surface.length)) return [];
|
|
204
|
+
return [{ surface: run, offset: match.index, reading: undefined, words: [run], cue }];
|
|
205
|
+
});
|
|
206
|
+
|
|
129
207
|
/** 比べる形。幅(AWS と AWS)、大文字小文字、空白と記号は名前を変えない。 */
|
|
130
208
|
export const nameKey = (surface: string): string =>
|
|
131
209
|
surface
|
|
@@ -133,19 +211,38 @@ export const nameKey = (surface: string): string =>
|
|
|
133
211
|
.toLowerCase()
|
|
134
212
|
.replaceAll(/[\s\p{P}\p{S}]/gu, "");
|
|
135
213
|
|
|
136
|
-
/**
|
|
137
|
-
|
|
214
|
+
/**
|
|
215
|
+
* 名前の現れから言えること。person: 人の名前と読める。named: 人を指す前置きか敬称が付く。nameLike: 名前の来る場所にある(前置き
|
|
216
|
+
* か敬称、名前のすぐ後ろに来る語)。解析器の人名の印は地名にも付く(鹿嶋へ)ので、nameLike には数えない。
|
|
217
|
+
*/
|
|
218
|
+
export type NameEvidence = { readonly person: boolean; readonly named: boolean; readonly nameLike: boolean };
|
|
219
|
+
|
|
220
|
+
type Tally = NameEvidence & { readonly surface: string; readonly first: NameMention; readonly count: number };
|
|
138
221
|
|
|
222
|
+
const evidenceOf = (mention: NameMention): NameEvidence => ({
|
|
223
|
+
person: mention.person === true,
|
|
224
|
+
named: mention.cue === "person",
|
|
225
|
+
nameLike: mention.cue === "person" || mention.cue === "slot",
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
/** 書き方ごとの数と、どれかの現れが言えること。 */
|
|
139
229
|
const talliesOf = (mentions: readonly NameMention[]): Tally[] => {
|
|
140
|
-
const tallies = new Map<string,
|
|
230
|
+
const tallies = new Map<string, Tally>();
|
|
141
231
|
mentions.forEach((mention) => {
|
|
142
232
|
const tally = tallies.get(mention.surface);
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
tally
|
|
147
|
-
|
|
148
|
-
|
|
233
|
+
const evidence = evidenceOf(mention);
|
|
234
|
+
tallies.set(
|
|
235
|
+
mention.surface,
|
|
236
|
+
tally === undefined
|
|
237
|
+
? { surface: mention.surface, first: mention, count: 1, ...evidence }
|
|
238
|
+
: {
|
|
239
|
+
...tally,
|
|
240
|
+
count: tally.count + 1,
|
|
241
|
+
person: tally.person || evidence.person,
|
|
242
|
+
named: tally.named || evidence.named,
|
|
243
|
+
nameLike: tally.nameLike || evidence.nameLike,
|
|
244
|
+
},
|
|
245
|
+
);
|
|
149
246
|
});
|
|
150
247
|
return [...tallies.values()];
|
|
151
248
|
};
|
|
@@ -246,17 +343,40 @@ const isSlipOf = (tally: Tally, other: Tally): boolean => {
|
|
|
246
343
|
|
|
247
344
|
const nearVariants = (tallies: readonly Tally[]): NameVariant[] => variantsIn(groupBy(tallies, maskedKeys), "near", isSlipOf);
|
|
248
345
|
|
|
346
|
+
/**
|
|
347
|
+
* 名が同じで姓だけが二字ほど違う人の名前(Rachel Whitford と Rachel Whitfield)。一字違い(near)より遠いので、名と姓の二語以上
|
|
348
|
+
* で、違うのが最後の語のときに限る。相手が二度以上、こちらが一度だけ。名の違う二人(Sara Whitford と Rachel Whitfield)は比べない。
|
|
349
|
+
*/
|
|
350
|
+
const isSurnameSlipOf = (tally: Tally, other: Tally): boolean => {
|
|
351
|
+
if (tally.count !== 1 || other.count < 2) return false;
|
|
352
|
+
const [words, others] = [wordsOf(tally.surface), wordsOf(other.surface)];
|
|
353
|
+
const last = words.length - 1;
|
|
354
|
+
const sameBefore = words.slice(0, last).every((word, index) => word === others[index]);
|
|
355
|
+
return last >= 1 && words.length === others.length && sameBefore && isNearSurname(words[last] ?? "", others[last] ?? "");
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
const surnameVariants = (tallies: readonly Tally[]): NameVariant[] => variantsIn(groupBy(tallies, maskedKeys), "surname", isSurnameSlipOf);
|
|
359
|
+
|
|
249
360
|
/** 字体の違う字(斎と斉)を組の代表の字に寄せた形。 */
|
|
250
361
|
const characterKey = (tally: Tally, chars: VariantChars): string => [...tally.surface].map((letter) => chars.get(letter) ?? letter).join("");
|
|
251
362
|
|
|
363
|
+
/**
|
|
364
|
+
* 字体の違う字で書き分けた二つを、同じ人の名前と見るか。どちらも人の名前と読めるか、片方に人を指す前置きか敬称が付き
|
|
365
|
+
* (担当の斎藤です)、もう片方が名前の来る場所にある(斉藤まで)。地名にも同じ組がある(鹿島 と 鹿嶋)ので、名前の来る場所どうし
|
|
366
|
+
* だけでは見ない。
|
|
367
|
+
*/
|
|
368
|
+
export const isCharacterPair = (left: NameEvidence, right: NameEvidence): boolean =>
|
|
369
|
+
(left.person && right.person) || (left.named && right.nameLike) || (right.named && left.nameLike);
|
|
370
|
+
|
|
252
371
|
/** 人の名前を、字体の違う同じ字(斎藤 と 斉藤、渡辺 と 渡邊)で書き分けた所。 */
|
|
253
372
|
const characterVariants = (tallies: readonly Tally[], chars: VariantChars): NameVariant[] =>
|
|
254
373
|
variantsIn(
|
|
255
374
|
groupBy(
|
|
256
|
-
tallies.filter((tally) => tally.person),
|
|
375
|
+
tallies.filter((tally) => tally.person || tally.nameLike),
|
|
257
376
|
(tally) => [characterKey(tally, chars)],
|
|
258
377
|
),
|
|
259
378
|
"character",
|
|
379
|
+
isCharacterPair,
|
|
260
380
|
);
|
|
261
381
|
|
|
262
382
|
/** 字数が同じで、一字だけが違う(松本 と 松元)。 */
|
|
@@ -298,6 +418,7 @@ export const nameVariants = (mentions: readonly NameMention[], chars: VariantCha
|
|
|
298
418
|
oneWordApart,
|
|
299
419
|
),
|
|
300
420
|
...nearVariants(tallies),
|
|
421
|
+
...surnameVariants(tallies),
|
|
301
422
|
...characterVariants(tallies, chars),
|
|
302
423
|
...personReadingVariants(tallies),
|
|
303
424
|
];
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { escapeRegExp } from "./orthography.ts";
|
|
2
|
+
|
|
3
|
+
// 語の順を入れ替えて書いた同じ名前(統計学基礎 と 基礎統計学、Foundations of Statistics と Statistical Foundations)。
|
|
4
|
+
// 名前と読める所(括弧や引用符の中、大文字で始まる語の並び、名前を書く欄の後ろ)だけを比べ、同じ語(日本語は形態素、英語は語幹)を
|
|
5
|
+
// 違う順に並べた二つのうち、少ないほうを指す。片方がもう片方を含む名前(統計学 と 統計学基礎)は別の名前として比べない。
|
|
6
|
+
// 大文字の語の並びだけでは名前と言い切れない(Florida Supreme Court と Supreme Court of Florida はふつうの言い換え)ので、
|
|
7
|
+
// 二つのどちらかが、括弧の中か欄の後ろか表の升まるごとに書いた名前(anchored)のときだけ比べる。
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* anchored は、括弧の中、欄の後ろ、表の升まるごとのように、名前として書いたと分かる所。clipped は欄の後ろのように、名前の後ろに
|
|
11
|
+
* 文が続きうる所で、名前は最初の名前の外の語(を、in)の手前まで。
|
|
12
|
+
*/
|
|
13
|
+
export type NameSpan = { readonly start: number; readonly end: number; readonly anchored?: boolean; readonly clipped?: boolean };
|
|
14
|
+
|
|
15
|
+
/** 名前の中の内容語。key は比べるための形(英語は語幹)。 */
|
|
16
|
+
export type OrderWord = { readonly start: number; readonly end: number; readonly key: string };
|
|
17
|
+
|
|
18
|
+
export type OrderName = { readonly offset: number; readonly surface: string; readonly keys: readonly string[]; readonly anchored: boolean };
|
|
19
|
+
|
|
20
|
+
export type OrderVariant = { readonly name: OrderName; readonly usual: string };
|
|
21
|
+
|
|
22
|
+
/** 名前と読む長さの上限(字)。これより長い括弧の中は、名前ではなく引用した文。 */
|
|
23
|
+
export const MAX_NAME_LENGTH = 80;
|
|
24
|
+
|
|
25
|
+
/** 名前の中に来ない文の区切り。 */
|
|
26
|
+
const CLAUSE_MARKS = "\\n。、.,.,;;::!!??";
|
|
27
|
+
|
|
28
|
+
/** 括弧や引用符の組(「」、“”)の中身。開きと閉じの二字で一つの組。 */
|
|
29
|
+
export const quotedSpans = (text: string, pairs: readonly string[]): NameSpan[] =>
|
|
30
|
+
pairs.flatMap((pair) => {
|
|
31
|
+
const [open = "", close = ""] = [...pair];
|
|
32
|
+
if (open === "" || close === "") return [];
|
|
33
|
+
const body = `[^${escapeRegExp(open)}${escapeRegExp(close)}${CLAUSE_MARKS}]{1,${String(MAX_NAME_LENGTH)}}`;
|
|
34
|
+
return [...text.matchAll(new RegExp(`${escapeRegExp(open)}(${body})${escapeRegExp(close)}`, "gu"))].map((found) => {
|
|
35
|
+
const start = (found.index ?? 0) + open.length;
|
|
36
|
+
return { start, end: start + (found[1] ?? "").length, anchored: true };
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const CAPITALISED = "\\p{Lu}[\\p{L}'’-]*";
|
|
41
|
+
|
|
42
|
+
const FIRST_WORD = new RegExp(`^${CAPITALISED}[ \\t]+`, "u");
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 大文字で始まる語が二つ以上並んだ所(Foundations of Statistics)。語のあいだに小さな語(of)を挟んでよい。文の頭の語は、
|
|
46
|
+
* 文の頭だから大文字のことがあるので、外す(Take Data Lab の Take)。
|
|
47
|
+
*/
|
|
48
|
+
export const titleCaseSpans = (text: string, joiners: readonly string[], isSentenceStart: (offset: number) => boolean = () => false): NameSpan[] => {
|
|
49
|
+
const joiner = joiners.length === 0 ? "" : `(?:(?:${joiners.map(escapeRegExp).join("|")})[ \\t]+)*`;
|
|
50
|
+
const pattern = new RegExp(`(?<![\\p{L}'’-])${CAPITALISED}(?:[ \\t]+${joiner}${CAPITALISED})+`, "gu");
|
|
51
|
+
return [...text.matchAll(pattern)].map((found) => {
|
|
52
|
+
const start = found.index ?? 0;
|
|
53
|
+
const lead = isSentenceStart(start) ? (FIRST_WORD.exec(found[0])?.[0].length ?? 0) : 0;
|
|
54
|
+
return { start: start + lead, end: start + found[0].length };
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** 名前を書く欄の語(前提科目:、Course:)の後ろの、句読点か行の終わりまで。 */
|
|
59
|
+
export const labelledSpans = (text: string, labels: readonly string[]): NameSpan[] => {
|
|
60
|
+
if (labels.length === 0) return [];
|
|
61
|
+
const label = labels.map(escapeRegExp).join("|");
|
|
62
|
+
const pattern = new RegExp(`(?<![\\p{L}])(?:${label})[ \\t]*[::][ \\t]*([^${CLAUSE_MARKS}]{1,${String(MAX_NAME_LENGTH)}})`, "giu");
|
|
63
|
+
return [...text.matchAll(pattern)].map((found) => {
|
|
64
|
+
const value = (found[1] ?? "").trimEnd();
|
|
65
|
+
const start = (found.index ?? 0) + found[0].length - (found[1] ?? "").length;
|
|
66
|
+
return { start, end: start + value.length, anchored: true, clipped: true };
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/** 語の比べる形: 小文字にして、語尾の語(ical、ics、s)を一つ、長いほうから外す。語幹が短くなりすぎる語尾は外さない。 */
|
|
71
|
+
const MIN_STEM = 4;
|
|
72
|
+
|
|
73
|
+
export const stemOf = (word: string, suffixes: readonly string[]): string => {
|
|
74
|
+
const lower = word.toLowerCase();
|
|
75
|
+
const suffix = suffixes
|
|
76
|
+
.toSorted((left, right) => right.length - left.length)
|
|
77
|
+
.find((candidate) => lower.endsWith(candidate.toLowerCase()) && lower.length - candidate.length >= MIN_STEM);
|
|
78
|
+
return suffix === undefined ? lower : lower.slice(0, lower.length - suffix.length);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/** clipped の範囲の終わり: 範囲の中で、内容語の後に来る最初の名前の外の語(stops の位置)の手前。 */
|
|
82
|
+
const clippedEnd = (span: NameSpan, words: readonly OrderWord[], stops: readonly number[]): number => {
|
|
83
|
+
if (span.clipped !== true) return span.end;
|
|
84
|
+
const firstWord = words.find((word) => word.start >= span.start && word.end <= span.end);
|
|
85
|
+
if (firstWord === undefined) return span.end;
|
|
86
|
+
return stops.find((stop) => stop > firstWord.start && stop < span.end) ?? span.end;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/** 名前が、もっと長い名前の一部か(“West Indies Hurricanes and other Tropical Cyclones” の West Indies Hurricanes)。 */
|
|
90
|
+
const isPartOf = (name: OrderName, longer: OrderName): boolean =>
|
|
91
|
+
name.offset >= longer.offset && name.offset + name.surface.length <= longer.offset + longer.surface.length;
|
|
92
|
+
|
|
93
|
+
/** 範囲の中の内容語の形。同じ所の同じ名前は一つにまとめ、どれかが anchored ならその名前は anchored。
|
|
94
|
+
* anchored の名前の一部だけを大文字の語の並びとして読んだものは除く。 */
|
|
95
|
+
export const orderNamesOf = (text: string, spans: readonly NameSpan[], words: readonly OrderWord[], stops: readonly number[] = []): OrderName[] => {
|
|
96
|
+
const named = spans.flatMap((span): OrderName[] => {
|
|
97
|
+
const end = clippedEnd(span, words, stops);
|
|
98
|
+
const inside = words.filter((word) => word.start >= span.start && word.end <= end);
|
|
99
|
+
const first = inside[0];
|
|
100
|
+
const last = inside.at(-1);
|
|
101
|
+
if (first === undefined || last === undefined) return [];
|
|
102
|
+
return [{ offset: first.start, surface: text.slice(first.start, last.end), keys: inside.map((word) => word.key), anchored: span.anchored === true }];
|
|
103
|
+
});
|
|
104
|
+
const byPlace = named.reduce<Map<string, OrderName>>((places, name) => {
|
|
105
|
+
const id = `${String(name.offset)}:${name.surface}`;
|
|
106
|
+
const known = places.get(id);
|
|
107
|
+
return places.set(id, known === undefined ? name : { ...known, anchored: known.anchored || name.anchored });
|
|
108
|
+
}, new Map());
|
|
109
|
+
const names = [...byPlace.values()];
|
|
110
|
+
return names
|
|
111
|
+
.filter((name) => name.anchored || !names.some((other) => other.anchored && isPartOf(name, other)))
|
|
112
|
+
.toSorted((left, right) => left.offset - right.offset);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
type Tally = { readonly first: OrderName; readonly count: number; readonly anchored: boolean };
|
|
116
|
+
|
|
117
|
+
const talliesOf = (names: readonly OrderName[]): Tally[] => [
|
|
118
|
+
...names
|
|
119
|
+
.reduce<Map<string, Tally>>((tallies, name) => {
|
|
120
|
+
const known = tallies.get(name.surface);
|
|
121
|
+
return tallies.set(name.surface, { first: known?.first ?? name, count: (known?.count ?? 0) + 1, anchored: (known?.anchored ?? false) || name.anchored });
|
|
122
|
+
}, new Map())
|
|
123
|
+
.values(),
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
/** 多いほうが前。同じ数なら先に書いたほうが前。 */
|
|
127
|
+
const byUse = (left: Tally, right: Tally): number => right.count - left.count || left.first.offset - right.first.offset;
|
|
128
|
+
|
|
129
|
+
const bagOf = (keys: readonly string[]): string => keys.toSorted((left, right) => left.localeCompare(right)).join("\u0000");
|
|
130
|
+
|
|
131
|
+
/** 同じ語を違う順に並べた別の書き方で、どちらも他方を含まないか。 */
|
|
132
|
+
export const isReordered = (left: OrderName, right: OrderName): boolean =>
|
|
133
|
+
left.keys.join("\u0000") !== right.keys.join("\u0000") &&
|
|
134
|
+
bagOf(left.keys) === bagOf(right.keys) &&
|
|
135
|
+
!left.surface.includes(right.surface) &&
|
|
136
|
+
!right.surface.includes(left.surface);
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* 多く使った書き方と同じ語を違う順に並べた名前。少ないほうを一つずつ指す。二つのどちらかが名前として書いた所(anchored)に
|
|
140
|
+
* あるときだけ。surfaces は表の升まるごとの書き方で、その書き方の名前も anchored と見る。
|
|
141
|
+
*/
|
|
142
|
+
export const wordOrderVariants = (names: readonly OrderName[], surfaces: ReadonlySet<string> = new Set()): OrderVariant[] => {
|
|
143
|
+
const tallies = talliesOf(names).toSorted(byUse);
|
|
144
|
+
const anchored = (tally: Tally): boolean => tally.anchored || surfaces.has(tally.first.surface);
|
|
145
|
+
return tallies.flatMap((tally, index) => {
|
|
146
|
+
const usual = tallies.slice(0, index).find((other) => (anchored(other) || anchored(tally)) && isReordered(other.first, tally.first));
|
|
147
|
+
return usual === undefined ? [] : [{ name: tally.first, usual: usual.first.surface }];
|
|
148
|
+
});
|
|
149
|
+
};
|
package/src/paragraph-runs.ts
CHANGED
|
@@ -14,13 +14,23 @@ const isAdjacent = (source: string, before: Paragraph, after: Paragraph): boolea
|
|
|
14
14
|
return between.trim() === "" && BLANK_LINE.test(between);
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
/** A sentence's last mark, past closing quotes, brackets and emphasis marks. */
|
|
18
|
+
const SENTENCE_END = /[。..!?!?]["'”’」』))\]]}}】》〕〉〛*_]*$/u;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Whether a paragraph ends as a sentence does. One that does not is a label, a field, a line of a flattened table or a heading
|
|
22
|
+
* written as plain text (日時:, Authors, 490 Ratings), which sets nothing apart.
|
|
23
|
+
*/
|
|
24
|
+
export const endsAsSentence = (source: string, paragraph: Paragraph): boolean =>
|
|
25
|
+
SENTENCE_END.test(source.slice(paragraph.span.start, paragraph.span.end).trim());
|
|
26
|
+
|
|
17
27
|
/**
|
|
18
28
|
* Each run of adjacent one-sentence paragraphs, in document order, as the paragraphs it holds. A paragraph of two sentences or
|
|
19
|
-
* more, or anything between two paragraphs, ends the run.
|
|
29
|
+
* more, a paragraph that does not end as a sentence, or anything between two paragraphs, ends the run.
|
|
20
30
|
*/
|
|
21
31
|
export const oneSentenceRuns = (source: string, paragraphs: readonly Paragraph[]): Paragraph[][] =>
|
|
22
32
|
paragraphs.reduce<Paragraph[][]>((runs, paragraph, at) => {
|
|
23
|
-
if (paragraph.sentences.length !== 1) return runs;
|
|
33
|
+
if (paragraph.sentences.length !== 1 || !endsAsSentence(source, paragraph)) return runs;
|
|
24
34
|
const previous = paragraphs[at - 1];
|
|
25
35
|
const current = runs.at(-1);
|
|
26
36
|
const continues = previous !== undefined && current?.at(-1) === previous && isAdjacent(source, previous, paragraph);
|