chaffjs 0.21.0 → 0.23.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.
Files changed (360) hide show
  1. package/README.md +9 -2
  2. package/dist/api.d.ts +14 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/cli-args.d.ts +2 -0
  6. package/dist/cli-args.d.ts.map +1 -1
  7. package/dist/cli-args.js +2 -0
  8. package/dist/cli-args.js.map +1 -1
  9. package/dist/cli-text.d.ts.map +1 -1
  10. package/dist/cli-text.js +6 -0
  11. package/dist/cli-text.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +17 -30
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/feedback.d.ts +3 -0
  16. package/dist/commands/feedback.d.ts.map +1 -1
  17. package/dist/commands/feedback.js.map +1 -1
  18. package/dist/commands/fix-plan.d.ts.map +1 -1
  19. package/dist/commands/fix-plan.js +5 -0
  20. package/dist/commands/fix-plan.js.map +1 -1
  21. package/dist/commands/init-command.d.ts +4 -0
  22. package/dist/commands/init-command.d.ts.map +1 -0
  23. package/dist/commands/init-command.js +15 -0
  24. package/dist/commands/init-command.js.map +1 -0
  25. package/dist/commands/plugin-init.d.ts +20 -0
  26. package/dist/commands/plugin-init.d.ts.map +1 -0
  27. package/dist/commands/plugin-init.js +129 -0
  28. package/dist/commands/plugin-init.js.map +1 -0
  29. package/dist/commands/plugin-test.d.ts +11 -0
  30. package/dist/commands/plugin-test.d.ts.map +1 -0
  31. package/dist/commands/plugin-test.js +81 -0
  32. package/dist/commands/plugin-test.js.map +1 -0
  33. package/dist/commands/rules.d.ts +9 -0
  34. package/dist/commands/rules.d.ts.map +1 -0
  35. package/dist/commands/rules.js +26 -0
  36. package/dist/commands/rules.js.map +1 -0
  37. package/dist/config/load.d.ts +6 -1
  38. package/dist/config/load.d.ts.map +1 -1
  39. package/dist/config/load.js +1 -0
  40. package/dist/config/load.js.map +1 -1
  41. package/dist/config/style.js +1 -1
  42. package/dist/config/style.js.map +1 -1
  43. package/dist/config/warnings.d.ts +1 -1
  44. package/dist/config/warnings.d.ts.map +1 -1
  45. package/dist/config/warnings.js +3 -1
  46. package/dist/config/warnings.js.map +1 -1
  47. package/dist/custom/problems.d.ts.map +1 -1
  48. package/dist/custom/problems.js +1 -2
  49. package/dist/custom/problems.js.map +1 -1
  50. package/dist/detectors/amount-for-count.d.ts +21 -0
  51. package/dist/detectors/amount-for-count.d.ts.map +1 -0
  52. package/dist/detectors/amount-for-count.js +55 -0
  53. package/dist/detectors/amount-for-count.js.map +1 -0
  54. package/dist/detectors/currency-notation.d.ts +29 -0
  55. package/dist/detectors/currency-notation.d.ts.map +1 -0
  56. package/dist/detectors/currency-notation.js +58 -0
  57. package/dist/detectors/currency-notation.js.map +1 -0
  58. package/dist/detectors/dangling-opener.d.ts +14 -0
  59. package/dist/detectors/dangling-opener.d.ts.map +1 -0
  60. package/dist/detectors/dangling-opener.js +55 -0
  61. package/dist/detectors/dangling-opener.js.map +1 -0
  62. package/dist/detectors/ellipsis.d.ts +10 -0
  63. package/dist/detectors/ellipsis.d.ts.map +1 -0
  64. package/dist/detectors/ellipsis.js +56 -0
  65. package/dist/detectors/ellipsis.js.map +1 -0
  66. package/dist/detectors/footnote-mismatch.d.ts +11 -0
  67. package/dist/detectors/footnote-mismatch.d.ts.map +1 -0
  68. package/dist/detectors/footnote-mismatch.js +55 -0
  69. package/dist/detectors/footnote-mismatch.js.map +1 -0
  70. package/dist/detectors/form-minority.d.ts +13 -0
  71. package/dist/detectors/form-minority.d.ts.map +1 -0
  72. package/dist/detectors/form-minority.js +19 -0
  73. package/dist/detectors/form-minority.js.map +1 -0
  74. package/dist/detectors/heading-end-mark.d.ts +10 -0
  75. package/dist/detectors/heading-end-mark.d.ts.map +1 -0
  76. package/dist/detectors/heading-end-mark.js +59 -0
  77. package/dist/detectors/heading-end-mark.js.map +1 -0
  78. package/dist/detectors/list-marker.d.ts +7 -0
  79. package/dist/detectors/list-marker.d.ts.map +1 -0
  80. package/dist/detectors/list-marker.js +50 -0
  81. package/dist/detectors/list-marker.js.map +1 -0
  82. package/dist/detectors/markdown-slip.d.ts +19 -0
  83. package/dist/detectors/markdown-slip.d.ts.map +1 -0
  84. package/dist/detectors/markdown-slip.js +122 -0
  85. package/dist/detectors/markdown-slip.js.map +1 -0
  86. package/dist/detectors/numeral-opener.d.ts +10 -0
  87. package/dist/detectors/numeral-opener.d.ts.map +1 -0
  88. package/dist/detectors/numeral-opener.js +65 -0
  89. package/dist/detectors/numeral-opener.js.map +1 -0
  90. package/dist/detectors/ordinal-suffix.d.ts +12 -0
  91. package/dist/detectors/ordinal-suffix.d.ts.map +1 -0
  92. package/dist/detectors/ordinal-suffix.js +33 -0
  93. package/dist/detectors/ordinal-suffix.js.map +1 -0
  94. package/dist/detectors/range-notation.d.ts +15 -0
  95. package/dist/detectors/range-notation.d.ts.map +1 -0
  96. package/dist/detectors/range-notation.js +58 -0
  97. package/dist/detectors/range-notation.js.map +1 -0
  98. package/dist/detectors/registry/amount-for-count.d.ts +3 -0
  99. package/dist/detectors/registry/amount-for-count.d.ts.map +1 -0
  100. package/dist/detectors/registry/amount-for-count.js +3 -0
  101. package/dist/detectors/registry/amount-for-count.js.map +1 -0
  102. package/dist/detectors/registry/currency-notation.d.ts +3 -0
  103. package/dist/detectors/registry/currency-notation.d.ts.map +1 -0
  104. package/dist/detectors/registry/currency-notation.js +3 -0
  105. package/dist/detectors/registry/currency-notation.js.map +1 -0
  106. package/dist/detectors/registry/dangling-opener.d.ts +3 -0
  107. package/dist/detectors/registry/dangling-opener.d.ts.map +1 -0
  108. package/dist/detectors/registry/dangling-opener.js +3 -0
  109. package/dist/detectors/registry/dangling-opener.js.map +1 -0
  110. package/dist/detectors/registry/ellipsis-consistency.d.ts +3 -0
  111. package/dist/detectors/registry/ellipsis-consistency.d.ts.map +1 -0
  112. package/dist/detectors/registry/ellipsis-consistency.js +3 -0
  113. package/dist/detectors/registry/ellipsis-consistency.js.map +1 -0
  114. package/dist/detectors/registry/footnote-mismatch.d.ts +3 -0
  115. package/dist/detectors/registry/footnote-mismatch.d.ts.map +1 -0
  116. package/dist/detectors/registry/footnote-mismatch.js +3 -0
  117. package/dist/detectors/registry/footnote-mismatch.js.map +1 -0
  118. package/dist/detectors/registry/heading-end-punctuation.d.ts +3 -0
  119. package/dist/detectors/registry/heading-end-punctuation.d.ts.map +1 -0
  120. package/dist/detectors/registry/heading-end-punctuation.js +3 -0
  121. package/dist/detectors/registry/heading-end-punctuation.js.map +1 -0
  122. package/dist/detectors/registry/list-marker.d.ts +3 -0
  123. package/dist/detectors/registry/list-marker.d.ts.map +1 -0
  124. package/dist/detectors/registry/list-marker.js +3 -0
  125. package/dist/detectors/registry/list-marker.js.map +1 -0
  126. package/dist/detectors/registry/numeral-opener.d.ts +3 -0
  127. package/dist/detectors/registry/numeral-opener.d.ts.map +1 -0
  128. package/dist/detectors/registry/numeral-opener.js +3 -0
  129. package/dist/detectors/registry/numeral-opener.js.map +1 -0
  130. package/dist/detectors/registry/ordinal-suffix.d.ts +3 -0
  131. package/dist/detectors/registry/ordinal-suffix.d.ts.map +1 -0
  132. package/dist/detectors/registry/ordinal-suffix.js +3 -0
  133. package/dist/detectors/registry/ordinal-suffix.js.map +1 -0
  134. package/dist/detectors/registry/range-notation.d.ts +3 -0
  135. package/dist/detectors/registry/range-notation.d.ts.map +1 -0
  136. package/dist/detectors/registry/range-notation.js +3 -0
  137. package/dist/detectors/registry/range-notation.js.map +1 -0
  138. package/dist/detectors/registry/relative-pronoun-mix.d.ts +3 -0
  139. package/dist/detectors/registry/relative-pronoun-mix.d.ts.map +1 -0
  140. package/dist/detectors/registry/relative-pronoun-mix.js +3 -0
  141. package/dist/detectors/registry/relative-pronoun-mix.js.map +1 -0
  142. package/dist/detectors/registry/share-over-hundred.d.ts +3 -0
  143. package/dist/detectors/registry/share-over-hundred.d.ts.map +1 -0
  144. package/dist/detectors/registry/share-over-hundred.js +3 -0
  145. package/dist/detectors/registry/share-over-hundred.js.map +1 -0
  146. package/dist/detectors/registry/step-reference.d.ts +3 -0
  147. package/dist/detectors/registry/step-reference.d.ts.map +1 -0
  148. package/dist/detectors/registry/step-reference.js +3 -0
  149. package/dist/detectors/registry/step-reference.js.map +1 -0
  150. package/dist/detectors/registry/table-row-overflow.d.ts +3 -0
  151. package/dist/detectors/registry/table-row-overflow.d.ts.map +1 -0
  152. package/dist/detectors/registry/table-row-overflow.js +3 -0
  153. package/dist/detectors/registry/table-row-overflow.js.map +1 -0
  154. package/dist/detectors/registry/toc-heading.d.ts +3 -0
  155. package/dist/detectors/registry/toc-heading.d.ts.map +1 -0
  156. package/dist/detectors/registry/toc-heading.js +3 -0
  157. package/dist/detectors/registry/toc-heading.js.map +1 -0
  158. package/dist/detectors/registry/unclosed-code-fence.d.ts +3 -0
  159. package/dist/detectors/registry/unclosed-code-fence.d.ts.map +1 -0
  160. package/dist/detectors/registry/unclosed-code-fence.js +3 -0
  161. package/dist/detectors/registry/unclosed-code-fence.js.map +1 -0
  162. package/dist/detectors/registry/unrendered-emphasis.d.ts +3 -0
  163. package/dist/detectors/registry/unrendered-emphasis.d.ts.map +1 -0
  164. package/dist/detectors/registry/unrendered-emphasis.js +3 -0
  165. package/dist/detectors/registry/unrendered-emphasis.js.map +1 -0
  166. package/dist/detectors/relative-pronoun-mix.d.ts +19 -0
  167. package/dist/detectors/relative-pronoun-mix.d.ts.map +1 -0
  168. package/dist/detectors/relative-pronoun-mix.js +60 -0
  169. package/dist/detectors/relative-pronoun-mix.js.map +1 -0
  170. package/dist/detectors/share-over-hundred.d.ts +20 -0
  171. package/dist/detectors/share-over-hundred.d.ts.map +1 -0
  172. package/dist/detectors/share-over-hundred.js +55 -0
  173. package/dist/detectors/share-over-hundred.js.map +1 -0
  174. package/dist/detectors/step-reference.d.ts +20 -0
  175. package/dist/detectors/step-reference.d.ts.map +1 -0
  176. package/dist/detectors/step-reference.js +57 -0
  177. package/dist/detectors/step-reference.js.map +1 -0
  178. package/dist/detectors/toc-heading.d.ts +10 -0
  179. package/dist/detectors/toc-heading.d.ts.map +1 -0
  180. package/dist/detectors/toc-heading.js +99 -0
  181. package/dist/detectors/toc-heading.js.map +1 -0
  182. package/dist/extension/load.d.ts +3 -0
  183. package/dist/extension/load.d.ts.map +1 -1
  184. package/dist/extension/load.js +1 -0
  185. package/dist/extension/load.js.map +1 -1
  186. package/dist/extension/pack-read.d.ts.map +1 -1
  187. package/dist/extension/pack-read.js +1 -0
  188. package/dist/extension/pack-read.js.map +1 -1
  189. package/dist/extension/plugin-load.js.map +1 -1
  190. package/dist/extension/plugin-parse.d.ts +7 -0
  191. package/dist/extension/plugin-parse.d.ts.map +1 -1
  192. package/dist/extension/plugin-parse.js +18 -2
  193. package/dist/extension/plugin-parse.js.map +1 -1
  194. package/dist/extension/problem-text.d.ts.map +1 -1
  195. package/dist/extension/problem-text.js +5 -0
  196. package/dist/extension/problem-text.js.map +1 -1
  197. package/dist/fix-plan/plan.d.ts +4 -0
  198. package/dist/fix-plan/plan.d.ts.map +1 -1
  199. package/dist/fix-plan/plan.js +1 -0
  200. package/dist/fix-plan/plan.js.map +1 -1
  201. package/dist/fix-plan/render.d.ts.map +1 -1
  202. package/dist/fix-plan/render.js +9 -0
  203. package/dist/fix-plan/render.js.map +1 -1
  204. package/dist/fix-plan/text.d.ts +4 -0
  205. package/dist/fix-plan/text.d.ts.map +1 -1
  206. package/dist/fix-plan/text.js +8 -2
  207. package/dist/fix-plan/text.js.map +1 -1
  208. package/dist/genre-guide/key-rules.d.ts +10 -0
  209. package/dist/genre-guide/key-rules.d.ts.map +1 -0
  210. package/dist/genre-guide/key-rules.js +23 -0
  211. package/dist/genre-guide/key-rules.js.map +1 -0
  212. package/dist/genre-guide/layer.d.ts +44 -0
  213. package/dist/genre-guide/layer.d.ts.map +1 -0
  214. package/dist/genre-guide/layer.js +43 -0
  215. package/dist/genre-guide/layer.js.map +1 -0
  216. package/dist/genre-guide/lines.d.ts +15 -0
  217. package/dist/genre-guide/lines.d.ts.map +1 -0
  218. package/dist/genre-guide/lines.js +39 -0
  219. package/dist/genre-guide/lines.js.map +1 -0
  220. package/dist/genre-guide/of-config.d.ts +13 -0
  221. package/dist/genre-guide/of-config.d.ts.map +1 -0
  222. package/dist/genre-guide/of-config.js +18 -0
  223. package/dist/genre-guide/of-config.js.map +1 -0
  224. package/dist/genre-guide/problem-text.d.ts +5 -0
  225. package/dist/genre-guide/problem-text.d.ts.map +1 -0
  226. package/dist/genre-guide/problem-text.js +29 -0
  227. package/dist/genre-guide/problem-text.js.map +1 -0
  228. package/dist/genre-guide/render.d.ts +5 -0
  229. package/dist/genre-guide/render.d.ts.map +1 -0
  230. package/dist/genre-guide/render.js +38 -0
  231. package/dist/genre-guide/render.js.map +1 -0
  232. package/dist/genre-guide/report.d.ts +32 -0
  233. package/dist/genre-guide/report.d.ts.map +1 -0
  234. package/dist/genre-guide/report.js +42 -0
  235. package/dist/genre-guide/report.js.map +1 -0
  236. package/dist/genre-guide/resolve.d.ts +16 -0
  237. package/dist/genre-guide/resolve.d.ts.map +1 -0
  238. package/dist/genre-guide/resolve.js +31 -0
  239. package/dist/genre-guide/resolve.js.map +1 -0
  240. package/dist/genre-parse.d.ts +5 -1
  241. package/dist/genre-parse.d.ts.map +1 -1
  242. package/dist/genre-parse.js +8 -1
  243. package/dist/genre-parse.js.map +1 -1
  244. package/dist/init.d.ts.map +1 -1
  245. package/dist/init.js +14 -0
  246. package/dist/init.js.map +1 -1
  247. package/dist/list-marks.d.ts +21 -0
  248. package/dist/list-marks.d.ts.map +1 -0
  249. package/dist/list-marks.js +82 -0
  250. package/dist/list-marks.js.map +1 -0
  251. package/dist/render/rules-json.d.ts +2 -1
  252. package/dist/render/rules-json.d.ts.map +1 -1
  253. package/dist/render/rules-json.js +3 -1
  254. package/dist/render/rules-json.js.map +1 -1
  255. package/dist/render/sarif.d.ts +3 -1
  256. package/dist/render/sarif.d.ts.map +1 -1
  257. package/dist/render/sarif.js +3 -1
  258. package/dist/render/sarif.js.map +1 -1
  259. package/dist/rule-fields.d.ts +5 -0
  260. package/dist/rule-fields.d.ts.map +1 -1
  261. package/dist/rule-fields.js +21 -0
  262. package/dist/rule-fields.js.map +1 -1
  263. package/dist/style-parse.d.ts +3 -0
  264. package/dist/style-parse.d.ts.map +1 -1
  265. package/dist/style-parse.js +18 -2
  266. package/dist/style-parse.js.map +1 -1
  267. package/genres.yaml +329 -0
  268. package/package.json +3 -3
  269. package/rules/cliche.yaml +67 -0
  270. package/rules/currency-notation-consistency.yaml +77 -0
  271. package/rules/dangling-participle.yaml +58 -0
  272. package/rules/ellipsis-consistency.yaml +73 -0
  273. package/rules/figurative-density.yaml +84 -0
  274. package/rules/footnote-mismatch.yaml +91 -0
  275. package/rules/heading-end-punctuation-mix.yaml +158 -0
  276. package/rules/less-for-fewer.yaml +59 -0
  277. package/rules/list-marker-mix.yaml +111 -0
  278. package/rules/nonstandard-word.yaml +80 -0
  279. package/rules/numeral-sentence-start.yaml +56 -0
  280. package/rules/ordinal-suffix-mismatch.yaml +65 -0
  281. package/rules/range-notation-consistency.yaml +73 -0
  282. package/rules/share-over-hundred.yaml +65 -0
  283. package/rules/step-reference-missing.yaml +85 -0
  284. package/rules/table-row-overflow.yaml +90 -0
  285. package/rules/toc-heading-mismatch.yaml +136 -0
  286. package/rules/unclosed-code-fence.yaml +107 -0
  287. package/rules/uncomparable-graded.yaml +65 -0
  288. package/rules/unrendered-emphasis.yaml +73 -0
  289. package/rules/which-that-consistency.yaml +64 -0
  290. package/skills/chaff/SKILL.md +13 -7
  291. package/src/api.ts +13 -0
  292. package/src/cli-args.ts +3 -0
  293. package/src/cli-text.ts +6 -0
  294. package/src/cli.ts +21 -29
  295. package/src/commands/feedback.ts +3 -0
  296. package/src/commands/fix-plan.ts +8 -0
  297. package/src/commands/init-command.ts +13 -0
  298. package/src/commands/plugin-init.ts +150 -0
  299. package/src/commands/plugin-test.ts +111 -0
  300. package/src/commands/rules.ts +34 -0
  301. package/src/config/load.ts +7 -1
  302. package/src/config/style.ts +1 -1
  303. package/src/config/warnings.ts +3 -1
  304. package/src/custom/problems.ts +1 -3
  305. package/src/detectors/amount-for-count.ts +90 -0
  306. package/src/detectors/currency-notation.ts +90 -0
  307. package/src/detectors/dangling-opener.ts +74 -0
  308. package/src/detectors/ellipsis.ts +74 -0
  309. package/src/detectors/footnote-mismatch.ts +72 -0
  310. package/src/detectors/form-minority.ts +21 -0
  311. package/src/detectors/heading-end-mark.ts +82 -0
  312. package/src/detectors/list-marker.ts +60 -0
  313. package/src/detectors/markdown-slip.ts +140 -0
  314. package/src/detectors/numeral-opener.ts +72 -0
  315. package/src/detectors/ordinal-suffix.ts +40 -0
  316. package/src/detectors/range-notation.ts +76 -0
  317. package/src/detectors/registry/amount-for-count.ts +4 -0
  318. package/src/detectors/registry/currency-notation.ts +4 -0
  319. package/src/detectors/registry/dangling-opener.ts +4 -0
  320. package/src/detectors/registry/ellipsis-consistency.ts +4 -0
  321. package/src/detectors/registry/footnote-mismatch.ts +4 -0
  322. package/src/detectors/registry/heading-end-punctuation.ts +4 -0
  323. package/src/detectors/registry/list-marker.ts +4 -0
  324. package/src/detectors/registry/numeral-opener.ts +4 -0
  325. package/src/detectors/registry/ordinal-suffix.ts +4 -0
  326. package/src/detectors/registry/range-notation.ts +4 -0
  327. package/src/detectors/registry/relative-pronoun-mix.ts +4 -0
  328. package/src/detectors/registry/share-over-hundred.ts +4 -0
  329. package/src/detectors/registry/step-reference.ts +4 -0
  330. package/src/detectors/registry/table-row-overflow.ts +4 -0
  331. package/src/detectors/registry/toc-heading.ts +4 -0
  332. package/src/detectors/registry/unclosed-code-fence.ts +4 -0
  333. package/src/detectors/registry/unrendered-emphasis.ts +4 -0
  334. package/src/detectors/relative-pronoun-mix.ts +79 -0
  335. package/src/detectors/share-over-hundred.ts +75 -0
  336. package/src/detectors/step-reference.ts +83 -0
  337. package/src/detectors/toc-heading.ts +125 -0
  338. package/src/extension/load.ts +4 -0
  339. package/src/extension/pack-read.ts +1 -0
  340. package/src/extension/plugin-load.ts +1 -1
  341. package/src/extension/plugin-parse.ts +27 -4
  342. package/src/extension/problem-text.ts +7 -1
  343. package/src/fix-plan/plan.ts +5 -0
  344. package/src/fix-plan/render.ts +9 -0
  345. package/src/fix-plan/text.ts +12 -2
  346. package/src/genre-guide/key-rules.ts +37 -0
  347. package/src/genre-guide/layer.ts +77 -0
  348. package/src/genre-guide/lines.ts +41 -0
  349. package/src/genre-guide/of-config.ts +26 -0
  350. package/src/genre-guide/problem-text.ts +34 -0
  351. package/src/genre-guide/render.ts +50 -0
  352. package/src/genre-guide/report.ts +63 -0
  353. package/src/genre-guide/resolve.ts +36 -0
  354. package/src/genre-parse.ts +13 -3
  355. package/src/init.ts +14 -0
  356. package/src/list-marks.ts +106 -0
  357. package/src/render/rules-json.ts +4 -0
  358. package/src/render/sarif.ts +4 -1
  359. package/src/rule-fields.ts +28 -0
  360. package/src/style-parse.ts +19 -1
@@ -0,0 +1,44 @@
1
+ import { type GuideLines } from "./lines.ts";
2
+ export type GuideEdit = {
3
+ readonly kind: "off";
4
+ } | {
5
+ readonly kind: "edit";
6
+ readonly replace?: GuideLines;
7
+ readonly add?: GuideLines;
8
+ };
9
+ /**
10
+ * One place's changes, by genre or group, and the place as a reader is told it (chaff.yaml, style: house, plugins: foo).
11
+ * allOff: guide: off, which empties every genre's guide before this layer's own entries.
12
+ */
13
+ export type GuideLayer = {
14
+ readonly from: string;
15
+ readonly allOff: boolean;
16
+ readonly edits: Readonly<Record<string, GuideEdit>>;
17
+ };
18
+ /** What could not be read: the genre or group it was written under (none when guide: itself is wrong), and what was there. */
19
+ export type GuideProblem = {
20
+ readonly kind: "not-a-map";
21
+ readonly written: string;
22
+ } | {
23
+ readonly kind: "unknown-genre";
24
+ readonly genre: string;
25
+ } | {
26
+ readonly kind: "bad-entry";
27
+ readonly genre: string;
28
+ readonly written: string;
29
+ } | {
30
+ readonly kind: "bad-lines";
31
+ readonly genre: string;
32
+ readonly field: "replace" | "add";
33
+ };
34
+ /** Whether guide: as written turns every guide off (guide: off, or false). */
35
+ export declare const turnsGuidesOff: (raw: unknown) => boolean;
36
+ /**
37
+ * guide: as written, read into a layer. known: the genres and groups an entry may name. An entry that cannot be read is
38
+ * left out and reported; the rest still apply. Nothing written is an empty layer.
39
+ */
40
+ export declare const guideLayerOf: (raw: unknown, from: string, known: readonly string[]) => {
41
+ layer: GuideLayer;
42
+ problems: GuideProblem[];
43
+ };
44
+ //# sourceMappingURL=layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../src/genre-guide/layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAe3D,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvI;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;CAAE,CAAC;AAElI,8HAA8H;AAC9H,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAAA;CAAE,CAAC;AAM9F,8EAA8E;AAC9E,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,KAAG,OAAyC,CAAC;AA2BxF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,OAAO,EAAE,MAAM,MAAM,EAAE,OAAO,SAAS,MAAM,EAAE,KAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAUhI,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { guideLinesOf } from "./lines.js";
2
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ const printed = (value) => JSON.stringify(value) ?? String(value);
4
+ /** Whether guide: as written turns every guide off (guide: off, or false). */
5
+ export const turnsGuidesOff = (raw) => raw === "off" || raw === false;
6
+ const EDIT_FIELDS = new Set(["replace", "add"]);
7
+ const linesIn = (raw, field, genre) => {
8
+ if (raw[field] === undefined)
9
+ return { lines: undefined };
10
+ const lines = guideLinesOf(raw[field]);
11
+ return lines === undefined ? { problem: { kind: "bad-lines", genre, field } } : { lines };
12
+ };
13
+ const editOf = (genre, value) => {
14
+ if (turnsGuidesOff(value))
15
+ return { edit: { kind: "off" } };
16
+ const fields = isRecord(value) ? Object.keys(value) : [];
17
+ if (!isRecord(value) || fields.length === 0 || fields.some((field) => !EDIT_FIELDS.has(field))) {
18
+ return { problem: { kind: "bad-entry", genre, written: printed(value) } };
19
+ }
20
+ const replace = linesIn(value, "replace", genre);
21
+ if ("problem" in replace)
22
+ return replace;
23
+ const add = linesIn(value, "add", genre);
24
+ if ("problem" in add)
25
+ return add;
26
+ return { edit: { kind: "edit", ...(replace.lines === undefined ? {} : { replace: replace.lines }), ...(add.lines === undefined ? {} : { add: add.lines }) } };
27
+ };
28
+ /**
29
+ * guide: as written, read into a layer. known: the genres and groups an entry may name. An entry that cannot be read is
30
+ * left out and reported; the rest still apply. Nothing written is an empty layer.
31
+ */
32
+ export const guideLayerOf = (raw, from, known) => {
33
+ if (raw === undefined || raw === null || turnsGuidesOff(raw))
34
+ return { layer: { from, allOff: turnsGuidesOff(raw), edits: {} }, problems: [] };
35
+ if (!isRecord(raw))
36
+ return { layer: { from, allOff: false, edits: {} }, problems: [{ kind: "not-a-map", written: printed(raw) }] };
37
+ const read = Object.entries(raw).map(([genre, value]) => known.includes(genre) ? [genre, editOf(genre, value)] : [genre, { problem: { kind: "unknown-genre", genre } }]);
38
+ return {
39
+ layer: { from, allOff: false, edits: Object.fromEntries(read.flatMap(([genre, entry]) => ("edit" in entry ? [[genre, entry.edit]] : []))) },
40
+ problems: read.flatMap(([, entry]) => ("problem" in entry ? [entry.problem] : [])),
41
+ };
42
+ };
43
+ //# sourceMappingURL=layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../src/genre-guide/layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** The guide's lines by language: { ja: [...], en: [...] }. */
2
+ export type GuideLines = Readonly<Record<string, readonly string[]>>;
3
+ /** The languages a guide is written in: chaff's. A text written without ja: or en: is given to each. */
4
+ export declare const GUIDE_LANGUAGES: readonly string[];
5
+ /** One line, or a list of them. undefined when anything in it is not a line of text. */
6
+ export declare const linesOf: (value: unknown) => string[] | undefined;
7
+ /**
8
+ * Lines by language as a team writes them: { ja: ..., en: ... }, each one line or a list; or one line or a list alone,
9
+ * which reads the same in every language. undefined when it cannot be read, a language chaff has no guide in included:
10
+ * lines in it would never be shown.
11
+ */
12
+ export declare const guideLinesOf: (value: unknown) => GuideLines | undefined;
13
+ /** A bundled guide: a list of lines in ja and in en. Throws, since the file ships with chaff and a wrong entry is chaff's bug. */
14
+ export declare const bundledGuideOf: (value: unknown, where: string) => GuideLines | undefined;
15
+ //# sourceMappingURL=lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lines.d.ts","sourceRoot":"","sources":["../../src/genre-guide/lines.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAErE,wGAAwG;AACxG,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAiB,CAAC;AAM/D,wFAAwF;AACxF,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,MAAM,EAAE,GAAG,SAKnD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,UAAU,GAAG,SAM1D,CAAC;AAEF,kIAAkI;AAClI,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,UAAU,GAAG,SAK3E,CAAC"}
@@ -0,0 +1,39 @@
1
+ // What a good document of a genre looks like, as lines an AI or a person checks a draft against: genres.yaml's guide:,
2
+ // and the replace / add a team writes over it. Pure: the YAML comes in already parsed.
3
+ /** The languages a guide is written in: chaff's. A text written without ja: or en: is given to each. */
4
+ export const GUIDE_LANGUAGES = ["ja", "en"];
5
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
6
+ const isLine = (value) => typeof value === "string" && value.trim() !== "";
7
+ /** One line, or a list of them. undefined when anything in it is not a line of text. */
8
+ export const linesOf = (value) => {
9
+ if (isLine(value))
10
+ return [value.trim()];
11
+ if (!Array.isArray(value) || value.length === 0)
12
+ return undefined;
13
+ const entries = value;
14
+ return entries.every(isLine) ? entries.map((entry) => entry.trim()) : undefined;
15
+ };
16
+ /**
17
+ * Lines by language as a team writes them: { ja: ..., en: ... }, each one line or a list; or one line or a list alone,
18
+ * which reads the same in every language. undefined when it cannot be read, a language chaff has no guide in included:
19
+ * lines in it would never be shown.
20
+ */
21
+ export const guideLinesOf = (value) => {
22
+ const everywhere = linesOf(value);
23
+ if (everywhere !== undefined)
24
+ return Object.fromEntries(GUIDE_LANGUAGES.map((language) => [language, everywhere]));
25
+ if (!isRecord(value) || Object.keys(value).length === 0 || Object.keys(value).some((key) => !GUIDE_LANGUAGES.includes(key)))
26
+ return undefined;
27
+ const read = Object.entries(value).map(([language, lines]) => [language, linesOf(lines)]);
28
+ return read.every((entry) => entry[1] !== undefined) ? Object.fromEntries(read) : undefined;
29
+ };
30
+ /** A bundled guide: a list of lines in ja and in en. Throws, since the file ships with chaff and a wrong entry is chaff's bug. */
31
+ export const bundledGuideOf = (value, where) => {
32
+ if (value === undefined)
33
+ return undefined;
34
+ const lines = isRecord(value) ? guideLinesOf(value) : undefined;
35
+ if (lines?.["ja"] === undefined || lines["en"] === undefined)
36
+ throw new Error(`${where}: guide needs a list of lines in ja and in en`);
37
+ return lines;
38
+ };
39
+ //# sourceMappingURL=lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lines.js","sourceRoot":"","sources":["../../src/genre-guide/lines.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,uFAAuF;AAKvF,wGAAwG;AACxG,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE/D,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,MAAM,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAErG,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAwB,EAAE;IAC9D,IAAI,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,OAAO,GAAc,KAAK,CAAC;IACjC,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAA0B,EAAE;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACnH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9I,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAwC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpI,CAAC,CAAC;AAEF,kIAAkI;AAClI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,KAAa,EAA0B,EAAE;IACtF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+CAA+C,CAAC,CAAC;IACvI,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type Config } from "../config/load.ts";
2
+ import type { UiLanguage } from "../ui.ts";
3
+ import { type GuideLayer } from "./layer.ts";
4
+ import { type ResolvedGuide } from "./resolve.ts";
5
+ type GuideSettings = Pick<Config, "guide" | "applied" | "extensions">;
6
+ /** Every place that changes the bundled guides, weakest first: the rule packs, then the chosen style, then chaff.yaml. */
7
+ export declare const guideLayersOf: (config: GuideSettings) => GuideLayer[];
8
+ /** The guide a document of this genre is checked against, in its language; undefined when it is turned off or the genre has none. */
9
+ export declare const genreGuideFor: (config: GuideSettings, genre: string, language: UiLanguage) => ResolvedGuide | undefined;
10
+ /** What chaff.yaml's guide: says that cannot be read. The rest of it still applies, so these are warnings, not a stop. */
11
+ export declare const configGuideProblems: (config: Pick<Config, "guide" | "path">, ui: UiLanguage) => string[];
12
+ export {};
13
+ //# sourceMappingURL=of-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"of-config.d.ts","sourceRoot":"","sources":["../../src/genre-guide/of-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhE,KAAK,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;AAItE,0HAA0H;AAC1H,eAAO,MAAM,aAAa,GAAI,QAAQ,aAAa,KAAG,UAAU,EAI/D,CAAC;AAEF,qIAAqI;AACrI,eAAO,MAAM,aAAa,GAAI,QAAQ,aAAa,EAAE,OAAO,MAAM,EAAE,UAAU,UAAU,KAAG,aAAa,GAAG,SACvC,CAAC;AAErE,0HAA0H;AAC1H,eAAO,MAAM,mBAAmB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,EAAE,IAAI,UAAU,KAAG,MAAM,EACe,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { CONFIG_FILE } from "../config/load.js";
2
+ import { loadGenres } from "../genre-load.js";
3
+ import { knownGenres } from "../known-genres.js";
4
+ import { guideLayerOf } from "./layer.js";
5
+ import { guideProblemText } from "./problem-text.js";
6
+ import { resolveGuide } from "./resolve.js";
7
+ const configLayer = (config) => guideLayerOf(config.guide, CONFIG_FILE, knownGenres());
8
+ /** Every place that changes the bundled guides, weakest first: the rule packs, then the chosen style, then chaff.yaml. */
9
+ export const guideLayersOf = (config) => [
10
+ ...(config.extensions?.guides ?? []),
11
+ ...(config.applied?.guide === undefined ? [] : [config.applied.guide]),
12
+ configLayer(config).layer,
13
+ ];
14
+ /** The guide a document of this genre is checked against, in its language; undefined when it is turned off or the genre has none. */
15
+ export const genreGuideFor = (config, genre, language) => resolveGuide(loadGenres(), genre, language, guideLayersOf(config));
16
+ /** What chaff.yaml's guide: says that cannot be read. The rest of it still applies, so these are warnings, not a stop. */
17
+ export const configGuideProblems = (config, ui) => configLayer(config).problems.map((problem) => `${config.path ?? CONFIG_FILE}: ${guideProblemText(problem, ui)}`);
18
+ //# sourceMappingURL=of-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"of-config.js","sourceRoot":"","sources":["../../src/genre-guide/of-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAIhE,MAAM,WAAW,GAAG,CAAC,MAA6B,EAAmC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;AAE/I,0HAA0H;AAC1H,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAgB,EAAE,CAAC;IACpE,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK;CAC1B,CAAC;AAEF,qIAAqI;AACrI,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAE,KAAa,EAAE,QAAoB,EAA6B,EAAE,CACrH,YAAY,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAErE,0HAA0H;AAC1H,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAsC,EAAE,EAAc,EAAY,EAAE,CACtG,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,KAAK,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { UiLanguage } from "../ui.ts";
2
+ import type { GuideProblem } from "./layer.ts";
3
+ /** One guide problem as a sentence, without the place it was written (the caller names chaff.yaml, a style or a plugin). */
4
+ export declare const guideProblemText: (problem: GuideProblem, ui: UiLanguage) => string;
5
+ //# sourceMappingURL=problem-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problem-text.d.ts","sourceRoot":"","sources":["../../src/genre-guide/problem-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmB/C,4HAA4H;AAC5H,eAAO,MAAM,gBAAgB,GAAI,SAAS,YAAY,EAAE,IAAI,UAAU,KAAG,MAYxE,CAAC"}
@@ -0,0 +1,29 @@
1
+ const TEXT = {
2
+ ja: {
3
+ "not-a-map": (problem) => `guide の ${problem.written} は読めません。ジャンルか群の名前の下に replace・add・off を書くか、guide: off と書いてください`,
4
+ "unknown-genre": (problem) => `guide の ${problem.genre} というジャンルや群はありません(npx chaffjs genres で一覧が出ます)`,
5
+ "bad-entry": (problem) => `guide の ${problem.genre}: ${problem.written} は読めません。replace か add に行を書くか、off と書いてください`,
6
+ "bad-lines": (problem) => `guide の ${problem.genre}: ${problem.field} は 1 行か行の並びで、言語ごとなら ja: と en: の下に書いてください`,
7
+ },
8
+ en: {
9
+ "not-a-map": (problem) => `guide ${problem.written} cannot be read; write replace, add or off under a genre or group, or guide: off`,
10
+ "unknown-genre": (problem) => `guide names ${problem.genre}, which is no genre or group (npx chaffjs genres lists them)`,
11
+ "bad-entry": (problem) => `guide ${problem.genre}: ${problem.written} cannot be read; write lines under replace or add, or off`,
12
+ "bad-lines": (problem) => `guide ${problem.genre}: write ${problem.field} as a line or a list of lines, under ja: and en: for each language`,
13
+ },
14
+ };
15
+ /** One guide problem as a sentence, without the place it was written (the caller names chaff.yaml, a style or a plugin). */
16
+ export const guideProblemText = (problem, ui) => {
17
+ const text = TEXT[ui];
18
+ switch (problem.kind) {
19
+ case "not-a-map":
20
+ return text["not-a-map"](problem);
21
+ case "unknown-genre":
22
+ return text["unknown-genre"](problem);
23
+ case "bad-entry":
24
+ return text["bad-entry"](problem);
25
+ case "bad-lines":
26
+ return text["bad-lines"](problem);
27
+ }
28
+ };
29
+ //# sourceMappingURL=problem-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problem-text.js","sourceRoot":"","sources":["../../src/genre-guide/problem-text.ts"],"names":[],"mappings":"AAKA,MAAM,IAAI,GAAuB;IAC/B,EAAE,EAAE;QACF,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,CAAC,OAAO,+DAA+D;QACnH,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,CAAC,KAAK,8CAA8C;QACpG,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,2CAA2C;QACjH,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,0CAA0C;KAC/G;IACD,EAAE,EAAE;QACF,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,OAAO,kFAAkF;QACpI,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,OAAO,CAAC,KAAK,8DAA8D;QACxH,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,2DAA2D;QAC/H,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,KAAK,WAAW,OAAO,CAAC,KAAK,oEAAoE;KAC7I;CACF,CAAC;AAEF,4HAA4H;AAC5H,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAqB,EAAE,EAAc,EAAU,EAAE;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,eAAe;YAClB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { UiLanguage } from "../ui.ts";
2
+ import type { ReportedGuide } from "./report.ts";
3
+ /** The guide as the text report opens with it, in the document's language: read first, as the instruction to write against. */
4
+ export declare const renderGuideBlock: (guide: ReportedGuide, ui: UiLanguage) => string[];
5
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/genre-guide/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgCjD,+HAA+H;AAC/H,eAAO,MAAM,gBAAgB,GAAI,OAAO,aAAa,EAAE,IAAI,UAAU,KAAG,MAAM,EAe7E,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { BUNDLED_GUIDES } from "./resolve.js";
2
+ const TEXT = {
3
+ ja: {
4
+ heading: (name, genre) => `指針: ${name}(${genre})`,
5
+ lead: "下の指摘より先に、原稿がこれを満たしているかを確かめてください。",
6
+ rules: (ids) => `このジャンルで特に効く rule: ${ids}`,
7
+ from: (places) => `書いたところ: ${places}`,
8
+ change: "chaff.yaml の guide: で書き換えられます。出さないときは --no-guide。",
9
+ },
10
+ en: {
11
+ heading: (name, genre) => `Guide: ${name} (${genre})`,
12
+ lead: "Before the findings below, check the draft against these.",
13
+ rules: (ids) => `Rules that matter most for this genre: ${ids}`,
14
+ from: (places) => `Written in: ${places}`,
15
+ change: "Change it with guide: in chaff.yaml; leave it out with --no-guide.",
16
+ },
17
+ };
18
+ const RULE = 60;
19
+ /** Who wrote the guide, said only when a team changed it: the bundled text alone needs no source line. */
20
+ const fromLines = (guide, ui) => guide.from.length === 1 && guide.from[0] === BUNDLED_GUIDES ? [] : [` ${TEXT[ui].from(guide.from.join(" → "))}`];
21
+ /** The guide as the text report opens with it, in the document's language: read first, as the instruction to write against. */
22
+ export const renderGuideBlock = (guide, ui) => {
23
+ const text = TEXT[ui];
24
+ return [
25
+ "",
26
+ text.heading(guide.name, guide.genre),
27
+ "",
28
+ ` ${text.lead}`,
29
+ "",
30
+ ...guide.lines.map((line) => ` - ${line}`),
31
+ ...(guide.rules.length === 0 ? [] : ["", ` ${text.rules(guide.rules.join(", "))}`]),
32
+ ...fromLines(guide, ui),
33
+ ` ${text.change}`,
34
+ "",
35
+ "═".repeat(RULE),
36
+ ];
37
+ };
38
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/genre-guide/render.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,IAAI,GAML;IACH,EAAE,EAAE;QACF,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,KAAK,GAAG;QACjD,IAAI,EAAE,kCAAkC;QACxC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,GAAG,EAAE;QAC1C,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,MAAM,EAAE;QACrC,MAAM,EAAE,mDAAmD;KAC5D;IACD,EAAE,EAAE;QACF,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,IAAI,KAAK,KAAK,GAAG;QACrD,IAAI,EAAE,2DAA2D;QACjE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,0CAA0C,GAAG,EAAE;QAC/D,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,MAAM,EAAE;QACzC,MAAM,EAAE,oEAAoE;KAC7E;CACF,CAAC;AAEF,MAAM,IAAI,GAAG,EAAE,CAAC;AAEhB,0GAA0G;AAC1G,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,EAAc,EAAY,EAAE,CACnE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpH,+HAA+H;AAC/H,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAoB,EAAE,EAAc,EAAY,EAAE;IACjF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,OAAO;QACL,EAAE;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;QACrC,EAAE;QACF,KAAK,IAAI,CAAC,IAAI,EAAE;QAChB,EAAE;QACF,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACpF,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,MAAM,EAAE;QAClB,EAAE;QACF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;KACjB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { GenreSource } from "../cli-text.ts";
2
+ import type { Config } from "../config/load.ts";
3
+ import type { RuleDefinition } from "../plugin.ts";
4
+ import { type UiLanguage } from "../ui.ts";
5
+ /** A genre's guide as chaff reports it: the genre and its name, the lines, the rules that matter most, and who wrote it. */
6
+ export type ReportedGuide = {
7
+ readonly genre: string;
8
+ readonly name: string;
9
+ readonly lines: readonly string[];
10
+ readonly rules: readonly string[];
11
+ readonly from: readonly string[];
12
+ };
13
+ export declare const genreWasSet: (from: GenreSource) => boolean;
14
+ type GuideSettings = Pick<Config, "guide" | "applied" | "extensions" | "rules">;
15
+ /** The guide for a genre in a document's language, with the rules that matter most; undefined when it is off or there is none. */
16
+ export declare const reportedGuide: (config: GuideSettings, genre: string, language: string, rules: readonly RuleDefinition[]) => ReportedGuide | undefined;
17
+ /** One checked document, as far as its guide goes. */
18
+ type GuidedDocument = {
19
+ readonly genre: string;
20
+ readonly genreFrom: GenreSource;
21
+ readonly language: string;
22
+ readonly rules: readonly RuleDefinition[];
23
+ };
24
+ /** A guide with the language it is written in, for output that holds several documents. */
25
+ export type RunGuide = {
26
+ readonly language: UiLanguage;
27
+ readonly guide: ReportedGuide;
28
+ };
29
+ /** A run's guides: one per genre and language among the documents whose genre was set, first seen first. None with --no-guide. */
30
+ export declare const guidesOfRun: (documents: readonly GuidedDocument[], config: GuideSettings, args: readonly string[]) => RunGuide[];
31
+ export {};
32
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/genre-guide/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAIzD,4HAA4H;AAC5H,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAQF,eAAO,MAAM,WAAW,GAAI,MAAM,WAAW,KAAG,OAA2B,CAAC;AAE5E,KAAK,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC,CAAC;AAEhF,kIAAkI;AAClI,eAAO,MAAM,aAAa,GAAI,QAAQ,aAAa,EAAE,OAAO,MAAM,EAAE,UAAU,MAAM,EAAE,OAAO,SAAS,cAAc,EAAE,KAAG,aAAa,GAAG,SAaxI,CAAC;AAEF,sDAAsD;AACtD,KAAK,cAAc,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAAC;AAExJ,2FAA2F;AAC3F,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAExF,kIAAkI;AAClI,eAAO,MAAM,WAAW,GAAI,WAAW,SAAS,cAAc,EAAE,EAAE,QAAQ,aAAa,EAAE,MAAM,SAAS,MAAM,EAAE,KAAG,QAAQ,EAU1H,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { showsGuide } from "../cli-args.js";
2
+ import { loadGenres } from "../genre-load.js";
3
+ import { localized } from "../render/text.js";
4
+ import { uiLanguageOf } from "../ui.js";
5
+ import { keyRulesOf } from "./key-rules.js";
6
+ import { genreGuideFor } from "./of-config.js";
7
+ /**
8
+ * Where a genre counts as set, so its guide is shown. A defaulted genre is not one, nor one guessed from the path or the
9
+ * text: a guide for the wrong kind of document misleads more than none.
10
+ */
11
+ const SET_BY = new Set(["--genre", "by_path", "config", "front-matter"]);
12
+ export const genreWasSet = (from) => SET_BY.has(from);
13
+ /** The guide for a genre in a document's language, with the rules that matter most; undefined when it is off or there is none. */
14
+ export const reportedGuide = (config, genre, language, rules) => {
15
+ const ui = uiLanguageOf(language);
16
+ const guide = genreGuideFor(config, genre, ui);
17
+ if (guide === undefined)
18
+ return undefined;
19
+ const data = loadGenres();
20
+ const name = data.genres.find((entry) => entry.id === genre)?.name;
21
+ return {
22
+ genre,
23
+ name: name === undefined ? genre : localized(name, ui),
24
+ lines: guide.lines,
25
+ rules: keyRulesOf(rules, data, genre, language, config.rules),
26
+ from: guide.from,
27
+ };
28
+ };
29
+ /** A run's guides: one per genre and language among the documents whose genre was set, first seen first. None with --no-guide. */
30
+ export const guidesOfRun = (documents, config, args) => {
31
+ if (!showsGuide(args))
32
+ return [];
33
+ const keyed = documents
34
+ .filter((document) => genreWasSet(document.genreFrom))
35
+ .map((document) => ({ key: `${document.genre}\n${uiLanguageOf(document.language)}`, document }));
36
+ const firsts = keyed.filter((entry, index) => keyed.findIndex((other) => other.key === entry.key) === index);
37
+ return firsts.flatMap(({ document }) => {
38
+ const guide = reportedGuide(config, document.genre, document.language, document.rules);
39
+ return guide === undefined ? [] : [{ language: uiLanguageOf(document.language), guide }];
40
+ });
41
+ };
42
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/genre-guide/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { GenreData } from "../genre-parse.ts";
2
+ import type { GuideLayer } from "./layer.ts";
3
+ /** Where the bundled guides come from, as a resolved guide names it. */
4
+ export declare const BUNDLED_GUIDES = "genres.yaml";
5
+ /** A genre's guide in one language, and every place that wrote it, weakest first. */
6
+ export type ResolvedGuide = {
7
+ readonly genre: string;
8
+ readonly lines: readonly string[];
9
+ readonly from: readonly string[];
10
+ };
11
+ /**
12
+ * A genre's guide in a language: genres.yaml's for the genre, else its group's, then each layer in order (weakest first):
13
+ * its guide: off, then its group's entry, then its genre's. undefined for a genre chaff does not know, or when no lines are left.
14
+ */
15
+ export declare const resolveGuide: (data: GenreData, genre: string, language: string, layers: readonly GuideLayer[]) => ResolvedGuide | undefined;
16
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/genre-guide/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,wEAAwE;AACxE,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C,qFAAqF;AACrF,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAa5H;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,EAAE,UAAU,MAAM,EAAE,QAAQ,SAAS,UAAU,EAAE,KAAG,aAAa,GAAG,SAW9H,CAAC"}
@@ -0,0 +1,31 @@
1
+ /** Where the bundled guides come from, as a resolved guide names it. */
2
+ export const BUNDLED_GUIDES = "genres.yaml";
3
+ const applied = (current, edit, language, from) => {
4
+ if (edit === undefined)
5
+ return current;
6
+ if (edit.kind === "off")
7
+ return { lines: [], from: [...current.from, from] };
8
+ const replaced = edit.replace?.[language];
9
+ const added = edit.add?.[language] ?? [];
10
+ if (replaced === undefined && added.length === 0)
11
+ return current;
12
+ return { lines: [...(replaced ?? current.lines), ...added], from: [...current.from, from] };
13
+ };
14
+ /**
15
+ * A genre's guide in a language: genres.yaml's for the genre, else its group's, then each layer in order (weakest first):
16
+ * its guide: off, then its group's entry, then its genre's. undefined for a genre chaff does not know, or when no lines are left.
17
+ */
18
+ export const resolveGuide = (data, genre, language, layers) => {
19
+ const own = data.genres.find((entry) => entry.id === genre);
20
+ if (own === undefined)
21
+ return undefined;
22
+ const group = data.groups.find((entry) => genre.startsWith(`${entry.id}/`));
23
+ const bundled = own.guide ?? group?.guide;
24
+ const start = { lines: bundled?.[language] ?? [], from: bundled === undefined ? [] : [BUNDLED_GUIDES] };
25
+ const end = layers.reduce((current, layer) => {
26
+ const cleared = applied(current, layer.allOff ? { kind: "off" } : undefined, language, layer.from);
27
+ return applied(applied(cleared, group === undefined ? undefined : layer.edits[group.id], language, layer.from), layer.edits[genre], language, layer.from);
28
+ }, start);
29
+ return end.lines.length === 0 ? undefined : { genre, lines: end.lines, from: end.from };
30
+ };
31
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/genre-guide/resolve.ts"],"names":[],"mappings":"AAGA,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAO5C,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,IAA2B,EAAE,QAAgB,EAAE,IAAY,EAAW,EAAE;IACzG,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AAC9F,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAe,EAAE,KAAa,EAAE,QAAgB,EAAE,MAA6B,EAA6B,EAAE;IACzI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IAC5D,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,KAAK,EAAE,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;IACjH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnG,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5J,CAAC,EAAE,KAAK,CAAC,CAAC;IACV,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1F,CAAC,CAAC"}
@@ -1,12 +1,14 @@
1
1
  import type { Level, Localized } from "./plugin.ts";
2
2
  import type { RuleOff } from "./rule-offs.ts";
3
+ import { type GuideLines } from "./genre-guide/lines.ts";
3
4
  /** A preset's rules: the level each named rule runs at, under whatever chaff.yaml's rules say. */
4
5
  export type PresetLevels = Readonly<Record<string, Level>>;
5
- /** A group of genres (legal, literature): its name, and the levels every genre in it shares. */
6
+ /** A group of genres (legal, literature): its name, the levels every genre in it shares, and the guide a genre without its own reads. */
6
7
  export type GenreGroup = {
7
8
  readonly id: string;
8
9
  readonly name: Localized;
9
10
  readonly rules: PresetLevels;
11
+ readonly guide?: GuideLines | undefined;
10
12
  };
11
13
  /** One genre of genres.yaml: what it is for, the levels it sets on top of its group's, and the profile it reads with. */
12
14
  export type GenreDefinition = {
@@ -16,6 +18,8 @@ export type GenreDefinition = {
16
18
  readonly rules: PresetLevels;
17
19
  readonly profile: string | undefined;
18
20
  readonly suggest: GenreSuggest;
21
+ /** What a good document of this genre does, as lines to check a draft against (genre-guide/). */
22
+ readonly guide?: GuideLines | undefined;
19
23
  };
20
24
  /** A line shape that marks the genre, and how many lines must have it. */
21
25
  type LineCue = {
@@ -1 +1 @@
1
- {"version":3,"file":"genre-parse.d.ts","sourceRoot":"","sources":["../src/genre-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,kGAAkG;AAClG,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3D,gGAAgG;AAChG,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAEzG,yHAAyH;AACzH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC,CAAC;AAEF,0EAA0E;AAC1E,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAiGhH,8IAA8I;AAC9I,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,KAAG,SAO1C,CAAC;AASF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,SAAS,EAAE,MAAM,SAAS,OAAO,EAAE,KAAG,SAKxE,CAAC;AAEF,iHAAiH;AACjH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,KAAG,YAK/D,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SAAqE,CAAC"}
1
+ {"version":3,"file":"genre-parse.d.ts","sourceRoot":"","sources":["../src/genre-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzE,kGAAkG;AAClG,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3D,yIAAyI;AACzI,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;CAAE,CAAC;AAElJ,yHAAyH;AACzH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,iGAAiG;IACjG,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,0EAA0E;AAC1E,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAwGhH,8IAA8I;AAC9I,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,KAAG,SAO1C,CAAC;AASF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,SAAS,EAAE,MAAM,SAAS,OAAO,EAAE,KAAG,SAKxE,CAAC;AAEF,iHAAiH;AACjH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,KAAG,YAK/D,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SAAqE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { isLevel } from "./levels.js";
2
+ import { bundledGuideOf } from "./genre-guide/lines.js";
2
3
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
4
  const isLocalized = (value) => isRecord(value) && typeof value["ja"] === "string" && typeof value["en"] === "string" && value["ja"] !== "" && value["en"] !== "";
4
5
  const levelsOf = (value, where) => {
@@ -22,10 +23,15 @@ const idOf = (value, index) => {
22
23
  throw new Error(`entry ${String(index + 1)} has no id`);
23
24
  return id;
24
25
  };
26
+ /** guide: as a field only when written, so an entry without one reads as it did before guides. */
27
+ const guideField = (raw, id) => {
28
+ const guide = bundledGuideOf(raw["guide"], id);
29
+ return guide === undefined ? {} : { guide };
30
+ };
25
31
  const groupOf = (value, index) => {
26
32
  const id = idOf(value, index);
27
33
  const raw = isRecord(value) ? value : {};
28
- return { id, name: localizedOf(raw["name"], "name", id), rules: levelsOf(raw["rules"], id) };
34
+ return { id, name: localizedOf(raw["name"], "name", id), rules: levelsOf(raw["rules"], id), ...guideField(raw, id) };
29
35
  };
30
36
  const patternOf = (value, flags, where) => {
31
37
  if (typeof value !== "string" || value === "")
@@ -85,6 +91,7 @@ const genreOf = (value, index) => {
85
91
  rules: levelsOf(raw["rules"], id),
86
92
  profile,
87
93
  suggest: suggestOf(raw["suggest"], id),
94
+ ...guideField(raw, id),
88
95
  };
89
96
  };
90
97
  const listOf = (raw, key) => {
@@ -1 +1 @@
1
- {"version":3,"file":"genre-parse.js","sourceRoot":"","sources":["../src/genre-parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"genre-parse.js","sourceRoot":"","sources":["../src/genre-parse.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAwHjD,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,KAAI,UAAiB,KAAG,MAAM,EAkBjF,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAsIjD,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,KAAI,UAAiB,KAAG,MAAM,EAkBjF,CAAC"}
package/dist/init.js CHANGED
@@ -28,6 +28,13 @@ genre: ${genre}
28
28
  # names:
29
29
  # - 個人情報保護委員会
30
30
 
31
+ # このジャンルの指針(よい文書が満たすこと)。検査の結果より先に出て、AI が書き直すときの指示になる。
32
+ # 既定は chaff に入っている文。replace で置き換え、add で足し、off で出さない。
33
+ # guide:
34
+ # ${genre}:
35
+ # add:
36
+ # - 金額は税込みか税抜きかを書いているか
37
+
31
38
  # 既定から変えたものだけを書く。
32
39
  rules:
33
40
  `,
@@ -67,6 +74,13 @@ genre: ${genre}
67
74
  # names:
68
75
  # - Bank of England
69
76
 
77
+ # This genre's guide: what a good document of this kind does. It comes before the findings, and an AI
78
+ # rewriting the text works to it. chaff ships one; replace it, add lines, or turn it off.
79
+ # guide:
80
+ # ${genre}:
81
+ # add:
82
+ # - Does each amount say whether tax is included?
83
+
70
84
  # Only what differs from the defaults.
71
85
  rules:
72
86
  `,