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
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
// amount-scale-consistency: the reading half. The amounts are currency-notation's (the lexicon currency-notation says
|
|
2
2
|
// how a currency is written); the words of scale and their values are the lexicon amount-multiplier (weight).
|
|
3
|
-
import type { Detector, Finding, ProseDocument } from "../plugin.ts";
|
|
3
|
+
import type { Detector, Finding, Lexicon, ProseDocument } from "../plugin.ts";
|
|
4
4
|
import { escapeRegExp } from "../orthography.ts";
|
|
5
|
-
import { amountValue, scaleMixes, type ScaleWord, type ScaledAmount } from "../structure/amount-scale.ts";
|
|
5
|
+
import { amountValue, scaleMixes, withoutRoundTextFigures, type ScaleWord, type ScaledAmount } from "../structure/amount-scale.ts";
|
|
6
6
|
import { AMOUNT, amountsIn, formsOf, type WrittenAmount } from "./currency-notation.ts";
|
|
7
7
|
import { quoteAround } from "./quote-around.ts";
|
|
8
|
+
import { proseAndTablesOf } from "../table-text.ts";
|
|
8
9
|
|
|
9
10
|
/** How far back a larger part of one amount may start (1億2,000万円 is read from 2,000万円). */
|
|
10
11
|
const LEADING_REACH = 40;
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
/** How far from an amount a marker of an estimate is looked for. */
|
|
14
|
+
const MARKER_REACH = 12;
|
|
15
|
+
|
|
16
|
+
export const scaleWordsOf = (doc: ProseDocument): ScaleWord[] =>
|
|
13
17
|
(doc.lexicons["amount-multiplier"] ?? []).flatMap((entry) => (entry.weight === undefined ? [] : [{ word: entry.pattern, value: entry.weight }]));
|
|
14
18
|
|
|
15
19
|
/** The larger parts written right before an amount the currency notation read from its last part (1億 before 2,000万円). */
|
|
@@ -34,25 +38,54 @@ const unitOf = (number: string, words: readonly ScaleWord[]): number | undefined
|
|
|
34
38
|
return values.length === 0 ? undefined : Math.max(...values);
|
|
35
39
|
};
|
|
36
40
|
|
|
41
|
+
/** One written amount read as a value, with the larger parts written before it (1億 before 2,000万円). */
|
|
42
|
+
export const scaledAmountOf = (text: string, amount: WrittenAmount, words: readonly ScaleWord[]): ScaledAmount | undefined => {
|
|
43
|
+
const leading = amount.form.startsWith("after:") ? leadingParts(text, amount.offset, words) : "";
|
|
44
|
+
const written = `${leading}${amount.written}`;
|
|
45
|
+
const number = `${leading}${numberPart(amount)}`;
|
|
46
|
+
const value = amountValue(number, words);
|
|
47
|
+
if (value === undefined) return undefined;
|
|
48
|
+
return { offset: amount.offset - leading.length, written, currency: amount.currency, value, unit: unitOf(number, words) };
|
|
49
|
+
};
|
|
50
|
+
|
|
37
51
|
const scaledAmountsOf = (text: string, amounts: readonly WrittenAmount[], words: readonly ScaleWord[]): ScaledAmount[] =>
|
|
38
|
-
amounts.flatMap((amount) =>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
amounts.flatMap((amount) => scaledAmountOf(text, amount, words) ?? []);
|
|
53
|
+
|
|
54
|
+
/** Whether a marker of an estimate (約, 程度, about) stands right before or after the amount. */
|
|
55
|
+
const isApproximate = (text: string, amount: ScaledAmount, markers: Lexicon): boolean => {
|
|
56
|
+
const before = text
|
|
57
|
+
.slice(Math.max(0, amount.offset - MARKER_REACH), amount.offset)
|
|
58
|
+
.trimEnd()
|
|
59
|
+
.toLowerCase();
|
|
60
|
+
const after = text
|
|
61
|
+
.slice(amount.offset + amount.written.length, amount.offset + amount.written.length + MARKER_REACH)
|
|
62
|
+
.trimStart()
|
|
63
|
+
.toLowerCase();
|
|
64
|
+
return markers.some((entry) => (entry.position === "after" ? after.startsWith(entry.pattern.toLowerCase()) : before.endsWith(entry.pattern.toLowerCase())));
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** Whether the amount is on a table row (the text has the tables read back in, and only tables start a line with |). */
|
|
68
|
+
const onTableRow = (text: string, amount: ScaledAmount): boolean =>
|
|
69
|
+
text
|
|
70
|
+
.slice(text.lastIndexOf("\n", amount.offset) + 1)
|
|
71
|
+
.trimStart()
|
|
72
|
+
.startsWith("|");
|
|
46
73
|
|
|
47
74
|
export const amountScale: Detector = (doc): Finding[] => {
|
|
48
|
-
const text = doc
|
|
75
|
+
const text = proseAndTablesOf(doc);
|
|
49
76
|
const words = scaleWordsOf(doc);
|
|
50
|
-
const
|
|
77
|
+
const markers = doc.lexicons["approximate-marker"] ?? [];
|
|
78
|
+
const amounts = scaledAmountsOf(
|
|
51
79
|
text,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
80
|
+
amountsIn(
|
|
81
|
+
text,
|
|
82
|
+
formsOf(doc),
|
|
83
|
+
words.map((word) => word.word),
|
|
84
|
+
),
|
|
85
|
+
words,
|
|
86
|
+
).filter((amount) => !isApproximate(text, amount, markers));
|
|
87
|
+
const mixes = withoutRoundTextFigures(scaleMixes(amounts), amounts, (amount) => onTableRow(text, amount));
|
|
88
|
+
return mixes.map(({ odd, usual }) => ({
|
|
56
89
|
rule: "amount-scale-consistency",
|
|
57
90
|
severity: "info",
|
|
58
91
|
line: 0,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Detector, Finding, ProseDocument } from "../plugin.ts";
|
|
2
|
-
import { announcedCountMismatches, type CountWords } from "../announced-count.ts";
|
|
2
|
+
import { announcedCountMismatches, type CountMismatch, type CountWords } from "../announced-count.ts";
|
|
3
|
+
import { inlineCountMismatches, type MemberWords } from "../inline-count.ts";
|
|
3
4
|
import { quoteAt } from "./structure-tree.ts";
|
|
4
5
|
|
|
5
6
|
const patternsOf = (doc: ProseDocument, id: string, position?: "before" | "after"): string[] =>
|
|
@@ -13,13 +14,30 @@ const countWordsOf = (doc: ProseDocument): CountWords => ({
|
|
|
13
14
|
hedgesAfter: patternsOf(doc, "count-hedge", "after"),
|
|
14
15
|
});
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
const memberGroup = (doc: ProseDocument, group: string): string[] =>
|
|
18
|
+
(doc.lexicons["count-member"] ?? []).filter((entry) => entry.group === group).map((entry) => entry.pattern);
|
|
19
|
+
|
|
20
|
+
const memberWordsOf = (doc: ProseDocument): MemberWords => ({
|
|
21
|
+
separators: memberGroup(doc, "separator"),
|
|
22
|
+
joiners: memberGroup(doc, "joiner"),
|
|
23
|
+
open: memberGroup(doc, "open"),
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const findingOf = (doc: ProseDocument, mismatch: CountMismatch, variant?: string): Finding => ({
|
|
27
|
+
rule: "announced-count-mismatch",
|
|
28
|
+
severity: "warning",
|
|
29
|
+
line: 0,
|
|
30
|
+
column: 0,
|
|
31
|
+
quote: quoteAt(doc.source, mismatch.offset),
|
|
32
|
+
values: { phrase: mismatch.phrase, announced: mismatch.announced, listed: mismatch.listed, offset: mismatch.offset },
|
|
33
|
+
...(variant === undefined ? {} : { variant }),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
/** 予告の数(以下の3点、出席者(6名))と、すぐ下の箇条書きか、後ろに一行で並べた名前の数が違う。 */
|
|
37
|
+
export const announcedCount: Detector = (doc): Finding[] => {
|
|
38
|
+
const words = countWordsOf(doc);
|
|
39
|
+
return [
|
|
40
|
+
...announcedCountMismatches(doc.source, doc.lists, words).map((mismatch) => findingOf(doc, mismatch)),
|
|
41
|
+
...inlineCountMismatches(doc.prose ?? doc.source, words, memberWordsOf(doc)).map((mismatch) => findingOf(doc, mismatch, "inline")),
|
|
42
|
+
];
|
|
43
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Detector, Finding, Lexicon, Sentence, Span, Token } from "../plugin.ts";
|
|
1
|
+
import type { Detector, Finding, Lexicon, ProseDocument, Sentence, Span, Token } from "../plugin.ts";
|
|
2
2
|
import { quotedIn } from "../quoted-span.ts";
|
|
3
|
+
import { followsInlineCode } from "./code-before.ts";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* 比べる相手の無い比較(より良い結果、さらに高速に、The new engine is faster.)。何より良いのか、何より速いのかが書かれていない。
|
|
@@ -132,6 +133,10 @@ export const listsOf = (lexicon: Lexicon): ComparativeLists => ({
|
|
|
132
133
|
/** 鉤括弧の中の比較(「給与所得の確定申告がさらに簡単に!」ページ)は題や語を挙げたもので、書き手の比較ではない。 */
|
|
133
134
|
const insideSpan = (found: BareComparative, span: Span): boolean => found.first.span.start >= span.start && found.last.span.end <= span.end;
|
|
134
135
|
|
|
136
|
+
/** より right after inline code (`relaxed` より長い) is the particle "than" after a word the masking hid, not the adverb. */
|
|
137
|
+
const isThanAfterCode = (doc: ProseDocument, found: BareComparative): boolean =>
|
|
138
|
+
found.first.surface === "より" && followsInlineCode(doc.source, doc.prose, found.first.span.start);
|
|
139
|
+
|
|
135
140
|
export const bareComparative: Detector = (doc): Finding[] => {
|
|
136
141
|
const lists = listsOf(doc.lexicons["comparative-baseline"] ?? []);
|
|
137
142
|
return doc.sentences.flatMap((sentence, at) => {
|
|
@@ -139,7 +144,7 @@ export const bareComparative: Detector = (doc): Finding[] => {
|
|
|
139
144
|
if (sentence.embeddedLanguage !== undefined || nearby.some((near) => namesBaseline(near, lists.baselines))) return [];
|
|
140
145
|
const quoted = quotedIn(sentence);
|
|
141
146
|
return bareComparativesIn(sentence.tokens ?? [], lists)
|
|
142
|
-
.filter((found) => !quoted.some((span) => insideSpan(found, span)))
|
|
147
|
+
.filter((found) => !quoted.some((span) => insideSpan(found, span)) && !isThanAfterCode(doc, found))
|
|
143
148
|
.map((found) => ({
|
|
144
149
|
rule: "",
|
|
145
150
|
severity: "info",
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// A block quotation (`> …`) that a dash line gives to someone: `— Name` as the last line of its last paragraph, or as
|
|
2
|
+
// the paragraph right after it. A block quotation with no such line is not given to anyone, and a GitHub alert
|
|
3
|
+
// (`> [!NOTE]`) is the writer's own text. Only the quotation's own paragraphs are its words: code in it is not, and a
|
|
4
|
+
// quotation inside it is read on its own. Pure; reads the Markdown tree.
|
|
5
|
+
import { spanOf, type MarkdownNode } from "../markdown-node.ts";
|
|
6
|
+
import { lineStarts } from "../position.ts";
|
|
7
|
+
|
|
8
|
+
/** quote: the quotation's words without the `>` marks. passage: the quotation and its dash line as written, where a source would be. */
|
|
9
|
+
export type BlockQuotation = { readonly offset: number; readonly quote: string; readonly passage: string };
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* An em dash, a horizontal bar or an en dash, once or twice, then a name: not a lower-case word, which goes on a sentence
|
|
13
|
+
* (— and then it slipped). A single `-` opens a list item, and `--` opens an email signature.
|
|
14
|
+
*/
|
|
15
|
+
const DASH_LINE = /^[—―–]{1,2}[\t\p{Zs}]*(?!\p{Ll})\p{L}/u;
|
|
16
|
+
/** Longer than this, a line opening with a dash is a sentence, not a name and a work. */
|
|
17
|
+
const MAX_ATTRIBUTION_CHARS = 120;
|
|
18
|
+
const QUOTE_MARKS = /^(?:[ \t]*>[ \t]?)+/u;
|
|
19
|
+
const ALERT = /^\[![A-Za-z]+\]/u;
|
|
20
|
+
/** Japanese and Chinese text runs on across a line break; anything else is separated by a space. */
|
|
21
|
+
const CJK = String.raw`[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}、。「」『』()!?:;]`;
|
|
22
|
+
const CJK_END = new RegExp(`${CJK}$`, "u");
|
|
23
|
+
const CJK_START = new RegExp(`^${CJK}`, "u");
|
|
24
|
+
|
|
25
|
+
type Line = { readonly offset: number; readonly text: string };
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A line that ends like a sentence is the writer going on (――私はこの言葉を思い出す。, — Not yet. Give it ten minutes.),
|
|
29
|
+
* not a name and a work. A period after a lower-case word ends a sentence; one after an initial or "Inc." does not.
|
|
30
|
+
*/
|
|
31
|
+
const SENTENCE_END = /(?:[。!?!?]|(?:^|[\s\p{P}])\p{Ll}+\.)$/u;
|
|
32
|
+
|
|
33
|
+
const isDashLine = (text: string): boolean => DASH_LINE.test(text) && [...text].length <= MAX_ATTRIBUTION_CHARS && !SENTENCE_END.test(text);
|
|
34
|
+
|
|
35
|
+
/** Each non-blank line of a node without its `>` marks, at the place in source where its words start. */
|
|
36
|
+
const linesOf = (source: string, node: MarkdownNode): Line[] => {
|
|
37
|
+
const span = spanOf(node);
|
|
38
|
+
if (span === undefined) return [];
|
|
39
|
+
const text = source.slice(span.start, span.end);
|
|
40
|
+
const starts = lineStarts(text);
|
|
41
|
+
return text.split("\n").flatMap((raw, index) => {
|
|
42
|
+
const marks = QUOTE_MARKS.exec(raw)?.[0].length ?? 0;
|
|
43
|
+
const words = raw.slice(marks);
|
|
44
|
+
const indent = words.length - words.trimStart().length;
|
|
45
|
+
return words.trim() === "" ? [] : [{ offset: span.start + (starts[index] ?? 0) + marks + indent, text: words.trim() }];
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/** What goes between two lines: nothing where Japanese or Chinese runs on, a space otherwise. */
|
|
50
|
+
const separator = (before: string, after: string): string => (before === "" || CJK_END.test(before) || CJK_START.test(after) ? "" : " ");
|
|
51
|
+
|
|
52
|
+
/** Lines joined as the reader reads them. */
|
|
53
|
+
const joined = (lines: readonly Line[]): string => lines.map((line) => line.text).reduce((text, next) => `${text}${separator(text, next)}${next}`, "");
|
|
54
|
+
|
|
55
|
+
/** The dash line of a paragraph that is only that line. */
|
|
56
|
+
const dashParagraph = (source: string, node: MarkdownNode | undefined): string | undefined => {
|
|
57
|
+
const lines = node?.type === "paragraph" ? linesOf(source, node) : [];
|
|
58
|
+
const only = lines.length === 1 ? lines[0]?.text : undefined;
|
|
59
|
+
return only !== undefined && isDashLine(only) ? only : undefined;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const quotationOf = (source: string, quote: MarkdownNode, next: MarkdownNode | undefined): BlockQuotation | undefined => {
|
|
63
|
+
const children = quote.children ?? [];
|
|
64
|
+
const lines = children.filter((child) => child.type === "paragraph").flatMap((paragraph) => linesOf(source, paragraph));
|
|
65
|
+
const last = children.at(-1)?.type === "paragraph" ? lines.at(-1) : undefined;
|
|
66
|
+
if (ALERT.test(lines[0]?.text ?? "")) return undefined;
|
|
67
|
+
const inside = last !== undefined && isDashLine(last.text);
|
|
68
|
+
const attribution = inside ? last.text : dashParagraph(source, next);
|
|
69
|
+
const body = inside ? lines.slice(0, -1) : lines;
|
|
70
|
+
const first = body[0];
|
|
71
|
+
const span = spanOf(quote);
|
|
72
|
+
if (attribution === undefined || first === undefined || span === undefined) return undefined;
|
|
73
|
+
return { offset: first.offset, quote: joined(body), passage: `${source.slice(span.start, span.end)}\n${attribution}` };
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Every block quotation given to someone by a dash line. One that is not given to anyone is read for a quotation inside
|
|
78
|
+
* it. Walks with its own stack: Markdown nests without limit.
|
|
79
|
+
*/
|
|
80
|
+
export const blockQuotations = (root: MarkdownNode, source: string): BlockQuotation[] => {
|
|
81
|
+
const found: BlockQuotation[] = [];
|
|
82
|
+
const pending: MarkdownNode[] = [root];
|
|
83
|
+
for (let node = pending.pop(); node !== undefined; node = pending.pop()) {
|
|
84
|
+
const children = node.children ?? [];
|
|
85
|
+
const given = children.map((child, index) => (child.type === "blockquote" ? quotationOf(source, child, children[index + 1]) : undefined));
|
|
86
|
+
given.forEach((quotation) => {
|
|
87
|
+
if (quotation !== undefined) found.push(quotation);
|
|
88
|
+
});
|
|
89
|
+
children
|
|
90
|
+
.filter((_child, index) => given[index] === undefined)
|
|
91
|
+
.toReversed()
|
|
92
|
+
.forEach((child) => pending.push(child));
|
|
93
|
+
}
|
|
94
|
+
return found.toSorted((left, right) => left.offset - right.offset);
|
|
95
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 丸括弧の閉じを、開きを持たない印として読むかどうか。印に使うのは丸括弧だけなので、呼ぶ側が丸括弧の閉じに限る。
|
|
3
|
+
* text は節の文字列で、offset は閉じの位置。
|
|
4
|
+
*/
|
|
5
|
+
import { escapeRegExp } from "../orthography.ts";
|
|
6
|
+
|
|
7
|
+
/** 行の頭か空白・句読点の後ろに書いた、三文字までの印(「1)」「a)」「事例)」「※)」)。顔文字の「:)」も同じ形。 */
|
|
8
|
+
const LABEL_TOKEN_BEFORE = /(?:^|[\s、。,;::])[^\s()()[\][]「」『』]{1,3}[ \t\u3000]?$/u;
|
|
9
|
+
|
|
10
|
+
/** 数の後ろの閉じ(「事例2)及び事例3)」)。 */
|
|
11
|
+
const NUMBER_BEFORE = /[\d0-9]$/u;
|
|
12
|
+
|
|
13
|
+
/** 句読点の後ろの、字の後ろに数を付けた印(「以下、事例5)」)。group 1 は数の前の字(「事例」)。 */
|
|
14
|
+
const NUMBERED_LABEL_BEFORE = /[、。,;::] ?([^\s\d0-9()()[\][]「」『』、。,;::]{1,3})[\d0-9]{1,3}$/u;
|
|
15
|
+
|
|
16
|
+
const ROUND_OPEN = new Set(["(", "("]);
|
|
17
|
+
const ROUND_CLOSE = new Set([")", ")"]);
|
|
18
|
+
|
|
19
|
+
const lineBefore = (text: string, offset: number): string => text.slice(text.lastIndexOf("\n", offset - 1) + 1, offset);
|
|
20
|
+
|
|
21
|
+
const isLabelToken = (text: string, offset: number): boolean => LABEL_TOKEN_BEFORE.test(lineBefore(text, offset));
|
|
22
|
+
|
|
23
|
+
/** 開いている丸括弧が無いときの閉じが、印の形をしているか。 */
|
|
24
|
+
export const isLabelClose = (text: string, offset: number): boolean => isLabelToken(text, offset) || NUMBER_BEFORE.test(lineBefore(text, offset));
|
|
25
|
+
|
|
26
|
+
const restOfLine = (text: string, offset: number): string => {
|
|
27
|
+
const end = text.indexOf("\n", offset);
|
|
28
|
+
return text.slice(offset + 1, end === -1 ? text.length : end);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** offset の後ろ、同じ行のうちの、印の形でない閉じのうち、それより前に開いた丸括弧を閉じるものの数。間の丸括弧の組は数えない。 */
|
|
32
|
+
const outerClosesLaterOnLine = (text: string, offset: number): number => {
|
|
33
|
+
const depth = { inner: 0, outer: 0 };
|
|
34
|
+
restOfLine(text, offset)
|
|
35
|
+
.split("")
|
|
36
|
+
.forEach((mark, index) => {
|
|
37
|
+
if (ROUND_OPEN.has(mark)) depth.inner += 1;
|
|
38
|
+
if (!ROUND_CLOSE.has(mark)) return;
|
|
39
|
+
if (depth.inner > 0) depth.inner -= 1;
|
|
40
|
+
else if (!isLabelClose(text, offset + 1 + index)) depth.outer += 1;
|
|
41
|
+
});
|
|
42
|
+
return depth.outer;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/** 節のどこかの行の頭(箇条の印の後ろも含む)に、同じ字で始まる番号の印(「- 事例1)」)を書いているか。 */
|
|
46
|
+
const usedAsLineLabel = (text: string, stem: string): boolean =>
|
|
47
|
+
new RegExp(`^[ \\t\u3000]*(?:[-*+・][ \\t\u3000]*)?${escapeRegExp(stem)}[\\d0-9]{1,3}[))]`, "mu").test(text);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 開いた丸括弧の中の印(「(…以下、事例5)まで同じ。)」の「事例5)」)。三つがそろうときだけ印と読む: 句読点の後ろの、字に数を
|
|
51
|
+
* 付けた形であること。同じ字の番号の印を、節のどこかの行の頭で使っていること。同じ行の後ろの閉じだけで、いま開いている
|
|
52
|
+
* 丸括弧(openRound 個)をすべて閉じられること。どれかが欠ければ、この閉じで括弧を閉じる(「(項目 1)を確認した)」は
|
|
53
|
+
* 余分な閉じを指す)。
|
|
54
|
+
*/
|
|
55
|
+
export const isLabelInAside = (text: string, offset: number, openRound: number): boolean => {
|
|
56
|
+
const stem = NUMBERED_LABEL_BEFORE.exec(lineBefore(text, offset))?.[1];
|
|
57
|
+
return stem !== undefined && usedAsLineLabel(text, stem) && outerClosesLaterOnLine(text, offset) >= openRound;
|
|
58
|
+
};
|
|
@@ -45,17 +45,32 @@ export const namesEntry = (entryKey: string, citedKey: string): boolean => {
|
|
|
45
45
|
return !LATIN.test(citedKey) && [...surname].length >= MIN_PREFIX_SURNAME && entryKey.startsWith(citedKey);
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* namesEntry, and also a one-character Japanese surname (森, 林) against the full name it heads (森達也) when no other entry
|
|
50
|
+
* of that year starts with it: the list then leaves no other work it could name, where 林 beside 林田太郎 and 林正 does.
|
|
51
|
+
*/
|
|
52
|
+
export const namesEntryAmong =
|
|
53
|
+
(entryKeys: readonly string[]) =>
|
|
54
|
+
(entryKey: string, citedKey: string): boolean => {
|
|
55
|
+
if (namesEntry(entryKey, citedKey)) return true;
|
|
56
|
+
if (LATIN.test(citedKey) || !entryKey.startsWith(citedKey)) return false;
|
|
57
|
+
return entryKeys.filter((key) => key.startsWith(citedKey)).length === 1;
|
|
58
|
+
};
|
|
59
|
+
|
|
48
60
|
const numberedSide = (entries: readonly ReferenceEntry[], marks: readonly CitationMark[]): Side => ({
|
|
49
61
|
entries: entries.flatMap((entry) => (entry.number === undefined ? [] : [{ key: String(entry.number), start: entry.start }])),
|
|
50
62
|
citations: marks.filter((mark) => NUMBERED_STYLES.has(mark.style)).map((mark) => ({ mark, keys: mark.numbers.map(String) })),
|
|
51
63
|
names: (entryKey, citedKey) => entryKey === citedKey,
|
|
52
64
|
});
|
|
53
65
|
|
|
54
|
-
const authorYearSide = (entries: readonly ReferenceEntry[], marks: readonly CitationMark[]): Side =>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
})
|
|
66
|
+
const authorYearSide = (entries: readonly ReferenceEntry[], marks: readonly CitationMark[]): Side => {
|
|
67
|
+
const keyed = entries.flatMap((entry) => (entry.authorYear === undefined ? [] : [{ key: keyOf(entry.authorYear), start: entry.start }]));
|
|
68
|
+
return {
|
|
69
|
+
entries: keyed,
|
|
70
|
+
citations: marks.filter((mark) => mark.style === "author-year").map((mark) => ({ mark, keys: mark.authorYears.map(keyOf) })),
|
|
71
|
+
names: namesEntryAmong(keyed.map((entry) => entry.key)),
|
|
72
|
+
};
|
|
73
|
+
};
|
|
59
74
|
|
|
60
75
|
export const sideSlips = (side: Side): CitationSlip[] => {
|
|
61
76
|
if (side.entries.length < MIN_ENTRIES || side.citations.length === 0) return [];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Whether inline code stands right before a place in the text. Code is masked to blanks before the text is read, so a word
|
|
2
|
+
// after `explain` looks like the head of a sentence, and より after `relaxed` looks like the adverb. Pure.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Whether the last mark before offset on the same line, past spaces, closes inline code (`relaxed` より). prose is the
|
|
6
|
+
* source with code masked; a backtick it keeps (\` escaped, or one left unclosed) is text, not code.
|
|
7
|
+
*/
|
|
8
|
+
export const followsInlineCode = (source: string, prose: string | undefined, offset: number): boolean => {
|
|
9
|
+
if (prose === undefined) return false;
|
|
10
|
+
const lineStart = source.lastIndexOf("\n", offset - 1) + 1;
|
|
11
|
+
const before = source.slice(lineStart, Math.max(lineStart, offset)).trimEnd();
|
|
12
|
+
const mark = lineStart + before.length - 1;
|
|
13
|
+
return before.endsWith("`") && prose.charAt(mark) !== "`";
|
|
14
|
+
};
|
|
@@ -11,8 +11,15 @@ export type LoneConnective = { readonly offset: number; readonly written: string
|
|
|
11
11
|
|
|
12
12
|
const CONJUNCTION = "CCONJ";
|
|
13
13
|
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The word lists the detector reads: the connectives, the phrases that hold one's letters without being one (歯並びに), and
|
|
16
|
+
* the ends of a condition clause (ときは、): an inner-level word is looked for in the outer-level word's own clause only.
|
|
17
|
+
*/
|
|
18
|
+
export type ConnectiveLists = {
|
|
19
|
+
readonly connectives: readonly LexiconEntry[];
|
|
20
|
+
readonly lookalikes: readonly LexiconEntry[];
|
|
21
|
+
readonly clauseEnds: readonly LexiconEntry[];
|
|
22
|
+
};
|
|
16
23
|
|
|
17
24
|
/**
|
|
18
25
|
* The tagger does not always tell a connective from a noun and a particle: it reads 申請書並びに as 並び + に and
|
|
@@ -62,30 +69,51 @@ const standsAsConnective = (reading: Reading, span: Span): boolean => {
|
|
|
62
69
|
return tagged || joinsNouns(previous, reading.byStart.get(span.end));
|
|
63
70
|
};
|
|
64
71
|
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
/**
|
|
73
|
+
* The clause of the text the letter at `at` is in: from the end of the last clause end before it (ときは、) to the end of
|
|
74
|
+
* the first one after it. A list in a condition clause and one in the main clause are not levels of one list. A clause
|
|
75
|
+
* end with a connective right after it (…ときは、又は…場合には) joins two conditions, and does not cut.
|
|
76
|
+
*/
|
|
77
|
+
export const clauseAround = (text: string, at: number, clauseEnds: readonly LexiconEntry[], connectives: readonly LexiconEntry[] = []): string => {
|
|
78
|
+
const joinsNext = (end: number): boolean => connectives.some(({ pattern }) => pattern !== "" && text.startsWith(pattern, end));
|
|
79
|
+
const ends = clauseEnds
|
|
80
|
+
.filter(({ pattern }) => pattern !== "")
|
|
81
|
+
.flatMap(({ pattern }) => placesOf(text, pattern).map((start) => start + pattern.length))
|
|
82
|
+
.filter((end) => !joinsNext(end));
|
|
83
|
+
const start = Math.max(0, ...ends.filter((end) => end <= at));
|
|
84
|
+
const end = Math.min(text.length, ...ends.filter((end) => end > at));
|
|
85
|
+
return text.slice(start, end);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const hasInnerLevel = (clause: string, outer: LexiconEntry, connectives: readonly LexiconEntry[]): boolean =>
|
|
89
|
+
connectives.some((entry) => entry.instead_of === outer.pattern && clause.includes(entry.pattern));
|
|
67
90
|
|
|
68
|
-
/** Where one outer-level word stands as a connective in the sentence. */
|
|
69
|
-
const connectiveSpans = (sentence: Sentence, outer: LexiconEntry, reading: Reading): Span[] =>
|
|
91
|
+
/** Where one outer-level word stands as a connective in the sentence with no inner-level word in its clause. */
|
|
92
|
+
const connectiveSpans = (sentence: Sentence, outer: LexiconEntry, reading: Reading, lists: ConnectiveLists): Span[] =>
|
|
70
93
|
placesOf(sentence.text, outer.pattern)
|
|
71
94
|
.filter((at) => reading.hidden[at] !== true)
|
|
95
|
+
.filter((at) => !hasInnerLevel(clauseAround(sentence.text, at, lists.clauseEnds, lists.connectives), outer, lists.connectives))
|
|
72
96
|
.map((at) => ({ start: sentence.span.start + at, end: sentence.span.start + at + outer.pattern.length }))
|
|
73
97
|
.filter((span) => standsAsConnective(reading, span));
|
|
74
98
|
|
|
75
99
|
/** The outer-level connectives of a sentence that stand over no inner level. */
|
|
76
100
|
export const loneConnectivesIn = (sentence: Sentence, lists: ConnectiveLists): LoneConnective[] => {
|
|
77
|
-
const lone = lists.connectives.filter(
|
|
78
|
-
(entry) => entry.rewrite !== undefined && sentence.text.includes(entry.pattern) && !hasInnerLevel(sentence, entry, lists.connectives),
|
|
79
|
-
);
|
|
101
|
+
const lone = lists.connectives.filter((entry) => entry.rewrite !== undefined && sentence.text.includes(entry.pattern));
|
|
80
102
|
if (lone.length === 0) return [];
|
|
81
103
|
const reading = readingOf(sentence, lists.lookalikes);
|
|
82
104
|
return lone
|
|
83
|
-
.flatMap((entry) =>
|
|
105
|
+
.flatMap((entry) =>
|
|
106
|
+
connectiveSpans(sentence, entry, reading, lists).map((span) => ({ offset: span.start, written: entry.pattern, usual: entry.rewrite ?? "" })),
|
|
107
|
+
)
|
|
84
108
|
.sort((a, b) => a.offset - b.offset);
|
|
85
109
|
};
|
|
86
110
|
|
|
87
111
|
export const connectiveHierarchy: Detector = (doc, options): Finding[] => {
|
|
88
|
-
const lists = {
|
|
112
|
+
const lists = {
|
|
113
|
+
connectives: options.lexicon ?? [],
|
|
114
|
+
lookalikes: doc.lexicons["connective-lookalike"] ?? [],
|
|
115
|
+
clauseEnds: doc.lexicons["connective-clause-end"] ?? [],
|
|
116
|
+
};
|
|
89
117
|
return doc.sentences.flatMap((sentence) =>
|
|
90
118
|
loneConnectivesIn(sentence, lists).map((lone) => ({
|
|
91
119
|
rule: "",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Detector, Finding, ProseDocument } from "../plugin.ts";
|
|
2
2
|
import { escapeRegExp } from "../orthography.ts";
|
|
3
3
|
import { formMinority } from "./form-minority.ts";
|
|
4
|
+
import { proseAndTablesOf } from "../table-text.ts";
|
|
4
5
|
import { quoteAround } from "./quote-around.ts";
|
|
5
6
|
|
|
6
7
|
// 一つの文書で、同じ通貨の金額を二通りに書いた所(1,000円 と ¥1,000、$20 と 20 dollars)。どちらが正しいかは決めず、少ないほうを指す。
|
|
@@ -77,7 +78,7 @@ export const formsOf = (doc: ProseDocument): CurrencyForm[] =>
|
|
|
77
78
|
);
|
|
78
79
|
|
|
79
80
|
export const currencyNotation: Detector = (doc, options): Finding[] => {
|
|
80
|
-
const text = doc
|
|
81
|
+
const text = proseAndTablesOf(doc);
|
|
81
82
|
const multipliers = (doc.lexicons["amount-multiplier"] ?? []).map((entry) => entry.pattern);
|
|
82
83
|
return currencyMinorities(amountsIn(text, formsOf(doc), multipliers), options.limit).map(({ odd, usual, count, of }) => ({
|
|
83
84
|
rule: "",
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Detector, Finding, ProseDocument } from "../plugin.ts";
|
|
2
|
+
import { inDocumentOrder } from "../structure/issues.ts";
|
|
3
|
+
import { datesOutsidePeriod, type OutsideWords } from "../structure/date-outside-period.ts";
|
|
4
|
+
import { rangeFrameOf } from "../structure/date-range.ts";
|
|
5
|
+
import { quoteAt } from "./structure-tree.ts";
|
|
6
|
+
|
|
7
|
+
const patternsOf = (doc: ProseDocument, lexicon: string): string[] => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern);
|
|
8
|
+
|
|
9
|
+
/** 期間の語、期間の外に置く語、範囲の記号(range-connector、range-opener、range-frame の間の語)、月と曜日の名は語彙表から取る。 */
|
|
10
|
+
const wordsOf = (doc: ProseDocument): OutsideWords => ({
|
|
11
|
+
labels: patternsOf(doc, "period-label"),
|
|
12
|
+
asides: patternsOf(doc, "period-aside"),
|
|
13
|
+
connectors: [
|
|
14
|
+
...patternsOf(doc, "range-connector"),
|
|
15
|
+
...patternsOf(doc, "range-opener"),
|
|
16
|
+
...patternsOf(doc, "range-frame").flatMap((pattern) => rangeFrameOf(pattern)?.joint ?? []),
|
|
17
|
+
],
|
|
18
|
+
months: patternsOf(doc, "month-name"),
|
|
19
|
+
weekdays: patternsOf(doc, "weekday"),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
/** 書いた期間(旅行期間:…)の外の日付を持つ、その後ろの日程の項目、表の行、見出し。 */
|
|
23
|
+
export const dateOutsidePeriod: Detector = (doc): Finding[] => {
|
|
24
|
+
if (doc.structure === undefined) return [];
|
|
25
|
+
const dates = inDocumentOrder(doc.structure).flatMap((node) =>
|
|
26
|
+
node.kind === "date" ? [{ offset: node.span.start, end: node.span.end, value: String(node.attrs["value"]) }] : [],
|
|
27
|
+
);
|
|
28
|
+
const headings = doc.markup?.headings ?? [];
|
|
29
|
+
const sentences = doc.sentences.map((sentence) => sentence.span);
|
|
30
|
+
return datesOutsidePeriod(doc.source, dates, headings, sentences, wordsOf(doc)).map((issue) => ({
|
|
31
|
+
rule: "date-outside-period",
|
|
32
|
+
severity: "warning",
|
|
33
|
+
line: 0,
|
|
34
|
+
column: 0,
|
|
35
|
+
quote: quoteAt(doc.source, issue.offset),
|
|
36
|
+
values: { ...issue.values, offset: issue.offset },
|
|
37
|
+
}));
|
|
38
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// default-value-mismatch: one parameter's default stated two ways on a page (default-values.ts). The header words of a
|
|
2
|
+
// default column and the phrases that state a default in prose come from the default-header and default-phrase lexicons.
|
|
3
|
+
import { quoteAt } from "./structure-tree.ts";
|
|
4
|
+
import { defaultSlips } from "../default-values.ts";
|
|
5
|
+
import type { Detector, Finding, ProseDocument } from "../plugin.ts";
|
|
6
|
+
|
|
7
|
+
const lowercase = (doc: ProseDocument, lexicon: string): string[] => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern.toLowerCase());
|
|
8
|
+
|
|
9
|
+
export const defaultValues: Detector = (doc): Finding[] =>
|
|
10
|
+
defaultSlips(doc.source, { headers: lowercase(doc, "default-header"), phrases: lowercase(doc, "default-phrase") }).map((slip) => ({
|
|
11
|
+
rule: "default-value-mismatch",
|
|
12
|
+
severity: "warning",
|
|
13
|
+
line: 0,
|
|
14
|
+
column: 0,
|
|
15
|
+
quote: quoteAt(doc.source, slip.offset),
|
|
16
|
+
values: { name: slip.name, value: slip.value, expected: slip.expected, offset: slip.offset },
|
|
17
|
+
}));
|