chaffjs 0.24.0 → 0.26.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 (418) hide show
  1. package/README.md +179 -42
  2. package/dist/adapter-import.d.ts +2 -0
  3. package/dist/adapter-import.d.ts.map +1 -0
  4. package/dist/adapter-import.js +11 -0
  5. package/dist/adapter-import.js.map +1 -0
  6. package/dist/adapter-load.d.ts.map +1 -1
  7. package/dist/adapter-load.js +2 -9
  8. package/dist/adapter-load.js.map +1 -1
  9. package/dist/ai-score/human-shares.d.ts +4 -0
  10. package/dist/ai-score/human-shares.d.ts.map +1 -0
  11. package/dist/ai-score/human-shares.js +205 -0
  12. package/dist/ai-score/human-shares.js.map +1 -0
  13. package/dist/ai-score/lint-line.d.ts +4 -0
  14. package/dist/ai-score/lint-line.d.ts.map +1 -0
  15. package/dist/ai-score/lint-line.js +9 -0
  16. package/dist/ai-score/lint-line.js.map +1 -0
  17. package/dist/ai-score/of-document.d.ts +7 -0
  18. package/dist/ai-score/of-document.d.ts.map +1 -0
  19. package/dist/ai-score/of-document.js +40 -0
  20. package/dist/ai-score/of-document.js.map +1 -0
  21. package/dist/ai-score/render.d.ts +24 -0
  22. package/dist/ai-score/render.d.ts.map +1 -0
  23. package/dist/ai-score/render.js +100 -0
  24. package/dist/ai-score/render.js.map +1 -0
  25. package/dist/ai-score/score.d.ts +77 -0
  26. package/dist/ai-score/score.d.ts.map +1 -0
  27. package/dist/ai-score/score.js +52 -0
  28. package/dist/ai-score/score.js.map +1 -0
  29. package/dist/ai-score/signals.d.ts +19 -0
  30. package/dist/ai-score/signals.d.ts.map +1 -0
  31. package/dist/ai-score/signals.js +30 -0
  32. package/dist/ai-score/signals.js.map +1 -0
  33. package/dist/ai-score/text.d.ts +37 -0
  34. package/dist/ai-score/text.d.ts.map +1 -0
  35. package/dist/ai-score/text.js +59 -0
  36. package/dist/ai-score/text.js.map +1 -0
  37. package/dist/ai-score/view.d.ts +5 -0
  38. package/dist/ai-score/view.d.ts.map +1 -0
  39. package/dist/ai-score/view.js +19 -0
  40. package/dist/ai-score/view.js.map +1 -0
  41. package/dist/backends/anthropic.d.ts +0 -1
  42. package/dist/backends/anthropic.d.ts.map +1 -1
  43. package/dist/backends/anthropic.js +0 -1
  44. package/dist/backends/anthropic.js.map +1 -1
  45. package/dist/backends/default-model.d.ts +3 -0
  46. package/dist/backends/default-model.d.ts.map +1 -0
  47. package/dist/backends/default-model.js +5 -0
  48. package/dist/backends/default-model.js.map +1 -0
  49. package/dist/backends/openai.d.ts +0 -1
  50. package/dist/backends/openai.d.ts.map +1 -1
  51. package/dist/backends/openai.js +0 -1
  52. package/dist/backends/openai.js.map +1 -1
  53. package/dist/browser/adapter-import.d.ts +2 -0
  54. package/dist/browser/adapter-import.d.ts.map +1 -0
  55. package/dist/browser/adapter-import.js +17 -0
  56. package/dist/browser/adapter-import.js.map +1 -0
  57. package/dist/browser/bounded-match.d.ts +3 -0
  58. package/dist/browser/bounded-match.d.ts.map +1 -0
  59. package/dist/browser/bounded-match.js +4 -0
  60. package/dist/browser/bounded-match.js.map +1 -0
  61. package/dist/browser/check-text.d.ts +43 -0
  62. package/dist/browser/check-text.d.ts.map +1 -0
  63. package/dist/browser/check-text.js +50 -0
  64. package/dist/browser/check-text.js.map +1 -0
  65. package/dist/browser/detectors.d.ts +4 -0
  66. package/dist/browser/detectors.d.ts.map +1 -0
  67. package/dist/browser/detectors.js +22 -0
  68. package/dist/browser/detectors.js.map +1 -0
  69. package/dist/browser/package-files.d.ts +5 -0
  70. package/dist/browser/package-files.d.ts.map +1 -0
  71. package/dist/browser/package-files.js +8 -0
  72. package/dist/browser/package-files.js.map +1 -0
  73. package/dist/browser/path.d.ts +9 -0
  74. package/dist/browser/path.d.ts.map +1 -0
  75. package/dist/browser/path.js +70 -0
  76. package/dist/browser/path.js.map +1 -0
  77. package/dist/browser/working-dir.d.ts +2 -0
  78. package/dist/browser/working-dir.d.ts.map +1 -0
  79. package/dist/browser/working-dir.js +3 -0
  80. package/dist/browser/working-dir.js.map +1 -0
  81. package/dist/browser-files.d.ts +21 -0
  82. package/dist/browser-files.d.ts.map +1 -0
  83. package/dist/browser-files.js +65 -0
  84. package/dist/browser-files.js.map +1 -0
  85. package/dist/browser.d.ts +9 -0
  86. package/dist/browser.d.ts.map +1 -0
  87. package/dist/browser.js +13 -0
  88. package/dist/browser.js.map +1 -0
  89. package/dist/cli-text.d.ts.map +1 -1
  90. package/dist/cli-text.js +2 -0
  91. package/dist/cli-text.js.map +1 -1
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +4 -1
  94. package/dist/cli.js.map +1 -1
  95. package/dist/commands/ai-score.d.ts +8 -0
  96. package/dist/commands/ai-score.d.ts.map +1 -0
  97. package/dist/commands/ai-score.js +59 -0
  98. package/dist/commands/ai-score.js.map +1 -0
  99. package/dist/commands/document-commands.d.ts.map +1 -1
  100. package/dist/commands/document-commands.js +2 -0
  101. package/dist/commands/document-commands.js.map +1 -1
  102. package/dist/config/by-path-problems.d.ts +5 -0
  103. package/dist/config/by-path-problems.d.ts.map +1 -0
  104. package/dist/config/by-path-problems.js +11 -0
  105. package/dist/config/by-path-problems.js.map +1 -0
  106. package/dist/config/load.d.ts +9 -2
  107. package/dist/config/load.d.ts.map +1 -1
  108. package/dist/config/load.js +21 -8
  109. package/dist/config/load.js.map +1 -1
  110. package/dist/config/read.d.ts +2 -0
  111. package/dist/config/read.d.ts.map +1 -1
  112. package/dist/config/read.js +4 -1
  113. package/dist/config/read.js.map +1 -1
  114. package/dist/config/warnings.d.ts +1 -1
  115. package/dist/config/warnings.d.ts.map +1 -1
  116. package/dist/config/warnings.js +3 -1
  117. package/dist/config/warnings.js.map +1 -1
  118. package/dist/config/working-dir.d.ts +2 -0
  119. package/dist/config/working-dir.d.ts.map +1 -0
  120. package/dist/config/working-dir.js +3 -0
  121. package/dist/config/working-dir.js.map +1 -0
  122. package/dist/custom/bounded-match.d.ts +1 -12
  123. package/dist/custom/bounded-match.d.ts.map +1 -1
  124. package/dist/custom/bounded-match.js +1 -11
  125. package/dist/custom/bounded-match.js.map +1 -1
  126. package/dist/custom/pattern-timeout.d.ts +13 -0
  127. package/dist/custom/pattern-timeout.d.ts.map +1 -0
  128. package/dist/custom/pattern-timeout.js +13 -0
  129. package/dist/custom/pattern-timeout.js.map +1 -0
  130. package/dist/detect.d.ts.map +1 -1
  131. package/dist/detect.js +4 -5
  132. package/dist/detect.js.map +1 -1
  133. package/dist/detectors/connective-hierarchy.d.ts +16 -0
  134. package/dist/detectors/connective-hierarchy.d.ts.map +1 -0
  135. package/dist/detectors/connective-hierarchy.js +68 -0
  136. package/dist/detectors/connective-hierarchy.js.map +1 -0
  137. package/dist/detectors/date-year.d.ts +10 -2
  138. package/dist/detectors/date-year.d.ts.map +1 -1
  139. package/dist/detectors/date-year.js +44 -8
  140. package/dist/detectors/date-year.js.map +1 -1
  141. package/dist/detectors/defined-term-form.d.ts +5 -0
  142. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  143. package/dist/detectors/defined-term-form.js +22 -5
  144. package/dist/detectors/defined-term-form.js.map +1 -1
  145. package/dist/detectors/missing-final-period.d.ts +17 -0
  146. package/dist/detectors/missing-final-period.d.ts.map +1 -0
  147. package/dist/detectors/missing-final-period.js +62 -0
  148. package/dist/detectors/missing-final-period.js.map +1 -0
  149. package/dist/detectors/missing-space-after-comma.d.ts +10 -0
  150. package/dist/detectors/missing-space-after-comma.d.ts.map +1 -0
  151. package/dist/detectors/missing-space-after-comma.js +42 -0
  152. package/dist/detectors/missing-space-after-comma.js.map +1 -0
  153. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  154. package/dist/detectors/orthographic-variant.js +44 -17
  155. package/dist/detectors/orthographic-variant.js.map +1 -1
  156. package/dist/detectors/party-role-name.d.ts +3 -0
  157. package/dist/detectors/party-role-name.d.ts.map +1 -0
  158. package/dist/detectors/party-role-name.js +35 -0
  159. package/dist/detectors/party-role-name.js.map +1 -0
  160. package/dist/detectors/quote-without-source.d.ts +17 -0
  161. package/dist/detectors/quote-without-source.d.ts.map +1 -0
  162. package/dist/detectors/quote-without-source.js +64 -0
  163. package/dist/detectors/quote-without-source.js.map +1 -0
  164. package/dist/detectors/reference-text.js +1 -1
  165. package/dist/detectors/reference-text.js.map +1 -1
  166. package/dist/detectors/registry/connective-hierarchy.d.ts +3 -0
  167. package/dist/detectors/registry/connective-hierarchy.d.ts.map +1 -0
  168. package/dist/detectors/registry/connective-hierarchy.js +3 -0
  169. package/dist/detectors/registry/connective-hierarchy.js.map +1 -0
  170. package/dist/detectors/registry/missing-final-period.d.ts +3 -0
  171. package/dist/detectors/registry/missing-final-period.d.ts.map +1 -0
  172. package/dist/detectors/registry/missing-final-period.js +3 -0
  173. package/dist/detectors/registry/missing-final-period.js.map +1 -0
  174. package/dist/detectors/registry/missing-space-after-comma.d.ts +3 -0
  175. package/dist/detectors/registry/missing-space-after-comma.d.ts.map +1 -0
  176. package/dist/detectors/registry/missing-space-after-comma.js +3 -0
  177. package/dist/detectors/registry/missing-space-after-comma.js.map +1 -0
  178. package/dist/detectors/registry/party-role-name.d.ts +3 -0
  179. package/dist/detectors/registry/party-role-name.d.ts.map +1 -0
  180. package/dist/detectors/registry/party-role-name.js +3 -0
  181. package/dist/detectors/registry/party-role-name.js.map +1 -0
  182. package/dist/detectors/registry/quote-without-source.d.ts +3 -0
  183. package/dist/detectors/registry/quote-without-source.d.ts.map +1 -0
  184. package/dist/detectors/registry/quote-without-source.js +3 -0
  185. package/dist/detectors/registry/quote-without-source.js.map +1 -0
  186. package/dist/detectors/registry/vague-deadline.d.ts +3 -0
  187. package/dist/detectors/registry/vague-deadline.d.ts.map +1 -0
  188. package/dist/detectors/registry/vague-deadline.js +3 -0
  189. package/dist/detectors/registry/vague-deadline.js.map +1 -0
  190. package/dist/detectors/run-in-label.d.ts +7 -0
  191. package/dist/detectors/run-in-label.d.ts.map +1 -0
  192. package/dist/detectors/run-in-label.js +53 -0
  193. package/dist/detectors/run-in-label.js.map +1 -0
  194. package/dist/detectors/sentence-counts.d.ts +3 -1
  195. package/dist/detectors/sentence-counts.d.ts.map +1 -1
  196. package/dist/detectors/sentence-counts.js +11 -4
  197. package/dist/detectors/sentence-counts.js.map +1 -1
  198. package/dist/detectors/sentence-ending.d.ts +1 -1
  199. package/dist/detectors/sentence-ending.d.ts.map +1 -1
  200. package/dist/detectors/sentence-ending.js +2 -1
  201. package/dist/detectors/sentence-ending.js.map +1 -1
  202. package/dist/detectors/structure-tree.d.ts +4 -1
  203. package/dist/detectors/structure-tree.d.ts.map +1 -1
  204. package/dist/detectors/structure-tree.js +21 -2
  205. package/dist/detectors/structure-tree.js.map +1 -1
  206. package/dist/detectors/unbalanced-bracket.d.ts +1 -1
  207. package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
  208. package/dist/detectors/unbalanced-bracket.js +23 -11
  209. package/dist/detectors/unbalanced-bracket.js.map +1 -1
  210. package/dist/detectors/vague-deadline.d.ts +25 -0
  211. package/dist/detectors/vague-deadline.d.ts.map +1 -0
  212. package/dist/detectors/vague-deadline.js +97 -0
  213. package/dist/detectors/vague-deadline.js.map +1 -0
  214. package/dist/furigana.d.ts +7 -0
  215. package/dist/furigana.d.ts.map +1 -0
  216. package/dist/furigana.js +16 -0
  217. package/dist/furigana.js.map +1 -0
  218. package/dist/genre-load.d.ts.map +1 -1
  219. package/dist/genre-load.js +5 -7
  220. package/dist/genre-load.js.map +1 -1
  221. package/dist/grade/ai-score.d.ts +16 -0
  222. package/dist/grade/ai-score.d.ts.map +1 -0
  223. package/dist/grade/ai-score.js +17 -0
  224. package/dist/grade/ai-score.js.map +1 -0
  225. package/dist/grade/finding.d.ts +6 -0
  226. package/dist/grade/finding.d.ts.map +1 -0
  227. package/dist/grade/finding.js +13 -0
  228. package/dist/grade/finding.js.map +1 -0
  229. package/dist/grade/grade-item.d.ts.map +1 -1
  230. package/dist/grade/grade-item.js +4 -11
  231. package/dist/grade/grade-item.js.map +1 -1
  232. package/dist/grade/render-variants.d.ts.map +1 -1
  233. package/dist/grade/render-variants.js +3 -0
  234. package/dist/grade/render-variants.js.map +1 -1
  235. package/dist/grade/render.d.ts.map +1 -1
  236. package/dist/grade/render.js +1 -0
  237. package/dist/grade/render.js.map +1 -1
  238. package/dist/grade/result.d.ts +3 -0
  239. package/dist/grade/result.d.ts.map +1 -1
  240. package/dist/grade/results-read.d.ts.map +1 -1
  241. package/dist/grade/results-read.js +13 -2
  242. package/dist/grade/results-read.js.map +1 -1
  243. package/dist/grade/summary.d.ts +3 -0
  244. package/dist/grade/summary.d.ts.map +1 -1
  245. package/dist/grade/summary.js +6 -0
  246. package/dist/grade/summary.js.map +1 -1
  247. package/dist/grade/text.d.ts +2 -0
  248. package/dist/grade/text.d.ts.map +1 -1
  249. package/dist/grade/text.js +2 -0
  250. package/dist/grade/text.js.map +1 -1
  251. package/dist/grade/variants-text.d.ts +3 -0
  252. package/dist/grade/variants-text.d.ts.map +1 -1
  253. package/dist/grade/variants-text.js +4 -0
  254. package/dist/grade/variants-text.js.map +1 -1
  255. package/dist/grade/variants.d.ts +3 -0
  256. package/dist/grade/variants.d.ts.map +1 -1
  257. package/dist/grade/variants.js +1 -0
  258. package/dist/grade/variants.js.map +1 -1
  259. package/dist/grade-api.d.ts +1 -0
  260. package/dist/grade-api.d.ts.map +1 -1
  261. package/dist/grade-api.js +2 -1
  262. package/dist/grade-api.js.map +1 -1
  263. package/dist/judge.d.ts +0 -1
  264. package/dist/judge.d.ts.map +1 -1
  265. package/dist/judge.js +0 -1
  266. package/dist/judge.js.map +1 -1
  267. package/dist/known-genres.js +2 -2
  268. package/dist/known-genres.js.map +1 -1
  269. package/dist/package-files.d.ts +6 -0
  270. package/dist/package-files.d.ts.map +1 -0
  271. package/dist/package-files.js +11 -0
  272. package/dist/package-files.js.map +1 -0
  273. package/dist/profile/load.d.ts.map +1 -1
  274. package/dist/profile/load.js +5 -6
  275. package/dist/profile/load.js.map +1 -1
  276. package/dist/rule-load.d.ts.map +1 -1
  277. package/dist/rule-load.js +5 -6
  278. package/dist/rule-load.js.map +1 -1
  279. package/dist/rule-offs.js +3 -3
  280. package/dist/rule-offs.js.map +1 -1
  281. package/dist/run.js +1 -1
  282. package/dist/run.js.map +1 -1
  283. package/dist/structure/date-range.d.ts +4 -0
  284. package/dist/structure/date-range.d.ts.map +1 -1
  285. package/dist/structure/date-range.js +23 -3
  286. package/dist/structure/date-range.js.map +1 -1
  287. package/dist/structure/issues.d.ts +17 -1
  288. package/dist/structure/issues.d.ts.map +1 -1
  289. package/dist/structure/issues.js +54 -5
  290. package/dist/structure/issues.js.map +1 -1
  291. package/dist/structure/party-role.d.ts +30 -0
  292. package/dist/structure/party-role.d.ts.map +1 -0
  293. package/dist/structure/party-role.js +58 -0
  294. package/dist/structure/party-role.js.map +1 -0
  295. package/dist/structure/prose-total.d.ts +28 -0
  296. package/dist/structure/prose-total.d.ts.map +1 -0
  297. package/dist/structure/prose-total.js +99 -0
  298. package/dist/structure/prose-total.js.map +1 -0
  299. package/dist/structure/reference-text.d.ts +5 -0
  300. package/dist/structure/reference-text.d.ts.map +1 -1
  301. package/dist/structure/reference-text.js +17 -4
  302. package/dist/structure/reference-text.js.map +1 -1
  303. package/dist/structure/term-prefix.d.ts +18 -0
  304. package/dist/structure/term-prefix.d.ts.map +1 -0
  305. package/dist/structure/term-prefix.js +40 -0
  306. package/dist/structure/term-prefix.js.map +1 -0
  307. package/dist/structure/total.d.ts +2 -0
  308. package/dist/structure/total.d.ts.map +1 -1
  309. package/dist/structure/total.js +2 -0
  310. package/dist/structure/total.js.map +1 -1
  311. package/dist/structure-shape/baseline-load.d.ts.map +1 -1
  312. package/dist/structure-shape/baseline-load.js +4 -5
  313. package/dist/structure-shape/baseline-load.js.map +1 -1
  314. package/dist/style-load.d.ts.map +1 -1
  315. package/dist/style-load.js +5 -6
  316. package/dist/style-load.js.map +1 -1
  317. package/package.json +24 -3
  318. package/rules/cliche.yaml +28 -8
  319. package/rules/connective-hierarchy.yaml +62 -0
  320. package/rules/date-without-year.yaml +28 -3
  321. package/rules/defined-term-form.yaml +9 -6
  322. package/rules/demonstrative-opener-run.yaml +24 -7
  323. package/rules/missing-final-period.yaml +76 -0
  324. package/rules/missing-space-after-comma.yaml +57 -0
  325. package/rules/no-mixed-desumasu.yaml +2 -2
  326. package/rules/orthographic-variant.yaml +2 -2
  327. package/rules/party-role-name.yaml +94 -0
  328. package/rules/quote-without-source.yaml +61 -0
  329. package/rules/total-mismatch.yaml +8 -8
  330. package/rules/vague-deadline.yaml +95 -0
  331. package/rules/weasel-word.yaml +25 -7
  332. package/skills/chaff/SKILL.md +32 -5
  333. package/src/adapter-import.ts +3 -0
  334. package/src/adapter-load.ts +2 -1
  335. package/src/ai-score/human-shares.ts +207 -0
  336. package/src/ai-score/lint-line.ts +10 -0
  337. package/src/ai-score/of-document.ts +46 -0
  338. package/src/ai-score/render.ts +124 -0
  339. package/src/ai-score/score.ts +121 -0
  340. package/src/ai-score/signals.ts +39 -0
  341. package/src/ai-score/text.ts +103 -0
  342. package/src/ai-score/view.ts +21 -0
  343. package/src/backends/anthropic.ts +0 -2
  344. package/src/backends/default-model.ts +9 -0
  345. package/src/backends/openai.ts +0 -2
  346. package/src/browser/adapter-import.ts +19 -0
  347. package/src/browser/bounded-match.ts +9 -0
  348. package/src/browser/check-text.ts +106 -0
  349. package/src/browser/detectors.ts +40 -0
  350. package/src/browser/import-meta-glob.d.ts +5 -0
  351. package/src/browser/package-files.ts +13 -0
  352. package/src/browser/path.ts +73 -0
  353. package/src/browser/working-dir.ts +3 -0
  354. package/src/browser-files.ts +87 -0
  355. package/src/browser.ts +19 -0
  356. package/src/cli-text.ts +2 -0
  357. package/src/cli.ts +4 -1
  358. package/src/commands/ai-score.ts +77 -0
  359. package/src/commands/document-commands.ts +2 -0
  360. package/src/config/by-path-problems.ts +17 -0
  361. package/src/config/load.ts +21 -8
  362. package/src/config/read.ts +5 -1
  363. package/src/config/warnings.ts +3 -1
  364. package/src/config/working-dir.ts +3 -0
  365. package/src/custom/bounded-match.ts +1 -16
  366. package/src/custom/pattern-timeout.ts +17 -0
  367. package/src/detect.ts +4 -5
  368. package/src/detectors/connective-hierarchy.ts +99 -0
  369. package/src/detectors/date-year.ts +51 -12
  370. package/src/detectors/defined-term-form.ts +28 -6
  371. package/src/detectors/missing-final-period.ts +79 -0
  372. package/src/detectors/missing-space-after-comma.ts +54 -0
  373. package/src/detectors/orthographic-variant.ts +59 -18
  374. package/src/detectors/party-role-name.ts +44 -0
  375. package/src/detectors/quote-without-source.ts +90 -0
  376. package/src/detectors/reference-text.ts +1 -1
  377. package/src/detectors/registry/connective-hierarchy.ts +4 -0
  378. package/src/detectors/registry/missing-final-period.ts +4 -0
  379. package/src/detectors/registry/missing-space-after-comma.ts +4 -0
  380. package/src/detectors/registry/party-role-name.ts +4 -0
  381. package/src/detectors/registry/quote-without-source.ts +4 -0
  382. package/src/detectors/registry/vague-deadline.ts +4 -0
  383. package/src/detectors/run-in-label.ts +60 -0
  384. package/src/detectors/sentence-counts.ts +13 -4
  385. package/src/detectors/sentence-ending.ts +3 -2
  386. package/src/detectors/structure-tree.ts +28 -6
  387. package/src/detectors/unbalanced-bracket.ts +25 -10
  388. package/src/detectors/vague-deadline.ts +132 -0
  389. package/src/furigana.ts +20 -0
  390. package/src/genre-load.ts +5 -7
  391. package/src/grade/ai-score.ts +32 -0
  392. package/src/grade/finding.ts +16 -0
  393. package/src/grade/grade-item.ts +4 -13
  394. package/src/grade/render-variants.ts +5 -0
  395. package/src/grade/render.ts +1 -0
  396. package/src/grade/result.ts +3 -0
  397. package/src/grade/results-read.ts +17 -2
  398. package/src/grade/summary.ts +9 -0
  399. package/src/grade/text.ts +6 -0
  400. package/src/grade/variants-text.ts +7 -0
  401. package/src/grade/variants.ts +4 -0
  402. package/src/grade-api.ts +3 -1
  403. package/src/judge.ts +0 -2
  404. package/src/known-genres.ts +2 -2
  405. package/src/package-files.ts +15 -0
  406. package/src/profile/load.ts +5 -6
  407. package/src/rule-load.ts +5 -6
  408. package/src/rule-offs.ts +3 -3
  409. package/src/run.ts +1 -1
  410. package/src/structure/date-range.ts +28 -3
  411. package/src/structure/issues.ts +61 -6
  412. package/src/structure/party-role.ts +94 -0
  413. package/src/structure/prose-total.ts +135 -0
  414. package/src/structure/reference-text.ts +17 -4
  415. package/src/structure/term-prefix.ts +54 -0
  416. package/src/structure/total.ts +4 -0
  417. package/src/structure-shape/baseline-load.ts +4 -5
  418. package/src/style-load.ts +5 -6
@@ -1 +1 @@
1
- {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/structure/issues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAOlD,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAIrH,8DAA8D;AAC9D,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,KAAG,aAAa,EAUlE,CAAC;AAuCF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,aAAa,EAAE,QAAQ,MAAM,KAAG,cAAc,EAmBtF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,aAAa,KAAG,CAAC,CAAC,SAAS,EAAE,aAAa,KAAK,aAAa,GAAG,SAAS,CAgB/G,CAAC;AAkBF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,aAAa,KAAG,cAAc,EAaxE,CAAC"}
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/structure/issues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAOlD,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAIrH,8DAA8D;AAC9D,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,KAAG,aAAa,EAUlE,CAAC;AAgCF,8HAA8H;AAC9H,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3F;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,UAAU,QAAQ,KAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAK5H,CAAC;AAwCF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,aAAa,EAAE,QAAQ,MAAM,KAAG,cAAc,EAqBtF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,aAAa,EAAE,QAAQ,MAAM,KAAG,CAAC,CAAC,SAAS,EAAE,aAAa,KAAK,aAAa,GAAG,SAAS,CAqB/H,CAAC;AAkBF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,aAAa,KAAG,cAAc,EAaxE,CAAC"}
@@ -22,7 +22,8 @@ const textOf = (node, key) => {
22
22
  * 参照がこの文書のどこかを指しているか。fallback は言語パッケージが付ける別の行き先で、
23
23
  * 日本語の「第4条第1項」は、番号の無い第 1 項を持つ第4条を指しうる。
24
24
  */
25
- const resolves = (node, addresses) => addresses.has(textOf(node, "target")) || (node.attrs["fallback"] !== undefined && addresses.has(fallbackKey(node)));
25
+ const resolves = (node, addresses, chapters) => addresses.has(textOf(node, "target")) ||
26
+ (node.attrs["fallback"] !== undefined && chapterReading(textOf(node, "target"), chapters).fallback && addresses.has(fallbackKey(node)));
26
27
  /**
27
28
  * fallbackLabel があれば、fallback はその見出しの番号で書かれた節点だけに当たる。
28
29
  * 「第3章」の fallback 3 は「## 3. 構成」には当たり、同じ番地の「第3条」には当たらない。
@@ -32,6 +33,46 @@ const fallbackKey = (node) => node.attrs["fallbackLabel"] === undefined ? textOf
32
33
  /** 見出しの下の章(h1/ch9)は、見出しの番地を除いた ch9 でも指せる。本文の「第9章」は見出しの番地を書かない。 */
33
34
  const addressesOf = (node) => node.kind === "chapter" && node.address.includes("/") ? [node.address, node.address.slice(node.address.lastIndexOf("/") + 1)] : [node.address];
34
35
  const keysOf = (node) => addressesOf(node).flatMap((address) => [address, labelled(address, textOf(node, "label"))]);
36
+ /** An address without its numbers: the kind of unit it names (ch9 and ch10 are both ch). */
37
+ const unitOf = (address) => address.replaceAll(/[\d.]+/gu, "");
38
+ /**
39
+ * How a document's chapters bear on a reference to a chapter (第9章, Chapter 9). Pure.
40
+ * fallback: whether the reference may fall back to a numbered section ("## 9. …"). Only in a document with no chapter:
41
+ * where chapters are written, a chapter reference names a chapter, and section 9 is not chapter 9.
42
+ * elsewhere: the reference names a chapter of another file. A document that is one chapter (第10章 as its title, a series
43
+ * of one chapter per file) holds no other chapter, so 第9章 is the next file's. Its own chapter is still its own.
44
+ */
45
+ export const chapterReading = (target, chapters) => {
46
+ const shortAddresses = chapters.addresses.map((address) => address.slice(address.lastIndexOf("/") + 1));
47
+ const toChapter = new Set(shortAddresses.map(unitOf)).has(unitOf(target));
48
+ const series = chapters.titled && chapters.addresses.length === 1 && !shortAddresses.includes(target);
49
+ return { fallback: !toChapter, elsewhere: toChapter && series };
50
+ };
51
+ /** A chapter is the document's title when it is not under another heading (ch10, not h1/ch1) and nothing numbered comes before it. */
52
+ const chaptersOf = (nodes) => {
53
+ const chapters = nodes.filter((node) => node.kind === "chapter");
54
+ const first = nodes.find((node) => NUMBERED.has(node.kind));
55
+ const titled = chapters.length === 1 && first === chapters[0] && !(first?.address.includes("/") ?? true);
56
+ return { addresses: chapters.map((node) => node.address), titled };
57
+ };
58
+ /** What may stand between a chapter and the reference it qualifies: nothing (第1章第2条) or の (第1章の第2条). A list mark (第1章、第2条) names two. */
59
+ const QUALIFIER_GAPS = new Set(["", "の"]);
60
+ /**
61
+ * The references that point into another file: a chapter reference read as elsewhere (chapterReading), and the reference
62
+ * right after one, which it qualifies (第1章の第2条 is article 2 of that other chapter).
63
+ */
64
+ const elsewhereReferences = (nodes, source) => {
65
+ const chapters = chaptersOf(nodes);
66
+ const references = nodes.filter((node) => node.kind === "reference");
67
+ const elsewhere = new Set();
68
+ references.forEach((node, index) => {
69
+ const before = references[index - 1];
70
+ const qualified = before !== undefined && elsewhere.has(before) && QUALIFIER_GAPS.has(source.slice(before.span.end, node.span.start).trim());
71
+ if (qualified || chapterReading(textOf(node, "target"), chapters).elsewhere)
72
+ elsewhere.add(node);
73
+ });
74
+ return elsewhere;
75
+ };
35
76
  /**
36
77
  * 他の文書を指す参照か。citedTag("[HTTP-CACHING]")は、書き方だけでは差し込み欄の "[BUYER-1]" と見分けられないので、
37
78
  * 文書がその語を一覧に載せているときだけ他の文書の名とみなす。
@@ -56,26 +97,34 @@ export const danglingReferences = (tree, source) => {
56
97
  const citedElsewhere = new Set(nodes.filter((node) => node.kind === "reference" && citesOther(node)).map(numbering));
57
98
  const otherNumbering = (node) => numberings.size > 0 && typeof numbering(node) === "string" && !numberings.has(String(numbering(node))) && citedElsewhere.has(numbering(node));
58
99
  const articleLabels = nodes.filter((node) => node.kind === "article").map((node) => textOf(node, "label"));
100
+ const chapters = chaptersOf(nodes);
101
+ const elsewhere = elsewhereReferences(nodes, source);
59
102
  return nodes
60
103
  .filter((node) => node.kind === "reference" && !citesOther(node) && !otherNumbering(node))
61
- .filter((node) => !namesAbsentUnit(node, articleLabels))
62
- .filter((node) => !resolves(node, addresses))
104
+ .filter((node) => !namesAbsentUnit(node, articleLabels) && !elsewhere.has(node))
105
+ .filter((node) => !resolves(node, addresses, chapters))
63
106
  .map((node) => ({ offset: node.span.start, values: { label: textOf(node, "label"), target: textOf(node, "target") } }));
64
107
  };
65
108
  /**
66
109
  * 参照が指す節点。danglingReferences と同じ引き方(番地、章の短い番地、fallback)で、番号の付いたまとまりを引く。
67
110
  * 同じ鍵の節点が二つ以上ある(番号の振り直しや別表の条)ときは、どれを指すのか決まらないので undefined。
68
111
  */
69
- export const referenceResolver = (tree) => {
112
+ export const referenceResolver = (tree, source) => {
113
+ const nodes = inDocumentOrder(tree);
114
+ const chapters = chaptersOf(nodes);
115
+ const elsewhere = elsewhereReferences(nodes, source);
70
116
  const byKey = new Map();
71
117
  inDocumentOrder(tree)
72
118
  .filter((node) => NUMBERED.has(node.kind))
73
119
  .forEach((node) => keysOf(node).forEach((key) => byKey.set(key, byKey.has(key) && byKey.get(key) !== node ? null : node)));
74
120
  const resolve = (reference) => {
121
+ if (elsewhere.has(reference))
122
+ return undefined;
75
123
  const target = byKey.get(textOf(reference, "target"));
76
124
  if (target !== undefined)
77
125
  return target ?? undefined;
78
- return reference.attrs["fallback"] === undefined ? undefined : (byKey.get(fallbackKey(reference)) ?? undefined);
126
+ const fallback = reference.attrs["fallback"] !== undefined && chapterReading(textOf(reference, "target"), chapters).fallback;
127
+ return fallback ? (byKey.get(fallbackKey(reference)) ?? undefined) : undefined;
79
128
  };
80
129
  // Article 6 は Section 6 ではない。番号の書き方が両方にあって違えば、別の文書の条かもしれないので引かない。
81
130
  return (reference) => {
@@ -1 +1 @@
1
- {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/structure/issues.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/structure/issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { BodyText, DefinedTerm } from "./definition-use.ts";
2
+ /**
3
+ * 当事者を、定めた呼び名でなく立場の語で書いた所(「乙」と定めたあとの「受託者」、the "Supplier" のあとの the Vendor)。
4
+ * 当事者の定義は、文の途中で括弧に入れて短い呼び名を定めた所のうち、呼び名が当事者の呼び名の語(甲・乙・当社)か立場の語
5
+ * そのもの(Supplier)であるもの、または括弧のすぐ前に会社の形(株式会社、Ltd)を書いたもの。語は言語パッケージの語彙表から取る。
6
+ * 立場の語は、それ自体を定義した語や、定義した語の一部として書いた所(Receiving Party と定義した所の Party)なら指さない。
7
+ */
8
+ export type PartyWords = {
9
+ /** 当事者の立場の語(委託者、受託者、Supplier、Recipient)。 */
10
+ readonly roles: readonly string[];
11
+ /** 当事者の呼び名に使う語(甲、乙、当社、we)。 */
12
+ readonly shortNames: readonly string[];
13
+ /** 会社の形(株式会社、Ltd、Inc.)。 */
14
+ readonly companyForms: readonly string[];
15
+ };
16
+ export type Party = {
17
+ readonly term: string;
18
+ readonly end: number;
19
+ };
20
+ export type RoleUse = {
21
+ readonly offset: number;
22
+ readonly role: string;
23
+ };
24
+ /** 文書が当事者として定めた呼び名と、その定義の終わり。 */
25
+ export declare const partiesOf: (source: string, terms: readonly DefinedTerm[], words: PartyWords) => Party[];
26
+ /**
27
+ * 当事者を定めた後(after より後)で、立場の語を書いた所。立場の語それ自体を定義した文書では、その語は呼び名なので指さない。
28
+ */
29
+ export declare const roleUses: (source: string, texts: readonly BodyText[], roles: readonly string[], defined: readonly string[], after: number) => RoleUse[];
30
+ //# sourceMappingURL=party-role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-role.d.ts","sourceRoot":"","sources":["../../src/structure/party-role.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,2BAA2B;IAC3B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AACpE,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAiCzE,iCAAiC;AACjC,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,OAAO,SAAS,WAAW,EAAE,EAAE,OAAO,UAAU,KAAG,KAAK,EAIrC,CAAC;AAuB9D;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,OAAO,SAAS,QAAQ,EAAE,EAAE,OAAO,SAAS,MAAM,EAAE,EAAE,SAAS,SAAS,MAAM,EAAE,EAAE,OAAO,MAAM,KAAG,OAAO,EAWD,CAAC"}
@@ -0,0 +1,58 @@
1
+ /** 会社の形を探す、括弧の前の幅。名前一つ分。 */
2
+ const NAME_REACH = 40;
3
+ /** 語の前後の一字がこれなら、語は長い語の一部(再受託者、受託者側の「受託者」は語の一部でない側も含む)。 */
4
+ const WORD_CHAR = /[\p{Script=Han}\p{Script=Katakana}\p{Script=Latin}\p{N}ー]/u;
5
+ const LATIN_START = /^\p{Script=Latin}/u;
6
+ /** 英語の立場の語は、冠詞か所有の語に続く大文字の語だけ(the Vendor)。小文字の the vendor は普通の名詞。 */
7
+ const ENGLISH_LEAD = /(?:^|[^\p{L}])(?:the|The|each|Each|any|Any|such|Such)\s+$/u;
8
+ const LEAD_REACH = 8;
9
+ const occurrences = (text, word) => {
10
+ const found = [];
11
+ let at = text.indexOf(word);
12
+ while (at !== -1) {
13
+ found.push(at);
14
+ at = text.indexOf(word, at + word.length);
15
+ }
16
+ return found;
17
+ };
18
+ const LETTER = /\p{L}/u;
19
+ /** 英字の語は、英字の続き(Including の Inc)では語と読まない。 */
20
+ const wordAt = (text, word, at) => !LATIN_START.test(word) || (!LETTER.test(text.charAt(at - 1)) && !LETTER.test(text.charAt(at + word.length)));
21
+ /** 括弧の前の名前に会社の形があるか。 */
22
+ const namedCompanyBefore = (source, definition, forms) => {
23
+ const before = source.slice(Math.max(0, definition.span.start - NAME_REACH), definition.span.start);
24
+ return forms.some((form) => form !== "" && occurrences(before, form).some((at) => wordAt(before, form, at)));
25
+ };
26
+ /** 文書が当事者として定めた呼び名と、その定義の終わり。 */
27
+ export const partiesOf = (source, terms, words) => terms
28
+ .filter((term) => term.inline)
29
+ .filter((term) => words.shortNames.includes(term.term) || words.roles.includes(term.term) || namedCompanyBefore(source, term, words.companyForms))
30
+ .map((term) => ({ term: term.term, end: term.span.end }));
31
+ /** 英語の立場の語のあとに付いてよいもの: 複数形と所有の形(Vendors、Vendor's)。 */
32
+ const ENGLISH_ENDING = /^(?:s|['’]s?)?(?![\p{L}\p{N}])/u;
33
+ /** 文や項目の頭("Vendor shall"、"1. Vendor shall")。 */
34
+ const CLAUSE_START = /^[\s\d.()*+-]*$/u;
35
+ /** 英語の立場の語は、冠詞か所有の語のあと(the Vendor)か、文の頭の大文字の語だけ。小文字の the vendor は普通の名詞。 */
36
+ const englishRoleAt = (text, at, role) => {
37
+ const before = text.text.slice(0, at);
38
+ return ENGLISH_ENDING.test(text.text.slice(at + role.length)) && (CLAUSE_START.test(before) || ENGLISH_LEAD.test(before.slice(-LEAD_REACH)));
39
+ };
40
+ const standsAlone = (source, text, at, role) => {
41
+ const offset = text.start + at;
42
+ if (WORD_CHAR.test(source.charAt(offset - 1)))
43
+ return false;
44
+ return LATIN_START.test(role) ? englishRoleAt(text, at, role) : !/[\p{Script=Han}\p{Script=Katakana}ー]/u.test(source.charAt(offset + role.length));
45
+ };
46
+ /** 定義した語がこの位置を覆うか(Receiving Party の Party、本受託者規程の受託者)。 */
47
+ const insideDefined = (source, offset, role, defined) => defined.some((term) => term !== role && term.includes(role) && occurrences(term, role).some((at) => source.startsWith(term, offset - at)));
48
+ /**
49
+ * 当事者を定めた後(after より後)で、立場の語を書いた所。立場の語それ自体を定義した文書では、その語は呼び名なので指さない。
50
+ */
51
+ export const roleUses = (source, texts, roles, defined, after) => roles
52
+ .filter((role) => role !== "" && !defined.includes(role))
53
+ .flatMap((role) => texts.flatMap((text) => occurrences(text.text, role)
54
+ .filter((at) => text.start + at > after && standsAlone(source, text, at, role) && !insideDefined(source, text.start + at, role, defined))
55
+ .map((at) => ({ offset: text.start + at, role }))))
56
+ .toSorted((left, right) => left.offset - right.offset)
57
+ .filter((use, index, all) => all.findIndex((other) => other.offset <= use.offset && use.offset < other.offset + other.role.length) === index);
58
+ //# sourceMappingURL=party-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-role.js","sourceRoot":"","sources":["../../src/structure/party-role.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { StructureIssue } from "./issues.ts";
2
+ import { type Amount } from "./total.ts";
3
+ /**
4
+ * 文の中で書いた合計と内訳。表や箇条書きでなく、一つの文に並べた金額を読む。二つの形がある。
5
+ * 内訳のあとに合計: 「保守費60,000円、運用費30,000円とし、合計100,000円とする」 "$6,000 for hosting and $3,000 for support, for a total of $9,000"
6
+ * 合計のあとに内訳: 「月額150,000円(内訳:保守費90,000円、運用費60,000円)」 "costs $8 per month, made up of a base fee of $6 and a storage fee of $2"
7
+ * 合計の語(total-phrase)はすぐ後ろに合計の金額が来る語、内訳の語(breakdown-phrase)はすぐ後ろから内訳が始まる語。
8
+ * 内訳は合計と同じ単位の金額で、二つ以上。合計の語のすぐ前(内訳の語のすぐ後ろ)から続く並びのどれかの和が合計と合えば
9
+ * 合っているとみなし、どれとも合わないときだけ言う。文の中のほかの金額(単価・上限・遅延損害金)を内訳に数えて誤って言わないため。
10
+ * 値引きの語(discount-word)のすぐ後ろの金額は引く。内訳の語の前の金額は、あいだに並びをつなぐ語(breakdown-gap-joiner)が
11
+ * あれば、別の項目の金額で合計ではない(a $1,000 onboarding fee and a monthly subscription, consisting of …)。
12
+ */
13
+ export type TotalWords = {
14
+ readonly totals: readonly string[];
15
+ readonly breakdowns: readonly string[];
16
+ readonly discounts: readonly string[];
17
+ readonly joiners: readonly string[];
18
+ };
19
+ type Span = {
20
+ readonly start: number;
21
+ readonly end: number;
22
+ };
23
+ /** 語の文の中の位置。重なるときは前から、同じ所から始まるなら長いほうを取る。大文字小文字は区別しない。 */
24
+ export declare const phraseSpans: (text: string, start: number, phrases: readonly string[]) => Span[];
25
+ /** 文ごとに、書いた合計が内訳の和と合わない所。一つの金額は一度だけ言う。 */
26
+ export declare const proseTotalMismatches: (source: string, sentences: readonly Span[], amounts: readonly Amount[], words: TotalWords) => StructureIssue[];
27
+ export {};
28
+ //# sourceMappingURL=prose-total.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prose-total.d.ts","sourceRoot":"","sources":["../../src/structure/prose-total.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,KAAK,IAAI,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAqB7D,yDAAyD;AACzD,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,KAAG,IAAI,EAczF,CAAC;AAsEF,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,WAAW,SAAS,IAAI,EAAE,EAAE,SAAS,SAAS,MAAM,EAAE,EAAE,OAAO,UAAU,KAAG,cAAc,EAO9I,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { shownTotal } from "./total.js";
2
+ const CENTS = 100;
3
+ const MIN_PARTS = 2;
4
+ /** 合計の語と金額のあいだに書いてよいもの: 空白と、コロンか読点一つ。 */
5
+ const isTotalGap = (gap) => /^[::、,,]?$/u.test(gap.trim());
6
+ const OPENERS = "((";
7
+ const CLOSERS = "))";
8
+ const CLOSER = /[))]/u;
9
+ const centsOf = (amount) => Math.round(amount.value * CENTS);
10
+ const sumOf = (values) => values.reduce((sum, value) => sum + value, 0);
11
+ /** 英字で始まる語は、英字の続き(subtotal の total)では語と読まない。 */
12
+ const LATIN = /[A-Za-z0-9]/u;
13
+ const occurrences = (lower, phrase) => [...lower.matchAll(new RegExp(phrase.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"), "gu"))].map((match) => match.index);
14
+ /** 語の文の中の位置。重なるときは前から、同じ所から始まるなら長いほうを取る。大文字小文字は区別しない。 */
15
+ export const phraseSpans = (text, start, phrases) => {
16
+ const lower = text.toLowerCase();
17
+ const found = phrases
18
+ .map((phrase) => phrase.toLowerCase())
19
+ .filter((phrase) => phrase !== "")
20
+ .flatMap((phrase) => occurrences(lower, phrase)
21
+ .filter((at) => !(LATIN.test(phrase[0] ?? "") && LATIN.test(lower[at - 1] ?? "")))
22
+ .map((at) => ({ start: at, end: at + phrase.length })))
23
+ .toSorted((left, right) => left.start - right.start || right.end - left.end);
24
+ return found
25
+ .filter((span, index) => found.slice(0, index).every((before) => before.end <= span.start))
26
+ .map((span) => ({ start: start + span.start, end: start + span.end }));
27
+ };
28
+ /** 金額の前に書いた単位($9,000 の $)を除いた、語と金額のあいだ。 */
29
+ const gapBefore = (source, from, amount) => {
30
+ const gap = source.slice(from, amount.offset);
31
+ const trimmed = gap.trimEnd();
32
+ return trimmed.endsWith(amount.unit) ? trimmed.slice(0, trimmed.length - amount.unit.length) : gap;
33
+ };
34
+ /** 合計の語に近いほうから続く、二つ以上の並び(後ろ寄せ: 合計の前の内訳、前寄せ: 合計の後ろの内訳)。 */
35
+ const nearRuns = (parts, nearEnd) => parts.slice(MIN_PARTS - 1).map((_, index) => (nearEnd ? parts.slice(parts.length - MIN_PARTS - index) : parts.slice(0, MIN_PARTS + index)));
36
+ /** 内訳の金額。前の金額(並びの始まり)からこの金額までに値引きの語があれば、負の数。 */
37
+ const signedValues = (source, parts, from, discounts) => parts.map((part, index) => {
38
+ const start = parts[index - 1]?.end ?? from;
39
+ const discounted = phraseSpans(source.slice(start, part.offset), start, discounts).length > 0;
40
+ return discounted ? -centsOf(part) : centsOf(part);
41
+ });
42
+ const mismatch = (source, breakdown, discounts) => {
43
+ const { total, from, nearEnd } = breakdown;
44
+ const parts = breakdown.parts.filter((part) => part.unit === total.unit);
45
+ if (parts.length < MIN_PARTS)
46
+ return [];
47
+ const values = signedValues(source, parts, from, discounts);
48
+ const written = centsOf(total);
49
+ if (nearRuns(values, nearEnd).some((run) => sumOf(run) === written))
50
+ return [];
51
+ return [{ offset: total.offset, values: shownTotal(source, total, sumOf(values)) }];
52
+ };
53
+ /** 内訳の語が括弧の中にあれば、その括弧の終わり。無ければ文の終わり。 */
54
+ const breakdownEnd = (source, total, marker, sentence) => {
55
+ const between = source.slice(total.end, marker.start);
56
+ const opened = [...between].filter((char) => OPENERS.includes(char)).length > [...between].filter((char) => CLOSERS.includes(char)).length;
57
+ if (!opened)
58
+ return sentence.end;
59
+ const close = CLOSER.exec(source.slice(marker.end, sentence.end));
60
+ return close === null ? sentence.end : marker.end + close.index;
61
+ };
62
+ const inside = (amounts, start, end) => amounts.filter((amount) => amount.offset >= start && amount.end <= end);
63
+ /** 合計の語のすぐ後ろの金額を、その前の内訳と比べる。内訳は、前の合計の語か内訳の語より後ろから。 */
64
+ const totalsAfterParts = (source, sentence, amounts, words) => {
65
+ const text = source.slice(sentence.start, sentence.end);
66
+ const markers = phraseSpans(text, sentence.start, words.totals);
67
+ const breakdowns = phraseSpans(text, sentence.start, words.breakdowns);
68
+ return markers.flatMap((marker, index) => {
69
+ const total = amounts.find((amount) => amount.offset >= marker.end && isTotalGap(gapBefore(source, marker.end, amount)));
70
+ if (total === undefined)
71
+ return [];
72
+ const from = Math.max(sentence.start, markers[index - 1]?.end ?? 0, ...breakdowns.filter((span) => span.end <= marker.start).map((span) => span.end));
73
+ return mismatch(source, { total, parts: inside(amounts, from, marker.start), from, nearEnd: true }, words.discounts);
74
+ });
75
+ };
76
+ /** 内訳の語のすぐ前の金額を合計とし、内訳の語の後ろ(括弧の中なら括弧の終わりまで、次の合計の語まで)の金額と比べる。 */
77
+ const totalsBeforeParts = (source, sentence, amounts, words) => {
78
+ const text = source.slice(sentence.start, sentence.end);
79
+ const totalMarkers = phraseSpans(text, sentence.start, words.totals);
80
+ return phraseSpans(text, sentence.start, words.breakdowns).flatMap((marker) => {
81
+ const total = amounts.findLast((amount) => amount.end <= marker.start);
82
+ if (total === undefined || phraseSpans(source.slice(total.end, marker.start), total.end, words.joiners).length > 0)
83
+ return [];
84
+ const nextTotal = totalMarkers.find((span) => span.start >= marker.end)?.start ?? sentence.end;
85
+ const parts = inside(amounts, marker.end, Math.min(nextTotal, breakdownEnd(source, total, marker, sentence)));
86
+ return mismatch(source, { total, parts, from: marker.end, nearEnd: false }, words.discounts);
87
+ });
88
+ };
89
+ /** 文ごとに、書いた合計が内訳の和と合わない所。一つの金額は一度だけ言う。 */
90
+ export const proseTotalMismatches = (source, sentences, amounts, words) => {
91
+ const issues = sentences.flatMap((sentence) => {
92
+ const inSentence = inside(amounts, sentence.start, sentence.end);
93
+ if (inSentence.length <= MIN_PARTS)
94
+ return [];
95
+ return [...totalsAfterParts(source, sentence, inSentence, words), ...totalsBeforeParts(source, sentence, inSentence, words)];
96
+ });
97
+ return issues.filter((issue, index) => issues.findIndex((other) => other.offset === issue.offset) === index);
98
+ };
99
+ //# sourceMappingURL=prose-total.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prose-total.js","sourceRoot":"","sources":["../../src/structure/prose-total.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,11 @@ export type ReferenceInput = {
22
22
  readonly targetOf: (reference: StructureNode) => StructureNode | undefined;
23
23
  readonly words: ReferenceWords;
24
24
  };
25
+ /**
26
+ * The name holds the aside. An English aside is a whole word or phrase: "or" in "Return of Information" is not the aside
27
+ * "or". Other asides are found anywhere (上記 in 上記参照).
28
+ */
29
+ export declare const holdsAside: (name: string, aside: string) => boolean;
25
30
  /** 名前を添えた参照で、名前が参照先の見出しと合わない。 */
26
31
  export declare const titleMismatches: (input: ReferenceInput) => StructureIssue[];
27
32
  /** 参照先の見出しにも本文にも無い話題。 */
@@ -1 +1 @@
1
- {"version":3,"file":"reference-text.d.ts","sourceRoot":"","sources":["../../src/structure/reference-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,aAAa,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC,CAAC;AA0CF,iCAAiC;AACjC,eAAO,MAAM,eAAe,GAAI,OAAO,cAAc,KAAG,cAAc,EAOlE,CAAC;AA8BL,yBAAyB;AACzB,eAAO,MAAM,WAAW,GAAI,OAAO,cAAc,KAAG,cAAc,EAO9D,CAAC"}
1
+ {"version":3,"file":"reference-text.d.ts","sourceRoot":"","sources":["../../src/structure/reference-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,aAAa,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC,CAAC;AAiCF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,OAQxD,CAAC;AAUF,iCAAiC;AACjC,eAAO,MAAM,eAAe,GAAI,OAAO,cAAc,KAAG,cAAc,EAOlE,CAAC;AA8BL,yBAAyB;AACzB,eAAO,MAAM,WAAW,GAAI,OAAO,cAAc,KAAG,cAAc,EAO9D,CAAC"}
@@ -23,10 +23,23 @@ const nameAfter = (source, end) => {
23
23
  };
24
24
  /** 項や号の札((a)、(ii)、(イ))。名前ではなく、参照の続き。 */
25
25
  const ITEM_LABEL = /^(?:[a-z]{1,2}|[ivxlcdm]{1,5}|.)$/iu;
26
- const isName = (name, words) => LETTER.test(name) &&
27
- !DIGIT.test(name) &&
28
- !ITEM_LABEL.test(name.normalize("NFKC")) &&
29
- !words.asides.some((aside) => normalized(name).includes(normalized(aside)));
26
+ const LATIN_ASIDE = /^[\p{Script=Latin}\s.]+$/u;
27
+ /**
28
+ * The name holds the aside. An English aside is a whole word or phrase: "or" in "Return of Information" is not the aside
29
+ * "or". Other asides are found anywhere (上記 in 上記参照).
30
+ */
31
+ export const holdsAside = (name, aside) => {
32
+ if (aside.trim() === "")
33
+ return false;
34
+ if (!LATIN_ASIDE.test(aside))
35
+ return normalized(name).includes(normalized(aside));
36
+ const words = ` ${name
37
+ .normalize("NFKC")
38
+ .toLowerCase()
39
+ .replaceAll(/[^\p{L}\p{N}]+/gu, " ")} `;
40
+ return aside.trim() !== "" && words.includes(` ${aside.trim().toLowerCase()} `);
41
+ };
42
+ const isName = (name, words) => LETTER.test(name) && !DIGIT.test(name) && !ITEM_LABEL.test(name.normalize("NFKC")) && !words.asides.some((aside) => holdsAside(name, aside));
30
43
  const agrees = (name, heading) => {
31
44
  const [a, b] = [normalized(name), normalized(heading)];
32
45
  return a.includes(b) || b.includes(a);
@@ -1 +1 @@
1
- {"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/structure/reference-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/structure/reference-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BodyText } from "./definition-use.ts";
2
+ /**
3
+ * 定義した語の頭の語(本・本件)を、同じ組のほかの語に替えた形。「本業務」と定義して「本件業務」と書くと、
4
+ * 読み手は別のものを指しているのかと迷う。組は言語パッケージの語彙表(defined-term-prefix)の group から取る。
5
+ */
6
+ export type PrefixGroups = readonly (readonly string[])[];
7
+ /** 語彙表の項目を group ごとにまとめる。group の無い項目と、一つしかない組は外す。 */
8
+ export declare const prefixGroupsOf: (entries: readonly {
9
+ readonly pattern: string;
10
+ readonly group?: string | undefined;
11
+ }[]) => string[][];
12
+ /** 語の頭の語を同じ組のほかの語に替えた形。頭の語は長いほうから当て、頭の語のあとが一字の語には形が無い。 */
13
+ export declare const prefixVariants: (term: string, groups: PrefixGroups) => string[];
14
+ /**
15
+ * 定義の後ろ(after より後)で、形の違う語を書いた位置。長い語の一部と、定義した語の始まり(本件物品明細と定義した所の本件物品)は除く。
16
+ */
17
+ export declare const variantUses: (source: string, texts: readonly BodyText[], variant: string, after: number, defined: readonly string[]) => number[];
18
+ //# sourceMappingURL=term-prefix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"term-prefix.d.ts","sourceRoot":"","sources":["../../src/structure/term-prefix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;AAQ1D,qDAAqD;AACrD,eAAO,MAAM,cAAc,GAAI,SAAS,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,KAAG,MAAM,EAAE,EAO9H,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,QAAQ,YAAY,KAAG,MAAM,EAQtE,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,OAAO,SAAS,QAAQ,EAAE,EAAE,SAAS,MAAM,EAAE,OAAO,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,KAAG,MAAM,EAevI,CAAC"}
@@ -0,0 +1,40 @@
1
+ /** 語の前後の一字がこれなら、語は長い語の一部(見本物品の「本物品」、本業務委託契約の「本業務」)。 */
2
+ const WORD_CHAR = /[\p{Script=Han}\p{Script=Katakana}\p{Script=Latin}\p{N}ー]/u;
3
+ /** 頭の語のあとがこれより短い語(本件人、本件日)を替えると、普通の語(本人、本日)になる。 */
4
+ const MIN_REST = 2;
5
+ /** 語彙表の項目を group ごとにまとめる。group の無い項目と、一つしかない組は外す。 */
6
+ export const prefixGroupsOf = (entries) => {
7
+ const groups = new Map();
8
+ entries.forEach((entry) => {
9
+ if (entry.group === undefined || entry.pattern === "")
10
+ return;
11
+ groups.set(entry.group, [...(groups.get(entry.group) ?? []), entry.pattern]);
12
+ });
13
+ return [...groups.values()].filter((group) => group.length > 1);
14
+ };
15
+ /** 語の頭の語を同じ組のほかの語に替えた形。頭の語は長いほうから当て、頭の語のあとが一字の語には形が無い。 */
16
+ export const prefixVariants = (term, groups) => groups.flatMap((group) => {
17
+ const prefix = group
18
+ .filter((candidate) => term.startsWith(candidate) && term.length > candidate.length)
19
+ .toSorted((left, right) => right.length - left.length)[0];
20
+ const rest = prefix === undefined ? "" : term.slice(prefix.length);
21
+ if (prefix === undefined || [...rest].length < MIN_REST)
22
+ return [];
23
+ return group.filter((other) => other !== prefix).map((other) => `${other}${rest}`);
24
+ });
25
+ /**
26
+ * 定義の後ろ(after より後)で、形の違う語を書いた位置。長い語の一部と、定義した語の始まり(本件物品明細と定義した所の本件物品)は除く。
27
+ */
28
+ export const variantUses = (source, texts, variant, after, defined) => texts.flatMap((text) => {
29
+ const offsets = [];
30
+ let at = text.text.indexOf(variant);
31
+ while (at !== -1) {
32
+ offsets.push(text.start + at);
33
+ at = text.text.indexOf(variant, at + variant.length);
34
+ }
35
+ return offsets.filter((offset) => offset > after &&
36
+ !WORD_CHAR.test(source.charAt(offset - 1)) &&
37
+ !WORD_CHAR.test(source.charAt(offset + variant.length)) &&
38
+ !defined.some((term) => source.startsWith(term, offset)));
39
+ });
40
+ //# sourceMappingURL=term-prefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"term-prefix.js","sourceRoot":"","sources":["../../src/structure/term-prefix.ts"],"names":[],"mappings":"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"}
@@ -14,5 +14,7 @@ export type Amount = {
14
14
  };
15
15
  export declare const columnOf: (source: string, line: Line, offset: number) => number;
16
16
  export declare const isTotalLabel: (text: string, labels: readonly string[]) => boolean;
17
+ /** 文の中の合計の金額(符号の無い、単位付きの金額)と和を、合計の書き方で見せる。 */
18
+ export declare const shownTotal: (source: string, total: Amount, sumCents: number) => Record<string, string>;
17
19
  export declare const totalMismatches: (source: string, amounts: readonly Amount[], labels: readonly string[]) => StructureIssue[];
18
20
  //# sourceMappingURL=total.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"total.d.ts","sourceRoot":"","sources":["../../src/structure/total.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAG9C;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBtH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,IAAI,EAAE,QAAQ,MAAM,KAAG,MAA2E,CAAC;AAqBlJ,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,QAAQ,SAAS,MAAM,EAAE,KAAG,OAGtE,CAAC;AA0HF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,EAAE,QAAQ,SAAS,MAAM,EAAE,KAAG,cAAc,EAOlH,CAAC"}
1
+ {"version":3,"file":"total.d.ts","sourceRoot":"","sources":["../../src/structure/total.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAG9C;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBtH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,IAAI,EAAE,QAAQ,MAAM,KAAG,MAA2E,CAAC;AAqBlJ,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,QAAQ,SAAS,MAAM,EAAE,KAAG,OAGtE,CAAC;AAuGF,8CAA8C;AAC9C,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CACD,CAAC;AAqBlG,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,EAAE,QAAQ,SAAS,MAAM,EAAE,KAAG,cAAc,EAOlH,CAAC"}
@@ -118,6 +118,8 @@ const shownAmounts = (source, total, sumCents) => {
118
118
  return { written, sum: `${sumSign}${source.slice(unitStart, total.offset)}${sum}` };
119
119
  return { written, sum: `${sumSign}${sum}${written.endsWith(total.unit) ? total.unit : ""}` };
120
120
  };
121
+ /** 文の中の合計の金額(符号の無い、単位付きの金額)と和を、合計の書き方で見せる。 */
122
+ export const shownTotal = (source, total, sumCents) => shownAmounts(source, { ...total, column: 0, cents: Math.round(total.value * CENTS) }, sumCents);
121
123
  /**
122
124
  * 数だけの列で、合計の行の数が項目のどれかより大きくなければ、和ではなく平均や率や年の列と読んで足さない。
123
125
  * 項目に負の数があれば、和が項目より小さいこともあるので足す。