chaffjs 0.30.0 → 0.31.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 (530) hide show
  1. package/dist/announced-count.d.ts +2 -0
  2. package/dist/announced-count.d.ts.map +1 -1
  3. package/dist/announced-count.js +4 -3
  4. package/dist/announced-count.js.map +1 -1
  5. package/dist/contacts/addresses.d.ts +21 -0
  6. package/dist/contacts/addresses.d.ts.map +1 -0
  7. package/dist/contacts/addresses.js +144 -0
  8. package/dist/contacts/addresses.js.map +1 -0
  9. package/dist/contacts/emails.d.ts +11 -0
  10. package/dist/contacts/emails.d.ts.map +1 -0
  11. package/dist/contacts/emails.js +51 -0
  12. package/dist/contacts/emails.js.map +1 -0
  13. package/dist/contacts/variants.d.ts +14 -0
  14. package/dist/contacts/variants.d.ts.map +1 -0
  15. package/dist/contacts/variants.js +25 -0
  16. package/dist/contacts/variants.js.map +1 -0
  17. package/dist/derived/battery-runtime.d.ts +85 -0
  18. package/dist/derived/battery-runtime.d.ts.map +1 -0
  19. package/dist/derived/battery-runtime.js +217 -0
  20. package/dist/derived/battery-runtime.js.map +1 -0
  21. package/dist/derived/period-counts.d.ts +48 -0
  22. package/dist/derived/period-counts.d.ts.map +1 -0
  23. package/dist/derived/period-counts.js +128 -0
  24. package/dist/derived/period-counts.js.map +1 -0
  25. package/dist/derived/time-lengths.d.ts.map +1 -1
  26. package/dist/derived/time-lengths.js +12 -9
  27. package/dist/derived/time-lengths.js.map +1 -1
  28. package/dist/derived/use-interval.d.ts +33 -0
  29. package/dist/derived/use-interval.d.ts.map +1 -0
  30. package/dist/derived/use-interval.js +93 -0
  31. package/dist/derived/use-interval.js.map +1 -0
  32. package/dist/detectors/announced-count.d.ts.map +1 -1
  33. package/dist/detectors/announced-count.js +1 -0
  34. package/dist/detectors/announced-count.js.map +1 -1
  35. package/dist/detectors/capacity-runtime.d.ts +7 -0
  36. package/dist/detectors/capacity-runtime.d.ts.map +1 -0
  37. package/dist/detectors/capacity-runtime.js +98 -0
  38. package/dist/detectors/capacity-runtime.js.map +1 -0
  39. package/dist/detectors/contact-variant.d.ts +3 -0
  40. package/dist/detectors/contact-variant.d.ts.map +1 -0
  41. package/dist/detectors/contact-variant.js +21 -0
  42. package/dist/detectors/contact-variant.js.map +1 -0
  43. package/dist/detectors/count-over-capacity.d.ts +4 -0
  44. package/dist/detectors/count-over-capacity.d.ts.map +1 -0
  45. package/dist/detectors/count-over-capacity.js +26 -0
  46. package/dist/detectors/count-over-capacity.js.map +1 -0
  47. package/dist/detectors/date-outside-period.d.ts.map +1 -1
  48. package/dist/detectors/date-outside-period.js +2 -1
  49. package/dist/detectors/date-outside-period.js.map +1 -1
  50. package/dist/detectors/date-stamp-order.d.ts +3 -0
  51. package/dist/detectors/date-stamp-order.d.ts.map +1 -0
  52. package/dist/detectors/date-stamp-order.js +24 -0
  53. package/dist/detectors/date-stamp-order.js.map +1 -0
  54. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  55. package/dist/detectors/defined-term-form.js +57 -7
  56. package/dist/detectors/defined-term-form.js.map +1 -1
  57. package/dist/detectors/definition-use.d.ts +1 -1
  58. package/dist/detectors/definition-use.d.ts.map +1 -1
  59. package/dist/detectors/definition-use.js +4 -2
  60. package/dist/detectors/definition-use.js.map +1 -1
  61. package/dist/detectors/derived-numbers.d.ts +9 -1
  62. package/dist/detectors/derived-numbers.d.ts.map +1 -1
  63. package/dist/detectors/derived-numbers.js +2 -2
  64. package/dist/detectors/derived-numbers.js.map +1 -1
  65. package/dist/detectors/due-date.d.ts.map +1 -1
  66. package/dist/detectors/due-date.js +6 -0
  67. package/dist/detectors/due-date.js.map +1 -1
  68. package/dist/detectors/en-shape.d.ts.map +1 -1
  69. package/dist/detectors/en-shape.js +7 -4
  70. package/dist/detectors/en-shape.js.map +1 -1
  71. package/dist/detectors/event-deadline.d.ts +3 -0
  72. package/dist/detectors/event-deadline.d.ts.map +1 -0
  73. package/dist/detectors/event-deadline.js +24 -0
  74. package/dist/detectors/event-deadline.js.map +1 -0
  75. package/dist/detectors/fact-consistency.d.ts +1 -1
  76. package/dist/detectors/fact-consistency.d.ts.map +1 -1
  77. package/dist/detectors/fact-consistency.js +52 -3
  78. package/dist/detectors/fact-consistency.js.map +1 -1
  79. package/dist/detectors/heading-case.d.ts +5 -2
  80. package/dist/detectors/heading-case.d.ts.map +1 -1
  81. package/dist/detectors/heading-case.js +12 -4
  82. package/dist/detectors/heading-case.js.map +1 -1
  83. package/dist/detectors/heading-echo.d.ts +5 -0
  84. package/dist/detectors/heading-echo.d.ts.map +1 -1
  85. package/dist/detectors/heading-echo.js +14 -1
  86. package/dist/detectors/heading-echo.js.map +1 -1
  87. package/dist/detectors/layout-code.d.ts +5 -0
  88. package/dist/detectors/layout-code.d.ts.map +1 -0
  89. package/dist/detectors/layout-code.js +124 -0
  90. package/dist/detectors/layout-code.js.map +1 -0
  91. package/dist/detectors/measured-facts.d.ts +8 -0
  92. package/dist/detectors/measured-facts.d.ts.map +1 -0
  93. package/dist/detectors/measured-facts.js +18 -0
  94. package/dist/detectors/measured-facts.js.map +1 -0
  95. package/dist/detectors/name-variant-model-codes.d.ts +11 -0
  96. package/dist/detectors/name-variant-model-codes.d.ts.map +1 -0
  97. package/dist/detectors/name-variant-model-codes.js +21 -0
  98. package/dist/detectors/name-variant-model-codes.js.map +1 -0
  99. package/dist/detectors/name-variant.d.ts.map +1 -1
  100. package/dist/detectors/name-variant.js +25 -4
  101. package/dist/detectors/name-variant.js.map +1 -1
  102. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  103. package/dist/detectors/orthographic-variant.js +62 -7
  104. package/dist/detectors/orthographic-variant.js.map +1 -1
  105. package/dist/detectors/orthography.d.ts.map +1 -1
  106. package/dist/detectors/orthography.js +12 -6
  107. package/dist/detectors/orthography.js.map +1 -1
  108. package/dist/detectors/quantity-range.d.ts +3 -0
  109. package/dist/detectors/quantity-range.d.ts.map +1 -0
  110. package/dist/detectors/quantity-range.js +35 -0
  111. package/dist/detectors/quantity-range.js.map +1 -0
  112. package/dist/detectors/range-band.d.ts +5 -0
  113. package/dist/detectors/range-band.d.ts.map +1 -0
  114. package/dist/detectors/range-band.js +80 -0
  115. package/dist/detectors/range-band.js.map +1 -0
  116. package/dist/detectors/registry/capacity-runtime-mismatch.d.ts +3 -0
  117. package/dist/detectors/registry/capacity-runtime-mismatch.d.ts.map +1 -0
  118. package/dist/detectors/registry/capacity-runtime-mismatch.js +3 -0
  119. package/dist/detectors/registry/capacity-runtime-mismatch.js.map +1 -0
  120. package/dist/detectors/registry/contact-variant.d.ts +3 -0
  121. package/dist/detectors/registry/contact-variant.d.ts.map +1 -0
  122. package/dist/detectors/registry/contact-variant.js +3 -0
  123. package/dist/detectors/registry/contact-variant.js.map +1 -0
  124. package/dist/detectors/registry/count-over-capacity.d.ts +3 -0
  125. package/dist/detectors/registry/count-over-capacity.d.ts.map +1 -0
  126. package/dist/detectors/registry/count-over-capacity.js +3 -0
  127. package/dist/detectors/registry/count-over-capacity.js.map +1 -0
  128. package/dist/detectors/registry/date-stamp-order.d.ts +3 -0
  129. package/dist/detectors/registry/date-stamp-order.d.ts.map +1 -0
  130. package/dist/detectors/registry/date-stamp-order.js +3 -0
  131. package/dist/detectors/registry/date-stamp-order.js.map +1 -0
  132. package/dist/detectors/registry/event-deadline.d.ts +3 -0
  133. package/dist/detectors/registry/event-deadline.d.ts.map +1 -0
  134. package/dist/detectors/registry/event-deadline.js +3 -0
  135. package/dist/detectors/registry/event-deadline.js.map +1 -0
  136. package/dist/detectors/registry/interval-count-mismatch.d.ts +3 -0
  137. package/dist/detectors/registry/interval-count-mismatch.d.ts.map +1 -0
  138. package/dist/detectors/registry/interval-count-mismatch.js +3 -0
  139. package/dist/detectors/registry/interval-count-mismatch.js.map +1 -0
  140. package/dist/detectors/registry/layout-code-mismatch.d.ts +3 -0
  141. package/dist/detectors/registry/layout-code-mismatch.d.ts.map +1 -0
  142. package/dist/detectors/registry/layout-code-mismatch.js +3 -0
  143. package/dist/detectors/registry/layout-code-mismatch.js.map +1 -0
  144. package/dist/detectors/registry/quantity-range.d.ts +3 -0
  145. package/dist/detectors/registry/quantity-range.d.ts.map +1 -0
  146. package/dist/detectors/registry/quantity-range.js +3 -0
  147. package/dist/detectors/registry/quantity-range.js.map +1 -0
  148. package/dist/detectors/registry/range-band-mismatch.d.ts +3 -0
  149. package/dist/detectors/registry/range-band-mismatch.d.ts.map +1 -0
  150. package/dist/detectors/registry/range-band-mismatch.js +3 -0
  151. package/dist/detectors/registry/range-band-mismatch.js.map +1 -0
  152. package/dist/detectors/registry/rent-multiple-mismatch.d.ts +3 -0
  153. package/dist/detectors/registry/rent-multiple-mismatch.d.ts.map +1 -0
  154. package/dist/detectors/registry/rent-multiple-mismatch.js +3 -0
  155. package/dist/detectors/registry/rent-multiple-mismatch.js.map +1 -0
  156. package/dist/detectors/registry/scaled-quantity-mismatch.d.ts +3 -0
  157. package/dist/detectors/registry/scaled-quantity-mismatch.d.ts.map +1 -0
  158. package/dist/detectors/registry/scaled-quantity-mismatch.js +3 -0
  159. package/dist/detectors/registry/scaled-quantity-mismatch.js.map +1 -0
  160. package/dist/detectors/registry/step-time-sum-mismatch.d.ts +3 -0
  161. package/dist/detectors/registry/step-time-sum-mismatch.d.ts.map +1 -0
  162. package/dist/detectors/registry/step-time-sum-mismatch.js +3 -0
  163. package/dist/detectors/registry/step-time-sum-mismatch.js.map +1 -0
  164. package/dist/detectors/registry/time-range-reversed.d.ts +3 -0
  165. package/dist/detectors/registry/time-range-reversed.d.ts.map +1 -0
  166. package/dist/detectors/registry/time-range-reversed.js +3 -0
  167. package/dist/detectors/registry/time-range-reversed.js.map +1 -0
  168. package/dist/detectors/registry/unlisted-item-used.d.ts +3 -0
  169. package/dist/detectors/registry/unlisted-item-used.d.ts.map +1 -0
  170. package/dist/detectors/registry/unlisted-item-used.js +3 -0
  171. package/dist/detectors/registry/unlisted-item-used.js.map +1 -0
  172. package/dist/detectors/registry/walk-time-distance-mismatch.d.ts +3 -0
  173. package/dist/detectors/registry/walk-time-distance-mismatch.d.ts.map +1 -0
  174. package/dist/detectors/registry/walk-time-distance-mismatch.js +3 -0
  175. package/dist/detectors/registry/walk-time-distance-mismatch.js.map +1 -0
  176. package/dist/detectors/rent-multiple-mismatch.d.ts +3 -0
  177. package/dist/detectors/rent-multiple-mismatch.d.ts.map +1 -0
  178. package/dist/detectors/rent-multiple-mismatch.js +39 -0
  179. package/dist/detectors/rent-multiple-mismatch.js.map +1 -0
  180. package/dist/detectors/scaled-quantity.d.ts +3 -0
  181. package/dist/detectors/scaled-quantity.d.ts.map +1 -0
  182. package/dist/detectors/scaled-quantity.js +37 -0
  183. package/dist/detectors/scaled-quantity.js.map +1 -0
  184. package/dist/detectors/signals.d.ts.map +1 -1
  185. package/dist/detectors/signals.js +3 -1
  186. package/dist/detectors/signals.js.map +1 -1
  187. package/dist/detectors/step-time-sum.d.ts +3 -0
  188. package/dist/detectors/step-time-sum.d.ts.map +1 -0
  189. package/dist/detectors/step-time-sum.js +46 -0
  190. package/dist/detectors/step-time-sum.js.map +1 -0
  191. package/dist/detectors/structure-tree.d.ts +2 -0
  192. package/dist/detectors/structure-tree.d.ts.map +1 -1
  193. package/dist/detectors/structure-tree.js +22 -5
  194. package/dist/detectors/structure-tree.js.map +1 -1
  195. package/dist/detectors/structure.js +1 -1
  196. package/dist/detectors/structure.js.map +1 -1
  197. package/dist/detectors/technical-docs.d.ts +5 -0
  198. package/dist/detectors/technical-docs.d.ts.map +1 -1
  199. package/dist/detectors/technical-docs.js +12 -0
  200. package/dist/detectors/technical-docs.js.map +1 -1
  201. package/dist/detectors/time-order.d.ts +1 -0
  202. package/dist/detectors/time-order.d.ts.map +1 -1
  203. package/dist/detectors/time-order.js +3 -1
  204. package/dist/detectors/time-order.js.map +1 -1
  205. package/dist/detectors/unit-consistency.d.ts +1 -1
  206. package/dist/detectors/unit-consistency.d.ts.map +1 -1
  207. package/dist/detectors/unit-consistency.js +46 -38
  208. package/dist/detectors/unit-consistency.js.map +1 -1
  209. package/dist/detectors/unlisted-items.d.ts +3 -0
  210. package/dist/detectors/unlisted-items.d.ts.map +1 -0
  211. package/dist/detectors/unlisted-items.js +57 -0
  212. package/dist/detectors/unlisted-items.js.map +1 -0
  213. package/dist/detectors/use-count-words.d.ts +8 -0
  214. package/dist/detectors/use-count-words.d.ts.map +1 -0
  215. package/dist/detectors/use-count-words.js +20 -0
  216. package/dist/detectors/use-count-words.js.map +1 -0
  217. package/dist/detectors/use-interval.d.ts +3 -0
  218. package/dist/detectors/use-interval.d.ts.map +1 -0
  219. package/dist/detectors/use-interval.js +39 -0
  220. package/dist/detectors/use-interval.js.map +1 -0
  221. package/dist/detectors/walk-time-distance-mismatch.d.ts +4 -0
  222. package/dist/detectors/walk-time-distance-mismatch.d.ts.map +1 -0
  223. package/dist/detectors/walk-time-distance-mismatch.js +38 -0
  224. package/dist/detectors/walk-time-distance-mismatch.js.map +1 -0
  225. package/dist/facts/approximate-tolerance.d.ts +7 -0
  226. package/dist/facts/approximate-tolerance.d.ts.map +1 -0
  227. package/dist/facts/approximate-tolerance.js +16 -0
  228. package/dist/facts/approximate-tolerance.js.map +1 -0
  229. package/dist/facts/item-amounts.d.ts +18 -0
  230. package/dist/facts/item-amounts.d.ts.map +1 -0
  231. package/dist/facts/item-amounts.js +67 -0
  232. package/dist/facts/item-amounts.js.map +1 -0
  233. package/dist/facts/labelled-facts.d.ts +4 -0
  234. package/dist/facts/labelled-facts.d.ts.map +1 -1
  235. package/dist/facts/labelled-facts.js +21 -6
  236. package/dist/facts/labelled-facts.js.map +1 -1
  237. package/dist/facts/measure-units.d.ts +5 -0
  238. package/dist/facts/measure-units.d.ts.map +1 -0
  239. package/dist/facts/measure-units.js +28 -0
  240. package/dist/facts/measure-units.js.map +1 -0
  241. package/dist/facts/measures.d.ts +23 -4
  242. package/dist/facts/measures.d.ts.map +1 -1
  243. package/dist/facts/measures.js +68 -19
  244. package/dist/facts/measures.js.map +1 -1
  245. package/dist/facts/retention-periods.d.ts +51 -0
  246. package/dist/facts/retention-periods.d.ts.map +1 -0
  247. package/dist/facts/retention-periods.js +148 -0
  248. package/dist/facts/retention-periods.js.map +1 -0
  249. package/dist/facts/unit-conflicts.d.ts +3 -2
  250. package/dist/facts/unit-conflicts.d.ts.map +1 -1
  251. package/dist/facts/unit-conflicts.js +15 -7
  252. package/dist/facts/unit-conflicts.js.map +1 -1
  253. package/dist/facts/unit-equivalents.d.ts +13 -0
  254. package/dist/facts/unit-equivalents.d.ts.map +1 -0
  255. package/dist/facts/unit-equivalents.js +56 -0
  256. package/dist/facts/unit-equivalents.js.map +1 -0
  257. package/dist/facts/unit-tolerance.d.ts +4 -0
  258. package/dist/facts/unit-tolerance.d.ts.map +1 -0
  259. package/dist/facts/unit-tolerance.js +13 -0
  260. package/dist/facts/unit-tolerance.js.map +1 -0
  261. package/dist/facts/unit-word.d.ts +8 -0
  262. package/dist/facts/unit-word.d.ts.map +1 -0
  263. package/dist/facts/unit-word.js +34 -0
  264. package/dist/facts/unit-word.js.map +1 -0
  265. package/dist/facts/written-precision.d.ts +10 -0
  266. package/dist/facts/written-precision.d.ts.map +1 -0
  267. package/dist/facts/written-precision.js +20 -0
  268. package/dist/facts/written-precision.js.map +1 -0
  269. package/dist/kana-spelling.d.ts +12 -0
  270. package/dist/kana-spelling.d.ts.map +1 -1
  271. package/dist/kana-spelling.js +23 -0
  272. package/dist/kana-spelling.js.map +1 -1
  273. package/dist/model-codes.d.ts +23 -0
  274. package/dist/model-codes.d.ts.map +1 -0
  275. package/dist/model-codes.js +81 -0
  276. package/dist/model-codes.js.map +1 -0
  277. package/dist/name-spelling-chars.d.ts +16 -0
  278. package/dist/name-spelling-chars.d.ts.map +1 -0
  279. package/dist/name-spelling-chars.js +14 -0
  280. package/dist/name-spelling-chars.js.map +1 -0
  281. package/dist/name-variants.d.ts +3 -2
  282. package/dist/name-variants.d.ts.map +1 -1
  283. package/dist/name-variants.js +4 -7
  284. package/dist/name-variants.js.map +1 -1
  285. package/dist/phone-numbers.d.ts.map +1 -1
  286. package/dist/phone-numbers.js +22 -5
  287. package/dist/phone-numbers.js.map +1 -1
  288. package/dist/place-names.d.ts +12 -5
  289. package/dist/place-names.d.ts.map +1 -1
  290. package/dist/place-names.js +34 -14
  291. package/dist/place-names.js.map +1 -1
  292. package/dist/plugin.d.ts +5 -0
  293. package/dist/plugin.d.ts.map +1 -1
  294. package/dist/preamble-paragraphs.d.ts +2 -1
  295. package/dist/preamble-paragraphs.d.ts.map +1 -1
  296. package/dist/preamble-paragraphs.js +16 -1
  297. package/dist/preamble-paragraphs.js.map +1 -1
  298. package/dist/profile/parse.d.ts.map +1 -1
  299. package/dist/profile/parse.js +11 -0
  300. package/dist/profile/parse.js.map +1 -1
  301. package/dist/spacing-code.d.ts +6 -0
  302. package/dist/spacing-code.d.ts.map +1 -0
  303. package/dist/spacing-code.js +16 -0
  304. package/dist/spacing-code.js.map +1 -0
  305. package/dist/structure/amount-range.d.ts +2 -2
  306. package/dist/structure/amount-range.d.ts.map +1 -1
  307. package/dist/structure/amount-range.js +12 -5
  308. package/dist/structure/amount-range.js.map +1 -1
  309. package/dist/structure/capacity-count.d.ts +59 -0
  310. package/dist/structure/capacity-count.d.ts.map +1 -0
  311. package/dist/structure/capacity-count.js +118 -0
  312. package/dist/structure/capacity-count.js.map +1 -0
  313. package/dist/structure/counted-amounts.d.ts +6 -0
  314. package/dist/structure/counted-amounts.d.ts.map +1 -1
  315. package/dist/structure/counted-amounts.js +4 -4
  316. package/dist/structure/counted-amounts.js.map +1 -1
  317. package/dist/structure/date-outside-period.d.ts +3 -1
  318. package/dist/structure/date-outside-period.d.ts.map +1 -1
  319. package/dist/structure/date-outside-period.js +8 -5
  320. package/dist/structure/date-outside-period.js.map +1 -1
  321. package/dist/structure/date-range.d.ts +1 -0
  322. package/dist/structure/date-range.d.ts.map +1 -1
  323. package/dist/structure/date-range.js +1 -1
  324. package/dist/structure/date-range.js.map +1 -1
  325. package/dist/structure/deadline-after-event.d.ts +23 -0
  326. package/dist/structure/deadline-after-event.d.ts.map +1 -0
  327. package/dist/structure/deadline-after-event.js +42 -0
  328. package/dist/structure/deadline-after-event.js.map +1 -0
  329. package/dist/structure/definition-use.d.ts +1 -1
  330. package/dist/structure/definition-use.d.ts.map +1 -1
  331. package/dist/structure/definition-use.js +55 -2
  332. package/dist/structure/definition-use.js.map +1 -1
  333. package/dist/structure/due-date.d.ts.map +1 -1
  334. package/dist/structure/due-date.js +5 -27
  335. package/dist/structure/due-date.js.map +1 -1
  336. package/dist/structure/labelled-date-order.d.ts +38 -0
  337. package/dist/structure/labelled-date-order.d.ts.map +1 -0
  338. package/dist/structure/labelled-date-order.js +41 -0
  339. package/dist/structure/labelled-date-order.js.map +1 -0
  340. package/dist/structure/layout-codes.d.ts +68 -0
  341. package/dist/structure/layout-codes.d.ts.map +1 -0
  342. package/dist/structure/layout-codes.js +161 -0
  343. package/dist/structure/layout-codes.js.map +1 -0
  344. package/dist/structure/measured-amounts.d.ts +17 -0
  345. package/dist/structure/measured-amounts.d.ts.map +1 -0
  346. package/dist/structure/measured-amounts.js +110 -0
  347. package/dist/structure/measured-amounts.js.map +1 -0
  348. package/dist/structure/quantity-range.d.ts +8 -0
  349. package/dist/structure/quantity-range.d.ts.map +1 -0
  350. package/dist/structure/quantity-range.js +36 -0
  351. package/dist/structure/quantity-range.js.map +1 -0
  352. package/dist/structure/range-bands.d.ts +75 -0
  353. package/dist/structure/range-bands.d.ts.map +1 -0
  354. package/dist/structure/range-bands.js +244 -0
  355. package/dist/structure/range-bands.js.map +1 -0
  356. package/dist/structure/rent-multiple.d.ts +76 -0
  357. package/dist/structure/rent-multiple.d.ts.map +1 -0
  358. package/dist/structure/rent-multiple.js +186 -0
  359. package/dist/structure/rent-multiple.js.map +1 -0
  360. package/dist/structure/scaled-quantities.d.ts +50 -0
  361. package/dist/structure/scaled-quantities.d.ts.map +1 -0
  362. package/dist/structure/scaled-quantities.js +153 -0
  363. package/dist/structure/scaled-quantities.js.map +1 -0
  364. package/dist/structure/stamp-order.d.ts +16 -0
  365. package/dist/structure/stamp-order.d.ts.map +1 -0
  366. package/dist/structure/stamp-order.js +78 -0
  367. package/dist/structure/stamp-order.js.map +1 -0
  368. package/dist/structure/step-times.d.ts +49 -0
  369. package/dist/structure/step-times.d.ts.map +1 -0
  370. package/dist/structure/step-times.js +128 -0
  371. package/dist/structure/step-times.js.map +1 -0
  372. package/dist/structure/term-deadline.d.ts +19 -0
  373. package/dist/structure/term-deadline.d.ts.map +1 -0
  374. package/dist/structure/term-deadline.js +28 -0
  375. package/dist/structure/term-deadline.js.map +1 -0
  376. package/dist/structure/time-range.d.ts +16 -0
  377. package/dist/structure/time-range.d.ts.map +1 -0
  378. package/dist/structure/time-range.js +57 -0
  379. package/dist/structure/time-range.js.map +1 -0
  380. package/dist/structure/total-line.d.ts +16 -0
  381. package/dist/structure/total-line.d.ts.map +1 -0
  382. package/dist/structure/total-line.js +44 -0
  383. package/dist/structure/total-line.js.map +1 -0
  384. package/dist/structure/total.d.ts +7 -1
  385. package/dist/structure/total.d.ts.map +1 -1
  386. package/dist/structure/total.js +28 -5
  387. package/dist/structure/total.js.map +1 -1
  388. package/dist/structure/unlisted-items.d.ts +70 -0
  389. package/dist/structure/unlisted-items.d.ts.map +1 -0
  390. package/dist/structure/unlisted-items.js +152 -0
  391. package/dist/structure/unlisted-items.js.map +1 -0
  392. package/dist/structure/walk-time.d.ts +87 -0
  393. package/dist/structure/walk-time.d.ts.map +1 -0
  394. package/dist/structure/walk-time.js +195 -0
  395. package/dist/structure/walk-time.js.map +1 -0
  396. package/package.json +3 -3
  397. package/profiles/listing.yaml +20 -0
  398. package/rules/announced-count-mismatch.yaml +2 -2
  399. package/rules/capacity-runtime-mismatch.yaml +66 -0
  400. package/rules/contact-variant.yaml +76 -0
  401. package/rules/count-over-capacity.yaml +55 -0
  402. package/rules/date-outside-period.yaml +4 -4
  403. package/rules/date-stamp-order.yaml +82 -0
  404. package/rules/deadline-after-event.yaml +67 -0
  405. package/rules/defined-name-repeated.yaml +2 -2
  406. package/rules/due-before-issue.yaml +11 -7
  407. package/rules/fact-conflict.yaml +9 -4
  408. package/rules/heading-echo.yaml +2 -2
  409. package/rules/interval-count-mismatch.yaml +54 -0
  410. package/rules/latin-spacing.yaml +2 -2
  411. package/rules/layout-code-mismatch.yaml +68 -0
  412. package/rules/name-variant.yaml +8 -2
  413. package/rules/no-em-dash.yaml +2 -2
  414. package/rules/preamble-length.yaml +2 -2
  415. package/rules/quantity-range-reversed.yaml +53 -0
  416. package/rules/range-band-mismatch.yaml +70 -0
  417. package/rules/rent-multiple-mismatch.yaml +61 -0
  418. package/rules/scaled-quantity-mismatch.yaml +69 -0
  419. package/rules/step-time-sum-mismatch.yaml +65 -0
  420. package/rules/time-range-reversed.yaml +48 -0
  421. package/rules/title-case-consistency.yaml +2 -2
  422. package/rules/total-mismatch.yaml +2 -2
  423. package/rules/unit-mismatch.yaml +12 -4
  424. package/rules/unlisted-item-used.yaml +90 -0
  425. package/rules/unused-definition.yaml +2 -2
  426. package/rules/use-before-definition.yaml +2 -2
  427. package/rules/walk-time-distance-mismatch.yaml +55 -0
  428. package/src/announced-count.ts +6 -3
  429. package/src/contacts/addresses.ts +179 -0
  430. package/src/contacts/emails.ts +63 -0
  431. package/src/contacts/variants.ts +33 -0
  432. package/src/derived/battery-runtime.ts +284 -0
  433. package/src/derived/period-counts.ts +178 -0
  434. package/src/derived/time-lengths.ts +12 -9
  435. package/src/derived/use-interval.ts +151 -0
  436. package/src/detectors/announced-count.ts +1 -0
  437. package/src/detectors/capacity-runtime.ts +128 -0
  438. package/src/detectors/contact-variant.ts +24 -0
  439. package/src/detectors/count-over-capacity.ts +37 -0
  440. package/src/detectors/date-outside-period.ts +2 -1
  441. package/src/detectors/date-stamp-order.ts +28 -0
  442. package/src/detectors/defined-term-form.ts +63 -7
  443. package/src/detectors/definition-use.ts +6 -2
  444. package/src/detectors/derived-numbers.ts +3 -3
  445. package/src/detectors/due-date.ts +10 -2
  446. package/src/detectors/en-shape.ts +11 -4
  447. package/src/detectors/event-deadline.ts +29 -0
  448. package/src/detectors/fact-consistency.ts +64 -3
  449. package/src/detectors/heading-case.ts +13 -4
  450. package/src/detectors/heading-echo.ts +17 -1
  451. package/src/detectors/layout-code.ts +174 -0
  452. package/src/detectors/measured-facts.ts +20 -0
  453. package/src/detectors/name-variant-model-codes.ts +27 -0
  454. package/src/detectors/name-variant.ts +32 -6
  455. package/src/detectors/orthographic-variant.ts +78 -9
  456. package/src/detectors/orthography.ts +16 -6
  457. package/src/detectors/quantity-range.ts +47 -0
  458. package/src/detectors/range-band.ts +125 -0
  459. package/src/detectors/registry/capacity-runtime-mismatch.ts +4 -0
  460. package/src/detectors/registry/contact-variant.ts +4 -0
  461. package/src/detectors/registry/count-over-capacity.ts +4 -0
  462. package/src/detectors/registry/date-stamp-order.ts +4 -0
  463. package/src/detectors/registry/event-deadline.ts +4 -0
  464. package/src/detectors/registry/interval-count-mismatch.ts +4 -0
  465. package/src/detectors/registry/layout-code-mismatch.ts +4 -0
  466. package/src/detectors/registry/quantity-range.ts +4 -0
  467. package/src/detectors/registry/range-band-mismatch.ts +4 -0
  468. package/src/detectors/registry/rent-multiple-mismatch.ts +4 -0
  469. package/src/detectors/registry/scaled-quantity-mismatch.ts +4 -0
  470. package/src/detectors/registry/step-time-sum-mismatch.ts +4 -0
  471. package/src/detectors/registry/time-range-reversed.ts +4 -0
  472. package/src/detectors/registry/unlisted-item-used.ts +4 -0
  473. package/src/detectors/registry/walk-time-distance-mismatch.ts +4 -0
  474. package/src/detectors/rent-multiple-mismatch.ts +56 -0
  475. package/src/detectors/scaled-quantity.ts +49 -0
  476. package/src/detectors/signals.ts +3 -1
  477. package/src/detectors/step-time-sum.ts +55 -0
  478. package/src/detectors/structure-tree.ts +30 -5
  479. package/src/detectors/structure.ts +1 -1
  480. package/src/detectors/technical-docs.ts +12 -0
  481. package/src/detectors/time-order.ts +5 -1
  482. package/src/detectors/unit-consistency.ts +50 -38
  483. package/src/detectors/unlisted-items.ts +72 -0
  484. package/src/detectors/use-count-words.ts +32 -0
  485. package/src/detectors/use-interval.ts +51 -0
  486. package/src/detectors/walk-time-distance-mismatch.ts +45 -0
  487. package/src/facts/approximate-tolerance.ts +19 -0
  488. package/src/facts/item-amounts.ts +94 -0
  489. package/src/facts/labelled-facts.ts +29 -7
  490. package/src/facts/measure-units.ts +31 -0
  491. package/src/facts/measures.ts +113 -25
  492. package/src/facts/retention-periods.ts +216 -0
  493. package/src/facts/unit-conflicts.ts +22 -9
  494. package/src/facts/unit-equivalents.ts +70 -0
  495. package/src/facts/unit-tolerance.ts +17 -0
  496. package/src/facts/unit-word.ts +35 -0
  497. package/src/facts/written-precision.ts +23 -0
  498. package/src/kana-spelling.ts +25 -0
  499. package/src/model-codes.ts +104 -0
  500. package/src/name-spelling-chars.ts +34 -0
  501. package/src/name-variants.ts +8 -7
  502. package/src/phone-numbers.ts +26 -6
  503. package/src/place-names.ts +53 -14
  504. package/src/plugin.ts +2 -0
  505. package/src/preamble-paragraphs.ts +21 -2
  506. package/src/profile/parse.ts +10 -0
  507. package/src/spacing-code.ts +26 -0
  508. package/src/structure/amount-range.ts +16 -7
  509. package/src/structure/capacity-count.ts +196 -0
  510. package/src/structure/counted-amounts.ts +5 -4
  511. package/src/structure/date-outside-period.ts +11 -6
  512. package/src/structure/date-range.ts +1 -1
  513. package/src/structure/deadline-after-event.ts +67 -0
  514. package/src/structure/definition-use.ts +59 -2
  515. package/src/structure/due-date.ts +8 -32
  516. package/src/structure/labelled-date-order.ts +84 -0
  517. package/src/structure/layout-codes.ts +210 -0
  518. package/src/structure/measured-amounts.ts +138 -0
  519. package/src/structure/quantity-range.ts +54 -0
  520. package/src/structure/range-bands.ts +316 -0
  521. package/src/structure/rent-multiple.ts +277 -0
  522. package/src/structure/scaled-quantities.ts +225 -0
  523. package/src/structure/stamp-order.ts +100 -0
  524. package/src/structure/step-times.ts +169 -0
  525. package/src/structure/term-deadline.ts +35 -0
  526. package/src/structure/time-range.ts +64 -0
  527. package/src/structure/total-line.ts +63 -0
  528. package/src/structure/total.ts +41 -6
  529. package/src/structure/unlisted-items.ts +207 -0
  530. package/src/structure/walk-time.ts +285 -0
@@ -0,0 +1,93 @@
1
+ import { escapeRegExp } from "../orthography.js";
2
+ import { linesOf } from "../structure/lines.js";
3
+ import { cellsOf, tablesOf } from "../facts/table-facts.js";
4
+ import { asciiDigits, isLimited, lastIndexAtOrBefore, periodCounts, windowStart, } from "./period-counts.js";
5
+ const MINUTES_PER_HOUR = 60;
6
+ const lower = (text) => text.toLowerCase();
7
+ const SENTENCE_END = /[。.!?!?\n]|\.(?=\s|$)/u;
8
+ /** How far after a length its sentence is read, in characters. */
9
+ const SENTENCE_REACH = 120;
10
+ const sentenceAround = (text, span) => {
11
+ const end = SENTENCE_END.exec(text.slice(span.end, span.end + SENTENCE_REACH));
12
+ return { start: windowStart(text, span.start, []), end: end === null ? Math.min(text.length, span.end + SENTENCE_REACH) : span.end + end.index };
13
+ };
14
+ const hasWord = (text, word) => new RegExp(`(?<![a-z])${escapeRegExp(lower(word))}(?![a-z])`, "u").test(lower(text));
15
+ /** 4時間以上, at least 4 hours: a length with a minimum mark beside it and an interval word in its sentence. */
16
+ const isMinimumInterval = (text, length, words) => {
17
+ const sentence = sentenceAround(text, length);
18
+ const before = lower(text.slice(sentence.start, length.start)).trimEnd();
19
+ const after = lower(text.slice(length.end, sentence.end)).trimStart();
20
+ const marked = words.minimum.some((mark) => (mark.position ?? "after") === "after" ? after.startsWith(lower(mark.pattern)) : before.endsWith(lower(mark.pattern)));
21
+ return marked && words.cues.some((cue) => hasWord(text.slice(sentence.start, sentence.end), cue));
22
+ };
23
+ const inside = (scope) => (span) => span.start >= scope.start && span.end <= scope.end;
24
+ const statementIn = (scope, counts, intervals) => {
25
+ const [inCounts, inIntervals] = [counts.filter(inside(scope)), intervals.filter(inside(scope))];
26
+ const [count, interval] = [inCounts[0], inIntervals[0]];
27
+ return inCounts.length === 1 && inIntervals.length === 1 && count !== undefined && interval !== undefined ? { count, interval } : undefined;
28
+ };
29
+ const HEADING = /^ {0,3}#{1,6}\s/u;
30
+ const plain = (cell) => lower(asciiDigits(cell).normalize("NFKC").replace(/[*_`]/gu, "").trim());
31
+ const COUNT_CELL = /^(\d+)(?:\s*[〜~\-–]\s*(\d+))?$/u;
32
+ /** A cell that holds only a count: 3, 3回, 2〜3回, three, twice. The larger end of a range. */
33
+ const cellCount = (cell, words) => {
34
+ const text = plain(cell);
35
+ const counter = words.counters.find((word) => text.endsWith(lower(word)));
36
+ const bare = counter === undefined ? text : text.slice(0, -counter.length).trim();
37
+ const digits = COUNT_CELL.exec(bare);
38
+ if (digits !== null)
39
+ return Number(digits[2] ?? digits[1]);
40
+ return words.numberWords.find((word) => lower(word.pattern) === bare)?.value;
41
+ };
42
+ /** The largest count of each counted column, in every table. */
43
+ const tableCountsOf = (lines, words) => tablesOf(lines).flatMap(({ header, rows }) => cellsOf(header).flatMap((cell, index) => {
44
+ const column = words.columns.find((word) => plain(word.pattern) === plain(cell.text));
45
+ const values = rows.flatMap((row) => {
46
+ const value = cellCount(cellsOf(row)[index]?.text ?? "", words);
47
+ return value === undefined ? [] : [value];
48
+ });
49
+ if (column === undefined || values.length === 0)
50
+ return [];
51
+ return [{ at: header.start, column: cell.text.trim(), count: Math.max(...values), hours: column.hours }];
52
+ }));
53
+ const layoutOf = (text, words) => {
54
+ const lines = linesOf(text);
55
+ return { headings: lines.filter((line) => HEADING.test(line.text)).map((line) => line.start), tables: tableCountsOf(lines, words), length: text.length };
56
+ };
57
+ /** The heading-delimited section that holds at. */
58
+ const sectionOf = (layout, at) => {
59
+ const index = lastIndexAtOrBefore(layout.headings, at);
60
+ return { start: layout.headings[index] ?? 0, end: layout.headings[index + 1] ?? layout.length };
61
+ };
62
+ const tableMismatch = (layout, count) => {
63
+ const section = sectionOf(layout, count.start);
64
+ const tables = layout.tables.filter((table) => table.at >= section.start && table.at < section.end && table.hours === count.hours);
65
+ const table = tables[0];
66
+ if (tables.length !== 1 || table === undefined || table.count === count.amount)
67
+ return undefined;
68
+ return { kind: "table", count, column: table.column, tableCount: table.count };
69
+ };
70
+ const mismatchOf = (layout, statement) => {
71
+ const { count, interval } = statement;
72
+ const neededMinutes = (count.amount - 1) * interval.minutes;
73
+ if (neededMinutes >= count.hours * MINUTES_PER_HOUR)
74
+ return { kind: "interval", count, interval, neededHours: neededMinutes / MINUTES_PER_HOUR };
75
+ return tableMismatch(layout, count);
76
+ };
77
+ /** Limited counts that a minimum interval in the same paragraph, or the table of the section, contradicts. */
78
+ export const intervalCountMismatches = (written, scopes, lengths, words) => {
79
+ const text = asciiDigits(written);
80
+ const all = periodCounts(text, words);
81
+ const takenEnds = all.map((count) => count.end);
82
+ const counts = all.filter((count) => isLimited(text, count, windowStart(text, count.start, takenEnds), words));
83
+ const intervals = lengths.filter((length) => isMinimumInterval(text, length, words));
84
+ if (counts.length === 0 || intervals.length === 0)
85
+ return [];
86
+ const layout = layoutOf(text, words);
87
+ return scopes.flatMap((scope) => {
88
+ const statement = statementIn(scope, counts, intervals);
89
+ const found = statement === undefined ? undefined : mismatchOf(layout, statement);
90
+ return found === undefined ? [] : [found];
91
+ });
92
+ };
93
+ //# sourceMappingURL=use-interval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-interval.js","sourceRoot":"","sources":["../../src/derived/use-interval.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"announced-count.d.ts","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAmCrE,uDAAuD;AACvD,eAAO,MAAM,cAAc,EAAE,QAM5B,CAAC"}
1
+ {"version":3,"file":"announced-count.d.ts","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAoCrE,uDAAuD;AACvD,eAAO,MAAM,cAAc,EAAE,QAM5B,CAAC"}
@@ -6,6 +6,7 @@ const countWordsOf = (doc) => ({
6
6
  anchors: patternsOf(doc, "count-anchor"),
7
7
  numbers: patternsOf(doc, "count-number"),
8
8
  counters: patternsOf(doc, "count-counter"),
9
+ frames: patternsOf(doc, "count-frame"),
9
10
  hedgesBefore: patternsOf(doc, "count-hedge", "before"),
10
11
  hedgesAfter: patternsOf(doc, "count-hedge", "after"),
11
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"announced-count.js","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAuC,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAoB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAE,QAA6B,EAAY,EAAE,CAC7F,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAElI,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAc,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;IACxC,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;IACxC,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC;IAC1C,YAAY,EAAE,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC;IACtD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,GAAkB,EAAE,KAAa,EAAY,EAAE,CAClE,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE9G,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAe,EAAE,CAAC,CAAC;IAC1D,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC;IACzC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;IACnC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,QAAuB,EAAE,OAAgB,EAAW,EAAE,CAAC,CAAC;IAC7F,IAAI,EAAE,0BAA0B;IAChC,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;IACpH,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAa,EAAE;IACzD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO;QACL,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrG,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACnI,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"announced-count.js","sourceRoot":"","sources":["../../src/detectors/announced-count.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Detector, ProseDocument } from "../plugin.ts";
2
+ import { type BatteryWords } from "../derived/battery-runtime.ts";
3
+ type Lexicons = ProseDocument["lexicons"];
4
+ export declare const batteryWordsOf: (lexicons: Lexicons) => BatteryWords;
5
+ export declare const capacityRuntime: Detector;
6
+ export {};
7
+ //# sourceMappingURL=capacity-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity-runtime.d.ts","sourceRoot":"","sources":["../../src/detectors/capacity-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAW,aAAa,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,EAML,KAAK,YAAY,EAKlB,MAAM,+BAA+B,CAAC;AAMvC,KAAK,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAO1C,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,KAAG,YAanD,CAAC;AA+DF,eAAO,MAAM,eAAe,EAAE,QAqB7B,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { cellsOf, tablesOf } from "../facts/table-facts.js";
2
+ import { linesOf } from "../structure/lines.js";
3
+ import { capacityRuntimeMismatches, isPeakHeading, labelOf, splitCondition, valueOf, } from "../derived/battery-runtime.js";
4
+ import { quoteAt } from "./structure-tree.js";
5
+ const FAMILIES = ["charge", "current", "energy", "power"];
6
+ const isFamily = (group) => FAMILIES.some((family) => family === group);
7
+ const markersOf = (lexicons, id, group) => (lexicons[id] ?? [])
8
+ .filter((entry) => group === undefined || entry.group === group)
9
+ .map((entry) => ({ pattern: entry.pattern, position: entry.position ?? "before" }));
10
+ export const batteryWordsOf = (lexicons) => {
11
+ const labels = (lexicons["battery-label"] ?? []).map((entry) => ({ pattern: entry.pattern, group: entry.group ?? "" }));
12
+ const bounds = markersOf(lexicons, "battery-label", "bound");
13
+ return {
14
+ electric: (lexicons["battery-unit"] ?? []).flatMap((entry) => isFamily(entry.group) ? [{ pattern: entry.pattern, weight: entry.weight ?? 1, family: entry.group }] : []),
15
+ time: (lexicons["unit-time"] ?? []).map((entry) => ({ pattern: entry.pattern, weight: entry.weight ?? 1 })),
16
+ approximate: markersOf(lexicons, "approximate-marker").filter((marker) => !bounds.some((bound) => bound.pattern === marker.pattern)),
17
+ bounds,
18
+ connectors: (lexicons["range-connector"] ?? []).map((entry) => entry.pattern),
19
+ labels,
20
+ };
21
+ };
22
+ const EMPHASIS = /[*`]/gu;
23
+ const plain = (text) => text.replace(EMPHASIS, "");
24
+ const entryOf = (label, value, words, columnPeak) => {
25
+ const named = labelOf(plain(label), words);
26
+ const text = plain(value.text).trim();
27
+ const read = named === undefined ? undefined : valueOf(text, named.role, words);
28
+ if (named === undefined || read === undefined)
29
+ return undefined;
30
+ const lead = value.text.length - value.text.trimStart().length;
31
+ return {
32
+ ...named,
33
+ peak: named.peak || read.peak || columnPeak,
34
+ condition: named.condition === "" ? splitCondition(text).condition : named.condition,
35
+ reading: read.reading,
36
+ start: value.start + lead,
37
+ text,
38
+ };
39
+ };
40
+ const sectionAt = (doc, offset) => doc.sections.findLastIndex((section) => section.span.start <= offset);
41
+ const TWO_COLUMNS = 2;
42
+ const tableSlots = (doc, words) => tablesOf(linesOf(doc.source)).flatMap((table) => {
43
+ const headings = cellsOf(table.header);
44
+ const wide = headings.length > TWO_COLUMNS;
45
+ return table.rows.flatMap((row) => {
46
+ const [label, ...values] = cellsOf(row);
47
+ if (label === undefined)
48
+ return [];
49
+ return values.flatMap((value, index) => {
50
+ const column = index + 1;
51
+ const peak = wide && isPeakHeading(plain(headings[column]?.text ?? ""), words);
52
+ const entry = entryOf(label.text, value, words, peak);
53
+ const key = wide ? `table ${table.header.start} ${column}` : `section ${sectionAt(doc, row.start)}`;
54
+ return entry === undefined || (!wide && column > 1) ? [] : [{ key, entry }];
55
+ });
56
+ });
57
+ });
58
+ const LIST_MARKER = /^\s*(?:[-*+]|\d+[.)])\s+/u;
59
+ const COLON = /[::]/u;
60
+ const MAX_LABEL = 80;
61
+ /** "Battery life: up to 10 hours", "- 消費電流:500 mA". */
62
+ const lineSlot = (doc, line, words) => {
63
+ const body = line.text.slice(LIST_MARKER.exec(line.text)?.[0].length ?? 0);
64
+ const colon = COLON.exec(body)?.index;
65
+ if (colon === undefined)
66
+ return [];
67
+ const label = body.slice(0, colon).trim();
68
+ const value = body.slice(colon + 1).trim();
69
+ if (label === "" || label.length > MAX_LABEL || value === "")
70
+ return [];
71
+ const start = line.start + line.text.lastIndexOf(value);
72
+ const entry = entryOf(label, { start, end: start + value.length, text: value }, words, false);
73
+ return entry === undefined ? [] : [{ key: `section ${sectionAt(doc, line.start)}`, entry }];
74
+ };
75
+ const HOUR_DECIMALS = 100;
76
+ export const capacityRuntime = (doc) => {
77
+ const words = batteryWordsOf(doc.lexicons);
78
+ const lines = linesOf(doc.prose ?? doc.source).filter((line) => !line.text.includes("|"));
79
+ const slots = [...tableSlots(doc, words), ...lines.flatMap((line) => lineSlot(doc, line, words))];
80
+ const keys = [...new Set(slots.map((slot) => slot.key))];
81
+ return keys
82
+ .flatMap((key) => capacityRuntimeMismatches(slots.filter((slot) => slot.key === key).map((slot) => slot.entry)))
83
+ .map((mismatch) => ({
84
+ rule: "capacity-runtime-mismatch",
85
+ severity: "warning",
86
+ line: 0,
87
+ column: 0,
88
+ quote: quoteAt(doc.source, mismatch.runtime.start),
89
+ values: {
90
+ capacity: mismatch.capacity.text,
91
+ consumption: mismatch.consumption.text,
92
+ runtime: mismatch.runtime.text,
93
+ expected: Math.round(mismatch.idealHours * HOUR_DECIMALS) / HOUR_DECIMALS,
94
+ offset: mismatch.runtime.start,
95
+ },
96
+ }));
97
+ };
98
+ //# sourceMappingURL=capacity-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity-runtime.js","sourceRoot":"","sources":["../../src/detectors/capacity-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../plugin.ts";
2
+ export declare const contactVariant: Detector;
3
+ //# sourceMappingURL=contact-variant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-variant.d.ts","sourceRoot":"","sources":["../../src/detectors/contact-variant.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,cAAc,CAAC;AAYtD,eAAO,MAAM,cAAc,EAAE,QAK5B,CAAC"}
@@ -0,0 +1,21 @@
1
+ // contact-variant: one email address or postal address written two ways in one document (contacts/emails.ts,
2
+ // contacts/addresses.ts). The address labels come from the language's address-label lexicon.
3
+ import { addressVariants } from "../contacts/addresses.js";
4
+ import { emailVariants } from "../contacts/emails.js";
5
+ import { quoteAt } from "./structure-tree.js";
6
+ const findingOf = (source, { writing, other }, variant) => ({
7
+ rule: "",
8
+ severity: "info",
9
+ line: 0,
10
+ column: 0,
11
+ quote: quoteAt(source, writing.offset),
12
+ values: { written: writing.written, other: other.written, offset: writing.offset },
13
+ ...(variant === undefined ? {} : { variant }),
14
+ });
15
+ export const contactVariant = (doc, options) => {
16
+ const text = doc.prose ?? doc.source;
17
+ const emails = emailVariants(text).map((found) => findingOf(doc.source, found));
18
+ const addresses = addressVariants(text, options.lexicon ?? []).map(({ variant, found }) => findingOf(doc.source, found, variant));
19
+ return [...emails, ...addresses].toSorted((a, b) => Number(a.values?.["offset"]) - Number(b.values?.["offset"]));
20
+ };
21
+ //# sourceMappingURL=contact-variant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-variant.js","sourceRoot":"","sources":["../../src/detectors/contact-variant.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,6FAA6F;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAoB,EAAE,OAAgB,EAAW,EAAE,CAAC,CAAC;IACtG,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAClF,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnH,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Detector } from "../plugin.ts";
2
+ /** The prose with its tables put back, so code is not read; offsets are the source's. */
3
+ export declare const countOverCapacity: Detector;
4
+ //# sourceMappingURL=count-over-capacity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count-over-capacity.d.ts","sourceRoot":"","sources":["../../src/detectors/count-over-capacity.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAkBrE,yFAAyF;AACzF,eAAO,MAAM,iBAAiB,EAAE,QAY3B,CAAC"}
@@ -0,0 +1,26 @@
1
+ // A stated capacity smaller than a stated number registered, invited or attending (count-over-capacity). The words come
2
+ // from the language package: capacity-label, headcount-label, headcount-unit and capacity-exception.
3
+ import { countsOverCapacity } from "../structure/capacity-count.js";
4
+ import { proseAndTablesOf } from "../table-text.js";
5
+ import { quoteAt } from "./structure-tree.js";
6
+ const marksOf = (doc, lexicon) => (doc.lexicons[lexicon] ?? []).map((entry) => ({ pattern: entry.pattern, position: entry.position, group: entry.group }));
7
+ const exceptionsOf = (doc, group) => (doc.lexicons["capacity-exception"] ?? []).filter((entry) => entry.group === group).map((entry) => entry.pattern);
8
+ const capacityWords = (doc) => ({
9
+ capacities: marksOf(doc, "capacity-label"),
10
+ counts: marksOf(doc, "headcount-label"),
11
+ units: marksOf(doc, "headcount-unit"),
12
+ overflows: exceptionsOf(doc, "overflow"),
13
+ perSession: exceptionsOf(doc, "per-session"),
14
+ otherOccasions: exceptionsOf(doc, "other-occasion"),
15
+ negations: exceptionsOf(doc, "negation"),
16
+ });
17
+ /** The prose with its tables put back, so code is not read; offsets are the source's. */
18
+ export const countOverCapacity = (doc) => countsOverCapacity(proseAndTablesOf(doc), capacityWords(doc), doc.sections.map((section) => section.span)).map((issue) => ({
19
+ rule: "count-over-capacity",
20
+ severity: "warning",
21
+ line: 0,
22
+ column: 0,
23
+ quote: quoteAt(doc.source, issue.offset),
24
+ values: { ...issue.values, offset: issue.offset },
25
+ }));
26
+ //# sourceMappingURL=count-over-capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count-over-capacity.js","sourceRoot":"","sources":["../../src/detectors/count-over-capacity.ts"],"names":[],"mappings":"AAAA,wHAAwH;AACxH,qGAAqG;AACrG,OAAO,EAAE,kBAAkB,EAAsC,MAAM,gCAAgC,CAAC;AACxG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAE,OAAe,EAAe,EAAE,CACnE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAE3H,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAE,KAAa,EAAY,EAAE,CACnE,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEpH,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAiB,EAAE,CAAC,CAAC;IAC5D,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC;IACrC,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;IACxC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5C,cAAc,EAAE,YAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC;IACnD,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;CACzC,CAAC,CAAC;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,EAAa,EAAE,CAC5D,kBAAkB,CAChB,gBAAgB,CAAC,GAAG,CAAC,EACrB,aAAa,CAAC,GAAG,CAAC,EAClB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAC5C,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChB,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;CAClD,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"date-outside-period.d.ts","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAwBrE,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,QAe/B,CAAC"}
1
+ {"version":3,"file":"date-outside-period.d.ts","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAyBrE,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,QAe/B,CAAC"}
@@ -3,13 +3,14 @@ import { datesOutsidePeriod } from "../structure/date-outside-period.js";
3
3
  import { rangeFrameOf } from "../structure/date-range.js";
4
4
  import { quoteAt } from "./structure-tree.js";
5
5
  const patternsOf = (doc, lexicon) => (doc.lexicons[lexicon] ?? []).map((entry) => entry.pattern);
6
- /** 期間の語、期間の外に置く語、文書の仕事の期間の語、締め切りの語、概要の節の見出しの語、範囲の記号(range-connector、range-opener、range-frame の間の語)、月と曜日の名は語彙表から取る。 */
6
+ /** 期間の語、期間の外に置く語、文書の仕事の期間の語、締め切りの語、期間の後に来てよい仕事の語、概要の節の見出しの語、範囲の記号(range-connector、range-opener、range-frame の間の語)、月と曜日の名は語彙表から取る。 */
7
7
  const wordsOf = (doc) => ({
8
8
  labels: patternsOf(doc, "period-label"),
9
9
  terms: patternsOf(doc, "period-term-label"),
10
10
  asides: patternsOf(doc, "period-aside"),
11
11
  deadlines: patternsOf(doc, "period-deadline"),
12
12
  overviews: patternsOf(doc, "period-overview-heading"),
13
+ afterTerm: patternsOf(doc, "period-after-term"),
13
14
  connectors: [
14
15
  ...patternsOf(doc, "range-connector"),
15
16
  ...patternsOf(doc, "range-opener"),
@@ -1 +1 @@
1
- {"version":3,"file":"date-outside-period.js","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qCAAqC,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,OAAe,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAElI,sHAAsH;AACtH,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAgB,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;IACvC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;IACvC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAC7C,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC;IACrD,UAAU,EAAE;QACV,GAAG,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;QACrC,GAAG,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;QAClC,GAAG,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;KAC3F;IACD,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC;IACrC,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC;CACrC,CAAC,CAAC;AAEH,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,EAAa,EAAE;IAC5D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5D,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAClH,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;KAClD,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"date-outside-period.js","sourceRoot":"","sources":["../../src/detectors/date-outside-period.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../plugin.ts";
2
+ export declare const dateStampOrder: Detector;
3
+ //# sourceMappingURL=date-stamp-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-stamp-order.d.ts","sourceRoot":"","sources":["../../src/detectors/date-stamp-order.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,cAAc,CAAC;AAMtD,eAAO,MAAM,cAAc,EAAE,QAmB5B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { inDocumentOrder } from "../structure/issues.js";
2
+ import { stampOrderIssues } from "../structure/stamp-order.js";
3
+ import { proseAndTablesOf } from "../table-text.js";
4
+ import { quoteAt } from "./structure-tree.js";
5
+ export const dateStampOrder = (doc, options) => {
6
+ if (doc.structure === undefined)
7
+ return [];
8
+ const labels = options.lexicon ?? [];
9
+ const wordsOf = (group) => labels.filter((entry) => entry.group === group).map((entry) => entry.pattern);
10
+ const dates = inDocumentOrder(doc.structure).flatMap((node) => node.kind === "date" ? [{ offset: node.span.start, end: node.span.end, value: String(node.attrs["value"]) }] : []);
11
+ return stampOrderIssues(proseAndTablesOf(doc), dates, { established: wordsOf("established"), updated: wordsOf("updated") }).map(({ offset, values }) => {
12
+ const { side, ...dated } = values;
13
+ return {
14
+ rule: "",
15
+ severity: "info",
16
+ line: 0,
17
+ column: 0,
18
+ quote: quoteAt(doc.source, offset),
19
+ values: { ...dated, offset },
20
+ ...(side === undefined ? {} : { variant: String(side) }),
21
+ };
22
+ });
23
+ };
24
+ //# sourceMappingURL=date-stamp-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-stamp-order.js","sourceRoot":"","sources":["../../src/detectors/date-stamp-order.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3H,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5D,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAClH,CAAC;IACF,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACrJ,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;YAClC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE;YAC5B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"defined-term-form.d.ts","sourceRoot":"","sources":["../../src/detectors/defined-term-form.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAMvG,OAAO,KAAK,EAAE,QAAQ,EAAW,aAAa,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAC;AAgC5F,mGAAmG;AACnG,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,KAAG,MAAM,EASxG,CAAC;AAWL,mIAAmI;AACnI,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAyE,CAAC;AAEtH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAS7H,CAAC;AA8FF,eAAO,MAAM,eAAe,EAAE,QAgB7B,CAAC;AAaF,uHAAuH;AACvH,eAAO,MAAM,UAAU,GAAI,UAAU,QAAQ,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAWzE,CAAC;AAuBF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAc5H;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,UAAS,SAAS,MAAM,EAAO,KAAG,OAI3G,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,aAAa,EAAE,OAAO,SAAS,WAAW,EAAE,KAAG,YAAY,EAiB7F,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAK3B,CAAC"}
1
+ {"version":3,"file":"defined-term-form.d.ts","sourceRoot":"","sources":["../../src/detectors/defined-term-form.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAMvG,OAAO,KAAK,EAAE,QAAQ,EAAW,aAAa,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAC;AAgC5F,mGAAmG;AACnG,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,KAAG,MAAM,EASxG,CAAC;AAWL,mIAAmI;AACnI,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAyE,CAAC;AAEtH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAS7H,CAAC;AA8FF,eAAO,MAAM,eAAe,EAAE,QAgB7B,CAAC;AAaF,uHAAuH;AACvH,eAAO,MAAM,UAAU,GAAI,UAAU,QAAQ,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAWzE,CAAC;AAuBF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAqE5H;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,UAAS,SAAS,MAAM,EAAO,KAAG,OAI3G,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,aAAa,EAAE,OAAO,SAAS,WAAW,EAAE,KAAG,YAAY,EAkB7F,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAK3B,CAAC"}
@@ -19,8 +19,8 @@ const finding = (doc, rule, offset, variant, values) => ({
19
19
  });
20
20
  const OPENING_QUOTES = new Set(["「", "『", '"', "“"]);
21
21
  const CLOSING_QUOTES = new Set(["」", "』", '"', "”"]);
22
- /** A quoted term right before these is defined again (「X」とは, "X" means), which duplicate-definition reads. */
23
- const DEFINING_AFTER = /^(?:とは|という|\s+(?:means|shall mean|refers to|has the meaning))/u;
22
+ /** A quoted term right before these is defined again (「X」とは, 「X」といいます, "X" means), which duplicate-definition reads. */
23
+ const DEFINING_AFTER = /^(?:とは|という|といい(?:ます)?(?=[。、,))\s]|$)|\s+(?:means|shall mean|refers to|has the meaning))/u;
24
24
  /** The ending a use may carry past the term: a plural or a possessive (Services, Service's). */
25
25
  const WORD_ENDING = /^(?:e?s|['’]s?)/u;
26
26
  /** The first definition of each term, with the spans of all its definitions. */
@@ -198,14 +198,63 @@ const bracketBefore = (source, definition) => {
198
198
  const at = Math.max(before.lastIndexOf("("), before.lastIndexOf("("));
199
199
  return at === -1 ? -1 : Math.max(0, definition.start - 2) + at;
200
200
  };
201
- /** A line that holds the short name too (甲 株式会社みなと) or little else than the long name: a signature block names both. */
202
- const isNameLine = (source, offset, name, term) => {
201
+ /** How many characters a line may add to the long name and still be a line that only names the party. */
202
+ const SLACK = 12;
203
+ /** A field label on its own line, after a list marker (Attention:, 宛先:): short, and not a sentence. */
204
+ const FIELD_LABEL = /^(?:[-*+]\s+)?[^::。.]{1,20}[::]\s*/u;
205
+ /**
206
+ * What may follow the name in an address field: nothing, a comma and the next part (, Member Support), or a space and a part
207
+ * that does not go on in lower case (株式会社みなと 総務部). A particle or a verb (は支払う, shall pay) makes the line a sentence.
208
+ */
209
+ const NEXT_PART = /^\.?(?:$|\s*[,、,]|\s+(?!\p{Ll}))/u;
210
+ const CLOSES_SENTENCE = /[.。!?!?]$/u;
211
+ /** A field whose value is the name and a little more, not a sentence (Attention: Hibari Lab Inc., Member Support). */
212
+ const isNameField = (line, name) => {
213
+ const label = FIELD_LABEL.exec(line);
214
+ const value = label === null ? "" : line.slice(label[0].length);
215
+ const rest = value.slice(name.length);
216
+ return value.startsWith(name) && NEXT_PART.test(rest) && [...rest].length <= SLACK * 2 && !CLOSES_SENTENCE.test(rest.slice(1));
217
+ };
218
+ /** A contact field's label: after a bullet or a number (1. 連絡先:), and as long as a label in English runs (Privacy Contact:). */
219
+ const CONTACT_LABEL = /^(?:(?:[-*+]|\d+[.)])\s+)?([^::。.]{1,40})[::]\s*/u;
220
+ const LABEL_MARKS = /[*_\s]+/gu;
221
+ /** After the name in a contact field, the next part after a space or a comma (, Tokyo), or the bracket that holds it (お問い合わせ窓口(株式会社みなと)). */
222
+ const NEXT_CONTACT_PART = /^\.?(?:$|[))]|\s*,?\s+(?!\p{Ll}))/u;
223
+ /** A comma that goes on in lower case or 、 may also start a clause (, which may; 株式会社みなと、平日に受け付ける): the address field's bound. */
224
+ const COMMA_PART = /^\.?\s*[,、,]/u;
225
+ const endsWithContactLabel = (label, contactLabels) => {
226
+ const bare = label.replaceAll(LABEL_MARKS, "").toLowerCase();
227
+ return contactLabels.some((contact) => contact !== "" && bare.endsWith(contact.toLowerCase()));
228
+ };
229
+ /**
230
+ * A field whose label ends with a contact label (窓口:, Attention:): the value names the party in full however long it is and
231
+ * wherever the name sits in it, unless the name goes on as a sentence (連絡先:株式会社みなとは、…).
232
+ */
233
+ const isContactField = (line, name, contactLabels) => {
234
+ const label = CONTACT_LABEL.exec(line);
235
+ if (label === null || !endsWithContactLabel(label[1] ?? "", contactLabels))
236
+ return false;
237
+ const value = line.slice(label[0].length);
238
+ const at = value.indexOf(name);
239
+ if (at === -1)
240
+ return false;
241
+ const rest = value.slice(at + name.length);
242
+ const continues = NEXT_CONTACT_PART.test(rest) || (COMMA_PART.test(rest) && [...rest].length <= SLACK * 2);
243
+ return continues && !CLOSES_SENTENCE.test(rest.slice(1));
244
+ };
245
+ /**
246
+ * A line that holds the short name too (甲 株式会社みなと), little else than the long name (a signature block names both),
247
+ * or a field whose value is the name (Attention: …, 宛先:…): an address gives the name in full.
248
+ */
249
+ const isNameLine = (source, offset, name, term, contactLabels) => {
203
250
  const start = source.lastIndexOf("\n", offset - 1) + 1;
204
251
  const end = source.indexOf("\n", offset);
205
252
  const line = source.slice(start, end === -1 ? source.length : end).trim();
206
- const SLACK = 12;
207
253
  // The short name inside the long one ("Pinecone" in "Pinecone Software Ltd") is not the short name written beside it.
208
- return line.replaceAll(name, "").includes(term) || [...line].length <= [...name].length + SLACK;
254
+ return (line.replaceAll(name, "").includes(term) ||
255
+ [...line].length <= [...name].length + SLACK ||
256
+ isNameField(line, name) ||
257
+ isContactField(line, name, contactLabels));
209
258
  };
210
259
  /** A name inside a longer word (東京大学 in 東京大学大学院, Acme in Acmeware) is part of another name. */
211
260
  const WORD_CHAR = /[\p{Script=Han}\p{Script=Katakana}\p{Script=Latin}\p{N}ー]/u;
@@ -225,6 +274,7 @@ export const standsAlone = (source, offset, name, joiners = []) => {
225
274
  export const repeatedNames = (doc, terms) => {
226
275
  const defined = new Set(terms.map((term) => term.term));
227
276
  const joiners = (doc.lexicons["enumeration-joiner"] ?? []).map((entry) => entry.pattern);
277
+ const contactLabels = (doc.lexicons["contact-label"] ?? []).map((entry) => entry.pattern);
228
278
  return terms
229
279
  .filter((term) => term.inline)
230
280
  .flatMap((term) => {
@@ -237,7 +287,7 @@ export const repeatedNames = (doc, terms) => {
237
287
  return doc.sentences
238
288
  .filter((later) => later.span.start > term.span.end)
239
289
  .flatMap((later) => [...later.text.matchAll(pattern)].map((match) => later.span.start + match.index))
240
- .filter((offset) => standsAlone(doc.source, offset, name, joiners) && !isNameLine(doc.source, offset, name, term.term))
290
+ .filter((offset) => standsAlone(doc.source, offset, name, joiners) && !isNameLine(doc.source, offset, name, term.term, contactLabels))
241
291
  .map((offset) => ({ offset, name, term: term.term, line: term.line }));
242
292
  });
243
293
  };