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
@@ -0,0 +1,42 @@
1
+ import { quoteAround } from "./quote-around.js";
2
+ /** A word of three letters or more (a possessive 's may follow), a comma, and a lower-case word of three letters or more. */
3
+ const JOINED = /(?<![\p{L}\p{N}])[A-Za-z]{3,}(?:['’]s)?,[a-z]{3,}(?![\p{L}\p{N}])/u;
4
+ /** Characters that make a run of text an address, a path, a parameter or data (a=b, a/b, a.b, @a, #a, a_b, 3,abc). */
5
+ const DATA_MARK = /[/\\=@#:.&?_|+*~$%^<>{}[\]\p{N}]/u;
6
+ /** Opening and closing marks a word of prose may carry ("(and,then)"), and the sentence's own end ("and,then."). */
7
+ const OPENERS = "(\"'“‘[";
8
+ const CLOSERS = ")\"'”’].,;!?";
9
+ /** A run quoted whole, inside brackets or not ("true,false", ("true,false")): a value written out, not two words of the sentence. */
10
+ const QUOTED_WHOLE = /^[([]*["'“‘].*["'”’][)\].,;!?]*$/u;
11
+ /** A run of text between whitespace. */
12
+ const RUN = /\S+/gu;
13
+ const COMMA = ",";
14
+ /** The run without the marks around it, trimmed by scanning rather than by a pattern that could backtrack. */
15
+ const bareOf = (run) => {
16
+ const chars = run.split("");
17
+ const start = chars.findIndex((char) => !OPENERS.includes(char));
18
+ const end = chars.findLastIndex((char) => !CLOSERS.includes(char));
19
+ return start === -1 || end < start ? "" : run.slice(start, end + 1);
20
+ };
21
+ /** A run holding one comma and nothing that marks it as data. */
22
+ const isProseRun = (run) => {
23
+ const bare = bareOf(run);
24
+ return bare.split(COMMA).length === 2 && !DATA_MARK.test(bare) && !QUOTED_WHOLE.test(run);
25
+ };
26
+ /** Each run is read once, so a long line of values costs one pass. */
27
+ export const tightCommasIn = (text) => [...text.matchAll(RUN)].flatMap((run) => {
28
+ const joined = isProseRun(run[0]) ? JOINED.exec(run[0]) : null;
29
+ return joined === null ? [] : [{ offset: run.index + joined.index + joined[0].indexOf(COMMA), written: joined[0] }];
30
+ });
31
+ export const missingSpaceAfterComma = (doc) => {
32
+ const text = doc.prose ?? doc.source;
33
+ return tightCommasIn(text).map((comma) => ({
34
+ rule: "",
35
+ severity: "warning",
36
+ line: 0,
37
+ column: 0,
38
+ quote: quoteAround(text, comma.offset, comma.offset + 1),
39
+ values: { written: comma.written, offset: comma.offset },
40
+ }));
41
+ };
42
+ //# sourceMappingURL=missing-space-after-comma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-space-after-comma.js","sourceRoot":"","sources":["../../src/detectors/missing-space-after-comma.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,6HAA6H;AAC7H,MAAM,MAAM,GAAG,oEAAoE,CAAC;AACpF,sHAAsH;AACtH,MAAM,SAAS,GAAG,mCAAmC,CAAC;AACtD,oHAAoH;AACpH,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,OAAO,GAAG,cAAc,CAAC;AAC/B,qIAAqI;AACrI,MAAM,YAAY,GAAG,mCAAmC,CAAC;AACzD,wCAAwC;AACxC,MAAM,GAAG,GAAG,OAAO,CAAC;AACpB,MAAM,KAAK,GAAG,GAAG,CAAC;AAElB,8GAA8G;AAC9G,MAAM,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,UAAU,GAAG,CAAC,GAAW,EAAW,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAgB,EAAE,CAC1D,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,GAAG,EAAa,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;IACrC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;KACzD,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"orthographic-variant.d.ts","sourceRoot":"","sources":["../../src/detectors/orthographic-variant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2C,MAAM,cAAc,CAAC;AAwItF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAUjC,CAAC"}
1
+ {"version":3,"file":"orthographic-variant.d.ts","sourceRoot":"","sources":["../../src/detectors/orthographic-variant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2C,MAAM,cAAc,CAAC;AAiLtF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAUjC,CAAC"}
@@ -3,6 +3,7 @@ import { kanjiSkeleton, katakanaKey, lemmaReading } from "../kana-spelling.js";
3
3
  import { isKatakanaWord, stemOf } from "../long-vowel.js";
4
4
  import { QUOTATION_MARKS, isWithinAny, quotedSpans } from "../quoted-span.js";
5
5
  import { nameSpans, touchesAny } from "../team-names.js";
6
+ import { furiganaSpans } from "../furigana.js";
6
7
  /** Parts of speech that carry a word of their own. Particles and endings are written one way by the grammar. */
7
8
  const CONTENT = new Set(["NOUN", "VERB", "ADJ", "ADV", "PRON", "CCONJ", "DET"]);
8
9
  const JAPANESE_WORD = /^[\p{Script=Han}々ぁ-ゖァ-ヺー]+$/u;
@@ -14,38 +15,64 @@ const MIN_LATIN_KEY = 3;
14
15
  /** Lexicons: readings and spellings whose kanji and kana forms mean different things (成る and なる, 者 and もの), and adverbs hiragana-fukushi reads. */
15
16
  const DISTINCT = "orthographic-variant-distinct";
16
17
  const FUKUSHI = "hiragana-fukushi";
18
+ /** Lexicon: idioms written as noun, particle and verb (気をつける). The verb there is compared apart from the verb on its own. */
19
+ const IDIOM = "orthographic-variant-idiom";
17
20
  const patternsOf = (doc, id) => (doc.lexicons[id] ?? []).map((entry) => entry.pattern);
18
- /** Whether a stretch of the sentence is outside a quotation and outside the team's names, both of which keep their own spelling. */
21
+ /**
22
+ * Whether a stretch of the sentence is outside a quotation, the team's names and a reading in brackets (HTTP(えいちてぃーてぃーぴー)):
23
+ * the first two keep their own spelling, and a reading is not a spelling at all.
24
+ */
19
25
  const isOpenIn = (sentence, names) => {
20
- const quoted = quotedSpans(sentence.text, QUOTATION_MARKS);
26
+ const closed = [...quotedSpans(sentence.text, QUOTATION_MARKS), ...furiganaSpans(sentence.text)];
21
27
  const named = nameSpans(sentence.text, names);
22
- return (start, end) => !isWithinAny(quoted, { start, end }) && !touchesAny(named, start, end);
28
+ return (start, end) => !isWithinAny(closed, { start, end }) && !touchesAny(named, start, end);
23
29
  };
24
- const isHelper = (token, previous) => token.features?.["Bound"] === "Yes" || (previous?.pos === "SCONJ" && (previous.surface === "て" || previous.surface === "で"));
30
+ /** A verb's て-form the tokenizer read as a conjunction (追って at the head of a sentence): a kanji stem and て or で. Connectives (そして, それで) are kana. */
31
+ const TE_FORM_CONJUNCTION = /^\p{Script=Han}.*[てで]$/u;
32
+ /** After a て-form (見てみる). The tokenizer reads the て as a joining word, or the whole て-form as a conjunction (追って / みる). */
33
+ const followsTeForm = (previous) => (previous?.pos === "SCONJ" && (previous.surface === "て" || previous.surface === "で")) ||
34
+ (previous?.pos === "CCONJ" && TE_FORM_CONJUNCTION.test(previous.surface));
35
+ const isHelper = ({ token, previous }) => token.features?.["Bound"] === "Yes" || followsTeForm(previous);
36
+ const isTouching = (left, right) => left !== undefined && left.span.end === right.span.start;
37
+ const HIRAGANA_ONLY = /^[ぁ-ゖー]+$/u;
38
+ /** A kana noun written onto a noun (全員ぶん): a suffix, which may not be the free noun of the same reading (文). */
39
+ const isKanaSuffix = ({ token, previous }) => token.pos === "NOUN" && previous?.pos === "NOUN" && isTouching(previous, token) && HIRAGANA_ONLY.test(token.surface);
40
+ /** The verb of an idiom (気をつける): the noun, the particle and the verb's dictionary form are in the idiom lexicon. */
41
+ const isIdiomVerb = ({ token, previous, before }, idioms) => token.pos === "VERB" && previous?.pos === "ADP" && before !== undefined && idioms.has(`${before.surface}${previous.surface}${token.lemma ?? token.surface}`);
25
42
  /**
26
43
  * A helper verb or a dependent noun (見て下さい, その事) is written kana by many guides while the full word keeps its kanji (資料を下さい).
27
- * The two uses are compared apart, so a document that follows that convention is consistent. A suffix (業務用) is a third use:
28
- * it is not the dependent noun of the same reading (このように).
44
+ * The two uses are compared apart, so a document that follows that convention is consistent. A suffix (業務用, 全員ぶん) is a third use:
45
+ * it is not the dependent noun of the same reading (このように). The verb of an idiom (気をつける) is a fourth.
29
46
  */
30
- const useOf = (token, previous) => {
31
- if (!isHelper(token, previous))
47
+ const useOf = (word, idioms) => {
48
+ if (isIdiomVerb(word, idioms))
49
+ return "idiom";
50
+ if (isKanaSuffix(word))
51
+ return "suffix";
52
+ if (!isHelper(word))
32
53
  return "free";
33
- return token.pos === "NOUN" && token.features?.["NounType"] !== "Dependent" ? "suffix" : "bound";
54
+ return word.token.pos === "NOUN" && word.token.features?.["NounType"] !== "Dependent" ? "suffix" : "bound";
34
55
  };
35
- const readingKeyOf = (token, previous, skip) => {
56
+ /** One katakana and then kana that is not katakana (スる): no verb stem is one katakana long, as サボる and ググる are two. */
57
+ const ONE_KATAKANA_HEAD = /^\p{Script=Katakana}(?!\p{Script=Katakana})/u;
58
+ const KATAKANA_END = /\p{Script=Katakana}$/u;
59
+ /** A piece the tokenizer cut out of a katakana run (ミスっ read as ミ and スる): not a word of its own. */
60
+ const isCutFromKatakana = ({ token, previous }) => ONE_KATAKANA_HEAD.test(token.surface) && token.surface.length > 1 && isTouching(previous, token) && KATAKANA_END.test(previous?.surface ?? "");
61
+ const readingKeyOf = (word, { skip, idioms }) => {
62
+ const { token } = word;
36
63
  const lemma = token.lemma;
37
64
  if (!CONTENT.has(token.pos) || token.reading === undefined || lemma === undefined || !JAPANESE_WORD.test(lemma) || skip.has(lemma))
38
65
  return undefined;
39
66
  const reading = lemmaReading(token.surface, lemma, token.reading);
40
- if (reading === undefined || [...reading].length < MIN_READING || skip.has(reading))
67
+ if (reading === undefined || [...reading].length < MIN_READING || skip.has(reading) || isCutFromKatakana(word))
41
68
  return undefined;
42
- return `${token.pos}|${useOf(token, previous)}|${reading}`;
69
+ return `${token.pos}|${useOf(word, idioms)}|${reading}`;
43
70
  };
44
71
  /** Japanese words keyed by part of speech, use and the reading of the dictionary form, spelled as the dictionary form. */
45
- const readingWords = (sentence, isOpen, skip) => {
72
+ const readingWords = (sentence, isOpen, skips) => {
46
73
  const tokens = sentence.tokens ?? [];
47
74
  return tokens.flatMap((token, at) => {
48
- const key = readingKeyOf(token, tokens[at - 1], skip);
75
+ const key = readingKeyOf({ token, previous: tokens[at - 1], before: tokens[at - 2] }, skips);
49
76
  const local = token.span.start - sentence.span.start;
50
77
  if (key === undefined || token.lemma === undefined || !isOpen(local, local + token.surface.length))
51
78
  return [];
@@ -117,11 +144,11 @@ const findingOf = (words, odd) => ({
117
144
  * document writes less is pointed at. No way is called right; limit is the largest share, in percent, the minority may have.
118
145
  */
119
146
  export const orthographicVariant = (doc, options) => {
120
- const skip = new Set([...patternsOf(doc, DISTINCT), ...patternsOf(doc, FUKUSHI)]);
147
+ const skips = { skip: new Set([...patternsOf(doc, DISTINCT), ...patternsOf(doc, FUKUSHI)]), idioms: new Set(patternsOf(doc, IDIOM)) };
121
148
  const placed = doc.sentences.map((sentence) => ({ sentence, isOpen: isOpenIn(sentence, doc.names ?? []) }));
122
- const reading = byKanji(placed.flatMap(({ sentence, isOpen }) => readingWords(sentence, isOpen, skip)));
149
+ const reading = byKanji(placed.flatMap(({ sentence, isOpen }) => readingWords(sentence, isOpen, skips)));
123
150
  const katakana = placed.flatMap(({ sentence, isOpen }) => katakanaWords(sentence, isOpen));
124
- const latin = placed.flatMap(({ sentence, isOpen }) => latinWords(sentence, isOpen, skip));
151
+ const latin = placed.flatMap(({ sentence, isOpen }) => latinWords(sentence, isOpen, skips.skip));
125
152
  const odd = [reading, katakana, latin].flatMap((words) => oddSpellings(words, options.limit));
126
153
  const all = [...reading, ...katakana, ...latin];
127
154
  // A word can be odd by its reading and by its katakana key at once; one place is said once.
@@ -1 +1 @@
1
- {"version":3,"file":"orthographic-variant.js","sourceRoot":"","sources":["../../src/detectors/orthographic-variant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orthographic-variant.js","sourceRoot":"","sources":["../../src/detectors/orthographic-variant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../plugin.ts";
2
+ export declare const partyRoleName: Detector;
3
+ //# sourceMappingURL=party-role-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-role-name.d.ts","sourceRoot":"","sources":["../../src/detectors/party-role-name.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAUrE,eAAO,MAAM,aAAa,EAAE,QA2B3B,CAAC"}
@@ -0,0 +1,35 @@
1
+ // A party called by a role word (受託者, the Vendor) after the contract gave it a short name (乙, the "Supplier"). The
2
+ // definitions come from the document's structure tree; the role words, short names and company forms from the language
3
+ // package's word lists (party-role, party-short-name, company-form).
4
+ import { definedTerms } from "../structure/definition-use.js";
5
+ import { partiesOf, roleUses } from "../structure/party-role.js";
6
+ import { quoteAt } from "./structure-tree.js";
7
+ const patternsOf = (doc, lexicon) => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern);
8
+ /** The sentence holding a definition: the role words in the sentences that name the parties are part of naming them. */
9
+ const sentenceAt = (doc, offset) => doc.sentences.find((sentence) => sentence.span.start <= offset && offset < sentence.span.end)?.span ?? { start: offset, end: offset };
10
+ const NAME_SEPARATOR = { ja: "、" };
11
+ export const partyRoleName = (doc) => {
12
+ if (doc.structure === undefined)
13
+ return [];
14
+ const terms = definedTerms(doc.structure);
15
+ const words = { roles: patternsOf(doc, "party-role"), shortNames: patternsOf(doc, "party-short-name"), companyForms: patternsOf(doc, "company-form") };
16
+ const parties = partiesOf(doc.source, terms, words);
17
+ if (parties.length === 0)
18
+ return [];
19
+ // From the sentence that names the first party: a party named later (a subcontractor ("Recipient")) does not hide the role words before it.
20
+ const naming = parties.map((party) => sentenceAt(doc, party.end - 1));
21
+ const after = Math.min(...naming.map((sentence) => sentence.end));
22
+ const names = [...new Set(parties.map((party) => party.term))].join(NAME_SEPARATOR[doc.language] ?? ", ");
23
+ const texts = doc.sentences.map((sentence) => ({ start: sentence.span.start, text: sentence.text }));
24
+ return roleUses(doc.source, texts, words.roles, terms.map((term) => term.term), after)
25
+ .filter((use) => !naming.some((sentence) => sentence.start <= use.offset && use.offset < sentence.end))
26
+ .map((use) => ({
27
+ rule: "party-role-name",
28
+ severity: "info",
29
+ line: 0,
30
+ column: 0,
31
+ quote: quoteAt(doc.source, use.offset),
32
+ values: { role: use.role, names, offset: use.offset },
33
+ }));
34
+ };
35
+ //# sourceMappingURL=party-role-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-role-name.js","sourceRoot":"","sources":["../../src/detectors/party-role-name.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Detector, LexiconEntry } from "../plugin.ts";
2
+ export type QuoteText = {
3
+ readonly start: number;
4
+ readonly text: string;
5
+ };
6
+ export type QuoteParagraph = {
7
+ readonly source: string;
8
+ readonly sentences: readonly QuoteText[];
9
+ };
10
+ export type UnsourcedQuote = {
11
+ readonly offset: number;
12
+ readonly quote: string;
13
+ };
14
+ /** Each quotation given to someone, in a paragraph that names no source. cues: the word list quote-attribution. */
15
+ export declare const unsourcedQuotes: (paragraphs: readonly QuoteParagraph[], cues: readonly LexiconEntry[]) => UnsourcedQuote[];
16
+ export declare const quoteWithoutSource: Detector;
17
+ //# sourceMappingURL=quote-without-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-without-source.d.ts","sourceRoot":"","sources":["../../src/detectors/quote-without-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAW,YAAY,EAAiB,MAAM,cAAc,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAEnG,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AA4DjF,mHAAmH;AACnH,eAAO,MAAM,eAAe,GAAI,YAAY,SAAS,cAAc,EAAE,EAAE,MAAM,SAAS,YAAY,EAAE,KAAG,cAAc,EACyC,CAAC;AAE/J,eAAO,MAAM,kBAAkB,EAAE,QAc5B,CAAC"}
@@ -0,0 +1,64 @@
1
+ // A quotation the text gives to someone (「…」と述べている, according to X, "…") in a paragraph that names no source for it:
2
+ // no link, no footnote or numbered citation, no year in brackets. Whether the words are really that person's is for
3
+ // `chaff cite` against the source; this only says that there is nothing to check them against. The words that give a
4
+ // quotation to someone come from the language package's word list quote-attribution. Pure.
5
+ import { QUOTATION_MARKS, quotedSpans } from "../quoted-span.js";
6
+ /** Shorter than this, a quotation is a term or a label (「保存」, "Save"), not someone's words. */
7
+ const MIN_QUOTE_CHARS = 10;
8
+ /**
9
+ * A link, a bare URL, a footnote mark, a numbered citation ([3]) or a year that ends a bracket as a citation's does: alone
10
+ * ((1975), (1999年)), after a comma ((架空の本、1975年)) or after a name ((Brooks 1975)). Not (port 2000).
11
+ */
12
+ const SOURCE_MARKS = [
13
+ /\]\(/u,
14
+ /https?:\/\//u,
15
+ /\[\^[^\]\s]+\]/u,
16
+ /\[\d{1,3}(?:[,,、–-]\s*\d{1,3})*\]/u,
17
+ /[((](?:1[5-9]|20)\d\d[a-z]?年?[))]/u,
18
+ /[((][^()()\n]*[,、,]\s*(?:1[5-9]|20)\d\d[a-z]?年?[))]/u,
19
+ /[((]\p{Lu}[^()()\n]*\s(?:1[5-9]|20)\d\d[a-z]?[))]/u,
20
+ ];
21
+ /** How far before a quotation a cue may end ("According to the study, “…”", 先輩によれば「…」). */
22
+ const CUE_REACH_BEFORE = 40;
23
+ /** How far after a quotation a cue may start: a space ("“…,” said"), or none (「…」と述べた, not 「…」などと書く). */
24
+ const CUE_REACH_AFTER = 1;
25
+ const LATIN = /\p{Script=Latin}/u;
26
+ const LETTER = /\p{L}/u;
27
+ const namesSource = (paragraph) => SOURCE_MARKS.some((mark) => mark.test(paragraph));
28
+ const escaped = (word) => word.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
29
+ /**
30
+ * Where the cue stands in the sentence, ignoring case, in the sentence's own positions (lowercasing first would move them:
31
+ * İ becomes two units). An English cue is not read inside a longer word (says in essays).
32
+ */
33
+ const cueStarts = (text, cue) => {
34
+ if (cue === "")
35
+ return [];
36
+ return [...text.matchAll(new RegExp(escaped(cue), "giu"))]
37
+ .map((match) => match.index)
38
+ .filter((at) => !LATIN.test(cue) || (!LETTER.test(text.charAt(at - 1)) && !LETTER.test(text.charAt(at + cue.length))));
39
+ };
40
+ /** A cue just before the quotation's opening mark, or just after its closing mark. position says which side it may stand on. */
41
+ const isAttributed = (text, quoted, cues) => cues.some((cue) => cueStarts(text, cue.pattern).some((at) => {
42
+ const before = cue.position !== "after" && at + cue.pattern.length <= quoted.start - 1 && at + cue.pattern.length >= quoted.start - 1 - CUE_REACH_BEFORE;
43
+ const after = cue.position !== "before" && at >= quoted.end + 1 && at <= quoted.end + 1 + CUE_REACH_AFTER;
44
+ return before || after;
45
+ }));
46
+ const quotesIn = (sentence, cues) => {
47
+ return quotedSpans(sentence.text, QUOTATION_MARKS)
48
+ .filter((span) => [...sentence.text.slice(span.start, span.end).trim()].length >= MIN_QUOTE_CHARS && isAttributed(sentence.text, span, cues))
49
+ .map((span) => ({ offset: sentence.start + span.start, quote: sentence.text.slice(span.start, span.end).trim() }));
50
+ };
51
+ /** Each quotation given to someone, in a paragraph that names no source. cues: the word list quote-attribution. */
52
+ export const unsourcedQuotes = (paragraphs, cues) => paragraphs.filter((paragraph) => !namesSource(paragraph.source)).flatMap((paragraph) => paragraph.sentences.flatMap((sentence) => quotesIn(sentence, cues)));
53
+ export const quoteWithoutSource = (doc) => unsourcedQuotes(doc.paragraphs.map((paragraph) => ({
54
+ source: doc.source.slice(paragraph.span.start, paragraph.span.end),
55
+ sentences: paragraph.sentences.map((sentence) => ({ start: sentence.span.start, text: sentence.text })),
56
+ })), doc.lexicons["quote-attribution"] ?? []).map((hit) => ({
57
+ rule: "quote-without-source",
58
+ severity: "info",
59
+ line: 0,
60
+ column: 0,
61
+ quote: hit.quote,
62
+ values: { quote: hit.quote, offset: hit.offset },
63
+ }));
64
+ //# sourceMappingURL=quote-without-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-without-source.js","sourceRoot":"","sources":["../../src/detectors/quote-without-source.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ const inputOf = (doc) => {
10
10
  return {
11
11
  source: doc.source,
12
12
  references: inDocumentOrder(tree).filter((node) => node.kind === "reference" && node.attrs["document"] === undefined),
13
- targetOf: referenceResolver(tree),
13
+ targetOf: referenceResolver(tree, doc.source),
14
14
  words: {
15
15
  asides: patternsOf(doc, "reference-aside"),
16
16
  topicLinks: patternsOf(doc, "reference-topic-link"),
@@ -1 +1 @@
1
- {"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExH,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAC,GAAkB,EAA8B,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACrH,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACjC,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1C,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;SACtD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,QAAqD,EAAY,EAAE,CAClF,CAAC,GAAG,EAAa,EAAE;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SAClD,CAAC,CAAC,CAAC;AACV,CAAC,CAAC;AAEJ,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAa,UAAU,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;AAExG,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAa,UAAU,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExH,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAC,GAAkB,EAA8B,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACrH,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QAC7C,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1C,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;SACtD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,QAAqD,EAAY,EAAE,CAClF,CAAC,GAAG,EAAa,EAAE;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SAClD,CAAC,CAAC,CAAC;AACV,CAAC,CAAC;AAEJ,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAa,UAAU,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;AAExG,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAa,UAAU,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ export declare const detector: Detector;
3
+ //# sourceMappingURL=connective-hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connective-hierarchy.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/connective-hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAA8B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { connectiveHierarchy } from "../connective-hierarchy.js";
2
+ export const detector = connectiveHierarchy;
3
+ //# sourceMappingURL=connective-hierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connective-hierarchy.js","sourceRoot":"","sources":["../../../src/detectors/registry/connective-hierarchy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,MAAM,QAAQ,GAAa,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ export declare const detector: Detector;
3
+ //# sourceMappingURL=missing-final-period.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-final-period.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/missing-final-period.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { missingFinalPeriod } from "../missing-final-period.js";
2
+ export const detector = missingFinalPeriod;
3
+ //# sourceMappingURL=missing-final-period.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-final-period.js","sourceRoot":"","sources":["../../../src/detectors/registry/missing-final-period.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,CAAC,MAAM,QAAQ,GAAa,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ export declare const detector: Detector;
3
+ //# sourceMappingURL=missing-space-after-comma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-space-after-comma.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/missing-space-after-comma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { missingSpaceAfterComma } from "../missing-space-after-comma.js";
2
+ export const detector = missingSpaceAfterComma;
3
+ //# sourceMappingURL=missing-space-after-comma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-space-after-comma.js","sourceRoot":"","sources":["../../../src/detectors/registry/missing-space-after-comma.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,MAAM,CAAC,MAAM,QAAQ,GAAa,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ export declare const detector: Detector;
3
+ //# sourceMappingURL=party-role-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-role-name.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/party-role-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { partyRoleName } from "../party-role-name.js";
2
+ export const detector = partyRoleName;
3
+ //# sourceMappingURL=party-role-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-role-name.js","sourceRoot":"","sources":["../../../src/detectors/registry/party-role-name.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAa,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ export declare const detector: Detector;
3
+ //# sourceMappingURL=quote-without-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-without-source.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/quote-without-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { quoteWithoutSource } from "../quote-without-source.js";
2
+ export const detector = quoteWithoutSource;
3
+ //# sourceMappingURL=quote-without-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-without-source.js","sourceRoot":"","sources":["../../../src/detectors/registry/quote-without-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,CAAC,MAAM,QAAQ,GAAa,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ export declare const detector: Detector;
3
+ //# sourceMappingURL=vague-deadline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vague-deadline.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/vague-deadline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { vagueDeadline } from "../vague-deadline.js";
2
+ export const detector = vagueDeadline;
3
+ //# sourceMappingURL=vague-deadline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vague-deadline.js","sourceRoot":"","sources":["../../../src/detectors/registry/vague-deadline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,QAAQ,GAAa,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Span } from "../plugin.ts";
2
+ /**
3
+ * 行の頭の太字だけでできた文で、同じ行に続きがあるもの(「- **速く書ける。** 細かな文法を覚えなくても書けます。」の「速く書ける。」)。
4
+ * 項目や段落の札で、見出しと同じく本文の文ではない。太字だけの行(「**注意してください。**」)は札ではなく文。
5
+ */
6
+ export declare const isRunInLabel: (source: string, span: Span) => boolean;
7
+ //# sourceMappingURL=run-in-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-in-label.d.ts","sourceRoot":"","sources":["../../src/detectors/run-in-label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAiDzC;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,MAAM,IAAI,KAAG,OAMzD,CAAC"}
@@ -0,0 +1,53 @@
1
+ /** 行の頭の引用の印と字下げ、箇条の印、チェックボックス。この後ろで太字が開く。 */
2
+ const QUOTE_INDENT = /^(?:[ \t]*>)*[ \t]*/u;
3
+ const ITEM_MARKER = /^(?:[-*+]|\d{1,9}[.)])[ \t]+/u;
4
+ const TASK_BOX = /^\[[ xX]\][ \t]+/u;
5
+ const BOLD = /^(?:\*\*|__)$/u;
6
+ /** 行の頭から文の始まりまで(before)が、印の後ろで開いた太字だけか。 */
7
+ const openingOf = (before) => {
8
+ const unquoted = before.replace(QUOTE_INDENT, "");
9
+ const rest = unquoted.replace(ITEM_MARKER, "").replace(TASK_BOX, "");
10
+ return BOLD.test(rest) ? { marker: rest, item: rest.length < unquoted.length } : undefined;
11
+ };
12
+ /** 段落の切れ目になる前の行: 空の行(引用の中の空の行も)と見出し。 */
13
+ const BLOCK_BEFORE = /^(?:[ \t]*>)*[ \t]*(?:#.*)?$/u;
14
+ /** 文の終わりの句読点。札の句点を太字の外に書く形(**速く書ける**。)もある。 */
15
+ const STOP = /[。..!?!?]$/u;
16
+ const lineAround = (source, offset) => {
17
+ const end = source.indexOf("\n", offset);
18
+ return { start: source.lastIndexOf("\n", offset - 1) + 1, end: end === -1 ? source.length : end };
19
+ };
20
+ /** 太字が閉じる位置。文の直後か、文末の句読点の直前。 */
21
+ const closingOf = (source, span, marker) => {
22
+ if (source.startsWith(marker, span.end))
23
+ return span.end;
24
+ const stop = STOP.exec(source.slice(span.start, span.end))?.[0];
25
+ const before = stop === undefined ? -1 : span.end - stop.length - marker.length;
26
+ return before > span.start && source.startsWith(marker, before) ? before : undefined;
27
+ };
28
+ /** 文全体を一つの太字が包むなら、太字と文の後ろの位置。途中で閉じる太字(**a** と **b。**)は包んでいない。 */
29
+ const closedAt = (source, span, marker) => {
30
+ const closing = closingOf(source, span, marker);
31
+ if (closing === undefined || source.slice(span.start, closing).includes(marker))
32
+ return undefined;
33
+ return Math.max(closing + marker.length, span.end);
34
+ };
35
+ /** 行の頭が段落の頭か。箇条の印のある行は項目の頭。折り返した段落の続きの行(前の行に文がある)は頭ではない。 */
36
+ const opensBlock = (source, lineStart, item) => {
37
+ if (item || lineStart === 0)
38
+ return true;
39
+ return BLOCK_BEFORE.test(source.slice(source.lastIndexOf("\n", lineStart - 2) + 1, lineStart - 1));
40
+ };
41
+ /**
42
+ * 行の頭の太字だけでできた文で、同じ行に続きがあるもの(「- **速く書ける。** 細かな文法を覚えなくても書けます。」の「速く書ける。」)。
43
+ * 項目や段落の札で、見出しと同じく本文の文ではない。太字だけの行(「**注意してください。**」)は札ではなく文。
44
+ */
45
+ export const isRunInLabel = (source, span) => {
46
+ const line = lineAround(source, span.start);
47
+ const opening = openingOf(source.slice(line.start, span.start));
48
+ if (opening === undefined || !opensBlock(source, line.start, opening.item))
49
+ return false;
50
+ const after = closedAt(source, span, opening.marker);
51
+ return after !== undefined && after <= line.end && /\S/u.test(source.slice(after, line.end));
52
+ };
53
+ //# sourceMappingURL=run-in-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-in-label.js","sourceRoot":"","sources":["../../src/detectors/run-in-label.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,10 @@ type Opened = {
11
11
  readonly sentence: Sentence;
12
12
  readonly opener: string | undefined;
13
13
  };
14
+ /** The phrases that open a sentence with a lexicon word but do not point back (this-document references). */
15
+ export declare const NOT_OPENER_LEXICON = "demonstrative-not-opener";
14
16
  /** Runs of consecutive sentences in one paragraph that each open with a lexicon word. */
15
- export declare const openerRuns: (sentences: readonly Sentence[], lexicon: Lexicon) => Opened[][];
17
+ export declare const openerRuns: (sentences: readonly Sentence[], lexicon: Lexicon, notOpeners?: Lexicon) => Opened[][];
16
18
  /** More than limit sentences in a row within one paragraph, each opening with a word from the lexicon (これ, その). */
17
19
  export declare const openerRun: Detector;
18
20
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-counts.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-counts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA4B,OAAO,EAAiB,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AA6BhH,sGAAsG;AACtG,eAAO,MAAM,iBAAiB,EAAE,QAG/B,CAAC;AAsBF,gIAAgI;AAChI,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,EAAE,QAAQ,SAAS,KAAK,EAAE,KAAG,OACyB,CAAC;AAEhG,mHAAmH;AACnH,eAAO,MAAM,kBAAkB,EAAE,QAGhC,CAAC;AAIF,yIAAyI;AACzI,eAAO,MAAM,wBAAwB,EAAE,QAGtC,CAAC;AAEF,KAAK,MAAM,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAInF,yFAAyF;AACzF,eAAO,MAAM,UAAU,GAAI,WAAW,SAAS,QAAQ,EAAE,EAAE,SAAS,OAAO,KAAG,MAAM,EAAE,EAWlD,CAAC;AAcrC,mHAAmH;AACnH,eAAO,MAAM,SAAS,EAAE,QAOvB,CAAC"}
1
+ {"version":3,"file":"sentence-counts.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-counts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA4B,OAAO,EAAiB,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AA6BhH,sGAAsG;AACtG,eAAO,MAAM,iBAAiB,EAAE,QAG/B,CAAC;AAsBF,gIAAgI;AAChI,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,EAAE,QAAQ,SAAS,KAAK,EAAE,KAAG,OACyB,CAAC;AAEhG,mHAAmH;AACnH,eAAO,MAAM,kBAAkB,EAAE,QAGhC,CAAC;AAIF,yIAAyI;AACzI,eAAO,MAAM,wBAAwB,EAAE,QAGtC,CAAC;AAEF,KAAK,MAAM,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AASnF,6GAA6G;AAC7G,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAE7D,yFAAyF;AACzF,eAAO,MAAM,UAAU,GAAI,WAAW,SAAS,QAAQ,EAAE,EAAE,SAAS,OAAO,EAAE,aAAY,OAAY,KAAG,MAAM,EAAE,EAW5E,CAAC;AAcrC,mHAAmH;AACnH,eAAO,MAAM,SAAS,EAAE,QAQvB,CAAC"}