chaffjs 0.29.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 (681) 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/session-hours.d.ts +26 -0
  26. package/dist/derived/session-hours.d.ts.map +1 -0
  27. package/dist/derived/session-hours.js +29 -0
  28. package/dist/derived/session-hours.js.map +1 -0
  29. package/dist/derived/time-lengths.d.ts +37 -0
  30. package/dist/derived/time-lengths.d.ts.map +1 -0
  31. package/dist/derived/time-lengths.js +171 -0
  32. package/dist/derived/time-lengths.js.map +1 -0
  33. package/dist/derived/unit-counts.d.ts +7 -0
  34. package/dist/derived/unit-counts.d.ts.map +1 -0
  35. package/dist/derived/unit-counts.js +13 -0
  36. package/dist/derived/unit-counts.js.map +1 -0
  37. package/dist/derived/use-interval.d.ts +33 -0
  38. package/dist/derived/use-interval.d.ts.map +1 -0
  39. package/dist/derived/use-interval.js +93 -0
  40. package/dist/derived/use-interval.js.map +1 -0
  41. package/dist/derived/working-hours.d.ts +36 -0
  42. package/dist/derived/working-hours.d.ts.map +1 -0
  43. package/dist/derived/working-hours.js +55 -0
  44. package/dist/derived/working-hours.js.map +1 -0
  45. package/dist/detectors/acronym-expansion.d.ts +1 -1
  46. package/dist/detectors/acronym-expansion.d.ts.map +1 -1
  47. package/dist/detectors/acronym-expansion.js +46 -2
  48. package/dist/detectors/acronym-expansion.js.map +1 -1
  49. package/dist/detectors/announced-count.d.ts.map +1 -1
  50. package/dist/detectors/announced-count.js +1 -0
  51. package/dist/detectors/announced-count.js.map +1 -1
  52. package/dist/detectors/capacity-runtime.d.ts +7 -0
  53. package/dist/detectors/capacity-runtime.d.ts.map +1 -0
  54. package/dist/detectors/capacity-runtime.js +98 -0
  55. package/dist/detectors/capacity-runtime.js.map +1 -0
  56. package/dist/detectors/capitalised-term.d.ts +44 -0
  57. package/dist/detectors/capitalised-term.d.ts.map +1 -0
  58. package/dist/detectors/capitalised-term.js +101 -0
  59. package/dist/detectors/capitalised-term.js.map +1 -0
  60. package/dist/detectors/contact-variant.d.ts +3 -0
  61. package/dist/detectors/contact-variant.d.ts.map +1 -0
  62. package/dist/detectors/contact-variant.js +21 -0
  63. package/dist/detectors/contact-variant.js.map +1 -0
  64. package/dist/detectors/count-over-capacity.d.ts +4 -0
  65. package/dist/detectors/count-over-capacity.d.ts.map +1 -0
  66. package/dist/detectors/count-over-capacity.js +26 -0
  67. package/dist/detectors/count-over-capacity.js.map +1 -0
  68. package/dist/detectors/date-outside-period.d.ts.map +1 -1
  69. package/dist/detectors/date-outside-period.js +5 -1
  70. package/dist/detectors/date-outside-period.js.map +1 -1
  71. package/dist/detectors/date-stamp-order.d.ts +3 -0
  72. package/dist/detectors/date-stamp-order.d.ts.map +1 -0
  73. package/dist/detectors/date-stamp-order.js +24 -0
  74. package/dist/detectors/date-stamp-order.js.map +1 -0
  75. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  76. package/dist/detectors/defined-term-form.js +57 -7
  77. package/dist/detectors/defined-term-form.js.map +1 -1
  78. package/dist/detectors/definition-use.d.ts +1 -1
  79. package/dist/detectors/definition-use.d.ts.map +1 -1
  80. package/dist/detectors/definition-use.js +4 -2
  81. package/dist/detectors/definition-use.js.map +1 -1
  82. package/dist/detectors/derived-numbers.d.ts +11 -1
  83. package/dist/detectors/derived-numbers.d.ts.map +1 -1
  84. package/dist/detectors/derived-numbers.js +74 -20
  85. package/dist/detectors/derived-numbers.js.map +1 -1
  86. package/dist/detectors/due-date.d.ts.map +1 -1
  87. package/dist/detectors/due-date.js +6 -0
  88. package/dist/detectors/due-date.js.map +1 -1
  89. package/dist/detectors/en-shape.d.ts.map +1 -1
  90. package/dist/detectors/en-shape.js +7 -4
  91. package/dist/detectors/en-shape.js.map +1 -1
  92. package/dist/detectors/event-deadline.d.ts +3 -0
  93. package/dist/detectors/event-deadline.d.ts.map +1 -0
  94. package/dist/detectors/event-deadline.js +24 -0
  95. package/dist/detectors/event-deadline.js.map +1 -0
  96. package/dist/detectors/fact-consistency.d.ts +1 -1
  97. package/dist/detectors/fact-consistency.d.ts.map +1 -1
  98. package/dist/detectors/fact-consistency.js +52 -3
  99. package/dist/detectors/fact-consistency.js.map +1 -1
  100. package/dist/detectors/heading-case.d.ts +5 -2
  101. package/dist/detectors/heading-case.d.ts.map +1 -1
  102. package/dist/detectors/heading-case.js +12 -4
  103. package/dist/detectors/heading-case.js.map +1 -1
  104. package/dist/detectors/heading-echo.d.ts +5 -0
  105. package/dist/detectors/heading-echo.d.ts.map +1 -1
  106. package/dist/detectors/heading-echo.js +14 -1
  107. package/dist/detectors/heading-echo.js.map +1 -1
  108. package/dist/detectors/layout-code.d.ts +5 -0
  109. package/dist/detectors/layout-code.d.ts.map +1 -0
  110. package/dist/detectors/layout-code.js +124 -0
  111. package/dist/detectors/layout-code.js.map +1 -0
  112. package/dist/detectors/measured-facts.d.ts +8 -0
  113. package/dist/detectors/measured-facts.d.ts.map +1 -0
  114. package/dist/detectors/measured-facts.js +18 -0
  115. package/dist/detectors/measured-facts.js.map +1 -0
  116. package/dist/detectors/name-variant-model-codes.d.ts +11 -0
  117. package/dist/detectors/name-variant-model-codes.d.ts.map +1 -0
  118. package/dist/detectors/name-variant-model-codes.js +21 -0
  119. package/dist/detectors/name-variant-model-codes.js.map +1 -0
  120. package/dist/detectors/name-variant.d.ts.map +1 -1
  121. package/dist/detectors/name-variant.js +78 -10
  122. package/dist/detectors/name-variant.js.map +1 -1
  123. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  124. package/dist/detectors/orthographic-variant.js +62 -7
  125. package/dist/detectors/orthographic-variant.js.map +1 -1
  126. package/dist/detectors/orthography.d.ts.map +1 -1
  127. package/dist/detectors/orthography.js +12 -6
  128. package/dist/detectors/orthography.js.map +1 -1
  129. package/dist/detectors/party-order.d.ts +3 -0
  130. package/dist/detectors/party-order.d.ts.map +1 -0
  131. package/dist/detectors/party-order.js +46 -0
  132. package/dist/detectors/party-order.js.map +1 -0
  133. package/dist/detectors/quantity-range.d.ts +3 -0
  134. package/dist/detectors/quantity-range.d.ts.map +1 -0
  135. package/dist/detectors/quantity-range.js +35 -0
  136. package/dist/detectors/quantity-range.js.map +1 -0
  137. package/dist/detectors/range-band.d.ts +5 -0
  138. package/dist/detectors/range-band.d.ts.map +1 -0
  139. package/dist/detectors/range-band.js +80 -0
  140. package/dist/detectors/range-band.js.map +1 -0
  141. package/dist/detectors/registry/capacity-runtime-mismatch.d.ts +3 -0
  142. package/dist/detectors/registry/capacity-runtime-mismatch.d.ts.map +1 -0
  143. package/dist/detectors/registry/capacity-runtime-mismatch.js +3 -0
  144. package/dist/detectors/registry/capacity-runtime-mismatch.js.map +1 -0
  145. package/dist/detectors/registry/connection-time-short.d.ts +3 -0
  146. package/dist/detectors/registry/connection-time-short.d.ts.map +1 -0
  147. package/dist/detectors/registry/connection-time-short.js +3 -0
  148. package/dist/detectors/registry/connection-time-short.js.map +1 -0
  149. package/dist/detectors/registry/contact-variant.d.ts +3 -0
  150. package/dist/detectors/registry/contact-variant.d.ts.map +1 -0
  151. package/dist/detectors/registry/contact-variant.js +3 -0
  152. package/dist/detectors/registry/contact-variant.js.map +1 -0
  153. package/dist/detectors/registry/count-over-capacity.d.ts +3 -0
  154. package/dist/detectors/registry/count-over-capacity.d.ts.map +1 -0
  155. package/dist/detectors/registry/count-over-capacity.js +3 -0
  156. package/dist/detectors/registry/count-over-capacity.js.map +1 -0
  157. package/dist/detectors/registry/date-stamp-order.d.ts +3 -0
  158. package/dist/detectors/registry/date-stamp-order.d.ts.map +1 -0
  159. package/dist/detectors/registry/date-stamp-order.js +3 -0
  160. package/dist/detectors/registry/date-stamp-order.js.map +1 -0
  161. package/dist/detectors/registry/duration-product-mismatch.d.ts +3 -0
  162. package/dist/detectors/registry/duration-product-mismatch.d.ts.map +1 -0
  163. package/dist/detectors/registry/duration-product-mismatch.js +3 -0
  164. package/dist/detectors/registry/duration-product-mismatch.js.map +1 -0
  165. package/dist/detectors/registry/event-deadline.d.ts +3 -0
  166. package/dist/detectors/registry/event-deadline.d.ts.map +1 -0
  167. package/dist/detectors/registry/event-deadline.js +3 -0
  168. package/dist/detectors/registry/event-deadline.js.map +1 -0
  169. package/dist/detectors/registry/interval-count-mismatch.d.ts +3 -0
  170. package/dist/detectors/registry/interval-count-mismatch.d.ts.map +1 -0
  171. package/dist/detectors/registry/interval-count-mismatch.js +3 -0
  172. package/dist/detectors/registry/interval-count-mismatch.js.map +1 -0
  173. package/dist/detectors/registry/layout-code-mismatch.d.ts +3 -0
  174. package/dist/detectors/registry/layout-code-mismatch.d.ts.map +1 -0
  175. package/dist/detectors/registry/layout-code-mismatch.js +3 -0
  176. package/dist/detectors/registry/layout-code-mismatch.js.map +1 -0
  177. package/dist/detectors/registry/party-order.d.ts +3 -0
  178. package/dist/detectors/registry/party-order.d.ts.map +1 -0
  179. package/dist/detectors/registry/party-order.js +3 -0
  180. package/dist/detectors/registry/party-order.js.map +1 -0
  181. package/dist/detectors/registry/quantity-range.d.ts +3 -0
  182. package/dist/detectors/registry/quantity-range.d.ts.map +1 -0
  183. package/dist/detectors/registry/quantity-range.js +3 -0
  184. package/dist/detectors/registry/quantity-range.js.map +1 -0
  185. package/dist/detectors/registry/range-band-mismatch.d.ts +3 -0
  186. package/dist/detectors/registry/range-band-mismatch.d.ts.map +1 -0
  187. package/dist/detectors/registry/range-band-mismatch.js +3 -0
  188. package/dist/detectors/registry/range-band-mismatch.js.map +1 -0
  189. package/dist/detectors/registry/rent-multiple-mismatch.d.ts +3 -0
  190. package/dist/detectors/registry/rent-multiple-mismatch.d.ts.map +1 -0
  191. package/dist/detectors/registry/rent-multiple-mismatch.js +3 -0
  192. package/dist/detectors/registry/rent-multiple-mismatch.js.map +1 -0
  193. package/dist/detectors/registry/requirement-lists.d.ts +3 -0
  194. package/dist/detectors/registry/requirement-lists.d.ts.map +1 -0
  195. package/dist/detectors/registry/requirement-lists.js +3 -0
  196. package/dist/detectors/registry/requirement-lists.js.map +1 -0
  197. package/dist/detectors/registry/return-type.d.ts +3 -0
  198. package/dist/detectors/registry/return-type.d.ts.map +1 -0
  199. package/dist/detectors/registry/return-type.js +3 -0
  200. package/dist/detectors/registry/return-type.js.map +1 -0
  201. package/dist/detectors/registry/scaled-quantity-mismatch.d.ts +3 -0
  202. package/dist/detectors/registry/scaled-quantity-mismatch.d.ts.map +1 -0
  203. package/dist/detectors/registry/scaled-quantity-mismatch.js +3 -0
  204. package/dist/detectors/registry/scaled-quantity-mismatch.js.map +1 -0
  205. package/dist/detectors/registry/step-time-sum-mismatch.d.ts +3 -0
  206. package/dist/detectors/registry/step-time-sum-mismatch.d.ts.map +1 -0
  207. package/dist/detectors/registry/step-time-sum-mismatch.js +3 -0
  208. package/dist/detectors/registry/step-time-sum-mismatch.js.map +1 -0
  209. package/dist/detectors/registry/time-range-reversed.d.ts +3 -0
  210. package/dist/detectors/registry/time-range-reversed.d.ts.map +1 -0
  211. package/dist/detectors/registry/time-range-reversed.js +3 -0
  212. package/dist/detectors/registry/time-range-reversed.js.map +1 -0
  213. package/dist/detectors/registry/unlisted-item-used.d.ts +3 -0
  214. package/dist/detectors/registry/unlisted-item-used.d.ts.map +1 -0
  215. package/dist/detectors/registry/unlisted-item-used.js +3 -0
  216. package/dist/detectors/registry/unlisted-item-used.js.map +1 -0
  217. package/dist/detectors/registry/walk-time-distance-mismatch.d.ts +3 -0
  218. package/dist/detectors/registry/walk-time-distance-mismatch.d.ts.map +1 -0
  219. package/dist/detectors/registry/walk-time-distance-mismatch.js +3 -0
  220. package/dist/detectors/registry/walk-time-distance-mismatch.js.map +1 -0
  221. package/dist/detectors/rent-multiple-mismatch.d.ts +3 -0
  222. package/dist/detectors/rent-multiple-mismatch.d.ts.map +1 -0
  223. package/dist/detectors/rent-multiple-mismatch.js +39 -0
  224. package/dist/detectors/rent-multiple-mismatch.js.map +1 -0
  225. package/dist/detectors/requirement-lists.d.ts +3 -0
  226. package/dist/detectors/requirement-lists.d.ts.map +1 -0
  227. package/dist/detectors/requirement-lists.js +46 -0
  228. package/dist/detectors/requirement-lists.js.map +1 -0
  229. package/dist/detectors/return-type.d.ts +3 -0
  230. package/dist/detectors/return-type.d.ts.map +1 -0
  231. package/dist/detectors/return-type.js +24 -0
  232. package/dist/detectors/return-type.js.map +1 -0
  233. package/dist/detectors/scaled-quantity.d.ts +3 -0
  234. package/dist/detectors/scaled-quantity.d.ts.map +1 -0
  235. package/dist/detectors/scaled-quantity.js +37 -0
  236. package/dist/detectors/scaled-quantity.js.map +1 -0
  237. package/dist/detectors/signals.d.ts.map +1 -1
  238. package/dist/detectors/signals.js +3 -1
  239. package/dist/detectors/signals.js.map +1 -1
  240. package/dist/detectors/step-time-sum.d.ts +3 -0
  241. package/dist/detectors/step-time-sum.d.ts.map +1 -0
  242. package/dist/detectors/step-time-sum.js +46 -0
  243. package/dist/detectors/step-time-sum.js.map +1 -0
  244. package/dist/detectors/structure-tree.d.ts +2 -0
  245. package/dist/detectors/structure-tree.d.ts.map +1 -1
  246. package/dist/detectors/structure-tree.js +31 -6
  247. package/dist/detectors/structure-tree.js.map +1 -1
  248. package/dist/detectors/structure.js +1 -1
  249. package/dist/detectors/structure.js.map +1 -1
  250. package/dist/detectors/technical-docs.d.ts +5 -0
  251. package/dist/detectors/technical-docs.d.ts.map +1 -1
  252. package/dist/detectors/technical-docs.js +12 -0
  253. package/dist/detectors/technical-docs.js.map +1 -1
  254. package/dist/detectors/time-order.d.ts +2 -0
  255. package/dist/detectors/time-order.d.ts.map +1 -1
  256. package/dist/detectors/time-order.js +33 -5
  257. package/dist/detectors/time-order.js.map +1 -1
  258. package/dist/detectors/undefined-term.d.ts.map +1 -1
  259. package/dist/detectors/undefined-term.js +19 -3
  260. package/dist/detectors/undefined-term.js.map +1 -1
  261. package/dist/detectors/unit-consistency.d.ts +1 -1
  262. package/dist/detectors/unit-consistency.d.ts.map +1 -1
  263. package/dist/detectors/unit-consistency.js +46 -38
  264. package/dist/detectors/unit-consistency.js.map +1 -1
  265. package/dist/detectors/unlisted-items.d.ts +3 -0
  266. package/dist/detectors/unlisted-items.d.ts.map +1 -0
  267. package/dist/detectors/unlisted-items.js +57 -0
  268. package/dist/detectors/unlisted-items.js.map +1 -0
  269. package/dist/detectors/use-count-words.d.ts +8 -0
  270. package/dist/detectors/use-count-words.d.ts.map +1 -0
  271. package/dist/detectors/use-count-words.js +20 -0
  272. package/dist/detectors/use-count-words.js.map +1 -0
  273. package/dist/detectors/use-interval.d.ts +3 -0
  274. package/dist/detectors/use-interval.d.ts.map +1 -0
  275. package/dist/detectors/use-interval.js +39 -0
  276. package/dist/detectors/use-interval.js.map +1 -0
  277. package/dist/detectors/walk-time-distance-mismatch.d.ts +4 -0
  278. package/dist/detectors/walk-time-distance-mismatch.d.ts.map +1 -0
  279. package/dist/detectors/walk-time-distance-mismatch.js +38 -0
  280. package/dist/detectors/walk-time-distance-mismatch.js.map +1 -0
  281. package/dist/document.d.ts.map +1 -1
  282. package/dist/document.js +4 -1
  283. package/dist/document.js.map +1 -1
  284. package/dist/facts/approximate-tolerance.d.ts +7 -0
  285. package/dist/facts/approximate-tolerance.d.ts.map +1 -0
  286. package/dist/facts/approximate-tolerance.js +16 -0
  287. package/dist/facts/approximate-tolerance.js.map +1 -0
  288. package/dist/facts/item-amounts.d.ts +18 -0
  289. package/dist/facts/item-amounts.d.ts.map +1 -0
  290. package/dist/facts/item-amounts.js +67 -0
  291. package/dist/facts/item-amounts.js.map +1 -0
  292. package/dist/facts/labelled-facts.d.ts +4 -0
  293. package/dist/facts/labelled-facts.d.ts.map +1 -1
  294. package/dist/facts/labelled-facts.js +21 -6
  295. package/dist/facts/labelled-facts.js.map +1 -1
  296. package/dist/facts/measure-units.d.ts +5 -0
  297. package/dist/facts/measure-units.d.ts.map +1 -0
  298. package/dist/facts/measure-units.js +28 -0
  299. package/dist/facts/measure-units.js.map +1 -0
  300. package/dist/facts/measures.d.ts +23 -4
  301. package/dist/facts/measures.d.ts.map +1 -1
  302. package/dist/facts/measures.js +68 -19
  303. package/dist/facts/measures.js.map +1 -1
  304. package/dist/facts/retention-periods.d.ts +51 -0
  305. package/dist/facts/retention-periods.d.ts.map +1 -0
  306. package/dist/facts/retention-periods.js +148 -0
  307. package/dist/facts/retention-periods.js.map +1 -0
  308. package/dist/facts/table-facts.d.ts +2 -0
  309. package/dist/facts/table-facts.d.ts.map +1 -1
  310. package/dist/facts/table-facts.js +2 -0
  311. package/dist/facts/table-facts.js.map +1 -1
  312. package/dist/facts/unit-conflicts.d.ts +3 -2
  313. package/dist/facts/unit-conflicts.d.ts.map +1 -1
  314. package/dist/facts/unit-conflicts.js +15 -7
  315. package/dist/facts/unit-conflicts.js.map +1 -1
  316. package/dist/facts/unit-equivalents.d.ts +13 -0
  317. package/dist/facts/unit-equivalents.d.ts.map +1 -0
  318. package/dist/facts/unit-equivalents.js +56 -0
  319. package/dist/facts/unit-equivalents.js.map +1 -0
  320. package/dist/facts/unit-tolerance.d.ts +4 -0
  321. package/dist/facts/unit-tolerance.d.ts.map +1 -0
  322. package/dist/facts/unit-tolerance.js +13 -0
  323. package/dist/facts/unit-tolerance.js.map +1 -0
  324. package/dist/facts/unit-word.d.ts +8 -0
  325. package/dist/facts/unit-word.d.ts.map +1 -0
  326. package/dist/facts/unit-word.js +34 -0
  327. package/dist/facts/unit-word.js.map +1 -0
  328. package/dist/facts/written-precision.d.ts +10 -0
  329. package/dist/facts/written-precision.d.ts.map +1 -0
  330. package/dist/facts/written-precision.js +20 -0
  331. package/dist/facts/written-precision.js.map +1 -0
  332. package/dist/kana-spelling.d.ts +12 -0
  333. package/dist/kana-spelling.d.ts.map +1 -1
  334. package/dist/kana-spelling.js +23 -0
  335. package/dist/kana-spelling.js.map +1 -1
  336. package/dist/model-codes.d.ts +23 -0
  337. package/dist/model-codes.d.ts.map +1 -0
  338. package/dist/model-codes.js +81 -0
  339. package/dist/model-codes.js.map +1 -0
  340. package/dist/name-spelling-chars.d.ts +16 -0
  341. package/dist/name-spelling-chars.d.ts.map +1 -0
  342. package/dist/name-spelling-chars.js +14 -0
  343. package/dist/name-spelling-chars.js.map +1 -0
  344. package/dist/name-variants.d.ts +8 -2
  345. package/dist/name-variants.d.ts.map +1 -1
  346. package/dist/name-variants.js +72 -7
  347. package/dist/name-variants.js.map +1 -1
  348. package/dist/name-word-order.d.ts +49 -0
  349. package/dist/name-word-order.d.ts.map +1 -0
  350. package/dist/name-word-order.js +114 -0
  351. package/dist/name-word-order.js.map +1 -0
  352. package/dist/phone-numbers.d.ts.map +1 -1
  353. package/dist/phone-numbers.js +22 -5
  354. package/dist/phone-numbers.js.map +1 -1
  355. package/dist/place-names.d.ts +12 -5
  356. package/dist/place-names.d.ts.map +1 -1
  357. package/dist/place-names.js +34 -14
  358. package/dist/place-names.js.map +1 -1
  359. package/dist/plugin.d.ts +12 -0
  360. package/dist/plugin.d.ts.map +1 -1
  361. package/dist/preamble-paragraphs.d.ts +2 -1
  362. package/dist/preamble-paragraphs.d.ts.map +1 -1
  363. package/dist/preamble-paragraphs.js +16 -1
  364. package/dist/preamble-paragraphs.js.map +1 -1
  365. package/dist/profile/parse.d.ts.map +1 -1
  366. package/dist/profile/parse.js +11 -0
  367. package/dist/profile/parse.js.map +1 -1
  368. package/dist/return-type.d.ts +33 -0
  369. package/dist/return-type.d.ts.map +1 -0
  370. package/dist/return-type.js +302 -0
  371. package/dist/return-type.js.map +1 -0
  372. package/dist/spacing-code.d.ts +6 -0
  373. package/dist/spacing-code.d.ts.map +1 -0
  374. package/dist/spacing-code.js +16 -0
  375. package/dist/spacing-code.js.map +1 -0
  376. package/dist/structure/amount-range.d.ts +2 -2
  377. package/dist/structure/amount-range.d.ts.map +1 -1
  378. package/dist/structure/amount-range.js +12 -5
  379. package/dist/structure/amount-range.js.map +1 -1
  380. package/dist/structure/capacity-count.d.ts +59 -0
  381. package/dist/structure/capacity-count.d.ts.map +1 -0
  382. package/dist/structure/capacity-count.js +118 -0
  383. package/dist/structure/capacity-count.js.map +1 -0
  384. package/dist/structure/connection-times.d.ts +56 -0
  385. package/dist/structure/connection-times.d.ts.map +1 -0
  386. package/dist/structure/connection-times.js +165 -0
  387. package/dist/structure/connection-times.js.map +1 -0
  388. package/dist/structure/counted-amounts.d.ts +6 -0
  389. package/dist/structure/counted-amounts.d.ts.map +1 -1
  390. package/dist/structure/counted-amounts.js +4 -4
  391. package/dist/structure/counted-amounts.js.map +1 -1
  392. package/dist/structure/date-order-tie.d.ts +13 -0
  393. package/dist/structure/date-order-tie.d.ts.map +1 -0
  394. package/dist/structure/date-order-tie.js +61 -0
  395. package/dist/structure/date-order-tie.js.map +1 -0
  396. package/dist/structure/date-order.d.ts +2 -2
  397. package/dist/structure/date-order.d.ts.map +1 -1
  398. package/dist/structure/date-order.js +26 -9
  399. package/dist/structure/date-order.js.map +1 -1
  400. package/dist/structure/date-outside-period.d.ts +8 -0
  401. package/dist/structure/date-outside-period.d.ts.map +1 -1
  402. package/dist/structure/date-outside-period.js +52 -3
  403. package/dist/structure/date-outside-period.js.map +1 -1
  404. package/dist/structure/date-range.d.ts +6 -2
  405. package/dist/structure/date-range.d.ts.map +1 -1
  406. package/dist/structure/date-range.js +37 -9
  407. package/dist/structure/date-range.js.map +1 -1
  408. package/dist/structure/deadline-after-event.d.ts +23 -0
  409. package/dist/structure/deadline-after-event.d.ts.map +1 -0
  410. package/dist/structure/deadline-after-event.js +42 -0
  411. package/dist/structure/deadline-after-event.js.map +1 -0
  412. package/dist/structure/definition-use.d.ts +1 -1
  413. package/dist/structure/definition-use.d.ts.map +1 -1
  414. package/dist/structure/definition-use.js +55 -2
  415. package/dist/structure/definition-use.js.map +1 -1
  416. package/dist/structure/due-date.d.ts.map +1 -1
  417. package/dist/structure/due-date.js +5 -27
  418. package/dist/structure/due-date.js.map +1 -1
  419. package/dist/structure/labelled-date-order.d.ts +38 -0
  420. package/dist/structure/labelled-date-order.d.ts.map +1 -0
  421. package/dist/structure/labelled-date-order.js +41 -0
  422. package/dist/structure/labelled-date-order.js.map +1 -0
  423. package/dist/structure/layout-codes.d.ts +68 -0
  424. package/dist/structure/layout-codes.d.ts.map +1 -0
  425. package/dist/structure/layout-codes.js +161 -0
  426. package/dist/structure/layout-codes.js.map +1 -0
  427. package/dist/structure/leg-times.d.ts +2 -0
  428. package/dist/structure/leg-times.d.ts.map +1 -1
  429. package/dist/structure/leg-times.js +13 -0
  430. package/dist/structure/leg-times.js.map +1 -1
  431. package/dist/structure/measured-amounts.d.ts +17 -0
  432. package/dist/structure/measured-amounts.d.ts.map +1 -0
  433. package/dist/structure/measured-amounts.js +110 -0
  434. package/dist/structure/measured-amounts.js.map +1 -0
  435. package/dist/structure/party-order.d.ts +33 -0
  436. package/dist/structure/party-order.d.ts.map +1 -0
  437. package/dist/structure/party-order.js +79 -0
  438. package/dist/structure/party-order.js.map +1 -0
  439. package/dist/structure/quantity-range.d.ts +8 -0
  440. package/dist/structure/quantity-range.d.ts.map +1 -0
  441. package/dist/structure/quantity-range.js +36 -0
  442. package/dist/structure/quantity-range.js.map +1 -0
  443. package/dist/structure/range-bands.d.ts +75 -0
  444. package/dist/structure/range-bands.d.ts.map +1 -0
  445. package/dist/structure/range-bands.js +244 -0
  446. package/dist/structure/range-bands.js.map +1 -0
  447. package/dist/structure/rent-multiple.d.ts +76 -0
  448. package/dist/structure/rent-multiple.d.ts.map +1 -0
  449. package/dist/structure/rent-multiple.js +186 -0
  450. package/dist/structure/rent-multiple.js.map +1 -0
  451. package/dist/structure/requirement-lists.d.ts +37 -0
  452. package/dist/structure/requirement-lists.d.ts.map +1 -0
  453. package/dist/structure/requirement-lists.js +89 -0
  454. package/dist/structure/requirement-lists.js.map +1 -0
  455. package/dist/structure/scaled-quantities.d.ts +50 -0
  456. package/dist/structure/scaled-quantities.d.ts.map +1 -0
  457. package/dist/structure/scaled-quantities.js +153 -0
  458. package/dist/structure/scaled-quantities.js.map +1 -0
  459. package/dist/structure/stamp-order.d.ts +16 -0
  460. package/dist/structure/stamp-order.d.ts.map +1 -0
  461. package/dist/structure/stamp-order.js +78 -0
  462. package/dist/structure/stamp-order.js.map +1 -0
  463. package/dist/structure/step-times.d.ts +49 -0
  464. package/dist/structure/step-times.d.ts.map +1 -0
  465. package/dist/structure/step-times.js +128 -0
  466. package/dist/structure/step-times.js.map +1 -0
  467. package/dist/structure/term-deadline.d.ts +19 -0
  468. package/dist/structure/term-deadline.d.ts.map +1 -0
  469. package/dist/structure/term-deadline.js +28 -0
  470. package/dist/structure/term-deadline.js.map +1 -0
  471. package/dist/structure/time-order.d.ts +21 -0
  472. package/dist/structure/time-order.d.ts.map +1 -1
  473. package/dist/structure/time-order.js +5 -6
  474. package/dist/structure/time-order.js.map +1 -1
  475. package/dist/structure/time-range.d.ts +16 -0
  476. package/dist/structure/time-range.d.ts.map +1 -0
  477. package/dist/structure/time-range.js +57 -0
  478. package/dist/structure/time-range.js.map +1 -0
  479. package/dist/structure/total-line.d.ts +16 -0
  480. package/dist/structure/total-line.d.ts.map +1 -0
  481. package/dist/structure/total-line.js +44 -0
  482. package/dist/structure/total-line.js.map +1 -0
  483. package/dist/structure/total.d.ts +7 -1
  484. package/dist/structure/total.d.ts.map +1 -1
  485. package/dist/structure/total.js +28 -5
  486. package/dist/structure/total.js.map +1 -1
  487. package/dist/structure/unlisted-items.d.ts +70 -0
  488. package/dist/structure/unlisted-items.d.ts.map +1 -0
  489. package/dist/structure/unlisted-items.js +152 -0
  490. package/dist/structure/unlisted-items.js.map +1 -0
  491. package/dist/structure/version-order.d.ts +2 -0
  492. package/dist/structure/version-order.d.ts.map +1 -1
  493. package/dist/structure/version-order.js +10 -0
  494. package/dist/structure/version-order.js.map +1 -1
  495. package/dist/structure/walk-time.d.ts +87 -0
  496. package/dist/structure/walk-time.d.ts.map +1 -0
  497. package/dist/structure/walk-time.js +195 -0
  498. package/dist/structure/walk-time.js.map +1 -0
  499. package/dist/surname-near.d.ts +6 -0
  500. package/dist/surname-near.d.ts.map +1 -0
  501. package/dist/surname-near.js +31 -0
  502. package/dist/surname-near.js.map +1 -0
  503. package/dist/table-cells.d.ts +13 -0
  504. package/dist/table-cells.d.ts.map +1 -0
  505. package/dist/table-cells.js +36 -0
  506. package/dist/table-cells.js.map +1 -0
  507. package/dist/table-names.d.ts +42 -0
  508. package/dist/table-names.d.ts.map +1 -0
  509. package/dist/table-names.js +94 -0
  510. package/dist/table-names.js.map +1 -0
  511. package/package.json +3 -3
  512. package/profiles/listing.yaml +20 -0
  513. package/rules/announced-count-mismatch.yaml +2 -2
  514. package/rules/capacity-runtime-mismatch.yaml +66 -0
  515. package/rules/connection-time-short.yaml +52 -0
  516. package/rules/contact-variant.yaml +76 -0
  517. package/rules/count-over-capacity.yaml +55 -0
  518. package/rules/date-outside-period.yaml +4 -4
  519. package/rules/date-stamp-order.yaml +82 -0
  520. package/rules/deadline-after-event.yaml +67 -0
  521. package/rules/defined-name-repeated.yaml +2 -2
  522. package/rules/due-before-issue.yaml +11 -7
  523. package/rules/duration-mismatch.yaml +7 -4
  524. package/rules/duration-product-mismatch.yaml +73 -0
  525. package/rules/fact-conflict.yaml +9 -4
  526. package/rules/heading-echo.yaml +2 -2
  527. package/rules/interval-count-mismatch.yaml +54 -0
  528. package/rules/latin-spacing.yaml +2 -2
  529. package/rules/layout-code-mismatch.yaml +68 -0
  530. package/rules/name-variant.yaml +14 -2
  531. package/rules/no-em-dash.yaml +2 -2
  532. package/rules/party-order.yaml +84 -0
  533. package/rules/preamble-length.yaml +2 -2
  534. package/rules/quantity-range-reversed.yaml +53 -0
  535. package/rules/range-band-mismatch.yaml +70 -0
  536. package/rules/rent-multiple-mismatch.yaml +61 -0
  537. package/rules/required-listed-as-preferred.yaml +102 -0
  538. package/rules/return-type-mismatch.yaml +79 -0
  539. package/rules/scaled-quantity-mismatch.yaml +69 -0
  540. package/rules/step-time-sum-mismatch.yaml +65 -0
  541. package/rules/time-range-reversed.yaml +48 -0
  542. package/rules/title-case-consistency.yaml +2 -2
  543. package/rules/total-mismatch.yaml +2 -2
  544. package/rules/undefined-term.yaml +21 -7
  545. package/rules/unit-mismatch.yaml +12 -4
  546. package/rules/unlisted-item-used.yaml +90 -0
  547. package/rules/unused-definition.yaml +2 -2
  548. package/rules/use-before-definition.yaml +2 -2
  549. package/rules/walk-time-distance-mismatch.yaml +55 -0
  550. package/src/announced-count.ts +6 -3
  551. package/src/contacts/addresses.ts +179 -0
  552. package/src/contacts/emails.ts +63 -0
  553. package/src/contacts/variants.ts +33 -0
  554. package/src/derived/battery-runtime.ts +284 -0
  555. package/src/derived/period-counts.ts +178 -0
  556. package/src/derived/session-hours.ts +62 -0
  557. package/src/derived/time-lengths.ts +229 -0
  558. package/src/derived/unit-counts.ts +18 -0
  559. package/src/derived/use-interval.ts +151 -0
  560. package/src/derived/working-hours.ts +97 -0
  561. package/src/detectors/acronym-expansion.ts +57 -2
  562. package/src/detectors/announced-count.ts +1 -0
  563. package/src/detectors/capacity-runtime.ts +128 -0
  564. package/src/detectors/capitalised-term.ts +147 -0
  565. package/src/detectors/contact-variant.ts +24 -0
  566. package/src/detectors/count-over-capacity.ts +37 -0
  567. package/src/detectors/date-outside-period.ts +5 -1
  568. package/src/detectors/date-stamp-order.ts +28 -0
  569. package/src/detectors/defined-term-form.ts +63 -7
  570. package/src/detectors/definition-use.ts +6 -2
  571. package/src/detectors/derived-numbers.ts +97 -24
  572. package/src/detectors/due-date.ts +10 -2
  573. package/src/detectors/en-shape.ts +11 -4
  574. package/src/detectors/event-deadline.ts +29 -0
  575. package/src/detectors/fact-consistency.ts +64 -3
  576. package/src/detectors/heading-case.ts +13 -4
  577. package/src/detectors/heading-echo.ts +17 -1
  578. package/src/detectors/layout-code.ts +174 -0
  579. package/src/detectors/measured-facts.ts +20 -0
  580. package/src/detectors/name-variant-model-codes.ts +27 -0
  581. package/src/detectors/name-variant.ts +99 -15
  582. package/src/detectors/orthographic-variant.ts +78 -9
  583. package/src/detectors/orthography.ts +16 -6
  584. package/src/detectors/party-order.ts +50 -0
  585. package/src/detectors/quantity-range.ts +47 -0
  586. package/src/detectors/range-band.ts +125 -0
  587. package/src/detectors/registry/capacity-runtime-mismatch.ts +4 -0
  588. package/src/detectors/registry/connection-time-short.ts +4 -0
  589. package/src/detectors/registry/contact-variant.ts +4 -0
  590. package/src/detectors/registry/count-over-capacity.ts +4 -0
  591. package/src/detectors/registry/date-stamp-order.ts +4 -0
  592. package/src/detectors/registry/duration-product-mismatch.ts +4 -0
  593. package/src/detectors/registry/event-deadline.ts +4 -0
  594. package/src/detectors/registry/interval-count-mismatch.ts +4 -0
  595. package/src/detectors/registry/layout-code-mismatch.ts +4 -0
  596. package/src/detectors/registry/party-order.ts +4 -0
  597. package/src/detectors/registry/quantity-range.ts +4 -0
  598. package/src/detectors/registry/range-band-mismatch.ts +4 -0
  599. package/src/detectors/registry/rent-multiple-mismatch.ts +4 -0
  600. package/src/detectors/registry/requirement-lists.ts +4 -0
  601. package/src/detectors/registry/return-type.ts +4 -0
  602. package/src/detectors/registry/scaled-quantity-mismatch.ts +4 -0
  603. package/src/detectors/registry/step-time-sum-mismatch.ts +4 -0
  604. package/src/detectors/registry/time-range-reversed.ts +4 -0
  605. package/src/detectors/registry/unlisted-item-used.ts +4 -0
  606. package/src/detectors/registry/walk-time-distance-mismatch.ts +4 -0
  607. package/src/detectors/rent-multiple-mismatch.ts +56 -0
  608. package/src/detectors/requirement-lists.ts +65 -0
  609. package/src/detectors/return-type.ts +30 -0
  610. package/src/detectors/scaled-quantity.ts +49 -0
  611. package/src/detectors/signals.ts +3 -1
  612. package/src/detectors/step-time-sum.ts +55 -0
  613. package/src/detectors/structure-tree.ts +42 -6
  614. package/src/detectors/structure.ts +1 -1
  615. package/src/detectors/technical-docs.ts +12 -0
  616. package/src/detectors/time-order.ts +45 -6
  617. package/src/detectors/undefined-term.ts +20 -3
  618. package/src/detectors/unit-consistency.ts +50 -38
  619. package/src/detectors/unlisted-items.ts +72 -0
  620. package/src/detectors/use-count-words.ts +32 -0
  621. package/src/detectors/use-interval.ts +51 -0
  622. package/src/detectors/walk-time-distance-mismatch.ts +45 -0
  623. package/src/document.ts +4 -1
  624. package/src/facts/approximate-tolerance.ts +19 -0
  625. package/src/facts/item-amounts.ts +94 -0
  626. package/src/facts/labelled-facts.ts +29 -7
  627. package/src/facts/measure-units.ts +31 -0
  628. package/src/facts/measures.ts +113 -25
  629. package/src/facts/retention-periods.ts +216 -0
  630. package/src/facts/table-facts.ts +3 -0
  631. package/src/facts/unit-conflicts.ts +22 -9
  632. package/src/facts/unit-equivalents.ts +70 -0
  633. package/src/facts/unit-tolerance.ts +17 -0
  634. package/src/facts/unit-word.ts +35 -0
  635. package/src/facts/written-precision.ts +23 -0
  636. package/src/kana-spelling.ts +25 -0
  637. package/src/model-codes.ts +104 -0
  638. package/src/name-spelling-chars.ts +34 -0
  639. package/src/name-variants.ts +83 -7
  640. package/src/name-word-order.ts +149 -0
  641. package/src/phone-numbers.ts +26 -6
  642. package/src/place-names.ts +53 -14
  643. package/src/plugin.ts +7 -0
  644. package/src/preamble-paragraphs.ts +21 -2
  645. package/src/profile/parse.ts +10 -0
  646. package/src/return-type.ts +361 -0
  647. package/src/spacing-code.ts +26 -0
  648. package/src/structure/amount-range.ts +16 -7
  649. package/src/structure/capacity-count.ts +196 -0
  650. package/src/structure/connection-times.ts +226 -0
  651. package/src/structure/counted-amounts.ts +5 -4
  652. package/src/structure/date-order-tie.ts +86 -0
  653. package/src/structure/date-order.ts +41 -14
  654. package/src/structure/date-outside-period.ts +77 -7
  655. package/src/structure/date-range.ts +45 -9
  656. package/src/structure/deadline-after-event.ts +67 -0
  657. package/src/structure/definition-use.ts +59 -2
  658. package/src/structure/due-date.ts +8 -32
  659. package/src/structure/labelled-date-order.ts +84 -0
  660. package/src/structure/layout-codes.ts +210 -0
  661. package/src/structure/leg-times.ts +15 -0
  662. package/src/structure/measured-amounts.ts +138 -0
  663. package/src/structure/party-order.ts +115 -0
  664. package/src/structure/quantity-range.ts +54 -0
  665. package/src/structure/range-bands.ts +316 -0
  666. package/src/structure/rent-multiple.ts +277 -0
  667. package/src/structure/requirement-lists.ts +145 -0
  668. package/src/structure/scaled-quantities.ts +225 -0
  669. package/src/structure/stamp-order.ts +100 -0
  670. package/src/structure/step-times.ts +169 -0
  671. package/src/structure/term-deadline.ts +35 -0
  672. package/src/structure/time-order.ts +8 -7
  673. package/src/structure/time-range.ts +64 -0
  674. package/src/structure/total-line.ts +63 -0
  675. package/src/structure/total.ts +41 -6
  676. package/src/structure/unlisted-items.ts +207 -0
  677. package/src/structure/version-order.ts +10 -0
  678. package/src/structure/walk-time.ts +285 -0
  679. package/src/surname-near.ts +31 -0
  680. package/src/table-cells.ts +41 -0
  681. package/src/table-names.ts +113 -0
@@ -0,0 +1,70 @@
1
+ export type ItemToken = {
2
+ readonly surface: string;
3
+ readonly pos: string;
4
+ readonly lemma: string;
5
+ readonly start: number;
6
+ readonly end: number;
7
+ };
8
+ /** A word that marks a use frame. after: it follows the noun (を, に, で); before: it precedes it (add, with, in). */
9
+ export type UseMarker = {
10
+ readonly word: string;
11
+ readonly group: UseGroup;
12
+ readonly position: "before" | "after";
13
+ };
14
+ export type UseGroup = "object" | "place" | "instrument";
15
+ export type ItemWords = {
16
+ readonly ingredientHeadings: readonly string[];
17
+ readonly toolHeadings: readonly string[];
18
+ readonly markers: readonly UseMarker[];
19
+ /** The verbs that must follow an after-marker of each group; a group with none takes any verb. */
20
+ readonly verbs: Readonly<Partial<Record<UseGroup, readonly string[]>>>;
21
+ /** Words right after a verb (ず, ない) or right before it (not) that deny the use. */
22
+ readonly negations: readonly string[];
23
+ /** Verbs the tagger may read as nouns (stir, knead): a coordination ends at one. */
24
+ readonly actions: readonly string[];
25
+ readonly joiners: readonly string[];
26
+ /** A word after which the thing itself starts again (30 ml of soy sauce). */
27
+ readonly partitives: readonly string[];
28
+ readonly amounts: readonly string[];
29
+ readonly atHand: readonly string[];
30
+ };
31
+ export type ItemStep = {
32
+ readonly start: number;
33
+ readonly tokens: readonly ItemToken[];
34
+ };
35
+ export type UnlistedItem = {
36
+ readonly offset: number;
37
+ readonly item: string;
38
+ readonly list: string;
39
+ };
40
+ type ItemList = {
41
+ readonly heading: string;
42
+ readonly tools: boolean;
43
+ };
44
+ type Candidate = {
45
+ readonly tokens: readonly ItemToken[];
46
+ readonly group: UseGroup;
47
+ };
48
+ /** A heading's words before a bracket or a colon, in lower case: 材料(2~3人分) is 材料. */
49
+ export declare const headingKey: (heading: string) => string;
50
+ /** Spaces, hyphens and case are not a different word: multi-tool is multitool. */
51
+ export declare const squeezed: (text: string) => string;
52
+ export declare const itemLists: (headings: readonly string[], words: ItemWords) => ItemList[];
53
+ /** The nouns joined before an after-marker (合いびき肉、卵、塩、こしょうを), read backwards up to the first other word. */
54
+ export declare const phrasesBefore: (tokens: readonly ItemToken[], marker: number, words: ItemWords) => (readonly ItemToken[])[];
55
+ /** The nouns joined after a before-marker (add the egg, salt and pepper), read forwards up to the first other word. */
56
+ export declare const phrasesAfter: (tokens: readonly ItemToken[], marker: number, words: ItemWords) => (readonly ItemToken[])[];
57
+ /** Every noun phrase a step uses, in the order written. */
58
+ export declare const usedPhrases: (tokens: readonly ItemToken[], words: ItemWords) => Candidate[];
59
+ /** The document as written and as the tagger read it: the source, and every word with its lemma (berries is berry). */
60
+ export type ItemText = {
61
+ readonly source: string;
62
+ readonly words: readonly ItemToken[];
63
+ };
64
+ /**
65
+ * The things the numbered steps use that the document's list of what is needed does not name. Nothing when the document
66
+ * has no such list: a document that promises no list cannot leave something off it.
67
+ */
68
+ export declare const unlistedItems: (text: ItemText, headings: readonly string[], steps: readonly ItemStep[], words: ItemWords) => UnlistedItem[];
69
+ export {};
70
+ //# sourceMappingURL=unlisted-items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlisted-items.d.ts","sourceRoot":"","sources":["../../src/structure/unlisted-items.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ // unlisted-item-used: a numbered step that uses an ingredient or a tool the document's own list of what is needed (材料,
2
+ // 用意するもの, Ingredients, What you need) does not name. Only a noun in a use frame is read: the object of a use verb
3
+ // (塩を加える, add salt), and, when the document lists tools, the thing used (紙やすりで磨く, with a multi-tool) or put into
4
+ // (バケツに沈める, in a bucket). A noun is listed when the document has written it before the step (the list, the title, an
5
+ // earlier step), whole or by its last word; a noun always at hand (水, 手, water) is never reported. The words are the
6
+ // language package's (item-list-heading, item-use, item-amount, item-at-hand, enumeration-joiner).
7
+ const NOUN_POS = new Set(["NOUN", "PROPN"]);
8
+ const SKIPPED_POS = new Set(["DET", "ADJ", "NUM"]);
9
+ const CLAUSE_OPENER_POS = new Set(["PUNCT", "CCONJ", "ADV", "SCONJ", "X"]);
10
+ const HAS_DIGIT = /\p{Nd}/u;
11
+ const HEADING_TAIL_OPENER = /[((::【[]/u;
12
+ const lower = (text) => text.toLowerCase();
13
+ /** A heading's words before a bracket or a colon, in lower case: 材料(2~3人分) is 材料. */
14
+ export const headingKey = (heading) => lower((heading.split(HEADING_TAIL_OPENER)[0] ?? "").trim());
15
+ /** Spaces, hyphens and case are not a different word: multi-tool is multitool. */
16
+ export const squeezed = (text) => lower(text).replace(/[\s\-‐]/gu, "");
17
+ const listKind = (heading, words) => {
18
+ const key = headingKey(heading);
19
+ const tools = words.toolHeadings.some((word) => lower(word) === key);
20
+ if (!tools && !words.ingredientHeadings.some((word) => lower(word) === key))
21
+ return undefined;
22
+ return { heading: heading.trim(), tools };
23
+ };
24
+ export const itemLists = (headings, words) => headings.flatMap((heading) => listKind(heading, words) ?? []);
25
+ const isWord = (token, words) => token !== undefined && words.some((word) => word === token.surface || word === lower(token.surface) || word === token.lemma);
26
+ const isAmount = (token, words) => HAS_DIGIT.test(token.surface) || isWord(token, words.amounts);
27
+ const isNoun = (token) => token !== undefined && NOUN_POS.has(token.pos);
28
+ const isHyphen = (token) => token !== undefined && /^[-‐]$/u.test(token.surface);
29
+ const BRACKET_PAIRS = { ")": "(", ")": "(", "」": "「", "]": "[" };
30
+ /** The index of the bracket that opens the aside closing at index, or -1 when it does not close one. */
31
+ const asideOpening = (tokens, index) => {
32
+ const open = BRACKET_PAIRS[tokens[index]?.surface ?? ""];
33
+ if (open === undefined)
34
+ return -1;
35
+ return tokens.findLastIndex((token, at) => at < index && token.surface === open);
36
+ };
37
+ const EMPTY_READING = { segments: [], current: [] };
38
+ const closed = (reading) => (reading.current.length === 0 ? reading : { segments: [...reading.segments, reading.current], current: [] });
39
+ const stepBack = (tokens, index, reading, words) => {
40
+ const token = tokens[index];
41
+ if (token === undefined)
42
+ return closed(reading);
43
+ const aside = asideOpening(tokens, index);
44
+ if (aside >= 0)
45
+ return stepBack(tokens, aside - 1, reading, words);
46
+ if (isWord(token, words.joiners))
47
+ return stepBack(tokens, index - 1, closed(reading), words);
48
+ if (isAmount(token, words))
49
+ return stepBack(tokens, index - 1, reading, words);
50
+ if (isNoun(token))
51
+ return stepBack(tokens, index - 1, { segments: reading.segments, current: [token, ...reading.current] }, words);
52
+ return closed(reading);
53
+ };
54
+ /** The nouns joined before an after-marker (合いびき肉、卵、塩、こしょうを), read backwards up to the first other word. */
55
+ export const phrasesBefore = (tokens, marker, words) => [
56
+ ...stepBack(tokens, marker - 1, EMPTY_READING, words).segments,
57
+ ];
58
+ const isModifier = (token, words) => SKIPPED_POS.has(token.pos) || isAmount(token, words) || (token.pos === "VERB" && token.surface.endsWith("ed"));
59
+ const isAction = (token, reading, words) => reading.current.length === 0 && reading.segments.length > 0 && isWord(token, words.actions);
60
+ const stepOn = (tokens, index, reading, words) => {
61
+ const token = tokens[index];
62
+ if (token === undefined)
63
+ return closed(reading);
64
+ const next = (after) => stepOn(tokens, index + 1, after, words);
65
+ if (isWord(token, words.partitives))
66
+ return next({ segments: reading.segments, current: [] });
67
+ if (isWord(token, words.joiners))
68
+ return next(closed(reading));
69
+ if (isNoun(token) && !isAction(token, reading, words))
70
+ return next({ segments: reading.segments, current: [...reading.current, token] });
71
+ if (isHyphen(token) && reading.current.length > 0 && isNoun(tokens[index + 1]))
72
+ return next(reading);
73
+ if (reading.current.length === 0 && isModifier(token, words))
74
+ return next(reading);
75
+ return closed(reading);
76
+ };
77
+ /** The nouns joined after a before-marker (add the egg, salt and pepper), read forwards up to the first other word. */
78
+ export const phrasesAfter = (tokens, marker, words) => [
79
+ ...stepOn(tokens, marker + 1, EMPTY_READING, words).segments,
80
+ ];
81
+ const markerLength = (tokens, index, word) => {
82
+ const parts = word.split(" ");
83
+ return parts.every((part, at) => isWord(tokens[index + at], [part])) ? parts.length : 0;
84
+ };
85
+ const deniedAfter = (tokens, verb, words) => isWord(tokens[verb + 1], words.negations);
86
+ const followedByUse = (tokens, index, group, words) => {
87
+ const verb = tokens[index + 1];
88
+ if (verb === undefined || verb.pos !== "VERB")
89
+ return false;
90
+ const verbs = words.verbs[group] ?? [];
91
+ return (verbs.length === 0 || isWord(verb, verbs)) && !deniedAfter(tokens, index + 1, words);
92
+ };
93
+ /** How far before a verb a negation still denies it (do not ever add). */
94
+ const NEGATION_REACH = 3;
95
+ const opensClause = (tokens, index, words) => {
96
+ const previous = tokens[index - 1];
97
+ const denied = tokens.slice(Math.max(0, index - NEGATION_REACH), index).some((token) => isWord(token, words.negations));
98
+ return !denied && (previous === undefined || CLAUSE_OPENER_POS.has(previous.pos));
99
+ };
100
+ const candidatesAt = (tokens, index, marker, words) => {
101
+ if (marker.position === "after") {
102
+ if (tokens[index]?.pos !== "ADP" || !isWord(tokens[index], [marker.word]) || !followedByUse(tokens, index, marker.group, words))
103
+ return [];
104
+ return phrasesBefore(tokens, index, words).map((phrase) => ({ tokens: phrase, group: marker.group }));
105
+ }
106
+ const length = markerLength(tokens, index, marker.word);
107
+ const object = marker.group === "object";
108
+ if (length === 0 || (object && !opensClause(tokens, index, words)))
109
+ return [];
110
+ // The thing a step puts in or works with comes before "of" (in a bucket of water); what it adds, after it (a pinch of salt).
111
+ const read = object ? words : { ...words, partitives: [] };
112
+ return phrasesAfter(tokens, index + length - 1, read).map((phrase) => ({ tokens: phrase, group: marker.group }));
113
+ };
114
+ /** Every noun phrase a step uses, in the order written. */
115
+ export const usedPhrases = (tokens, words) => tokens
116
+ .flatMap((_, index) => words.markers.flatMap((marker) => candidatesAt(tokens, index, marker, words)))
117
+ .toSorted((left, right) => (left.tokens[0]?.start ?? 0) - (right.tokens[0]?.start ?? 0));
118
+ const phraseText = (source, phrase) => source.slice(phrase[0]?.start ?? 0, phrase.at(-1)?.end ?? 0);
119
+ const isAtHand = (source, phrase, words) => {
120
+ const text = squeezed(phraseText(source, phrase));
121
+ const last = phrase.at(-1);
122
+ return words.atHand.some((word) => text.endsWith(squeezed(word)) || (last !== undefined && lower(last.lemma) === lower(word)));
123
+ };
124
+ /** Written before: the whole phrase, or its last word as written or as its lemma (eggs, egg). */
125
+ const isWrittenBefore = (text, phrase) => {
126
+ const start = phrase[0]?.start ?? 0;
127
+ const earlier = squeezed(text.source.slice(0, start));
128
+ const last = phrase.at(-1);
129
+ const forms = [phraseText(text.source, phrase), last?.surface ?? "", last?.lemma ?? ""].map(squeezed).filter((form) => form !== "");
130
+ const lemma = lower(last?.lemma ?? "");
131
+ return forms.some((form) => earlier.includes(form)) || text.words.some((word) => word.start < start && lower(word.lemma) === lemma);
132
+ };
133
+ const unlistedIn = (text, step, lists, words) => {
134
+ const tools = lists.some((list) => list.tools);
135
+ const listNames = lists.map((list) => list.heading).join(" / ");
136
+ return usedPhrases(step.tokens, words)
137
+ .filter((candidate) => (candidate.group === "object" || tools) && candidate.tokens.at(-1)?.pos === "NOUN")
138
+ .filter((candidate) => !isAtHand(text.source, candidate.tokens, words) && !isWrittenBefore(text, candidate.tokens))
139
+ .map((candidate) => ({ offset: candidate.tokens[0]?.start ?? step.start, item: phraseText(text.source, candidate.tokens), list: listNames }));
140
+ };
141
+ /**
142
+ * The things the numbered steps use that the document's list of what is needed does not name. Nothing when the document
143
+ * has no such list: a document that promises no list cannot leave something off it.
144
+ */
145
+ export const unlistedItems = (text, headings, steps, words) => {
146
+ const lists = itemLists(headings, words);
147
+ if (lists.length === 0)
148
+ return [];
149
+ const found = steps.flatMap((step) => unlistedIn(text, step, lists, words));
150
+ return found.filter((item, index) => found.findIndex((other) => squeezed(other.item) === squeezed(item.item)) === index);
151
+ };
152
+ //# sourceMappingURL=unlisted-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlisted-items.js","sourceRoot":"","sources":["../../src/structure/unlisted-items.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export type VersionPoint = {
9
9
  };
10
10
  /** The version a heading or an item starts with, as written; undefined when it does not start with one. */
11
11
  export declare const leadingVersion: (text: string) => string | undefined;
12
+ /** Whether every label is a version and no step goes against direction (equal versions do not break it). */
13
+ export declare const versionsAlong: (labels: readonly (string | undefined)[], direction: number) => boolean;
12
14
  /**
13
15
  * The versions that belong to no longest run along the majority direction. A run that holds no more than half of them is
14
16
  * taken as sorted by something else, and nothing is said.
@@ -1 +1 @@
1
- {"version":3,"file":"version-order.d.ts","sourceRoot":"","sources":["../../src/structure/version-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAO/E,2GAA2G;AAC3G,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAAiD,CAAC;AAiCzG;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,SAAS,YAAY,EAAE,KAAG,cAAc,EAiBlF,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,MAAM,EAAE,KAAG,OAK5D,CAAC"}
1
+ {"version":3,"file":"version-order.d.ts","sourceRoot":"","sources":["../../src/structure/version-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAO/E,2GAA2G;AAC3G,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAAiD,CAAC;AAoBzG,4GAA4G;AAC5G,eAAO,MAAM,aAAa,GAAI,QAAQ,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,WAAW,MAAM,KAAG,OAO1F,CAAC;AAeF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,SAAS,YAAY,EAAE,KAAG,cAAc,EAiBlF,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,MAAM,EAAE,KAAG,OAK5D,CAAC"}
@@ -20,6 +20,16 @@ const compareVersions = (left, right) => {
20
20
  const differing = left.parts.findIndex((part, index) => part !== right.parts[index]);
21
21
  return differing === -1 ? comparePrerelease(left.prerelease, right.prerelease) : Math.sign((left.parts[differing] ?? 0) - (right.parts[differing] ?? 0));
22
22
  };
23
+ /** Whether every label is a version and no step goes against direction (equal versions do not break it). */
24
+ export const versionsAlong = (labels, direction) => {
25
+ const versions = labels.flatMap((label) => {
26
+ const version = label === undefined ? undefined : parse(label);
27
+ return version === undefined ? [] : [version];
28
+ });
29
+ if (versions.length !== labels.length)
30
+ return false;
31
+ return versions.slice(1).every((version, index) => compareVersions(version, versions[index] ?? version) !== -direction);
32
+ };
23
33
  /** The longest run along direction ending at each version (equal versions do not break it). */
24
34
  const longestEndingAt = (versions, direction) => versions.reduce((lengths, version, index) => {
25
35
  const along = versions.slice(0, index).map((earlier, at) => (compareVersions(version, earlier) === -direction ? 0 : (lengths[at] ?? 0)));
@@ -1 +1 @@
1
- {"version":3,"file":"version-order.js","sourceRoot":"","sources":["../../src/structure/version-order.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-order.js","sourceRoot":"","sources":["../../src/structure/version-order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { StructureIssue } from "./issues.ts";
2
+ /**
3
+ * 書いた距離と合わない徒歩の分数(駅 徒歩3分(約600m)、a 3-minute walk (600 m))。徒歩の語に付いた分数と、そのすぐ前かすぐ後ろの
4
+ * 距離だけを組にし、文書の速さで歩いた分数と比べる。速さは文書に書いたもの(道路距離80mを1分、80 m per minute、5 km/h)を使い、
5
+ * 書いていなければ呼ぶ側が渡す速さ(文書の種類の速さ。不動産の広告は 80m で1分、切り上げ)を使う。どちらも無ければ速さを推し量らない。
6
+ * 約の付いた距離は、書いた一番下の桁の半分だけ幅を持たせる(約1.2km は 1.15〜1.25km)。小数の距離は書いた桁の半分の幅を持つ。
7
+ * 範囲(5〜7分)、上限(10分以内)、約の付いた分数は比べない。語は言語パッケージの語彙表から受け取る。
8
+ */
9
+ /** 語彙表の一語。position は数のどちら側に書くか。weight は単位の倍率(長さは m、時間は秒)。 */
10
+ export type WalkMark = {
11
+ readonly pattern: string;
12
+ readonly position?: "before" | "after" | undefined;
13
+ readonly weight?: number | undefined;
14
+ };
15
+ export type WalkWords = {
16
+ /** 分数を徒歩の時間にする語(徒歩、walk)。position は分数のどちら側か。 */
17
+ readonly walks: readonly WalkMark[];
18
+ /** 徒歩の語と分数の間に挟んでよい語(徒歩で5分の で)。 */
19
+ readonly gaps: readonly string[];
20
+ /** 分数を上限にする語(以内、within)。position は分数のどちら側か。 */
21
+ readonly bounds: readonly WalkMark[];
22
+ /** 二つの数を範囲にする語(5から7分、8 to 10 minutes)。〜 や - の記号は語彙表に書かなくても読む。 */
23
+ readonly ranges: readonly string[];
24
+ /** 約や上限の語と数の間で読み飛ばす語(about a 5-minute walk の a)。 */
25
+ readonly fillers: readonly string[];
26
+ /** 長さの単位。weight は m への倍率。 */
27
+ readonly lengths: readonly WalkMark[];
28
+ /** 時間の単位。weight は秒への倍率。分より短い単位は分数に使わない。 */
29
+ readonly times: readonly WalkMark[];
30
+ /** 数を概数にする語(約、about)。 */
31
+ readonly hedges: readonly string[];
32
+ /** 長さを速さにする語(を1分、per minute、/h、分速)。weight はその時間の秒。 */
33
+ readonly perTimes: readonly WalkMark[];
34
+ /** 速さの行にあれば、端数を切り上げると言う語(切り上げ、rounded up)。 */
35
+ readonly roundUps: readonly string[];
36
+ /** 速さの行にあれば、切り上げの語があっても切り上げではないと言う語(切り上げません、not rounded up)。 */
37
+ readonly notRoundUps: readonly string[];
38
+ };
39
+ /** 1分に歩く m と、端数の扱い。up は切り上げだけ、any は切り上げでも切り捨てでも合う。 */
40
+ export type WalkRate = {
41
+ readonly metresPerMinute: number;
42
+ readonly rounding: "up" | "any";
43
+ };
44
+ /** 読んだ距離。metres は書いた値、margin は書いた桁から来る幅の半分(m)。 */
45
+ export type Distance = {
46
+ readonly start: number;
47
+ readonly end: number;
48
+ readonly metres: number;
49
+ readonly margin: number;
50
+ };
51
+ /** 徒歩の分数。lead は前に書いた徒歩の語の始まり(徒歩5分 の 徒歩)、後ろに書くなら数の始まり。 */
52
+ type Minutes = {
53
+ readonly start: number;
54
+ readonly end: number;
55
+ readonly lead: number;
56
+ readonly value: number;
57
+ };
58
+ /** 一行の中の、徒歩の分数。範囲、上限、約の付いた分数は読まない。 */
59
+ export declare const walkMinutesIn: (line: string, words: WalkWords) => Minutes[];
60
+ /** 書いた数の桁から来る幅の半分(書いた単位で)。小数は最後の桁、約の付いた整数は最後の 0 でない桁。それ以外は 0。 */
61
+ export declare const marginOf: (digits: string, hedged: boolean) => number;
62
+ /** 一行の中の距離。範囲の片側は読まない。 */
63
+ export declare const distancesIn: (line: string, words: WalkWords) => Distance[];
64
+ /**
65
+ * 分数と組になる距離。すぐ後ろ(徒歩5分(400m))を先に、無ければすぐ前(400m(徒歩5分))を見る。間に置けるのは記号と約の語だけ。
66
+ * 一つの距離は一つの分数とだけ組にする。
67
+ */
68
+ export declare const walkPairs: (line: string, words: WalkWords) => {
69
+ readonly minutes: Minutes;
70
+ readonly distance: Distance;
71
+ }[];
72
+ /** 一行に書いた速さ(m/分)。距離のすぐ後ろ(80mを1分、80 m per minute)かすぐ前(分速80m)に時間の語がある距離。 */
73
+ export declare const ratesIn: (line: string, words: WalkWords) => number[];
74
+ /**
75
+ * 文書の速さ。徒歩の語のある行に書いた速さが一つ(一つの値)だけなら、それを使う。端数は、その行に切り上げの語があれば切り上げだけ、
76
+ * 無ければどちらでもよい。二つ以上の値があれば、どの分数がどれで計ったか決められないので比べない。書いていなければ fallback。
77
+ */
78
+ export declare const statedRate: (source: string, words: WalkWords, fallback?: WalkRate) => WalkRate | undefined;
79
+ /** その距離を歩いて合う分数の幅。margin の幅の上の端は含まない(1.25km は 1.3km と書く)。 */
80
+ export declare const expectedMinutes: (distance: Pick<Distance, "metres" | "margin">, rate: WalkRate) => {
81
+ readonly low: number;
82
+ readonly high: number;
83
+ };
84
+ /** 距離と合わない徒歩の分数。分数の位置を指す。 */
85
+ export declare const walkTimeMismatches: (source: string, words: WalkWords, fallback?: WalkRate) => StructureIssue[];
86
+ export {};
87
+ //# sourceMappingURL=walk-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-time.d.ts","sourceRoot":"","sources":["../../src/structure/walk-time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ const DIGIT = "[0-90-9]";
2
+ const NUMBER = new RegExp(`(?<!${DIGIT}|[.,,.])${DIGIT}+(?:[,,]${DIGIT}{3})*(?:[..]${DIGIT}+)?(?!${DIGIT}|[..,,]${DIGIT})`, "gu");
3
+ const LETTER = /[A-Za-z]/u;
4
+ /** 単位のすぐ後ろにあれば、その単位ではない(m のあとの in、㎡ の 2、m² の ²)。 */
5
+ const UNIT_CONTINUES = /^[A-Za-z0-90-9²³]/u;
6
+ /** 数と単位の間に置けるもの(1.2 km、5-minute)。 */
7
+ const NUMBER_UNIT_GAP = /^[ \u00a0-]?/u;
8
+ /** 分数と後ろの徒歩の語の間に置けるもの(5 minutes' walk、5 min. walk)。 */
9
+ const MINUTES_WALK_GAP = /^[\s'’.]*/u;
10
+ /**
11
+ * 分数と距離の間に置けるもの。開き括弧か・か / の一つだけ(徒歩5分(400m)、400m(徒歩5分)、徒歩5分・400m)。
12
+ * 読点では組にしない(標高600m、徒歩3分 の 600m は道のりではない)。
13
+ */
14
+ const PAIR_GAP = /^\s*[(([[【・//]\s*$/u;
15
+ const RANGE_MARKS = ["〜", "~", "~", "–", "—", "-"];
16
+ const DIGIT_START = new RegExp(`^${DIGIT}`, "u");
17
+ const DIGIT_END = new RegExp(`${DIGIT}$`, "u");
18
+ /** 浮動小数の誤差(1150 / 80 など)で切り上げが一つずれないための小さな数。 */
19
+ const EPSILON = 1e-9;
20
+ const MINUTE_SECONDS = 60;
21
+ /** 時速から出した速さ(4km/h は 66.66…m/分)を、言うときに小数一桁にする。 */
22
+ const RATE_DECIMALS = 10;
23
+ const normal = (text) => text.normalize("NFKC").toLowerCase();
24
+ const valueOf = (digits) => Number(digits.normalize("NFKC").replaceAll(",", ""));
25
+ const isWordEdge = (text, at) => !(LETTER.test(text.charAt(at - 1)) && LETTER.test(text.charAt(at)));
26
+ const startsWithWord = (text, word) => normal(text.slice(0, word.length)) === normal(word) && isWordEdge(text, word.length);
27
+ const endsWithWord = (text, word) => text.length >= word.length && normal(text.slice(-word.length)) === normal(word) && isWordEdge(text, text.length - word.length);
28
+ /** 末尾の空白と、読み飛ばす語を除く(about a の a)。 */
29
+ const trimFillers = (text, fillers) => {
30
+ const trimmed = text.trimEnd();
31
+ const filler = fillers.find((word) => endsWithWord(trimmed, word));
32
+ return filler === undefined ? trimmed : trimFillers(trimmed.slice(0, -filler.length), fillers);
33
+ };
34
+ /** 位置 at から始まる単位。㎞ のような一字の単位も NFKC で照らす。長い語から。 */
35
+ const unitAt = (line, at, units) => units
36
+ .toSorted((left, right) => right.pattern.length - left.pattern.length)
37
+ .flatMap((unit) => Array.from({ length: unit.pattern.length }, (_, index) => at + index + 1)
38
+ .filter((end) => normal(line.slice(at, end)) === normal(unit.pattern) && !UNIT_CONTINUES.test(line.slice(end)))
39
+ .map((end) => ({ unit, end })))[0];
40
+ /** 一行の中の、単位の付いた数。 */
41
+ const readingsIn = (line, units) => [...line.matchAll(NUMBER)].flatMap((match) => {
42
+ const numberEnd = match.index + match[0].length;
43
+ const unitStart = numberEnd + (NUMBER_UNIT_GAP.exec(line.slice(numberEnd))?.[0].length ?? 0);
44
+ const found = unitAt(line, unitStart, units);
45
+ return found === undefined ? [] : [{ start: match.index, end: numberEnd, digits: match[0], unit: found.unit, unitEnd: found.end }];
46
+ });
47
+ const endsWithAny = (text, words) => words.some((word) => endsWithWord(text, word));
48
+ /** 範囲の片側の数か(5〜7分 の 7、5分から10分 の 5分、400m〜600m の 400m、8 to 10 minutes の 10)。 */
49
+ const isRangeEnd = (line, reading, units, rangeWords) => {
50
+ const joins = [...RANGE_MARKS, ...rangeWords];
51
+ const after = line.slice(reading.unitEnd).trimStart();
52
+ const next = joins.find((word) => startsWithWord(after, word));
53
+ if (next !== undefined && DIGIT_START.test(after.slice(next.length).trimStart()))
54
+ return true;
55
+ const before = line.slice(0, reading.start).trimEnd();
56
+ const previous = joins.find((word) => endsWithWord(before, word));
57
+ if (previous === undefined)
58
+ return false;
59
+ const left = before.slice(0, -previous.length).trimEnd();
60
+ const unit = units.find((mark) => endsWithWord(left, mark.pattern));
61
+ return DIGIT_END.test(unit === undefined ? left : left.slice(0, -unit.pattern.length).trimEnd());
62
+ };
63
+ /** 数のすぐ前(読み飛ばす語の後ろ)に約の語があるか。 */
64
+ const isHedged = (line, start, words) => endsWithAny(trimFillers(line.slice(0, start).replace(/[(([[]$/u, ""), words.fillers), words.hedges);
65
+ const boundBefore = (prefix, words) => endsWithAny(trimFillers(prefix, words.fillers), words.bounds.filter((bound) => bound.position === "before").map((bound) => bound.pattern));
66
+ const boundAfter = (rest, words) => words.bounds.filter((bound) => bound.position !== "before").some((bound) => startsWithWord(rest.trimStart(), bound.pattern));
67
+ /** 前に書く徒歩の語(徒歩5分、徒歩で5分)。あれば、その語の始まりの位置。 */
68
+ const walkBeforeStart = (prefix, words) => {
69
+ const trimmed = prefix.trimEnd();
70
+ const gap = words.gaps.find((word) => trimmed.endsWith(word));
71
+ const head = gap === undefined ? trimmed : trimmed.slice(0, -gap.length).trimEnd();
72
+ const walk = words.walks.find((mark) => mark.position === "before" && endsWithWord(head, mark.pattern));
73
+ return walk === undefined ? undefined : head.length - walk.pattern.length;
74
+ };
75
+ /** 後ろに書く徒歩の語(a 5-minute walk)。あれば、その語の終わりの位置。 */
76
+ const walkAfterEnd = (line, from, words) => {
77
+ const at = from + (MINUTES_WALK_GAP.exec(line.slice(from))?.[0].length ?? 0);
78
+ const walk = words.walks.find((mark) => mark.position === "after" && startsWithWord(line.slice(at), mark.pattern));
79
+ return walk === undefined ? undefined : at + walk.pattern.length;
80
+ };
81
+ const minuteUnits = (words) => words.times.filter((unit) => (unit.weight ?? 0) >= MINUTE_SECONDS);
82
+ /** 一行の中の、徒歩の分数。範囲、上限、約の付いた分数は読まない。 */
83
+ export const walkMinutesIn = (line, words) => readingsIn(line, minuteUnits(words)).flatMap((reading) => {
84
+ const prefix = line.slice(0, reading.start);
85
+ const leadStart = walkBeforeStart(prefix, words);
86
+ const afterEnd = walkAfterEnd(line, reading.unitEnd, words);
87
+ if (leadStart === undefined && afterEnd === undefined)
88
+ return [];
89
+ if (isRangeEnd(line, reading, words.times, words.ranges) || isHedged(line, reading.start, words))
90
+ return [];
91
+ if (boundBefore(prefix, words) || boundAfter(line.slice(afterEnd ?? reading.unitEnd), words))
92
+ return [];
93
+ const value = (valueOf(reading.digits) * (reading.unit.weight ?? 0)) / MINUTE_SECONDS;
94
+ if (!Number.isInteger(value) || value <= 0)
95
+ return [];
96
+ return [{ start: reading.start, end: afterEnd ?? reading.unitEnd, lead: leadStart ?? reading.start, value }];
97
+ });
98
+ /** 書いた数の桁から来る幅の半分(書いた単位で)。小数は最後の桁、約の付いた整数は最後の 0 でない桁。それ以外は 0。 */
99
+ export const marginOf = (digits, hedged) => {
100
+ const plain = digits.normalize("NFKC").replaceAll(",", "");
101
+ const point = plain.indexOf(".");
102
+ if (point !== -1)
103
+ return 10 ** -(plain.length - point - 1) / 2;
104
+ if (!hedged)
105
+ return 0;
106
+ const lastNonZero = [...plain].findLastIndex((digit) => digit !== "0");
107
+ const zeros = plain.length - 1 - lastNonZero;
108
+ return 10 ** zeros / 2;
109
+ };
110
+ /** 一行の中の距離。範囲の片側は読まない。 */
111
+ export const distancesIn = (line, words) => readingsIn(line, words.lengths)
112
+ .filter((reading) => !isRangeEnd(line, reading, words.lengths, words.ranges))
113
+ .flatMap((reading) => {
114
+ const weight = reading.unit.weight ?? 0;
115
+ const metres = valueOf(reading.digits) * weight;
116
+ const margin = marginOf(reading.digits, isHedged(line, reading.start, words)) * weight;
117
+ return metres > 0 ? [{ start: reading.start, end: reading.unitEnd, metres, margin }] : [];
118
+ });
119
+ /**
120
+ * 分数と組になる距離。すぐ後ろ(徒歩5分(400m))を先に、無ければすぐ前(400m(徒歩5分))を見る。間に置けるのは記号と約の語だけ。
121
+ * 一つの距離は一つの分数とだけ組にする。
122
+ */
123
+ export const walkPairs = (line, words) => {
124
+ const distances = distancesIn(line, words);
125
+ const between = (from, to) => from <= to && PAIR_GAP.test(trimFillers(line.slice(from, to), [...words.hedges, ...words.fillers]));
126
+ const used = new Set();
127
+ return walkMinutesIn(line, words).flatMap((minutes) => {
128
+ const after = distances.find((distance) => !used.has(distance) && between(minutes.end, distance.start));
129
+ const before = after ?? distances.findLast((distance) => !used.has(distance) && between(distance.end, minutes.lead));
130
+ if (before === undefined)
131
+ return [];
132
+ used.add(before);
133
+ return [{ minutes, distance: before }];
134
+ });
135
+ };
136
+ /** 一行に書いた速さ(m/分)。距離のすぐ後ろ(80mを1分、80 m per minute)かすぐ前(分速80m)に時間の語がある距離。 */
137
+ export const ratesIn = (line, words) => distancesIn(line, words).flatMap((distance) => {
138
+ const rest = line.slice(distance.end).trimStart();
139
+ const head = line.slice(0, distance.start).trimEnd();
140
+ const per = words.perTimes.find((mark) => mark.position !== "before" && startsWithWord(rest, mark.pattern)) ??
141
+ words.perTimes.find((mark) => mark.position === "before" && endsWithWord(head, mark.pattern));
142
+ return per === undefined ? [] : [distance.metres / ((per.weight ?? MINUTE_SECONDS) / MINUTE_SECONDS)];
143
+ });
144
+ const containsAny = (text, words) => words.some((word) => normal(text).includes(normal(word)));
145
+ /** 速さを読む行。徒歩の語(Walking も walk の語として)を含む行。 */
146
+ const hasWalkWord = (line, words) => containsAny(line, words.walks.map((walk) => walk.pattern));
147
+ const linesOf = (source) => {
148
+ const starts = [0, ...[...source.matchAll(/\n/gu)].map((match) => match.index + 1)];
149
+ return starts.map((start, index) => ({ text: source.slice(start, (starts[index + 1] ?? source.length + 1) - 1), start }));
150
+ };
151
+ /**
152
+ * 文書の速さ。徒歩の語のある行に書いた速さが一つ(一つの値)だけなら、それを使う。端数は、その行に切り上げの語があれば切り上げだけ、
153
+ * 無ければどちらでもよい。二つ以上の値があれば、どの分数がどれで計ったか決められないので比べない。書いていなければ fallback。
154
+ */
155
+ export const statedRate = (source, words, fallback) => {
156
+ const stated = linesOf(source)
157
+ .filter((line) => hasWalkWord(line.text, words))
158
+ .flatMap((line) => ratesIn(line.text, words).map((rate) => ({ rate, up: containsAny(line.text, words.roundUps) && !containsAny(line.text, words.notRoundUps) })));
159
+ const first = stated[0];
160
+ if (first === undefined)
161
+ return fallback;
162
+ if (stated.some((other) => other.rate !== first.rate))
163
+ return undefined;
164
+ return { metresPerMinute: first.rate, rounding: stated.some((other) => other.up) ? "up" : "any" };
165
+ };
166
+ /** その距離を歩いて合う分数の幅。margin の幅の上の端は含まない(1.25km は 1.3km と書く)。 */
167
+ export const expectedMinutes = (distance, rate) => {
168
+ const low = (distance.metres - distance.margin) / rate.metresPerMinute;
169
+ const high = (distance.metres + distance.margin) / rate.metresPerMinute;
170
+ return { low: rate.rounding === "up" ? Math.ceil(low - EPSILON) : Math.floor(low + EPSILON), high: Math.ceil(high - EPSILON) };
171
+ };
172
+ const rangeText = (low, high) => (low === high ? String(low) : `${String(low)}–${String(high)}`);
173
+ /** 距離と合わない徒歩の分数。分数の位置を指す。 */
174
+ export const walkTimeMismatches = (source, words, fallback) => {
175
+ const rate = statedRate(source, words, fallback);
176
+ if (rate === undefined)
177
+ return [];
178
+ return linesOf(source).flatMap((line) => walkPairs(line.text, words).flatMap(({ minutes, distance }) => {
179
+ const { low, high } = expectedMinutes(distance, rate);
180
+ if (minutes.value >= low && minutes.value <= high)
181
+ return [];
182
+ return [
183
+ {
184
+ offset: line.start + minutes.lead,
185
+ values: {
186
+ minutes: line.text.slice(minutes.lead, minutes.end),
187
+ distance: line.text.slice(distance.start, distance.end),
188
+ expected: rangeText(Math.max(low, 1), Math.max(high, 1)),
189
+ rate: Math.round(rate.metresPerMinute * RATE_DECIMALS) / RATE_DECIMALS,
190
+ },
191
+ },
192
+ ];
193
+ }));
194
+ };
195
+ //# sourceMappingURL=walk-time.js.map