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
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A numbered chapter (第1章), or an article numbered at the top level (第3条, 「1 適用範囲」, "2. Payment"). Clauses
|
|
3
|
+
* number from 1 at the top, so a tree whose articles are all dotted (## 0.18.0, ## 1.0 in a changelog) holds versions,
|
|
4
|
+
* not clauses. A 号 item or a heading is not a clause.
|
|
5
|
+
*/
|
|
6
|
+
const isClause = (node) => node.kind === "chapter" || (node.kind === "article" && !node.address.includes("."));
|
|
7
|
+
/** Pure: whether the tree holds a numbered clause anywhere. */
|
|
8
|
+
export const numbersClauses = (node) => isClause(node) || node.children.some(numbersClauses);
|
|
9
|
+
//# sourceMappingURL=numbered-clauses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbered-clauses.js","sourceRoot":"","sources":["../../src/structure/numbered-clauses.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,QAAQ,GAAG,CAAC,IAAmB,EAAW,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvI,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAmB,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"universal.d.ts","sourceRoot":"","sources":["../../src/structure/universal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"universal.d.ts","sourceRoot":"","sources":["../../src/structure/universal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AA4BtF,2DAA2D;AAC3D,KAAK,UAAU,GAAG,YAAY,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,gBAAgB,EAAE,mBAAiB,KAAG,UAAU,GAAG,SAStG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,UAAU,EAAE,cAAc,iBAAiB,CAAC,cAAc,CAAC,KAAG,OACnB,CAAC;AAE7E,sDAAsD;AACtD,eAAO,MAAM,eAAe,GAAI,UAAU,iBAAiB,EAAE,MAAM,MAAM,EAAE,SAAS,gBAAgB,EAAE,WAAW,OAAO,KAAG,YAAY,GAAG,SAKzI,CAAC"}
|
|
@@ -3,7 +3,12 @@ import { numberInSentence } from "./number-in-sentence.js";
|
|
|
3
3
|
* 「4.2 設定」「3.1.4 Scope」のような通し番号。数字と点だけで書くので言語を問わない。
|
|
4
4
|
* 各部分を 3 桁・深さを 6 までに抑え、後戻りが爆発しない形にしてある。
|
|
5
5
|
*/
|
|
6
|
-
const DOTTED = /^[ \t]{0,3}(?<number>\d{1,3}(?:\.\d{1,3}){0,5})(?<closing
|
|
6
|
+
const DOTTED = /^[ \t]{0,3}(?<number>\d{1,3}(?:\.\d{1,3}){0,5})(?<closing>[..])?[ \t\u3000]+(?<rest>\S.*)$/u;
|
|
7
|
+
/**
|
|
8
|
+
* 見出しで、点で閉じた番号に題を詰めて書いたもの(「7.委託」「7.委託」「2.Overview」)。後ろが数字なら小数(「1.5万人」)、
|
|
9
|
+
* 小文字なら版(「2.x 系」)なので読まない。
|
|
10
|
+
*/
|
|
11
|
+
const TIGHT_HEADING = /^[ \t]{0,3}(?<number>\d{1,3}(?:\.\d{1,3}){0,5})(?<closing>[..])(?<rest>[^\s\d\p{Ll}..].*)$/u;
|
|
7
12
|
/**
|
|
8
13
|
* RFC のようなテキストの仕様書(Markdown でないもの)の章見出し「5. Security Considerations」。Markdown では、行内のコードを伏せた空白が
|
|
9
14
|
* 同じ形に見えるので読まない。行頭から、点の後ろに空白が 2 つ以上あり、
|
|
@@ -13,12 +18,13 @@ const TOP_SECTION = /^\d{1,3}\. {2,}\S/u;
|
|
|
13
18
|
const SENTENCE_END = /[.。:;,、!?!?]$/u;
|
|
14
19
|
const MAX_TITLE = 80;
|
|
15
20
|
const isTopSection = (line, rest) => TOP_SECTION.test(line) && rest.length <= MAX_TITLE && !SENTENCE_END.test(rest);
|
|
21
|
+
const dottedGroups = (line, context) => DOTTED.exec(line)?.groups ?? (context.isHeading ? TIGHT_HEADING.exec(line)?.groups : undefined);
|
|
16
22
|
/**
|
|
17
23
|
* 本文の「1. 」は箇条書きで、見出しの「1. 」は章番号。点を含まない番号は、見出しの行か、テキストの章見出しの形でだけ読む。
|
|
18
24
|
* 「4.2 」のように点を含むものは、.txt の仕様書でも見出しとして書かれるので本文でも読む。
|
|
19
25
|
*/
|
|
20
26
|
export const dottedNumber = (line, context, plainText = false) => {
|
|
21
|
-
const groups =
|
|
27
|
+
const groups = dottedGroups(line, context);
|
|
22
28
|
const number = groups?.["number"];
|
|
23
29
|
if (number === undefined)
|
|
24
30
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"universal.js","sourceRoot":"","sources":["../../src/structure/universal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"universal.js","sourceRoot":"","sources":["../../src/structure/universal.ts"],"names":[],"mappings":"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"}
|
package/dist/style-parse.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export type StyleSource = {
|
|
|
3
3
|
readonly title: Localized;
|
|
4
4
|
readonly url: string;
|
|
5
5
|
};
|
|
6
|
+
/** { rule id: { language: limit } }. A guideline gives a number for one language (60 characters for Japanese) and none for another. */
|
|
7
|
+
export type StyleLimits = Readonly<Record<string, Readonly<Record<string, number>>>>;
|
|
6
8
|
export type StyleDefinition = {
|
|
7
9
|
readonly id: string;
|
|
8
10
|
readonly name: Localized;
|
|
@@ -13,7 +15,11 @@ export type StyleDefinition = {
|
|
|
13
15
|
readonly rules: Readonly<Record<string, Level>>;
|
|
14
16
|
/** { rule id: { option: value } }, checked against the rules' declared options by the tests. */
|
|
15
17
|
readonly options: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
18
|
+
/** The numbers the guideline sets, by language. The rule needs a level under rules too, or the limit decides nothing. */
|
|
19
|
+
readonly limits: StyleLimits;
|
|
16
20
|
};
|
|
17
21
|
/** One style file. Throws on anything it cannot read: the file ships with chaff, so a wrong entry is chaff's bug. */
|
|
18
22
|
export declare const parseStyle: (raw: unknown, file: string) => StyleDefinition;
|
|
23
|
+
/** One style, wherever it was written (where names it in what is thrown). Throws on anything it cannot read. */
|
|
24
|
+
export declare const styleOf: (raw: unknown, where: string) => StyleDefinition;
|
|
19
25
|
//# sourceMappingURL=style-parse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-parse.d.ts","sourceRoot":"","sources":["../src/style-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"style-parse.d.ts","sourceRoot":"","sources":["../src/style-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,uIAAuI;AACvI,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,yHAAyH;IACzH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B,CAAC;AAgEF,qHAAqH;AACrH,eAAO,MAAM,UAAU,GAAI,KAAK,OAAO,EAAE,MAAM,MAAM,KAAG,eAIvD,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,OAAO,GAAI,KAAK,OAAO,EAAE,OAAO,MAAM,KAAG,eAgBrD,CAAC"}
|
package/dist/style-parse.js
CHANGED
|
@@ -36,14 +36,41 @@ const optionsOf = (value, where) => {
|
|
|
36
36
|
return [id, options];
|
|
37
37
|
}));
|
|
38
38
|
};
|
|
39
|
+
const isLimit = (value) => typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
40
|
+
const languageLimitsOf = (id, value, where) => {
|
|
41
|
+
if (!isRecord(value) || Object.keys(value).length === 0)
|
|
42
|
+
throw new Error(`${where}: limits.${id} must be a map of languages to numbers`);
|
|
43
|
+
return Object.fromEntries(Object.entries(value).map(([language, limit]) => {
|
|
44
|
+
if (!isLimit(limit))
|
|
45
|
+
throw new Error(`${where}: limits.${id}.${language} must be a number above 0`);
|
|
46
|
+
return [language, limit];
|
|
47
|
+
}));
|
|
48
|
+
};
|
|
49
|
+
const limitsOf = (value, rules, where) => {
|
|
50
|
+
if (value === undefined)
|
|
51
|
+
return {};
|
|
52
|
+
if (!isRecord(value))
|
|
53
|
+
throw new Error(`${where}: limits must be a map of rule ids`);
|
|
54
|
+
return Object.fromEntries(Object.entries(value).map(([id, byLanguage]) => {
|
|
55
|
+
if (rules[id] === undefined || rules[id] === "off")
|
|
56
|
+
throw new Error(`${where}: limits.${id} needs ${id} under rules at a level that runs`);
|
|
57
|
+
return [id, languageLimitsOf(id, byLanguage, where)];
|
|
58
|
+
}));
|
|
59
|
+
};
|
|
39
60
|
/** One style file. Throws on anything it cannot read: the file ships with chaff, so a wrong entry is chaff's bug. */
|
|
40
61
|
export const parseStyle = (raw, file) => {
|
|
62
|
+
const id = isRecord(raw) ? raw["id"] : undefined;
|
|
63
|
+
if (isRecord(raw) && (typeof id !== "string" || `${id}.yaml` !== file))
|
|
64
|
+
throw new Error(`${file}: id must be the file's name without .yaml`);
|
|
65
|
+
return styleOf(raw, file);
|
|
66
|
+
};
|
|
67
|
+
/** One style, wherever it was written (where names it in what is thrown). Throws on anything it cannot read. */
|
|
68
|
+
export const styleOf = (raw, where) => {
|
|
41
69
|
if (!isRecord(raw))
|
|
42
|
-
throw new Error(`${
|
|
70
|
+
throw new Error(`${where}: a style must be a map`);
|
|
43
71
|
const id = raw["id"];
|
|
44
|
-
if (typeof id !== "string" ||
|
|
45
|
-
throw new Error(`${
|
|
46
|
-
const where = `${file}`;
|
|
72
|
+
if (typeof id !== "string" || id === "")
|
|
73
|
+
throw new Error(`${where}: a style needs an id`);
|
|
47
74
|
const rules = levelsOf(raw["rules"], where);
|
|
48
75
|
const options = optionsOf(raw["options"], where);
|
|
49
76
|
if (Object.keys(rules).length === 0 && Object.keys(options).length === 0)
|
|
@@ -55,6 +82,7 @@ export const parseStyle = (raw, file) => {
|
|
|
55
82
|
source: sourceOf(raw["source"], where),
|
|
56
83
|
rules,
|
|
57
84
|
options,
|
|
85
|
+
limits: limitsOf(raw["limits"], rules, where),
|
|
58
86
|
};
|
|
59
87
|
};
|
|
60
88
|
//# sourceMappingURL=style-parse.js.map
|
package/dist/style-parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-parse.js","sourceRoot":"","sources":["../src/style-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"style-parse.js","sourceRoot":"","sources":["../src/style-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAyBtC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE5I,MAAM,WAAW,GAAG,CAAC,KAAc,EAAsB,EAAE,CACzD,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAEpI,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,KAAa,EAAa,EAAE;IAC9E,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,KAAK,4BAA4B,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,KAAa,EAAe,EAAE;IAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0CAA0C,CAAC,CAAC;IAChI,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,KAAa,EAAyB,EAAE;IACxE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6CAA6C,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;QACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,kBAAkB,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC3H,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,KAAa,EAAqD,EAAE;IACrG,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,aAAa,EAAE,0CAA0C,CAAC,CAAC;QAC3G,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAEtH,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAE,KAAc,EAAE,KAAa,EAA0B,EAAE;IAC7F,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE,wCAAwC,CAAC,CAAC;IACzI,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE,IAAI,QAAQ,2BAA2B,CAAC,CAAC;QACpG,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,KAAsC,EAAE,KAAa,EAA0C,EAAE;IACjI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oCAAoC,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE;QAC7C,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE,UAAU,EAAE,mCAAmC,CAAC,CAAC;QAC3I,OAAO,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,qHAAqH;AACrH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,IAAY,EAAmB,EAAE;IACxE,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4CAA4C,CAAC,CAAC;IAC7I,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,gHAAgH;AAChH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,KAAa,EAAmB,EAAE;IACtE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAC;IACzI,OAAO;QACL,EAAE;QACF,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;QAC7C,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;QACtD,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;QACtC,KAAK;QACL,OAAO;QACP,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;KAC9C,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import type { Span } from "./plugin.ts";
|
|
2
|
+
export type Line = {
|
|
3
|
+
readonly start: number;
|
|
4
|
+
readonly end: number;
|
|
5
|
+
readonly next: number;
|
|
6
|
+
};
|
|
2
7
|
/** 行が、括弧一組とその中の短い句だけか。 */
|
|
3
8
|
export declare const isSubheadingLine: (line: string) => boolean;
|
|
4
|
-
/**
|
|
5
|
-
export
|
|
9
|
+
/** 行の範囲(text の中の位置)。その行だけで一つの項目として立つか。 */
|
|
10
|
+
export type StandsAlone = (start: number, end: number) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 一つで立つ行: 小見出しの行か standsAlone が言う行(リンクだけの行など)で、前の行が無いか、文で終わっているか、
|
|
13
|
+
* 次を導く「:」で終わっているか、それも一つで立つ行。前の行が文の途中で終わるなら、その行は折り返した文の中にある。
|
|
14
|
+
*/
|
|
15
|
+
export declare const standaloneLines: (text: string, standsAlone?: StandsAlone) => Line[];
|
|
16
|
+
/**
|
|
17
|
+
* lines のうち、段落の終わり(end)まで切れ目なく続く後ろの並び。lines は text の順で、行は次の行の頭(next)で隣の行に続く。
|
|
18
|
+
* 段落の途中の 1 行は本文の文の一つで、終わりまで続く並びだけが本文の後に置いた一覧。
|
|
19
|
+
*/
|
|
20
|
+
export declare const closingRun: (lines: readonly Line[], end: number) => readonly Line[];
|
|
21
|
+
/** 段落 text を、一つで立つ行の後ろ(と、導きの行に続くときは前)で切った片。切る所が無ければ text 全体の 1 片。片は改行を含まない端で終わる。 */
|
|
22
|
+
export declare const subheadingPieces: (text: string, standsAlone?: StandsAlone) => Span[];
|
|
6
23
|
//# sourceMappingURL=subheading-line.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subheading-line.d.ts","sourceRoot":"","sources":["../src/subheading-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"subheading-line.d.ts","sourceRoot":"","sources":["../src/subheading-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAgCxC,MAAM,MAAM,IAAI,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAW3F,0BAA0B;AAC1B,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,OAO/C,CAAC;AAIF,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,cAAa,WAAyB,KAAG,IAAI,EAS1F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,IAAI,EAAE,EAAE,KAAK,MAAM,KAAG,SAAS,IAAI,EAIvE,CAAC;AAgBR,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,cAAa,WAAyB,KAAG,IAAI,EAO3F,CAAC"}
|
package/dist/subheading-line.js
CHANGED
|
@@ -20,6 +20,8 @@ const MAX_SUBHEADING_CHARS = 40;
|
|
|
20
20
|
const SENTENCE_END_INSIDE = /(?:[。!?!?])|(?:[..]$)/u;
|
|
21
21
|
/** 行が文で終わっている。句点の後に閉じ括弧・引用符が続いてよい。 */
|
|
22
22
|
const ENDS_SENTENCE = /[。.!?.!?][」』"'”’))\]]】〕]*$/u;
|
|
23
|
+
/** 行が、次の行を導く印(「関連記事:」)で終わっている。その次の行は前の行の続きではない。 */
|
|
24
|
+
const LEADS_IN = /[::]$/u;
|
|
23
25
|
const NEWLINE = /\r?\n/gu;
|
|
24
26
|
const linesOf = (text) => {
|
|
25
27
|
const breaks = [...text.matchAll(NEWLINE)];
|
|
@@ -40,18 +42,44 @@ export const isSubheadingLine = (line) => {
|
|
|
40
42
|
return chars > 0 && chars <= MAX_SUBHEADING_CHARS && !inner.includes(close) && !inner.includes(trimmed[0] ?? "") && !SENTENCE_END_INSIDE.test(inner);
|
|
41
43
|
};
|
|
42
44
|
const hasText = (text, line) => line !== undefined && text.slice(line.start, line.end).trim().length > 0;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
/**
|
|
46
|
+
* 一つで立つ行: 小見出しの行か standsAlone が言う行(リンクだけの行など)で、前の行が無いか、文で終わっているか、
|
|
47
|
+
* 次を導く「:」で終わっているか、それも一つで立つ行。前の行が文の途中で終わるなら、その行は折り返した文の中にある。
|
|
48
|
+
*/
|
|
49
|
+
export const standaloneLines = (text, standsAlone = () => false) => {
|
|
50
|
+
const lines = linesOf(text);
|
|
51
|
+
const alone = (line) => isSubheadingLine(text.slice(line.start, line.end)) || standsAlone(line.start, line.end);
|
|
52
|
+
const startsFresh = (previous) => {
|
|
53
|
+
if (previous === undefined || alone(previous))
|
|
54
|
+
return true;
|
|
55
|
+
const written = text.slice(previous.start, previous.end).trimEnd();
|
|
56
|
+
return ENDS_SENTENCE.test(written) || LEADS_IN.test(written);
|
|
57
|
+
};
|
|
58
|
+
return lines.filter((line, index) => alone(line) && startsFresh(lines[index - 1]));
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* lines のうち、段落の終わり(end)まで切れ目なく続く後ろの並び。lines は text の順で、行は次の行の頭(next)で隣の行に続く。
|
|
62
|
+
* 段落の途中の 1 行は本文の文の一つで、終わりまで続く並びだけが本文の後に置いた一覧。
|
|
63
|
+
*/
|
|
64
|
+
export const closingRun = (lines, end) => lines.reduceRight((acc, line) => (line.next === acc.until ? { run: [line, ...acc.run], until: line.start } : acc), { run: [], until: end }).run;
|
|
65
|
+
/**
|
|
66
|
+
* 一つで立つ行(lines[index])の切れ目。後ろに続く行があれば後ろで切る。前の行が「:」で終わる導きなら前でも切る。
|
|
67
|
+
* 文で終わる前の行は文の分割器が切るので、前では切らない。
|
|
68
|
+
*/
|
|
69
|
+
const cutsAround = (text, lines, index) => {
|
|
70
|
+
const [previous, line, following] = [lines[index - 1], lines[index], lines[index + 1]];
|
|
71
|
+
if (line === undefined)
|
|
72
|
+
return [];
|
|
73
|
+
const leadsIn = previous !== undefined && LEADS_IN.test(text.slice(previous.start, previous.end).trimEnd());
|
|
74
|
+
return [...(leadsIn ? [{ end: previous.end, next: line.start }] : []), ...(hasText(text, following) ? [{ end: line.end, next: line.next }] : [])];
|
|
49
75
|
};
|
|
50
|
-
/** 段落 text
|
|
51
|
-
export const subheadingPieces = (text) => {
|
|
76
|
+
/** 段落 text を、一つで立つ行の後ろ(と、導きの行に続くときは前)で切った片。切る所が無ければ text 全体の 1 片。片は改行を含まない端で終わる。 */
|
|
77
|
+
export const subheadingPieces = (text, standsAlone = () => false) => {
|
|
52
78
|
const lines = linesOf(text);
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
79
|
+
const indexOf = new Map(lines.map((line, index) => [line.start, index]));
|
|
80
|
+
const cuts = standaloneLines(text, standsAlone).flatMap((line) => cutsAround(text, lines, indexOf.get(line.start) ?? 0));
|
|
81
|
+
const ordered = [...new Map(cuts.map((cut) => [cut.next, cut])).values()].toSorted((left, right) => left.next - right.next);
|
|
82
|
+
const starts = [0, ...ordered.map((cut) => cut.next)];
|
|
83
|
+
return starts.map((start, index) => ({ start, end: ordered[index]?.end ?? text.length }));
|
|
56
84
|
};
|
|
57
85
|
//# sourceMappingURL=subheading-line.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subheading-line.js","sourceRoot":"","sources":["../src/subheading-line.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,KAAK,GAAgC,IAAI,GAAG,CAAC;IACjD,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;CACX,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,iDAAiD;AACjD,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AACrD,sCAAsC;AACtC,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAEpD,MAAM,OAAO,GAAG,SAAS,CAAC;AAI1B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE;IACvC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9H,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,oBAAoB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAsB,EAAW,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"subheading-line.js","sourceRoot":"","sources":["../src/subheading-line.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Sentence } from "./plugin.ts";
|
|
2
|
+
/**
|
|
3
|
+
* How many of the sentences came back with tokens. A prepared adapter tags every sentence, so "some" means it could not
|
|
4
|
+
* read part of the document (lang-ja returns no tokens for a paragraph its analyser threw on), and "none" that it tagged nothing.
|
|
5
|
+
*/
|
|
6
|
+
export type TagCoverage = "all" | "some" | "none";
|
|
7
|
+
export declare const tagCoverage: (sentences: readonly Pick<Sentence, "tokens">[]) => TagCoverage;
|
|
8
|
+
//# sourceMappingURL=tag-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-coverage.d.ts","sourceRoot":"","sources":["../src/tag-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,eAAO,MAAM,WAAW,GAAI,WAAW,SAAS,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAG,WAI5E,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const tagCoverage = (sentences) => {
|
|
2
|
+
const tagged = sentences.filter((sentence) => sentence.tokens !== undefined).length;
|
|
3
|
+
if (tagged === sentences.length)
|
|
4
|
+
return "all";
|
|
5
|
+
return tagged === 0 ? "none" : "some";
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=tag-coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-coverage.js","sourceRoot":"","sources":["../src/tag-coverage.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAA8C,EAAe,EAAE;IACzF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACpF,IAAI,MAAM,KAAK,SAAS,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACxC,CAAC,CAAC"}
|
package/genres.yaml
CHANGED
|
@@ -51,6 +51,11 @@ groups:
|
|
|
51
51
|
stock-transition: off
|
|
52
52
|
announcing-opener: off
|
|
53
53
|
colon-lead-in: off
|
|
54
|
+
bold-label-list: off
|
|
55
|
+
# Statutes and opinions write "not inconsistent with" on purpose.
|
|
56
|
+
double-negative: off
|
|
57
|
+
# Legal drafting writes 「…を行う」 and "make a payment" as its register; the corpus statutes are full of them.
|
|
58
|
+
nominalization: off
|
|
54
59
|
# A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up.
|
|
55
60
|
- id: docs
|
|
56
61
|
name: { ja: 説明書, en: Documentation }
|
|
@@ -79,6 +84,7 @@ groups:
|
|
|
79
84
|
stock-transition: off
|
|
80
85
|
announcing-opener: off
|
|
81
86
|
colon-lead-in: off
|
|
87
|
+
bold-label-list: off
|
|
82
88
|
# Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence.
|
|
83
89
|
- id: academic
|
|
84
90
|
name: { ja: 学術, en: Academic }
|
|
@@ -100,6 +106,8 @@ groups:
|
|
|
100
106
|
section-length-uniformity: off
|
|
101
107
|
paragraph-length-variance: off
|
|
102
108
|
stock-transition: off
|
|
109
|
+
bold-label-list: off
|
|
110
|
+
requirement-smell: off
|
|
103
111
|
# Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles.
|
|
104
112
|
# Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps.
|
|
105
113
|
- id: literature
|
|
@@ -148,6 +156,8 @@ groups:
|
|
|
148
156
|
stock-transition: off
|
|
149
157
|
announcing-opener: off
|
|
150
158
|
colon-lead-in: off
|
|
159
|
+
bold-label-list: off
|
|
160
|
+
nominalization: off
|
|
151
161
|
dangling-reference: off
|
|
152
162
|
duplicate-definition: off
|
|
153
163
|
date-order: off
|
|
@@ -157,6 +167,12 @@ groups:
|
|
|
157
167
|
dangling-figure-reference: off
|
|
158
168
|
date-range-reversed: off
|
|
159
169
|
percent-sum-mismatch: off
|
|
170
|
+
vague-figure-reference: off
|
|
171
|
+
# A narrator may hedge, speak with ら dropped, and spell as the work's time and place did.
|
|
172
|
+
double-negative: off
|
|
173
|
+
ra-nuki: off
|
|
174
|
+
spelling-consistency: off
|
|
175
|
+
requirement-smell: off
|
|
160
176
|
# A speech opens with greetings and closes with thanks: that is its form, not padding.
|
|
161
177
|
- id: speech
|
|
162
178
|
name: { ja: 話し言葉, en: Speech }
|
|
@@ -175,6 +191,10 @@ groups:
|
|
|
175
191
|
stock-transition: off
|
|
176
192
|
announcing-opener: off
|
|
177
193
|
colon-lead-in: off
|
|
194
|
+
# A transcript keeps the speaker's words: hedges and ら dropped as spoken.
|
|
195
|
+
double-negative: off
|
|
196
|
+
ra-nuki: off
|
|
197
|
+
requirement-smell: off
|
|
178
198
|
|
|
179
199
|
genres:
|
|
180
200
|
- id: technical/spec
|
|
@@ -227,11 +247,21 @@ genres:
|
|
|
227
247
|
summary:
|
|
228
248
|
ja: プレスリリースと、お知らせ
|
|
229
249
|
en: Press releases and public notices
|
|
250
|
+
# A release names the agency, the people quoted, the mission and the place: that is its news, not a crowd of
|
|
251
|
+
# names to thin out. Every English release in the corpus (GSA, NASA, NOAA) is over the limit.
|
|
252
|
+
rules:
|
|
253
|
+
proper-noun-density: off
|
|
230
254
|
- id: business/meeting-notes
|
|
231
255
|
name: { ja: 議事録, en: Meeting notes }
|
|
232
256
|
summary:
|
|
233
257
|
ja: 議事録・議事要旨
|
|
234
258
|
en: Minutes and meeting notes
|
|
259
|
+
# Minutes record what the meeting did (the meeting was held, 了承された): the actor is the meeting, by the form.
|
|
260
|
+
# In the corpus the rule fires on nearly every set of minutes, English and Japanese.
|
|
261
|
+
# A header block of labelled fields (- **日時**:…, - **出席者**:…) is the form of minutes, not a list of captions.
|
|
262
|
+
rules:
|
|
263
|
+
agentless-passive: off
|
|
264
|
+
bold-label-list: off
|
|
235
265
|
- id: legal/contract
|
|
236
266
|
name: { ja: 契約書・規約, en: Contract and terms }
|
|
237
267
|
summary:
|
|
@@ -275,6 +305,8 @@ genres:
|
|
|
275
305
|
total-mismatch: normal
|
|
276
306
|
dangling-figure-reference: normal
|
|
277
307
|
date-range-reversed: normal
|
|
308
|
+
# A statute defines its 等 terms (以下「個人情報等」という) and uses them in its obligations.
|
|
309
|
+
requirement-smell: off
|
|
278
310
|
- id: legal/judgment
|
|
279
311
|
name: { ja: 判決, en: Court decision }
|
|
280
312
|
summary:
|
|
@@ -283,6 +315,9 @@ genres:
|
|
|
283
315
|
suggest:
|
|
284
316
|
ja: { line: "^(?:#{1,6}\\s*)?(?:主\\s*文|理\\s*由|判\\s*決)\\s*$", min_lines: 2 }
|
|
285
317
|
en: { line: "delivered the opinion of the Court|^(?:Reversed|Affirmed)\\.?$", min_lines: 1 }
|
|
318
|
+
# requirement-smell is for the documents that state requirements: specifications, contracts and documentation.
|
|
319
|
+
rules:
|
|
320
|
+
requirement-smell: off
|
|
286
321
|
- id: legal/patent
|
|
287
322
|
name: { ja: 特許明細書, en: Patent }
|
|
288
323
|
summary:
|
|
@@ -291,6 +326,9 @@ genres:
|
|
|
291
326
|
suggest:
|
|
292
327
|
ja: { line: "【(?:課題|解決手段|請求項[0-90-9]+|選択図|技術分野|背景技術|発明の詳細な説明|特許請求の範囲)】", min_lines: 2 }
|
|
293
328
|
en: { line: "^#{1,6}\\s*(?:BACKGROUND OF THE INVENTION|SUMMARY OF THE INVENTION|Claims\\b)|\\bof claim \\d+", min_lines: 3 }
|
|
329
|
+
# requirement-smell is for the documents that state requirements: specifications, contracts and documentation.
|
|
330
|
+
rules:
|
|
331
|
+
requirement-smell: off
|
|
294
332
|
- id: docs/manual
|
|
295
333
|
name: { ja: マニュアル・手順書, en: Manual and how-to }
|
|
296
334
|
summary:
|
|
@@ -322,6 +360,8 @@ genres:
|
|
|
322
360
|
rules:
|
|
323
361
|
taigen-dome-in-prose: off
|
|
324
362
|
ngram-repetition: off
|
|
363
|
+
# An entry that ends 〜すること or 〜のこと defines a word; it is no requirement.
|
|
364
|
+
requirement-smell: off
|
|
325
365
|
- id: academic/paper
|
|
326
366
|
name: { ja: 論文, en: Academic paper }
|
|
327
367
|
summary:
|
|
@@ -408,6 +448,8 @@ genres:
|
|
|
408
448
|
agreement-slip: off
|
|
409
449
|
sasete-itadaku: off
|
|
410
450
|
double-keigo: off
|
|
451
|
+
# Labelled speaker turns (- **記者**:…) are how a transcript is laid out.
|
|
452
|
+
bold-label-list: off
|
|
411
453
|
cushion-phrase-density: off
|
|
412
454
|
excessive-hedging: off
|
|
413
455
|
unqualified-superlative: off
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chaffjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Prose validation harness. Finds what is hard to read, and never rewrites it for you.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"chaff",
|
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"./plugin": {
|
|
34
34
|
"types": "./src/plugin.ts",
|
|
35
35
|
"import": "./dist/plugin.js"
|
|
36
|
+
},
|
|
37
|
+
"./api": {
|
|
38
|
+
"types": "./src/api.ts",
|
|
39
|
+
"import": "./dist/api.js"
|
|
36
40
|
}
|
|
37
41
|
},
|
|
38
42
|
"files": [
|
|
@@ -57,8 +61,8 @@
|
|
|
57
61
|
},
|
|
58
62
|
"dependencies": {
|
|
59
63
|
"@anthropic-ai/sdk": "^0.125.0",
|
|
60
|
-
"@chaffjs/lang-en": "0.
|
|
61
|
-
"@chaffjs/lang-ja": "0.
|
|
64
|
+
"@chaffjs/lang-en": "0.17.0",
|
|
65
|
+
"@chaffjs/lang-ja": "0.18.0",
|
|
62
66
|
"mdast-util-from-markdown": "^2.0.3",
|
|
63
67
|
"mdast-util-frontmatter": "^2.0.1",
|
|
64
68
|
"mdast-util-gfm-table": "^2.0.0",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
id: acronym-expansion-conflict
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: acronym-expansion-conflict
|
|
5
|
+
severity: warning
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 同じ略語の二通りの展開
|
|
9
|
+
en: Abbreviation expanded two ways
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 同じ略語を二か所で違う名前に展開すると、読み手は二つが同じものか別のものか分かりません。片方は書き違いか、別の文書から貼った文であることが多いです。
|
|
13
|
+
en: An abbreviation spelled out as two different names leaves the reader unsure whether they are the same thing. One of them is usually a slip, or a sentence pasted from another document.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 「{acronym}」をここでは「{name}」と、{firstLine} 行目では「{first}」と展開しています
|
|
17
|
+
en: '"{acronym}" is expanded as "{name}" here and as "{first}" on line {firstLine}'
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: どちらの名前が正しいかを確かめ、一つに揃えてください。別のものなら、別の略語にします。
|
|
21
|
+
en: Check which name is right and use it in both places. If they are different things, give them different abbreviations.
|
|
22
|
+
|
|
23
|
+
placeholders:
|
|
24
|
+
acronym:
|
|
25
|
+
ja: 略語
|
|
26
|
+
en: the abbreviation
|
|
27
|
+
name:
|
|
28
|
+
ja: 名前
|
|
29
|
+
en: one name
|
|
30
|
+
first:
|
|
31
|
+
ja: 別の名前
|
|
32
|
+
en: another
|
|
33
|
+
firstLine:
|
|
34
|
+
ja: 〇
|
|
35
|
+
en: N
|
|
36
|
+
|
|
37
|
+
levels: { strict: error, normal: warning, relaxed: info }
|
|
38
|
+
|
|
39
|
+
use_for: [business, technical, blog, legal, docs, academic, literature, speech]
|
|
40
|
+
|
|
41
|
+
group: consistency
|
|
42
|
+
summary:
|
|
43
|
+
ja: 同じ略語を、文書の中で違う名前に展開している所
|
|
44
|
+
en: The same abbreviation spelled out as two different names in one document
|
|
45
|
+
example:
|
|
46
|
+
ja:
|
|
47
|
+
before: |
|
|
48
|
+
SLA(サービス品質保証)を毎月見直します。障害が続いた月は、SLA(サービスレベル契約)に従って返金します。
|
|
49
|
+
after: |
|
|
50
|
+
SLA(サービス品質保証)を毎月見直します。障害が続いた月は、SLA に従って返金します。
|
|
51
|
+
en:
|
|
52
|
+
before: |
|
|
53
|
+
We review the Service Level Agreement (SLA) every month. After an outage, refunds follow the Support Level Agreement (SLA).
|
|
54
|
+
after: |
|
|
55
|
+
We review the Service Level Agreement (SLA) every month. After an outage, refunds follow the SLA.
|
|
56
|
+
|
|
57
|
+
not_flagged:
|
|
58
|
+
ja: 名前の大文字小文字、ハイフン、終わりの複数の s の違いは同じ名前と見ます。英語の名前は、頭文字が略語と揃うときだけ展開と読みます。
|
|
59
|
+
en: Differences of case, hyphens and a final plural s are not counted. An English name counts as an expansion only when its initials spell the abbreviation.
|
|
60
|
+
rewrite:
|
|
61
|
+
ja:
|
|
62
|
+
direction: 二つの展開のうち正しいほうを書き手に確かめ、もう一方を消すか正しい名前に替えてください。二度目以降は略語だけで書けます。
|
|
63
|
+
pairs:
|
|
64
|
+
- before: SLA(サービス品質保証)を毎月見直します。障害が続いた月は、SLA(サービスレベル契約)に従って返金します。
|
|
65
|
+
after: SLA(サービス品質保証)を毎月見直します。障害が続いた月は、SLA に従って返金します。
|
|
66
|
+
- before: CI(継続的インテグレーション)で毎晩試験します。失敗したら CI(構成情報)を見直します。
|
|
67
|
+
after: CI(継続的インテグレーション)で毎晩試験します。失敗したら構成情報を見直します。(二つが別のものであるとき)
|
|
68
|
+
keep:
|
|
69
|
+
- 正しいほうの名前
|
|
70
|
+
avoid:
|
|
71
|
+
- どちらが正しいかを書き手に聞かずに決める
|
|
72
|
+
en:
|
|
73
|
+
direction: Ask the writer which expansion is right, then remove or correct the other. After the first, the abbreviation alone is enough.
|
|
74
|
+
pairs:
|
|
75
|
+
- before: We review the Service Level Agreement (SLA) every month. After an outage, refunds follow the Support Level Agreement (SLA).
|
|
76
|
+
after: We review the Service Level Agreement (SLA) every month. After an outage, refunds follow the SLA.
|
|
77
|
+
- before: Tests run nightly in CI (Continuous Integration). On a failure, check the CI (Configuration Item).
|
|
78
|
+
after: Tests run nightly in CI (Continuous Integration). On a failure, check the configuration item. (when the two are different things)
|
|
79
|
+
keep:
|
|
80
|
+
- the right name
|
|
81
|
+
avoid:
|
|
82
|
+
- picking one without asking the writer
|
|
@@ -26,6 +26,7 @@ how_to_fix:
|
|
|
26
26
|
levels: { strict: 1, normal: 1, relaxed: 2 }
|
|
27
27
|
|
|
28
28
|
use_for: [business, legal, docs, academic, literature, speech]
|
|
29
|
+
sources: [yasashii-nihongo-2020, plain-2011]
|
|
29
30
|
|
|
30
31
|
group: wording
|
|
31
32
|
summary:
|
|
@@ -45,3 +46,30 @@ not_flagged:
|
|
|
45
46
|
level_meaning:
|
|
46
47
|
ja: 一文に受け身が {limit} 個あれば指摘
|
|
47
48
|
en: reported when a sentence has {limit} passives with no actor
|
|
49
|
+
rewrite:
|
|
50
|
+
ja:
|
|
51
|
+
direction: 誰がしたのかを本文から探して主語にし、能動の文にしてください。本文のどこにも書かれていなければ、作らずに[誰が]と空けて書き手に聞きます。
|
|
52
|
+
pairs:
|
|
53
|
+
- before: 経営会議で検討した結果、予算が承認されました。
|
|
54
|
+
after: 経営会議が予算を承認しました。
|
|
55
|
+
- before: 仕様が変更されました。
|
|
56
|
+
after: [誰が]仕様を変更しました。
|
|
57
|
+
keep:
|
|
58
|
+
- 何をしたのか、いつしたのか
|
|
59
|
+
- 誰がしたかが大事でない文の受け身(「資料は火曜日に配られます」)
|
|
60
|
+
avoid:
|
|
61
|
+
- 主語に「当社」「担当者」のような、本文に無い名前を作る
|
|
62
|
+
- 受け身を全部能動に直す
|
|
63
|
+
en:
|
|
64
|
+
direction: Find who acted in the text, make them the subject, and make the sentence active. If the text never says who, do not invent one; leave [who] for the writer.
|
|
65
|
+
pairs:
|
|
66
|
+
- before: After review by the steering group, the budget was approved.
|
|
67
|
+
after: The steering group approved the budget.
|
|
68
|
+
- before: The spec was changed.
|
|
69
|
+
after: "[who] changed the spec."
|
|
70
|
+
keep:
|
|
71
|
+
- what was done, and when
|
|
72
|
+
- a passive where who acted does not matter ("handouts are given out on Tuesday")
|
|
73
|
+
avoid:
|
|
74
|
+
- inventing an actor ("the team", "management") the text does not name
|
|
75
|
+
- making every passive active
|