chaffjs 0.19.0 → 0.20.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/README.md +86 -8
- package/dist/baseline.d.ts +11 -2
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +13 -4
- package/dist/baseline.js.map +1 -1
- package/dist/check-source.d.ts +32 -0
- package/dist/check-source.d.ts.map +1 -0
- package/dist/check-source.js +50 -0
- package/dist/check-source.js.map +1 -0
- package/dist/checks.js +3 -3
- package/dist/checks.js.map +1 -1
- package/dist/cli-args.d.ts +4 -0
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +6 -1
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-text.d.ts +3 -2
- package/dist/cli-text.d.ts.map +1 -1
- package/dist/cli-text.js +21 -4
- package/dist/cli-text.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +41 -44
- package/dist/cli.js.map +1 -1
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.d.ts.map +1 -1
- package/dist/commands/compare.js +7 -5
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/eval.js +2 -2
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/fix-plan.d.ts +1 -1
- package/dist/commands/fix-plan.d.ts.map +1 -1
- package/dist/commands/fix-plan.js +3 -1
- package/dist/commands/fix-plan.js.map +1 -1
- package/dist/commands/grade-baseline.d.ts +15 -0
- package/dist/commands/grade-baseline.d.ts.map +1 -0
- package/dist/commands/grade-baseline.js +38 -0
- package/dist/commands/grade-baseline.js.map +1 -0
- package/dist/commands/grade.d.ts +19 -0
- package/dist/commands/grade.d.ts.map +1 -0
- package/dist/commands/grade.js +160 -0
- package/dist/commands/grade.js.map +1 -0
- package/dist/commands/outline.d.ts +2 -2
- package/dist/commands/outline.d.ts.map +1 -1
- package/dist/commands/outline.js +4 -3
- package/dist/commands/outline.js.map +1 -1
- package/dist/commands/read-document.d.ts +7 -4
- package/dist/commands/read-document.d.ts.map +1 -1
- package/dist/commands/read-document.js +9 -8
- package/dist/commands/read-document.js.map +1 -1
- package/dist/commands/suppressions.d.ts +2 -2
- package/dist/commands/suppressions.d.ts.map +1 -1
- package/dist/commands/suppressions.js +2 -2
- package/dist/commands/suppressions.js.map +1 -1
- package/dist/commands/test.js +2 -2
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/tree.d.ts +2 -0
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +19 -12
- package/dist/commands/tree.js.map +1 -1
- package/dist/compare/distinct.d.ts.map +1 -1
- package/dist/compare/distinct.js +8 -2
- package/dist/compare/distinct.js.map +1 -1
- package/dist/compare/proper-nouns.d.ts +2 -0
- package/dist/compare/proper-nouns.d.ts.map +1 -1
- package/dist/compare/proper-nouns.js +9 -6
- package/dist/compare/proper-nouns.js.map +1 -1
- package/dist/config/load.d.ts +4 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +4 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/yaml-file.d.ts +22 -0
- package/dist/config/yaml-file.d.ts.map +1 -0
- package/dist/config/yaml-file.js +59 -0
- package/dist/config/yaml-file.js.map +1 -0
- package/dist/correction-edit.d.ts +20 -0
- package/dist/correction-edit.d.ts.map +1 -0
- package/dist/correction-edit.js +34 -0
- package/dist/correction-edit.js.map +1 -0
- package/dist/cross-run.d.ts +15 -0
- package/dist/cross-run.d.ts.map +1 -0
- package/dist/cross-run.js +73 -0
- package/dist/cross-run.js.map +1 -0
- package/dist/cross-variants.d.ts +26 -0
- package/dist/cross-variants.d.ts.map +1 -0
- package/dist/cross-variants.js +40 -0
- package/dist/cross-variants.js.map +1 -0
- package/dist/cross-votes.d.ts +17 -0
- package/dist/cross-votes.d.ts.map +1 -0
- package/dist/cross-votes.js +24 -0
- package/dist/cross-votes.js.map +1 -0
- package/dist/date-format.d.ts +33 -0
- package/dist/date-format.d.ts.map +1 -0
- package/dist/date-format.js +87 -0
- package/dist/date-format.js.map +1 -0
- package/dist/derived/date-arithmetic.d.ts +22 -0
- package/dist/derived/date-arithmetic.d.ts.map +1 -0
- package/dist/derived/date-arithmetic.js +48 -0
- package/dist/derived/date-arithmetic.js.map +1 -0
- package/dist/derived/durations.d.ts +25 -0
- package/dist/derived/durations.d.ts.map +1 -0
- package/dist/derived/durations.js +38 -0
- package/dist/derived/durations.js.map +1 -0
- package/dist/derived/elapsed.d.ts +41 -0
- package/dist/derived/elapsed.d.ts.map +1 -0
- package/dist/derived/elapsed.js +66 -0
- package/dist/derived/elapsed.js.map +1 -0
- package/dist/derived/relative-dates.d.ts +35 -0
- package/dist/derived/relative-dates.d.ts.map +1 -0
- package/dist/derived/relative-dates.js +65 -0
- package/dist/derived/relative-dates.js.map +1 -0
- package/dist/derived/sentence-buckets.d.ts +4 -0
- package/dist/derived/sentence-buckets.d.ts.map +1 -0
- package/dist/derived/sentence-buckets.js +34 -0
- package/dist/derived/sentence-buckets.js.map +1 -0
- package/dist/detectors/absolute-exception.d.ts +4 -0
- package/dist/detectors/absolute-exception.d.ts.map +1 -0
- package/dist/detectors/absolute-exception.js +86 -0
- package/dist/detectors/absolute-exception.js.map +1 -0
- package/dist/detectors/abstract-length.d.ts +24 -0
- package/dist/detectors/abstract-length.d.ts.map +1 -0
- package/dist/detectors/abstract-length.js +108 -0
- package/dist/detectors/abstract-length.js.map +1 -0
- package/dist/detectors/ai-phrasing.d.ts +11 -2
- package/dist/detectors/ai-phrasing.d.ts.map +1 -1
- package/dist/detectors/ai-phrasing.js +9 -13
- package/dist/detectors/ai-phrasing.js.map +1 -1
- package/dist/detectors/ai-structure.d.ts +7 -0
- package/dist/detectors/ai-structure.d.ts.map +1 -0
- package/dist/detectors/ai-structure.js +26 -0
- package/dist/detectors/ai-structure.js.map +1 -0
- package/dist/detectors/blank-structure.d.ts +13 -0
- package/dist/detectors/blank-structure.d.ts.map +1 -0
- package/dist/detectors/blank-structure.js +124 -0
- package/dist/detectors/blank-structure.js.map +1 -0
- package/dist/detectors/chat-citation.d.ts +18 -0
- package/dist/detectors/chat-citation.d.ts.map +1 -0
- package/dist/detectors/chat-citation.js +41 -0
- package/dist/detectors/chat-citation.js.map +1 -0
- package/dist/detectors/citation-entry.d.ts +32 -0
- package/dist/detectors/citation-entry.d.ts.map +1 -0
- package/dist/detectors/citation-entry.js +62 -0
- package/dist/detectors/citation-entry.js.map +1 -0
- package/dist/detectors/citation-marks.d.ts +43 -0
- package/dist/detectors/citation-marks.d.ts.map +1 -0
- package/dist/detectors/citation-marks.js +151 -0
- package/dist/detectors/citation-marks.js.map +1 -0
- package/dist/detectors/citation-style.d.ts +16 -0
- package/dist/detectors/citation-style.d.ts.map +1 -0
- package/dist/detectors/citation-style.js +39 -0
- package/dist/detectors/citation-style.js.map +1 -0
- package/dist/detectors/cross-link.d.ts +15 -0
- package/dist/detectors/cross-link.d.ts.map +1 -0
- package/dist/detectors/cross-link.js +74 -0
- package/dist/detectors/cross-link.js.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-broken-link.d.ts +3 -0
- package/dist/detectors/cross-registry/cross-doc-broken-link.d.ts.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-broken-link.js +3 -0
- package/dist/detectors/cross-registry/cross-doc-broken-link.js.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-term-variant.d.ts +3 -0
- package/dist/detectors/cross-registry/cross-doc-term-variant.d.ts.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-term-variant.js +3 -0
- package/dist/detectors/cross-registry/cross-doc-term-variant.js.map +1 -0
- package/dist/detectors/cross-variant.d.ts +4 -0
- package/dist/detectors/cross-variant.d.ts.map +1 -0
- package/dist/detectors/cross-variant.js +62 -0
- package/dist/detectors/cross-variant.js.map +1 -0
- package/dist/detectors/date-format.d.ts +3 -0
- package/dist/detectors/date-format.d.ts.map +1 -0
- package/dist/detectors/date-format.js +26 -0
- package/dist/detectors/date-format.js.map +1 -0
- package/dist/detectors/date-year.d.ts +23 -0
- package/dist/detectors/date-year.d.ts.map +1 -0
- package/dist/detectors/date-year.js +71 -0
- package/dist/detectors/date-year.js.map +1 -0
- package/dist/detectors/derived-numbers.d.ts +6 -0
- package/dist/detectors/derived-numbers.d.ts.map +1 -0
- package/dist/detectors/derived-numbers.js +155 -0
- package/dist/detectors/derived-numbers.js.map +1 -0
- package/dist/detectors/document-shape.d.ts +18 -0
- package/dist/detectors/document-shape.d.ts.map +1 -0
- package/dist/detectors/document-shape.js +94 -0
- package/dist/detectors/document-shape.js.map +1 -0
- package/dist/detectors/emoji-heading.d.ts +7 -0
- package/dist/detectors/emoji-heading.d.ts.map +1 -0
- package/dist/detectors/emoji-heading.js +14 -0
- package/dist/detectors/emoji-heading.js.map +1 -0
- package/dist/detectors/fact-consistency.d.ts +8 -0
- package/dist/detectors/fact-consistency.d.ts.map +1 -0
- package/dist/detectors/fact-consistency.js +44 -0
- package/dist/detectors/fact-consistency.js.map +1 -0
- package/dist/detectors/figure-order.d.ts +28 -0
- package/dist/detectors/figure-order.d.ts.map +1 -0
- package/dist/detectors/figure-order.js +65 -0
- package/dist/detectors/figure-order.js.map +1 -0
- package/dist/detectors/heading-numbering.d.ts +7 -0
- package/dist/detectors/heading-numbering.d.ts.map +1 -0
- package/dist/detectors/heading-numbering.js +34 -0
- package/dist/detectors/heading-numbering.js.map +1 -0
- package/dist/detectors/index.d.ts +3 -1
- package/dist/detectors/index.d.ts.map +1 -1
- package/dist/detectors/index.js +9 -140
- package/dist/detectors/index.js.map +1 -1
- package/dist/detectors/invisible-character.js +3 -3
- package/dist/detectors/invisible-character.js.map +1 -1
- package/dist/detectors/katakana-density.d.ts +11 -0
- package/dist/detectors/katakana-density.d.ts.map +1 -0
- package/dist/detectors/katakana-density.js +47 -0
- package/dist/detectors/katakana-density.js.map +1 -0
- package/dist/detectors/known-correction.d.ts +7 -0
- package/dist/detectors/known-correction.d.ts.map +1 -0
- package/dist/detectors/known-correction.js +63 -0
- package/dist/detectors/known-correction.js.map +1 -0
- package/dist/detectors/lexicon-match.js +1 -1
- package/dist/detectors/lexicon-match.js.map +1 -1
- package/dist/detectors/lexicon.d.ts +3 -0
- package/dist/detectors/lexicon.d.ts.map +1 -1
- package/dist/detectors/lexicon.js +3 -0
- package/dist/detectors/lexicon.js.map +1 -1
- package/dist/detectors/list-parallel.d.ts +12 -0
- package/dist/detectors/list-parallel.d.ts.map +1 -0
- package/dist/detectors/list-parallel.js +135 -0
- package/dist/detectors/list-parallel.js.map +1 -0
- package/dist/detectors/long-vowel.d.ts +17 -1
- package/dist/detectors/long-vowel.d.ts.map +1 -1
- package/dist/detectors/long-vowel.js +4 -4
- package/dist/detectors/long-vowel.js.map +1 -1
- package/dist/detectors/misuse-match.d.ts +7 -0
- package/dist/detectors/misuse-match.d.ts.map +1 -0
- package/dist/detectors/misuse-match.js +23 -0
- package/dist/detectors/misuse-match.js.map +1 -0
- package/dist/detectors/modal-conflict.d.ts +3 -1
- package/dist/detectors/modal-conflict.d.ts.map +1 -1
- package/dist/detectors/modal-conflict.js +1 -1
- package/dist/detectors/modal-conflict.js.map +1 -1
- package/dist/detectors/next-word.d.ts +22 -0
- package/dist/detectors/next-word.d.ts.map +1 -0
- package/dist/detectors/next-word.js +125 -0
- package/dist/detectors/next-word.js.map +1 -0
- package/dist/detectors/number-style.d.ts +31 -0
- package/dist/detectors/number-style.d.ts.map +1 -0
- package/dist/detectors/number-style.js +182 -0
- package/dist/detectors/number-style.js.map +1 -0
- package/dist/detectors/number-unit.d.ts +35 -0
- package/dist/detectors/number-unit.d.ts.map +1 -0
- package/dist/detectors/number-unit.js +121 -0
- package/dist/detectors/number-unit.js.map +1 -0
- package/dist/detectors/orthographic-variant.d.ts +8 -0
- package/dist/detectors/orthographic-variant.d.ts.map +1 -0
- package/dist/detectors/orthographic-variant.js +130 -0
- package/dist/detectors/orthographic-variant.js.map +1 -0
- package/dist/detectors/paragraph-restatement.d.ts +11 -0
- package/dist/detectors/paragraph-restatement.d.ts.map +1 -0
- package/dist/detectors/paragraph-restatement.js +61 -0
- package/dist/detectors/paragraph-restatement.js.map +1 -0
- package/dist/detectors/paragraph-run.d.ts +7 -0
- package/dist/detectors/paragraph-run.d.ts.map +1 -0
- package/dist/detectors/paragraph-run.js +25 -0
- package/dist/detectors/paragraph-run.js.map +1 -0
- package/dist/detectors/person-consistency.d.ts +7 -0
- package/dist/detectors/person-consistency.d.ts.map +1 -0
- package/dist/detectors/person-consistency.js +25 -0
- package/dist/detectors/person-consistency.js.map +1 -0
- package/dist/detectors/placeholder-text.d.ts +1 -1
- package/dist/detectors/placeholder-text.d.ts.map +1 -1
- package/dist/detectors/placeholder-text.js +54 -4
- package/dist/detectors/placeholder-text.js.map +1 -1
- package/dist/detectors/reference-text.d.ts +6 -0
- package/dist/detectors/reference-text.d.ts.map +1 -0
- package/dist/detectors/reference-text.js +38 -0
- package/dist/detectors/reference-text.js.map +1 -0
- package/dist/detectors/registry/absolute-exception.d.ts +3 -0
- package/dist/detectors/registry/absolute-exception.d.ts.map +1 -0
- package/dist/detectors/registry/absolute-exception.js +3 -0
- package/dist/detectors/registry/absolute-exception.js.map +1 -0
- package/dist/detectors/registry/abstract-length.d.ts +3 -0
- package/dist/detectors/registry/abstract-length.d.ts.map +1 -0
- package/dist/detectors/registry/abstract-length.js +3 -0
- package/dist/detectors/registry/abstract-length.js.map +1 -0
- package/dist/detectors/registry/acronym-expansion-conflict.d.ts +3 -0
- package/dist/detectors/registry/acronym-expansion-conflict.d.ts.map +1 -0
- package/dist/detectors/registry/acronym-expansion-conflict.js +3 -0
- package/dist/detectors/registry/acronym-expansion-conflict.js.map +1 -0
- package/dist/detectors/registry/adverb-density.d.ts +3 -0
- package/dist/detectors/registry/adverb-density.d.ts.map +1 -0
- package/dist/detectors/registry/adverb-density.js +3 -0
- package/dist/detectors/registry/adverb-density.js.map +1 -0
- package/dist/detectors/registry/agentless-passive.d.ts +3 -0
- package/dist/detectors/registry/agentless-passive.d.ts.map +1 -0
- package/dist/detectors/registry/agentless-passive.js +3 -0
- package/dist/detectors/registry/agentless-passive.js.map +1 -0
- package/dist/detectors/registry/agreement-slip.d.ts +3 -0
- package/dist/detectors/registry/agreement-slip.d.ts.map +1 -0
- package/dist/detectors/registry/agreement-slip.js +3 -0
- package/dist/detectors/registry/agreement-slip.js.map +1 -0
- package/dist/detectors/registry/ai-structure.d.ts +3 -0
- package/dist/detectors/registry/ai-structure.d.ts.map +1 -0
- package/dist/detectors/registry/ai-structure.js +3 -0
- package/dist/detectors/registry/ai-structure.js.map +1 -0
- package/dist/detectors/registry/ai-tell.d.ts +3 -0
- package/dist/detectors/registry/ai-tell.d.ts.map +1 -0
- package/dist/detectors/registry/ai-tell.js +3 -0
- package/dist/detectors/registry/ai-tell.js.map +1 -0
- package/dist/detectors/registry/announced-count.d.ts +3 -0
- package/dist/detectors/registry/announced-count.d.ts.map +1 -0
- package/dist/detectors/registry/announced-count.js +3 -0
- package/dist/detectors/registry/announced-count.js.map +1 -0
- package/dist/detectors/registry/article-sound.d.ts +3 -0
- package/dist/detectors/registry/article-sound.d.ts.map +1 -0
- package/dist/detectors/registry/article-sound.js +3 -0
- package/dist/detectors/registry/article-sound.js.map +1 -0
- package/dist/detectors/registry/assistant-residue.d.ts +3 -0
- package/dist/detectors/registry/assistant-residue.d.ts.map +1 -0
- package/dist/detectors/registry/assistant-residue.js +3 -0
- package/dist/detectors/registry/assistant-residue.js.map +1 -0
- package/dist/detectors/registry/bold-label-list.d.ts +3 -0
- package/dist/detectors/registry/bold-label-list.d.ts.map +1 -0
- package/dist/detectors/registry/bold-label-list.js +3 -0
- package/dist/detectors/registry/bold-label-list.js.map +1 -0
- package/dist/detectors/registry/bracket-nesting.d.ts +3 -0
- package/dist/detectors/registry/bracket-nesting.d.ts.map +1 -0
- package/dist/detectors/registry/bracket-nesting.js +3 -0
- package/dist/detectors/registry/bracket-nesting.js.map +1 -0
- package/dist/detectors/registry/broken-link.d.ts +3 -0
- package/dist/detectors/registry/broken-link.d.ts.map +1 -0
- package/dist/detectors/registry/broken-link.js +3 -0
- package/dist/detectors/registry/broken-link.js.map +1 -0
- package/dist/detectors/registry/chat-citation-residue.d.ts +3 -0
- package/dist/detectors/registry/chat-citation-residue.d.ts.map +1 -0
- package/dist/detectors/registry/chat-citation-residue.js +3 -0
- package/dist/detectors/registry/chat-citation-residue.js.map +1 -0
- package/dist/detectors/registry/citation-entry.d.ts +3 -0
- package/dist/detectors/registry/citation-entry.d.ts.map +1 -0
- package/dist/detectors/registry/citation-entry.js +3 -0
- package/dist/detectors/registry/citation-entry.js.map +1 -0
- package/dist/detectors/registry/citation-style.d.ts +3 -0
- package/dist/detectors/registry/citation-style.d.ts.map +1 -0
- package/dist/detectors/registry/citation-style.js +3 -0
- package/dist/detectors/registry/citation-style.js.map +1 -0
- package/dist/detectors/registry/clause-chain.d.ts +3 -0
- package/dist/detectors/registry/clause-chain.d.ts.map +1 -0
- package/dist/detectors/registry/clause-chain.js +3 -0
- package/dist/detectors/registry/clause-chain.js.map +1 -0
- package/dist/detectors/registry/colon-lead-in.d.ts +3 -0
- package/dist/detectors/registry/colon-lead-in.d.ts.map +1 -0
- package/dist/detectors/registry/colon-lead-in.js +3 -0
- package/dist/detectors/registry/colon-lead-in.js.map +1 -0
- package/dist/detectors/registry/concrete-evidence.d.ts +3 -0
- package/dist/detectors/registry/concrete-evidence.d.ts.map +1 -0
- package/dist/detectors/registry/concrete-evidence.js +3 -0
- package/dist/detectors/registry/concrete-evidence.js.map +1 -0
- package/dist/detectors/registry/conjunction-run.d.ts +3 -0
- package/dist/detectors/registry/conjunction-run.d.ts.map +1 -0
- package/dist/detectors/registry/conjunction-run.js +3 -0
- package/dist/detectors/registry/conjunction-run.js.map +1 -0
- package/dist/detectors/registry/contraction-mix.d.ts +3 -0
- package/dist/detectors/registry/contraction-mix.d.ts.map +1 -0
- package/dist/detectors/registry/contraction-mix.js +3 -0
- package/dist/detectors/registry/contraction-mix.js.map +1 -0
- package/dist/detectors/registry/contrast-framing.d.ts +3 -0
- package/dist/detectors/registry/contrast-framing.d.ts.map +1 -0
- package/dist/detectors/registry/contrast-framing.js +3 -0
- package/dist/detectors/registry/contrast-framing.js.map +1 -0
- package/dist/detectors/registry/count-per-section.d.ts +3 -0
- package/dist/detectors/registry/count-per-section.d.ts.map +1 -0
- package/dist/detectors/registry/count-per-section.js +3 -0
- package/dist/detectors/registry/count-per-section.js.map +1 -0
- package/dist/detectors/registry/cushion-density.d.ts +3 -0
- package/dist/detectors/registry/cushion-density.d.ts.map +1 -0
- package/dist/detectors/registry/cushion-density.js +3 -0
- package/dist/detectors/registry/cushion-density.js.map +1 -0
- package/dist/detectors/registry/custom-pattern.d.ts +3 -0
- package/dist/detectors/registry/custom-pattern.d.ts.map +1 -0
- package/dist/detectors/registry/custom-pattern.js +3 -0
- package/dist/detectors/registry/custom-pattern.js.map +1 -0
- package/dist/detectors/registry/custom-tokens.d.ts +3 -0
- package/dist/detectors/registry/custom-tokens.d.ts.map +1 -0
- package/dist/detectors/registry/custom-tokens.js +3 -0
- package/dist/detectors/registry/custom-tokens.js.map +1 -0
- package/dist/detectors/registry/custom-words.d.ts +3 -0
- package/dist/detectors/registry/custom-words.d.ts.map +1 -0
- package/dist/detectors/registry/custom-words.js +3 -0
- package/dist/detectors/registry/custom-words.js.map +1 -0
- package/dist/detectors/registry/dangling-figure.d.ts +3 -0
- package/dist/detectors/registry/dangling-figure.d.ts.map +1 -0
- package/dist/detectors/registry/dangling-figure.js +3 -0
- package/dist/detectors/registry/dangling-figure.js.map +1 -0
- package/dist/detectors/registry/dangling-reference.d.ts +3 -0
- package/dist/detectors/registry/dangling-reference.d.ts.map +1 -0
- package/dist/detectors/registry/dangling-reference.js +3 -0
- package/dist/detectors/registry/dangling-reference.js.map +1 -0
- package/dist/detectors/registry/dash-density.d.ts +3 -0
- package/dist/detectors/registry/dash-density.d.ts.map +1 -0
- package/dist/detectors/registry/dash-density.js +3 -0
- package/dist/detectors/registry/dash-density.js.map +1 -0
- package/dist/detectors/registry/date-format.d.ts +3 -0
- package/dist/detectors/registry/date-format.d.ts.map +1 -0
- package/dist/detectors/registry/date-format.js +3 -0
- package/dist/detectors/registry/date-format.js.map +1 -0
- package/dist/detectors/registry/date-order.d.ts +3 -0
- package/dist/detectors/registry/date-order.d.ts.map +1 -0
- package/dist/detectors/registry/date-order.js +3 -0
- package/dist/detectors/registry/date-order.js.map +1 -0
- package/dist/detectors/registry/date-range-reversed.d.ts +3 -0
- package/dist/detectors/registry/date-range-reversed.d.ts.map +1 -0
- package/dist/detectors/registry/date-range-reversed.js +3 -0
- package/dist/detectors/registry/date-range-reversed.js.map +1 -0
- package/dist/detectors/registry/date-weekday-mismatch.d.ts +3 -0
- package/dist/detectors/registry/date-weekday-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/date-weekday-mismatch.js +3 -0
- package/dist/detectors/registry/date-weekday-mismatch.js.map +1 -0
- package/dist/detectors/registry/date-without-year.d.ts +3 -0
- package/dist/detectors/registry/date-without-year.d.ts.map +1 -0
- package/dist/detectors/registry/date-without-year.js +3 -0
- package/dist/detectors/registry/date-without-year.js.map +1 -0
- package/dist/detectors/registry/doubled-particle.d.ts +3 -0
- package/dist/detectors/registry/doubled-particle.d.ts.map +1 -0
- package/dist/detectors/registry/doubled-particle.js +3 -0
- package/dist/detectors/registry/doubled-particle.js.map +1 -0
- package/dist/detectors/registry/doubled-punctuation.d.ts +3 -0
- package/dist/detectors/registry/doubled-punctuation.d.ts.map +1 -0
- package/dist/detectors/registry/doubled-punctuation.js +3 -0
- package/dist/detectors/registry/doubled-punctuation.js.map +1 -0
- package/dist/detectors/registry/doubled-word.d.ts +3 -0
- package/dist/detectors/registry/doubled-word.d.ts.map +1 -0
- package/dist/detectors/registry/doubled-word.js +3 -0
- package/dist/detectors/registry/doubled-word.js.map +1 -0
- package/dist/detectors/registry/duplicate-definition.d.ts +3 -0
- package/dist/detectors/registry/duplicate-definition.d.ts.map +1 -0
- package/dist/detectors/registry/duplicate-definition.js +3 -0
- package/dist/detectors/registry/duplicate-definition.js.map +1 -0
- package/dist/detectors/registry/duplicate-heading.d.ts +3 -0
- package/dist/detectors/registry/duplicate-heading.d.ts.map +1 -0
- package/dist/detectors/registry/duplicate-heading.js +3 -0
- package/dist/detectors/registry/duplicate-heading.js.map +1 -0
- package/dist/detectors/registry/duration-mismatch.d.ts +3 -0
- package/dist/detectors/registry/duration-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/duration-mismatch.js +3 -0
- package/dist/detectors/registry/duration-mismatch.js.map +1 -0
- package/dist/detectors/registry/elapsed-years-mismatch.d.ts +3 -0
- package/dist/detectors/registry/elapsed-years-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/elapsed-years-mismatch.js +3 -0
- package/dist/detectors/registry/elapsed-years-mismatch.js.map +1 -0
- package/dist/detectors/registry/emoji-density.d.ts +3 -0
- package/dist/detectors/registry/emoji-density.d.ts.map +1 -0
- package/dist/detectors/registry/emoji-density.js +3 -0
- package/dist/detectors/registry/emoji-density.js.map +1 -0
- package/dist/detectors/registry/emoji-heading.d.ts +3 -0
- package/dist/detectors/registry/emoji-heading.d.ts.map +1 -0
- package/dist/detectors/registry/emoji-heading.js +3 -0
- package/dist/detectors/registry/emoji-heading.js.map +1 -0
- package/dist/detectors/registry/empty-list-item.d.ts +3 -0
- package/dist/detectors/registry/empty-list-item.d.ts.map +1 -0
- package/dist/detectors/registry/empty-list-item.js +3 -0
- package/dist/detectors/registry/empty-list-item.js.map +1 -0
- package/dist/detectors/registry/empty-section.d.ts +3 -0
- package/dist/detectors/registry/empty-section.d.ts.map +1 -0
- package/dist/detectors/registry/empty-section.js +3 -0
- package/dist/detectors/registry/empty-section.js.map +1 -0
- package/dist/detectors/registry/empty-table-cell.d.ts +3 -0
- package/dist/detectors/registry/empty-table-cell.d.ts.map +1 -0
- package/dist/detectors/registry/empty-table-cell.js +3 -0
- package/dist/detectors/registry/empty-table-cell.js.map +1 -0
- package/dist/detectors/registry/expletive.d.ts +3 -0
- package/dist/detectors/registry/expletive.d.ts.map +1 -0
- package/dist/detectors/registry/expletive.js +3 -0
- package/dist/detectors/registry/expletive.js.map +1 -0
- package/dist/detectors/registry/fact-conflict.d.ts +3 -0
- package/dist/detectors/registry/fact-conflict.d.ts.map +1 -0
- package/dist/detectors/registry/fact-conflict.js +3 -0
- package/dist/detectors/registry/fact-conflict.js.map +1 -0
- package/dist/detectors/registry/figure-order.d.ts +3 -0
- package/dist/detectors/registry/figure-order.d.ts.map +1 -0
- package/dist/detectors/registry/figure-order.js +3 -0
- package/dist/detectors/registry/figure-order.js.map +1 -0
- package/dist/detectors/registry/fullwidth-alnum.d.ts +3 -0
- package/dist/detectors/registry/fullwidth-alnum.d.ts.map +1 -0
- package/dist/detectors/registry/fullwidth-alnum.js +3 -0
- package/dist/detectors/registry/fullwidth-alnum.js.map +1 -0
- package/dist/detectors/registry/hankaku-kana.d.ts +3 -0
- package/dist/detectors/registry/hankaku-kana.d.ts.map +1 -0
- package/dist/detectors/registry/hankaku-kana.js +3 -0
- package/dist/detectors/registry/hankaku-kana.js.map +1 -0
- package/dist/detectors/registry/heading-echo.d.ts +3 -0
- package/dist/detectors/registry/heading-echo.d.ts.map +1 -0
- package/dist/detectors/registry/heading-echo.js +3 -0
- package/dist/detectors/registry/heading-echo.js.map +1 -0
- package/dist/detectors/registry/heading-level-skip.d.ts +3 -0
- package/dist/detectors/registry/heading-level-skip.d.ts.map +1 -0
- package/dist/detectors/registry/heading-level-skip.js +3 -0
- package/dist/detectors/registry/heading-level-skip.js.map +1 -0
- package/dist/detectors/registry/heading-numbering.d.ts +3 -0
- package/dist/detectors/registry/heading-numbering.d.ts.map +1 -0
- package/dist/detectors/registry/heading-numbering.js +3 -0
- package/dist/detectors/registry/heading-numbering.js.map +1 -0
- package/dist/detectors/registry/hedging.d.ts +3 -0
- package/dist/detectors/registry/hedging.d.ts.map +1 -0
- package/dist/detectors/registry/hedging.js +3 -0
- package/dist/detectors/registry/hedging.js.map +1 -0
- package/dist/detectors/registry/image-alt-text.d.ts +3 -0
- package/dist/detectors/registry/image-alt-text.d.ts.map +1 -0
- package/dist/detectors/registry/image-alt-text.js +3 -0
- package/dist/detectors/registry/image-alt-text.js.map +1 -0
- package/dist/detectors/registry/intensified-adjective.d.ts +3 -0
- package/dist/detectors/registry/intensified-adjective.d.ts.map +1 -0
- package/dist/detectors/registry/intensified-adjective.js +3 -0
- package/dist/detectors/registry/intensified-adjective.js.map +1 -0
- package/dist/detectors/registry/internal-jargon.d.ts +3 -0
- package/dist/detectors/registry/internal-jargon.d.ts.map +1 -0
- package/dist/detectors/registry/internal-jargon.js +3 -0
- package/dist/detectors/registry/internal-jargon.js.map +1 -0
- package/dist/detectors/registry/invisible-character.d.ts +3 -0
- package/dist/detectors/registry/invisible-character.d.ts.map +1 -0
- package/dist/detectors/registry/invisible-character.js +3 -0
- package/dist/detectors/registry/invisible-character.js.map +1 -0
- package/dist/detectors/registry/kanji-run.d.ts +3 -0
- package/dist/detectors/registry/kanji-run.d.ts.map +1 -0
- package/dist/detectors/registry/kanji-run.js +3 -0
- package/dist/detectors/registry/kanji-run.js.map +1 -0
- package/dist/detectors/registry/katakana-density.d.ts +3 -0
- package/dist/detectors/registry/katakana-density.d.ts.map +1 -0
- package/dist/detectors/registry/katakana-density.js +3 -0
- package/dist/detectors/registry/katakana-density.js.map +1 -0
- package/dist/detectors/registry/katakana-long-vowel.d.ts +3 -0
- package/dist/detectors/registry/katakana-long-vowel.d.ts.map +1 -0
- package/dist/detectors/registry/katakana-long-vowel.js +3 -0
- package/dist/detectors/registry/katakana-long-vowel.js.map +1 -0
- package/dist/detectors/registry/known-correction.d.ts +3 -0
- package/dist/detectors/registry/known-correction.d.ts.map +1 -0
- package/dist/detectors/registry/known-correction.js +3 -0
- package/dist/detectors/registry/known-correction.js.map +1 -0
- package/dist/detectors/registry/kutoten-consistency.d.ts +3 -0
- package/dist/detectors/registry/kutoten-consistency.d.ts.map +1 -0
- package/dist/detectors/registry/kutoten-consistency.js +3 -0
- package/dist/detectors/registry/kutoten-consistency.js.map +1 -0
- package/dist/detectors/registry/latin-spacing.d.ts +3 -0
- package/dist/detectors/registry/latin-spacing.d.ts.map +1 -0
- package/dist/detectors/registry/latin-spacing.js +3 -0
- package/dist/detectors/registry/latin-spacing.js.map +1 -0
- package/dist/detectors/registry/list-item-form-mix.d.ts +3 -0
- package/dist/detectors/registry/list-item-form-mix.d.ts.map +1 -0
- package/dist/detectors/registry/list-item-form-mix.js +3 -0
- package/dist/detectors/registry/list-item-form-mix.js.map +1 -0
- package/dist/detectors/registry/middle-dot.d.ts +3 -0
- package/dist/detectors/registry/middle-dot.d.ts.map +1 -0
- package/dist/detectors/registry/middle-dot.js +3 -0
- package/dist/detectors/registry/middle-dot.js.map +1 -0
- package/dist/detectors/registry/misuse-match.d.ts +3 -0
- package/dist/detectors/registry/misuse-match.d.ts.map +1 -0
- package/dist/detectors/registry/misuse-match.js +3 -0
- package/dist/detectors/registry/misuse-match.js.map +1 -0
- package/dist/detectors/registry/modal-conflict.d.ts +3 -0
- package/dist/detectors/registry/modal-conflict.d.ts.map +1 -0
- package/dist/detectors/registry/modal-conflict.js +3 -0
- package/dist/detectors/registry/modal-conflict.js.map +1 -0
- package/dist/detectors/registry/name-variant.d.ts +3 -0
- package/dist/detectors/registry/name-variant.d.ts.map +1 -0
- package/dist/detectors/registry/name-variant.js +3 -0
- package/dist/detectors/registry/name-variant.js.map +1 -0
- package/dist/detectors/registry/ngram-repetition.d.ts +3 -0
- package/dist/detectors/registry/ngram-repetition.d.ts.map +1 -0
- package/dist/detectors/registry/ngram-repetition.js +3 -0
- package/dist/detectors/registry/ngram-repetition.js.map +1 -0
- package/dist/detectors/registry/no-lead.d.ts +3 -0
- package/dist/detectors/registry/no-lead.d.ts.map +1 -0
- package/dist/detectors/registry/no-lead.js +3 -0
- package/dist/detectors/registry/no-lead.js.map +1 -0
- package/dist/detectors/registry/nominalization.d.ts +3 -0
- package/dist/detectors/registry/nominalization.d.ts.map +1 -0
- package/dist/detectors/registry/nominalization.js +3 -0
- package/dist/detectors/registry/nominalization.js.map +1 -0
- package/dist/detectors/registry/noun-ending.d.ts +3 -0
- package/dist/detectors/registry/noun-ending.d.ts.map +1 -0
- package/dist/detectors/registry/noun-ending.js +3 -0
- package/dist/detectors/registry/noun-ending.js.map +1 -0
- package/dist/detectors/registry/number-style-consistency.d.ts +3 -0
- package/dist/detectors/registry/number-style-consistency.d.ts.map +1 -0
- package/dist/detectors/registry/number-style-consistency.js +3 -0
- package/dist/detectors/registry/number-style-consistency.js.map +1 -0
- package/dist/detectors/registry/number-without-unit.d.ts +3 -0
- package/dist/detectors/registry/number-without-unit.d.ts.map +1 -0
- package/dist/detectors/registry/number-without-unit.js +3 -0
- package/dist/detectors/registry/number-without-unit.js.map +1 -0
- package/dist/detectors/registry/numbering-gap.d.ts +3 -0
- package/dist/detectors/registry/numbering-gap.d.ts.map +1 -0
- package/dist/detectors/registry/numbering-gap.js +3 -0
- package/dist/detectors/registry/numbering-gap.js.map +1 -0
- package/dist/detectors/registry/one-sentence-paragraph-run.d.ts +3 -0
- package/dist/detectors/registry/one-sentence-paragraph-run.d.ts.map +1 -0
- package/dist/detectors/registry/one-sentence-paragraph-run.js +3 -0
- package/dist/detectors/registry/one-sentence-paragraph-run.js.map +1 -0
- package/dist/detectors/registry/opener-pile.d.ts +3 -0
- package/dist/detectors/registry/opener-pile.d.ts.map +1 -0
- package/dist/detectors/registry/opener-pile.js +3 -0
- package/dist/detectors/registry/opener-pile.js.map +1 -0
- package/dist/detectors/registry/opener-run.d.ts +3 -0
- package/dist/detectors/registry/opener-run.d.ts.map +1 -0
- package/dist/detectors/registry/opener-run.js +3 -0
- package/dist/detectors/registry/opener-run.js.map +1 -0
- package/dist/detectors/registry/orthographic-variant.d.ts +3 -0
- package/dist/detectors/registry/orthographic-variant.d.ts.map +1 -0
- package/dist/detectors/registry/orthographic-variant.js +3 -0
- package/dist/detectors/registry/orthographic-variant.js.map +1 -0
- package/dist/detectors/registry/outside-announced-list.d.ts +3 -0
- package/dist/detectors/registry/outside-announced-list.d.ts.map +1 -0
- package/dist/detectors/registry/outside-announced-list.js +3 -0
- package/dist/detectors/registry/outside-announced-list.js.map +1 -0
- package/dist/detectors/registry/oxford-comma.d.ts +3 -0
- package/dist/detectors/registry/oxford-comma.d.ts.map +1 -0
- package/dist/detectors/registry/oxford-comma.js +3 -0
- package/dist/detectors/registry/oxford-comma.js.map +1 -0
- package/dist/detectors/registry/paragraph-length.d.ts +3 -0
- package/dist/detectors/registry/paragraph-length.d.ts.map +1 -0
- package/dist/detectors/registry/paragraph-length.js +3 -0
- package/dist/detectors/registry/paragraph-length.js.map +1 -0
- package/dist/detectors/registry/paragraph-restatement.d.ts +3 -0
- package/dist/detectors/registry/paragraph-restatement.d.ts.map +1 -0
- package/dist/detectors/registry/paragraph-restatement.js +3 -0
- package/dist/detectors/registry/paragraph-restatement.js.map +1 -0
- package/dist/detectors/registry/paragraph-variance.d.ts +3 -0
- package/dist/detectors/registry/paragraph-variance.d.ts.map +1 -0
- package/dist/detectors/registry/paragraph-variance.js +3 -0
- package/dist/detectors/registry/paragraph-variance.js.map +1 -0
- package/dist/detectors/registry/percent-sum-mismatch.d.ts +3 -0
- package/dist/detectors/registry/percent-sum-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/percent-sum-mismatch.js +3 -0
- package/dist/detectors/registry/percent-sum-mismatch.js.map +1 -0
- package/dist/detectors/registry/person-mix.d.ts +3 -0
- package/dist/detectors/registry/person-mix.d.ts.map +1 -0
- package/dist/detectors/registry/person-mix.js +3 -0
- package/dist/detectors/registry/person-mix.js.map +1 -0
- package/dist/detectors/registry/phrase-count.d.ts +3 -0
- package/dist/detectors/registry/phrase-count.d.ts.map +1 -0
- package/dist/detectors/registry/phrase-count.js +3 -0
- package/dist/detectors/registry/phrase-count.js.map +1 -0
- package/dist/detectors/registry/phrase-density.d.ts +3 -0
- package/dist/detectors/registry/phrase-density.d.ts.map +1 -0
- package/dist/detectors/registry/phrase-density.js +3 -0
- package/dist/detectors/registry/phrase-density.js.map +1 -0
- package/dist/detectors/registry/phrase-match.d.ts +3 -0
- package/dist/detectors/registry/phrase-match.d.ts.map +1 -0
- package/dist/detectors/registry/phrase-match.js +3 -0
- package/dist/detectors/registry/phrase-match.js.map +1 -0
- package/dist/detectors/registry/preamble-length.d.ts +3 -0
- package/dist/detectors/registry/preamble-length.d.ts.map +1 -0
- package/dist/detectors/registry/preamble-length.js +3 -0
- package/dist/detectors/registry/preamble-length.js.map +1 -0
- package/dist/detectors/registry/preferred-term.d.ts +3 -0
- package/dist/detectors/registry/preferred-term.d.ts.map +1 -0
- package/dist/detectors/registry/preferred-term.js +3 -0
- package/dist/detectors/registry/preferred-term.js.map +1 -0
- package/dist/detectors/registry/proper-noun-density.d.ts +3 -0
- package/dist/detectors/registry/proper-noun-density.d.ts.map +1 -0
- package/dist/detectors/registry/proper-noun-density.js +3 -0
- package/dist/detectors/registry/proper-noun-density.js.map +1 -0
- package/dist/detectors/registry/ra-nuki.d.ts +3 -0
- package/dist/detectors/registry/ra-nuki.d.ts.map +1 -0
- package/dist/detectors/registry/ra-nuki.js +3 -0
- package/dist/detectors/registry/ra-nuki.js.map +1 -0
- package/dist/detectors/registry/reference-title-mismatch.d.ts +3 -0
- package/dist/detectors/registry/reference-title-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/reference-title-mismatch.js +3 -0
- package/dist/detectors/registry/reference-title-mismatch.js.map +1 -0
- package/dist/detectors/registry/reference-topic-missing.d.ts +3 -0
- package/dist/detectors/registry/reference-topic-missing.d.ts.map +1 -0
- package/dist/detectors/registry/reference-topic-missing.js +3 -0
- package/dist/detectors/registry/reference-topic-missing.js.map +1 -0
- package/dist/detectors/registry/relative-date-mismatch.d.ts +3 -0
- package/dist/detectors/registry/relative-date-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/relative-date-mismatch.js +3 -0
- package/dist/detectors/registry/relative-date-mismatch.js.map +1 -0
- package/dist/detectors/registry/repeated-conjunction.d.ts +3 -0
- package/dist/detectors/registry/repeated-conjunction.d.ts.map +1 -0
- package/dist/detectors/registry/repeated-conjunction.js +3 -0
- package/dist/detectors/registry/repeated-conjunction.js.map +1 -0
- package/dist/detectors/registry/repeated-head.d.ts +3 -0
- package/dist/detectors/registry/repeated-head.d.ts.map +1 -0
- package/dist/detectors/registry/repeated-head.js +3 -0
- package/dist/detectors/registry/repeated-head.js.map +1 -0
- package/dist/detectors/registry/required-sections.d.ts +3 -0
- package/dist/detectors/registry/required-sections.d.ts.map +1 -0
- package/dist/detectors/registry/required-sections.js +3 -0
- package/dist/detectors/registry/required-sections.js.map +1 -0
- package/dist/detectors/registry/requirement-modal.d.ts +3 -0
- package/dist/detectors/registry/requirement-modal.d.ts.map +1 -0
- package/dist/detectors/registry/requirement-modal.js +3 -0
- package/dist/detectors/registry/requirement-modal.js.map +1 -0
- package/dist/detectors/registry/requirement-smell.d.ts +3 -0
- package/dist/detectors/registry/requirement-smell.d.ts.map +1 -0
- package/dist/detectors/registry/requirement-smell.js +3 -0
- package/dist/detectors/registry/requirement-smell.js.map +1 -0
- package/dist/detectors/registry/rule-of-three.d.ts +3 -0
- package/dist/detectors/registry/rule-of-three.d.ts.map +1 -0
- package/dist/detectors/registry/rule-of-three.js +3 -0
- package/dist/detectors/registry/rule-of-three.js.map +1 -0
- package/dist/detectors/registry/section-uniformity.d.ts +3 -0
- package/dist/detectors/registry/section-uniformity.d.ts.map +1 -0
- package/dist/detectors/registry/section-uniformity.js +3 -0
- package/dist/detectors/registry/section-uniformity.js.map +1 -0
- package/dist/detectors/registry/sentence-comma-count.d.ts +3 -0
- package/dist/detectors/registry/sentence-comma-count.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-comma-count.js +3 -0
- package/dist/detectors/registry/sentence-comma-count.js.map +1 -0
- package/dist/detectors/registry/sentence-conjunctive-count.d.ts +3 -0
- package/dist/detectors/registry/sentence-conjunctive-count.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-conjunctive-count.js +3 -0
- package/dist/detectors/registry/sentence-conjunctive-count.js.map +1 -0
- package/dist/detectors/registry/sentence-ending.d.ts +3 -0
- package/dist/detectors/registry/sentence-ending.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-ending.js +3 -0
- package/dist/detectors/registry/sentence-ending.js.map +1 -0
- package/dist/detectors/registry/sentence-length.d.ts +3 -0
- package/dist/detectors/registry/sentence-length.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-length.js +3 -0
- package/dist/detectors/registry/sentence-length.js.map +1 -0
- package/dist/detectors/registry/sentence-rhythm.d.ts +3 -0
- package/dist/detectors/registry/sentence-rhythm.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-rhythm.js +3 -0
- package/dist/detectors/registry/sentence-rhythm.js.map +1 -0
- package/dist/detectors/registry/sentence-word-count.d.ts +3 -0
- package/dist/detectors/registry/sentence-word-count.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-word-count.js +3 -0
- package/dist/detectors/registry/sentence-word-count.js.map +1 -0
- package/dist/detectors/registry/space-before-punctuation.d.ts +3 -0
- package/dist/detectors/registry/space-before-punctuation.d.ts.map +1 -0
- package/dist/detectors/registry/space-before-punctuation.js +3 -0
- package/dist/detectors/registry/space-before-punctuation.js.map +1 -0
- package/dist/detectors/registry/spelling-variety.d.ts +3 -0
- package/dist/detectors/registry/spelling-variety.d.ts.map +1 -0
- package/dist/detectors/registry/spelling-variety.js +3 -0
- package/dist/detectors/registry/spelling-variety.js.map +1 -0
- package/dist/detectors/registry/stock-transition.d.ts +3 -0
- package/dist/detectors/registry/stock-transition.d.ts.map +1 -0
- package/dist/detectors/registry/stock-transition.js +3 -0
- package/dist/detectors/registry/stock-transition.js.map +1 -0
- package/dist/detectors/registry/stray-space.d.ts +3 -0
- package/dist/detectors/registry/stray-space.d.ts.map +1 -0
- package/dist/detectors/registry/stray-space.js +3 -0
- package/dist/detectors/registry/stray-space.js.map +1 -0
- package/dist/detectors/registry/summary-fact-mismatch.d.ts +3 -0
- package/dist/detectors/registry/summary-fact-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/summary-fact-mismatch.js +3 -0
- package/dist/detectors/registry/summary-fact-mismatch.js.map +1 -0
- package/dist/detectors/registry/table-header-variant.d.ts +3 -0
- package/dist/detectors/registry/table-header-variant.d.ts.map +1 -0
- package/dist/detectors/registry/table-header-variant.js +3 -0
- package/dist/detectors/registry/table-header-variant.js.map +1 -0
- package/dist/detectors/registry/title-case-mix.d.ts +3 -0
- package/dist/detectors/registry/title-case-mix.d.ts.map +1 -0
- package/dist/detectors/registry/title-case-mix.js +3 -0
- package/dist/detectors/registry/title-case-mix.js.map +1 -0
- package/dist/detectors/registry/title-length.d.ts +3 -0
- package/dist/detectors/registry/title-length.d.ts.map +1 -0
- package/dist/detectors/registry/title-length.js +3 -0
- package/dist/detectors/registry/title-length.js.map +1 -0
- package/dist/detectors/registry/topic-predicate-distance.d.ts +3 -0
- package/dist/detectors/registry/topic-predicate-distance.d.ts.map +1 -0
- package/dist/detectors/registry/topic-predicate-distance.js +3 -0
- package/dist/detectors/registry/topic-predicate-distance.js.map +1 -0
- package/dist/detectors/registry/total-mismatch.d.ts +3 -0
- package/dist/detectors/registry/total-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/total-mismatch.js +3 -0
- package/dist/detectors/registry/total-mismatch.js.map +1 -0
- package/dist/detectors/registry/unbalanced-bracket.d.ts +3 -0
- package/dist/detectors/registry/unbalanced-bracket.d.ts.map +1 -0
- package/dist/detectors/registry/unbalanced-bracket.js +3 -0
- package/dist/detectors/registry/unbalanced-bracket.js.map +1 -0
- package/dist/detectors/registry/undefined-acronym.d.ts +3 -0
- package/dist/detectors/registry/undefined-acronym.d.ts.map +1 -0
- package/dist/detectors/registry/undefined-acronym.js +3 -0
- package/dist/detectors/registry/undefined-acronym.js.map +1 -0
- package/dist/detectors/registry/unfilled-placeholder.d.ts +3 -0
- package/dist/detectors/registry/unfilled-placeholder.d.ts.map +1 -0
- package/dist/detectors/registry/unfilled-placeholder.js +3 -0
- package/dist/detectors/registry/unfilled-placeholder.js.map +1 -0
- package/dist/detectors/registry/unit-mismatch.d.ts +3 -0
- package/dist/detectors/registry/unit-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/unit-mismatch.js +3 -0
- package/dist/detectors/registry/unit-mismatch.js.map +1 -0
- package/dist/detectors/registry/unknown-word.d.ts +3 -0
- package/dist/detectors/registry/unknown-word.d.ts.map +1 -0
- package/dist/detectors/registry/unknown-word.js +3 -0
- package/dist/detectors/registry/unknown-word.js.map +1 -0
- package/dist/detectors/registry/unqualified-superlative.d.ts +3 -0
- package/dist/detectors/registry/unqualified-superlative.d.ts.map +1 -0
- package/dist/detectors/registry/unqualified-superlative.js +3 -0
- package/dist/detectors/registry/unqualified-superlative.js.map +1 -0
- package/dist/detectors/registry/unused-definition.d.ts +3 -0
- package/dist/detectors/registry/unused-definition.d.ts.map +1 -0
- package/dist/detectors/registry/unused-definition.js +3 -0
- package/dist/detectors/registry/unused-definition.js.map +1 -0
- package/dist/detectors/registry/url-run-on.d.ts +3 -0
- package/dist/detectors/registry/url-run-on.d.ts.map +1 -0
- package/dist/detectors/registry/url-run-on.js +3 -0
- package/dist/detectors/registry/url-run-on.js.map +1 -0
- package/dist/detectors/registry/use-before-definition.d.ts +3 -0
- package/dist/detectors/registry/use-before-definition.d.ts.map +1 -0
- package/dist/detectors/registry/use-before-definition.js +3 -0
- package/dist/detectors/registry/use-before-definition.js.map +1 -0
- package/dist/detectors/registry/vague-density.d.ts +3 -0
- package/dist/detectors/registry/vague-density.d.ts.map +1 -0
- package/dist/detectors/registry/vague-density.js +3 -0
- package/dist/detectors/registry/vague-density.js.map +1 -0
- package/dist/detectors/registry/vague-figure-pointer.d.ts +3 -0
- package/dist/detectors/registry/vague-figure-pointer.d.ts.map +1 -0
- package/dist/detectors/registry/vague-figure-pointer.js +3 -0
- package/dist/detectors/registry/vague-figure-pointer.js.map +1 -0
- package/dist/detectors/registry/vague-link-text.d.ts +3 -0
- package/dist/detectors/registry/vague-link-text.d.ts.map +1 -0
- package/dist/detectors/registry/vague-link-text.js +3 -0
- package/dist/detectors/registry/vague-link-text.js.map +1 -0
- package/dist/detectors/registry-files.d.ts +11 -0
- package/dist/detectors/registry-files.d.ts.map +1 -0
- package/dist/detectors/registry-files.js +9 -0
- package/dist/detectors/registry-files.js.map +1 -0
- package/dist/detectors/registry-load.d.ts +6 -0
- package/dist/detectors/registry-load.d.ts.map +1 -0
- package/dist/detectors/registry-load.js +19 -0
- package/dist/detectors/registry-load.js.map +1 -0
- package/dist/detectors/relative-dates.d.ts +4 -0
- package/dist/detectors/relative-dates.d.ts.map +1 -0
- package/dist/detectors/relative-dates.js +100 -0
- package/dist/detectors/relative-dates.js.map +1 -0
- package/dist/detectors/sentence-counts.d.ts +19 -0
- package/dist/detectors/sentence-counts.d.ts.map +1 -0
- package/dist/detectors/sentence-counts.js +83 -0
- package/dist/detectors/sentence-counts.js.map +1 -0
- package/dist/detectors/sentence-load.d.ts +8 -0
- package/dist/detectors/sentence-load.d.ts.map +1 -0
- package/dist/detectors/sentence-load.js +35 -0
- package/dist/detectors/sentence-load.js.map +1 -0
- package/dist/detectors/spelling-variety.d.ts +4 -3
- package/dist/detectors/spelling-variety.d.ts.map +1 -1
- package/dist/detectors/spelling-variety.js +1 -1
- package/dist/detectors/spelling-variety.js.map +1 -1
- package/dist/detectors/table-header.d.ts +28 -0
- package/dist/detectors/table-header.d.ts.map +1 -0
- package/dist/detectors/table-header.js +148 -0
- package/dist/detectors/table-header.js.map +1 -0
- package/dist/detectors/team.d.ts +3 -1
- package/dist/detectors/team.d.ts.map +1 -1
- package/dist/detectors/team.js +10 -3
- package/dist/detectors/team.js.map +1 -1
- package/dist/detectors/unit-consistency.d.ts +4 -0
- package/dist/detectors/unit-consistency.d.ts.map +1 -0
- package/dist/detectors/unit-consistency.js +53 -0
- package/dist/detectors/unit-consistency.js.map +1 -0
- package/dist/detectors/unknown-word.d.ts +7 -0
- package/dist/detectors/unknown-word.d.ts.map +1 -0
- package/dist/detectors/unknown-word.js +40 -0
- package/dist/detectors/unknown-word.js.map +1 -0
- package/dist/detectors/vague-link-text.d.ts +4 -0
- package/dist/detectors/vague-link-text.d.ts.map +1 -0
- package/dist/detectors/vague-link-text.js +11 -0
- package/dist/detectors/vague-link-text.js.map +1 -0
- package/dist/document-reading.d.ts +15 -0
- package/dist/document-reading.d.ts.map +1 -0
- package/dist/document-reading.js +23 -0
- package/dist/document-reading.js.map +1 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +8 -6
- package/dist/document.js.map +1 -1
- package/dist/experimental-alone.d.ts +13 -0
- package/dist/experimental-alone.d.ts.map +1 -0
- package/dist/experimental-alone.js +11 -0
- package/dist/experimental-alone.js.map +1 -0
- package/dist/facts/fact-conflicts.d.ts +15 -0
- package/dist/facts/fact-conflicts.d.ts.map +1 -0
- package/dist/facts/fact-conflicts.js +50 -0
- package/dist/facts/fact-conflicts.js.map +1 -0
- package/dist/facts/fact-scope.d.ts +17 -0
- package/dist/facts/fact-scope.d.ts.map +1 -0
- package/dist/facts/fact-scope.js +112 -0
- package/dist/facts/fact-scope.js.map +1 -0
- package/dist/facts/fact-values.d.ts +18 -0
- package/dist/facts/fact-values.d.ts.map +1 -0
- package/dist/facts/fact-values.js +98 -0
- package/dist/facts/fact-values.js.map +1 -0
- package/dist/facts/labelled-facts.d.ts +31 -0
- package/dist/facts/labelled-facts.d.ts.map +1 -0
- package/dist/facts/labelled-facts.js +94 -0
- package/dist/facts/labelled-facts.js.map +1 -0
- package/dist/facts/measures.d.ts +20 -0
- package/dist/facts/measures.d.ts.map +1 -0
- package/dist/facts/measures.js +40 -0
- package/dist/facts/measures.js.map +1 -0
- package/dist/facts/table-facts.d.ts +5 -0
- package/dist/facts/table-facts.d.ts.map +1 -0
- package/dist/facts/table-facts.js +55 -0
- package/dist/facts/table-facts.js.map +1 -0
- package/dist/facts/trim-marks.d.ts +7 -0
- package/dist/facts/trim-marks.d.ts.map +1 -0
- package/dist/facts/trim-marks.js +18 -0
- package/dist/facts/trim-marks.js.map +1 -0
- package/dist/facts/unit-conflicts.d.ts +14 -0
- package/dist/facts/unit-conflicts.d.ts.map +1 -0
- package/dist/facts/unit-conflicts.js +36 -0
- package/dist/facts/unit-conflicts.js.map +1 -0
- package/dist/figure-references.d.ts +15 -0
- package/dist/figure-references.d.ts.map +1 -1
- package/dist/figure-references.js +14 -0
- package/dist/figure-references.js.map +1 -1
- package/dist/files.d.ts +3 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +10 -7
- package/dist/files.js.map +1 -1
- package/dist/fix-plan/mode.d.ts +6 -1
- package/dist/fix-plan/mode.d.ts.map +1 -1
- package/dist/fix-plan/mode.js +6 -2
- package/dist/fix-plan/mode.js.map +1 -1
- package/dist/fix-plan/plan.d.ts +13 -1
- package/dist/fix-plan/plan.d.ts.map +1 -1
- package/dist/fix-plan/plan.js +13 -2
- package/dist/fix-plan/plan.js.map +1 -1
- package/dist/fix-plan/render.d.ts.map +1 -1
- package/dist/fix-plan/render.js +17 -0
- package/dist/fix-plan/render.js.map +1 -1
- package/dist/fix-plan/structure-target-text.d.ts +15 -0
- package/dist/fix-plan/structure-target-text.d.ts.map +1 -0
- package/dist/fix-plan/structure-target-text.js +57 -0
- package/dist/fix-plan/structure-target-text.js.map +1 -0
- package/dist/fix-plan/structure-targets.d.ts +24 -0
- package/dist/fix-plan/structure-targets.d.ts.map +1 -0
- package/dist/fix-plan/structure-targets.js +27 -0
- package/dist/fix-plan/structure-targets.js.map +1 -0
- package/dist/fix-plan/text.d.ts.map +1 -1
- package/dist/fix-plan/text.js +2 -0
- package/dist/fix-plan/text.js.map +1 -1
- package/dist/grade/baseline-text.d.ts +27 -0
- package/dist/grade/baseline-text.d.ts.map +1 -0
- package/dist/grade/baseline-text.js +49 -0
- package/dist/grade/baseline-text.js.map +1 -0
- package/dist/grade/baseline.d.ts +51 -0
- package/dist/grade/baseline.d.ts.map +1 -0
- package/dist/grade/baseline.js +84 -0
- package/dist/grade/baseline.js.map +1 -0
- package/dist/grade/checks.d.ts +28 -0
- package/dist/grade/checks.d.ts.map +1 -0
- package/dist/grade/checks.js +50 -0
- package/dist/grade/checks.js.map +1 -0
- package/dist/grade/context-support.d.ts +23 -0
- package/dist/grade/context-support.d.ts.map +1 -0
- package/dist/grade/context-support.js +33 -0
- package/dist/grade/context-support.js.map +1 -0
- package/dist/grade/contexts.d.ts +16 -0
- package/dist/grade/contexts.d.ts.map +1 -0
- package/dist/grade/contexts.js +34 -0
- package/dist/grade/contexts.js.map +1 -0
- package/dist/grade/grade-item.d.ts +12 -0
- package/dist/grade/grade-item.d.ts.map +1 -0
- package/dist/grade/grade-item.js +103 -0
- package/dist/grade/grade-item.js.map +1 -0
- package/dist/grade/item.d.ts +54 -0
- package/dist/grade/item.d.ts.map +1 -0
- package/dist/grade/item.js +155 -0
- package/dist/grade/item.js.map +1 -0
- package/dist/grade/order.d.ts +7 -0
- package/dist/grade/order.d.ts.map +1 -0
- package/dist/grade/order.js +7 -0
- package/dist/grade/order.js.map +1 -0
- package/dist/grade/pairing.d.ts +13 -0
- package/dist/grade/pairing.d.ts.map +1 -0
- package/dist/grade/pairing.js +14 -0
- package/dist/grade/pairing.js.map +1 -0
- package/dist/grade/rates.d.ts +14 -0
- package/dist/grade/rates.d.ts.map +1 -0
- package/dist/grade/rates.js +26 -0
- package/dist/grade/rates.js.map +1 -0
- package/dist/grade/render-baseline.d.ts +7 -0
- package/dist/grade/render-baseline.d.ts.map +1 -0
- package/dist/grade/render-baseline.js +44 -0
- package/dist/grade/render-baseline.js.map +1 -0
- package/dist/grade/render-markdown.d.ts +15 -0
- package/dist/grade/render-markdown.d.ts.map +1 -0
- package/dist/grade/render-markdown.js +41 -0
- package/dist/grade/render-markdown.js.map +1 -0
- package/dist/grade/render-variants.d.ts +12 -0
- package/dist/grade/render-variants.d.ts.map +1 -0
- package/dist/grade/render-variants.js +80 -0
- package/dist/grade/render-variants.js.map +1 -0
- package/dist/grade/render.d.ts +14 -0
- package/dist/grade/render.d.ts.map +1 -0
- package/dist/grade/render.js +52 -0
- package/dist/grade/render.js.map +1 -0
- package/dist/grade/result-name.d.ts +7 -0
- package/dist/grade/result-name.d.ts.map +1 -0
- package/dist/grade/result-name.js +6 -0
- package/dist/grade/result-name.js.map +1 -0
- package/dist/grade/result.d.ts +101 -0
- package/dist/grade/result.d.ts.map +1 -0
- package/dist/grade/result.js +2 -0
- package/dist/grade/result.js.map +1 -0
- package/dist/grade/results-read.d.ts +10 -0
- package/dist/grade/results-read.d.ts.map +1 -0
- package/dist/grade/results-read.js +82 -0
- package/dist/grade/results-read.js.map +1 -0
- package/dist/grade/rubric-verdict.d.ts +19 -0
- package/dist/grade/rubric-verdict.d.ts.map +1 -0
- package/dist/grade/rubric-verdict.js +65 -0
- package/dist/grade/rubric-verdict.js.map +1 -0
- package/dist/grade/rubric.d.ts +52 -0
- package/dist/grade/rubric.d.ts.map +1 -0
- package/dist/grade/rubric.js +149 -0
- package/dist/grade/rubric.js.map +1 -0
- package/dist/grade/scorer.d.ts +13 -0
- package/dist/grade/scorer.d.ts.map +1 -0
- package/dist/grade/scorer.js +15 -0
- package/dist/grade/scorer.js.map +1 -0
- package/dist/grade/setup.d.ts +9 -0
- package/dist/grade/setup.d.ts.map +1 -0
- package/dist/grade/setup.js +31 -0
- package/dist/grade/setup.js.map +1 -0
- package/dist/grade/stamp.d.ts +23 -0
- package/dist/grade/stamp.d.ts.map +1 -0
- package/dist/grade/stamp.js +36 -0
- package/dist/grade/stamp.js.map +1 -0
- package/dist/grade/summary.d.ts +43 -0
- package/dist/grade/summary.d.ts.map +1 -0
- package/dist/grade/summary.js +72 -0
- package/dist/grade/summary.js.map +1 -0
- package/dist/grade/text.d.ts +32 -0
- package/dist/grade/text.d.ts.map +1 -0
- package/dist/grade/text.js +117 -0
- package/dist/grade/text.js.map +1 -0
- package/dist/grade/variants-input.d.ts +12 -0
- package/dist/grade/variants-input.d.ts.map +1 -0
- package/dist/grade/variants-input.js +42 -0
- package/dist/grade/variants-input.js.map +1 -0
- package/dist/grade/variants-text.d.ts +31 -0
- package/dist/grade/variants-text.d.ts.map +1 -0
- package/dist/grade/variants-text.js +57 -0
- package/dist/grade/variants-text.js.map +1 -0
- package/dist/grade/variants.d.ts +63 -0
- package/dist/grade/variants.d.ts.map +1 -0
- package/dist/grade/variants.js +66 -0
- package/dist/grade/variants.js.map +1 -0
- package/dist/grade/verdict.d.ts +18 -0
- package/dist/grade/verdict.d.ts.map +1 -0
- package/dist/grade/verdict.js +17 -0
- package/dist/grade/verdict.js.map +1 -0
- package/dist/grade-api.d.ts +53 -0
- package/dist/grade-api.d.ts.map +1 -0
- package/dist/grade-api.js +140 -0
- package/dist/grade-api.js.map +1 -0
- package/dist/heading-numbering.d.ts +32 -0
- package/dist/heading-numbering.d.ts.map +1 -0
- package/dist/heading-numbering.js +72 -0
- package/dist/heading-numbering.js.map +1 -0
- package/dist/kana-spelling.d.ts +14 -0
- package/dist/kana-spelling.d.ts.map +1 -0
- package/dist/kana-spelling.js +43 -0
- package/dist/kana-spelling.js.map +1 -0
- package/dist/link-text.d.ts +12 -0
- package/dist/link-text.d.ts.map +1 -0
- package/dist/link-text.js +45 -0
- package/dist/link-text.js.map +1 -0
- package/dist/outline/render.d.ts +3 -1
- package/dist/outline/render.d.ts.map +1 -1
- package/dist/outline/render.js +6 -0
- package/dist/outline/render.js.map +1 -1
- package/dist/outline/structure-render.d.ts +15 -0
- package/dist/outline/structure-render.d.ts.map +1 -0
- package/dist/outline/structure-render.js +80 -0
- package/dist/outline/structure-render.js.map +1 -0
- package/dist/outline/structure-text.d.ts +30 -0
- package/dist/outline/structure-text.d.ts.map +1 -0
- package/dist/outline/structure-text.js +87 -0
- package/dist/outline/structure-text.js.map +1 -0
- package/dist/outline/text.d.ts +3 -0
- package/dist/outline/text.d.ts.map +1 -1
- package/dist/outline/text.js +3 -0
- package/dist/outline/text.js.map +1 -1
- package/dist/paragraph-runs.d.ts +7 -0
- package/dist/paragraph-runs.d.ts.map +1 -0
- package/dist/paragraph-runs.js +27 -0
- package/dist/paragraph-runs.js.map +1 -0
- package/dist/person-forms.d.ts +30 -0
- package/dist/person-forms.d.ts.map +1 -0
- package/dist/person-forms.js +96 -0
- package/dist/person-forms.js.map +1 -0
- package/dist/plugin.d.ts +14 -0
- package/dist/plugin.d.ts.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/explain.d.ts +2 -0
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +3 -1
- package/dist/render/explain.js.map +1 -1
- package/dist/render/friendly.d.ts.map +1 -1
- package/dist/render/friendly.js +13 -1
- package/dist/render/friendly.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +8 -4
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/rules-table.d.ts +2 -0
- package/dist/render/rules-table.d.ts.map +1 -1
- package/dist/render/rules-table.js +1 -1
- package/dist/render/rules-table.js.map +1 -1
- package/dist/render/sarif.d.ts +7 -1
- package/dist/render/sarif.d.ts.map +1 -1
- package/dist/render/sarif.js +20 -1
- package/dist/render/sarif.js.map +1 -1
- package/dist/resolve-genre.d.ts +1 -2
- package/dist/resolve-genre.d.ts.map +1 -1
- package/dist/rule-guide.d.ts +2 -0
- package/dist/rule-guide.d.ts.map +1 -1
- package/dist/rule-guide.js +1 -0
- package/dist/rule-guide.js.map +1 -1
- package/dist/run.d.ts +3 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +33 -10
- package/dist/run.js.map +1 -1
- package/dist/sentence-load.d.ts +19 -0
- package/dist/sentence-load.d.ts.map +1 -0
- package/dist/sentence-load.js +70 -0
- package/dist/sentence-load.js.map +1 -0
- package/dist/spelling-variants.d.ts +17 -0
- package/dist/spelling-variants.d.ts.map +1 -0
- package/dist/spelling-variants.js +32 -0
- package/dist/spelling-variants.js.map +1 -0
- package/dist/spelling.d.ts +32 -0
- package/dist/spelling.d.ts.map +1 -0
- package/dist/spelling.js +54 -0
- package/dist/spelling.js.map +1 -0
- package/dist/structure/absolute-exception.d.ts +35 -0
- package/dist/structure/absolute-exception.d.ts.map +1 -0
- package/dist/structure/absolute-exception.js +70 -0
- package/dist/structure/absolute-exception.js.map +1 -0
- package/dist/structure/issues.d.ts +5 -0
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +22 -0
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/modal-conflict.d.ts +1 -0
- package/dist/structure/modal-conflict.d.ts.map +1 -1
- package/dist/structure/modal-conflict.js +1 -1
- package/dist/structure/modal-conflict.js.map +1 -1
- package/dist/structure/reference-text.d.ts +29 -0
- package/dist/structure/reference-text.d.ts.map +1 -0
- package/dist/structure/reference-text.js +79 -0
- package/dist/structure/reference-text.js.map +1 -0
- package/dist/structure-shape/baseline-load.d.ts +4 -0
- package/dist/structure-shape/baseline-load.d.ts.map +1 -0
- package/dist/structure-shape/baseline-load.js +17 -0
- package/dist/structure-shape/baseline-load.js.map +1 -0
- package/dist/structure-shape/baseline.d.ts +19 -0
- package/dist/structure-shape/baseline.d.ts.map +1 -0
- package/dist/structure-shape/baseline.js +44 -0
- package/dist/structure-shape/baseline.js.map +1 -0
- package/dist/structure-shape/features.d.ts +25 -0
- package/dist/structure-shape/features.d.ts.map +1 -0
- package/dist/structure-shape/features.js +149 -0
- package/dist/structure-shape/features.js.map +1 -0
- package/dist/structure-shape/heading-words.d.ts +14 -0
- package/dist/structure-shape/heading-words.d.ts.map +1 -0
- package/dist/structure-shape/heading-words.js +54 -0
- package/dist/structure-shape/heading-words.js.map +1 -0
- package/dist/structure-shape/of-document.d.ts +5 -0
- package/dist/structure-shape/of-document.d.ts.map +1 -0
- package/dist/structure-shape/of-document.js +6 -0
- package/dist/structure-shape/of-document.js.map +1 -0
- package/dist/structure-shape/restatement.d.ts +11 -0
- package/dist/structure-shape/restatement.d.ts.map +1 -0
- package/dist/structure-shape/restatement.js +32 -0
- package/dist/structure-shape/restatement.js.map +1 -0
- package/dist/structure-shape/score.d.ts +30 -0
- package/dist/structure-shape/score.d.ts.map +1 -0
- package/dist/structure-shape/score.js +37 -0
- package/dist/structure-shape/score.js.map +1 -0
- package/dist/yaml-values.d.ts +13 -0
- package/dist/yaml-values.d.ts.map +1 -0
- package/dist/yaml-values.js +58 -0
- package/dist/yaml-values.js.map +1 -0
- package/genres.yaml +103 -1
- package/package.json +8 -3
- package/rules/absolute-exception.yaml +83 -0
- package/rules/abstract-length.yaml +130 -0
- package/rules/adversative-ga-repeat.yaml +58 -0
- package/rules/ai-generated-composite.yaml +2 -1
- package/rules/ai-structure.yaml +202 -0
- package/rules/ai-tell.yaml +1 -1
- package/rules/announcing-opener.yaml +1 -1
- package/rules/article-sound.yaml +58 -0
- package/rules/bold-label-list.yaml +3 -3
- package/rules/bracket-nesting.yaml +74 -0
- package/rules/chat-citation-residue.yaml +77 -0
- package/rules/citation-reference-mismatch.yaml +110 -0
- package/rules/citation-style-mix.yaml +109 -0
- package/rules/clause-chain.yaml +59 -0
- package/rules/colon-lead-in.yaml +3 -3
- package/rules/contrast-framing.yaml +1 -1
- package/rules/cross-doc-broken-link.yaml +83 -0
- package/rules/cross-doc-term-variant.yaml +73 -0
- package/rules/date-format-consistency.yaml +85 -0
- package/rules/date-without-year.yaml +70 -0
- package/rules/demonstrative-opener-run.yaml +59 -0
- package/rules/doubled-nado.yaml +57 -0
- package/rules/duration-mismatch.yaml +73 -0
- package/rules/elapsed-years-mismatch.yaml +79 -0
- package/rules/emoji-heading.yaml +128 -0
- package/rules/empty-list-item.yaml +85 -0
- package/rules/empty-table-cell.yaml +89 -0
- package/rules/fact-conflict.yaml +110 -0
- package/rules/figure-reference-order.yaml +109 -0
- package/rules/heading-numbering-mix.yaml +140 -0
- package/rules/homophone-slip.yaml +58 -0
- package/rules/idiom-misuse.yaml +60 -0
- package/rules/katakana-density.yaml +93 -0
- package/rules/known-misspelling.yaml +76 -0
- package/rules/list-item-form-mix.yaml +134 -0
- package/rules/max-ten.yaml +59 -0
- package/rules/misconversion.yaml +61 -0
- package/rules/no-lead.yaml +95 -0
- package/rules/number-style-consistency.yaml +105 -0
- package/rules/number-without-unit.yaml +96 -0
- package/rules/one-sentence-paragraph-run.yaml +95 -0
- package/rules/orthographic-variant.yaml +87 -0
- package/rules/paragraph-restatement.yaml +96 -0
- package/rules/person-consistency.yaml +59 -0
- package/rules/redundant-expression.yaml +76 -0
- package/rules/reference-title-mismatch.yaml +101 -0
- package/rules/reference-topic-missing.yaml +101 -0
- package/rules/relative-date-mismatch.yaml +71 -0
- package/rules/rule-of-three.yaml +3 -3
- package/rules/section-length-uniformity.yaml +3 -3
- package/rules/sentence-initial-so.yaml +58 -0
- package/rules/sentence-rhythm.yaml +1 -1
- package/rules/stock-transition.yaml +1 -1
- package/rules/summary-fact-mismatch.yaml +122 -0
- package/rules/table-header-variant.yaml +112 -0
- package/rules/teki-overuse.yaml +59 -0
- package/rules/title-length.yaml +120 -0
- package/rules/topic-predicate-distance.yaml +59 -0
- package/rules/translationese-density.yaml +62 -0
- package/rules/unfilled-placeholder.yaml +8 -11
- package/rules/unit-mismatch.yaml +110 -0
- package/rules/unknown-word.yaml +62 -0
- package/rules/vague-link-text.yaml +77 -0
- package/rules/vague-word-density.yaml +89 -0
- package/rules/very-adjective.yaml +61 -0
- package/rules/weasel-word.yaml +60 -0
- package/rules/wordy-phrase.yaml +61 -0
- package/skills/chaff/SKILL.md +14 -6
- package/src/baseline.ts +17 -4
- package/src/check-source.ts +75 -0
- package/src/checks.ts +3 -3
- package/src/cli-args.ts +7 -1
- package/src/cli-text.ts +26 -6
- package/src/cli.ts +54 -48
- package/src/commands/compare.ts +9 -5
- package/src/commands/eval.ts +2 -2
- package/src/commands/fix-plan.ts +3 -1
- package/src/commands/grade-baseline.ts +44 -0
- package/src/commands/grade.ts +191 -0
- package/src/commands/outline.ts +4 -3
- package/src/commands/read-document.ts +17 -8
- package/src/commands/suppressions.ts +3 -2
- package/src/commands/test.ts +2 -2
- package/src/commands/tree.ts +19 -12
- package/src/compare/distinct.ts +9 -2
- package/src/compare/proper-nouns.ts +11 -7
- package/src/config/load.ts +8 -3
- package/src/config/yaml-file.ts +65 -0
- package/src/correction-edit.ts +43 -0
- package/src/cross-run.ts +107 -0
- package/src/cross-variants.ts +55 -0
- package/src/cross-votes.ts +29 -0
- package/src/date-format.ts +123 -0
- package/src/derived/date-arithmetic.ts +63 -0
- package/src/derived/durations.ts +52 -0
- package/src/derived/elapsed.ts +125 -0
- package/src/derived/relative-dates.ts +96 -0
- package/src/derived/sentence-buckets.ts +29 -0
- package/src/detectors/absolute-exception.ts +102 -0
- package/src/detectors/abstract-length.ts +126 -0
- package/src/detectors/ai-phrasing.ts +12 -14
- package/src/detectors/ai-structure.ts +26 -0
- package/src/detectors/blank-structure.ts +147 -0
- package/src/detectors/chat-citation.ts +50 -0
- package/src/detectors/citation-entry.ts +94 -0
- package/src/detectors/citation-marks.ts +205 -0
- package/src/detectors/citation-style.ts +46 -0
- package/src/detectors/cross-link.ts +82 -0
- package/src/detectors/cross-registry/cross-doc-broken-link.ts +4 -0
- package/src/detectors/cross-registry/cross-doc-term-variant.ts +4 -0
- package/src/detectors/cross-variant.ts +77 -0
- package/src/detectors/date-format.ts +29 -0
- package/src/detectors/date-year.ts +91 -0
- package/src/detectors/derived-numbers.ts +191 -0
- package/src/detectors/document-shape.ts +107 -0
- package/src/detectors/emoji-heading.ts +17 -0
- package/src/detectors/fact-consistency.ts +54 -0
- package/src/detectors/figure-order.ts +81 -0
- package/src/detectors/heading-numbering.ts +38 -0
- package/src/detectors/index.ts +18 -150
- package/src/detectors/invisible-character.ts +3 -3
- package/src/detectors/katakana-density.ts +62 -0
- package/src/detectors/known-correction.ts +89 -0
- package/src/detectors/lexicon-match.ts +1 -1
- package/src/detectors/lexicon.ts +3 -0
- package/src/detectors/list-parallel.ts +155 -0
- package/src/detectors/long-vowel.ts +4 -4
- package/src/detectors/misuse-match.ts +28 -0
- package/src/detectors/modal-conflict.ts +1 -1
- package/src/detectors/next-word.ts +156 -0
- package/src/detectors/number-style.ts +230 -0
- package/src/detectors/number-unit.ts +146 -0
- package/src/detectors/orthographic-variant.ts +152 -0
- package/src/detectors/paragraph-restatement.ts +68 -0
- package/src/detectors/paragraph-run.ts +27 -0
- package/src/detectors/person-consistency.ts +29 -0
- package/src/detectors/placeholder-text.ts +62 -5
- package/src/detectors/reference-text.ts +44 -0
- package/src/detectors/registry/absolute-exception.ts +4 -0
- package/src/detectors/registry/abstract-length.ts +4 -0
- package/src/detectors/registry/acronym-expansion-conflict.ts +4 -0
- package/src/detectors/registry/adverb-density.ts +4 -0
- package/src/detectors/registry/agentless-passive.ts +4 -0
- package/src/detectors/registry/agreement-slip.ts +4 -0
- package/src/detectors/registry/ai-structure.ts +4 -0
- package/src/detectors/registry/ai-tell.ts +4 -0
- package/src/detectors/registry/announced-count.ts +4 -0
- package/src/detectors/registry/article-sound.ts +4 -0
- package/src/detectors/registry/assistant-residue.ts +4 -0
- package/src/detectors/registry/bold-label-list.ts +4 -0
- package/src/detectors/registry/bracket-nesting.ts +4 -0
- package/src/detectors/registry/broken-link.ts +4 -0
- package/src/detectors/registry/chat-citation-residue.ts +4 -0
- package/src/detectors/registry/citation-entry.ts +4 -0
- package/src/detectors/registry/citation-style.ts +4 -0
- package/src/detectors/registry/clause-chain.ts +4 -0
- package/src/detectors/registry/colon-lead-in.ts +4 -0
- package/src/detectors/registry/concrete-evidence.ts +4 -0
- package/src/detectors/registry/conjunction-run.ts +4 -0
- package/src/detectors/registry/contraction-mix.ts +4 -0
- package/src/detectors/registry/contrast-framing.ts +4 -0
- package/src/detectors/registry/count-per-section.ts +4 -0
- package/src/detectors/registry/cushion-density.ts +4 -0
- package/src/detectors/registry/custom-pattern.ts +4 -0
- package/src/detectors/registry/custom-tokens.ts +4 -0
- package/src/detectors/registry/custom-words.ts +4 -0
- package/src/detectors/registry/dangling-figure.ts +4 -0
- package/src/detectors/registry/dangling-reference.ts +4 -0
- package/src/detectors/registry/dash-density.ts +4 -0
- package/src/detectors/registry/date-format.ts +4 -0
- package/src/detectors/registry/date-order.ts +4 -0
- package/src/detectors/registry/date-range-reversed.ts +4 -0
- package/src/detectors/registry/date-weekday-mismatch.ts +4 -0
- package/src/detectors/registry/date-without-year.ts +4 -0
- package/src/detectors/registry/doubled-particle.ts +4 -0
- package/src/detectors/registry/doubled-punctuation.ts +4 -0
- package/src/detectors/registry/doubled-word.ts +4 -0
- package/src/detectors/registry/duplicate-definition.ts +4 -0
- package/src/detectors/registry/duplicate-heading.ts +4 -0
- package/src/detectors/registry/duration-mismatch.ts +4 -0
- package/src/detectors/registry/elapsed-years-mismatch.ts +4 -0
- package/src/detectors/registry/emoji-density.ts +4 -0
- package/src/detectors/registry/emoji-heading.ts +4 -0
- package/src/detectors/registry/empty-list-item.ts +4 -0
- package/src/detectors/registry/empty-section.ts +4 -0
- package/src/detectors/registry/empty-table-cell.ts +4 -0
- package/src/detectors/registry/expletive.ts +4 -0
- package/src/detectors/registry/fact-conflict.ts +4 -0
- package/src/detectors/registry/figure-order.ts +4 -0
- package/src/detectors/registry/fullwidth-alnum.ts +4 -0
- package/src/detectors/registry/hankaku-kana.ts +4 -0
- package/src/detectors/registry/heading-echo.ts +4 -0
- package/src/detectors/registry/heading-level-skip.ts +4 -0
- package/src/detectors/registry/heading-numbering.ts +4 -0
- package/src/detectors/registry/hedging.ts +4 -0
- package/src/detectors/registry/image-alt-text.ts +4 -0
- package/src/detectors/registry/intensified-adjective.ts +4 -0
- package/src/detectors/registry/internal-jargon.ts +4 -0
- package/src/detectors/registry/invisible-character.ts +4 -0
- package/src/detectors/registry/kanji-run.ts +4 -0
- package/src/detectors/registry/katakana-density.ts +4 -0
- package/src/detectors/registry/katakana-long-vowel.ts +4 -0
- package/src/detectors/registry/known-correction.ts +4 -0
- package/src/detectors/registry/kutoten-consistency.ts +4 -0
- package/src/detectors/registry/latin-spacing.ts +4 -0
- package/src/detectors/registry/list-item-form-mix.ts +4 -0
- package/src/detectors/registry/middle-dot.ts +4 -0
- package/src/detectors/registry/misuse-match.ts +4 -0
- package/src/detectors/registry/modal-conflict.ts +4 -0
- package/src/detectors/registry/name-variant.ts +4 -0
- package/src/detectors/registry/ngram-repetition.ts +4 -0
- package/src/detectors/registry/no-lead.ts +4 -0
- package/src/detectors/registry/nominalization.ts +4 -0
- package/src/detectors/registry/noun-ending.ts +4 -0
- package/src/detectors/registry/number-style-consistency.ts +4 -0
- package/src/detectors/registry/number-without-unit.ts +4 -0
- package/src/detectors/registry/numbering-gap.ts +4 -0
- package/src/detectors/registry/one-sentence-paragraph-run.ts +4 -0
- package/src/detectors/registry/opener-pile.ts +4 -0
- package/src/detectors/registry/opener-run.ts +4 -0
- package/src/detectors/registry/orthographic-variant.ts +4 -0
- package/src/detectors/registry/outside-announced-list.ts +4 -0
- package/src/detectors/registry/oxford-comma.ts +4 -0
- package/src/detectors/registry/paragraph-length.ts +4 -0
- package/src/detectors/registry/paragraph-restatement.ts +4 -0
- package/src/detectors/registry/paragraph-variance.ts +4 -0
- package/src/detectors/registry/percent-sum-mismatch.ts +4 -0
- package/src/detectors/registry/person-mix.ts +4 -0
- package/src/detectors/registry/phrase-count.ts +4 -0
- package/src/detectors/registry/phrase-density.ts +4 -0
- package/src/detectors/registry/phrase-match.ts +4 -0
- package/src/detectors/registry/preamble-length.ts +4 -0
- package/src/detectors/registry/preferred-term.ts +4 -0
- package/src/detectors/registry/proper-noun-density.ts +4 -0
- package/src/detectors/registry/ra-nuki.ts +4 -0
- package/src/detectors/registry/reference-title-mismatch.ts +4 -0
- package/src/detectors/registry/reference-topic-missing.ts +4 -0
- package/src/detectors/registry/relative-date-mismatch.ts +4 -0
- package/src/detectors/registry/repeated-conjunction.ts +4 -0
- package/src/detectors/registry/repeated-head.ts +4 -0
- package/src/detectors/registry/required-sections.ts +4 -0
- package/src/detectors/registry/requirement-modal.ts +4 -0
- package/src/detectors/registry/requirement-smell.ts +4 -0
- package/src/detectors/registry/rule-of-three.ts +4 -0
- package/src/detectors/registry/section-uniformity.ts +4 -0
- package/src/detectors/registry/sentence-comma-count.ts +4 -0
- package/src/detectors/registry/sentence-conjunctive-count.ts +4 -0
- package/src/detectors/registry/sentence-ending.ts +4 -0
- package/src/detectors/registry/sentence-length.ts +4 -0
- package/src/detectors/registry/sentence-rhythm.ts +4 -0
- package/src/detectors/registry/sentence-word-count.ts +4 -0
- package/src/detectors/registry/space-before-punctuation.ts +4 -0
- package/src/detectors/registry/spelling-variety.ts +4 -0
- package/src/detectors/registry/stock-transition.ts +4 -0
- package/src/detectors/registry/stray-space.ts +4 -0
- package/src/detectors/registry/summary-fact-mismatch.ts +4 -0
- package/src/detectors/registry/table-header-variant.ts +4 -0
- package/src/detectors/registry/title-case-mix.ts +4 -0
- package/src/detectors/registry/title-length.ts +4 -0
- package/src/detectors/registry/topic-predicate-distance.ts +4 -0
- package/src/detectors/registry/total-mismatch.ts +4 -0
- package/src/detectors/registry/unbalanced-bracket.ts +4 -0
- package/src/detectors/registry/undefined-acronym.ts +4 -0
- package/src/detectors/registry/unfilled-placeholder.ts +4 -0
- package/src/detectors/registry/unit-mismatch.ts +4 -0
- package/src/detectors/registry/unknown-word.ts +4 -0
- package/src/detectors/registry/unqualified-superlative.ts +4 -0
- package/src/detectors/registry/unused-definition.ts +4 -0
- package/src/detectors/registry/url-run-on.ts +4 -0
- package/src/detectors/registry/use-before-definition.ts +4 -0
- package/src/detectors/registry/vague-density.ts +4 -0
- package/src/detectors/registry/vague-figure-pointer.ts +4 -0
- package/src/detectors/registry/vague-link-text.ts +4 -0
- package/src/detectors/registry-files.ts +12 -0
- package/src/detectors/registry-load.ts +23 -0
- package/src/detectors/relative-dates.ts +113 -0
- package/src/detectors/sentence-counts.ts +112 -0
- package/src/detectors/sentence-load.ts +45 -0
- package/src/detectors/spelling-variety.ts +2 -2
- package/src/detectors/table-header.ts +174 -0
- package/src/detectors/team.ts +12 -4
- package/src/detectors/unit-consistency.ts +55 -0
- package/src/detectors/unknown-word.ts +43 -0
- package/src/detectors/vague-link-text.ts +12 -0
- package/src/document-reading.ts +25 -0
- package/src/document.ts +8 -6
- package/src/experimental-alone.ts +21 -0
- package/src/facts/fact-conflicts.ts +64 -0
- package/src/facts/fact-scope.ts +141 -0
- package/src/facts/fact-values.ts +110 -0
- package/src/facts/labelled-facts.ts +131 -0
- package/src/facts/measures.ts +54 -0
- package/src/facts/table-facts.ts +71 -0
- package/src/facts/trim-marks.ts +18 -0
- package/src/facts/unit-conflicts.ts +45 -0
- package/src/figure-references.ts +20 -1
- package/src/files.ts +16 -10
- package/src/fix-plan/mode.ts +8 -2
- package/src/fix-plan/plan.ts +23 -2
- package/src/fix-plan/render.ts +18 -0
- package/src/fix-plan/structure-target-text.ts +90 -0
- package/src/fix-plan/structure-targets.ts +46 -0
- package/src/fix-plan/text.ts +3 -0
- package/src/grade/baseline-text.ts +80 -0
- package/src/grade/baseline.ts +140 -0
- package/src/grade/checks.ts +73 -0
- package/src/grade/context-support.ts +60 -0
- package/src/grade/contexts.ts +53 -0
- package/src/grade/grade-item.ts +133 -0
- package/src/grade/item.ts +208 -0
- package/src/grade/order.ts +10 -0
- package/src/grade/pairing.ts +22 -0
- package/src/grade/rates.ts +39 -0
- package/src/grade/render-baseline.ts +74 -0
- package/src/grade/render-markdown.ts +62 -0
- package/src/grade/render-variants.ts +115 -0
- package/src/grade/render.ts +84 -0
- package/src/grade/result-name.ts +9 -0
- package/src/grade/result.ts +82 -0
- package/src/grade/results-read.ts +111 -0
- package/src/grade/rubric-verdict.ts +86 -0
- package/src/grade/rubric.ts +192 -0
- package/src/grade/scorer.ts +33 -0
- package/src/grade/setup.ts +43 -0
- package/src/grade/stamp.ts +60 -0
- package/src/grade/summary.ts +112 -0
- package/src/grade/text.ts +164 -0
- package/src/grade/variants-input.ts +54 -0
- package/src/grade/variants-text.ts +88 -0
- package/src/grade/variants.ts +118 -0
- package/src/grade/verdict.ts +27 -0
- package/src/grade-api.ts +184 -0
- package/src/heading-numbering.ts +106 -0
- package/src/kana-spelling.ts +49 -0
- package/src/link-text.ts +46 -0
- package/src/outline/render.ts +9 -2
- package/src/outline/structure-render.ts +101 -0
- package/src/outline/structure-text.ts +124 -0
- package/src/outline/text.ts +5 -0
- package/src/paragraph-runs.ts +30 -0
- package/src/person-forms.ts +119 -0
- package/src/plugin.ts +13 -0
- package/src/reasons.ts +4 -0
- package/src/render/explain.ts +7 -1
- package/src/render/friendly.ts +17 -1
- package/src/render/rules-json.ts +8 -4
- package/src/render/rules-table.ts +1 -1
- package/src/render/sarif.ts +31 -1
- package/src/resolve-genre.ts +1 -1
- package/src/rule-guide.ts +3 -0
- package/src/run.ts +74 -49
- package/src/sentence-load.ts +77 -0
- package/src/spelling-variants.ts +42 -0
- package/src/spelling.ts +81 -0
- package/src/structure/absolute-exception.ts +104 -0
- package/src/structure/issues.ts +22 -0
- package/src/structure/modal-conflict.ts +1 -1
- package/src/structure/reference-text.ts +114 -0
- package/src/structure-shape/baseline-load.ts +18 -0
- package/src/structure-shape/baseline.ts +62 -0
- package/src/structure-shape/features.ts +189 -0
- package/src/structure-shape/heading-words.ts +71 -0
- package/src/structure-shape/of-document.ts +7 -0
- package/src/structure-shape/restatement.ts +41 -0
- package/src/structure-shape/score.ts +65 -0
- package/src/yaml-values.ts +61 -0
- package/structure-baseline.yaml +289 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Detector, Finding } from "../plugin.ts";
|
|
2
|
+
import { findingAt, markupOf } from "./markup-finding.ts";
|
|
3
|
+
import { bareLinkText, comparableLinkText, isVagueLinkText, linkTextOf } from "../link-text.ts";
|
|
4
|
+
|
|
5
|
+
/** 言葉がそれだけでは行き先を言わないリンク(`[こちら](url)`、`[click here](url)`)。どの言葉かは語彙表 vague-link-text が言う。 */
|
|
6
|
+
export const vagueLinkText: Detector = (doc, options): Finding[] => {
|
|
7
|
+
const vague = new Set((options.lexicon ?? []).map((entry) => comparableLinkText(entry.pattern)));
|
|
8
|
+
return (markupOf(doc)?.links ?? []).flatMap((link) => {
|
|
9
|
+
const text = linkTextOf(doc.source.slice(link.start, link.end));
|
|
10
|
+
return text !== undefined && isVagueLinkText(text, vague) ? [findingAt(doc, link, { text: bareLinkText(text) })] : [];
|
|
11
|
+
});
|
|
12
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isMarkdownPath } from "./structure/markdown-path.ts";
|
|
2
|
+
import { parse, readMarkdown } from "./markdown-read.ts";
|
|
3
|
+
import type { MarkdownNode as Node } from "./markdown-node.ts";
|
|
4
|
+
import type { Span } from "./plugin.ts";
|
|
5
|
+
import { isYamlPath, outsideValues, valuesText, yamlValueSpans } from "./yaml-values.ts";
|
|
6
|
+
|
|
7
|
+
/** A paragraph node per YAML value: a value is never read as Markdown (its indentation is not code) nor run into the next. */
|
|
8
|
+
const valuesRoot = (values: readonly Span[]): Node => ({
|
|
9
|
+
type: "root",
|
|
10
|
+
children: values.map((span) => ({ type: "paragraph", position: { start: { offset: span.start }, end: { offset: span.end } }, children: [] })),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* How a file is read: Markdown, a YAML file's string values, or plain text. text: what layout and structure read, which for YAML
|
|
15
|
+
* is the values alone, keys and comments blanked in place. extra: what is not prose beyond what the tree says (YAML's keys).
|
|
16
|
+
*/
|
|
17
|
+
export const readingOf = (path: string, source: string): { root: Node; syntax: readonly Span[]; text: string; extra: readonly Span[] } => {
|
|
18
|
+
if (isMarkdownPath(path)) return { ...readMarkdown(source), text: source, extra: [] };
|
|
19
|
+
const values = isYamlPath(path) ? yamlValueSpans(source) : undefined;
|
|
20
|
+
if (values === undefined) return { root: parse(source), syntax: [], text: source, extra: [] };
|
|
21
|
+
return { root: valuesRoot(values), syntax: [], text: valuesText(source, values), extra: outsideValues(values, source.length) };
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** The text a document's structure is read from: the file, or for a YAML file its values alone. */
|
|
25
|
+
export const structureText = (path: string, source: string): string => readingOf(path, source).text;
|
package/src/document.ts
CHANGED
|
@@ -11,13 +11,14 @@ import { speakerLabels } from "./speaker-labels.ts";
|
|
|
11
11
|
import type { Outline } from "./structure/build.ts";
|
|
12
12
|
import { lazyTree } from "./structure/lazy-tree.ts";
|
|
13
13
|
import { isMarkdownPath } from "./structure/markdown-path.ts";
|
|
14
|
+
import { readingOf } from "./document-reading.ts";
|
|
14
15
|
import { layoutMasks, textOutline } from "./page-furniture.ts";
|
|
15
16
|
import { tokenizedLexicons } from "./lexicon-tokens.ts";
|
|
16
17
|
import { plainSource } from "./plain-source.ts";
|
|
17
18
|
import { inPageAnchors, isInPageNavigation, isNavigationList, type InPageAnchors } from "./in-page-nav.ts";
|
|
18
19
|
import { eachPreOrder } from "./tree-walk.ts";
|
|
19
20
|
import { alertReader } from "./template-syntax.ts";
|
|
20
|
-
import { opaqueSpans,
|
|
21
|
+
import { opaqueSpans, readMarkdown, spansOfType } from "./markdown-read.ts";
|
|
21
22
|
import { spanOf, type MarkdownNode as Node } from "./markdown-node.ts";
|
|
22
23
|
import { emailParts, emailVocabulary } from "./email-parts.ts";
|
|
23
24
|
import { cutTextSpans } from "./span-cut.ts";
|
|
@@ -324,13 +325,13 @@ const teamLexicons = (adapter: LanguageAdapter, team: TeamRules): LanguageAdapte
|
|
|
324
325
|
|
|
325
326
|
const documentOf = (path: string, source: string, adapter: LanguageAdapter, team: TeamRules, profile: DocumentProfile | undefined): ProseDocument => {
|
|
326
327
|
const markdown = isMarkdownPath(path);
|
|
327
|
-
const { root, syntax } =
|
|
328
|
+
const { root, syntax, text, extra } = readingOf(path, source);
|
|
328
329
|
const anchors = inPageAnchors(root);
|
|
329
|
-
const emailLayout = emailParts(
|
|
330
|
+
const emailLayout = emailParts(text, emailVocabulary(adapter.lexicons));
|
|
330
331
|
// 強調の記号は「本文でないもの」だが、太字の数を数えるときの「覆われた場所」ではない。
|
|
331
332
|
// 同じ集合にすると、太字が自分の記号のせいで覆われた場所にあることになり、1 つも数えられなくなる。
|
|
332
333
|
// ページのヘッダーとフッター(テキストの文書)と、線で描いた図も本文ではない。
|
|
333
|
-
const blocks = [...collectMasks(root, source, anchors, syntax), ...layoutMasks(root,
|
|
334
|
+
const blocks = [...collectMasks(root, source, anchors, syntax), ...layoutMasks(root, text, markdown), ...emailLayout.furniture, ...extra];
|
|
334
335
|
const prose = proseOf(source, [...blocks, ...emphasisSpans(root, source)]);
|
|
335
336
|
// ページの案内は段落としても数えない。数えると、目次の行が「本題までの段落」に入る。メールのヘッダーや署名の行は段落から切り取る。
|
|
336
337
|
const paragraphSpans = cutTextSpans(
|
|
@@ -347,10 +348,10 @@ const documentOf = (path: string, source: string, adapter: LanguageAdapter, team
|
|
|
347
348
|
const tagged = sentences.some((sentence) => sentence.tokens !== undefined);
|
|
348
349
|
const structure = lazyTree(adapter.structure, () => ({
|
|
349
350
|
path,
|
|
350
|
-
source,
|
|
351
|
+
source: text,
|
|
351
352
|
language: adapter.id,
|
|
352
353
|
// テキストの文書は、ページの飾りを覆って読む。フッターの「Section 9」を木の節にしない。
|
|
353
|
-
outline: markdown ? outlineOf(root, source, syntax, emailLayout.replyQuotes) : textOutline(
|
|
354
|
+
outline: markdown ? outlineOf(root, source, syntax, emailLayout.replyQuotes) : textOutline(text, emailLayout.replyQuotes),
|
|
354
355
|
markdown,
|
|
355
356
|
profile,
|
|
356
357
|
}));
|
|
@@ -375,6 +376,7 @@ const documentOf = (path: string, source: string, adapter: LanguageAdapter, team
|
|
|
375
376
|
profile,
|
|
376
377
|
prose,
|
|
377
378
|
namedDocument: adapter.structure?.namedDocument,
|
|
379
|
+
dictionary: adapter.dictionary,
|
|
378
380
|
replyQuotes: emailLayout.replyQuotes,
|
|
379
381
|
get markup(): Markup {
|
|
380
382
|
return documentMarkup(root, source, markdown, [...emailLayout.replyQuotes, ...syntax]);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Level, RuleDefinition } from "./plugin.ts";
|
|
2
|
+
import { standingIn } from "./rule-genres.ts";
|
|
3
|
+
|
|
4
|
+
type Written = { readonly rules: Readonly<Record<string, Level>>; readonly experimental: boolean };
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Whether naming the rule in chaff.yaml (npx chaffjs enable <id>) is all it takes to run it: it is off only because it is
|
|
8
|
+
* experimental. Not when chaff.yaml already names it, the genre's preset decides it, the genre is not one it serves, or
|
|
9
|
+
* the language is not one it reads; enable would change nothing there, and saying so would mislead.
|
|
10
|
+
*/
|
|
11
|
+
export const offOnlyAsExperimental = (
|
|
12
|
+
rule: Pick<RuleDefinition, "id" | "status" | "use_for" | "languages">,
|
|
13
|
+
written: Written,
|
|
14
|
+
genre: string,
|
|
15
|
+
preset: Readonly<Record<string, Level>>,
|
|
16
|
+
language: string,
|
|
17
|
+
): boolean =>
|
|
18
|
+
!written.experimental &&
|
|
19
|
+
written.rules[rule.id] === undefined &&
|
|
20
|
+
(rule.languages === undefined || rule.languages.includes(language)) &&
|
|
21
|
+
standingIn(rule, genre, preset).kind === "experimental";
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { comparable, sameValue, type FactValue } from "./fact-values.ts";
|
|
2
|
+
import type { ScopedFact } from "./fact-scope.ts";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 同じ名前に違う値。比べるのは同じ種類で比べられる値どうし(同じ単位の数量、重なる細かさの日付、名前)。
|
|
6
|
+
* 一つの範囲の中で値が二通りなら、最初に書いた値と違うほうを言う。三通り以上なら、催しごとに並べた一覧と読んで言わない。
|
|
7
|
+
* 要約や冒頭の値は、本文の同じ名前の値と比べる。本文の値が一通りに揃っていて、要約の値がそれと違うときだけ言う。
|
|
8
|
+
*/
|
|
9
|
+
export type FactConflict = { readonly fact: ScopedFact; readonly other: FactValue };
|
|
10
|
+
|
|
11
|
+
const MAX_DISTINCT = 2;
|
|
12
|
+
|
|
13
|
+
const groupBy = <T>(items: readonly T[], keyOf: (item: T) => string): T[][] => {
|
|
14
|
+
const groups = new Map<string, T[]>();
|
|
15
|
+
items.forEach((item) => {
|
|
16
|
+
const key = keyOf(item);
|
|
17
|
+
const group = groups.get(key);
|
|
18
|
+
if (group === undefined) groups.set(key, [item]);
|
|
19
|
+
else group.push(item);
|
|
20
|
+
});
|
|
21
|
+
return [...groups.values()];
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** 互いに違う値。同じ値(3,000円と3000円、10月5日と2026年10月5日)は一つに数える。 */
|
|
25
|
+
const distinctValues = (values: readonly FactValue[]): FactValue[] =>
|
|
26
|
+
values.reduce<FactValue[]>((kept, value) => (kept.some((seen) => sameValue(seen, value)) ? kept : [...kept, value]), []);
|
|
27
|
+
|
|
28
|
+
/** 互いに比べられる値の組に分ける(単位ごと、日付の細かさごと)。比べられない値は、別の組で比べる。 */
|
|
29
|
+
const comparableClasses = (facts: readonly ScopedFact[]): ScopedFact[][] =>
|
|
30
|
+
facts.reduce<ScopedFact[][]>((classes, fact) => {
|
|
31
|
+
const home = classes.find((members) => members[0] !== undefined && comparable(members[0].value, fact.value));
|
|
32
|
+
if (home === undefined) classes.push([fact]);
|
|
33
|
+
else home.push(fact);
|
|
34
|
+
return classes;
|
|
35
|
+
}, []);
|
|
36
|
+
|
|
37
|
+
/** 一つの組の中で値が二通りなら、最初の値と違う事実。 */
|
|
38
|
+
const conflictsInClass = (facts: readonly ScopedFact[]): FactConflict[] => {
|
|
39
|
+
const [first, ...rest] = facts;
|
|
40
|
+
if (first === undefined) return [];
|
|
41
|
+
if (distinctValues(facts.map((fact) => fact.value)).length !== MAX_DISTINCT) return [];
|
|
42
|
+
return rest.filter((fact) => !sameValue(first.value, fact.value)).map((fact) => ({ fact, other: first.value }));
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/** 記録の欄(繰り返す名前)は比べない。 */
|
|
46
|
+
const conflictsIn = (facts: readonly ScopedFact[]): FactConflict[] =>
|
|
47
|
+
facts.some((fact) => fact.record) ? [] : comparableClasses(facts).flatMap(conflictsInClass);
|
|
48
|
+
|
|
49
|
+
/** 同じ範囲の中で、同じ名前に二通りの値。 */
|
|
50
|
+
export const scopeConflicts = (facts: readonly ScopedFact[]): FactConflict[] => groupBy(facts, (fact) => `${fact.scope}\u0000${fact.key}`).flatMap(conflictsIn);
|
|
51
|
+
|
|
52
|
+
const isSummary = (fact: ScopedFact): boolean => fact.part !== "body";
|
|
53
|
+
|
|
54
|
+
/** 要約か冒頭の値が、本文で揃って書かれた値と違う。 */
|
|
55
|
+
const summaryConflict = (fact: ScopedFact, body: readonly ScopedFact[]): FactConflict[] => {
|
|
56
|
+
const values = distinctValues(body.filter((other) => other.key === fact.key && comparable(fact.value, other.value)).map((other) => other.value));
|
|
57
|
+
const only = values.length === 1 ? values[0] : undefined;
|
|
58
|
+
return only === undefined || sameValue(fact.value, only) ? [] : [{ fact, other: only }];
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const summaryConflicts = (facts: readonly ScopedFact[]): FactConflict[] => {
|
|
62
|
+
const body = facts.filter((fact) => !isSummary(fact) && !fact.record);
|
|
63
|
+
return facts.filter(isSummary).flatMap((fact) => summaryConflict(fact, body));
|
|
64
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { StructureNode } from "../plugin.ts";
|
|
2
|
+
import { inDocumentOrder } from "../structure/issues.ts";
|
|
3
|
+
import { lineNumberAt, linesOf, type Line } from "../structure/lines.ts";
|
|
4
|
+
import type { Fact } from "./labelled-facts.ts";
|
|
5
|
+
import { withoutEdgeMarks } from "./trim-marks.ts";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 事実の居場所。同じ名前でも、違う見出しの下、違う親の項目の下、太字だけの行や「第2回:」のような小見出しの行の後ろは、
|
|
9
|
+
* 別の催しや別の場合の値として比べない。scope が同じ事実どうしだけを比べる。
|
|
10
|
+
* part は冒頭(最初の見出しより前)、要約の節(概要、Summary)、本文のどれか。
|
|
11
|
+
*/
|
|
12
|
+
export type FactPart = "opening" | "summary" | "body";
|
|
13
|
+
|
|
14
|
+
/** record: 同じ範囲で、行の頭に何度も書かれた名前。催しや論文ごとの記録の欄で、値が違っても食い違いではない。 */
|
|
15
|
+
export type ScopedFact = Fact & { readonly scope: string; readonly part: FactPart; readonly record: boolean };
|
|
16
|
+
|
|
17
|
+
const CONTAINERS: ReadonlySet<string> = new Set(["section", "chapter", "article"]);
|
|
18
|
+
|
|
19
|
+
const LIST_ITEM = /^([ \t]*)(?:[-*+]|\d{1,3}[.)])[ \t]/u;
|
|
20
|
+
/** 小見出しの代わりの行: 太字だけの行(項目でもよい)、コロンで終わる短い行。 */
|
|
21
|
+
const BOLD_LINE = /^[ \t]*(?:[-*+][ \t]+)?(?:\*\*|__)[^*_]+(?:\*\*|__)[::]?[ \t]*$/u;
|
|
22
|
+
const COLON_LINE = /^[^|]{1,40}[::][ \t]*$/u;
|
|
23
|
+
|
|
24
|
+
const covers = (node: StructureNode, offset: number): boolean => node.span.start <= offset && offset < node.span.end;
|
|
25
|
+
|
|
26
|
+
const containersAt = (nodes: readonly StructureNode[], offset: number): StructureNode[] => nodes.filter((node) => covers(node, offset));
|
|
27
|
+
|
|
28
|
+
const INDENT = /^[ \t]*/u;
|
|
29
|
+
|
|
30
|
+
const indentOf = (line: Line | undefined): number => INDENT.exec(line?.text ?? "")?.[0].length ?? 0;
|
|
31
|
+
|
|
32
|
+
/** 字下げの無い地の文の行。そこより上の項目は、もう別の並び。 */
|
|
33
|
+
const leavesList = (line: Line): boolean => line.text.trim() !== "" && indentOf(line) === 0 && !LIST_ITEM.test(line.text);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 親の項目: 自分より浅い字下げで、上にある一番近い項目の行。項目の下に字下げして続けた行(項目の続き)も、その項目を親とする。
|
|
37
|
+
* 字下げの無い行には無い。
|
|
38
|
+
*/
|
|
39
|
+
const parentItem = (lines: readonly Line[], index: number): number => {
|
|
40
|
+
const indent = indentOf(lines[index]);
|
|
41
|
+
if (indent === 0) return -1;
|
|
42
|
+
for (let at = index - 1; at >= 0; at -= 1) {
|
|
43
|
+
const line = lines[at];
|
|
44
|
+
if (line === undefined || leavesList(line)) return -1;
|
|
45
|
+
if (LIST_ITEM.test(line.text) && indentOf(line) < indent) return at;
|
|
46
|
+
}
|
|
47
|
+
return -1;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const MAX_HEAD_LABEL = 24;
|
|
51
|
+
const HEAD_MARK = /^[ \t>]*(?:[-*+][ \t]+)?/u;
|
|
52
|
+
/** 同じ範囲で、行の頭にこれだけ書かれた名前は、繰り返す記録の欄(一覧の Title:、Comments:)。 */
|
|
53
|
+
const RECORD_REPEATS = 3;
|
|
54
|
+
|
|
55
|
+
/** 行の頭の「名前:」の名前。比べる名前と同じ書き方に揃える。 */
|
|
56
|
+
const headLabelOf = (line: Line): string | undefined => {
|
|
57
|
+
const text = line.text.replace(HEAD_MARK, "");
|
|
58
|
+
const colon = text.search(/[::|]/u);
|
|
59
|
+
if (colon <= 0 || text.charAt(colon) === "|") return undefined;
|
|
60
|
+
const label = withoutEdgeMarks(text.slice(0, colon));
|
|
61
|
+
return label === "" || label.length > MAX_HEAD_LABEL ? undefined : label.normalize("NFKC").toLowerCase();
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const isBreaker = (line: Line): boolean => BOLD_LINE.test(line.text) || (!LIST_ITEM.test(line.text) && COLON_LINE.test(line.text));
|
|
65
|
+
|
|
66
|
+
/** 行ごとに、それより前にある小見出しの代わりの行の数。節の始まりから事実の行までの数は、二つの差になる。 */
|
|
67
|
+
const breakerCounts = (lines: readonly Line[]): number[] =>
|
|
68
|
+
lines.reduce<number[]>(
|
|
69
|
+
(counts, line, index) => {
|
|
70
|
+
counts.push((counts[index] ?? 0) + (isBreaker(line) ? 1 : 0));
|
|
71
|
+
return counts;
|
|
72
|
+
},
|
|
73
|
+
[0],
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const lineIndexAt = (lines: readonly Line[], offset: number): number => (lineNumberAt(lines, offset) ?? 1) - 1;
|
|
77
|
+
|
|
78
|
+
const isSummaryHeading = (node: StructureNode, summaryWords: readonly string[]): boolean => {
|
|
79
|
+
const heading = String(node.attrs["heading"] ?? "")
|
|
80
|
+
.normalize("NFKC")
|
|
81
|
+
.toLowerCase()
|
|
82
|
+
.replace(/^[\d.\s]+/u, "")
|
|
83
|
+
.trim();
|
|
84
|
+
return summaryWords.some((word) => heading === word.toLowerCase());
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const TOP_LEVEL_HEADING = /^h\d+$/u;
|
|
88
|
+
|
|
89
|
+
/** 冒頭: 文書の頭か、表題の見出しの直下で、最初の小見出しより前。 */
|
|
90
|
+
const isOpening = (innermost: StructureNode | undefined, tree: StructureNode, offset: number): boolean => {
|
|
91
|
+
const owner = innermost ?? tree;
|
|
92
|
+
if (owner !== tree && !TOP_LEVEL_HEADING.test(owner.address)) return false;
|
|
93
|
+
const firstChild = owner.children.find((child) => CONTAINERS.has(child.kind));
|
|
94
|
+
return firstChild === undefined ? owner === tree : offset < firstChild.span.start;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const partOf = (around: readonly StructureNode[], tree: StructureNode, offset: number, summaryWords: readonly string[]): FactPart => {
|
|
98
|
+
if (around.some((node) => node.kind === "section" && isSummaryHeading(node, summaryWords))) return "summary";
|
|
99
|
+
return isOpening(around.at(-1), tree, offset) ? "opening" : "body";
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/** 名前ごとに、頭にその名前を書いた行の番号。 */
|
|
103
|
+
const headLines = (lines: readonly Line[]): ReadonlyMap<string, readonly number[]> => {
|
|
104
|
+
const found = new Map<string, number[]>();
|
|
105
|
+
lines.forEach((line, index) => {
|
|
106
|
+
const head = headLabelOf(line);
|
|
107
|
+
if (head === undefined) return;
|
|
108
|
+
const indexes = found.get(head);
|
|
109
|
+
if (indexes === undefined) found.set(head, [index]);
|
|
110
|
+
else indexes.push(index);
|
|
111
|
+
});
|
|
112
|
+
return found;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/** 範囲の行のうち、頭にその名前を書いた行の数。 */
|
|
116
|
+
const headCount = (heads: ReadonlyMap<string, readonly number[]>, from: number, to: number, key: string): number =>
|
|
117
|
+
(heads.get(key) ?? []).filter((index) => index >= from && index < to).length;
|
|
118
|
+
|
|
119
|
+
type Lines = { readonly lines: readonly Line[]; readonly breakers: readonly number[]; readonly heads: ReadonlyMap<string, readonly number[]> };
|
|
120
|
+
|
|
121
|
+
const scopeOf = (fact: Fact, innermost: StructureNode | undefined, at: Lines): { scope: string; record: boolean } => {
|
|
122
|
+
const index = lineIndexAt(at.lines, fact.value.start);
|
|
123
|
+
const from = innermost === undefined ? 0 : lineIndexAt(at.lines, innermost.span.start);
|
|
124
|
+
const to = innermost === undefined ? at.lines.length : lineIndexAt(at.lines, innermost.span.end - 1) + 1;
|
|
125
|
+
const scope = [innermost?.address ?? "doc", (at.breakers[index] ?? 0) - (at.breakers[from] ?? 0), parentItem(at.lines, index)].join("#");
|
|
126
|
+
return { scope, record: headCount(at.heads, from, to, fact.key) >= RECORD_REPEATS };
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/** 事実ごとに、比べてよい範囲と、文書のどの部分かを付ける。 */
|
|
130
|
+
export const scopedFacts = (facts: readonly Fact[], tree: StructureNode, source: string, summaryWords: readonly string[]): ScopedFact[] => {
|
|
131
|
+
if (facts.length === 0) return [];
|
|
132
|
+
const nodes = inDocumentOrder(tree).filter((node) => CONTAINERS.has(node.kind));
|
|
133
|
+
const lines = linesOf(source);
|
|
134
|
+
const at: Lines = { lines, breakers: breakerCounts(lines), heads: headLines(lines) };
|
|
135
|
+
return facts
|
|
136
|
+
.toSorted((left, right) => left.value.start - right.value.start)
|
|
137
|
+
.map((fact) => {
|
|
138
|
+
const around = containersAt(nodes, fact.value.start);
|
|
139
|
+
return { ...fact, ...scopeOf(fact, around.at(-1), at), part: partOf(around, tree, fact.value.start, summaryWords) };
|
|
140
|
+
});
|
|
141
|
+
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Span, StructureNode } from "../plugin.ts";
|
|
2
|
+
import { inDocumentOrder } from "../structure/issues.ts";
|
|
3
|
+
import { overlapsAny, spanIndex, type SpanIndex } from "../compare/spans.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 値として読むもの。木の数量と日付(`chaff compare` と同じ読み)と、品詞の読める言語では固有名詞。
|
|
7
|
+
* key は値の正体で、書き方が違っても同じ値なら同じ(3,000円と3000円、10月5日と10/5)。
|
|
8
|
+
*/
|
|
9
|
+
export type ValueKind = "quantity" | "date" | "name";
|
|
10
|
+
|
|
11
|
+
export type FactValue = Span & { readonly kind: ValueKind; readonly key: string; readonly unit: string };
|
|
12
|
+
|
|
13
|
+
const attr = (node: StructureNode, name: string): string => String(node.attrs[name] ?? "");
|
|
14
|
+
|
|
15
|
+
/** 数の前に書いた単位($300、$ 300)があれば、その始まり。木の数量は数から始まる。 */
|
|
16
|
+
const startWithUnitBefore = (source: string, start: number, unit: string): number => {
|
|
17
|
+
if (unit === "") return start;
|
|
18
|
+
const gap = source[start - 1] === " " ? 1 : 0;
|
|
19
|
+
const from = start - gap - unit.length;
|
|
20
|
+
return from >= 0 && source.slice(from, start - gap) === unit ? from : start;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** 数のすぐ後ろに書いた単位(25%の%)。木の数量は単位の前で終わることがある。 */
|
|
24
|
+
const endWithUnitAfter = (source: string, end: number, unit: string): number => (unit !== "" && source.startsWith(unit, end) ? end + unit.length : end);
|
|
25
|
+
|
|
26
|
+
const nodeValue = (node: StructureNode, source: string): FactValue[] => {
|
|
27
|
+
if (node.kind === "date") return [{ start: node.span.start, end: node.span.end, kind: "date", key: attr(node, "value"), unit: "" }];
|
|
28
|
+
if (node.kind !== "quantity") return [];
|
|
29
|
+
const unit = attr(node, "unit");
|
|
30
|
+
return [
|
|
31
|
+
{
|
|
32
|
+
start: startWithUnitBefore(source, node.span.start, unit),
|
|
33
|
+
end: endWithUnitAfter(source, node.span.end, unit),
|
|
34
|
+
kind: "quantity",
|
|
35
|
+
key: attr(node, "value"),
|
|
36
|
+
unit: unit.normalize("NFKC"),
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 単位を書かない数(「Seats: 40」)。前後が字や数や時刻の : でないもの。1.2.3 のような版の番号は数にしない。
|
|
43
|
+
* 単位の無い数は、単位の無い数とだけ比べる。
|
|
44
|
+
*/
|
|
45
|
+
const BARE_NUMBER = /(?<![\p{L}\p{N}.,:/-])[0-90-9]+(?:[,,][0-90-9]{3})*(?:[..][0-90-9]+)?(?![\p{L}\p{N}%:/,,-]|[..][0-90-9])/gu;
|
|
46
|
+
|
|
47
|
+
const bareValues = (source: string, taken: SpanIndex): FactValue[] =>
|
|
48
|
+
[...source.matchAll(BARE_NUMBER)].flatMap((match): FactValue[] => {
|
|
49
|
+
const span = { start: match.index, end: match.index + match[0].length };
|
|
50
|
+
if (overlapsAny(taken, span)) return [];
|
|
51
|
+
const key = String(Number(match[0].normalize("NFKC").replace(/,/gu, "")));
|
|
52
|
+
return [{ ...span, kind: "quantity", key, unit: "" }];
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
/** 木の数量と日付、それと重ならない固有名詞と、単位を書かない数。文書の中の順に並べる。 */
|
|
56
|
+
export const factValues = (tree: StructureNode, source: string, names: readonly Span[]): FactValue[] => {
|
|
57
|
+
const tagged = inDocumentOrder(tree).flatMap((node) => nodeValue(node, source));
|
|
58
|
+
const taken = spanIndex(tagged);
|
|
59
|
+
const named = names
|
|
60
|
+
.filter((name) => !overlapsAny(taken, name))
|
|
61
|
+
.map((name): FactValue => ({ start: name.start, end: name.end, kind: "name", key: source.slice(name.start, name.end).normalize("NFKC"), unit: "" }));
|
|
62
|
+
const bare = bareValues(source, spanIndex([...tagged, ...named]));
|
|
63
|
+
return [...tagged, ...named, ...bare].toSorted((left, right) => left.start - right.start);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/** 日付の書き方の細かさ。年月日、年月、月日。違う細かさどうしは、重なる部分だけを比べる。 */
|
|
67
|
+
const FULL_DATE = /^\d{4}-\d{2}-\d{2}$/u;
|
|
68
|
+
const YEAR_MONTH = /^\d{4}-\d{2}$/u;
|
|
69
|
+
const MONTH_DAY = /^\d{2}-\d{2}$/u;
|
|
70
|
+
|
|
71
|
+
type Precision = "full" | "year-month" | "month-day" | "other";
|
|
72
|
+
|
|
73
|
+
const precisionOf = (key: string): Precision => {
|
|
74
|
+
if (FULL_DATE.test(key)) return "full";
|
|
75
|
+
if (YEAR_MONTH.test(key)) return "year-month";
|
|
76
|
+
return MONTH_DAY.test(key) ? "month-day" : "other";
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const YEAR_MONTH_LENGTH = 7;
|
|
80
|
+
const MONTH_DAY_FROM = 5;
|
|
81
|
+
|
|
82
|
+
/** 年月日の日付を、もう一方の細かさに揃える。揃えられなければ undefined。 */
|
|
83
|
+
const narrowed = (full: string, other: string, precision: Precision): [string, string] | undefined => {
|
|
84
|
+
if (precision === "month-day") return [full.slice(MONTH_DAY_FROM), other];
|
|
85
|
+
return precision === "year-month" ? [full.slice(0, YEAR_MONTH_LENGTH), other] : undefined;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/** 二つの日付を比べられる形。比べられなければ undefined(年月と月日には重なる部分が無い)。 */
|
|
89
|
+
const comparableDates = (left: string, right: string): [string, string] | undefined => {
|
|
90
|
+
const [a, b] = [precisionOf(left), precisionOf(right)];
|
|
91
|
+
if (a === b) return a === "other" && left !== right ? undefined : [left, right];
|
|
92
|
+
if (a === "full") return narrowed(left, right, b);
|
|
93
|
+
if (b !== "full") return undefined;
|
|
94
|
+
const pair = narrowed(right, left, a);
|
|
95
|
+
return pair === undefined ? undefined : [pair[1], pair[0]];
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/** 同じ種類の値で、比べられるもの。数量は同じ単位どうし(単位の違いは別の rule が見る)。 */
|
|
99
|
+
export const comparable = (left: FactValue, right: FactValue): boolean => {
|
|
100
|
+
if (left.kind !== right.kind) return false;
|
|
101
|
+
if (left.kind === "quantity") return left.unit === right.unit;
|
|
102
|
+
return left.kind !== "date" || comparableDates(left.key, right.key) !== undefined;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/** 比べられる二つの値が同じか。月日だけの日付は、年まで書いた日付の月日と同じなら同じ。 */
|
|
106
|
+
export const sameValue = (left: FactValue, right: FactValue): boolean => {
|
|
107
|
+
if (left.kind !== "date") return left.key === right.key;
|
|
108
|
+
const pair = comparableDates(left.key, right.key);
|
|
109
|
+
return pair !== undefined && pair[0] === pair[1];
|
|
110
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { FactValue } from "./fact-values.ts";
|
|
2
|
+
import { EDGE_MARKS, trimEndOf, withoutEdgeMarks } from "./trim-marks.ts";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 名前の付いた値(「締切:10月5日」「参加費は3,000円です」"Fee: $300" "The deadline is May 3.")と、
|
|
6
|
+
* 属性の言い回しに続く値("headquartered in Austin"、「東京に本社を置く」)。
|
|
7
|
+
* 名前は文の頭から区切り(:、は、is)までで、値は区切りのすぐ後ろから文の切れ目まで。値の後ろに語が続けば(「3,000円から」
|
|
8
|
+
* 「$300 per person」)、条件の付いた値なので読まない。読点のあとから始まる名前(「大人は、」「For adults, the fee」)も、
|
|
9
|
+
* 前に条件があるので読まない。言語の知識(区切り、値の終わり、落とす冠詞)は言語パッケージの語彙表から取る。
|
|
10
|
+
*/
|
|
11
|
+
export type AttributePhrase = { readonly pattern: string; readonly position: "before" | "after" };
|
|
12
|
+
|
|
13
|
+
export type FactWords = {
|
|
14
|
+
/** 名前と値の区切り(:、は、is)。英字だけの区切りは、前が空白のときだけ。 */
|
|
15
|
+
readonly separators: readonly string[];
|
|
16
|
+
/** 値のすぐ後ろに来てよいもの(。、です、まで、.)。行の終わりと表の升の終わりはいつでもよい。 */
|
|
17
|
+
readonly valueEnds: readonly string[];
|
|
18
|
+
/** 名前の頭から落とす語(the, our)。 */
|
|
19
|
+
readonly determiners: readonly string[];
|
|
20
|
+
/** 名前にならない語(それ、it)。 */
|
|
21
|
+
readonly vague: readonly string[];
|
|
22
|
+
readonly attributes: readonly AttributePhrase[];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type Fact = { readonly label: string; readonly key: string; readonly value: FactValue };
|
|
26
|
+
|
|
27
|
+
const MAX_LABEL_LENGTH = 24;
|
|
28
|
+
const MAX_LABEL_WORDS = 5;
|
|
29
|
+
|
|
30
|
+
const MARKS_AFTER_VALUE = /^[*_]+/u;
|
|
31
|
+
|
|
32
|
+
/** 文の切れ目。名前はこの後ろから始まる。表の升の区切りと、空白の前のピリオド(1. や文の終わり)も切れ目。 */
|
|
33
|
+
const SENTENCE_BREAK = /[。!?!?|.]|\.(?=\s)/gu;
|
|
34
|
+
const CLAUSE_COMMA = /[、,,]/u;
|
|
35
|
+
const BLOCK_MARK = /^[ \t]*(?:#{1,6}[ \t]+|>[ \t]?)?/u;
|
|
36
|
+
const ITEM_MARK = /^[-*+][ \t]+/u;
|
|
37
|
+
const LETTER = /\p{L}/u;
|
|
38
|
+
/** 名前に書かない記号。コードや属性({style="…"}、"key"=)の中の値は、項目の値ではない。 */
|
|
39
|
+
const CODE_MARK = /[{}<>=[\]"`]/u;
|
|
40
|
+
const LATIN_WORD = /^[a-z ]+$/iu;
|
|
41
|
+
|
|
42
|
+
const lineStartOf = (source: string, offset: number): number => source.lastIndexOf("\n", offset - 1) + 1;
|
|
43
|
+
|
|
44
|
+
const lineEndOf = (source: string, offset: number): number => {
|
|
45
|
+
const end = source.indexOf("\n", offset);
|
|
46
|
+
return end === -1 ? source.length : end;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/** 区切りの前の名前の部分。英字の区切りは語の頭から(「this」の is は区切りではない)。 */
|
|
50
|
+
const beforeSeparator = (head: string, separator: string): string | undefined => {
|
|
51
|
+
if (!head.toLowerCase().endsWith(separator.toLowerCase())) return undefined;
|
|
52
|
+
const rest = head.slice(0, head.length - separator.length);
|
|
53
|
+
if (LATIN_WORD.test(separator) && !/\s$/u.test(rest)) return undefined;
|
|
54
|
+
return rest;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** 最後の文の切れ目より後ろ。 */
|
|
58
|
+
const afterLastBreak = (text: string): string => {
|
|
59
|
+
const breaks = [...text.matchAll(SENTENCE_BREAK)];
|
|
60
|
+
const last = breaks.at(-1);
|
|
61
|
+
return last === undefined ? text : text.slice(last.index + last[0].length);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const wordsOf = (text: string): string[] => text.split(/\s+/u).filter((word) => word !== "");
|
|
65
|
+
|
|
66
|
+
/** 名前を一つの書き方に。全角と半角、大文字と小文字、空白の数を揃え、頭の冠詞を落とす。 */
|
|
67
|
+
const keyOf = (label: string, words: FactWords): string => {
|
|
68
|
+
const [first, ...rest] = wordsOf(label.normalize("NFKC").toLowerCase());
|
|
69
|
+
const determiners = new Set(words.determiners.map((word) => word.toLowerCase()));
|
|
70
|
+
return (first !== undefined && determiners.has(first) ? rest : [first ?? "", ...rest]).join(" ");
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const containsSeparator = (label: string, words: FactWords): boolean =>
|
|
74
|
+
words.separators.some((separator) =>
|
|
75
|
+
LATIN_WORD.test(separator) ? wordsOf(label.toLowerCase()).includes(separator.toLowerCase()) : label.includes(separator),
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
/** 名前として使える書き方か。短く、字を含み、区切りを含まず、指すだけの語(それ、it)でない。 */
|
|
79
|
+
const isLabel = (label: string, key: string, words: FactWords): boolean =>
|
|
80
|
+
label.length > 0 &&
|
|
81
|
+
label.length <= MAX_LABEL_LENGTH &&
|
|
82
|
+
wordsOf(label).length <= MAX_LABEL_WORDS &&
|
|
83
|
+
LETTER.test(key) &&
|
|
84
|
+
!CODE_MARK.test(label) &&
|
|
85
|
+
!containsSeparator(label, words) &&
|
|
86
|
+
!words.vague.some((word) => word.toLowerCase() === key);
|
|
87
|
+
|
|
88
|
+
/** 値の後ろが文の切れ目か。行の終わり、表の升の終わり、語彙表の終わりの語。 */
|
|
89
|
+
const endsAfter = (source: string, value: FactValue, words: FactWords): boolean => {
|
|
90
|
+
const after = source.slice(value.end, lineEndOf(source, value.end)).replace(MARKS_AFTER_VALUE, "");
|
|
91
|
+
if (after.trim() === "" || after.trimStart().startsWith("|")) return true;
|
|
92
|
+
return words.valueEnds.some((end) => after.startsWith(end));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const labelledFact = (source: string, value: FactValue, words: FactWords): Fact | undefined => {
|
|
96
|
+
const head = trimEndOf(source.slice(lineStartOf(source, value.start), value.start), EDGE_MARKS);
|
|
97
|
+
for (const separator of words.separators) {
|
|
98
|
+
const before = beforeSeparator(head, separator);
|
|
99
|
+
if (before === undefined) continue;
|
|
100
|
+
const clause = afterLastBreak(before).replace(BLOCK_MARK, "").replace(ITEM_MARK, "");
|
|
101
|
+
if (CLAUSE_COMMA.test(clause)) return undefined;
|
|
102
|
+
const label = withoutEdgeMarks(clause);
|
|
103
|
+
const key = keyOf(label, words);
|
|
104
|
+
return isLabel(label, key, words) ? { label, key, value } : undefined;
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/** 属性の言い回しのすぐ前か後ろの値。名前は言い回しそのもの。 */
|
|
110
|
+
const attributeFact = (source: string, value: FactValue, words: FactWords): Fact | undefined => {
|
|
111
|
+
const head = trimEndOf(source.slice(lineStartOf(source, value.start), value.start), EDGE_MARKS).toLowerCase();
|
|
112
|
+
const tail = source
|
|
113
|
+
.slice(value.end, lineEndOf(source, value.end))
|
|
114
|
+
.replace(/^[ \t]+/u, "")
|
|
115
|
+
.toLowerCase();
|
|
116
|
+
const found = words.attributes.find((phrase) =>
|
|
117
|
+
phrase.position === "before" ? head.endsWith(phrase.pattern.toLowerCase()) : tail.startsWith(phrase.pattern.toLowerCase()),
|
|
118
|
+
);
|
|
119
|
+
if (found === undefined || (found.position === "before" && !endsAfter(source, value, words))) return undefined;
|
|
120
|
+
return { label: found.pattern, key: keyOf(found.pattern, words), value };
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** 文に書いた名前付きの値。値ごとに、属性の言い回しか、区切りの前の名前を探す。 */
|
|
124
|
+
export const labelledFacts = (source: string, values: readonly FactValue[], words: FactWords): Fact[] =>
|
|
125
|
+
values.flatMap((value) => {
|
|
126
|
+
const attribute = attributeFact(source, value, words);
|
|
127
|
+
if (attribute !== undefined) return [attribute];
|
|
128
|
+
if (!endsAfter(source, value, words)) return [];
|
|
129
|
+
const fact = labelledFact(source, value, words);
|
|
130
|
+
return fact === undefined ? [] : [fact];
|
|
131
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { FactValue } from "./fact-values.ts";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 単位の付いた量(5 km、3000 m、1.5時間、2 GB)。単位は言語パッケージの語彙表から取り、量の種類(長さ、重さ…)と、基準の単位への
|
|
5
|
+
* 倍率を持つ。倍率が二つある単位(1 GB は 10^9 か 2^30 バイト)は、どちらで数えても合えば合う。
|
|
6
|
+
*/
|
|
7
|
+
export type MeasureUnit = { readonly pattern: string; readonly dimension: string; readonly factors: readonly number[] };
|
|
8
|
+
|
|
9
|
+
export type Measured = FactValue & { readonly dimension: string; readonly factors: readonly number[]; readonly amount: number };
|
|
10
|
+
|
|
11
|
+
/** 前に英字や数が続く数(v2、A4、1.2.3 の 2)は量ではない。日本語は数の前に空白を置かないので、仮名や漢字の後ろはよい。 */
|
|
12
|
+
const NUMBER = /(?<![\p{Script=Latin}\p{N}.,])[0-90-9]+(?:[,,][0-90-9]{3})*(?:[..][0-90-9]+)?/gu;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 数のすぐ後ろ(空白一つまで)の単位。長い単位から試す(「5分間」を 分 で切らない、min を m にしない)。
|
|
16
|
+
* 単位の後ろに語が続く(5 miners)ものは、名前付きの値の終わり(fact-value-end)で落ちるので、ここでは見ない。
|
|
17
|
+
*/
|
|
18
|
+
const unitAfter = (source: string, end: number, units: readonly MeasureUnit[]): { unit: MeasureUnit; end: number } | undefined => {
|
|
19
|
+
const gap = source.charAt(end) === " " ? 1 : 0;
|
|
20
|
+
const rest = source.slice(end + gap, end + gap + 16);
|
|
21
|
+
const unit = units.find((candidate) => rest.startsWith(candidate.pattern));
|
|
22
|
+
return unit === undefined ? undefined : { unit, end: end + gap + unit.pattern.length };
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** 文書の中の、単位の付いた量。 */
|
|
26
|
+
export const measuredValues = (source: string, units: readonly MeasureUnit[]): Measured[] => {
|
|
27
|
+
const longestFirst = units.toSorted((left, right) => right.pattern.length - left.pattern.length);
|
|
28
|
+
return [...source.matchAll(NUMBER)].flatMap((match): Measured[] => {
|
|
29
|
+
const found = unitAfter(source, match.index + match[0].length, longestFirst);
|
|
30
|
+
if (found === undefined) return [];
|
|
31
|
+
const amount = Number(match[0].normalize("NFKC").replace(/,/gu, ""));
|
|
32
|
+
return [
|
|
33
|
+
{
|
|
34
|
+
start: match.index,
|
|
35
|
+
end: found.end,
|
|
36
|
+
kind: "quantity",
|
|
37
|
+
key: String(amount),
|
|
38
|
+
unit: found.unit.pattern,
|
|
39
|
+
dimension: found.unit.dimension,
|
|
40
|
+
factors: found.unit.factors,
|
|
41
|
+
amount,
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/** 二つの量が同じ量か。倍率のどの組み合わせかで、基準の単位に直した値の差が大きいほうの tolerance 以内なら同じ。 */
|
|
48
|
+
export const sameMeasure = (left: Measured, right: Measured, tolerance: number): boolean =>
|
|
49
|
+
left.factors.some((a) =>
|
|
50
|
+
right.factors.some((b) => {
|
|
51
|
+
const [x, y] = [left.amount * a, right.amount * b];
|
|
52
|
+
return Math.abs(x - y) <= Math.max(Math.abs(x), Math.abs(y)) * tolerance;
|
|
53
|
+
}),
|
|
54
|
+
);
|