chaffjs 0.28.0 → 0.29.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 (895) hide show
  1. package/dist/ai-score/of-document.d.ts.map +1 -1
  2. package/dist/ai-score/of-document.js +23 -14
  3. package/dist/ai-score/of-document.js.map +1 -1
  4. package/dist/ai-score/render.d.ts.map +1 -1
  5. package/dist/ai-score/render.js +13 -4
  6. package/dist/ai-score/render.js.map +1 -1
  7. package/dist/ai-score/score.d.ts +16 -1
  8. package/dist/ai-score/score.d.ts.map +1 -1
  9. package/dist/ai-score/score.js +15 -3
  10. package/dist/ai-score/score.js.map +1 -1
  11. package/dist/ai-score/signals.d.ts +2 -4
  12. package/dist/ai-score/signals.d.ts.map +1 -1
  13. package/dist/ai-score/signals.js +11 -2
  14. package/dist/ai-score/signals.js.map +1 -1
  15. package/dist/ai-score/text.d.ts +2 -0
  16. package/dist/ai-score/text.d.ts.map +1 -1
  17. package/dist/ai-score/text.js +4 -2
  18. package/dist/ai-score/text.js.map +1 -1
  19. package/dist/announced-count.d.ts +2 -0
  20. package/dist/announced-count.d.ts.map +1 -1
  21. package/dist/announced-count.js +14 -7
  22. package/dist/announced-count.js.map +1 -1
  23. package/dist/check-source.d.ts +3 -1
  24. package/dist/check-source.d.ts.map +1 -1
  25. package/dist/check-source.js +3 -1
  26. package/dist/check-source.js.map +1 -1
  27. package/dist/cli-text.d.ts.map +1 -1
  28. package/dist/cli-text.js +38 -16
  29. package/dist/cli-text.js.map +1 -1
  30. package/dist/cli.d.ts.map +1 -1
  31. package/dist/cli.js +2 -1
  32. package/dist/cli.js.map +1 -1
  33. package/dist/commands/cite-claims.d.ts +36 -0
  34. package/dist/commands/cite-claims.d.ts.map +1 -0
  35. package/dist/commands/cite-claims.js +81 -0
  36. package/dist/commands/cite-claims.js.map +1 -0
  37. package/dist/commands/cite-page.d.ts +14 -0
  38. package/dist/commands/cite-page.d.ts.map +1 -0
  39. package/dist/commands/cite-page.js +47 -0
  40. package/dist/commands/cite-page.js.map +1 -0
  41. package/dist/commands/cite-scaffold.d.ts +16 -0
  42. package/dist/commands/cite-scaffold.d.ts.map +1 -0
  43. package/dist/commands/cite-scaffold.js +21 -0
  44. package/dist/commands/cite-scaffold.js.map +1 -0
  45. package/dist/commands/cite.d.ts +3 -12
  46. package/dist/commands/cite.d.ts.map +1 -1
  47. package/dist/commands/cite.js +110 -51
  48. package/dist/commands/cite.js.map +1 -1
  49. package/dist/company-names.d.ts +34 -0
  50. package/dist/company-names.d.ts.map +1 -0
  51. package/dist/company-names.js +158 -0
  52. package/dist/company-names.js.map +1 -0
  53. package/dist/default-values.d.ts +17 -0
  54. package/dist/default-values.d.ts.map +1 -0
  55. package/dist/default-values.js +134 -0
  56. package/dist/default-values.js.map +1 -0
  57. package/dist/deprecated-use.d.ts +17 -0
  58. package/dist/deprecated-use.d.ts.map +1 -0
  59. package/dist/deprecated-use.js +95 -0
  60. package/dist/deprecated-use.js.map +1 -0
  61. package/dist/derived/stays.d.ts +43 -0
  62. package/dist/derived/stays.d.ts.map +1 -0
  63. package/dist/derived/stays.js +105 -0
  64. package/dist/derived/stays.js.map +1 -0
  65. package/dist/detectors/acronym-context.d.ts +2 -2
  66. package/dist/detectors/acronym-context.d.ts.map +1 -1
  67. package/dist/detectors/acronym-context.js +6 -0
  68. package/dist/detectors/acronym-context.js.map +1 -1
  69. package/dist/detectors/address-word.d.ts +3 -0
  70. package/dist/detectors/address-word.d.ts.map +1 -0
  71. package/dist/detectors/address-word.js +7 -0
  72. package/dist/detectors/address-word.js.map +1 -0
  73. package/dist/detectors/agreement-slip.d.ts.map +1 -1
  74. package/dist/detectors/agreement-slip.js +4 -1
  75. package/dist/detectors/agreement-slip.js.map +1 -1
  76. package/dist/detectors/ai-phrasing.d.ts +0 -4
  77. package/dist/detectors/ai-phrasing.d.ts.map +1 -1
  78. package/dist/detectors/ai-phrasing.js +5 -1
  79. package/dist/detectors/ai-phrasing.js.map +1 -1
  80. package/dist/detectors/amount-range.d.ts +3 -0
  81. package/dist/detectors/amount-range.d.ts.map +1 -0
  82. package/dist/detectors/amount-range.js +38 -0
  83. package/dist/detectors/amount-range.js.map +1 -0
  84. package/dist/detectors/amount-scale.d.ts +6 -1
  85. package/dist/detectors/amount-scale.d.ts.map +1 -1
  86. package/dist/detectors/amount-scale.js +33 -9
  87. package/dist/detectors/amount-scale.js.map +1 -1
  88. package/dist/detectors/announced-count.d.ts +1 -1
  89. package/dist/detectors/announced-count.d.ts.map +1 -1
  90. package/dist/detectors/announced-count.js +18 -3
  91. package/dist/detectors/announced-count.js.map +1 -1
  92. package/dist/detectors/bare-comparative.d.ts.map +1 -1
  93. package/dist/detectors/bare-comparative.js +4 -1
  94. package/dist/detectors/bare-comparative.js.map +1 -1
  95. package/dist/detectors/block-quotation.d.ts +13 -0
  96. package/dist/detectors/block-quotation.d.ts.map +1 -0
  97. package/dist/detectors/block-quotation.js +86 -0
  98. package/dist/detectors/block-quotation.js.map +1 -0
  99. package/dist/detectors/bracket-label.d.ts +10 -0
  100. package/dist/detectors/bracket-label.d.ts.map +1 -0
  101. package/dist/detectors/bracket-label.js +51 -0
  102. package/dist/detectors/bracket-label.js.map +1 -0
  103. package/dist/detectors/citation-entry.d.ts +5 -0
  104. package/dist/detectors/citation-entry.d.ts.map +1 -1
  105. package/dist/detectors/citation-entry.js +19 -5
  106. package/dist/detectors/citation-entry.js.map +1 -1
  107. package/dist/detectors/code-before.d.ts +6 -0
  108. package/dist/detectors/code-before.d.ts.map +1 -0
  109. package/dist/detectors/code-before.js +15 -0
  110. package/dist/detectors/code-before.js.map +1 -0
  111. package/dist/detectors/connective-hierarchy.d.ts +11 -1
  112. package/dist/detectors/connective-hierarchy.d.ts.map +1 -1
  113. package/dist/detectors/connective-hierarchy.js +26 -6
  114. package/dist/detectors/connective-hierarchy.js.map +1 -1
  115. package/dist/detectors/currency-notation.d.ts.map +1 -1
  116. package/dist/detectors/currency-notation.js +2 -1
  117. package/dist/detectors/currency-notation.js.map +1 -1
  118. package/dist/detectors/date-outside-period.d.ts +4 -0
  119. package/dist/detectors/date-outside-period.d.ts.map +1 -0
  120. package/dist/detectors/date-outside-period.js +34 -0
  121. package/dist/detectors/date-outside-period.js.map +1 -0
  122. package/dist/detectors/default-values.d.ts +3 -0
  123. package/dist/detectors/default-values.d.ts.map +1 -0
  124. package/dist/detectors/default-values.js +14 -0
  125. package/dist/detectors/default-values.js.map +1 -0
  126. package/dist/detectors/defined-term-form.d.ts +6 -2
  127. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  128. package/dist/detectors/defined-term-form.js +72 -12
  129. package/dist/detectors/defined-term-form.js.map +1 -1
  130. package/dist/detectors/definition-use.d.ts.map +1 -1
  131. package/dist/detectors/definition-use.js +8 -1
  132. package/dist/detectors/definition-use.js.map +1 -1
  133. package/dist/detectors/deprecated-use.d.ts +3 -0
  134. package/dist/detectors/deprecated-use.d.ts.map +1 -0
  135. package/dist/detectors/deprecated-use.js +14 -0
  136. package/dist/detectors/deprecated-use.js.map +1 -0
  137. package/dist/detectors/derived-numbers.d.ts +1 -1
  138. package/dist/detectors/derived-numbers.d.ts.map +1 -1
  139. package/dist/detectors/derived-numbers.js +70 -15
  140. package/dist/detectors/derived-numbers.js.map +1 -1
  141. package/dist/detectors/document-shape.d.ts +1 -0
  142. package/dist/detectors/document-shape.d.ts.map +1 -1
  143. package/dist/detectors/document-shape.js +4 -1
  144. package/dist/detectors/document-shape.js.map +1 -1
  145. package/dist/detectors/due-date.d.ts +3 -0
  146. package/dist/detectors/due-date.d.ts.map +1 -0
  147. package/dist/detectors/due-date.js +38 -0
  148. package/dist/detectors/due-date.js.map +1 -0
  149. package/dist/detectors/en-shape.d.ts.map +1 -1
  150. package/dist/detectors/en-shape.js +17 -9
  151. package/dist/detectors/en-shape.js.map +1 -1
  152. package/dist/detectors/fact-consistency.d.ts.map +1 -1
  153. package/dist/detectors/fact-consistency.js +76 -2
  154. package/dist/detectors/fact-consistency.js.map +1 -1
  155. package/dist/detectors/heading-echo.d.ts.map +1 -1
  156. package/dist/detectors/heading-echo.js +10 -1
  157. package/dist/detectors/heading-echo.js.map +1 -1
  158. package/dist/detectors/kana-function-word.d.ts +12 -0
  159. package/dist/detectors/kana-function-word.d.ts.map +1 -0
  160. package/dist/detectors/kana-function-word.js +59 -0
  161. package/dist/detectors/kana-function-word.js.map +1 -0
  162. package/dist/detectors/line-amount.d.ts +3 -0
  163. package/dist/detectors/line-amount.d.ts.map +1 -0
  164. package/dist/detectors/line-amount.js +22 -0
  165. package/dist/detectors/line-amount.js.map +1 -0
  166. package/dist/detectors/location-pointer.d.ts +6 -0
  167. package/dist/detectors/location-pointer.d.ts.map +1 -0
  168. package/dist/detectors/location-pointer.js +22 -0
  169. package/dist/detectors/location-pointer.js.map +1 -0
  170. package/dist/detectors/mark-shape.d.ts.map +1 -1
  171. package/dist/detectors/mark-shape.js +13 -1
  172. package/dist/detectors/mark-shape.js.map +1 -1
  173. package/dist/detectors/nado-closed-list.d.ts +3 -0
  174. package/dist/detectors/nado-closed-list.d.ts.map +1 -0
  175. package/dist/detectors/nado-closed-list.js +21 -0
  176. package/dist/detectors/nado-closed-list.js.map +1 -0
  177. package/dist/detectors/name-variant.d.ts.map +1 -1
  178. package/dist/detectors/name-variant.js +82 -8
  179. package/dist/detectors/name-variant.js.map +1 -1
  180. package/dist/detectors/next-word.d.ts.map +1 -1
  181. package/dist/detectors/next-word.js +41 -8
  182. package/dist/detectors/next-word.js.map +1 -1
  183. package/dist/detectors/number-word-figure.d.ts +5 -0
  184. package/dist/detectors/number-word-figure.d.ts.map +1 -0
  185. package/dist/detectors/number-word-figure.js +32 -0
  186. package/dist/detectors/number-word-figure.js.map +1 -0
  187. package/dist/detectors/obligation-without-deadline.d.ts +39 -0
  188. package/dist/detectors/obligation-without-deadline.d.ts.map +1 -0
  189. package/dist/detectors/obligation-without-deadline.js +148 -0
  190. package/dist/detectors/obligation-without-deadline.js.map +1 -0
  191. package/dist/detectors/open-end-names.d.ts +23 -0
  192. package/dist/detectors/open-end-names.d.ts.map +1 -0
  193. package/dist/detectors/open-end-names.js +95 -0
  194. package/dist/detectors/open-end-names.js.map +1 -0
  195. package/dist/detectors/ordinal-run-gaps.d.ts +8 -0
  196. package/dist/detectors/ordinal-run-gaps.d.ts.map +1 -0
  197. package/dist/detectors/ordinal-run-gaps.js +80 -0
  198. package/dist/detectors/ordinal-run-gaps.js.map +1 -0
  199. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  200. package/dist/detectors/orthographic-variant.js +26 -9
  201. package/dist/detectors/orthographic-variant.js.map +1 -1
  202. package/dist/detectors/orthography.d.ts.map +1 -1
  203. package/dist/detectors/orthography.js +5 -0
  204. package/dist/detectors/orthography.js.map +1 -1
  205. package/dist/detectors/parameter-table.d.ts +3 -0
  206. package/dist/detectors/parameter-table.d.ts.map +1 -0
  207. package/dist/detectors/parameter-table.js +16 -0
  208. package/dist/detectors/parameter-table.js.map +1 -0
  209. package/dist/detectors/phone-number-variant.d.ts +3 -0
  210. package/dist/detectors/phone-number-variant.d.ts.map +1 -0
  211. package/dist/detectors/phone-number-variant.js +18 -0
  212. package/dist/detectors/phone-number-variant.js.map +1 -0
  213. package/dist/detectors/prerequisite-order.d.ts +3 -0
  214. package/dist/detectors/prerequisite-order.d.ts.map +1 -0
  215. package/dist/detectors/prerequisite-order.js +30 -0
  216. package/dist/detectors/prerequisite-order.js.map +1 -0
  217. package/dist/detectors/quote-unnamed-speaker.d.ts +3 -0
  218. package/dist/detectors/quote-unnamed-speaker.d.ts.map +1 -0
  219. package/dist/detectors/quote-unnamed-speaker.js +18 -0
  220. package/dist/detectors/quote-unnamed-speaker.js.map +1 -0
  221. package/dist/detectors/quote-without-source.d.ts +12 -2
  222. package/dist/detectors/quote-without-source.d.ts.map +1 -1
  223. package/dist/detectors/quote-without-source.js +45 -11
  224. package/dist/detectors/quote-without-source.js.map +1 -1
  225. package/dist/detectors/registry/amount-range.d.ts +3 -0
  226. package/dist/detectors/registry/amount-range.d.ts.map +1 -0
  227. package/dist/detectors/registry/amount-range.js +3 -0
  228. package/dist/detectors/registry/amount-range.js.map +1 -0
  229. package/dist/detectors/registry/arrival-before-departure.d.ts +3 -0
  230. package/dist/detectors/registry/arrival-before-departure.d.ts.map +1 -0
  231. package/dist/detectors/registry/arrival-before-departure.js +3 -0
  232. package/dist/detectors/registry/arrival-before-departure.js.map +1 -0
  233. package/dist/detectors/registry/date-outside-period.d.ts +3 -0
  234. package/dist/detectors/registry/date-outside-period.d.ts.map +1 -0
  235. package/dist/detectors/registry/date-outside-period.js +3 -0
  236. package/dist/detectors/registry/date-outside-period.js.map +1 -0
  237. package/dist/detectors/registry/default-values.d.ts +3 -0
  238. package/dist/detectors/registry/default-values.d.ts.map +1 -0
  239. package/dist/detectors/registry/default-values.js +3 -0
  240. package/dist/detectors/registry/default-values.js.map +1 -0
  241. package/dist/detectors/registry/deprecated-use.d.ts +3 -0
  242. package/dist/detectors/registry/deprecated-use.d.ts.map +1 -0
  243. package/dist/detectors/registry/deprecated-use.js +3 -0
  244. package/dist/detectors/registry/deprecated-use.js.map +1 -0
  245. package/dist/detectors/registry/due-date.d.ts +3 -0
  246. package/dist/detectors/registry/due-date.d.ts.map +1 -0
  247. package/dist/detectors/registry/due-date.js +3 -0
  248. package/dist/detectors/registry/due-date.js.map +1 -0
  249. package/dist/detectors/registry/kana-function-word.d.ts +3 -0
  250. package/dist/detectors/registry/kana-function-word.d.ts.map +1 -0
  251. package/dist/detectors/registry/kana-function-word.js +3 -0
  252. package/dist/detectors/registry/kana-function-word.js.map +1 -0
  253. package/dist/detectors/registry/line-amount.d.ts +3 -0
  254. package/dist/detectors/registry/line-amount.d.ts.map +1 -0
  255. package/dist/detectors/registry/line-amount.js +3 -0
  256. package/dist/detectors/registry/line-amount.js.map +1 -0
  257. package/dist/detectors/registry/nado-closed-list.d.ts +3 -0
  258. package/dist/detectors/registry/nado-closed-list.d.ts.map +1 -0
  259. package/dist/detectors/registry/nado-closed-list.js +3 -0
  260. package/dist/detectors/registry/nado-closed-list.js.map +1 -0
  261. package/dist/detectors/registry/number-word-figure.d.ts +3 -0
  262. package/dist/detectors/registry/number-word-figure.d.ts.map +1 -0
  263. package/dist/detectors/registry/number-word-figure.js +3 -0
  264. package/dist/detectors/registry/number-word-figure.js.map +1 -0
  265. package/dist/detectors/registry/obligation-without-deadline.d.ts +3 -0
  266. package/dist/detectors/registry/obligation-without-deadline.d.ts.map +1 -0
  267. package/dist/detectors/registry/obligation-without-deadline.js +3 -0
  268. package/dist/detectors/registry/obligation-without-deadline.js.map +1 -0
  269. package/dist/detectors/registry/parameter-table.d.ts +3 -0
  270. package/dist/detectors/registry/parameter-table.d.ts.map +1 -0
  271. package/dist/detectors/registry/parameter-table.js +3 -0
  272. package/dist/detectors/registry/parameter-table.js.map +1 -0
  273. package/dist/detectors/registry/phone-number-variant.d.ts +3 -0
  274. package/dist/detectors/registry/phone-number-variant.d.ts.map +1 -0
  275. package/dist/detectors/registry/phone-number-variant.js +3 -0
  276. package/dist/detectors/registry/phone-number-variant.js.map +1 -0
  277. package/dist/detectors/registry/prerequisite-order.d.ts +3 -0
  278. package/dist/detectors/registry/prerequisite-order.d.ts.map +1 -0
  279. package/dist/detectors/registry/prerequisite-order.js +3 -0
  280. package/dist/detectors/registry/prerequisite-order.js.map +1 -0
  281. package/dist/detectors/registry/quote-unnamed-speaker.d.ts +3 -0
  282. package/dist/detectors/registry/quote-unnamed-speaker.d.ts.map +1 -0
  283. package/dist/detectors/registry/quote-unnamed-speaker.js +3 -0
  284. package/dist/detectors/registry/quote-unnamed-speaker.js.map +1 -0
  285. package/dist/detectors/registry/tax-amount.d.ts +3 -0
  286. package/dist/detectors/registry/tax-amount.d.ts.map +1 -0
  287. package/dist/detectors/registry/tax-amount.js +3 -0
  288. package/dist/detectors/registry/tax-amount.js.map +1 -0
  289. package/dist/detectors/registry/time-order.d.ts +3 -0
  290. package/dist/detectors/registry/time-order.d.ts.map +1 -0
  291. package/dist/detectors/registry/time-order.js +3 -0
  292. package/dist/detectors/registry/time-order.js.map +1 -0
  293. package/dist/detectors/registry/ui-label.d.ts +3 -0
  294. package/dist/detectors/registry/ui-label.d.ts.map +1 -0
  295. package/dist/detectors/registry/ui-label.js +3 -0
  296. package/dist/detectors/registry/ui-label.js.map +1 -0
  297. package/dist/detectors/registry/undefined-call.d.ts +3 -0
  298. package/dist/detectors/registry/undefined-call.d.ts.map +1 -0
  299. package/dist/detectors/registry/undefined-call.js +3 -0
  300. package/dist/detectors/registry/undefined-call.js.map +1 -0
  301. package/dist/detectors/registry/undefined-term.d.ts +3 -0
  302. package/dist/detectors/registry/undefined-term.d.ts.map +1 -0
  303. package/dist/detectors/registry/undefined-term.js +3 -0
  304. package/dist/detectors/registry/undefined-term.js.map +1 -0
  305. package/dist/detectors/registry/version-order.d.ts +3 -0
  306. package/dist/detectors/registry/version-order.d.ts.map +1 -0
  307. package/dist/detectors/registry/version-order.js +3 -0
  308. package/dist/detectors/registry/version-order.js.map +1 -0
  309. package/dist/detectors/registry/warning-action.d.ts +3 -0
  310. package/dist/detectors/registry/warning-action.d.ts.map +1 -0
  311. package/dist/detectors/registry/warning-action.js +3 -0
  312. package/dist/detectors/registry/warning-action.js.map +1 -0
  313. package/dist/detectors/requirement-smell.d.ts.map +1 -1
  314. package/dist/detectors/requirement-smell.js +25 -8
  315. package/dist/detectors/requirement-smell.js.map +1 -1
  316. package/dist/detectors/structure-tree.d.ts +12 -4
  317. package/dist/detectors/structure-tree.d.ts.map +1 -1
  318. package/dist/detectors/structure-tree.js +31 -14
  319. package/dist/detectors/structure-tree.js.map +1 -1
  320. package/dist/detectors/superlative-scope.d.ts.map +1 -1
  321. package/dist/detectors/superlative-scope.js +11 -1
  322. package/dist/detectors/superlative-scope.js.map +1 -1
  323. package/dist/detectors/tax-amount.d.ts +3 -0
  324. package/dist/detectors/tax-amount.d.ts.map +1 -0
  325. package/dist/detectors/tax-amount.js +19 -0
  326. package/dist/detectors/tax-amount.js.map +1 -0
  327. package/dist/detectors/technical-docs.d.ts.map +1 -1
  328. package/dist/detectors/technical-docs.js +5 -1
  329. package/dist/detectors/technical-docs.js.map +1 -1
  330. package/dist/detectors/term-extension.d.ts +14 -0
  331. package/dist/detectors/term-extension.d.ts.map +1 -0
  332. package/dist/detectors/term-extension.js +67 -0
  333. package/dist/detectors/term-extension.js.map +1 -0
  334. package/dist/detectors/time-order.d.ts +4 -0
  335. package/dist/detectors/time-order.d.ts.map +1 -0
  336. package/dist/detectors/time-order.js +32 -0
  337. package/dist/detectors/time-order.js.map +1 -0
  338. package/dist/detectors/ui-label.d.ts +3 -0
  339. package/dist/detectors/ui-label.d.ts.map +1 -0
  340. package/dist/detectors/ui-label.js +16 -0
  341. package/dist/detectors/ui-label.js.map +1 -0
  342. package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
  343. package/dist/detectors/unbalanced-bracket.js +8 -13
  344. package/dist/detectors/unbalanced-bracket.js.map +1 -1
  345. package/dist/detectors/undefined-call.d.ts +3 -0
  346. package/dist/detectors/undefined-call.d.ts.map +1 -0
  347. package/dist/detectors/undefined-call.js +18 -0
  348. package/dist/detectors/undefined-call.js.map +1 -0
  349. package/dist/detectors/undefined-term.d.ts +22 -0
  350. package/dist/detectors/undefined-term.d.ts.map +1 -0
  351. package/dist/detectors/undefined-term.js +85 -0
  352. package/dist/detectors/undefined-term.js.map +1 -0
  353. package/dist/detectors/unknown-word.d.ts +1 -1
  354. package/dist/detectors/unknown-word.js +3 -3
  355. package/dist/detectors/unknown-word.js.map +1 -1
  356. package/dist/detectors/vague-deadline.d.ts +4 -0
  357. package/dist/detectors/vague-deadline.d.ts.map +1 -1
  358. package/dist/detectors/vague-deadline.js +3 -3
  359. package/dist/detectors/vague-deadline.js.map +1 -1
  360. package/dist/detectors/version-mismatch.d.ts.map +1 -1
  361. package/dist/detectors/version-mismatch.js +18 -1
  362. package/dist/detectors/version-mismatch.js.map +1 -1
  363. package/dist/detectors/version-order.d.ts +3 -0
  364. package/dist/detectors/version-order.d.ts.map +1 -0
  365. package/dist/detectors/version-order.js +43 -0
  366. package/dist/detectors/version-order.js.map +1 -0
  367. package/dist/detectors/warning-action.d.ts +3 -0
  368. package/dist/detectors/warning-action.d.ts.map +1 -0
  369. package/dist/detectors/warning-action.js +48 -0
  370. package/dist/detectors/warning-action.js.map +1 -0
  371. package/dist/facts/condition-pairs.d.ts +51 -0
  372. package/dist/facts/condition-pairs.d.ts.map +1 -0
  373. package/dist/facts/condition-pairs.js +203 -0
  374. package/dist/facts/condition-pairs.js.map +1 -0
  375. package/dist/facts/event-dates.d.ts +26 -0
  376. package/dist/facts/event-dates.d.ts.map +1 -0
  377. package/dist/facts/event-dates.js +38 -0
  378. package/dist/facts/event-dates.js.map +1 -0
  379. package/dist/facts/fact-scope.d.ts +2 -0
  380. package/dist/facts/fact-scope.d.ts.map +1 -1
  381. package/dist/facts/fact-scope.js +5 -0
  382. package/dist/facts/fact-scope.js.map +1 -1
  383. package/dist/facts/labelled-facts.d.ts +2 -0
  384. package/dist/facts/labelled-facts.d.ts.map +1 -1
  385. package/dist/facts/labelled-facts.js +9 -1
  386. package/dist/facts/labelled-facts.js.map +1 -1
  387. package/dist/facts/table-facts.d.ts +16 -0
  388. package/dist/facts/table-facts.d.ts.map +1 -1
  389. package/dist/facts/table-facts.js +2 -2
  390. package/dist/facts/table-facts.js.map +1 -1
  391. package/dist/grade/ai-score.d.ts +1 -1
  392. package/dist/grade/ai-score.d.ts.map +1 -1
  393. package/dist/grade/text.js +2 -2
  394. package/dist/grade/text.js.map +1 -1
  395. package/dist/heading-numbering.js +2 -2
  396. package/dist/heading-numbering.js.map +1 -1
  397. package/dist/html/fetch-page.d.ts +20 -0
  398. package/dist/html/fetch-page.d.ts.map +1 -0
  399. package/dist/html/fetch-page.js +51 -0
  400. package/dist/html/fetch-page.js.map +1 -0
  401. package/dist/html/fetched-text.d.ts +5 -0
  402. package/dist/html/fetched-text.d.ts.map +1 -0
  403. package/dist/html/fetched-text.js +25 -0
  404. package/dist/html/fetched-text.js.map +1 -0
  405. package/dist/html/html-content-block.d.ts +6 -0
  406. package/dist/html/html-content-block.d.ts.map +1 -0
  407. package/dist/html/html-content-block.js +86 -0
  408. package/dist/html/html-content-block.js.map +1 -0
  409. package/dist/html/html-elements.d.ts +41 -0
  410. package/dist/html/html-elements.d.ts.map +1 -0
  411. package/dist/html/html-elements.js +91 -0
  412. package/dist/html/html-elements.js.map +1 -0
  413. package/dist/html/html-footnote-marks.d.ts +2 -0
  414. package/dist/html/html-footnote-marks.d.ts.map +1 -0
  415. package/dist/html/html-footnote-marks.js +15 -0
  416. package/dist/html/html-footnote-marks.js.map +1 -0
  417. package/dist/html/html-heading-links.d.ts +6 -0
  418. package/dist/html/html-heading-links.d.ts.map +1 -0
  419. package/dist/html/html-heading-links.js +71 -0
  420. package/dist/html/html-heading-links.js.map +1 -0
  421. package/dist/html/html-lost-tags.d.ts +3 -0
  422. package/dist/html/html-lost-tags.d.ts.map +1 -0
  423. package/dist/html/html-lost-tags.js +11 -0
  424. package/dist/html/html-lost-tags.js.map +1 -0
  425. package/dist/html/html-markdown.d.ts +2 -0
  426. package/dist/html/html-markdown.d.ts.map +1 -0
  427. package/dist/html/html-markdown.js +347 -0
  428. package/dist/html/html-markdown.js.map +1 -0
  429. package/dist/html/html-preformatted.d.ts +17 -0
  430. package/dist/html/html-preformatted.d.ts.map +1 -0
  431. package/dist/html/html-preformatted.js +82 -0
  432. package/dist/html/html-preformatted.js.map +1 -0
  433. package/dist/html/html-reader-only.d.ts +6 -0
  434. package/dist/html/html-reader-only.d.ts.map +1 -0
  435. package/dist/html/html-reader-only.js +63 -0
  436. package/dist/html/html-reader-only.js.map +1 -0
  437. package/dist/html/html-run-in-headings.d.ts +2 -0
  438. package/dist/html/html-run-in-headings.d.ts.map +1 -0
  439. package/dist/html/html-run-in-headings.js +36 -0
  440. package/dist/html/html-run-in-headings.js.map +1 -0
  441. package/dist/html/html-tables.d.ts +3 -0
  442. package/dist/html/html-tables.d.ts.map +1 -0
  443. package/dist/html/html-tables.js +58 -0
  444. package/dist/html/html-tables.js.map +1 -0
  445. package/dist/html/html-widgets.d.ts +3 -0
  446. package/dist/html/html-widgets.d.ts.map +1 -0
  447. package/dist/html/html-widgets.js +71 -0
  448. package/dist/html/html-widgets.js.map +1 -0
  449. package/dist/html/markup-text.d.ts +5 -0
  450. package/dist/html/markup-text.d.ts.map +1 -0
  451. package/dist/html/markup-text.js +32 -0
  452. package/dist/html/markup-text.js.map +1 -0
  453. package/dist/html/page-document.d.ts +9 -0
  454. package/dist/html/page-document.d.ts.map +1 -0
  455. package/dist/html/page-document.js +19 -0
  456. package/dist/html/page-document.js.map +1 -0
  457. package/dist/inline-count.d.ts +19 -0
  458. package/dist/inline-count.d.ts.map +1 -0
  459. package/dist/inline-count.js +109 -0
  460. package/dist/inline-count.js.map +1 -0
  461. package/dist/kana-spelling.d.ts +5 -0
  462. package/dist/kana-spelling.d.ts.map +1 -1
  463. package/dist/kana-spelling.js +5 -0
  464. package/dist/kana-spelling.js.map +1 -1
  465. package/dist/location-part.d.ts +13 -0
  466. package/dist/location-part.d.ts.map +1 -0
  467. package/dist/location-part.js +24 -0
  468. package/dist/location-part.js.map +1 -0
  469. package/dist/nado-closed-list.d.ts +20 -0
  470. package/dist/nado-closed-list.d.ts.map +1 -0
  471. package/dist/nado-closed-list.js +72 -0
  472. package/dist/nado-closed-list.js.map +1 -0
  473. package/dist/name-cue.d.ts +17 -0
  474. package/dist/name-cue.d.ts.map +1 -0
  475. package/dist/name-cue.js +29 -0
  476. package/dist/name-cue.js.map +1 -0
  477. package/dist/name-variants.d.ts +23 -1
  478. package/dist/name-variants.d.ts.map +1 -1
  479. package/dist/name-variants.js +39 -8
  480. package/dist/name-variants.js.map +1 -1
  481. package/dist/paragraph-runs.d.ts +6 -1
  482. package/dist/paragraph-runs.d.ts.map +1 -1
  483. package/dist/paragraph-runs.js +9 -2
  484. package/dist/paragraph-runs.js.map +1 -1
  485. package/dist/parameter-table.d.ts +19 -0
  486. package/dist/parameter-table.d.ts.map +1 -0
  487. package/dist/parameter-table.js +191 -0
  488. package/dist/parameter-table.js.map +1 -0
  489. package/dist/phone-numbers.d.ts +23 -0
  490. package/dist/phone-numbers.d.ts.map +1 -0
  491. package/dist/phone-numbers.js +83 -0
  492. package/dist/phone-numbers.js.map +1 -0
  493. package/dist/place-names.d.ts +55 -0
  494. package/dist/place-names.d.ts.map +1 -0
  495. package/dist/place-names.js +196 -0
  496. package/dist/place-names.js.map +1 -0
  497. package/dist/plugin.d.ts +4 -0
  498. package/dist/plugin.d.ts.map +1 -1
  499. package/dist/prerequisite-order.d.ts +16 -0
  500. package/dist/prerequisite-order.d.ts.map +1 -0
  501. package/dist/prerequisite-order.js +29 -0
  502. package/dist/prerequisite-order.js.map +1 -0
  503. package/dist/profile/parse.d.ts.map +1 -1
  504. package/dist/profile/parse.js +10 -1
  505. package/dist/profile/parse.js.map +1 -1
  506. package/dist/reasons.d.ts +2 -0
  507. package/dist/reasons.d.ts.map +1 -1
  508. package/dist/reasons.js +2 -0
  509. package/dist/reasons.js.map +1 -1
  510. package/dist/render/rules-json.d.ts.map +1 -1
  511. package/dist/render/rules-json.js +4 -0
  512. package/dist/render/rules-json.js.map +1 -1
  513. package/dist/render/rules-table.d.ts.map +1 -1
  514. package/dist/render/rules-table.js +6 -2
  515. package/dist/render/rules-table.js.map +1 -1
  516. package/dist/rule-genres.d.ts +5 -2
  517. package/dist/rule-genres.d.ts.map +1 -1
  518. package/dist/rule-genres.js +2 -0
  519. package/dist/rule-genres.js.map +1 -1
  520. package/dist/rule-load.d.ts.map +1 -1
  521. package/dist/rule-load.js +2 -1
  522. package/dist/rule-load.js.map +1 -1
  523. package/dist/run.d.ts.map +1 -1
  524. package/dist/run.js +5 -1
  525. package/dist/run.js.map +1 -1
  526. package/dist/spelling.d.ts +2 -0
  527. package/dist/spelling.d.ts.map +1 -1
  528. package/dist/spelling.js +6 -0
  529. package/dist/spelling.js.map +1 -1
  530. package/dist/structure/action-due.d.ts +21 -0
  531. package/dist/structure/action-due.d.ts.map +1 -0
  532. package/dist/structure/action-due.js +126 -0
  533. package/dist/structure/action-due.js.map +1 -0
  534. package/dist/structure/amount-range.d.ts +30 -0
  535. package/dist/structure/amount-range.d.ts.map +1 -0
  536. package/dist/structure/amount-range.js +153 -0
  537. package/dist/structure/amount-range.js.map +1 -0
  538. package/dist/structure/amount-scale.d.ts +6 -0
  539. package/dist/structure/amount-scale.d.ts.map +1 -1
  540. package/dist/structure/amount-scale.js +13 -0
  541. package/dist/structure/amount-scale.js.map +1 -1
  542. package/dist/structure/cite.d.ts +5 -2
  543. package/dist/structure/cite.d.ts.map +1 -1
  544. package/dist/structure/cite.js +20 -1
  545. package/dist/structure/cite.js.map +1 -1
  546. package/dist/structure/counted-amounts.d.ts +12 -0
  547. package/dist/structure/counted-amounts.d.ts.map +1 -0
  548. package/dist/structure/counted-amounts.js +30 -0
  549. package/dist/structure/counted-amounts.js.map +1 -0
  550. package/dist/structure/date-order.d.ts +24 -3
  551. package/dist/structure/date-order.d.ts.map +1 -1
  552. package/dist/structure/date-order.js +49 -17
  553. package/dist/structure/date-order.js.map +1 -1
  554. package/dist/structure/date-outside-period.d.ts +27 -0
  555. package/dist/structure/date-outside-period.d.ts.map +1 -0
  556. package/dist/structure/date-outside-period.js +86 -0
  557. package/dist/structure/date-outside-period.js.map +1 -0
  558. package/dist/structure/definition-use.d.ts +5 -2
  559. package/dist/structure/definition-use.d.ts.map +1 -1
  560. package/dist/structure/definition-use.js +11 -3
  561. package/dist/structure/definition-use.js.map +1 -1
  562. package/dist/structure/due-date.d.ts +19 -0
  563. package/dist/structure/due-date.d.ts.map +1 -0
  564. package/dist/structure/due-date.js +30 -0
  565. package/dist/structure/due-date.js.map +1 -0
  566. package/dist/structure/heading-runs.d.ts +9 -0
  567. package/dist/structure/heading-runs.d.ts.map +1 -0
  568. package/dist/structure/heading-runs.js +23 -0
  569. package/dist/structure/heading-runs.js.map +1 -0
  570. package/dist/structure/install-pin.d.ts +46 -0
  571. package/dist/structure/install-pin.d.ts.map +1 -0
  572. package/dist/structure/install-pin.js +85 -0
  573. package/dist/structure/install-pin.js.map +1 -0
  574. package/dist/structure/leg-times.d.ts +34 -0
  575. package/dist/structure/leg-times.d.ts.map +1 -0
  576. package/dist/structure/leg-times.js +135 -0
  577. package/dist/structure/leg-times.js.map +1 -0
  578. package/dist/structure/line-amount-unit.d.ts +24 -0
  579. package/dist/structure/line-amount-unit.d.ts.map +1 -0
  580. package/dist/structure/line-amount-unit.js +24 -0
  581. package/dist/structure/line-amount-unit.js.map +1 -0
  582. package/dist/structure/line-amount.d.ts +40 -0
  583. package/dist/structure/line-amount.d.ts.map +1 -0
  584. package/dist/structure/line-amount.js +118 -0
  585. package/dist/structure/line-amount.js.map +1 -0
  586. package/dist/structure/number-word-figure.d.ts +37 -0
  587. package/dist/structure/number-word-figure.d.ts.map +1 -0
  588. package/dist/structure/number-word-figure.js +151 -0
  589. package/dist/structure/number-word-figure.js.map +1 -0
  590. package/dist/structure/numbering.d.ts +1 -0
  591. package/dist/structure/numbering.d.ts.map +1 -1
  592. package/dist/structure/numbering.js +3 -0
  593. package/dist/structure/numbering.js.map +1 -1
  594. package/dist/structure/ordinal-runs.d.ts +45 -0
  595. package/dist/structure/ordinal-runs.d.ts.map +1 -0
  596. package/dist/structure/ordinal-runs.js +78 -0
  597. package/dist/structure/ordinal-runs.js.map +1 -0
  598. package/dist/structure/percent-sum-prose.d.ts +1 -1
  599. package/dist/structure/percent-sum-prose.d.ts.map +1 -1
  600. package/dist/structure/percent-sum-prose.js +45 -3
  601. package/dist/structure/percent-sum-prose.js.map +1 -1
  602. package/dist/structure/percent-sum.d.ts +8 -0
  603. package/dist/structure/percent-sum.d.ts.map +1 -1
  604. package/dist/structure/percent-sum.js +8 -1
  605. package/dist/structure/percent-sum.js.map +1 -1
  606. package/dist/structure/release-list.d.ts +9 -0
  607. package/dist/structure/release-list.d.ts.map +1 -0
  608. package/dist/structure/release-list.js +46 -0
  609. package/dist/structure/release-list.js.map +1 -0
  610. package/dist/structure/share-column.d.ts +7 -0
  611. package/dist/structure/share-column.d.ts.map +1 -0
  612. package/dist/structure/share-column.js +22 -0
  613. package/dist/structure/share-column.js.map +1 -0
  614. package/dist/structure/stated-period.d.ts +31 -0
  615. package/dist/structure/stated-period.d.ts.map +1 -0
  616. package/dist/structure/stated-period.js +127 -0
  617. package/dist/structure/stated-period.js.map +1 -0
  618. package/dist/structure/tax.d.ts +25 -0
  619. package/dist/structure/tax.d.ts.map +1 -0
  620. package/dist/structure/tax.js +86 -0
  621. package/dist/structure/tax.js.map +1 -0
  622. package/dist/structure/time-marks.d.ts +58 -0
  623. package/dist/structure/time-marks.d.ts.map +1 -0
  624. package/dist/structure/time-marks.js +74 -0
  625. package/dist/structure/time-marks.js.map +1 -0
  626. package/dist/structure/time-order.d.ts +21 -0
  627. package/dist/structure/time-order.d.ts.map +1 -0
  628. package/dist/structure/time-order.js +108 -0
  629. package/dist/structure/time-order.js.map +1 -0
  630. package/dist/structure/title-lines.d.ts +8 -0
  631. package/dist/structure/title-lines.d.ts.map +1 -0
  632. package/dist/structure/title-lines.js +27 -0
  633. package/dist/structure/title-lines.js.map +1 -0
  634. package/dist/structure/total.d.ts.map +1 -1
  635. package/dist/structure/total.js +3 -1
  636. package/dist/structure/total.js.map +1 -1
  637. package/dist/structure/version-mismatch.d.ts +1 -5
  638. package/dist/structure/version-mismatch.d.ts.map +1 -1
  639. package/dist/structure/version-mismatch.js +65 -12
  640. package/dist/structure/version-mismatch.js.map +1 -1
  641. package/dist/structure/version-order.d.ts +23 -0
  642. package/dist/structure/version-order.d.ts.map +1 -0
  643. package/dist/structure/version-order.js +67 -0
  644. package/dist/structure/version-order.js.map +1 -0
  645. package/dist/table-text.d.ts +9 -0
  646. package/dist/table-text.d.ts.map +1 -0
  647. package/dist/table-text.js +36 -0
  648. package/dist/table-text.js.map +1 -0
  649. package/dist/ui-labels.d.ts +16 -0
  650. package/dist/ui-labels.d.ts.map +1 -0
  651. package/dist/ui-labels.js +42 -0
  652. package/dist/ui-labels.js.map +1 -0
  653. package/dist/undefined-call.d.ts +13 -0
  654. package/dist/undefined-call.d.ts.map +1 -0
  655. package/dist/undefined-call.js +55 -0
  656. package/dist/undefined-call.js.map +1 -0
  657. package/dist/unnamed-speaker.d.ts +23 -0
  658. package/dist/unnamed-speaker.d.ts.map +1 -0
  659. package/dist/unnamed-speaker.js +176 -0
  660. package/dist/unnamed-speaker.js.map +1 -0
  661. package/dist/warning-action.d.ts +22 -0
  662. package/dist/warning-action.d.ts.map +1 -0
  663. package/dist/warning-action.js +58 -0
  664. package/dist/warning-action.js.map +1 -0
  665. package/genres.yaml +2 -0
  666. package/package.json +4 -3
  667. package/profiles/statute.yaml +8 -0
  668. package/rules/agreement-slip.yaml +2 -2
  669. package/rules/amount-range-reversed.yaml +52 -0
  670. package/rules/amount-scale-consistency.yaml +4 -4
  671. package/rules/announced-count-mismatch.yaml +9 -4
  672. package/rules/arrival-before-departure.yaml +48 -0
  673. package/rules/connective-hierarchy.yaml +3 -3
  674. package/rules/currency-notation-consistency.yaml +2 -2
  675. package/rules/date-order.yaml +9 -4
  676. package/rules/date-outside-period.yaml +64 -0
  677. package/rules/default-value-mismatch.yaml +79 -0
  678. package/rules/defined-term-form.yaml +9 -7
  679. package/rules/deprecated-option-used.yaml +78 -0
  680. package/rules/doubled-nado.yaml +28 -12
  681. package/rules/due-before-issue.yaml +68 -0
  682. package/rules/duplicate-definition.yaml +2 -2
  683. package/rules/duration-mismatch.yaml +12 -4
  684. package/rules/heading-echo.yaml +2 -2
  685. package/rules/hyphen-as-dash.yaml +2 -2
  686. package/rules/kana-function-word.yaml +58 -0
  687. package/rules/latin-spacing.yaml +6 -5
  688. package/rules/line-amount-mismatch.yaml +58 -0
  689. package/rules/nado-closed-list.yaml +77 -0
  690. package/rules/name-variant.yaml +14 -2
  691. package/rules/number-word-figure-mismatch.yaml +76 -0
  692. package/rules/numbering-gap.yaml +2 -2
  693. package/rules/obligation-without-deadline.yaml +95 -0
  694. package/rules/one-sentence-paragraph-run.yaml +2 -3
  695. package/rules/parameter-table-mismatch.yaml +90 -0
  696. package/rules/percent-sum-mismatch.yaml +2 -2
  697. package/rules/phone-number-variant.yaml +68 -0
  698. package/rules/prerequisite-after-step.yaml +78 -0
  699. package/rules/quote-unnamed-speaker.yaml +67 -0
  700. package/rules/quote-without-source.yaml +6 -6
  701. package/rules/requirement-smell.yaml +3 -3
  702. package/rules/sentence-initial-conjunction-run.yaml +13 -7
  703. package/rules/summary-fact-mismatch.yaml +4 -4
  704. package/rules/tax-mismatch.yaml +71 -0
  705. package/rules/time-order.yaml +65 -0
  706. package/rules/title-length.yaml +2 -2
  707. package/rules/ui-label-variant.yaml +70 -0
  708. package/rules/unbalanced-bracket.yaml +4 -4
  709. package/rules/uncomparable-graded.yaml +29 -10
  710. package/rules/undefined-function-call.yaml +77 -0
  711. package/rules/undefined-term.yaml +72 -0
  712. package/rules/unknown-word.yaml +2 -2
  713. package/rules/unqualified-superlative.yaml +2 -2
  714. package/rules/use-before-definition.yaml +2 -2
  715. package/rules/version-mismatch.yaml +12 -4
  716. package/rules/version-order.yaml +85 -0
  717. package/rules/very-adjective.yaml +31 -13
  718. package/rules/warning-without-action.yaml +64 -0
  719. package/rules/wordy-phrase.yaml +27 -9
  720. package/src/ai-score/of-document.ts +19 -9
  721. package/src/ai-score/render.ts +24 -4
  722. package/src/ai-score/score.ts +24 -3
  723. package/src/ai-score/signals.ts +12 -2
  724. package/src/ai-score/text.ts +7 -2
  725. package/src/announced-count.ts +19 -12
  726. package/src/check-source.ts +11 -2
  727. package/src/cli-text.ts +38 -16
  728. package/src/cli.ts +2 -1
  729. package/src/commands/cite-claims.ts +103 -0
  730. package/src/commands/cite-page.ts +61 -0
  731. package/src/commands/cite-scaffold.ts +27 -0
  732. package/src/commands/cite.ts +127 -58
  733. package/src/company-names.ts +202 -0
  734. package/src/default-values.ts +158 -0
  735. package/src/deprecated-use.ts +122 -0
  736. package/src/derived/stays.ts +145 -0
  737. package/src/detectors/acronym-context.ts +10 -2
  738. package/src/detectors/address-word.ts +9 -0
  739. package/src/detectors/agreement-slip.ts +7 -1
  740. package/src/detectors/ai-phrasing.ts +6 -1
  741. package/src/detectors/amount-range.ts +54 -0
  742. package/src/detectors/amount-scale.ts +50 -17
  743. package/src/detectors/announced-count.ts +29 -11
  744. package/src/detectors/bare-comparative.ts +7 -2
  745. package/src/detectors/block-quotation.ts +95 -0
  746. package/src/detectors/bracket-label.ts +58 -0
  747. package/src/detectors/citation-entry.ts +20 -5
  748. package/src/detectors/code-before.ts +14 -0
  749. package/src/detectors/connective-hierarchy.ts +39 -11
  750. package/src/detectors/currency-notation.ts +2 -1
  751. package/src/detectors/date-outside-period.ts +38 -0
  752. package/src/detectors/default-values.ts +17 -0
  753. package/src/detectors/defined-term-form.ts +84 -15
  754. package/src/detectors/definition-use.ts +10 -2
  755. package/src/detectors/deprecated-use.ts +17 -0
  756. package/src/detectors/derived-numbers.ts +106 -15
  757. package/src/detectors/document-shape.ts +6 -1
  758. package/src/detectors/due-date.ts +47 -0
  759. package/src/detectors/en-shape.ts +27 -11
  760. package/src/detectors/fact-consistency.ts +95 -3
  761. package/src/detectors/heading-echo.ts +11 -1
  762. package/src/detectors/kana-function-word.ts +71 -0
  763. package/src/detectors/line-amount.ts +33 -0
  764. package/src/detectors/location-pointer.ts +30 -0
  765. package/src/detectors/mark-shape.ts +18 -1
  766. package/src/detectors/nado-closed-list.ts +25 -0
  767. package/src/detectors/name-variant.ts +106 -13
  768. package/src/detectors/next-word.ts +56 -9
  769. package/src/detectors/number-word-figure.ts +43 -0
  770. package/src/detectors/obligation-without-deadline.ts +192 -0
  771. package/src/detectors/open-end-names.ts +140 -0
  772. package/src/detectors/ordinal-run-gaps.ts +101 -0
  773. package/src/detectors/orthographic-variant.ts +39 -14
  774. package/src/detectors/orthography.ts +6 -1
  775. package/src/detectors/parameter-table.ts +17 -0
  776. package/src/detectors/phone-number-variant.ts +18 -0
  777. package/src/detectors/prerequisite-order.ts +35 -0
  778. package/src/detectors/quote-unnamed-speaker.ts +19 -0
  779. package/src/detectors/quote-without-source.ts +57 -10
  780. package/src/detectors/registry/amount-range.ts +4 -0
  781. package/src/detectors/registry/arrival-before-departure.ts +4 -0
  782. package/src/detectors/registry/date-outside-period.ts +4 -0
  783. package/src/detectors/registry/default-values.ts +4 -0
  784. package/src/detectors/registry/deprecated-use.ts +4 -0
  785. package/src/detectors/registry/due-date.ts +4 -0
  786. package/src/detectors/registry/kana-function-word.ts +4 -0
  787. package/src/detectors/registry/line-amount.ts +4 -0
  788. package/src/detectors/registry/nado-closed-list.ts +4 -0
  789. package/src/detectors/registry/number-word-figure.ts +4 -0
  790. package/src/detectors/registry/obligation-without-deadline.ts +4 -0
  791. package/src/detectors/registry/parameter-table.ts +4 -0
  792. package/src/detectors/registry/phone-number-variant.ts +4 -0
  793. package/src/detectors/registry/prerequisite-order.ts +4 -0
  794. package/src/detectors/registry/quote-unnamed-speaker.ts +4 -0
  795. package/src/detectors/registry/tax-amount.ts +4 -0
  796. package/src/detectors/registry/time-order.ts +4 -0
  797. package/src/detectors/registry/ui-label.ts +4 -0
  798. package/src/detectors/registry/undefined-call.ts +4 -0
  799. package/src/detectors/registry/undefined-term.ts +4 -0
  800. package/src/detectors/registry/version-order.ts +4 -0
  801. package/src/detectors/registry/warning-action.ts +4 -0
  802. package/src/detectors/requirement-smell.ts +29 -9
  803. package/src/detectors/structure-tree.ts +43 -21
  804. package/src/detectors/superlative-scope.ts +13 -1
  805. package/src/detectors/tax-amount.ts +25 -0
  806. package/src/detectors/technical-docs.ts +7 -1
  807. package/src/detectors/term-extension.ts +67 -0
  808. package/src/detectors/time-order.ts +49 -0
  809. package/src/detectors/ui-label.ts +17 -0
  810. package/src/detectors/unbalanced-bracket.ts +7 -14
  811. package/src/detectors/undefined-call.ts +19 -0
  812. package/src/detectors/undefined-term.ts +103 -0
  813. package/src/detectors/unknown-word.ts +3 -3
  814. package/src/detectors/vague-deadline.ts +3 -3
  815. package/src/detectors/version-mismatch.ts +26 -5
  816. package/src/detectors/version-order.ts +50 -0
  817. package/src/detectors/warning-action.ts +49 -0
  818. package/src/facts/condition-pairs.ts +289 -0
  819. package/src/facts/event-dates.ts +63 -0
  820. package/src/facts/fact-scope.ts +6 -0
  821. package/src/facts/labelled-facts.ts +13 -1
  822. package/src/facts/table-facts.ts +3 -3
  823. package/src/grade/ai-score.ts +1 -1
  824. package/src/grade/text.ts +2 -2
  825. package/src/heading-numbering.ts +2 -2
  826. package/src/html/fetch-page.ts +64 -0
  827. package/src/html/fetched-text.ts +32 -0
  828. package/src/html/html-content-block.ts +107 -0
  829. package/src/html/html-elements.ts +127 -0
  830. package/src/html/html-footnote-marks.ts +20 -0
  831. package/src/html/html-heading-links.ts +93 -0
  832. package/src/html/html-lost-tags.ts +14 -0
  833. package/src/html/html-markdown.ts +481 -0
  834. package/src/html/html-preformatted.ts +110 -0
  835. package/src/html/html-reader-only.ts +82 -0
  836. package/src/html/html-run-in-headings.ts +43 -0
  837. package/src/html/html-tables.ts +76 -0
  838. package/src/html/html-widgets.ts +114 -0
  839. package/src/html/markup-text.ts +35 -0
  840. package/src/html/page-document.ts +22 -0
  841. package/src/inline-count.ts +146 -0
  842. package/src/kana-spelling.ts +7 -0
  843. package/src/location-part.ts +30 -0
  844. package/src/nado-closed-list.ts +106 -0
  845. package/src/name-cue.ts +35 -0
  846. package/src/name-variants.ts +57 -11
  847. package/src/paragraph-runs.ts +12 -2
  848. package/src/parameter-table.ts +208 -0
  849. package/src/phone-numbers.ts +98 -0
  850. package/src/place-names.ts +248 -0
  851. package/src/plugin.ts +4 -0
  852. package/src/prerequisite-order.ts +39 -0
  853. package/src/profile/parse.ts +10 -1
  854. package/src/reasons.ts +4 -0
  855. package/src/render/rules-json.ts +4 -0
  856. package/src/render/rules-table.ts +6 -3
  857. package/src/rule-genres.ts +5 -2
  858. package/src/rule-load.ts +3 -2
  859. package/src/run.ts +3 -1
  860. package/src/spelling.ts +8 -0
  861. package/src/structure/action-due.ts +179 -0
  862. package/src/structure/amount-range.ts +219 -0
  863. package/src/structure/amount-scale.ts +18 -0
  864. package/src/structure/cite.ts +21 -2
  865. package/src/structure/counted-amounts.ts +42 -0
  866. package/src/structure/date-order.ts +72 -22
  867. package/src/structure/date-outside-period.ts +127 -0
  868. package/src/structure/definition-use.ts +24 -3
  869. package/src/structure/due-date.ts +46 -0
  870. package/src/structure/heading-runs.ts +24 -0
  871. package/src/structure/install-pin.ts +115 -0
  872. package/src/structure/leg-times.ts +198 -0
  873. package/src/structure/line-amount-unit.ts +35 -0
  874. package/src/structure/line-amount.ts +162 -0
  875. package/src/structure/number-word-figure.ts +199 -0
  876. package/src/structure/numbering.ts +3 -0
  877. package/src/structure/ordinal-runs.ts +107 -0
  878. package/src/structure/percent-sum-prose.ts +46 -3
  879. package/src/structure/percent-sum.ts +16 -2
  880. package/src/structure/release-list.ts +69 -0
  881. package/src/structure/share-column.ts +25 -0
  882. package/src/structure/stated-period.ts +161 -0
  883. package/src/structure/tax.ts +114 -0
  884. package/src/structure/time-marks.ts +127 -0
  885. package/src/structure/time-order.ts +140 -0
  886. package/src/structure/title-lines.ts +33 -0
  887. package/src/structure/total.ts +5 -1
  888. package/src/structure/version-mismatch.ts +67 -13
  889. package/src/structure/version-order.ts +84 -0
  890. package/src/table-text.ts +39 -0
  891. package/src/ui-labels.ts +55 -0
  892. package/src/undefined-call.ts +65 -0
  893. package/src/unnamed-speaker.ts +224 -0
  894. package/src/warning-action.ts +73 -0
  895. package/styles/koyobun.yaml +7 -4
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { kanaFunctionWord } from "../kana-function-word.ts";
3
+
4
+ export const detector: Detector = kanaFunctionWord;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { lineAmount } from "../line-amount.ts";
3
+
4
+ export const detector: Detector = lineAmount;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { nadoClosedList } from "../nado-closed-list.ts";
3
+
4
+ export const detector: Detector = nadoClosedList;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { numberWordFigure } from "../number-word-figure.ts";
3
+
4
+ export const detector: Detector = numberWordFigure;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { obligationWithoutDeadline } from "../obligation-without-deadline.ts";
3
+
4
+ export const detector: Detector = obligationWithoutDeadline;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { parameterTable } from "../parameter-table.ts";
3
+
4
+ export const detector: Detector = parameterTable;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { phoneNumberVariant } from "../phone-number-variant.ts";
3
+
4
+ export const detector: Detector = phoneNumberVariant;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { prerequisiteOrder } from "../prerequisite-order.ts";
3
+
4
+ export const detector: Detector = prerequisiteOrder;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { quoteUnnamedSpeaker } from "../quote-unnamed-speaker.ts";
3
+
4
+ export const detector: Detector = quoteUnnamedSpeaker;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { taxAmount } from "../tax-amount.ts";
3
+
4
+ export const detector: Detector = taxAmount;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { timeOrder } from "../time-order.ts";
3
+
4
+ export const detector: Detector = timeOrder;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { uiLabel } from "../ui-label.ts";
3
+
4
+ export const detector: Detector = uiLabel;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { undefinedCall } from "../undefined-call.ts";
3
+
4
+ export const detector: Detector = undefinedCall;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { undefinedTerm } from "../undefined-term.ts";
3
+
4
+ export const detector: Detector = undefinedTerm;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { versionOrder } from "../version-order.ts";
3
+
4
+ export const detector: Detector = versionOrder;
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../../plugin.ts";
2
+ import { warningAction } from "../warning-action.ts";
3
+
4
+ export const detector: Detector = warningAction;
@@ -1,20 +1,25 @@
1
1
  import type { Detector, Finding, Lexicon, LexiconEntry, ProseDocument, Sentence } from "../plugin.ts";
2
2
  import { entryCloses, entryIn, entryRanges } from "./lexicon-match.ts";
3
+ import { openEndAt, openEndNames, type OpenEndNames } from "./open-end-names.ts";
3
4
 
4
5
  // Requirements smells (Femmer et al. 2017; Berry et al. 2003; ISO/IEC/IEEE 29148): a loophole, an open-ended list and
5
6
  // "and/or", in a sentence that states a requirement. What makes a sentence a requirement, and each smell's words, come
6
7
  // from the language's lexicons; this file knows neither language.
7
8
 
9
+ const OPEN_END = "requirement-open-end";
10
+
8
11
  /** Each smell: the lexicon of its words, and the finding's variant (the rule's messages). */
9
12
  const SMELLS = [
10
13
  { lexicon: "requirement-loophole", variant: "loophole" },
11
- { lexicon: "requirement-open-end", variant: "open-end" },
14
+ { lexicon: OPEN_END, variant: "open-end" },
12
15
  { lexicon: "requirement-either", variant: "either" },
13
16
  ] as const;
14
17
 
15
18
  const MARKERS = "requirement-marker";
16
19
  /** Sentence ends that look like a marker and are not one (「…のこと。」 defines a term). The language may have none. */
17
20
  const NOT_MARKERS = "requirement-not-marker";
21
+ /** The language's words of a definition (をいう, means): a name defined with them closes its own list (銀行等(…をいう。)). */
22
+ const STATEMENTS = "definition-statement";
18
23
 
19
24
  /** A marker with position: after counts only at the end of the sentence (「…できること。」); any other, anywhere in it. */
20
25
  const isMarkedBy = (sentence: Sentence, entry: LexiconEntry): boolean => (entry.position === "after" ? entryCloses(sentence, entry) : entryIn(sentence, entry));
@@ -28,25 +33,40 @@ const offsetOf = (sentence: Sentence, entry: LexiconEntry): number => {
28
33
  return range === undefined ? sentence.span.start : (sentence.tokens?.[range.start]?.span.start ?? sentence.span.start);
29
34
  };
30
35
 
31
- const findingOf = (sentence: Sentence, entry: LexiconEntry, variant: string): Finding => ({
36
+ const findingOf = (sentence: Sentence, entry: LexiconEntry, variant: string, offset: number): Finding => ({
32
37
  rule: "",
33
38
  severity: "warning",
34
39
  line: 0,
35
40
  column: 0,
36
41
  quote: sentence.text.trim(),
37
42
  variant,
38
- values: { matched: entry.pattern, offset: offsetOf(sentence, entry) },
43
+ values: { matched: entry.pattern, offset },
39
44
  });
40
45
 
46
+ /** Where the word stands as a smell. An open-end word inside a name the document gives (業務執行取締役等) is none; without tokens it cannot be told apart. */
47
+ const smellAt = (doc: ProseDocument, sentence: Sentence, entry: LexiconEntry, lexicon: string, names: () => OpenEndNames): number | undefined => {
48
+ if (!entryIn(sentence, entry)) return undefined;
49
+ const tokenized = sentence.tokens !== undefined && (entry.tokens?.length ?? 0) > 0;
50
+ return lexicon === OPEN_END && tokenized ? openEndAt(doc, sentence, entry, names()) : offsetOf(sentence, entry);
51
+ };
52
+
41
53
  /** The first word of each smell in one requirement sentence: one finding per smell, not per word. */
42
- const smellsIn = (sentence: Sentence, lexicons: ProseDocument["lexicons"]): Finding[] =>
43
- SMELLS.flatMap(({ lexicon, variant }) => {
44
- const entry = (lexicons[lexicon] ?? []).find((candidate) => entryIn(sentence, candidate));
45
- return entry === undefined ? [] : [findingOf(sentence, entry, variant)];
46
- });
54
+ const smellsIn = (doc: ProseDocument, sentence: Sentence, names: () => OpenEndNames): Finding[] =>
55
+ SMELLS.flatMap(({ lexicon, variant }) =>
56
+ (doc.lexicons[lexicon] ?? [])
57
+ .flatMap((entry) => {
58
+ const offset = smellAt(doc, sentence, entry, lexicon, names);
59
+ return offset === undefined ? [] : [findingOf(sentence, entry, variant, offset)];
60
+ })
61
+ .slice(0, 1),
62
+ );
47
63
 
48
64
  export const requirementSmell: Detector = (doc): Finding[] => {
49
65
  const markers = doc.lexicons[MARKERS] ?? [];
50
66
  const notMarkers = doc.lexicons[NOT_MARKERS] ?? [];
51
- return doc.sentences.filter((sentence) => isRequirement(sentence, markers, notMarkers)).flatMap((sentence) => smellsIn(sentence, doc.lexicons));
67
+ const statements = (doc.lexicons[STATEMENTS] ?? []).map((entry) => entry.pattern);
68
+ // Read once, and only when a requirement has an open-end word to tell apart from a name.
69
+ const cache: { names?: OpenEndNames } = {};
70
+ const names = (): OpenEndNames => (cache.names ??= openEndNames(doc, doc.lexicons[OPEN_END] ?? [], statements));
71
+ return doc.sentences.filter((sentence) => isRequirement(sentence, markers, notMarkers)).flatMap((sentence) => smellsIn(doc, sentence, names));
52
72
  };
@@ -7,10 +7,12 @@ import { documentDateOf } from "./document-date.ts";
7
7
  import { dateOrderBreaks } from "../structure/date-order.ts";
8
8
  import { totalMismatches, type Amount } from "../structure/total.ts";
9
9
  import { proseTotalMismatches } from "../structure/prose-total.ts";
10
+ import { countedAmounts, type SummedCounter } from "../structure/counted-amounts.ts";
10
11
  import { rangeFrameOf, reversedRanges, type DatedSpan, type RangeWords } from "../structure/date-range.ts";
11
12
  import { percentSumMismatches, type ShareWords } from "../structure/percent-sum.ts";
12
13
  import { proseShareMismatches } from "../structure/percent-sum-prose.ts";
13
14
  import { isQuotedAlone } from "../quoted-span.ts";
15
+ import { ordinalRunGaps } from "./ordinal-run-gaps.ts";
14
16
 
15
17
  const QUOTE_LENGTH = 80;
16
18
 
@@ -48,28 +50,34 @@ const QUOTED_LINE = /^[ \t]*>/u;
48
50
  /** 引用の中の箇条書きは、ほかの文書の例で、この文書の番号ではない。 */
49
51
  const isQuotedList = (source: string, start: number): boolean => QUOTED_LINE.test(source.slice(lineStartAt(source, start), start));
50
52
 
51
- const listNumberingGaps = (doc: ProseDocument): Finding[] =>
52
- doc.lists
53
- .filter((list) => !isQuotedList(doc.source, list.span.start))
54
- .flatMap((list) => listNumberBreaks(writtenNumbers(doc.source, list.itemSpans) ?? []))
55
- .map((issue) => ({
56
- rule: "numbering-gap",
57
- severity: "error",
58
- line: 0,
59
- column: 0,
60
- quote: quoteAt(doc.source, issue.offset),
61
- values: { ...issue.values, offset: issue.offset },
62
- }));
53
+ const listNumberingGaps = (doc: ProseDocument): StructureIssue[] =>
54
+ doc.lists.filter((list) => !isQuotedList(doc.source, list.span.start)).flatMap((list) => listNumberBreaks(writtenNumbers(doc.source, list.itemSpans) ?? []));
55
+
56
+ const lineFindingOf = (doc: ProseDocument, issue: StructureIssue): Finding => ({
57
+ rule: "numbering-gap",
58
+ severity: "error",
59
+ line: 0,
60
+ column: 0,
61
+ quote: quoteAt(doc.source, issue.offset),
62
+ values: { ...issue.values, offset: issue.offset },
63
+ });
63
64
 
64
65
  /**
65
- * 番号の抜けと重なり: 番地の木の並び(条、項、号)と、Markdown の番号付きの箇条書きに書いた番号。条の中の「1.」「2.」は
66
- * 両方に読まれるので、木が指した行の箇条書きは重ねて言わない。
66
+ * 番号の抜けと重なり: 番地の木の並び(条、項、号)、Markdown の番号付きの箇条書きに書いた番号、日程の第N回・Week N の並び
67
+ * (detectors/ordinal-run-gaps.ts)。一つの行が二つ以上に読まれる(条の中の「1.」、「1. Week 1」)ので、先に指した行は重ねて言わない。
67
68
  */
68
69
  export const numberingGap: Detector = (doc, options): Finding[] => {
69
70
  const fromTree = structureNumberingGap(doc, options);
70
71
  const reported = new Set(fromTree.map((finding) => lineStartAt(doc.source, Number(finding.values["offset"]))));
71
- const fromLists = listNumberingGaps(doc).filter((finding) => !reported.has(lineStartAt(doc.source, Number(finding.values["offset"]))));
72
- return [...fromTree, ...fromLists].toSorted((left, right) => Number(left.values["offset"]) - Number(right.values["offset"]));
72
+ const fromLines = [...listNumberingGaps(doc), ...ordinalRunGaps(doc)].filter((issue) => {
73
+ const line = lineStartAt(doc.source, issue.offset);
74
+ if (reported.has(line)) return false;
75
+ reported.add(line);
76
+ return true;
77
+ });
78
+ return [...fromTree, ...fromLines.map((issue) => lineFindingOf(doc, issue))].toSorted(
79
+ (left, right) => Number(left.values["offset"]) - Number(right.values["offset"]),
80
+ );
73
81
  };
74
82
  export const duplicateDefinition: Detector = findingsOf("duplicate-definition", duplicateDefinitions);
75
83
 
@@ -141,33 +149,43 @@ export const dateWeekdayMismatch: Detector = (doc): Finding[] => {
141
149
  };
142
150
 
143
151
  /** 木の日付を、原文の位置と一緒に並べる。 */
144
- const datedPoints = (tree: NonNullable<ProseDocument["structure"]>): { offset: number; value: string }[] =>
152
+ export const datedPoints = (tree: NonNullable<ProseDocument["structure"]>): { offset: number; value: string }[] =>
145
153
  inDocumentOrder(tree).flatMap((node) => (node.kind === "date" ? [{ offset: node.span.start, value: String(node.attrs["value"]) }] : []));
146
154
 
147
- /** 日程の並びに逆らう日付。並びの読み方は原文の行を見るので、木と原文の両方を渡す。 */
155
+ /** 日程の並びに逆らう日付。並びの読み方は原文の行と見出しを見るので、木と原文と見出しを渡す。 */
148
156
  export const dateOrder: Detector = (doc): Finding[] =>
149
157
  doc.structure === undefined
150
158
  ? []
151
- : dateOrderBreaks(doc.source, datedPoints(doc.structure)).map((issue) => ({
159
+ : dateOrderBreaks(doc.source, datedPoints(doc.structure), doc.markup?.headings ?? []).map((issue) => ({
152
160
  rule: "date-order",
153
161
  severity: "warning",
154
162
  line: 0,
155
163
  column: 0,
156
164
  quote: quoteAt(doc.source, issue.offset),
157
165
  values: { ...issue.values, offset: issue.offset },
166
+ ...("next" in issue.values ? { variant: "first" } : {}),
158
167
  }));
159
168
 
160
169
  /** 木の数量を、原文の位置と一緒に並べる。 */
161
- const amountsOf = (tree: NonNullable<ProseDocument["structure"]>): Amount[] =>
170
+ export const amountsOf = (tree: NonNullable<ProseDocument["structure"]>): Amount[] =>
162
171
  inDocumentOrder(tree).flatMap((node) =>
163
172
  node.kind === "quantity" ? [{ offset: node.span.start, end: node.span.end, value: Number(node.attrs["value"]), unit: String(node.attrs["unit"]) }] : [],
164
173
  );
165
174
 
166
175
  const patternsOf = (doc: ProseDocument, lexicon: string): string[] => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern);
167
176
 
177
+ const summedCountersOf = (doc: ProseDocument): SummedCounter[] =>
178
+ (doc.lexicons["summed-counter"] ?? []).map((entry) => ({ pattern: entry.pattern, unit: entry.group ?? entry.pattern }));
179
+
180
+ /** 木の数量に、解析器が助数詞と読まない足せる助数詞(16単位、3 credits)の付いた数を加えて、書いた順に並べる。 */
181
+ const summableAmountsOf = (doc: ProseDocument, tree: NonNullable<ProseDocument["structure"]>): Amount[] => {
182
+ const known = amountsOf(tree);
183
+ return [...known, ...countedAmounts(doc.source, summedCountersOf(doc), known)].toSorted((left, right) => left.offset - right.offset);
184
+ };
185
+
168
186
  /** 合計の行と内訳の行、文の中の合計と内訳。同じ金額は一度だけ言う。 */
169
187
  const totalIssues = (doc: ProseDocument, tree: NonNullable<ProseDocument["structure"]>): StructureIssue[] => {
170
- const amounts = amountsOf(tree);
188
+ const amounts = summableAmountsOf(doc, tree);
171
189
  const lines = totalMismatches(doc.source, amounts, patternsOf(doc, "total-label"));
172
190
  const words = {
173
191
  totals: patternsOf(doc, "total-phrase"),
@@ -230,7 +248,11 @@ export const dateRangeReversed: Detector = (doc): Finding[] => {
230
248
 
231
249
  const shareWordsOf = (doc: ProseDocument): ShareWords => ({
232
250
  labels: (doc.lexicons["share-label"] ?? []).map((entry) => entry.pattern),
251
+ columnLabels: (doc.lexicons["share-column"] ?? []).map((entry) => entry.pattern),
252
+ rates: (doc.lexicons["share-column-rate"] ?? []).map((entry) => entry.pattern),
233
253
  exceptions: (doc.lexicons["share-exception"] ?? []).map((entry) => entry.pattern),
254
+ rests: (doc.lexicons["share-rest"] ?? []).map((entry) => entry.pattern),
255
+ changes: (doc.lexicons["change-direction"] ?? []).map((entry) => entry.pattern),
234
256
  units: (doc.lexicons["percent-unit"] ?? []).map((entry) => entry.pattern),
235
257
  totalLabels: (doc.lexicons["total-label"] ?? []).map((entry) => entry.pattern),
236
258
  });
@@ -42,6 +42,18 @@ const compound = (tokens: readonly Token[], range: TokenRange): boolean => {
42
42
  return before !== undefined && first !== undefined && NOMINAL.has(before.pos) && before.span.end === first.span.start;
43
43
  };
44
44
 
45
+ const CLAUSE_END = new Set(["VERB", "AUX"]);
46
+
47
+ /**
48
+ * 連体修飾の節が空白を挟まずに付いた最上級(バグを検出できる唯一の・社員が選んだ最高の)。節が何の中で最もなのかを言う。
49
+ * 節の終わりは原形の動詞か助動詞。「首都であり最大の」の「あり」と「大切な最大の」の「な」は原形でないので節の終わりと読まない。
50
+ */
51
+ const clauseBefore = (tokens: readonly Token[], range: TokenRange): boolean => {
52
+ const before = tokens[range.start - 1];
53
+ const first = tokens[range.start];
54
+ return before !== undefined && first !== undefined && CLAUSE_END.has(before.pos) && before.surface === before.lemma && before.span.end === first.span.start;
55
+ };
56
+
45
57
  /** 名前 + 範囲の語 + 最上級(日本で最も・トヨタで最も・東京都で最大)。「費用で最大の効果」の「費用」は名前ではないので範囲にしない。 */
46
58
  const namedBefore = (tokens: readonly Token[], range: TokenRange, markers: Lexicon): boolean =>
47
59
  isMarker(tokens[range.start - 1], markers) && isNamed(tokens[range.start - 2]);
@@ -68,4 +80,4 @@ const phraseAfter = (tokens: readonly Token[], range: TokenRange, markers: Lexic
68
80
  };
69
81
 
70
82
  export const scoped = (tokens: readonly Token[], range: TokenRange, markers: ScopeMarkers): boolean =>
71
- compound(tokens, range) || namedBefore(tokens, range, markers.before) || phraseAfter(tokens, range, markers.after);
83
+ compound(tokens, range) || clauseBefore(tokens, range) || namedBefore(tokens, range, markers.before) || phraseAfter(tokens, range, markers.after);
@@ -0,0 +1,25 @@
1
+ // tax-mismatch: the reading half. The words of a tax row, a total row and an included tax come from the language's
2
+ // lexicons (tax-label, total-label, tax-included-word); the amounts are the structure tree's.
3
+ import type { Detector, Finding, ProseDocument } from "../plugin.ts";
4
+ import { taxMismatches, type TaxWords } from "../structure/tax.ts";
5
+ import { amountsOf, quoteAt } from "./structure-tree.ts";
6
+
7
+ const patternsOf = (doc: ProseDocument, lexicon: string): string[] => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern);
8
+
9
+ const wordsOf = (doc: ProseDocument): TaxWords => ({
10
+ labels: patternsOf(doc, "tax-label"),
11
+ totals: patternsOf(doc, "total-label"),
12
+ included: patternsOf(doc, "tax-included-word"),
13
+ });
14
+
15
+ export const taxAmount: Detector = (doc): Finding[] =>
16
+ doc.structure === undefined
17
+ ? []
18
+ : taxMismatches(doc.source, amountsOf(doc.structure), wordsOf(doc)).map((issue) => ({
19
+ rule: "tax-mismatch",
20
+ severity: "error",
21
+ line: 0,
22
+ column: 0,
23
+ quote: quoteAt(doc.source, issue.offset),
24
+ values: { ...issue.values, offset: issue.offset },
25
+ }));
@@ -190,6 +190,11 @@ const MIN_STEPS = 3;
190
190
  const isInflected = (token: Token): boolean =>
191
191
  token.lemma !== undefined && token.lemma !== "" && token.surface.toLowerCase() !== token.lemma && token.features?.["VerbForm"] !== "Part";
192
192
 
193
+ const NOMINAL = new Set(["NOUN", "PROPN"]);
194
+
195
+ /** A determiner right after a noun opens a clause inside the phrase (a buffer that is big): the verb after it is the clause's, not a subject's. */
196
+ const opensClause = (words: readonly Token[]): boolean => words.some((token, at) => at > 0 && token.pos === "DET" && NOMINAL.has(words[at - 1]?.pos ?? ""));
197
+
193
198
  /**
194
199
  * A step written as a statement: a subject, then its verb. The subject opens with an article or a pronoun (The installer
195
200
  * asks, You click), or it is a name or a noun whose verb is inflected (Docker builds). A noun before a base-form verb is
@@ -201,7 +206,8 @@ export const isStatement = (tokens: readonly Token[]): boolean => {
201
206
  if (head === undefined || words.length < MIN_STEP_TOKENS || !SUBJECT_HEAD.has(head.pos)) return false;
202
207
  const verbAt = rest.findIndex((token) => PREDICATE.has(token.pos));
203
208
  const verb = rest[verbAt];
204
- if (verb === undefined || !rest.slice(0, verbAt).every((token) => SUBJECT_PART.has(token.pos))) return false;
209
+ const subject = [head, ...rest.slice(0, verbAt)];
210
+ if (verb === undefined || !rest.slice(0, verbAt).every((token) => SUBJECT_PART.has(token.pos)) || opensClause(subject)) return false;
205
211
  // Punctuation before the verb is no subject: a label (Guests: the users who …) or an opening phrase (On the left bar, select …).
206
212
  const interrupted = tokens.some((token) => token.pos === "PUNCT" && token.span.start > head.span.start && token.span.start < verb.span.start);
207
213
  return !interrupted && (SUBJECT_OPENER.has(head.pos) || isInflected(verb));
@@ -0,0 +1,67 @@
1
+ // A defined term written longer, with a word of its own definition added: 文書管理責任者 where 「管理責任者」とは、…文書の
2
+ // 管理の責任者をいう is defined, the Application where the Pinecone Notes application (the "App") is. The reader cannot tell
3
+ // whether the longer word is the defined thing or another one. Pure.
4
+ import { escapeRegExp } from "../orthography.ts";
5
+
6
+ /** The letters a Japanese compound is made of: a word written right before the term joins it into one longer word. */
7
+ const COMPOUND_CHAR = /[\p{Script=Han}\p{Script=Katakana}ー]/u;
8
+ const LATIN_LETTER = /\p{Script=Latin}/u;
9
+ const UPPER_START = /^\p{Lu}/u;
10
+ /** An added part shorter than this (書, the s of Services) is an ending or one character, not a word of the definition. */
11
+ const MIN_ADDED = 2;
12
+ /** A term shorter than this (提供, 登録) is an ordinary word that joins other words freely (情報提供, 利用登録). */
13
+ const MIN_COMPOUND_TERM = 3;
14
+ /** A plural ending (Boxes) is the same word, not a longer one. */
15
+ const PLURAL = /^e?s$/u;
16
+
17
+ /** The whole character that starts at, or ends right before, a position: both halves of 𠮷, not one. */
18
+ const charFrom = (source: string, at: number): string => String.fromCodePoint(source.codePointAt(at) ?? 0);
19
+ const charBefore = (source: string, at: number): string => {
20
+ const low = source.charCodeAt(at - 1);
21
+ const isLowHalf = low >= 0xdc00 && low <= 0xdfff && at >= 2;
22
+ return isLowHalf ? source.slice(at - 2, at) : source.charAt(at - 1);
23
+ };
24
+
25
+ /** Where the run of compound characters that ends at offset starts. */
26
+ const runStart = (source: string, offset: number): number => {
27
+ let start = offset;
28
+ for (let char = charBefore(source, start); start > 0 && COMPOUND_CHAR.test(char); char = charBefore(source, start)) start -= char.length;
29
+ return start;
30
+ };
31
+
32
+ /** The endings of a run, longest first, that are long enough to be a word added to the term. */
33
+ const endingsOf = (run: string): string[] => Array.from({ length: Math.max(0, run.length - MIN_ADDED + 1) }, (_, index) => run.slice(index));
34
+
35
+ /**
36
+ * The term at offset written with more in front of it in one word (文書管理責任者), when what is in front ends with a word of
37
+ * the definition (文書). A word that points at one of the defined things (当該管理責任者) does not lengthen it, and a longer
38
+ * word the definition itself writes (東京都(以下「都」という。)) is the long name, not another form of the term.
39
+ */
40
+ export const extendedBefore = (source: string, offset: number, term: string, definition: string, pointers: readonly string[] = []): string | undefined => {
41
+ if ([...term].length < MIN_COMPOUND_TERM || COMPOUND_CHAR.test(charFrom(source, offset + term.length))) return undefined;
42
+ const run = source.slice(runStart(source, offset), offset);
43
+ const added = endingsOf(run).find((part) => definition.includes(part) && !pointers.some((pointer) => part.startsWith(pointer)));
44
+ const written = added === undefined ? undefined : `${added}${term}`;
45
+ return written === undefined || definition.includes(written) ? undefined : written;
46
+ };
47
+
48
+ /**
49
+ * The capitalised term at offset written with more letters after it in one word (App → Application), when the definition
50
+ * has that longer word (the Pinecone Notes application). A plural or a word joined to letters before it is not one.
51
+ */
52
+ export const extendedAfter = (source: string, offset: number, term: string, definition: string): string | undefined => {
53
+ if (!UPPER_START.test(term) || LATIN_LETTER.test(source.charAt(offset - 1))) return undefined;
54
+ let end = offset + term.length;
55
+ while (LATIN_LETTER.test(source.charAt(end))) end += 1;
56
+ const added = source.slice(offset + term.length, end);
57
+ if (added.length < MIN_ADDED || PLURAL.test(added)) return undefined;
58
+ const word = source.slice(offset, end);
59
+ return new RegExp(String.raw`(?<!\p{L})${escapeRegExp(word)}(?!\p{L})`, "iu").test(definition) ? word : undefined;
60
+ };
61
+
62
+ /** Each place the term is written exactly, in order. */
63
+ export const exactOffsets = (text: string, start: number, term: string): number[] => {
64
+ const offsets: number[] = [];
65
+ for (let at = text.indexOf(term); at !== -1 && term !== ""; at = text.indexOf(term, at + term.length)) offsets.push(start + at);
66
+ return offsets;
67
+ };
@@ -0,0 +1,49 @@
1
+ import type { Detector, Finding, ProseDocument } from "../plugin.ts";
2
+ import type { StructureIssue } from "../structure/issues.ts";
3
+ import { inDocumentOrder } from "../structure/issues.ts";
4
+ import { clockTimes } from "../compare/clock-time.ts";
5
+ import { secondsOf, type DateSpan, type Mark, type TimeSpan, type TimeWords } from "../structure/time-marks.ts";
6
+ import { timeOrderBreaks } from "../structure/time-order.ts";
7
+ import { arrivalsBeforeDeparture } from "../structure/leg-times.ts";
8
+ import { quoteAt } from "./structure-tree.ts";
9
+
10
+ // 一日の予定の時刻の順番(time-order)と、発より前の着(arrival-before-departure)。時刻は compare/clock-time.ts が読み、
11
+ // 発着・翌日・時間帯の語は言語パッケージの語彙表(leg-mark、leg-column、day-shift-mark、time-zone、local-time-mark)から取る。
12
+
13
+ const marksOf = (doc: ProseDocument, lexicon: string): Mark[] =>
14
+ (doc.lexicons[lexicon] ?? []).map((entry) => ({ pattern: entry.pattern, position: entry.position, group: entry.group }));
15
+
16
+ const timeWordsOf = (doc: ProseDocument): TimeWords => ({
17
+ legs: marksOf(doc, "leg-mark"),
18
+ columns: marksOf(doc, "leg-column"),
19
+ dayShifts: marksOf(doc, "day-shift-mark"),
20
+ zones: [...marksOf(doc, "time-zone"), ...marksOf(doc, "local-time-mark").map((mark) => ({ ...mark, group: "local" }))],
21
+ });
22
+
23
+ const datesOf = (doc: ProseDocument): DateSpan[] =>
24
+ doc.structure === undefined
25
+ ? []
26
+ : inDocumentOrder(doc.structure).flatMap((node) =>
27
+ node.kind === "date" ? [{ start: node.span.start, end: node.span.end, value: String(node.attrs["value"]) }] : [],
28
+ );
29
+
30
+ const timesOf = (text: string): TimeSpan[] => clockTimes(text).map((time) => ({ start: time.start, end: time.end, seconds: secondsOf(time.key) }));
31
+
32
+ type Finder = (source: string, times: readonly TimeSpan[], dates: readonly DateSpan[], words: TimeWords) => StructureIssue[];
33
+
34
+ /** 表と箇条書きを行のまま読むので、原文を渡す(doc.prose は表を覆う)。 */
35
+ const detectorOf =
36
+ (rule: string, find: Finder): Detector =>
37
+ (doc): Finding[] =>
38
+ find(doc.source, timesOf(doc.source), datesOf(doc), timeWordsOf(doc)).map((issue) => ({
39
+ rule,
40
+ severity: "warning",
41
+ line: 0,
42
+ column: 0,
43
+ quote: quoteAt(doc.source, issue.offset),
44
+ values: { ...issue.values, offset: issue.offset },
45
+ ...("next" in issue.values ? { variant: "first" } : {}),
46
+ }));
47
+
48
+ export const timeOrder: Detector = detectorOf("time-order", timeOrderBreaks);
49
+ export const arrivalBeforeDeparture: Detector = detectorOf("arrival-before-departure", arrivalsBeforeDeparture);
@@ -0,0 +1,17 @@
1
+ // ui-label-variant: one label on the screen written two ways in a manual (ui-labels.ts). The words a label is written with or
2
+ // without come from the language's label-particle lexicon.
3
+ import { quoteAt } from "./structure-tree.ts";
4
+ import { labelsIn, labelVariants } from "../ui-labels.ts";
5
+ import type { Detector, Finding } from "../plugin.ts";
6
+
7
+ export const uiLabel: Detector = (doc): Finding[] => {
8
+ const particles = (doc.lexicons["label-particle"] ?? []).map((entry) => entry.pattern);
9
+ return labelVariants(labelsIn(doc.source, doc.prose ?? doc.source), particles).map(({ label, usual }) => ({
10
+ rule: "ui-label-variant",
11
+ severity: "info",
12
+ line: 0,
13
+ column: 0,
14
+ quote: quoteAt(doc.source, label.offset),
15
+ values: { written: label.surface, usual, offset: label.offset },
16
+ }));
17
+ };
@@ -4,6 +4,7 @@ import { escapeRegExp } from "../orthography.ts";
4
4
  import { quoteAround } from "./quote-around.ts";
5
5
  import { mergeSpans } from "../span-merge.ts";
6
6
  import { firstEndingAfter } from "../soft-break.ts";
7
+ import { isLabelClose, isLabelInAside } from "./bracket-label.ts";
7
8
 
8
9
  /**
9
10
  * 括弧の組。どの言語でも同じ字の決まりなので、語彙表ではなくここに置く。family は形(丸・角)で、全角と半角は同じ形の別の幅。
@@ -48,31 +49,23 @@ export type BracketProblem = {
48
49
  type Open = { readonly bracket: Bracket; readonly offset: number };
49
50
  type Scan = { readonly open: Open[]; readonly problems: BracketProblem[] };
50
51
 
51
- /**
52
- * 丸括弧の閉じの前の、行の頭か空白・句読点の後ろに書いた短い印(「1)」「a)」「事例)」「※)」)と、数の後ろの閉じ(「事例2)及び事例3)」)。
53
- * 箇条の番号や見出しの印で、開きを持たない書き方。顔文字の「:)」も同じ形。印に使うのは丸括弧だけ。
54
- */
55
- const LABEL_BEFORE = /(?:^|[\s、。,;::])[^\s()()[\][]「」『』]{1,3}[ \t\u3000]?$|[\d0-9]$/u;
56
-
57
- const isLabel = (text: string, bracket: Bracket, offset: number): boolean => {
58
- if (bracket.family !== "round") return false;
59
- const lineStart = text.lastIndexOf("\n", offset - 1) + 1;
60
- return LABEL_BEFORE.test(text.slice(lineStart, offset));
61
- };
62
-
63
52
  const unclosedOf = (entry: Open): BracketProblem => ({ kind: "unclosed", offset: entry.offset, mark: entry.bracket.open });
64
53
 
65
54
  const closeWith = (scan: Scan, text: string, bracket: Bracket, offset: number): void => {
66
55
  const at = scan.open.findLastIndex((entry) => entry.bracket.family === bracket.family);
56
+ const round = bracket.family === "round";
67
57
  if (at === -1) {
68
- if (!isLabel(text, bracket, offset)) scan.problems.push({ kind: "unopened", offset, mark: bracket.close });
58
+ if (!(round && isLabelClose(text, offset))) scan.problems.push({ kind: "unopened", offset, mark: bracket.close });
69
59
  return;
70
60
  }
61
+ if (round && isLabelInAside(text, offset, scan.open.filter((entry) => entry.bracket.family === "round").length)) return;
71
62
  const opened = scan.open[at];
72
- // 間に残った開きは、この閉じより先に閉じるはずだったもの。
63
+ // 間に残った開きは、この閉じより先に閉じるはずだったもの。ただし引用の閉じのすぐ前の開きは、括弧の字そのものを
64
+ // 引いたもの(法令の読替え「取締役(」とあるのは「清算人(」と)で、組を作らない。
73
65
  scan.open
74
66
  .splice(at)
75
67
  .slice(1)
68
+ .filter((inner) => !(QUOTATIONS.has(bracket.family) && inner.offset === offset - 1))
76
69
  .forEach((inner) => scan.problems.push(unclosedOf(inner)));
77
70
  if (opened !== undefined && opened.bracket !== bracket) scan.problems.push({ kind: "mismatch", offset, mark: bracket.close, partner: opened.bracket.open });
78
71
  };
@@ -0,0 +1,19 @@
1
+ // undefined-function-call: a function called in a code example that the page never defines, where the page documents
2
+ // one whose name it extends (wrapText( on a page about wrap) (undefined-call.ts). The functions a programming language
3
+ // provides come from the code-global lexicon.
4
+ import { quoteAt } from "./structure-tree.ts";
5
+ import { undefinedCalls } from "../undefined-call.ts";
6
+ import type { Detector, Finding } from "../plugin.ts";
7
+
8
+ export const undefinedCall: Detector = (doc): Finding[] => {
9
+ const headings = (doc.markup?.headings ?? []).map((heading) => heading.text);
10
+ const globals = (doc.lexicons["code-global"] ?? []).map((entry) => entry.pattern);
11
+ return undefinedCalls(doc.source, headings, globals).map((call) => ({
12
+ rule: "undefined-function-call",
13
+ severity: "warning",
14
+ line: 0,
15
+ column: 0,
16
+ quote: quoteAt(doc.source, call.offset),
17
+ values: { name: call.name, documented: call.documented, offset: call.offset },
18
+ }));
19
+ };