chaffjs 0.34.0 → 0.35.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 (390) hide show
  1. package/dist/capitals-passage.d.ts +3 -0
  2. package/dist/capitals-passage.d.ts.map +1 -0
  3. package/dist/capitals-passage.js +26 -0
  4. package/dist/capitals-passage.js.map +1 -0
  5. package/dist/coined-hyphen-name.d.ts +13 -0
  6. package/dist/coined-hyphen-name.d.ts.map +1 -0
  7. package/dist/coined-hyphen-name.js +21 -0
  8. package/dist/coined-hyphen-name.js.map +1 -0
  9. package/dist/company-names.d.ts +6 -1
  10. package/dist/company-names.d.ts.map +1 -1
  11. package/dist/company-names.js +22 -3
  12. package/dist/company-names.js.map +1 -1
  13. package/dist/detectors/acronym-context.d.ts +1 -1
  14. package/dist/detectors/acronym-context.d.ts.map +1 -1
  15. package/dist/detectors/acronym-context.js +4 -4
  16. package/dist/detectors/acronym-context.js.map +1 -1
  17. package/dist/detectors/acronym-definition.d.ts +13 -0
  18. package/dist/detectors/acronym-definition.d.ts.map +1 -0
  19. package/dist/detectors/acronym-definition.js +90 -0
  20. package/dist/detectors/acronym-definition.js.map +1 -0
  21. package/dist/detectors/acronym-lone.d.ts +13 -0
  22. package/dist/detectors/acronym-lone.d.ts.map +1 -0
  23. package/dist/detectors/acronym-lone.js +22 -0
  24. package/dist/detectors/acronym-lone.js.map +1 -0
  25. package/dist/detectors/acronym-name.d.ts +55 -0
  26. package/dist/detectors/acronym-name.d.ts.map +1 -0
  27. package/dist/detectors/acronym-name.js +75 -0
  28. package/dist/detectors/acronym-name.js.map +1 -0
  29. package/dist/detectors/capitalised-term.d.ts +14 -2
  30. package/dist/detectors/capitalised-term.d.ts.map +1 -1
  31. package/dist/detectors/capitalised-term.js +115 -4
  32. package/dist/detectors/capitalised-term.js.map +1 -1
  33. package/dist/detectors/caps-caption.d.ts +11 -0
  34. package/dist/detectors/caps-caption.d.ts.map +1 -0
  35. package/dist/detectors/caps-caption.js +51 -0
  36. package/dist/detectors/caps-caption.js.map +1 -0
  37. package/dist/detectors/char-shape.d.ts.map +1 -1
  38. package/dist/detectors/char-shape.js +47 -18
  39. package/dist/detectors/char-shape.js.map +1 -1
  40. package/dist/detectors/clause-shape.d.ts +1 -1
  41. package/dist/detectors/clause-shape.d.ts.map +1 -1
  42. package/dist/detectors/clause-shape.js +9 -4
  43. package/dist/detectors/clause-shape.js.map +1 -1
  44. package/dist/detectors/concrete-evidence.d.ts +13 -1
  45. package/dist/detectors/concrete-evidence.d.ts.map +1 -1
  46. package/dist/detectors/concrete-evidence.js +59 -0
  47. package/dist/detectors/concrete-evidence.js.map +1 -1
  48. package/dist/detectors/contraction-minority.d.ts +11 -0
  49. package/dist/detectors/contraction-minority.d.ts.map +1 -0
  50. package/dist/detectors/contraction-minority.js +10 -0
  51. package/dist/detectors/contraction-minority.js.map +1 -0
  52. package/dist/detectors/counter-edge.d.ts +5 -0
  53. package/dist/detectors/counter-edge.d.ts.map +1 -1
  54. package/dist/detectors/counter-edge.js +23 -0
  55. package/dist/detectors/counter-edge.js.map +1 -1
  56. package/dist/detectors/date-any-year.d.ts +6 -3
  57. package/dist/detectors/date-any-year.d.ts.map +1 -1
  58. package/dist/detectors/date-any-year.js +47 -10
  59. package/dist/detectors/date-any-year.js.map +1 -1
  60. package/dist/detectors/date-heading-year.d.ts +18 -0
  61. package/dist/detectors/date-heading-year.d.ts.map +1 -0
  62. package/dist/detectors/date-heading-year.js +38 -0
  63. package/dist/detectors/date-heading-year.js.map +1 -0
  64. package/dist/detectors/date-year.d.ts +12 -2
  65. package/dist/detectors/date-year.d.ts.map +1 -1
  66. package/dist/detectors/date-year.js +31 -6
  67. package/dist/detectors/date-year.js.map +1 -1
  68. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  69. package/dist/detectors/defined-term-form.js +26 -5
  70. package/dist/detectors/defined-term-form.js.map +1 -1
  71. package/dist/detectors/due-date.d.ts.map +1 -1
  72. package/dist/detectors/due-date.js +6 -0
  73. package/dist/detectors/due-date.js.map +1 -1
  74. package/dist/detectors/en-shape.d.ts.map +1 -1
  75. package/dist/detectors/en-shape.js +5 -1
  76. package/dist/detectors/en-shape.js.map +1 -1
  77. package/dist/detectors/fact-consistency.d.ts.map +1 -1
  78. package/dist/detectors/fact-consistency.js +3 -2
  79. package/dist/detectors/fact-consistency.js.map +1 -1
  80. package/dist/detectors/gram-passages.d.ts +11 -0
  81. package/dist/detectors/gram-passages.d.ts.map +1 -0
  82. package/dist/detectors/gram-passages.js +26 -0
  83. package/dist/detectors/gram-passages.js.map +1 -0
  84. package/dist/detectors/heading-end-mark.d.ts +8 -3
  85. package/dist/detectors/heading-end-mark.d.ts.map +1 -1
  86. package/dist/detectors/heading-end-mark.js +18 -8
  87. package/dist/detectors/heading-end-mark.js.map +1 -1
  88. package/dist/detectors/heading-names.d.ts +7 -0
  89. package/dist/detectors/heading-names.d.ts.map +1 -0
  90. package/dist/detectors/heading-names.js +24 -0
  91. package/dist/detectors/heading-names.js.map +1 -0
  92. package/dist/detectors/heading-numbering.d.ts.map +1 -1
  93. package/dist/detectors/heading-numbering.js +7 -2
  94. package/dist/detectors/heading-numbering.js.map +1 -1
  95. package/dist/detectors/inch-mark.d.ts +10 -0
  96. package/dist/detectors/inch-mark.d.ts.map +1 -0
  97. package/dist/detectors/inch-mark.js +48 -0
  98. package/dist/detectors/inch-mark.js.map +1 -0
  99. package/dist/detectors/lexicon.d.ts +0 -1
  100. package/dist/detectors/lexicon.d.ts.map +1 -1
  101. package/dist/detectors/lexicon.js +29 -23
  102. package/dist/detectors/lexicon.js.map +1 -1
  103. package/dist/detectors/mark-shape.d.ts +6 -3
  104. package/dist/detectors/mark-shape.d.ts.map +1 -1
  105. package/dist/detectors/mark-shape.js +12 -6
  106. package/dist/detectors/mark-shape.js.map +1 -1
  107. package/dist/detectors/name-variant-apart.d.ts +27 -0
  108. package/dist/detectors/name-variant-apart.d.ts.map +1 -0
  109. package/dist/detectors/name-variant-apart.js +51 -0
  110. package/dist/detectors/name-variant-apart.js.map +1 -0
  111. package/dist/detectors/name-variant.d.ts.map +1 -1
  112. package/dist/detectors/name-variant.js +18 -11
  113. package/dist/detectors/name-variant.js.map +1 -1
  114. package/dist/detectors/numeral-word.d.ts +15 -0
  115. package/dist/detectors/numeral-word.d.ts.map +1 -0
  116. package/dist/detectors/numeral-word.js +26 -0
  117. package/dist/detectors/numeral-word.js.map +1 -0
  118. package/dist/detectors/organisation-run.d.ts +14 -0
  119. package/dist/detectors/organisation-run.d.ts.map +1 -0
  120. package/dist/detectors/organisation-run.js +73 -0
  121. package/dist/detectors/organisation-run.js.map +1 -0
  122. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  123. package/dist/detectors/orthographic-variant.js +13 -5
  124. package/dist/detectors/orthographic-variant.js.map +1 -1
  125. package/dist/detectors/outline-label.d.ts +14 -0
  126. package/dist/detectors/outline-label.d.ts.map +1 -0
  127. package/dist/detectors/outline-label.js +32 -0
  128. package/dist/detectors/outline-label.js.map +1 -0
  129. package/dist/detectors/page-marker.d.ts +6 -0
  130. package/dist/detectors/page-marker.d.ts.map +1 -0
  131. package/dist/detectors/page-marker.js +19 -0
  132. package/dist/detectors/page-marker.js.map +1 -0
  133. package/dist/detectors/parallel-definition.d.ts +16 -0
  134. package/dist/detectors/parallel-definition.d.ts.map +1 -0
  135. package/dist/detectors/parallel-definition.js +51 -0
  136. package/dist/detectors/parallel-definition.js.map +1 -0
  137. package/dist/detectors/reference-text.d.ts.map +1 -1
  138. package/dist/detectors/reference-text.js +1 -0
  139. package/dist/detectors/reference-text.js.map +1 -1
  140. package/dist/detectors/registry/unfilled-placeholder.d.ts.map +1 -1
  141. package/dist/detectors/registry/unfilled-placeholder.js +2 -2
  142. package/dist/detectors/registry/unfilled-placeholder.js.map +1 -1
  143. package/dist/detectors/registry/vague-density.js +1 -1
  144. package/dist/detectors/registry/vague-density.js.map +1 -1
  145. package/dist/detectors/request-owner.d.ts +6 -2
  146. package/dist/detectors/request-owner.d.ts.map +1 -1
  147. package/dist/detectors/request-owner.js +57 -7
  148. package/dist/detectors/request-owner.js.map +1 -1
  149. package/dist/detectors/requirement-smell.d.ts.map +1 -1
  150. package/dist/detectors/requirement-smell.js +10 -2
  151. package/dist/detectors/requirement-smell.js.map +1 -1
  152. package/dist/detectors/sentence-length.d.ts.map +1 -1
  153. package/dist/detectors/sentence-length.js +24 -16
  154. package/dist/detectors/sentence-length.js.map +1 -1
  155. package/dist/detectors/sentence-rhythm.d.ts.map +1 -1
  156. package/dist/detectors/sentence-rhythm.js +6 -3
  157. package/dist/detectors/sentence-rhythm.js.map +1 -1
  158. package/dist/detectors/series-label.d.ts +2 -1
  159. package/dist/detectors/series-label.d.ts.map +1 -1
  160. package/dist/detectors/series-label.js +10 -4
  161. package/dist/detectors/series-label.js.map +1 -1
  162. package/dist/detectors/signals.d.ts +4 -0
  163. package/dist/detectors/signals.d.ts.map +1 -1
  164. package/dist/detectors/signals.js +95 -36
  165. package/dist/detectors/signals.js.map +1 -1
  166. package/dist/detectors/structure-tree.d.ts.map +1 -1
  167. package/dist/detectors/structure-tree.js +8 -7
  168. package/dist/detectors/structure-tree.js.map +1 -1
  169. package/dist/detectors/template-sections.d.ts +14 -0
  170. package/dist/detectors/template-sections.d.ts.map +1 -0
  171. package/dist/detectors/template-sections.js +25 -0
  172. package/dist/detectors/template-sections.js.map +1 -0
  173. package/dist/detectors/titled-run.d.ts +22 -0
  174. package/dist/detectors/titled-run.d.ts.map +1 -0
  175. package/dist/detectors/titled-run.js +34 -0
  176. package/dist/detectors/titled-run.js.map +1 -0
  177. package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
  178. package/dist/detectors/unbalanced-bracket.js +4 -0
  179. package/dist/detectors/unbalanced-bracket.js.map +1 -1
  180. package/dist/detectors/undefined-term.d.ts.map +1 -1
  181. package/dist/detectors/undefined-term.js +8 -0
  182. package/dist/detectors/undefined-term.js.map +1 -1
  183. package/dist/detectors/unfilled-placeholder.d.ts +4 -0
  184. package/dist/detectors/unfilled-placeholder.d.ts.map +1 -0
  185. package/dist/detectors/unfilled-placeholder.js +9 -0
  186. package/dist/detectors/unfilled-placeholder.js.map +1 -0
  187. package/dist/detectors/vague-density.d.ts +5 -0
  188. package/dist/detectors/vague-density.d.ts.map +1 -0
  189. package/dist/detectors/vague-density.js +52 -0
  190. package/dist/detectors/vague-density.js.map +1 -0
  191. package/dist/facts/fact-scope.d.ts +10 -1
  192. package/dist/facts/fact-scope.d.ts.map +1 -1
  193. package/dist/facts/fact-scope.js +34 -3
  194. package/dist/facts/fact-scope.js.map +1 -1
  195. package/dist/facts/table-facts.d.ts +12 -2
  196. package/dist/facts/table-facts.d.ts.map +1 -1
  197. package/dist/facts/table-facts.js +22 -4
  198. package/dist/facts/table-facts.js.map +1 -1
  199. package/dist/grade-api.d.ts +9 -2
  200. package/dist/grade-api.d.ts.map +1 -1
  201. package/dist/grade-api.js +31 -15
  202. package/dist/grade-api.js.map +1 -1
  203. package/dist/heading-numbering.d.ts +5 -2
  204. package/dist/heading-numbering.d.ts.map +1 -1
  205. package/dist/heading-numbering.js +27 -6
  206. package/dist/heading-numbering.js.map +1 -1
  207. package/dist/name-end-letter.d.ts +5 -0
  208. package/dist/name-end-letter.d.ts.map +1 -1
  209. package/dist/name-end-letter.js +8 -0
  210. package/dist/name-end-letter.js.map +1 -1
  211. package/dist/name-given-before.d.ts +15 -0
  212. package/dist/name-given-before.d.ts.map +1 -0
  213. package/dist/name-given-before.js +30 -0
  214. package/dist/name-given-before.js.map +1 -0
  215. package/dist/name-separator.d.ts +2 -2
  216. package/dist/name-separator.d.ts.map +1 -1
  217. package/dist/name-separator.js +56 -5
  218. package/dist/name-separator.js.map +1 -1
  219. package/dist/name-variants.d.ts +3 -1
  220. package/dist/name-variants.d.ts.map +1 -1
  221. package/dist/name-variants.js +8 -7
  222. package/dist/name-variants.js.map +1 -1
  223. package/dist/name-word-order.d.ts +9 -5
  224. package/dist/name-word-order.d.ts.map +1 -1
  225. package/dist/name-word-order.js +47 -15
  226. package/dist/name-word-order.js.map +1 -1
  227. package/dist/nominal-stem.d.ts +13 -0
  228. package/dist/nominal-stem.d.ts.map +1 -0
  229. package/dist/nominal-stem.js +32 -0
  230. package/dist/nominal-stem.js.map +1 -0
  231. package/dist/sentence-load.d.ts +2 -1
  232. package/dist/sentence-load.d.ts.map +1 -1
  233. package/dist/sentence-load.js +6 -2
  234. package/dist/sentence-load.js.map +1 -1
  235. package/dist/structure/cited-document-section.d.ts +7 -0
  236. package/dist/structure/cited-document-section.d.ts.map +1 -0
  237. package/dist/structure/cited-document-section.js +33 -0
  238. package/dist/structure/cited-document-section.js.map +1 -0
  239. package/dist/structure/html-text-blocks.d.ts +8 -0
  240. package/dist/structure/html-text-blocks.d.ts.map +1 -0
  241. package/dist/structure/html-text-blocks.js +47 -0
  242. package/dist/structure/html-text-blocks.js.map +1 -0
  243. package/dist/structure/issues.d.ts +1 -1
  244. package/dist/structure/issues.d.ts.map +1 -1
  245. package/dist/structure/issues.js +19 -4
  246. package/dist/structure/issues.js.map +1 -1
  247. package/dist/structure/labelled-date-order.d.ts +4 -1
  248. package/dist/structure/labelled-date-order.d.ts.map +1 -1
  249. package/dist/structure/labelled-date-order.js +2 -2
  250. package/dist/structure/labelled-date-order.js.map +1 -1
  251. package/dist/structure/labelled-order.d.ts +3 -0
  252. package/dist/structure/labelled-order.d.ts.map +1 -1
  253. package/dist/structure/labelled-order.js +8 -3
  254. package/dist/structure/labelled-order.js.map +1 -1
  255. package/dist/structure/list-numbering.d.ts +20 -4
  256. package/dist/structure/list-numbering.d.ts.map +1 -1
  257. package/dist/structure/list-numbering.js +65 -9
  258. package/dist/structure/list-numbering.js.map +1 -1
  259. package/dist/structure/listed-paragraph.d.ts +16 -0
  260. package/dist/structure/listed-paragraph.d.ts.map +1 -0
  261. package/dist/structure/listed-paragraph.js +37 -0
  262. package/dist/structure/listed-paragraph.js.map +1 -0
  263. package/dist/structure/numbering.d.ts +3 -2
  264. package/dist/structure/numbering.d.ts.map +1 -1
  265. package/dist/structure/numbering.js +31 -6
  266. package/dist/structure/numbering.js.map +1 -1
  267. package/dist/structure/reference-text.d.ts +9 -1
  268. package/dist/structure/reference-text.d.ts.map +1 -1
  269. package/dist/structure/reference-text.js +21 -3
  270. package/dist/structure/reference-text.js.map +1 -1
  271. package/dist/structure/section-names.d.ts +12 -0
  272. package/dist/structure/section-names.d.ts.map +1 -0
  273. package/dist/structure/section-names.js +26 -0
  274. package/dist/structure/section-names.js.map +1 -0
  275. package/dist/structure/versioned-label.d.ts +16 -0
  276. package/dist/structure/versioned-label.d.ts.map +1 -0
  277. package/dist/structure/versioned-label.js +48 -0
  278. package/dist/structure/versioned-label.js.map +1 -0
  279. package/dist/structure/written-headings.d.ts +31 -0
  280. package/dist/structure/written-headings.d.ts.map +1 -0
  281. package/dist/structure/written-headings.js +119 -0
  282. package/dist/structure/written-headings.js.map +1 -0
  283. package/dist/structure/written-resolve.d.ts +12 -0
  284. package/dist/structure/written-resolve.d.ts.map +1 -0
  285. package/dist/structure/written-resolve.js +49 -0
  286. package/dist/structure/written-resolve.js.map +1 -0
  287. package/package.json +3 -3
  288. package/rules/all-caps-shouting.yaml +2 -2
  289. package/rules/concrete-evidence-density.yaml +2 -2
  290. package/rules/contraction-consistency.yaml +13 -13
  291. package/rules/dangling-reference.yaml +2 -2
  292. package/rules/date-without-year.yaml +2 -2
  293. package/rules/defined-name-repeated.yaml +2 -2
  294. package/rules/fact-conflict.yaml +2 -2
  295. package/rules/heading-end-punctuation-mix.yaml +2 -2
  296. package/rules/heading-numbering-mix.yaml +2 -2
  297. package/rules/latin-spacing.yaml +2 -2
  298. package/rules/max-kanji-continuous.yaml +5 -3
  299. package/rules/max-sentence-length.yaml +3 -2
  300. package/rules/name-variant.yaml +2 -2
  301. package/rules/ngram-repetition.yaml +2 -2
  302. package/rules/numbering-gap.yaml +2 -2
  303. package/rules/orthographic-variant.yaml +2 -2
  304. package/rules/reference-title-mismatch.yaml +2 -2
  305. package/rules/repeated-sentence-ending.yaml +3 -2
  306. package/rules/request-without-deadline.yaml +2 -2
  307. package/rules/requirement-smell.yaml +2 -2
  308. package/rules/sentence-rhythm.yaml +2 -2
  309. package/rules/title-case-consistency.yaml +2 -2
  310. package/rules/unbalanced-bracket.yaml +2 -2
  311. package/rules/undefined-acronym.yaml +11 -2
  312. package/rules/undefined-term.yaml +2 -2
  313. package/rules/unfilled-placeholder.yaml +2 -2
  314. package/rules/vague-word-density.yaml +2 -2
  315. package/src/capitals-passage.ts +31 -0
  316. package/src/coined-hyphen-name.ts +27 -0
  317. package/src/company-names.ts +24 -3
  318. package/src/detectors/acronym-context.ts +5 -6
  319. package/src/detectors/acronym-definition.ts +123 -0
  320. package/src/detectors/acronym-lone.ts +26 -0
  321. package/src/detectors/acronym-name.ts +117 -0
  322. package/src/detectors/capitalised-term.ts +154 -4
  323. package/src/detectors/caps-caption.ts +61 -0
  324. package/src/detectors/char-shape.ts +74 -22
  325. package/src/detectors/clause-shape.ts +14 -4
  326. package/src/detectors/concrete-evidence.ts +77 -1
  327. package/src/detectors/contraction-minority.ts +11 -0
  328. package/src/detectors/counter-edge.ts +23 -0
  329. package/src/detectors/date-any-year.ts +56 -10
  330. package/src/detectors/date-heading-year.ts +55 -0
  331. package/src/detectors/date-year.ts +54 -9
  332. package/src/detectors/defined-term-form.ts +26 -5
  333. package/src/detectors/due-date.ts +10 -1
  334. package/src/detectors/en-shape.ts +5 -1
  335. package/src/detectors/fact-consistency.ts +3 -2
  336. package/src/detectors/gram-passages.ts +36 -0
  337. package/src/detectors/heading-end-mark.ts +23 -10
  338. package/src/detectors/heading-names.ts +31 -0
  339. package/src/detectors/heading-numbering.ts +7 -2
  340. package/src/detectors/inch-mark.ts +49 -0
  341. package/src/detectors/lexicon.ts +32 -21
  342. package/src/detectors/mark-shape.ts +12 -6
  343. package/src/detectors/name-variant-apart.ts +63 -0
  344. package/src/detectors/name-variant.ts +30 -12
  345. package/src/detectors/numeral-word.ts +33 -0
  346. package/src/detectors/organisation-run.ts +86 -0
  347. package/src/detectors/orthographic-variant.ts +22 -6
  348. package/src/detectors/outline-label.ts +48 -0
  349. package/src/detectors/page-marker.ts +26 -0
  350. package/src/detectors/parallel-definition.ts +64 -0
  351. package/src/detectors/reference-text.ts +1 -0
  352. package/src/detectors/registry/unfilled-placeholder.ts +2 -2
  353. package/src/detectors/registry/vague-density.ts +1 -1
  354. package/src/detectors/request-owner.ts +71 -8
  355. package/src/detectors/requirement-smell.ts +15 -2
  356. package/src/detectors/sentence-length.ts +14 -6
  357. package/src/detectors/sentence-rhythm.ts +8 -4
  358. package/src/detectors/series-label.ts +13 -4
  359. package/src/detectors/signals.ts +94 -26
  360. package/src/detectors/structure-tree.ts +10 -8
  361. package/src/detectors/template-sections.ts +37 -0
  362. package/src/detectors/titled-run.ts +43 -0
  363. package/src/detectors/unbalanced-bracket.ts +3 -0
  364. package/src/detectors/undefined-term.ts +8 -0
  365. package/src/detectors/unfilled-placeholder.ts +10 -0
  366. package/src/detectors/vague-density.ts +68 -0
  367. package/src/facts/fact-scope.ts +53 -4
  368. package/src/facts/table-facts.ts +43 -6
  369. package/src/grade-api.ts +38 -16
  370. package/src/heading-numbering.ts +35 -8
  371. package/src/name-end-letter.ts +9 -0
  372. package/src/name-given-before.ts +40 -0
  373. package/src/name-separator.ts +66 -5
  374. package/src/name-variants.ts +21 -11
  375. package/src/name-word-order.ts +62 -17
  376. package/src/nominal-stem.ts +36 -0
  377. package/src/sentence-load.ts +7 -2
  378. package/src/structure/cited-document-section.ts +42 -0
  379. package/src/structure/html-text-blocks.ts +45 -0
  380. package/src/structure/issues.ts +19 -4
  381. package/src/structure/labelled-date-order.ts +5 -2
  382. package/src/structure/labelled-order.ts +12 -3
  383. package/src/structure/list-numbering.ts +100 -11
  384. package/src/structure/listed-paragraph.ts +45 -0
  385. package/src/structure/numbering.ts +48 -19
  386. package/src/structure/reference-text.ts +25 -3
  387. package/src/structure/section-names.ts +32 -0
  388. package/src/structure/versioned-label.ts +52 -0
  389. package/src/structure/written-headings.ts +137 -0
  390. package/src/structure/written-resolve.ts +57 -0
@@ -39,13 +39,31 @@ export const holdsAside = (name, aside) => {
39
39
  .replaceAll(/[^\p{L}\p{N}]+/gu, " ")} `;
40
40
  return aside.trim() !== "" && words.includes(` ${aside.trim().toLowerCase()} `);
41
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));
42
+ /** 句点で終わる括弧や引用符の中は名前でなく文(範囲の断り「…を除く。」、引いた条文)。見出しは句点で終わらない。 */
43
+ const SENTENCE_STOP = /[。.]$/u;
44
+ export const endsAsSentence = (name) => SENTENCE_STOP.test(name);
45
+ const isName = (name, words) => LETTER.test(name) &&
46
+ !DIGIT.test(name) &&
47
+ !ITEM_LABEL.test(name.normalize("NFKC")) &&
48
+ !endsAsSentence(name) &&
49
+ !words.asides.some((aside) => holdsAside(name, aside));
43
50
  const agrees = (name, heading) => {
44
51
  const [a, b] = [normalized(name), normalized(heading)];
45
52
  return a.includes(b) || b.includes(a);
46
53
  };
47
- /** 名前を添えた参照で、名前が参照先の見出しと合わない。 */
48
- export const titleMismatches = (input) => input.references.flatMap((reference) => {
54
+ /**
55
+ * The reference ends a list or range of references ("sections 162 and 164", "sections 9 to 11"): only a joint stands
56
+ * between it and the reference before it.
57
+ */
58
+ export const endsList = (between, joints) => {
59
+ const joint = between.normalize("NFKC").trim().toLowerCase();
60
+ return joint !== "" && joints.some((candidate) => candidate.normalize("NFKC").trim().toLowerCase() === joint);
61
+ };
62
+ /** 名前を添えた参照で、名前が参照先の見出しと合わない。並びの後ろの括弧は並び全体の名前なので、どの見出しとも比べない。 */
63
+ export const titleMismatches = (input) => input.references.flatMap((reference, index) => {
64
+ const previous = input.references[index - 1];
65
+ if (previous !== undefined && endsList(input.source.slice(previous.span.end, reference.span.start), input.words.listJoints))
66
+ return [];
49
67
  const target = input.targetOf(reference);
50
68
  const heading = target === undefined ? "" : headingOf(target);
51
69
  const found = nameAfter(input.source, reference.span.end);
@@ -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,12 @@
1
+ import type { StructureNode } from "../plugin.ts";
2
+ /**
3
+ * 名前の一部として書かれた番号(「section 21 notice」)の行き先。小文字で書いた参照の後ろに、名前を作る語(語彙表)が続くもの。
4
+ * 大文字の「Section 5 notice」は契約が自分の条を指す書き方なので当たらない。Pure.
5
+ */
6
+ export declare const namedTargets: (references: readonly StructureNode[], source: string, nouns: readonly string[]) => ReadonlySet<string>;
7
+ /**
8
+ * 名前として書かれた番号を指す参照か。小文字で書いた参照(「under section 21」)だけ。同じ文書の大文字の「Section 21」は、
9
+ * 文書が自分の section を指す書き方なので、名前があっても探す。Pure.
10
+ */
11
+ export declare const pointsToNamedSection: (reference: StructureNode, named: ReadonlySet<string>) => boolean;
12
+ //# sourceMappingURL=section-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-names.d.ts","sourceRoot":"","sources":["../../src/structure/section-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAUlD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,YAAY,SAAS,aAAa,EAAE,EAAE,QAAQ,MAAM,EAAE,OAAO,SAAS,MAAM,EAAE,KAAG,WAAW,CAAC,MAAM,CAU/H,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,aAAa,EAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAG,OACoB,CAAC"}
@@ -0,0 +1,26 @@
1
+ // 番号で呼ぶ他の法律の手続き。英国の「section 21 notice」は Housing Act 1988 の section 21 の通知で、この文書の section 21 ではない。
2
+ /** 参照のすぐ後ろの語。 */
3
+ const NEXT_WORD = /^[ \t]+(?<word>\p{L}+)/u;
4
+ const LOWER_START = /^\p{Ll}/u;
5
+ /** 後ろの語を読む長さ。名前を作る語は短い。 */
6
+ const NEXT_WORD_LENGTH = 24;
7
+ /**
8
+ * 名前の一部として書かれた番号(「section 21 notice」)の行き先。小文字で書いた参照の後ろに、名前を作る語(語彙表)が続くもの。
9
+ * 大文字の「Section 5 notice」は契約が自分の条を指す書き方なので当たらない。Pure.
10
+ */
11
+ export const namedTargets = (references, source, nouns) => {
12
+ if (nouns.length === 0)
13
+ return new Set();
14
+ const names = new Set(nouns);
15
+ return new Set(references.flatMap((reference) => {
16
+ const label = String(reference.attrs["label"] ?? "");
17
+ const word = NEXT_WORD.exec(source.slice(reference.span.end, reference.span.end + NEXT_WORD_LENGTH))?.groups?.["word"];
18
+ return LOWER_START.test(label) && word !== undefined && names.has(word) ? [String(reference.attrs["target"] ?? "")] : [];
19
+ }));
20
+ };
21
+ /**
22
+ * 名前として書かれた番号を指す参照か。小文字で書いた参照(「under section 21」)だけ。同じ文書の大文字の「Section 21」は、
23
+ * 文書が自分の section を指す書き方なので、名前があっても探す。Pure.
24
+ */
25
+ export const pointsToNamedSection = (reference, named) => LOWER_START.test(String(reference.attrs["label"] ?? "")) && named.has(String(reference.attrs["target"] ?? ""));
26
+ //# sourceMappingURL=section-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-names.js","sourceRoot":"","sources":["../../src/structure/section-names.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAElG,iBAAiB;AACjB,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAC5C,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,2BAA2B;AAC3B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAoC,EAAE,MAAc,EAAE,KAAwB,EAAuB,EAAE;IAClI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,IAAI,GAAG,CACZ,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACvH,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3H,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAwB,EAAE,KAA0B,EAAW,EAAE,CACpG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * A label naming the version it is about: the version after the label and a word (End of support for 5.0.0:), or before
3
+ * it with a word (3.0.0 のサポート終了日:). The words come from the language's lexicon; a version is digits joined by dots,
4
+ * with or without a leading v. Pure.
5
+ */
6
+ /** The words that join a version to a label: after for the label, word, version order; before for version, word, label. */
7
+ export type VersionWords = {
8
+ readonly after: readonly string[];
9
+ readonly before: readonly string[];
10
+ };
11
+ /**
12
+ * The line read as the bare label: "End of support for 5.0.0: …" as "End of support: …", "3.0.0 のサポート終了日:…" as
13
+ * "サポート終了日:…". undefined when the line does not start with the label carrying a version that way.
14
+ */
15
+ export declare const withoutLabelVersion: (text: string, label: string, words: VersionWords) => string | undefined;
16
+ //# sourceMappingURL=versioned-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-label.d.ts","sourceRoot":"","sources":["../../src/structure/versioned-label.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2HAA2H;AAC3H,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAiCrG;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,YAAY,KAAG,MAAM,GAAG,SAO/F,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A label naming the version it is about: the version after the label and a word (End of support for 5.0.0:), or before
3
+ * it with a word (3.0.0 のサポート終了日:). The words come from the language's lexicon; a version is digits joined by dots,
4
+ * with or without a leading v. Pure.
5
+ */
6
+ /** A list marker, a table cell's bar and emphasis before the label. A numbered marker needs its space: 3.0.0 is a version, not item 3. */
7
+ const LINE_LEAD = /^[ \t]*(?:(?:[-*+]|\d{1,3}[.)])[ \t]+)?(?:\|[ \t]*)?[*_]*/u;
8
+ const VERSION = /^v?\d+(?:\.\d+)+/iu;
9
+ /** After the label's version, only the label's end: a colon or a table cell's bar. */
10
+ const VERSION_END = /^[ \t]*[::|]/u;
11
+ const SPACES = /^[ \t\u3000]*/u;
12
+ const spacesAt = (text) => SPACES.exec(text)?.[0].length ?? 0;
13
+ const versionAt = (text) => VERSION.exec(text)?.[0].length ?? 0;
14
+ /** After the label: one word, spaces on both sides, a version and the label's end. Returns the label's end on. */
15
+ const afterVersion = (rest, word) => {
16
+ const gap = spacesAt(rest);
17
+ if (gap === 0 || !rest.slice(gap).toLowerCase().startsWith(`${word.toLowerCase()} `))
18
+ return undefined;
19
+ const from = gap + word.length + spacesAt(rest.slice(gap + word.length));
20
+ const version = versionAt(rest.slice(from));
21
+ const tail = rest.slice(from + version);
22
+ return version > 0 && VERSION_END.test(tail) ? tail : undefined;
23
+ };
24
+ /** Before the label: a version, the word and the label, spaces allowed between. Returns the text from the label on. */
25
+ const beforeVersion = (lead, word, label) => {
26
+ const version = versionAt(lead);
27
+ if (version === 0)
28
+ return undefined;
29
+ const atWord = version + spacesAt(lead.slice(version));
30
+ if (!lead.slice(atWord).startsWith(word))
31
+ return undefined;
32
+ const atLabel = atWord + word.length + spacesAt(lead.slice(atWord + word.length));
33
+ return lead.slice(atLabel).toLowerCase().startsWith(label.toLowerCase()) ? lead.slice(atLabel) : undefined;
34
+ };
35
+ /**
36
+ * The line read as the bare label: "End of support for 5.0.0: …" as "End of support: …", "3.0.0 のサポート終了日:…" as
37
+ * "サポート終了日:…". undefined when the line does not start with the label carrying a version that way.
38
+ */
39
+ export const withoutLabelVersion = (text, label, words) => {
40
+ const lead = text.replace(LINE_LEAD, "");
41
+ const after = lead.toLowerCase().startsWith(label.toLowerCase())
42
+ ? words.after.map((word) => afterVersion(lead.slice(label.length), word)).find((tail) => tail !== undefined)
43
+ : undefined;
44
+ if (after !== undefined)
45
+ return `${lead.slice(0, label.length)}${after}`;
46
+ return words.before.map((word) => beforeVersion(lead, word, label)).find((rest) => rest !== undefined);
47
+ };
48
+ //# sourceMappingURL=versioned-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-label.js","sourceRoot":"","sources":["../../src/structure/versioned-label.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /** 書かれた見出し。address は参照の target と同じ形(「6.1」)。start は見出しの位置。 */
2
+ export type WrittenHeading = {
3
+ readonly address: string;
4
+ readonly start: number;
5
+ };
6
+ /** 参照の位置と行き先。木の reference の節点から取る。 */
7
+ export type ReferenceSpan = {
8
+ readonly start: number;
9
+ readonly end: number;
10
+ readonly target: string;
11
+ };
12
+ /**
13
+ * Title Case の題か(「Effect on Capital Stock of the Company and Merger Sub」)。最初の語が大文字で始まり、語の半分より多くが
14
+ * 大文字で始まり、数字を含まない。文(「The Company shall comply」)は小文字の語が多いので当たらない。Pure.
15
+ */
16
+ export declare const isTitle: (title: string) => boolean;
17
+ /** 文書に平文で書かれた見出しを、文書の順に。Pure. */
18
+ export declare const writtenHeadings: (references: readonly ReferenceSpan[], source: string) => WrittenHeading[];
19
+ /** 本文に書かれた括弧の小見出しの札。Pure. */
20
+ export declare const writtenSubdivisions: (body: string) => ReadonlySet<string>;
21
+ /**
22
+ * 参照の番地「2.1.a.i」を、親「2.1」と、参照が括弧で書いた札「a」「i」に分ける。札を括弧で書いていない参照(Section 2.1)や、
23
+ * 番地の末尾が書いた札と合わなければ undefined。Pure.
24
+ */
25
+ export declare const parentAndLabels: (target: string, written: string) => {
26
+ readonly parent: string;
27
+ readonly labels: readonly string[];
28
+ } | undefined;
29
+ /** 書かれた見出しごとの範囲(次の書かれた見出しまで)。同じ番地が二度あれば、どちらの範囲もその番地のもの。Pure. */
30
+ export declare const headingRegions: (headings: readonly WrittenHeading[], length: number) => ReadonlyMap<string, readonly (readonly [number, number])[]>;
31
+ //# sourceMappingURL=written-headings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"written-headings.d.ts","sourceRoot":"","sources":["../../src/structure/written-headings.ts"],"names":[],"mappings":"AAIA,6DAA6D;AAC7D,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,sCAAsC;AACtC,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQtG;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,KAAG,OAKvC,CAAC;AA2EF,iCAAiC;AACjC,eAAO,MAAM,eAAe,GAAI,YAAY,SAAS,aAAa,EAAE,EAAE,QAAQ,MAAM,KAAG,cAAc,EAC+B,CAAC;AAKrI,6BAA6B;AAC7B,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,WAAW,CAAC,MAAM,CACsE,CAAC;AAK5I;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,SAAS,MAAM,KAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,SAMnI,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,cAAc,EAAE,EAAE,QAAQ,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAS9I,CAAC"}
@@ -0,0 +1,119 @@
1
+ // 平文の契約の見出し。Markdown の見出しを使わない契約(.txt)は、行の頭や文の切れ目に「9. Indemnification.」
2
+ // 「Section 2.3 Appraisal Shares.」と番号と題を書く。木は本文の番号と見分けられないのでこれを番地にしないが、
3
+ // 参照の行き先としては読める。目次の行(「Section 2.3 Appraisal Shares 4」)は題が点で閉じないので見出しにしない。
4
+ /** 題の語の数の上限。見出しの題は短い。 */
5
+ const MAX_TITLE_WORDS = 15;
6
+ /** 題の語: 文字で始まり、文字・アポストロフィ・アンパサンド・ハイフンが続き、読点やセミコロンで終わってもよい。数字は入らない。 */
7
+ const TITLE_WORD = /^\p{L}[\p{L}’'&-]*[,;]?$/u;
8
+ const CAPITAL = /^\p{Lu}/u;
9
+ /**
10
+ * Title Case の題か(「Effect on Capital Stock of the Company and Merger Sub」)。最初の語が大文字で始まり、語の半分より多くが
11
+ * 大文字で始まり、数字を含まない。文(「The Company shall comply」)は小文字の語が多いので当たらない。Pure.
12
+ */
13
+ export const isTitle = (title) => {
14
+ const words = title.trim().split(/\s+/u);
15
+ const [first] = words;
16
+ if (first === undefined || first === "" || words.length > MAX_TITLE_WORDS || !words.every((word) => TITLE_WORD.test(word)))
17
+ return false;
18
+ return CAPITAL.test(first) && words.filter((word) => CAPITAL.test(word)).length * 2 > words.length;
19
+ };
20
+ /** 点で閉じた題(「Appraisal Shares. As used」の「Appraisal Shares」)。点の後ろは空白か行末。無ければ undefined。 */
21
+ const MAX_TITLE_LENGTH = 120;
22
+ const titleClosedByDot = (text) => {
23
+ const dot = text.slice(0, MAX_TITLE_LENGTH).search(/\.(?:\s|$)/u);
24
+ return dot <= 0 ? undefined : text.slice(0, dot);
25
+ };
26
+ /** 前の語が番号(「Section 8.07. Section 16 Matters」の 8.07.)なら、後ろはその見出しの題で、見出しではない。 */
27
+ const NUMBER_BEFORE = /\d[.:]?$/u;
28
+ const SENTENCE_END = /[.;:]$/u;
29
+ const isSpace = (char) => char === " " || char === "\t";
30
+ /** 見出しが始まれる位置: 行の頭、文の終わり(. ; :)の後ろの空白、2 つ以上の空白の後ろ。前が番号なら始まらない。 */
31
+ const startsHeading = (source, at) => {
32
+ const before = source.slice(Math.max(source.lastIndexOf("\n", at - 1) + 1, at - MAX_TITLE_LENGTH), at);
33
+ let spaces = 0;
34
+ while (isSpace(before[before.length - 1 - spaces]))
35
+ spaces += 1;
36
+ if (spaces === before.length)
37
+ return true;
38
+ const word = before
39
+ .slice(0, before.length - spaces)
40
+ .split(/[ \t]/u)
41
+ .at(-1) ?? "";
42
+ if (NUMBER_BEFORE.test(word))
43
+ return false;
44
+ return spaces >= 2 || (spaces >= 1 && SENTENCE_END.test(word));
45
+ };
46
+ /** 参照のすぐ後ろが題か(「Section 4.12. Compliance with Laws.」「Section 1.1 Closing. The Parties」)。 */
47
+ const NUMBER_CLOSE = /^\.?[ \t]+/u;
48
+ /** 番号と題のあいだの空白の長さの上限(データセットの契約は十数個の空白を置く)。 */
49
+ const MAX_NUMBER_CLOSE = 24;
50
+ const titledAfter = (source, end) => {
51
+ const rest = source.slice(end, end + MAX_TITLE_LENGTH + MAX_NUMBER_CLOSE);
52
+ const close = NUMBER_CLOSE.exec(rest)?.[0];
53
+ const title = close === undefined ? undefined : titleClosedByDot(rest.slice(close.length));
54
+ return title !== undefined && isTitle(title);
55
+ };
56
+ /** 参照の形で書かれた見出し(「… Effect. Section 4.12. Compliance with Laws.」)。 */
57
+ const headingsAtReferences = (references, source) => references
58
+ .filter((reference) => startsHeading(source, reference.start) && titledAfter(source, reference.end))
59
+ .map((reference) => ({ address: reference.target, start: reference.start }));
60
+ /** 行の頭の番号(「9. Indemnification.」「4 Intellectual Property. 4.1 Each」「6.1 eGain warrants」「2 Quality and Food Safety」)。 */
61
+ const LINE_NUMBER = /^[ \t]{0,3}(?<number>\d{1,3}(?:\.\d{1,3}){0,5})\.?[ \t]+(?<rest>\S.*)$/u;
62
+ /** 語のどこかに大文字があるか(「eGain」も名前)。 */
63
+ const HAS_CAPITAL = /\p{Lu}/u;
64
+ /**
65
+ * 行の頭の番号が見出しか。題が点で閉じ、同じ行に本文が続けば見出し(「9. Indemnification. Each party …」)。題だけの行
66
+ * (「1. Introduction」)は箇条書きと見分けられないので読まない。点を含む番号(6.1)は、最初の語に大文字があり、題より長い
67
+ * 段落が続けば段落の番号(「6.1 eGain warrants …」)。本文の折り返しの「2.5 percent」は小文字、目次の「3.17 Reserves 33」は短いので当たらない。
68
+ */
69
+ const isLineHeading = (number, rest) => {
70
+ const title = titleClosedByDot(rest);
71
+ if (title !== undefined && rest.slice(title.length + 1).trim() !== "" && isTitle(title))
72
+ return true;
73
+ const words = rest.split(/\s+/u);
74
+ return number.includes(".") && words.length > MAX_TITLE_WORDS && HAS_CAPITAL.test(words[0] ?? "");
75
+ };
76
+ const headingsAtLineStarts = (source) => {
77
+ const found = [];
78
+ let start = 0;
79
+ source.split("\n").forEach((line) => {
80
+ const groups = LINE_NUMBER.exec(line)?.groups;
81
+ const number = groups?.["number"];
82
+ if (number !== undefined && isLineHeading(number, groups?.["rest"] ?? ""))
83
+ found.push({ address: number, start });
84
+ start += line.length + 1;
85
+ });
86
+ return found;
87
+ };
88
+ /** 文書に平文で書かれた見出しを、文書の順に。Pure. */
89
+ export const writtenHeadings = (references, source) => [...headingsAtReferences(references, source), ...headingsAtLineStarts(source)].toSorted((left, right) => left.start - right.start);
90
+ /** 括弧の小見出し(「(i)」「(b)」「(3)」)。参照の一部(「Section 2.02(b)」「(a)(i)」)は、前が文字・数字・括弧なので読まない。 */
91
+ const SUBDIVISION_LABEL = /(?<![\p{L}\p{N})\]])\((?<label>[a-zA-Z]{1,4}|\d{1,3})\)/gu;
92
+ /** 本文に書かれた括弧の小見出しの札。Pure. */
93
+ export const writtenSubdivisions = (body) => new Set([...body.matchAll(SUBDIVISION_LABEL)].flatMap((match) => (match.groups?.["label"] === undefined ? [] : [match.groups["label"]])));
94
+ /** 参照の札(「Section 2.1(a)(i)」の a と i)。 */
95
+ const LABEL_IN_REFERENCE = /\((?<label>[a-zA-Z]{1,4}|\d{1,3})\)/gu;
96
+ /**
97
+ * 参照の番地「2.1.a.i」を、親「2.1」と、参照が括弧で書いた札「a」「i」に分ける。札を括弧で書いていない参照(Section 2.1)や、
98
+ * 番地の末尾が書いた札と合わなければ undefined。Pure.
99
+ */
100
+ export const parentAndLabels = (target, written) => {
101
+ const labels = [...written.matchAll(LABEL_IN_REFERENCE)].flatMap((match) => (match.groups?.["label"] === undefined ? [] : [match.groups["label"]]));
102
+ const parts = target.split(".");
103
+ const cut = parts.length - labels.length;
104
+ if (labels.length === 0 || cut <= 0 || parts.slice(cut).join(".") !== labels.join("."))
105
+ return undefined;
106
+ return { parent: parts.slice(0, cut).join("."), labels };
107
+ };
108
+ /** 書かれた見出しごとの範囲(次の書かれた見出しまで)。同じ番地が二度あれば、どちらの範囲もその番地のもの。Pure. */
109
+ export const headingRegions = (headings, length) => {
110
+ const regions = new Map();
111
+ headings.forEach((heading, index) => {
112
+ const end = headings[index + 1]?.start ?? length;
113
+ const found = regions.get(heading.address) ?? [];
114
+ found.push([heading.start, end]);
115
+ regions.set(heading.address, found);
116
+ });
117
+ return regions;
118
+ };
119
+ //# sourceMappingURL=written-headings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"written-headings.js","sourceRoot":"","sources":["../../src/structure/written-headings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { StructureNode } from "../plugin.ts";
2
+ /** addresses: 平文で書かれた見出しの番地。subdivision: 参照の札が、親の範囲の本文に書かれているか。 */
3
+ export type WrittenReading = {
4
+ readonly addresses: readonly string[];
5
+ readonly subdivision: (reference: StructureNode) => boolean;
6
+ };
7
+ /**
8
+ * 平文の見出しの番地と、参照(Section 6.1(i))の親(6.1)が木の条か平文の見出しとしてあり、その範囲の本文に札「(i)」が
9
+ * 書かれているかを引く関数。範囲ごとの札は、要るときに一度だけ読む。Pure.
10
+ */
11
+ export declare const writtenReading: (nodes: readonly StructureNode[], source: string) => WrittenReading;
12
+ //# sourceMappingURL=written-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"written-resolve.d.ts","sourceRoot":"","sources":["../../src/structure/written-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAOlD,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,OAAO,CAAA;CAAE,CAAC;AAyBpI;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,aAAa,EAAE,EAAE,QAAQ,MAAM,KAAG,cAmBhF,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { headingRegions, parentAndLabels, writtenHeadings, writtenSubdivisions } from "./written-headings.js";
2
+ const targetOf = (node) => String(node.attrs["target"] ?? "");
3
+ /**
4
+ * 括弧の小見出しを読む範囲。木の条は、項や号を一つも読まなかったときだけ、その条の始まりから次の平文の見出しまで。
5
+ * 項や号を読んでいれば、無い札は本当に無い。
6
+ */
7
+ const treeRegions = (nodes, headings) => {
8
+ const regions = new Map();
9
+ // 条も見出しも文書の順なので、次の見出しは前へ進めるだけで見つかる。
10
+ let next = 0;
11
+ nodes
12
+ .filter((node) => node.kind === "article" && !node.children.some((child) => child.kind === "item"))
13
+ .toSorted((left, right) => left.span.start - right.span.start)
14
+ .forEach((node) => {
15
+ while ((headings[next]?.start ?? Infinity) <= node.span.start)
16
+ next += 1;
17
+ const end = Math.min(headings[next]?.start ?? node.span.end, node.span.end);
18
+ const found = regions.get(node.address) ?? [];
19
+ found.push([node.span.start, end]);
20
+ regions.set(node.address, found);
21
+ });
22
+ return regions;
23
+ };
24
+ /**
25
+ * 平文の見出しの番地と、参照(Section 6.1(i))の親(6.1)が木の条か平文の見出しとしてあり、その範囲の本文に札「(i)」が
26
+ * 書かれているかを引く関数。範囲ごとの札は、要るときに一度だけ読む。Pure.
27
+ */
28
+ export const writtenReading = (nodes, source) => {
29
+ const references = nodes.filter((node) => node.kind === "reference").map((node) => ({ start: node.span.start, end: node.span.end, target: targetOf(node) }));
30
+ const headings = writtenHeadings(references, source);
31
+ const written = headingRegions(headings, source.length);
32
+ const tree = treeRegions(nodes, headings);
33
+ const labels = new Map();
34
+ const labelsIn = ([start, end]) => {
35
+ const key = `${String(start)}:${String(end)}`;
36
+ const found = labels.get(key) ?? writtenSubdivisions(source.slice(start, end));
37
+ labels.set(key, found);
38
+ return found;
39
+ };
40
+ const regionsOf = (address) => [...(tree.get(address) ?? []), ...(written.get(address) ?? [])];
41
+ const subdivision = (reference) => {
42
+ const wanted = parentAndLabels(targetOf(reference), String(reference.attrs["label"] ?? ""));
43
+ if (wanted === undefined)
44
+ return false;
45
+ return regionsOf(wanted.parent).some((region) => wanted.labels.every((label) => labelsIn(region).has(label)));
46
+ };
47
+ return { addresses: headings.map((heading) => heading.address), subdivision };
48
+ };
49
+ //# sourceMappingURL=written-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"written-resolve.js","sourceRoot":"","sources":["../../src/structure/written-resolve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chaffjs",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "description": "Prose validation harness. Finds what is hard to read, and never rewrites it for you.",
5
5
  "keywords": [
6
6
  "chaff",
@@ -88,8 +88,8 @@
88
88
  },
89
89
  "dependencies": {
90
90
  "@anthropic-ai/sdk": "^0.125.0",
91
- "@chaffjs/lang-en": "0.31.0",
92
- "@chaffjs/lang-ja": "0.33.0",
91
+ "@chaffjs/lang-en": "0.32.0",
92
+ "@chaffjs/lang-ja": "0.34.0",
93
93
  "character-entities": "^2.0.2",
94
94
  "mdast-util-from-markdown": "^2.0.3",
95
95
  "mdast-util-frontmatter": "^2.0.1",
@@ -41,8 +41,8 @@ example:
41
41
  Do not delete the log. Do not delete this file before the audit.
42
42
 
43
43
  not_flagged:
44
- ja: 三語以上の連なりだけを見ます。略語の並び(文書のほかの所で小文字で書かれない語)とコードは見ません。仕様書の MUST や SHALL は慣習の大文字として数えません。法令と文学の文書では既定で止めています(大文字で目立たせる決まりや、題を大文字で組む慣習があるため)。
45
- en: Only runs of three or more words. Runs of acronyms (words never written in lower case elsewhere) and code are not reported, and MUST or SHALL in a specification count as conventional capitals. The legal and literature presets turn it off, since contracts set disclaimers in capitals by rule and older texts set titles that way.
44
+ ja: 三語以上の連なりだけを見ます。略語の並び(文書のほかの所で小文字で書かれない語)とコードは見ません。仕様書の MUST や SHALL は慣習の大文字として数えません。段落の頭に置いた大文字の見出し語(「AGENCY:」「WORKING GROUP MEMBERS」のように、コロンで終わるか一行で段落になるもの)と、本文でその見出し語を挙げた所も見ません。法令と文学の文書では既定で止めています(大文字で目立たせる決まりや、題を大文字で組む慣習があるため)。
45
+ en: Only runs of three or more words. Runs of acronyms (words never written in lower case elsewhere) and code are not reported, and MUST or SHALL in a specification count as conventional capitals. A caption in capitals that opens a paragraph and ends in a colon or stands alone ("AGENCY:", "WORKING GROUP MEMBERS"), and prose naming such a caption, are not reported either. The legal and literature presets turn it off, since contracts set disclaimers in capitals by rule and older texts set titles that way.
46
46
  level_meaning:
47
47
  ja: "{limit} 箇所あれば指摘"
48
48
  en: reported once there are {limit}
@@ -67,8 +67,8 @@ example:
67
67
  Replies to help desk tickets now take 1 day on average, down from 3. Customer satisfaction rose from 72% to 85%. Overtime fell by 10 hours a month.
68
68
 
69
69
  not_flagged:
70
- ja: 3 文より短い節、索引のように項目を並べた節は見ません。
71
- en: Sections shorter than three sentences, and index-like sections of entries, are not checked.
70
+ ja: 3 文より短い節、索引のように項目を並べた節、文の半分以上が問いか指示(〜してください)の節は見ません。
71
+ en: Sections shorter than three sentences, index-like sections of entries, and sections where at least half the sentences are questions or instructions are not checked.
72
72
  level_meaning:
73
73
  ja: 具体物のない節が {limit} 個あれば指摘
74
74
  en: reported once {limit} sections have nothing concrete
@@ -15,14 +15,14 @@ why:
15
15
  en: Whether to use contractions is a choice of register, and neither is wrong. Mixed within one document, the reader re-measures the distance sentence by sentence.
16
16
 
17
17
  message:
18
- ja: 「{matched}」だけ他と書きかたが違います(そういう書きかたが {count} 種)
19
- en: '"{matched}" is written differently from the rest of the document'
18
+ ja: 「{matched}」は、この文書のほかの所では「{majority}」と書かれています
19
+ en: '"{matched}" is written "{majority}" elsewhere in the document'
20
20
 
21
21
  how_to_fix:
22
- ja: 多いほうに揃えてください。
23
- en: Match the majority.
22
+ ja: 同じ語は、多いほうの書きかたに揃えてください。
23
+ en: Write the same word the way the document mostly writes it.
24
24
 
25
- # 少数派が何種までなら「混在」と見るか。これを超えたら混在ではなく、そういう文体。
25
+ # 1 つの対で、少ないほうの書きかたが何回までなら「混在」と見るか。これを超えたら混在ではなく、書き分け。
26
26
  levels: { strict: 4, normal: 2, relaxed: 1 }
27
27
 
28
28
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
@@ -32,18 +32,18 @@ off_for:
32
32
 
33
33
  group: consistency
34
34
  summary:
35
- ja: 英語で、「don't」と「do not」のように短縮形を使う書き方と使わない書き方が混ざっている所
36
- en: Contractions ("don't") and full forms ("do not") mixed in one document
35
+ ja: 英語で、同じ語を「don't」と「do not」のように両方の形で書いている所
36
+ en: The same word written both contracted ("don't") and in full ("do not")
37
37
  example:
38
38
  en:
39
39
  before: |
40
- We don't store your password. We can't read your messages. We won't share your data. We do not sell your address.
40
+ We don't store your password. We don't read your messages. We don't share your data. We do not sell your address.
41
41
  after: |
42
- We don't store your password. We can't read your messages. We won't share your data. We don't sell your address.
42
+ We don't store your password. We don't read your messages. We don't share your data. We don't sell your address.
43
43
 
44
44
  not_flagged:
45
- ja: 短縮形を使うかどうかは決めません。文書の中で少ないほうだけを指します。
46
- en: Whether to use contractions is not decided; only the minority form in the document is pointed at.
45
+ ja: 短縮形を使うかどうかは決めません。比べるのは同じ語の 2 つの形(「you're」と「you are」)だけで、別の語どうしは比べません。「you're」と書き、否定は「do not」と書く文書は揃っています。同じ語の 2 つの形が同じ回数なら、少ないほうが無いので指しません。
46
+ en: Whether to use contractions is not decided. Only the two forms of the same word are compared ("you're" with "you are"), never different words, so a document that writes "you're" but keeps "do not" in full is consistent. When both forms of a word appear as often, there is no minority and nothing is pointed at.
47
47
  level_meaning:
48
- ja: 少ないほうの書き方が {limit} 箇所以下のとき指摘
49
- en: reported when the minority form appears {limit} times or fewer
48
+ ja: 同じ語の少ないほうの書き方が {limit} 箇所以下のとき指摘
49
+ en: reported when the minority form of a word appears {limit} times or fewer
@@ -78,5 +78,5 @@ example:
78
78
  Holidays follow the rota that the company publishes each month.
79
79
 
80
80
  not_flagged:
81
- ja: 「法第2条」のように、ほかの文書の条を指す参照は探しません。条で番号を振っていない文書では、条で数える参照を見ません。
82
- en: References into another document ("Article 2 of the Act") are not looked up. A document that numbers none of its provisions as articles is not checked for article references.
81
+ ja: 「法第2条」「就業規則 第25条」のように、ほかの文書の条を指す参照は探しません。ほかの文書の名前を見出しにして引き写した条の中の参照も、その文書の条です。条の下に「1. 」「2.」の箇条書きで書いた項は、項として引きます。条で番号を振っていない文書では、条で数える参照を見ません。平文の契約が「9. Indemnification.」と本文の形で書いた見出しや、本文の中に書いた「(i)」も、参照の行き先として引きます。「section 21 notice」のように番号を手続きの名前にした書き方は、ほかの法律の番号として探しません。
82
+ en: References into another document ("Article 2 of the Act") are not looked up, nor are references inside a section whose heading is the name of a document cited elsewhere in the text, which quotes that document. A paragraph written as a list ("1. ", "2. ") under an article counts as that article's paragraph. A document that numbers none of its provisions as articles is not checked for article references. A plain-text contract's headings written as text ("9. Indemnification.", "Section 2.3 Appraisal Shares.") and the labels written inside a section's text ("(i)") count as addresses. A section number used as a name ("a section 21 notice") points into another Act and is not looked up.
@@ -64,8 +64,8 @@ example:
64
64
  - October 28, 2026: results sent
65
65
 
66
66
  not_flagged:
67
- ja: 年のある日付がみな同じ年の文書では、年の無い日付を指しません(どの年か読み手に分かるため)。年を一度だけ書いて、あとの日付は月と日だけで書く文書(年の無い日付のほうが多い文書)も、書き方の選び方として指しません。ただしどちらの場合も、年をまたぐ日付は指します。どの年のものでもない日付も指しません。毎年の日(毎年4月1日、年末年始閉庁日(12月29日~1月3日)、4月1日から翌年3月31日まで)と、例の日付(例えば…4月1日に届いた場合、例:のあとの日付)です。年のある日付が一つも無い文書、月だけ・年だけの日付は見ません。
68
- en: A document whose dated dates are all in one year is not reported, since the reader can tell the year. A document that writes the year once and the rest as month and day (more yearless dates than dated ones) is a style, and not reported either. In both, a date across the turn of a year is still reported. Nor is a date of no one year, such as a day that comes round every year ("every year on April 1", "each December 31", "April 1 to March 31 of the following year") and a date in a worked example ("for example, a request received on April 1", the dates after "e.g."). A document with no dated date, and month-only and year-only dates, are not checked.
67
+ ja: 年のある日付がみな同じ年の文書では、年の無い日付を指しません(どの年か読み手に分かるため)。年を一度だけ書いて、あとの日付は月と日だけで書く文書(年の無い日付のほうが多い文書)も、書き方の選び方として指しません。ただしどちらの場合も、年をまたぐ日付は指します。見出しが年を名指す節(「2026年度の予定」「令和8年の行事」「FY27」)の日付は、見出しから年が決まるので指しません。どの年のものでもない日付も指しません。毎年の日(毎年4月1日、決算日は12月31日、年末年始閉庁日(12月29日~1月3日)、4月1日から翌年3月31日まで、1月1日から12月31日までのような一年の期間)と、例の日付(例えば…4月1日に届いた場合、例:のあとの日付、例の項目に続く「もし…」の項目)です。年のある日付が一つも無い文書、月だけ・年だけの日付は見ません。
68
+ en: A document whose dated dates are all in one year is not reported, since the reader can tell the year. A document that writes the year once and the rest as month and day (more yearless dates than dated ones) is a style, and not reported either. In both, a date across the turn of a year is still reported. A date in a section whose heading names the year ("2026 events", "FY27-Q2") takes its year from the heading and is not reported. Nor is a date of no one year, such as a day that comes round every year ("every year on April 1", "each December 31", "the fiscal year end is March 31", "April 1 to March 31 of the following year", a whole year such as "January 1 to December 31") and a date in a worked example ("for example, a request received on April 1", the dates after "e.g.", a list item opening with "If" just after an example's item). A document with no dated date, and month-only and year-only dates, are not checked.
69
69
  rewrite:
70
70
  depth: light
71
71
  ja:
@@ -65,8 +65,8 @@ example:
65
65
  1. The Customer pays the Supplier within thirty days of each invoice.
66
66
 
67
67
  not_flagged:
68
- ja: 短い呼び名を定める前の使用、呼び名と同じ行にある使用、名前だけの行(署名欄)、四字に満たない名前(「法律」)、一語の英語の名前、呼び名が名前を含むもの(「本サービス」)、前の語が絞り込む名前(「妊娠中の女性従業員」「本利用規約」)、それ自体が定義した語である名前、長い語の一部(「株式会社みなと製作所大阪支店」)は見ません。法務のジャンルで見ます。
69
- en: 'Uses before the short name is defined, uses on a line that also gives the short name, lines holding little more than the name (a signature block), names shorter than four characters, one-word English names, short names that contain the long one, names narrowed by the word before them ("the Beta Preview"), names that are defined terms themselves, and a name inside a longer word are not reported. The legal genres run this rule.'
68
+ ja: 短い呼び名を定める前の使用、呼び名と同じ行にある使用、名前だけの行(署名欄)、四字に満たない名前(「法律」)、一語の英語の名前、小文字だけの英語の語や日付・金額(with respect thereto、January 26, 2015、$1.00)、呼び名が名前を含むもの(「本サービス」)、前の語が絞り込む名前(「妊娠中の女性従業員」「本利用規約」、Customer's Web site)、それ自体が定義した語である名前、長い語の一部(「株式会社みなと製作所大阪支店」)、それぞれや全体を呼ぶ括弧((each, a "Certificate")、(collectively, the "Plans"))は見ません。この括弧は前の節の頭の語を呼び、すぐ前の名前を呼ぶのではないからです。法務のジャンルで見ます。
69
+ en: 'Uses before the short name is defined, uses on a line that also gives the short name, lines holding little more than the name (a signature block), names shorter than four characters, one-word English names, lower-case words, dates and amounts (with respect thereto, January 26, 2015, $1.00), short names that contain the long one, names narrowed by the word before them ("the Beta Preview", "Customer''s Web site"), names that are defined terms themselves, a name inside a longer word, and a bracket that names each or all of several things ((each, a "Certificate"), (collectively, the "Plans")), which names the head of the clause before it rather than its last words, are not reported. The legal genres run this rule.'
70
70
  rewrite:
71
71
  depth: light
72
72
  ja: