chaffjs 0.18.0 → 0.19.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 +52 -56
- package/bin/chaff.js +17 -2
- package/dist/acronym-expansions.d.ts +26 -0
- package/dist/acronym-expansions.d.ts.map +1 -0
- package/dist/acronym-expansions.js +88 -0
- package/dist/acronym-expansions.js.map +1 -0
- package/dist/announced-count.d.ts.map +1 -1
- package/dist/announced-count.js +44 -10
- package/dist/announced-count.js.map +1 -1
- package/dist/announced-list.d.ts +30 -0
- package/dist/announced-list.d.ts.map +1 -0
- package/dist/announced-list.js +95 -0
- package/dist/announced-list.js.map +1 -0
- package/dist/api.d.ts +168 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +10 -0
- package/dist/api.js.map +1 -0
- package/dist/cli-text.d.ts +0 -1
- package/dist/cli-text.d.ts.map +1 -1
- package/dist/cli-text.js +6 -14
- package/dist/cli-text.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +58 -62
- package/dist/cli.js.map +1 -1
- package/dist/closing-paragraph.d.ts +7 -0
- package/dist/closing-paragraph.d.ts.map +1 -0
- package/dist/closing-paragraph.js +22 -0
- package/dist/closing-paragraph.js.map +1 -0
- package/dist/commands/compare.d.ts +8 -1
- package/dist/commands/compare.d.ts.map +1 -1
- package/dist/commands/compare.js +9 -17
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/document-commands.d.ts +9 -0
- package/dist/commands/document-commands.d.ts.map +1 -0
- package/dist/commands/document-commands.js +17 -0
- package/dist/commands/document-commands.js.map +1 -0
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +3 -2
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/facts.d.ts +8 -0
- package/dist/commands/facts.d.ts.map +1 -0
- package/dist/commands/facts.js +30 -0
- package/dist/commands/facts.js.map +1 -0
- package/dist/commands/feedback.d.ts +10 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +25 -1
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/fix-plan.d.ts +13 -0
- package/dist/commands/fix-plan.d.ts.map +1 -0
- package/dist/commands/fix-plan.js +44 -0
- package/dist/commands/fix-plan.js.map +1 -0
- package/dist/commands/outline.d.ts +8 -0
- package/dist/commands/outline.d.ts.map +1 -0
- package/dist/commands/outline.js +43 -0
- package/dist/commands/outline.js.map +1 -0
- package/dist/commands/read-document.d.ts +14 -0
- package/dist/commands/read-document.d.ts.map +1 -0
- package/dist/commands/read-document.js +21 -0
- package/dist/commands/read-document.js.map +1 -0
- package/dist/commands/suppressions.d.ts +7 -0
- package/dist/commands/suppressions.d.ts.map +1 -0
- package/dist/commands/suppressions.js +9 -0
- package/dist/commands/suppressions.js.map +1 -0
- package/dist/commands/test.js +1 -1
- package/dist/commands/test.js.map +1 -1
- package/dist/compare/clock-time.d.ts.map +1 -1
- package/dist/compare/clock-time.js +5 -2
- package/dist/compare/clock-time.js.map +1 -1
- package/dist/compare/distinct.d.ts +9 -0
- package/dist/compare/distinct.d.ts.map +1 -0
- package/dist/compare/distinct.js +12 -0
- package/dist/compare/distinct.js.map +1 -0
- package/dist/compare/extract.d.ts.map +1 -1
- package/dist/compare/extract.js +7 -5
- package/dist/compare/extract.js.map +1 -1
- package/dist/compare/fact-key.d.ts +17 -0
- package/dist/compare/fact-key.d.ts.map +1 -0
- package/dist/compare/fact-key.js +25 -0
- package/dist/compare/fact-key.js.map +1 -0
- package/dist/compare/fact-text.d.ts +5 -0
- package/dist/compare/fact-text.d.ts.map +1 -1
- package/dist/compare/fact-text.js +16 -2
- package/dist/compare/fact-text.js.map +1 -1
- package/dist/compare/facts-render.d.ts +17 -0
- package/dist/compare/facts-render.d.ts.map +1 -0
- package/dist/compare/facts-render.js +43 -0
- package/dist/compare/facts-render.js.map +1 -0
- package/dist/compare/facts-text.d.ts +15 -0
- package/dist/compare/facts-text.d.ts.map +1 -0
- package/dist/compare/facts-text.js +27 -0
- package/dist/compare/facts-text.js.map +1 -0
- package/dist/compare/match.d.ts +1 -0
- package/dist/compare/match.d.ts.map +1 -1
- package/dist/compare/match.js +1 -1
- package/dist/compare/match.js.map +1 -1
- package/dist/compare/outcome.d.ts +4 -1
- package/dist/compare/outcome.d.ts.map +1 -1
- package/dist/compare/outcome.js +10 -4
- package/dist/compare/outcome.js.map +1 -1
- package/dist/compare/proper-nouns.d.ts +3 -3
- package/dist/compare/proper-nouns.d.ts.map +1 -1
- package/dist/compare/proper-nouns.js +2 -3
- package/dist/compare/proper-nouns.js.map +1 -1
- package/dist/compare/render.d.ts +4 -0
- package/dist/compare/render.d.ts.map +1 -1
- package/dist/compare/render.js +2 -2
- package/dist/compare/render.js.map +1 -1
- package/dist/compare/text-atoms.d.ts +5 -2
- package/dist/compare/text-atoms.d.ts.map +1 -1
- package/dist/compare/text-atoms.js +7 -5
- package/dist/compare/text-atoms.js.map +1 -1
- package/dist/compare/text.d.ts.map +1 -1
- package/dist/compare/text.js +2 -2
- package/dist/compare/text.js.map +1 -1
- package/dist/config/load.d.ts +8 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +1 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/option-problems.d.ts +3 -2
- package/dist/config/option-problems.d.ts.map +1 -1
- package/dist/config/option-problems.js +4 -3
- package/dist/config/option-problems.js.map +1 -1
- package/dist/config/style.d.ts +5 -0
- package/dist/config/style.d.ts.map +1 -1
- package/dist/config/style.js +13 -1
- package/dist/config/style.js.map +1 -1
- package/dist/custom/load.d.ts +6 -3
- package/dist/custom/load.d.ts.map +1 -1
- package/dist/custom/load.js +10 -2
- package/dist/custom/load.js.map +1 -1
- package/dist/custom/module-path.d.ts +11 -0
- package/dist/custom/module-path.d.ts.map +1 -0
- package/dist/custom/module-path.js +15 -0
- package/dist/custom/module-path.js.map +1 -0
- package/dist/custom/parse.d.ts +17 -3
- package/dist/custom/parse.d.ts.map +1 -1
- package/dist/custom/parse.js +57 -14
- package/dist/custom/parse.js.map +1 -1
- package/dist/custom/problems.d.ts +4 -1
- package/dist/custom/problems.d.ts.map +1 -1
- package/dist/custom/problems.js +56 -39
- package/dist/custom/problems.js.map +1 -1
- package/dist/detect-language.js +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +9 -3
- package/dist/detect.js.map +1 -1
- package/dist/detectors/ai-phrasing.d.ts +4 -1
- package/dist/detectors/ai-phrasing.d.ts.map +1 -1
- package/dist/detectors/ai-phrasing.js +6 -2
- package/dist/detectors/ai-phrasing.js.map +1 -1
- package/dist/detectors/bold-label.d.ts +10 -0
- package/dist/detectors/bold-label.d.ts.map +1 -0
- package/dist/detectors/bold-label.js +44 -0
- package/dist/detectors/bold-label.js.map +1 -0
- package/dist/detectors/dangling-figure.d.ts +5 -2
- package/dist/detectors/dangling-figure.d.ts.map +1 -1
- package/dist/detectors/dangling-figure.js +5 -3
- package/dist/detectors/dangling-figure.js.map +1 -1
- package/dist/detectors/definition-use.d.ts +8 -0
- package/dist/detectors/definition-use.d.ts.map +1 -0
- package/dist/detectors/definition-use.js +32 -0
- package/dist/detectors/definition-use.js.map +1 -0
- package/dist/detectors/doubled-punctuation.d.ts.map +1 -1
- package/dist/detectors/doubled-punctuation.js +4 -2
- package/dist/detectors/doubled-punctuation.js.map +1 -1
- package/dist/detectors/duplicate-heading.d.ts +14 -0
- package/dist/detectors/duplicate-heading.d.ts.map +1 -0
- package/dist/detectors/duplicate-heading.js +39 -0
- package/dist/detectors/duplicate-heading.js.map +1 -0
- package/dist/detectors/empty-section.d.ts +8 -0
- package/dist/detectors/empty-section.d.ts.map +1 -0
- package/dist/detectors/empty-section.js +16 -0
- package/dist/detectors/empty-section.js.map +1 -0
- package/dist/detectors/fullwidth-alnum.d.ts +24 -0
- package/dist/detectors/fullwidth-alnum.d.ts.map +1 -0
- package/dist/detectors/fullwidth-alnum.js +88 -0
- package/dist/detectors/fullwidth-alnum.js.map +1 -0
- package/dist/detectors/hankaku-kana.d.ts +9 -0
- package/dist/detectors/hankaku-kana.d.ts.map +1 -0
- package/dist/detectors/hankaku-kana.js +27 -0
- package/dist/detectors/hankaku-kana.js.map +1 -0
- package/dist/detectors/heading-code-words.js +2 -2
- package/dist/detectors/heading-code-words.js.map +1 -1
- package/dist/detectors/index.d.ts.map +1 -1
- package/dist/detectors/index.js +36 -0
- package/dist/detectors/index.js.map +1 -1
- package/dist/detectors/invisible-character.d.ts +20 -0
- package/dist/detectors/invisible-character.d.ts.map +1 -0
- package/dist/detectors/invisible-character.js +143 -0
- package/dist/detectors/invisible-character.js.map +1 -0
- package/dist/detectors/kutoten-consistency.js +2 -2
- package/dist/detectors/kutoten-consistency.js.map +1 -1
- package/dist/detectors/lexicon-match.d.ts +10 -1
- package/dist/detectors/lexicon-match.d.ts.map +1 -1
- package/dist/detectors/lexicon-match.js +26 -1
- package/dist/detectors/lexicon-match.js.map +1 -1
- package/dist/detectors/lexicon.d.ts +6 -1
- package/dist/detectors/lexicon.d.ts.map +1 -1
- package/dist/detectors/lexicon.js +31 -13
- package/dist/detectors/lexicon.js.map +1 -1
- package/dist/detectors/list-sentence.d.ts +3 -1
- package/dist/detectors/list-sentence.d.ts.map +1 -1
- package/dist/detectors/list-sentence.js +26 -1
- package/dist/detectors/list-sentence.js.map +1 -1
- package/dist/detectors/long-vowel.d.ts.map +1 -1
- package/dist/detectors/long-vowel.js +18 -4
- package/dist/detectors/long-vowel.js.map +1 -1
- package/dist/detectors/markup-finding.d.ts +3 -1
- package/dist/detectors/markup-finding.d.ts.map +1 -1
- package/dist/detectors/markup-finding.js +10 -0
- package/dist/detectors/markup-finding.js.map +1 -1
- package/dist/detectors/modal-conflict.d.ts +4 -0
- package/dist/detectors/modal-conflict.d.ts.map +1 -0
- package/dist/detectors/modal-conflict.js +22 -0
- package/dist/detectors/modal-conflict.js.map +1 -0
- package/dist/detectors/name-variant.d.ts +4 -0
- package/dist/detectors/name-variant.d.ts.map +1 -0
- package/dist/detectors/name-variant.js +13 -0
- package/dist/detectors/name-variant.js.map +1 -0
- package/dist/detectors/nominalization.d.ts +11 -0
- package/dist/detectors/nominalization.d.ts.map +1 -0
- package/dist/detectors/nominalization.js +56 -0
- package/dist/detectors/nominalization.js.map +1 -0
- package/dist/detectors/orthography.d.ts.map +1 -1
- package/dist/detectors/orthography.js +59 -28
- package/dist/detectors/orthography.js.map +1 -1
- package/dist/detectors/outside-announced-list.d.ts +4 -0
- package/dist/detectors/outside-announced-list.d.ts.map +1 -0
- package/dist/detectors/outside-announced-list.js +24 -0
- package/dist/detectors/outside-announced-list.js.map +1 -0
- package/dist/detectors/oxford-comma.d.ts.map +1 -1
- package/dist/detectors/oxford-comma.js +1 -0
- package/dist/detectors/oxford-comma.js.map +1 -1
- package/dist/detectors/phrase-match.d.ts +4 -1
- package/dist/detectors/phrase-match.d.ts.map +1 -1
- package/dist/detectors/phrase-match.js +26 -7
- package/dist/detectors/phrase-match.js.map +1 -1
- package/dist/detectors/ra-nuki.d.ts +9 -0
- package/dist/detectors/ra-nuki.d.ts.map +1 -0
- package/dist/detectors/ra-nuki.js +30 -0
- package/dist/detectors/ra-nuki.js.map +1 -0
- package/dist/detectors/requirement-modal.d.ts +5 -0
- package/dist/detectors/requirement-modal.d.ts.map +1 -0
- package/dist/detectors/requirement-modal.js +54 -0
- package/dist/detectors/requirement-modal.js.map +1 -0
- package/dist/detectors/requirement-smell.d.ts +4 -0
- package/dist/detectors/requirement-smell.d.ts.map +1 -0
- package/dist/detectors/requirement-smell.js +41 -0
- package/dist/detectors/requirement-smell.js.map +1 -0
- package/dist/detectors/space-before-punctuation.d.ts +8 -0
- package/dist/detectors/space-before-punctuation.d.ts.map +1 -0
- package/dist/detectors/space-before-punctuation.js +24 -0
- package/dist/detectors/space-before-punctuation.js.map +1 -0
- package/dist/detectors/spelling-variety.d.ts +23 -0
- package/dist/detectors/spelling-variety.d.ts.map +1 -0
- package/dist/detectors/spelling-variety.js +59 -0
- package/dist/detectors/spelling-variety.js.map +1 -0
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +3 -1
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/structure.d.ts.map +1 -1
- package/dist/detectors/structure.js +16 -2
- package/dist/detectors/structure.js.map +1 -1
- package/dist/detectors/superlative-comparison.d.ts +20 -0
- package/dist/detectors/superlative-comparison.d.ts.map +1 -0
- package/dist/detectors/superlative-comparison.js +32 -0
- package/dist/detectors/superlative-comparison.js.map +1 -0
- package/dist/detectors/url-run-on.d.ts.map +1 -1
- package/dist/detectors/url-run-on.js +6 -1
- package/dist/detectors/url-run-on.js.map +1 -1
- package/dist/detectors/vague-figure-pointer.d.ts +10 -0
- package/dist/detectors/vague-figure-pointer.d.ts.map +1 -0
- package/dist/detectors/vague-figure-pointer.js +46 -0
- package/dist/detectors/vague-figure-pointer.js.map +1 -0
- package/dist/detectors/word-list.d.ts +2 -0
- package/dist/detectors/word-list.d.ts.map +1 -1
- package/dist/detectors/word-list.js +4 -1
- package/dist/detectors/word-list.js.map +1 -1
- package/dist/document.d.ts +9 -3
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +55 -32
- package/dist/document.js.map +1 -1
- package/dist/extension/document-view.d.ts +7 -0
- package/dist/extension/document-view.d.ts.map +1 -0
- package/dist/extension/document-view.js +91 -0
- package/dist/extension/document-view.js.map +1 -0
- package/dist/extension/failure-text.d.ts +5 -0
- package/dist/extension/failure-text.d.ts.map +1 -0
- package/dist/extension/failure-text.js +33 -0
- package/dist/extension/failure-text.js.map +1 -0
- package/dist/extension/import-default.d.ts +7 -0
- package/dist/extension/import-default.d.ts.map +1 -0
- package/dist/extension/import-default.js +21 -0
- package/dist/extension/import-default.js.map +1 -0
- package/dist/extension/load.d.ts +28 -0
- package/dist/extension/load.d.ts.map +1 -0
- package/dist/extension/load.js +51 -0
- package/dist/extension/load.js.map +1 -0
- package/dist/extension/module-detector.d.ts +21 -0
- package/dist/extension/module-detector.d.ts.map +1 -0
- package/dist/extension/module-detector.js +49 -0
- package/dist/extension/module-detector.js.map +1 -0
- package/dist/extension/plugin-load.d.ts +9 -0
- package/dist/extension/plugin-load.d.ts.map +1 -0
- package/dist/extension/plugin-load.js +68 -0
- package/dist/extension/plugin-load.js.map +1 -0
- package/dist/extension/plugin-name.d.ts +8 -0
- package/dist/extension/plugin-name.d.ts.map +1 -0
- package/dist/extension/plugin-name.js +22 -0
- package/dist/extension/plugin-name.js.map +1 -0
- package/dist/extension/plugin-parse.d.ts +41 -0
- package/dist/extension/plugin-parse.d.ts.map +1 -0
- package/dist/extension/plugin-parse.js +156 -0
- package/dist/extension/plugin-parse.js.map +1 -0
- package/dist/extension/problem-text.d.ts +5 -0
- package/dist/extension/problem-text.d.ts.map +1 -0
- package/dist/extension/problem-text.js +74 -0
- package/dist/extension/problem-text.js.map +1 -0
- package/dist/extension/real-path.d.ts +3 -0
- package/dist/extension/real-path.d.ts.map +1 -0
- package/dist/extension/real-path.js +8 -0
- package/dist/extension/real-path.js.map +1 -0
- package/dist/extension/returned-findings.d.ts +17 -0
- package/dist/extension/returned-findings.d.ts.map +1 -0
- package/dist/extension/returned-findings.js +48 -0
- package/dist/extension/returned-findings.js.map +1 -0
- package/dist/extension/rule-export.d.ts +13 -0
- package/dist/extension/rule-export.d.ts.map +1 -0
- package/dist/extension/rule-export.js +16 -0
- package/dist/extension/rule-export.js.map +1 -0
- package/dist/feedback/draft.d.ts +2 -0
- package/dist/feedback/draft.d.ts.map +1 -1
- package/dist/feedback/draft.js +3 -0
- package/dist/feedback/draft.js.map +1 -1
- package/dist/figure-references.d.ts +11 -2
- package/dist/figure-references.d.ts.map +1 -1
- package/dist/figure-references.js +50 -13
- package/dist/figure-references.js.map +1 -1
- package/dist/finding-order.d.ts +9 -0
- package/dist/finding-order.d.ts.map +1 -0
- package/dist/finding-order.js +3 -0
- package/dist/finding-order.js.map +1 -0
- package/dist/fix-plan/mode.d.ts +21 -0
- package/dist/fix-plan/mode.d.ts.map +1 -0
- package/dist/fix-plan/mode.js +16 -0
- package/dist/fix-plan/mode.js.map +1 -0
- package/dist/fix-plan/plan.d.ts +77 -0
- package/dist/fix-plan/plan.d.ts.map +1 -0
- package/dist/fix-plan/plan.js +100 -0
- package/dist/fix-plan/plan.js.map +1 -0
- package/dist/fix-plan/render.d.ts +6 -0
- package/dist/fix-plan/render.d.ts.map +1 -0
- package/dist/fix-plan/render.js +101 -0
- package/dist/fix-plan/render.js.map +1 -0
- package/dist/fix-plan/text.d.ts +35 -0
- package/dist/fix-plan/text.d.ts.map +1 -0
- package/dist/fix-plan/text.js +95 -0
- package/dist/fix-plan/text.js.map +1 -0
- package/dist/language-sample.d.ts +2 -0
- package/dist/language-sample.d.ts.map +1 -0
- package/dist/language-sample.js +41 -0
- package/dist/language-sample.js.map +1 -0
- package/dist/link-line.d.ts +8 -0
- package/dist/link-line.d.ts.map +1 -0
- package/dist/link-line.js +12 -0
- package/dist/link-line.js.map +1 -0
- package/dist/long-vowel.d.ts +9 -6
- package/dist/long-vowel.d.ts.map +1 -1
- package/dist/long-vowel.js +15 -8
- package/dist/long-vowel.js.map +1 -1
- package/dist/markup.d.ts.map +1 -1
- package/dist/markup.js +4 -2
- package/dist/markup.js.map +1 -1
- package/dist/name-variants.d.ts +25 -0
- package/dist/name-variants.d.ts.map +1 -0
- package/dist/name-variants.js +181 -0
- package/dist/name-variants.js.map +1 -0
- package/dist/node-version.d.ts +7 -0
- package/dist/node-version.d.ts.map +1 -0
- package/dist/node-version.js +19 -0
- package/dist/node-version.js.map +1 -0
- package/dist/not-run.d.ts +14 -0
- package/dist/not-run.d.ts.map +1 -0
- package/dist/not-run.js +12 -0
- package/dist/not-run.js.map +1 -0
- package/dist/orthography.d.ts +8 -1
- package/dist/orthography.d.ts.map +1 -1
- package/dist/orthography.js +33 -12
- package/dist/orthography.js.map +1 -1
- package/dist/outline/render.d.ts +18 -0
- package/dist/outline/render.d.ts.map +1 -0
- package/dist/outline/render.js +60 -0
- package/dist/outline/render.js.map +1 -0
- package/dist/outline/shape.d.ts +26 -0
- package/dist/outline/shape.d.ts.map +1 -0
- package/dist/outline/shape.js +37 -0
- package/dist/outline/shape.js.map +1 -0
- package/dist/outline/text.d.ts +21 -0
- package/dist/outline/text.d.ts.map +1 -0
- package/dist/outline/text.js +30 -0
- package/dist/outline/text.js.map +1 -0
- package/dist/plugin.d.ts +24 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/reasons.d.ts +1 -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/compact.d.ts +3 -1
- package/dist/render/compact.d.ts.map +1 -1
- package/dist/render/compact.js +8 -2
- package/dist/render/compact.js.map +1 -1
- package/dist/render/explain.d.ts +3 -1
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +32 -15
- package/dist/render/explain.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +16 -12
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/suppressions.d.ts +3 -0
- package/dist/render/suppressions.d.ts.map +1 -1
- package/dist/render/suppressions.js +20 -1
- package/dist/render/suppressions.js.map +1 -1
- package/dist/rule-guide.d.ts +19 -0
- package/dist/rule-guide.d.ts.map +1 -1
- package/dist/rule-guide.js +14 -0
- package/dist/rule-guide.js.map +1 -1
- package/dist/run-semantic.d.ts.map +1 -1
- package/dist/run-semantic.js +2 -1
- package/dist/run-semantic.js.map +1 -1
- package/dist/run.d.ts +5 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +31 -14
- package/dist/run.js.map +1 -1
- package/dist/setting-problems.d.ts.map +1 -1
- package/dist/setting-problems.js +3 -1
- package/dist/setting-problems.js.map +1 -1
- package/dist/spacing-minority.d.ts +16 -0
- package/dist/spacing-minority.d.ts.map +1 -0
- package/dist/spacing-minority.js +23 -0
- package/dist/spacing-minority.js.map +1 -0
- package/dist/stet-block.d.ts +5 -0
- package/dist/stet-block.d.ts.map +1 -0
- package/dist/stet-block.js +59 -0
- package/dist/stet-block.js.map +1 -0
- package/dist/stet.d.ts +4 -0
- package/dist/stet.d.ts.map +1 -1
- package/dist/stet.js +31 -11
- package/dist/stet.js.map +1 -1
- package/dist/structure/date-range.d.ts +10 -0
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +33 -1
- package/dist/structure/date-range.js.map +1 -1
- package/dist/structure/definition-use.d.ts +32 -0
- package/dist/structure/definition-use.d.ts.map +1 -0
- package/dist/structure/definition-use.js +102 -0
- package/dist/structure/definition-use.js.map +1 -0
- package/dist/structure/lazy-tree.d.ts +8 -0
- package/dist/structure/lazy-tree.d.ts.map +1 -0
- package/dist/structure/lazy-tree.js +14 -0
- package/dist/structure/lazy-tree.js.map +1 -0
- package/dist/structure/modal-conflict.d.ts +28 -0
- package/dist/structure/modal-conflict.d.ts.map +1 -0
- package/dist/structure/modal-conflict.js +74 -0
- package/dist/structure/modal-conflict.js.map +1 -0
- package/dist/structure/numbered-clauses.d.ts +4 -0
- package/dist/structure/numbered-clauses.d.ts.map +1 -0
- package/dist/structure/numbered-clauses.js +9 -0
- package/dist/structure/numbered-clauses.js.map +1 -0
- package/dist/structure/universal.d.ts.map +1 -1
- package/dist/structure/universal.js +8 -2
- package/dist/structure/universal.js.map +1 -1
- package/dist/style-parse.d.ts +6 -0
- package/dist/style-parse.d.ts.map +1 -1
- package/dist/style-parse.js +32 -4
- package/dist/style-parse.js.map +1 -1
- package/dist/subheading-line.d.ts +19 -2
- package/dist/subheading-line.d.ts.map +1 -1
- package/dist/subheading-line.js +39 -11
- package/dist/subheading-line.js.map +1 -1
- package/dist/tag-coverage.d.ts +8 -0
- package/dist/tag-coverage.d.ts.map +1 -0
- package/dist/tag-coverage.js +7 -0
- package/dist/tag-coverage.js.map +1 -0
- package/genres.yaml +42 -0
- package/package.json +7 -3
- package/rules/acronym-expansion-conflict.yaml +82 -0
- package/rules/adverb-overuse.yaml +2 -2
- package/rules/agentless-passive.yaml +28 -0
- package/rules/ai-tell.yaml +34 -0
- package/rules/announced-count-mismatch.yaml +2 -2
- package/rules/announcing-opener.yaml +31 -0
- package/rules/assistant-residue.yaml +30 -0
- package/rules/bold-density.yaml +28 -0
- package/rules/bold-label-list.yaml +81 -0
- package/rules/closing-cliche.yaml +27 -2
- package/rules/colon-lead-in.yaml +28 -4
- package/rules/contrast-framing.yaml +33 -2
- package/rules/cushion-phrase-density.yaml +32 -5
- package/rules/dangling-reference.yaml +1 -0
- package/rules/date-order.yaml +1 -0
- package/rules/date-range-reversed.yaml +2 -2
- package/rules/double-negative.yaml +51 -0
- package/rules/doubled-punctuation.yaml +2 -2
- package/rules/doubled-word.yaml +2 -2
- package/rules/duplicate-heading.yaml +78 -0
- package/rules/emoji-density.yaml +5 -4
- package/rules/empty-intensifier.yaml +25 -0
- package/rules/empty-section.yaml +74 -0
- package/rules/excessive-hedging.yaml +32 -4
- package/rules/fullwidth-alnum-consistency.yaml +53 -0
- package/rules/hankaku-kana.yaml +41 -0
- package/rules/image-alt-text.yaml +1 -1
- package/rules/invisible-character.yaml +63 -0
- package/rules/katakana-long-vowel.yaml +10 -9
- package/rules/latin-spacing.yaml +12 -5
- package/rules/max-kanji-continuous.yaml +1 -0
- package/rules/max-paragraph-length.yaml +1 -0
- package/rules/max-sentence-length.yaml +26 -0
- package/rules/modal-conflict.yaml +106 -0
- package/rules/name-variant.yaml +88 -0
- package/rules/no-doubled-joshi.yaml +1 -0
- package/rules/no-em-dash.yaml +26 -2
- package/rules/no-mixed-desumasu.yaml +1 -0
- package/rules/nominalization.yaml +89 -0
- package/rules/outside-announced-list.yaml +80 -0
- package/rules/padded-intro.yaml +25 -0
- package/rules/paragraph-length-variance.yaml +26 -2
- package/rules/preferred-term.yaml +1 -0
- package/rules/proper-noun-density.yaml +14 -5
- package/rules/ra-nuki.yaml +43 -0
- package/rules/requirement-modal.yaml +94 -0
- package/rules/requirement-smell.yaml +70 -0
- package/rules/rule-of-three.yaml +46 -0
- package/rules/section-length-uniformity.yaml +26 -2
- package/rules/sentence-rhythm.yaml +26 -0
- package/rules/space-before-punctuation.yaml +41 -0
- package/rules/spelling-consistency.yaml +47 -0
- package/rules/stock-transition.yaml +33 -2
- package/rules/taigen-dome-in-prose.yaml +14 -0
- package/rules/total-mismatch.yaml +1 -0
- package/rules/undefined-acronym.yaml +1 -0
- package/rules/unqualified-superlative.yaml +5 -4
- package/rules/unused-definition.yaml +75 -0
- package/rules/use-before-definition.yaml +77 -0
- package/rules/vague-figure-reference.yaml +66 -0
- package/skills/chaff/SKILL.md +108 -8
- package/src/acronym-expansions.ts +106 -0
- package/src/announced-count.ts +53 -11
- package/src/announced-list.ts +120 -0
- package/src/api.ts +154 -0
- package/src/cli-text.ts +6 -11
- package/src/cli.ts +64 -63
- package/src/closing-paragraph.ts +24 -0
- package/src/commands/compare.ts +11 -18
- package/src/commands/document-commands.ts +19 -0
- package/src/commands/eval.ts +3 -2
- package/src/commands/facts.ts +33 -0
- package/src/commands/feedback.ts +33 -1
- package/src/commands/fix-plan.ts +53 -0
- package/src/commands/outline.ts +49 -0
- package/src/commands/read-document.ts +24 -0
- package/src/commands/suppressions.ts +19 -0
- package/src/commands/test.ts +1 -1
- package/src/compare/clock-time.ts +5 -2
- package/src/compare/distinct.ts +13 -0
- package/src/compare/extract.ts +7 -5
- package/src/compare/fact-key.ts +31 -0
- package/src/compare/fact-text.ts +21 -2
- package/src/compare/facts-render.ts +63 -0
- package/src/compare/facts-text.ts +41 -0
- package/src/compare/match.ts +1 -1
- package/src/compare/outcome.ts +14 -4
- package/src/compare/proper-nouns.ts +4 -4
- package/src/compare/render.ts +2 -2
- package/src/compare/text-atoms.ts +7 -6
- package/src/compare/text.ts +3 -2
- package/src/config/load.ts +9 -0
- package/src/config/option-problems.ts +6 -4
- package/src/config/style.ts +14 -1
- package/src/custom/load.ts +11 -3
- package/src/custom/module-path.ts +23 -0
- package/src/custom/parse.ts +67 -18
- package/src/custom/problems.ts +63 -41
- package/src/detect-language.ts +1 -1
- package/src/detect.ts +10 -3
- package/src/detectors/ai-phrasing.ts +6 -2
- package/src/detectors/bold-label.ts +55 -0
- package/src/detectors/dangling-figure.ts +8 -4
- package/src/detectors/definition-use.ts +41 -0
- package/src/detectors/doubled-punctuation.ts +5 -2
- package/src/detectors/duplicate-heading.ts +47 -0
- package/src/detectors/empty-section.ts +21 -0
- package/src/detectors/fullwidth-alnum.ts +118 -0
- package/src/detectors/hankaku-kana.ts +38 -0
- package/src/detectors/heading-code-words.ts +2 -2
- package/src/detectors/index.ts +36 -0
- package/src/detectors/invisible-character.ts +190 -0
- package/src/detectors/kutoten-consistency.ts +2 -2
- package/src/detectors/lexicon-match.ts +33 -1
- package/src/detectors/lexicon.ts +40 -13
- package/src/detectors/list-sentence.ts +45 -4
- package/src/detectors/long-vowel.ts +20 -4
- package/src/detectors/markup-finding.ts +16 -1
- package/src/detectors/modal-conflict.ts +26 -0
- package/src/detectors/name-variant.ts +15 -0
- package/src/detectors/nominalization.ts +73 -0
- package/src/detectors/orthography.ts +77 -27
- package/src/detectors/outside-announced-list.ts +25 -0
- package/src/detectors/oxford-comma.ts +1 -0
- package/src/detectors/phrase-match.ts +27 -7
- package/src/detectors/ra-nuki.ts +38 -0
- package/src/detectors/requirement-modal.ts +67 -0
- package/src/detectors/requirement-smell.ts +52 -0
- package/src/detectors/space-before-punctuation.ts +32 -0
- package/src/detectors/spelling-variety.ts +81 -0
- package/src/detectors/structure-tree.ts +3 -1
- package/src/detectors/structure.ts +17 -3
- package/src/detectors/superlative-comparison.ts +47 -0
- package/src/detectors/url-run-on.ts +7 -1
- package/src/detectors/vague-figure-pointer.ts +58 -0
- package/src/detectors/word-list.ts +6 -1
- package/src/document.ts +88 -41
- package/src/extension/document-view.ts +109 -0
- package/src/extension/failure-text.ts +46 -0
- package/src/extension/import-default.ts +13 -0
- package/src/extension/load.ts +97 -0
- package/src/extension/module-detector.ts +61 -0
- package/src/extension/plugin-load.ts +82 -0
- package/src/extension/plugin-name.ts +26 -0
- package/src/extension/plugin-parse.ts +229 -0
- package/src/extension/problem-text.ts +103 -0
- package/src/extension/real-path.ts +10 -0
- package/src/extension/returned-findings.ts +62 -0
- package/src/extension/rule-export.ts +23 -0
- package/src/feedback/draft.ts +6 -0
- package/src/figure-references.ts +73 -12
- package/src/finding-order.ts +3 -0
- package/src/fix-plan/mode.ts +34 -0
- package/src/fix-plan/plan.ts +181 -0
- package/src/fix-plan/render.ts +128 -0
- package/src/fix-plan/text.ts +133 -0
- package/src/language-sample.ts +48 -0
- package/src/link-line.ts +13 -0
- package/src/long-vowel.ts +18 -8
- package/src/markup.ts +4 -2
- package/src/name-variants.ts +217 -0
- package/src/node-version.ts +22 -0
- package/src/not-run.ts +16 -0
- package/src/orthography.ts +40 -11
- package/src/outline/render.ts +85 -0
- package/src/outline/shape.ts +72 -0
- package/src/outline/text.ts +50 -0
- package/src/plugin.ts +21 -4
- package/src/reasons.ts +3 -0
- package/src/render/compact.ts +13 -3
- package/src/render/explain.ts +47 -20
- package/src/render/rules-json.ts +18 -12
- package/src/render/suppressions.ts +30 -2
- package/src/rule-guide.ts +38 -0
- package/src/run-semantic.ts +2 -1
- package/src/run.ts +37 -17
- package/src/setting-problems.ts +3 -1
- package/src/spacing-minority.ts +27 -0
- package/src/stet-block.ts +60 -0
- package/src/stet.ts +41 -15
- package/src/structure/date-range.ts +49 -1
- package/src/structure/definition-use.ts +130 -0
- package/src/structure/lazy-tree.ts +15 -0
- package/src/structure/modal-conflict.ts +86 -0
- package/src/structure/numbered-clauses.ts +11 -0
- package/src/structure/universal.ts +10 -2
- package/src/style-parse.ts +38 -3
- package/src/subheading-line.ts +51 -13
- package/src/tag-coverage.ts +13 -0
- package/styles/ieice.yaml +5 -4
- package/styles/jis-z8301-2011.yaml +5 -2
- package/styles/jis-z8301-2019.yaml +31 -0
- package/styles/koyobun.yaml +35 -0
- package/dist/legal-address.d.ts +0 -2
- package/dist/legal-address.d.ts.map +0 -1
- package/dist/legal-address.js +0 -16
- package/dist/legal-address.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,23 +1,44 @@
|
|
|
1
1
|
# chaff
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
chaff は、文書の読みにくいところと、機械で確かめられる誤りを見つける道具です。日本語と英語の文書を読み、同じ文章なら何度かけても同じ結果を出します。
|
|
4
|
+
文章は書き換えません。直すのは書いた人です。
|
|
5
|
+
`lint` が布の繊維くずを名前にしているのと同じで、`chaff` は籾殻です。取り除くべきものの名を負っています。
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
インストールも、AI の利用登録も、言語の指定も要りません。
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
10
|
npx chaffjs article.md
|
|
9
11
|
```
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
```
|
|
14
|
+
─── 5 行目 ───────────────────────────────────────────────────
|
|
15
|
+
|
|
16
|
+
キャッシュの仕組みについて説明します。
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
⚠ 見出しの繰り返し
|
|
19
|
+
|
|
20
|
+
見出し「キャッシュの仕組み」を直後の文がほぼそのまま繰り返しています
|
|
21
|
+
見出しで言ったことを次の文が繰り返すと、読者はそこで何も受け取れません。
|
|
22
|
+
|
|
23
|
+
→ 見出しが約束したことの中身から書き始めてください。
|
|
24
|
+
|
|
25
|
+
このルールをゆるめる: npx chaff relax heading-echo
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
指摘は 1 件につき 4 つ、引いた文、何が起きているか、なぜ読みにくいか、どう直すかの順に出ます。誤字脱字ではなく、文章の組み立てを見ます。たとえば次のようなところです。
|
|
29
|
+
|
|
30
|
+
- 一文が長すぎて、読んでいるうちに主語を見失う
|
|
31
|
+
- 太字が多すぎて、どこも目立たなくなっている
|
|
32
|
+
- 見出しと同じことを、その直後の文が繰り返している
|
|
33
|
+
- 「近年、〜が注目されています」など、どの記事にも当てはまる書き出し
|
|
34
|
+
- 「いかがでしたか」で終わる、読者に何も残さない結び
|
|
35
|
+
|
|
36
|
+
画面は文書の言語で出るので、英語の文書には英語で返ってきます。
|
|
17
37
|
|
|
18
38
|
## 文書の種類を選ぶ
|
|
19
39
|
|
|
20
|
-
|
|
40
|
+
契約書、法令、マニュアル、論文、小説、発言録は、それぞれの書き方で書かれます。種類(ジャンル)を選ぶと、設定を書かずにその書き方に合わせて見ます。
|
|
41
|
+
決めていない文書が別の種類に見えるときは、「契約書・規約のようです。--genre legal/contract を試せます」と画面が教えます。
|
|
21
42
|
|
|
22
43
|
```bash
|
|
23
44
|
npx chaffjs --genre legal/contract 契約書.md この実行だけ、契約書として見る
|
|
@@ -36,73 +57,48 @@ npx chaffjs genres ジャンルの一覧と、そ
|
|
|
36
57
|
| 文学 | `literature/fiction` `literature/essay` `literature/poetry` `literature/play` |
|
|
37
58
|
| 話し言葉 | `speech/address` `speech/transcript` |
|
|
38
59
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## 何を見つけるか
|
|
60
|
+
## 指摘されたら
|
|
42
61
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
一文が長すぎて、読んでいるうちに主語を見失う
|
|
47
|
-
太字が多すぎて、どこも目立たなくなっている
|
|
48
|
-
見出しと同じことを、その直後の文が繰り返している
|
|
49
|
-
「近年、〜が注目されています」など、どの記事にも当てはまる書き出し
|
|
50
|
-
「いかがでしたか」で終わる、読者に何も残さない結び
|
|
51
|
-
```
|
|
62
|
+
応じ方は 3 つです。指摘がもっともなら文章を直します。指摘は正しいがそこは意図して書いたのなら、`<!-- stet: rule-id — 理由 -->` でその箇所だけ黙らせます。
|
|
63
|
+
自分たちの方針に合わないなら、`npx chaffjs relax rule-id --why "理由"` でルールのほうを変えます。
|
|
64
|
+
強さは `strict` `normal` `relaxed` `off` の 4 語から選び、足りなければ上限を数で書けます(`max-sentence-length: 260`)。
|
|
52
65
|
|
|
53
|
-
##
|
|
54
|
-
|
|
55
|
-
1 件につき「引用 / 何が起きているか / なぜ問題か / どう直すか」の 4 つが出ます。
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
─── 41 行目 ──────────────────────────────
|
|
59
|
-
|
|
60
|
-
ここで **重要** なのは **TTL** と **整合性** です。
|
|
61
|
-
|
|
62
|
-
⚠ 太字の使いすぎ
|
|
63
|
-
|
|
64
|
-
このセクションに太字が 6 箇所あります(2 箇所まで)
|
|
65
|
-
太字は読者の目を止める道具です。多用すると、どこも目立たなくなります。
|
|
66
|
-
|
|
67
|
-
→ 本当に強調したい 1〜2 箇所だけ残して、ほかは普通の文にしてください
|
|
68
|
-
|
|
69
|
-
このルールをゆるめる: npx chaffjs relax bold-density
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## 指摘されたら、道は 3 つ
|
|
73
|
-
|
|
74
|
-
| 道 | どんなとき | やること |
|
|
75
|
-
| --- | --- | --- |
|
|
76
|
-
| 直す | 指摘がもっともなとき | 文章を書き直す |
|
|
77
|
-
| この箇所だけ黙らせる | 指摘は正しいが、ここは意図的なとき | `<!-- stet: rule-id — 理由 -->` |
|
|
78
|
-
| ルールを変える | 自分たちの方針に合わないとき | `npx chaffjs relax rule-id --why "理由"` |
|
|
79
|
-
|
|
80
|
-
## 主なコマンド
|
|
66
|
+
## ほかにできること
|
|
81
67
|
|
|
82
68
|
```bash
|
|
83
69
|
npx chaffjs . この場所の Markdown を全部
|
|
84
70
|
npx chaffjs article.md --watch 保存のたびに、変わったところだけ出す
|
|
85
|
-
npx chaffjs init chaff.yaml を作る(端末ならジャンルを尋ねる)
|
|
86
71
|
npx chaffjs explain bold-density ルールの意図と根拠を読む
|
|
87
72
|
npx chaffjs baseline docs/ 既にある指摘を棚上げする
|
|
88
73
|
npx chaffjs suppressions docs/ stet で黙らせている指摘を数える
|
|
89
74
|
npx chaffjs rules --json いまの設定を JSON で出す(AI に渡す用)
|
|
90
75
|
npx chaffjs tree contract.txt 文書を番地の付いた木にする(条・項・定義・参照)
|
|
91
76
|
npx chaffjs cite 原文 引用.json 引用が原文にあるかを確かめる
|
|
77
|
+
npx chaffjs fix-plan 前.md 指摘をルールごとにまとめ、直す方向と確かめのコマンドを付けた「直す計画」を出す
|
|
78
|
+
npx chaffjs facts 前.md compare が照合する事実を一覧にする(書き直す前の控え)
|
|
79
|
+
npx chaffjs outline 前.md 後.md 見出しの構成と形(見出しの数・節の平均・箇条書きの割合・太字)を前と後で並べる
|
|
80
|
+
npx chaffjs compare 前.md 後.md 書き換えで事実(数・日付・URL・名前など)が落ちても足されてもいないかを確かめる
|
|
92
81
|
npx chaffjs skill Claude Code の skill を入れる(--global でホームに)
|
|
93
82
|
```
|
|
94
83
|
|
|
95
|
-
|
|
84
|
+
言語のアダプタ(`@chaffjs/lang-ja` と `@chaffjs/lang-en`)は同梱しているので、別に入れる必要はありません。
|
|
85
|
+
新しい言語のアダプタは誰でも出せます。公式は `@chaffjs/lang-<言語>`、第三者は `chaff-lang-<言語>` と名乗ります。
|
|
86
|
+
`@typescript-eslint/*` と `eslint-plugin-*` の関係と同じで、chaff は公式、第三者の順に探して読みます。
|
|
96
87
|
|
|
97
|
-
|
|
88
|
+
ルールは Node の関数でも書けます。一つのチームのルールは `chaff.yaml` の `custom_rules` に `type: module` で、いくつものチームで使うものはプラグインのパッケージ `chaff-plugin-<名前>` にまとめます。
|
|
89
|
+
型と `defineRule` / `definePlugin` は `chaffjs/api` から読み込みます。プラグインのルールは `<名前>/<ルール>` と呼ばれ、chaff のルールと同じに `explain`・`relax`・`stet`・SARIF で扱えます。
|
|
90
|
+
読み込むとそのコードが動くので、信頼できるものだけを入れてください。作り方は手引きの「[プラグインを作る](https://isamu.github.io/lab/ja/guide/writing-plugins/)」にあります。
|
|
98
91
|
|
|
99
|
-
|
|
92
|
+
## ドキュメント
|
|
100
93
|
|
|
101
|
-
|
|
94
|
+
手引きとルールの一覧は [日本語のサイト](https://isamu.github.io/lab/ja/) と [英語のサイト](https://isamu.github.io/lab/en/) にあります。
|
|
95
|
+
ソースは https://github.com/isamu/lab/tree/main/text です。
|
|
102
96
|
|
|
103
|
-
##
|
|
97
|
+
## In English
|
|
104
98
|
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
chaff finds what makes writing hard to read, in Japanese and English, and never rewrites the text. On an English
|
|
100
|
+
document it speaks English. Pick the kind of document (`--genre legal/contract`, `docs/manual`, `academic/paper`, …)
|
|
101
|
+
and it checks it the way that kind is written. The guide, the genres and the reference of every rule are at
|
|
102
|
+
https://isamu.github.io/lab/en/
|
|
107
103
|
|
|
108
104
|
MIT
|
package/bin/chaff.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
// On an old Node.js the CLI fails while it loads, with a SyntaxError that does not name the version. Check first,
|
|
3
|
+
// with what Node.js 12 already reads: no top-level await, no "node:" imports.
|
|
4
|
+
import { readFileSync } from "fs";
|
|
5
|
+
import { tooOldMessage } from "../dist/node-version.js";
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
const run = async () => {
|
|
8
|
+
const { main } = await import("../dist/cli.js");
|
|
9
|
+
process.exitCode = await main(process.argv.slice(2));
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const manifest = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
|
|
13
|
+
const tooOld = tooOldMessage(process.versions.node, manifest.engines.node, process.env);
|
|
14
|
+
if (tooOld === undefined) {
|
|
15
|
+
void run();
|
|
16
|
+
} else {
|
|
17
|
+
console.error(tooOld);
|
|
18
|
+
process.exitCode = 1;
|
|
19
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** 本文の一続き(文)。start は文書の中の位置。 */
|
|
2
|
+
export type ExpansionText = {
|
|
3
|
+
readonly start: number;
|
|
4
|
+
readonly text: string;
|
|
5
|
+
};
|
|
6
|
+
export type Expansion = {
|
|
7
|
+
readonly acronym: string;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly offset: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 括弧の前の語のうち、頭文字がちょうど略語になる最も短い並び(the Federal Open Market Committee (FOMC) なら
|
|
13
|
+
* Federal Open Market Committee)。頭文字の揃う並びが無ければ、展開ではない((see Table 2) や (FOMC) の前の文)。
|
|
14
|
+
*/
|
|
15
|
+
export declare const nameBefore: (text: string, acronym: string) => string | undefined;
|
|
16
|
+
/** 文の中の略語の展開。両方の形を、文書の中の位置の順に。 */
|
|
17
|
+
export declare const expansionsIn: (body: ExpansionText) => Expansion[];
|
|
18
|
+
/** 比べる形。大文字小文字、ハイフンと空白、& と and、語の終わりの複数の s は名前を変えない。 */
|
|
19
|
+
export declare const comparableName: (name: string) => string;
|
|
20
|
+
export type ExpansionConflict = {
|
|
21
|
+
readonly expansion: Expansion;
|
|
22
|
+
readonly first: Expansion;
|
|
23
|
+
};
|
|
24
|
+
/** 同じ略語の、最初の展開と違う展開。違う書き方ごとに最初の一つだけ。 */
|
|
25
|
+
export declare const expansionConflicts: (expansions: readonly Expansion[]) => ExpansionConflict[];
|
|
26
|
+
//# sourceMappingURL=acronym-expansions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acronym-expansions.d.ts","sourceRoot":"","sources":["../src/acronym-expansions.ts"],"names":[],"mappings":"AAIA,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA4BrG;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAWnE,CAAC;AAcF,kCAAkC;AAClC,eAAO,MAAM,YAAY,GAAI,MAAM,aAAa,KAAG,SAAS,EAY3D,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAMM,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAE7F,wCAAwC;AACxC,eAAO,MAAM,kBAAkB,GAAI,YAAY,SAAS,SAAS,EAAE,KAAG,iBAAiB,EActF,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { namesAcronym } from "./detectors/acronym-expansion.js";
|
|
2
|
+
const ACRONYM = String.raw `[A-Z][A-Z0-9&]*[A-Z]`;
|
|
3
|
+
const QUOTE = String.raw `["“”'‘’「」]?`;
|
|
4
|
+
/** 名前のあとに括弧で略語(Service Level Agreement (SLA)、(the "SLA"))。 */
|
|
5
|
+
const NAME_FIRST = new RegExp(String.raw `[((]\s*(?:the\s+)?${QUOTE}(?<acronym>${ACRONYM})${QUOTE}\s*[))]`, "gu");
|
|
6
|
+
/** 略語のあとに括弧で名前(SLA (Service Level Agreement)、CI(継続的インテグレーション))。 */
|
|
7
|
+
const ACRONYM_FIRST = new RegExp(String.raw `(?<![\p{Script=Latin}\p{N}])(?<acronym>${ACRONYM})\s?[((](?<name>[^()()\n]{2,60})[))]`, "gu");
|
|
8
|
+
/** 頭文字に数えない短い語(Department of Defense の of)。 */
|
|
9
|
+
const SMALL_WORDS = new Set(["of", "and", "the", "for", "to", "in", "on", "a", "an", "&", "de", "by", "with"]);
|
|
10
|
+
const wordsBefore = (text) => text
|
|
11
|
+
.replaceAll(/["“”'‘’]/gu, "")
|
|
12
|
+
.trim()
|
|
13
|
+
.split(/\s+/u)
|
|
14
|
+
.filter((word) => word !== "");
|
|
15
|
+
const initialsOf = (words) => words
|
|
16
|
+
.filter((word) => !SMALL_WORDS.has(word.toLowerCase()))
|
|
17
|
+
.flatMap((word) => word.split("-"))
|
|
18
|
+
.map((word) => word.charAt(0))
|
|
19
|
+
.join("")
|
|
20
|
+
.toUpperCase();
|
|
21
|
+
/**
|
|
22
|
+
* 括弧の前の語のうち、頭文字がちょうど略語になる最も短い並び(the Federal Open Market Committee (FOMC) なら
|
|
23
|
+
* Federal Open Market Committee)。頭文字の揃う並びが無ければ、展開ではない((see Table 2) や (FOMC) の前の文)。
|
|
24
|
+
*/
|
|
25
|
+
export const nameBefore = (text, acronym) => {
|
|
26
|
+
const words = wordsBefore(text).slice(-acronym.length * 2 - 2);
|
|
27
|
+
const letters = acronym.replaceAll("&", "");
|
|
28
|
+
const width = words.findIndex((_word, index) => initialsOf(words.slice(-(index + 1))) === letters);
|
|
29
|
+
if (width < 0)
|
|
30
|
+
return undefined;
|
|
31
|
+
const name = words.slice(-(width + 1));
|
|
32
|
+
const start = name.findIndex((word) => !SMALL_WORDS.has(word.toLowerCase()));
|
|
33
|
+
return name
|
|
34
|
+
.slice(start)
|
|
35
|
+
.join(" ")
|
|
36
|
+
.replace(/[,;:]$/u, "");
|
|
37
|
+
};
|
|
38
|
+
const NON_LATIN_NAME = /^[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}ー・\s\p{L}\p{N}-]+$/u;
|
|
39
|
+
const HAS_KANA_OR_KANJI = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}]/u;
|
|
40
|
+
/** 括弧の中の定義の語や文(以下「CI」という。、読点のある説明)は、名前ではない。 */
|
|
41
|
+
const NOT_A_NAME = /以下|という|[、。,;:]/u;
|
|
42
|
+
/** 略語のあとの括弧の中が、その略語の名前か。英字の名前は頭文字が揃うとき、日本語の名前は語だけのとき。 */
|
|
43
|
+
const isNameAfter = (name, acronym) => {
|
|
44
|
+
if (NOT_A_NAME.test(name))
|
|
45
|
+
return false;
|
|
46
|
+
if (HAS_KANA_OR_KANJI.test(name))
|
|
47
|
+
return NON_LATIN_NAME.test(name);
|
|
48
|
+
return namesAcronym(name, acronym);
|
|
49
|
+
};
|
|
50
|
+
/** 文の中の略語の展開。両方の形を、文書の中の位置の順に。 */
|
|
51
|
+
export const expansionsIn = (body) => {
|
|
52
|
+
const nameFirst = [...body.text.matchAll(NAME_FIRST)].flatMap((match) => {
|
|
53
|
+
const acronym = match.groups?.["acronym"] ?? "";
|
|
54
|
+
const name = nameBefore(body.text.slice(0, match.index), acronym);
|
|
55
|
+
return name === undefined ? [] : [{ acronym, name, offset: body.start + match.index }];
|
|
56
|
+
});
|
|
57
|
+
const acronymFirst = [...body.text.matchAll(ACRONYM_FIRST)].flatMap((match) => {
|
|
58
|
+
const acronym = match.groups?.["acronym"] ?? "";
|
|
59
|
+
const name = (match.groups?.["name"] ?? "").trim();
|
|
60
|
+
return isNameAfter(name, acronym) ? [{ acronym, name, offset: body.start + match.index }] : [];
|
|
61
|
+
});
|
|
62
|
+
return [...nameFirst, ...acronymFirst].toSorted((left, right) => left.offset - right.offset);
|
|
63
|
+
};
|
|
64
|
+
/** 比べる形。大文字小文字、ハイフンと空白、& と and、語の終わりの複数の s は名前を変えない。 */
|
|
65
|
+
export const comparableName = (name) => name
|
|
66
|
+
.toLowerCase()
|
|
67
|
+
.replaceAll("&", " and ")
|
|
68
|
+
.replaceAll(/[-‐‑\s]+/gu, " ")
|
|
69
|
+
.trim()
|
|
70
|
+
.replaceAll(/(?<=\p{Script=Latin}{3})s\b/gu, "");
|
|
71
|
+
/** 同じ略語の、最初の展開と違う展開。違う書き方ごとに最初の一つだけ。 */
|
|
72
|
+
export const expansionConflicts = (expansions) => {
|
|
73
|
+
const firsts = new Map();
|
|
74
|
+
const reported = new Set();
|
|
75
|
+
return expansions.flatMap((expansion) => {
|
|
76
|
+
const first = firsts.get(expansion.acronym);
|
|
77
|
+
if (first === undefined) {
|
|
78
|
+
firsts.set(expansion.acronym, expansion);
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const variant = `${expansion.acronym}\u0000${comparableName(expansion.name)}`;
|
|
82
|
+
if (comparableName(first.name) === comparableName(expansion.name) || reported.has(variant))
|
|
83
|
+
return [];
|
|
84
|
+
reported.add(variant);
|
|
85
|
+
return [{ expansion, first }];
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=acronym-expansions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acronym-expansions.js","sourceRoot":"","sources":["../src/acronym-expansions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announced-count.d.ts","sourceRoot":"","sources":["../src/announced-count.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAC;AAGpD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,uCAAuC;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"announced-count.d.ts","sourceRoot":"","sources":["../src/announced-count.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAC;AAGpD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,uCAAuC;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAmKtI,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,OAAO,SAAS,UAAU,EAAE,EAAE,OAAO,UAAU,KAAG,aAAa,EAIvH,CAAC"}
|
package/dist/announced-count.js
CHANGED
|
@@ -47,17 +47,32 @@ const isHedged = (sentence, phrase, words) => {
|
|
|
47
47
|
words.hedgesAfter.some((hedge) => afters.some((after) => startsWithWord(after, hedge.toLowerCase()))));
|
|
48
48
|
};
|
|
49
49
|
const COLON_END = /[::][ \t]*$/u;
|
|
50
|
-
/**
|
|
51
|
-
|
|
50
|
+
/**
|
|
51
|
+
* 数字か、語の切れ目で区切った英語の数の語(two)。英字や点に続く数字は版や名前の一部(v2、1.2)なので数えない。
|
|
52
|
+
* 漢数字は「一緒」「一般」の中にもあるので数えない。
|
|
53
|
+
*/
|
|
54
|
+
const numberPattern = (words) => {
|
|
55
|
+
const latin = words.numbers.filter((number) => isLatin(number[0]));
|
|
56
|
+
const digits = String.raw `(?<![A-Za-z.])\p{Nd}`;
|
|
57
|
+
return new RegExp(latin.length === 0 ? digits : `${digits}|(?<![A-Za-z])(?:${alternation(latin)})(?![A-Za-z])`, "iu");
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* 数える語の無い数は、先を指す語のすぐ後ろでだけ(the following two:)。「under $75:」の金額を数に読まない。
|
|
61
|
+
* 先を指す語が無く、終わりのコロンだけが予告なら、コロンが渡すのはその手前のいちばん近い数。数の後ろにまだ数があれば
|
|
62
|
+
* (「1 つのページにまとめていましたが、2 ページに分けました:」)、その数は予告の数ではない。
|
|
63
|
+
*/
|
|
64
|
+
const pointsAhead = (sentence, phrase, anchors, number) => {
|
|
52
65
|
const before = sentence.slice(0, phrase.start).toLowerCase();
|
|
53
66
|
const lowered = anchors.map((anchor) => anchor.toLowerCase());
|
|
54
67
|
if (!phrase.counted)
|
|
55
68
|
return lowered.some((anchor) => endsWithWord(before.trimEnd(), anchor));
|
|
56
|
-
|
|
69
|
+
if (lowered.some((anchor) => before.includes(anchor)))
|
|
70
|
+
return true;
|
|
71
|
+
return COLON_END.test(sentence.trimEnd()) && !number.test(sentence.slice(phrase.end));
|
|
57
72
|
};
|
|
58
73
|
/** 最後の一文の予告。数がちょうど一つで、目安や順番でなく、先を指しているときだけ。 */
|
|
59
|
-
const announcedIn = (sentence, words,
|
|
60
|
-
const phrases = [...sentence.matchAll(
|
|
74
|
+
const announcedIn = (sentence, words, patterns) => {
|
|
75
|
+
const phrases = [...sentence.matchAll(patterns.phrase)].map((match) => ({
|
|
61
76
|
start: match.index,
|
|
62
77
|
numberEnd: match.index + (match[1] ?? "").length,
|
|
63
78
|
end: match.index + match[0].length,
|
|
@@ -67,7 +82,7 @@ const announcedIn = (sentence, words, pattern) => {
|
|
|
67
82
|
const only = phrases.length === 1 ? phrases[0] : undefined;
|
|
68
83
|
if (only === undefined || only.announced < 1 || isHedged(sentence, only, words))
|
|
69
84
|
return undefined;
|
|
70
|
-
return pointsAhead(sentence, only, words.anchors) ? only : undefined;
|
|
85
|
+
return pointsAhead(sentence, only, words.anchors, patterns.number) ? only : undefined;
|
|
71
86
|
};
|
|
72
87
|
/** 位置から空白と改行を読み飛ばした先。 */
|
|
73
88
|
const pastSpace = (source, at) => {
|
|
@@ -81,7 +96,26 @@ const neighboursOf = (source, lists) => ({
|
|
|
81
96
|
});
|
|
82
97
|
/** 空白だけを挟んで前か後ろに別の箇条書きが続く。印が変わって二つに割れた一つの並びかもしれず、数を決められない。 */
|
|
83
98
|
const hasNeighbour = (source, list, neighbours) => neighbours.ends.has(list.start) || neighbours.starts.has(pastSpace(source, list.end));
|
|
84
|
-
|
|
99
|
+
/**
|
|
100
|
+
* 分類した箇条書き(「- **実運用**: CLI / Telegram」)の行は、ラベルの後ろに項目を区切って並べる。予告の数は区切った項目の数かもしれない。
|
|
101
|
+
* 区切りは斜線だけ。読点とコンマは項目の説明の文の中にも書くので(「UI: rename the button to Save, continue」)区切りに数えない。
|
|
102
|
+
* 行内のコードの中の斜線(`a/b`)も数えない。
|
|
103
|
+
*/
|
|
104
|
+
const CATEGORY_ITEM = /^[ \t]*(?:[-*+]|\d{1,9}[.)])[ \t]+[^::\n]{1,40}[::][ \t]*(?<members>\S[^\n]*)/u;
|
|
105
|
+
const MEMBER_SEPARATOR = /[//]/u;
|
|
106
|
+
const INLINE_CODE = /`[^`\n]*`/gu;
|
|
107
|
+
const membersOf = (item) => CATEGORY_ITEM.exec(item)
|
|
108
|
+
?.groups?.["members"]?.replace(INLINE_CODE, "code")
|
|
109
|
+
.split(MEMBER_SEPARATOR)
|
|
110
|
+
.filter((member) => member.trim() !== "").length;
|
|
111
|
+
/** どの行も分類の形なら、区切って並べた項目の数の和。一行でも違えば undefined。 */
|
|
112
|
+
const categorisedCount = (source, list) => {
|
|
113
|
+
const counts = list.itemSpans.map((item) => membersOf(source.slice(item.start, item.end)));
|
|
114
|
+
return counts.every((count) => count !== undefined) ? counts.reduce((sum, count) => sum + (count ?? 0), 0) : undefined;
|
|
115
|
+
};
|
|
116
|
+
/** 予告の数が、行の数か、分類した行に並べた項目の数に合う。 */
|
|
117
|
+
const matchesList = (announced, source, list) => announced === list.items.length || announced === categorisedCount(source, list);
|
|
118
|
+
const mismatchOf = ({ source, words, patterns, neighbours }, list) => {
|
|
85
119
|
if (hasNeighbour(source, list.span, neighbours))
|
|
86
120
|
return [];
|
|
87
121
|
const lead = leadBefore(source, list.span.start);
|
|
@@ -89,8 +123,8 @@ const mismatchOf = ({ source, words, pattern, neighbours }, list) => {
|
|
|
89
123
|
return [];
|
|
90
124
|
const sentenceStart = lastSentenceStart(lead.text);
|
|
91
125
|
const sentence = lead.text.slice(sentenceStart);
|
|
92
|
-
const phrase = announcedIn(sentence, words,
|
|
93
|
-
if (phrase === undefined || phrase.announced
|
|
126
|
+
const phrase = announcedIn(sentence, words, patterns);
|
|
127
|
+
if (phrase === undefined || matchesList(phrase.announced, source, list))
|
|
94
128
|
return [];
|
|
95
129
|
const offset = lead.start + sentenceStart + phrase.start;
|
|
96
130
|
return [{ offset, phrase: sentence.slice(phrase.start, phrase.end).trim(), announced: phrase.announced, listed: list.items.length }];
|
|
@@ -98,7 +132,7 @@ const mismatchOf = ({ source, words, pattern, neighbours }, list) => {
|
|
|
98
132
|
export const announcedCountMismatches = (source, lists, words) => {
|
|
99
133
|
if (words.counters.length === 0)
|
|
100
134
|
return [];
|
|
101
|
-
const context = { source, words,
|
|
135
|
+
const context = { source, words, patterns: { phrase: phrasePattern(words), number: numberPattern(words) }, neighbours: neighboursOf(source, lists) };
|
|
102
136
|
return lists.flatMap((list) => mismatchOf(context, list));
|
|
103
137
|
};
|
|
104
138
|
//# sourceMappingURL=announced-count.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announced-count.js","sourceRoot":"","sources":["../src/announced-count.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"announced-count.js","sourceRoot":"","sources":["../src/announced-count.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Lexicon, Sentence, Token } from "./plugin.ts";
|
|
2
|
+
export type ListMember = {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly offset: number;
|
|
5
|
+
};
|
|
6
|
+
export type ListStatement = {
|
|
7
|
+
readonly group: string;
|
|
8
|
+
readonly offset: number;
|
|
9
|
+
readonly members: readonly ListMember[];
|
|
10
|
+
};
|
|
11
|
+
export type OutsideMember = {
|
|
12
|
+
readonly member: ListMember;
|
|
13
|
+
readonly announced: ListStatement;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 並んだ名前を、語の並びの順に読む。固有名詞が続けば一つの名前、つなぐ語(and、と、、)は名前の区切り。ほかの語に当たったら止まる。
|
|
17
|
+
* 名前で始まらなければ一覧ではない(supported on the web)。
|
|
18
|
+
*/
|
|
19
|
+
export declare const namesInOrder: (tokens: readonly Token[], joiners: ReadonlySet<string>, source: string) => ListMember[];
|
|
20
|
+
/** 一覧を読む言葉。frames は一覧を言う語、joiners は名前をつなぐ語、negations は打ち消しの語(小文字)。 */
|
|
21
|
+
export type ListWords = {
|
|
22
|
+
readonly frames: Lexicon;
|
|
23
|
+
readonly joiners: ReadonlySet<string>;
|
|
24
|
+
readonly negations: ReadonlySet<string>;
|
|
25
|
+
};
|
|
26
|
+
/** 文の中の、一覧を言う語と、その隣の名前。group の無い語は比べる相手が決まらないので読まない。打ち消した文も読まない。 */
|
|
27
|
+
export declare const listStatementsIn: (sentence: Sentence, words: ListWords, source: string) => ListStatement[];
|
|
28
|
+
/** 最初に挙げた一覧より後の文で、同じ組の語が言う、一覧に無い名前。名前ごとに最初の一つ。 */
|
|
29
|
+
export declare const outsideMembers: (statements: readonly ListStatement[]) => OutsideMember[];
|
|
30
|
+
//# sourceMappingURL=announced-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announced-list.d.ts","sourceRoot":"","sources":["../src/announced-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAM1E,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,CAAC;AAEzH,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC;AAoB/F;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,SAAS,KAAK,EAAE,EAAE,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,MAAM,KAAG,UAAU,EAU/G,CAAC;AAcF,sEAAsE;AACtE,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAMrI,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,GAAI,UAAU,QAAQ,EAAE,OAAO,SAAS,EAAE,QAAQ,MAAM,KAAG,aAAa,EAapG,CAAC;AAmBF,kDAAkD;AAClD,eAAO,MAAM,cAAc,GAAI,YAAY,SAAS,aAAa,EAAE,KAAG,aAAa,EAoBlF,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { entryRanges } from "./detectors/lexicon-match.js";
|
|
2
|
+
const UPPER = /\p{Lu}/u;
|
|
3
|
+
/**
|
|
4
|
+
* 名前の語。固有名詞のほか、大文字を含む名詞(macOS、Linux)。日本語の解析器は英字の名前を名詞とも固有名詞とも読むので、
|
|
5
|
+
* 品詞だけでは同じ一覧の名前が揃わない。
|
|
6
|
+
*/
|
|
7
|
+
const isNameToken = (token) => token.pos === "PROPN" || (token.pos === "NOUN" && UPPER.test(token.surface));
|
|
8
|
+
const isJoiner = (token, joiners) => joiners.has(token.surface.toLowerCase());
|
|
9
|
+
/** 名前の語の並び(前へ読んだときは逆順)から、source の上の名前。 */
|
|
10
|
+
const memberOf = (run, source) => {
|
|
11
|
+
if (run.length === 0)
|
|
12
|
+
return undefined;
|
|
13
|
+
const start = Math.min(...run.map((token) => token.span.start));
|
|
14
|
+
const end = Math.max(...run.map((token) => token.span.end));
|
|
15
|
+
return { name: source.slice(start, end).replaceAll(/\s+/gu, " "), offset: start };
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* 並んだ名前を、語の並びの順に読む。固有名詞が続けば一つの名前、つなぐ語(and、と、、)は名前の区切り。ほかの語に当たったら止まる。
|
|
19
|
+
* 名前で始まらなければ一覧ではない(supported on the web)。
|
|
20
|
+
*/
|
|
21
|
+
export const namesInOrder = (tokens, joiners, source) => {
|
|
22
|
+
const runs = [[]];
|
|
23
|
+
tokens.every((token) => {
|
|
24
|
+
const current = runs.at(-1) ?? [];
|
|
25
|
+
if (isNameToken(token))
|
|
26
|
+
current.push(token);
|
|
27
|
+
else if (isJoiner(token, joiners) && current.length > 0)
|
|
28
|
+
runs.push([]);
|
|
29
|
+
else
|
|
30
|
+
return false;
|
|
31
|
+
return true;
|
|
32
|
+
});
|
|
33
|
+
return runs.flatMap((run) => memberOf(run, source) ?? []);
|
|
34
|
+
};
|
|
35
|
+
/** 一覧の語の、一つの現れから読んだ名前。before の語は後ろの名前を、after の語は前の名前を読む。 */
|
|
36
|
+
const membersAt = (tokens, entry, range, joiners, source) => entry.position === "after"
|
|
37
|
+
? namesInOrder(tokens.slice(0, range.start).toReversed(), joiners, source).toReversed()
|
|
38
|
+
: namesInOrder(tokens.slice(range.end), joiners, source);
|
|
39
|
+
/** 打ち消した文(neither is available on Docker Hub、Linux には対応していません)は、一覧に足す名前ではなく、外す名前を言う。 */
|
|
40
|
+
const isNegated = (tokens, negations) => tokens.some((token) => negations.has(token.surface.toLowerCase()) || negations.has((token.lemma ?? "").toLowerCase()));
|
|
41
|
+
/** 文の中の、一覧を言う語と、その隣の名前。group の無い語は比べる相手が決まらないので読まない。打ち消した文も読まない。 */
|
|
42
|
+
export const listStatementsIn = (sentence, words, source) => {
|
|
43
|
+
const tokens = sentence.tokens ?? [];
|
|
44
|
+
const { frames, joiners } = words;
|
|
45
|
+
if (isNegated(tokens, words.negations))
|
|
46
|
+
return [];
|
|
47
|
+
return frames.flatMap((entry) => {
|
|
48
|
+
const group = entry.group;
|
|
49
|
+
if (group === undefined)
|
|
50
|
+
return [];
|
|
51
|
+
return entryRanges(sentence, entry).flatMap((range) => {
|
|
52
|
+
const members = membersAt(tokens, entry, range, joiners, source);
|
|
53
|
+
const offset = tokens[range.start]?.span.start ?? sentence.span.start;
|
|
54
|
+
return members.length === 0 ? [] : [{ group, offset, members }];
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
/** 比べる形。大文字小文字・幅・空白は名前を変えない。 */
|
|
59
|
+
const comparable = (name) => name.normalize("NFKC").toLowerCase().replaceAll(/\s+/gu, "");
|
|
60
|
+
/** 二つ以上の名前を挙げた最初の文。組ごとに一つ。 */
|
|
61
|
+
const announcements = (statements) => statements.reduce((found, statement) => {
|
|
62
|
+
if (statement.members.length >= 2 && !found.has(statement.group))
|
|
63
|
+
found.set(statement.group, statement);
|
|
64
|
+
return found;
|
|
65
|
+
}, new Map());
|
|
66
|
+
/**
|
|
67
|
+
* 後の文が、一覧と一つも重ならない二つ以上の名前を挙げていれば、別のものの一覧(RIS は EndNote と RefWorks、BibTeX は BibDesk と LaTeX)。
|
|
68
|
+
* そこから先は、一つだけ名前を言う文がどちらの一覧の続きか決まらないので、その組は比べない。
|
|
69
|
+
*/
|
|
70
|
+
const isAnotherList = (statement, known) => statement.members.length >= 2 && !statement.members.some((member) => known.has(comparable(member.name)));
|
|
71
|
+
/** 最初に挙げた一覧より後の文で、同じ組の語が言う、一覧に無い名前。名前ごとに最初の一つ。 */
|
|
72
|
+
export const outsideMembers = (statements) => {
|
|
73
|
+
const ordered = statements.toSorted((left, right) => left.offset - right.offset);
|
|
74
|
+
const announced = announcements(ordered);
|
|
75
|
+
const reported = new Set();
|
|
76
|
+
const ambiguous = new Set();
|
|
77
|
+
return ordered.flatMap((statement) => {
|
|
78
|
+
const list = announced.get(statement.group);
|
|
79
|
+
if (list === undefined || statement.offset <= list.offset || ambiguous.has(statement.group))
|
|
80
|
+
return [];
|
|
81
|
+
const known = new Set(list.members.map((member) => comparable(member.name)));
|
|
82
|
+
if (isAnotherList(statement, known)) {
|
|
83
|
+
ambiguous.add(statement.group);
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
return statement.members.flatMap((member) => {
|
|
87
|
+
const key = `${statement.group}\u0000${comparable(member.name)}`;
|
|
88
|
+
if (known.has(comparable(member.name)) || reported.has(key))
|
|
89
|
+
return [];
|
|
90
|
+
reported.add(key);
|
|
91
|
+
return [{ member, announced: list }];
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=announced-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announced-list.js","sourceRoot":"","sources":["../src/announced-list.ts"],"names":[],"mappings":"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"}
|