chaffjs 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/dist/capitals-passage.d.ts +3 -0
  2. package/dist/capitals-passage.d.ts.map +1 -0
  3. package/dist/capitals-passage.js +26 -0
  4. package/dist/capitals-passage.js.map +1 -0
  5. package/dist/coined-hyphen-name.d.ts +13 -0
  6. package/dist/coined-hyphen-name.d.ts.map +1 -0
  7. package/dist/coined-hyphen-name.js +21 -0
  8. package/dist/coined-hyphen-name.js.map +1 -0
  9. package/dist/company-names.d.ts +6 -1
  10. package/dist/company-names.d.ts.map +1 -1
  11. package/dist/company-names.js +22 -3
  12. package/dist/company-names.js.map +1 -1
  13. package/dist/detectors/acronym-context.d.ts +1 -1
  14. package/dist/detectors/acronym-context.d.ts.map +1 -1
  15. package/dist/detectors/acronym-context.js +4 -4
  16. package/dist/detectors/acronym-context.js.map +1 -1
  17. package/dist/detectors/acronym-definition.d.ts +13 -0
  18. package/dist/detectors/acronym-definition.d.ts.map +1 -0
  19. package/dist/detectors/acronym-definition.js +90 -0
  20. package/dist/detectors/acronym-definition.js.map +1 -0
  21. package/dist/detectors/acronym-lone.d.ts +13 -0
  22. package/dist/detectors/acronym-lone.d.ts.map +1 -0
  23. package/dist/detectors/acronym-lone.js +22 -0
  24. package/dist/detectors/acronym-lone.js.map +1 -0
  25. package/dist/detectors/acronym-name.d.ts +55 -0
  26. package/dist/detectors/acronym-name.d.ts.map +1 -0
  27. package/dist/detectors/acronym-name.js +75 -0
  28. package/dist/detectors/acronym-name.js.map +1 -0
  29. package/dist/detectors/capitalised-term.d.ts +14 -2
  30. package/dist/detectors/capitalised-term.d.ts.map +1 -1
  31. package/dist/detectors/capitalised-term.js +115 -4
  32. package/dist/detectors/capitalised-term.js.map +1 -1
  33. package/dist/detectors/caps-caption.d.ts +11 -0
  34. package/dist/detectors/caps-caption.d.ts.map +1 -0
  35. package/dist/detectors/caps-caption.js +51 -0
  36. package/dist/detectors/caps-caption.js.map +1 -0
  37. package/dist/detectors/char-shape.d.ts.map +1 -1
  38. package/dist/detectors/char-shape.js +47 -18
  39. package/dist/detectors/char-shape.js.map +1 -1
  40. package/dist/detectors/clause-shape.d.ts +1 -1
  41. package/dist/detectors/clause-shape.d.ts.map +1 -1
  42. package/dist/detectors/clause-shape.js +9 -4
  43. package/dist/detectors/clause-shape.js.map +1 -1
  44. package/dist/detectors/concrete-evidence.d.ts +13 -1
  45. package/dist/detectors/concrete-evidence.d.ts.map +1 -1
  46. package/dist/detectors/concrete-evidence.js +59 -0
  47. package/dist/detectors/concrete-evidence.js.map +1 -1
  48. package/dist/detectors/contraction-minority.d.ts +11 -0
  49. package/dist/detectors/contraction-minority.d.ts.map +1 -0
  50. package/dist/detectors/contraction-minority.js +10 -0
  51. package/dist/detectors/contraction-minority.js.map +1 -0
  52. package/dist/detectors/counter-edge.d.ts +5 -0
  53. package/dist/detectors/counter-edge.d.ts.map +1 -1
  54. package/dist/detectors/counter-edge.js +23 -0
  55. package/dist/detectors/counter-edge.js.map +1 -1
  56. package/dist/detectors/date-any-year.d.ts +6 -3
  57. package/dist/detectors/date-any-year.d.ts.map +1 -1
  58. package/dist/detectors/date-any-year.js +47 -10
  59. package/dist/detectors/date-any-year.js.map +1 -1
  60. package/dist/detectors/date-heading-year.d.ts +18 -0
  61. package/dist/detectors/date-heading-year.d.ts.map +1 -0
  62. package/dist/detectors/date-heading-year.js +38 -0
  63. package/dist/detectors/date-heading-year.js.map +1 -0
  64. package/dist/detectors/date-year.d.ts +12 -2
  65. package/dist/detectors/date-year.d.ts.map +1 -1
  66. package/dist/detectors/date-year.js +31 -6
  67. package/dist/detectors/date-year.js.map +1 -1
  68. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  69. package/dist/detectors/defined-term-form.js +26 -5
  70. package/dist/detectors/defined-term-form.js.map +1 -1
  71. package/dist/detectors/due-date.d.ts.map +1 -1
  72. package/dist/detectors/due-date.js +6 -0
  73. package/dist/detectors/due-date.js.map +1 -1
  74. package/dist/detectors/en-shape.d.ts.map +1 -1
  75. package/dist/detectors/en-shape.js +5 -1
  76. package/dist/detectors/en-shape.js.map +1 -1
  77. package/dist/detectors/fact-consistency.d.ts.map +1 -1
  78. package/dist/detectors/fact-consistency.js +3 -2
  79. package/dist/detectors/fact-consistency.js.map +1 -1
  80. package/dist/detectors/gram-passages.d.ts +11 -0
  81. package/dist/detectors/gram-passages.d.ts.map +1 -0
  82. package/dist/detectors/gram-passages.js +26 -0
  83. package/dist/detectors/gram-passages.js.map +1 -0
  84. package/dist/detectors/heading-end-mark.d.ts +8 -3
  85. package/dist/detectors/heading-end-mark.d.ts.map +1 -1
  86. package/dist/detectors/heading-end-mark.js +18 -8
  87. package/dist/detectors/heading-end-mark.js.map +1 -1
  88. package/dist/detectors/heading-names.d.ts +7 -0
  89. package/dist/detectors/heading-names.d.ts.map +1 -0
  90. package/dist/detectors/heading-names.js +24 -0
  91. package/dist/detectors/heading-names.js.map +1 -0
  92. package/dist/detectors/heading-numbering.d.ts.map +1 -1
  93. package/dist/detectors/heading-numbering.js +7 -2
  94. package/dist/detectors/heading-numbering.js.map +1 -1
  95. package/dist/detectors/inch-mark.d.ts +10 -0
  96. package/dist/detectors/inch-mark.d.ts.map +1 -0
  97. package/dist/detectors/inch-mark.js +48 -0
  98. package/dist/detectors/inch-mark.js.map +1 -0
  99. package/dist/detectors/lexicon.d.ts +0 -1
  100. package/dist/detectors/lexicon.d.ts.map +1 -1
  101. package/dist/detectors/lexicon.js +29 -23
  102. package/dist/detectors/lexicon.js.map +1 -1
  103. package/dist/detectors/mark-shape.d.ts +6 -3
  104. package/dist/detectors/mark-shape.d.ts.map +1 -1
  105. package/dist/detectors/mark-shape.js +12 -6
  106. package/dist/detectors/mark-shape.js.map +1 -1
  107. package/dist/detectors/name-variant-apart.d.ts +27 -0
  108. package/dist/detectors/name-variant-apart.d.ts.map +1 -0
  109. package/dist/detectors/name-variant-apart.js +51 -0
  110. package/dist/detectors/name-variant-apart.js.map +1 -0
  111. package/dist/detectors/name-variant.d.ts.map +1 -1
  112. package/dist/detectors/name-variant.js +18 -11
  113. package/dist/detectors/name-variant.js.map +1 -1
  114. package/dist/detectors/numeral-word.d.ts +15 -0
  115. package/dist/detectors/numeral-word.d.ts.map +1 -0
  116. package/dist/detectors/numeral-word.js +26 -0
  117. package/dist/detectors/numeral-word.js.map +1 -0
  118. package/dist/detectors/organisation-run.d.ts +14 -0
  119. package/dist/detectors/organisation-run.d.ts.map +1 -0
  120. package/dist/detectors/organisation-run.js +73 -0
  121. package/dist/detectors/organisation-run.js.map +1 -0
  122. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  123. package/dist/detectors/orthographic-variant.js +13 -5
  124. package/dist/detectors/orthographic-variant.js.map +1 -1
  125. package/dist/detectors/outline-label.d.ts +14 -0
  126. package/dist/detectors/outline-label.d.ts.map +1 -0
  127. package/dist/detectors/outline-label.js +32 -0
  128. package/dist/detectors/outline-label.js.map +1 -0
  129. package/dist/detectors/page-marker.d.ts +6 -0
  130. package/dist/detectors/page-marker.d.ts.map +1 -0
  131. package/dist/detectors/page-marker.js +19 -0
  132. package/dist/detectors/page-marker.js.map +1 -0
  133. package/dist/detectors/parallel-definition.d.ts +16 -0
  134. package/dist/detectors/parallel-definition.d.ts.map +1 -0
  135. package/dist/detectors/parallel-definition.js +51 -0
  136. package/dist/detectors/parallel-definition.js.map +1 -0
  137. package/dist/detectors/reference-text.d.ts.map +1 -1
  138. package/dist/detectors/reference-text.js +1 -0
  139. package/dist/detectors/reference-text.js.map +1 -1
  140. package/dist/detectors/registry/unfilled-placeholder.d.ts.map +1 -1
  141. package/dist/detectors/registry/unfilled-placeholder.js +2 -2
  142. package/dist/detectors/registry/unfilled-placeholder.js.map +1 -1
  143. package/dist/detectors/registry/vague-density.js +1 -1
  144. package/dist/detectors/registry/vague-density.js.map +1 -1
  145. package/dist/detectors/request-owner.d.ts +6 -2
  146. package/dist/detectors/request-owner.d.ts.map +1 -1
  147. package/dist/detectors/request-owner.js +57 -7
  148. package/dist/detectors/request-owner.js.map +1 -1
  149. package/dist/detectors/requirement-smell.d.ts.map +1 -1
  150. package/dist/detectors/requirement-smell.js +10 -2
  151. package/dist/detectors/requirement-smell.js.map +1 -1
  152. package/dist/detectors/sentence-length.d.ts.map +1 -1
  153. package/dist/detectors/sentence-length.js +24 -16
  154. package/dist/detectors/sentence-length.js.map +1 -1
  155. package/dist/detectors/sentence-rhythm.d.ts.map +1 -1
  156. package/dist/detectors/sentence-rhythm.js +6 -3
  157. package/dist/detectors/sentence-rhythm.js.map +1 -1
  158. package/dist/detectors/series-label.d.ts +2 -1
  159. package/dist/detectors/series-label.d.ts.map +1 -1
  160. package/dist/detectors/series-label.js +10 -4
  161. package/dist/detectors/series-label.js.map +1 -1
  162. package/dist/detectors/signals.d.ts +4 -0
  163. package/dist/detectors/signals.d.ts.map +1 -1
  164. package/dist/detectors/signals.js +95 -36
  165. package/dist/detectors/signals.js.map +1 -1
  166. package/dist/detectors/structure-tree.d.ts.map +1 -1
  167. package/dist/detectors/structure-tree.js +8 -7
  168. package/dist/detectors/structure-tree.js.map +1 -1
  169. package/dist/detectors/template-sections.d.ts +14 -0
  170. package/dist/detectors/template-sections.d.ts.map +1 -0
  171. package/dist/detectors/template-sections.js +25 -0
  172. package/dist/detectors/template-sections.js.map +1 -0
  173. package/dist/detectors/titled-run.d.ts +22 -0
  174. package/dist/detectors/titled-run.d.ts.map +1 -0
  175. package/dist/detectors/titled-run.js +34 -0
  176. package/dist/detectors/titled-run.js.map +1 -0
  177. package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
  178. package/dist/detectors/unbalanced-bracket.js +4 -0
  179. package/dist/detectors/unbalanced-bracket.js.map +1 -1
  180. package/dist/detectors/undefined-term.d.ts.map +1 -1
  181. package/dist/detectors/undefined-term.js +8 -0
  182. package/dist/detectors/undefined-term.js.map +1 -1
  183. package/dist/detectors/unfilled-placeholder.d.ts +4 -0
  184. package/dist/detectors/unfilled-placeholder.d.ts.map +1 -0
  185. package/dist/detectors/unfilled-placeholder.js +9 -0
  186. package/dist/detectors/unfilled-placeholder.js.map +1 -0
  187. package/dist/detectors/vague-density.d.ts +5 -0
  188. package/dist/detectors/vague-density.d.ts.map +1 -0
  189. package/dist/detectors/vague-density.js +52 -0
  190. package/dist/detectors/vague-density.js.map +1 -0
  191. package/dist/facts/fact-scope.d.ts +10 -1
  192. package/dist/facts/fact-scope.d.ts.map +1 -1
  193. package/dist/facts/fact-scope.js +34 -3
  194. package/dist/facts/fact-scope.js.map +1 -1
  195. package/dist/facts/table-facts.d.ts +12 -2
  196. package/dist/facts/table-facts.d.ts.map +1 -1
  197. package/dist/facts/table-facts.js +22 -4
  198. package/dist/facts/table-facts.js.map +1 -1
  199. package/dist/grade-api.d.ts +9 -2
  200. package/dist/grade-api.d.ts.map +1 -1
  201. package/dist/grade-api.js +31 -15
  202. package/dist/grade-api.js.map +1 -1
  203. package/dist/heading-numbering.d.ts +5 -2
  204. package/dist/heading-numbering.d.ts.map +1 -1
  205. package/dist/heading-numbering.js +27 -6
  206. package/dist/heading-numbering.js.map +1 -1
  207. package/dist/name-end-letter.d.ts +5 -0
  208. package/dist/name-end-letter.d.ts.map +1 -1
  209. package/dist/name-end-letter.js +8 -0
  210. package/dist/name-end-letter.js.map +1 -1
  211. package/dist/name-given-before.d.ts +15 -0
  212. package/dist/name-given-before.d.ts.map +1 -0
  213. package/dist/name-given-before.js +30 -0
  214. package/dist/name-given-before.js.map +1 -0
  215. package/dist/name-separator.d.ts +2 -2
  216. package/dist/name-separator.d.ts.map +1 -1
  217. package/dist/name-separator.js +56 -5
  218. package/dist/name-separator.js.map +1 -1
  219. package/dist/name-variants.d.ts +3 -1
  220. package/dist/name-variants.d.ts.map +1 -1
  221. package/dist/name-variants.js +8 -7
  222. package/dist/name-variants.js.map +1 -1
  223. package/dist/name-word-order.d.ts +9 -5
  224. package/dist/name-word-order.d.ts.map +1 -1
  225. package/dist/name-word-order.js +47 -15
  226. package/dist/name-word-order.js.map +1 -1
  227. package/dist/nominal-stem.d.ts +13 -0
  228. package/dist/nominal-stem.d.ts.map +1 -0
  229. package/dist/nominal-stem.js +32 -0
  230. package/dist/nominal-stem.js.map +1 -0
  231. package/dist/sentence-load.d.ts +2 -1
  232. package/dist/sentence-load.d.ts.map +1 -1
  233. package/dist/sentence-load.js +6 -2
  234. package/dist/sentence-load.js.map +1 -1
  235. package/dist/structure/cited-document-section.d.ts +7 -0
  236. package/dist/structure/cited-document-section.d.ts.map +1 -0
  237. package/dist/structure/cited-document-section.js +33 -0
  238. package/dist/structure/cited-document-section.js.map +1 -0
  239. package/dist/structure/html-text-blocks.d.ts +8 -0
  240. package/dist/structure/html-text-blocks.d.ts.map +1 -0
  241. package/dist/structure/html-text-blocks.js +47 -0
  242. package/dist/structure/html-text-blocks.js.map +1 -0
  243. package/dist/structure/issues.d.ts +1 -1
  244. package/dist/structure/issues.d.ts.map +1 -1
  245. package/dist/structure/issues.js +19 -4
  246. package/dist/structure/issues.js.map +1 -1
  247. package/dist/structure/labelled-date-order.d.ts +4 -1
  248. package/dist/structure/labelled-date-order.d.ts.map +1 -1
  249. package/dist/structure/labelled-date-order.js +2 -2
  250. package/dist/structure/labelled-date-order.js.map +1 -1
  251. package/dist/structure/labelled-order.d.ts +3 -0
  252. package/dist/structure/labelled-order.d.ts.map +1 -1
  253. package/dist/structure/labelled-order.js +8 -3
  254. package/dist/structure/labelled-order.js.map +1 -1
  255. package/dist/structure/list-numbering.d.ts +20 -4
  256. package/dist/structure/list-numbering.d.ts.map +1 -1
  257. package/dist/structure/list-numbering.js +65 -9
  258. package/dist/structure/list-numbering.js.map +1 -1
  259. package/dist/structure/listed-paragraph.d.ts +16 -0
  260. package/dist/structure/listed-paragraph.d.ts.map +1 -0
  261. package/dist/structure/listed-paragraph.js +37 -0
  262. package/dist/structure/listed-paragraph.js.map +1 -0
  263. package/dist/structure/numbering.d.ts +3 -2
  264. package/dist/structure/numbering.d.ts.map +1 -1
  265. package/dist/structure/numbering.js +31 -6
  266. package/dist/structure/numbering.js.map +1 -1
  267. package/dist/structure/reference-text.d.ts +9 -1
  268. package/dist/structure/reference-text.d.ts.map +1 -1
  269. package/dist/structure/reference-text.js +21 -3
  270. package/dist/structure/reference-text.js.map +1 -1
  271. package/dist/structure/section-names.d.ts +12 -0
  272. package/dist/structure/section-names.d.ts.map +1 -0
  273. package/dist/structure/section-names.js +26 -0
  274. package/dist/structure/section-names.js.map +1 -0
  275. package/dist/structure/versioned-label.d.ts +16 -0
  276. package/dist/structure/versioned-label.d.ts.map +1 -0
  277. package/dist/structure/versioned-label.js +48 -0
  278. package/dist/structure/versioned-label.js.map +1 -0
  279. package/dist/structure/written-headings.d.ts +31 -0
  280. package/dist/structure/written-headings.d.ts.map +1 -0
  281. package/dist/structure/written-headings.js +119 -0
  282. package/dist/structure/written-headings.js.map +1 -0
  283. package/dist/structure/written-resolve.d.ts +12 -0
  284. package/dist/structure/written-resolve.d.ts.map +1 -0
  285. package/dist/structure/written-resolve.js +49 -0
  286. package/dist/structure/written-resolve.js.map +1 -0
  287. package/package.json +3 -3
  288. package/rules/all-caps-shouting.yaml +2 -2
  289. package/rules/concrete-evidence-density.yaml +2 -2
  290. package/rules/contraction-consistency.yaml +13 -13
  291. package/rules/dangling-reference.yaml +2 -2
  292. package/rules/date-without-year.yaml +2 -2
  293. package/rules/defined-name-repeated.yaml +2 -2
  294. package/rules/fact-conflict.yaml +2 -2
  295. package/rules/heading-end-punctuation-mix.yaml +2 -2
  296. package/rules/heading-numbering-mix.yaml +2 -2
  297. package/rules/latin-spacing.yaml +2 -2
  298. package/rules/max-kanji-continuous.yaml +5 -3
  299. package/rules/max-sentence-length.yaml +3 -2
  300. package/rules/name-variant.yaml +2 -2
  301. package/rules/ngram-repetition.yaml +2 -2
  302. package/rules/numbering-gap.yaml +2 -2
  303. package/rules/orthographic-variant.yaml +2 -2
  304. package/rules/reference-title-mismatch.yaml +2 -2
  305. package/rules/repeated-sentence-ending.yaml +3 -2
  306. package/rules/request-without-deadline.yaml +2 -2
  307. package/rules/requirement-smell.yaml +2 -2
  308. package/rules/sentence-rhythm.yaml +2 -2
  309. package/rules/title-case-consistency.yaml +2 -2
  310. package/rules/unbalanced-bracket.yaml +2 -2
  311. package/rules/undefined-acronym.yaml +11 -2
  312. package/rules/undefined-term.yaml +2 -2
  313. package/rules/unfilled-placeholder.yaml +2 -2
  314. package/rules/vague-word-density.yaml +2 -2
  315. package/src/capitals-passage.ts +31 -0
  316. package/src/coined-hyphen-name.ts +27 -0
  317. package/src/company-names.ts +24 -3
  318. package/src/detectors/acronym-context.ts +5 -6
  319. package/src/detectors/acronym-definition.ts +123 -0
  320. package/src/detectors/acronym-lone.ts +26 -0
  321. package/src/detectors/acronym-name.ts +117 -0
  322. package/src/detectors/capitalised-term.ts +154 -4
  323. package/src/detectors/caps-caption.ts +61 -0
  324. package/src/detectors/char-shape.ts +74 -22
  325. package/src/detectors/clause-shape.ts +14 -4
  326. package/src/detectors/concrete-evidence.ts +77 -1
  327. package/src/detectors/contraction-minority.ts +11 -0
  328. package/src/detectors/counter-edge.ts +23 -0
  329. package/src/detectors/date-any-year.ts +56 -10
  330. package/src/detectors/date-heading-year.ts +55 -0
  331. package/src/detectors/date-year.ts +54 -9
  332. package/src/detectors/defined-term-form.ts +26 -5
  333. package/src/detectors/due-date.ts +10 -1
  334. package/src/detectors/en-shape.ts +5 -1
  335. package/src/detectors/fact-consistency.ts +3 -2
  336. package/src/detectors/gram-passages.ts +36 -0
  337. package/src/detectors/heading-end-mark.ts +23 -10
  338. package/src/detectors/heading-names.ts +31 -0
  339. package/src/detectors/heading-numbering.ts +7 -2
  340. package/src/detectors/inch-mark.ts +49 -0
  341. package/src/detectors/lexicon.ts +32 -21
  342. package/src/detectors/mark-shape.ts +12 -6
  343. package/src/detectors/name-variant-apart.ts +63 -0
  344. package/src/detectors/name-variant.ts +30 -12
  345. package/src/detectors/numeral-word.ts +33 -0
  346. package/src/detectors/organisation-run.ts +86 -0
  347. package/src/detectors/orthographic-variant.ts +22 -6
  348. package/src/detectors/outline-label.ts +48 -0
  349. package/src/detectors/page-marker.ts +26 -0
  350. package/src/detectors/parallel-definition.ts +64 -0
  351. package/src/detectors/reference-text.ts +1 -0
  352. package/src/detectors/registry/unfilled-placeholder.ts +2 -2
  353. package/src/detectors/registry/vague-density.ts +1 -1
  354. package/src/detectors/request-owner.ts +71 -8
  355. package/src/detectors/requirement-smell.ts +15 -2
  356. package/src/detectors/sentence-length.ts +14 -6
  357. package/src/detectors/sentence-rhythm.ts +8 -4
  358. package/src/detectors/series-label.ts +13 -4
  359. package/src/detectors/signals.ts +94 -26
  360. package/src/detectors/structure-tree.ts +10 -8
  361. package/src/detectors/template-sections.ts +37 -0
  362. package/src/detectors/titled-run.ts +43 -0
  363. package/src/detectors/unbalanced-bracket.ts +3 -0
  364. package/src/detectors/undefined-term.ts +8 -0
  365. package/src/detectors/unfilled-placeholder.ts +10 -0
  366. package/src/detectors/vague-density.ts +68 -0
  367. package/src/facts/fact-scope.ts +53 -4
  368. package/src/facts/table-facts.ts +43 -6
  369. package/src/grade-api.ts +38 -16
  370. package/src/heading-numbering.ts +35 -8
  371. package/src/name-end-letter.ts +9 -0
  372. package/src/name-given-before.ts +40 -0
  373. package/src/name-separator.ts +66 -5
  374. package/src/name-variants.ts +21 -11
  375. package/src/name-word-order.ts +62 -17
  376. package/src/nominal-stem.ts +36 -0
  377. package/src/sentence-load.ts +7 -2
  378. package/src/structure/cited-document-section.ts +42 -0
  379. package/src/structure/html-text-blocks.ts +45 -0
  380. package/src/structure/issues.ts +19 -4
  381. package/src/structure/labelled-date-order.ts +5 -2
  382. package/src/structure/labelled-order.ts +12 -3
  383. package/src/structure/list-numbering.ts +100 -11
  384. package/src/structure/listed-paragraph.ts +45 -0
  385. package/src/structure/numbering.ts +48 -19
  386. package/src/structure/reference-text.ts +25 -3
  387. package/src/structure/section-names.ts +32 -0
  388. package/src/structure/versioned-label.ts +52 -0
  389. package/src/structure/written-headings.ts +137 -0
  390. package/src/structure/written-resolve.ts +57 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 行頭の、文字で振った見出しの番号(議事録の Z. の次の AA.、AB. … BZ.)。表計算の列名と同じく A〜Z の次は AA と進む。
3
+ * 略語ではない。行頭で . か ) が続き、その前か後の番号も同じ文書の行頭にあるときだけ番号と読む。1 か所だけの
4
+ * 行頭の大文字(IT. の説明、FAQ) の行)は略語のまま数える。そう読めた番号を区切りの名前の後ろで指す所(See Attachment AA)も
5
+ * 番号。区切りの名前は言語パッケージの語彙表から読む。
6
+ */
7
+ type Span = {
8
+ readonly start: number;
9
+ readonly end: number;
10
+ };
11
+ /** 文書の中の、隣の番号と並んだ文字の番号と、それを区切りの名前の後ろで指す所の範囲。位置は文書の頭からの文字数。 */
12
+ export declare const outlineLabelSpans: (source: string, divisions: readonly string[]) => Span[];
13
+ export {};
14
+ //# sourceMappingURL=outline-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-label.d.ts","sourceRoot":"","sources":["../../src/detectors/outline-label.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,KAAK,IAAI,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAkC7D,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,WAAW,SAAS,MAAM,EAAE,KAAG,IAAI,EAGpF,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { escapeRegExp } from "../orthography.js";
2
+ const LABEL = /^[ \t]*(?<label>[A-Z]{1,3})[.)](?=[ \t]|$)/gmu;
3
+ const ALPHABET = 26;
4
+ const CODE_BEFORE_A = 64;
5
+ /** A=1、Z=26、AA=27、AZ=52、BA=53。 */
6
+ const positionOf = (label) => [...label].reduce((total, letter) => total * ALPHABET + (letter.charCodeAt(0) - CODE_BEFORE_A), 0);
7
+ const labelsOf = (source) => [...source.matchAll(LABEL)].map((match) => {
8
+ const text = match.groups?.["label"] ?? "";
9
+ const start = match.index + match[0].indexOf(text);
10
+ return { text, position: positionOf(text), span: { start, end: start + text.length } };
11
+ });
12
+ const lineLabels = (source) => {
13
+ const labels = labelsOf(source);
14
+ const positions = new Set(labels.map((label) => label.position));
15
+ return labels.filter(({ position }) => positions.has(position - 1) || positions.has(position + 1));
16
+ };
17
+ const referenceSpans = (source, labels, divisions) => {
18
+ const texts = [...new Set(labels.map((label) => label.text))];
19
+ if (texts.length === 0 || divisions.length === 0)
20
+ return [];
21
+ const pattern = new RegExp(String.raw `(?<![A-Za-z0-9_])(?:${divisions.map(escapeRegExp).join("|")})\s+(?<label>${texts.join("|")})(?![A-Za-z0-9_&])`, "gu");
22
+ return [...source.matchAll(pattern)].map((match) => {
23
+ const end = match.index + match[0].length;
24
+ return { start: end - (match.groups?.["label"] ?? "").length, end };
25
+ });
26
+ };
27
+ /** 文書の中の、隣の番号と並んだ文字の番号と、それを区切りの名前の後ろで指す所の範囲。位置は文書の頭からの文字数。 */
28
+ export const outlineLabelSpans = (source, divisions) => {
29
+ const labels = lineLabels(source);
30
+ return [...labels.map((label) => label.span), ...referenceSpans(source, labels, divisions)];
31
+ };
32
+ //# sourceMappingURL=outline-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-label.js","sourceRoot":"","sources":["../../src/detectors/outline-label.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { LengthUnit } from "../plugin.ts";
2
+ /** One pattern for every page marker the lexicon names, or undefined when it names none. */
3
+ export declare const pageMarkerPattern: (templates: readonly string[]) => RegExp | undefined;
4
+ /** How much of a sentence its page markers take up, in the document's unit: their words, or their characters without spaces. */
5
+ export declare const pageMarkerSize: (text: string, pattern: RegExp | undefined, unit: LengthUnit) => number;
6
+ //# sourceMappingURL=page-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-marker.d.ts","sourceRoot":"","sources":["../../src/detectors/page-marker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa/C,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,GAAI,WAAW,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAC+D,CAAC;AAK1I,gIAAgI;AAChI,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS,EAAE,MAAM,UAAU,KAAG,MAG5F,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { escapeRegExp } from "../orthography.js";
2
+ /**
3
+ * Page markers a converted print edition leaves inside a sentence ("( printed page 52044)", "[[Page 52044]]", 「-12-」).
4
+ * They are the page break, not the writer's words. The shapes come from the lexicon: "#" stands for the page number and a
5
+ * space for any run of spaces, none included. A marker touching a digit is part of a number (an address, 1-2-3).
6
+ */
7
+ const NUMBER = "#";
8
+ const TEMPLATE_PARTS = { [NUMBER]: String.raw `\p{Nd}+`, " ": String.raw `\s*` };
9
+ const templatePattern = (template) => [...template].map((char) => TEMPLATE_PARTS[char] ?? escapeRegExp(char)).join("");
10
+ /** One pattern for every page marker the lexicon names, or undefined when it names none. */
11
+ export const pageMarkerPattern = (templates) => templates.length === 0 ? undefined : new RegExp(String.raw `(?<!\p{Nd})(?:${templates.map(templatePattern).join("|")})(?!\p{Nd})`, "gu");
12
+ const sizeOf = (marker, unit) => unit === "word" ? marker.split(/\s+/u).filter((word) => word.length > 0).length : marker.replace(/\s+/gu, "").length;
13
+ /** How much of a sentence its page markers take up, in the document's unit: their words, or their characters without spaces. */
14
+ export const pageMarkerSize = (text, pattern, unit) => {
15
+ if (pattern === undefined)
16
+ return 0;
17
+ return [...text.matchAll(pattern)].map((match) => match[0]).reduce((size, marker) => size + sizeOf(marker, unit), 0);
18
+ };
19
+ //# sourceMappingURL=page-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-marker.js","sourceRoot":"","sources":["../../src/detectors/page-marker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC;AAEnB,MAAM,cAAc,GAAqC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAA,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,KAAK,EAAE,CAAC;AAEjH,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEvI,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAA4B,EAAsB,EAAE,CACpF,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,iBAAiB,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAE1I,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAgB,EAAU,EAAE,CAC1D,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AAEvH,gIAAgI;AAChI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,OAA2B,EAAE,IAAgB,EAAU,EAAE;IACpG,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvH,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Lexicon, Sentence } from "../plugin.ts";
2
+ export type DefinitionWords = {
3
+ readonly frames: ReadonlySet<string>;
4
+ readonly topics: ReadonlySet<string>;
5
+ };
6
+ export declare const definitionWordsOf: (lexicon: Lexicon | undefined) => DefinitionWords;
7
+ /** 定義の文が定義する語と、その型(を指す)。 */
8
+ export type Definition = {
9
+ readonly term: string;
10
+ readonly frame: string;
11
+ };
12
+ /** その文が定義する語と型。型の文(を指す、という)でなければ無い。 */
13
+ export declare const definitionOf: (sentence: Sentence, words: DefinitionWords) => Definition | undefined;
14
+ /** どの文も同じ型の定義で、定義する語がみな違う。 */
15
+ export declare const isParallelDefinition: (sentences: readonly Sentence[], words: DefinitionWords) => boolean;
16
+ //# sourceMappingURL=parallel-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-definition.d.ts","sourceRoot":"","sources":["../../src/detectors/parallel-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAS,MAAM,cAAc,CAAC;AAQ7D,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAK7G,eAAO,MAAM,iBAAiB,GAAI,SAAS,OAAO,GAAG,SAAS,KAAG,eAG/D,CAAC;AAcH,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAU3E,uCAAuC;AACvC,eAAO,MAAM,YAAY,GAAI,UAAU,QAAQ,EAAE,OAAO,eAAe,KAAG,UAAU,GAAG,SAUtF,CAAC;AAIF,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS,QAAQ,EAAE,EAAE,OAAO,eAAe,KAAG,OAM7F,CAAC"}
@@ -0,0 +1,51 @@
1
+ // 並べた定義: どの文も違う語を、同じ型(〜を指します、〜といいます)で定義する。同じ文末が続くのは型をそろえたからで、
2
+ // 書き手の調子の繰り返しではない。
3
+ const TRAILING_POS = new Set(["PUNCT", "SYM"]);
4
+ const TAIL_POS = new Set(["AUX", "PART"]);
5
+ const patternsOf = (lexicon, group) => new Set((lexicon ?? []).filter((entry) => entry.group === group).map((entry) => entry.pattern));
6
+ export const definitionWordsOf = (lexicon) => ({
7
+ frames: patternsOf(lexicon, "frame"),
8
+ topics: patternsOf(lexicon, "topic"),
9
+ });
10
+ const surfacesOf = (tokens) => tokens.map((token) => token.surface).join("");
11
+ /** 述語(文末の助動詞の前の語)の位置。助動詞で終わらない文には無い。 */
12
+ const predicateAt = (tokens) => {
13
+ const last = tokens.findLastIndex((token) => !TRAILING_POS.has(token.pos));
14
+ const head = tokens.slice(0, last + 1).findLastIndex((token) => !TAIL_POS.has(token.pos));
15
+ return head > 0 && head < last ? head : undefined;
16
+ };
17
+ const PARTICLE_POS = "ADP";
18
+ const TERM_POS = new Set(["NOUN", "PROPN"]);
19
+ /** topic の助詞(は)より前。無ければ、述語の前の助詞の直前の名詞(〜を台風といいます の 台風)。 */
20
+ const termOf = (tokens, head, words) => {
21
+ const topic = tokens.slice(0, head - 1).findIndex((token) => token.pos === PARTICLE_POS && words.topics.has(token.surface));
22
+ if (topic > 0)
23
+ return surfacesOf(tokens.slice(0, topic));
24
+ const before = tokens[head - 2];
25
+ return before !== undefined && TERM_POS.has(before.pos) ? before.surface : "";
26
+ };
27
+ /** その文が定義する語と型。型の文(を指す、という)でなければ無い。 */
28
+ export const definitionOf = (sentence, words) => {
29
+ const tokens = (sentence.tokens ?? []).filter((token) => token.surface.trim() !== "");
30
+ const head = predicateAt(tokens);
31
+ const particle = head === undefined ? undefined : tokens[head - 1];
32
+ const predicate = head === undefined ? undefined : tokens[head];
33
+ if (head === undefined || particle === undefined || predicate === undefined)
34
+ return undefined;
35
+ const frame = `${particle.surface}${predicate.lemma ?? predicate.surface}`;
36
+ if (!words.frames.has(frame))
37
+ return undefined;
38
+ const term = termOf(tokens, head, words);
39
+ return term === "" ? undefined : { term, frame };
40
+ };
41
+ const isDefinition = (definition) => definition !== undefined;
42
+ /** どの文も同じ型の定義で、定義する語がみな違う。 */
43
+ export const isParallelDefinition = (sentences, words) => {
44
+ const definitions = sentences.map((sentence) => definitionOf(sentence, words));
45
+ if (!definitions.every(isDefinition))
46
+ return false;
47
+ const terms = new Set(definitions.map((definition) => definition.term));
48
+ const frames = new Set(definitions.map((definition) => definition.frame));
49
+ return terms.size === definitions.length && frames.size === 1;
50
+ };
51
+ //# sourceMappingURL=parallel-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-definition.js","sourceRoot":"","sources":["../../src/detectors/parallel-definition.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reference-text.d.ts","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAuCrE,kCAAkC;AAClC,eAAO,MAAM,sBAAsB,EAAE,QAAkE,CAAC;AAExG,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,EAAE,QAA6D,CAAC"}
1
+ {"version":3,"file":"reference-text.d.ts","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAwCrE,kCAAkC;AAClC,eAAO,MAAM,sBAAsB,EAAE,QAAkE,CAAC;AAExG,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,EAAE,QAA6D,CAAC"}
@@ -15,6 +15,7 @@ const inputOf = (doc) => {
15
15
  asides: patternsOf(doc, "reference-aside"),
16
16
  topicLinks: patternsOf(doc, "reference-topic-link"),
17
17
  vagueTopics: patternsOf(doc, "reference-topic-vague"),
18
+ listJoints: patternsOf(doc, "reference-list-joint"),
18
19
  },
19
20
  };
20
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExH,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAC,GAAkB,EAA8B,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACrH,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QAC7C,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1C,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;SACtD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,QAAqD,EAAY,EAAE,CAClF,CAAC,GAAG,EAAa,EAAE;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SAClD,CAAC,CAAC,CAAC;AACV,CAAC,CAAC;AAEJ,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAa,UAAU,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;AAExG,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAa,UAAU,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExH,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAC,GAAkB,EAA8B,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACrH,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QAC7C,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1C,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;YACrD,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;SACpD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,QAAqD,EAAY,EAAE,CAClF,CAAC,GAAG,EAAa,EAAE;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SAClD,CAAC,CAAC,CAAC;AACV,CAAC,CAAC;AAEJ,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAa,UAAU,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;AAExG,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAa,UAAU,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unfilled-placeholder.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAA8B,CAAC"}
1
+ {"version":3,"file":"unfilled-placeholder.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAA8C,CAAC"}
@@ -1,3 +1,3 @@
1
- import { unfilledPlaceholder } from "../ai-phrasing.js";
2
- export const detector = unfilledPlaceholder;
1
+ import { unfilledPlaceholderOutsideTemplates } from "../unfilled-placeholder.js";
2
+ export const detector = unfilledPlaceholderOutsideTemplates;
3
3
  //# sourceMappingURL=unfilled-placeholder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unfilled-placeholder.js","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAa,mBAAmB,CAAC"}
1
+ {"version":3,"file":"unfilled-placeholder.js","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,CAAC,MAAM,QAAQ,GAAa,mCAAmC,CAAC"}
@@ -1,3 +1,3 @@
1
- import { vagueDensity } from "../lexicon.js";
1
+ import { vagueDensity } from "../vague-density.js";
2
2
  export const detector = vagueDensity;
3
3
  //# sourceMappingURL=vague-density.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vague-density.js","sourceRoot":"","sources":["../../../src/detectors/registry/vague-density.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAa,YAAY,CAAC"}
1
+ {"version":3,"file":"vague-density.js","sourceRoot":"","sources":["../../../src/detectors/registry/vague-density.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,QAAQ,GAAa,YAAY,CAAC"}
@@ -8,17 +8,21 @@ export declare const REQUEST_LEXICONS: {
8
8
  readonly owner: "request-owner";
9
9
  readonly pointer: "request-pointer";
10
10
  readonly offer: "request-offer";
11
+ readonly timing: "request-timing";
12
+ readonly invitation: "request-invitation";
13
+ readonly contact: "request-contact";
11
14
  };
12
15
  type Words = Readonly<Record<keyof typeof REQUEST_LEXICONS, readonly string[]>>;
13
16
  export declare const containsAny: (text: string, patterns: readonly string[]) => boolean;
14
17
  /**
15
18
  * A request for an action: an action word next to a request ending (「確認してください」「please send」), not a condition
16
19
  * (「ご不明な点があれば…ください」 is an offer), not an open offer to take the reader's questions (「ご質問はメールでお送りください」),
17
- * and not a pointer to where to read more (「詳細は資料をご確認ください」).
20
+ * not a pointer to where to read more (「詳細は資料をご確認ください」), not what an invitation is for (「登録をしにお越しください」),
21
+ * and not the way to reach the writer on a contact line (「ファックス番号:… 送信後、ご連絡ください」).
18
22
  * The action has to be close to the ending, or a noun like 検討会 or 履修登録 earlier in the sentence would make one.
19
23
  */
20
24
  export declare const isRequest: (text: string, words: Words) => boolean;
21
- /** The request sentences with neither a deadline nor a person in them or in the sentence after, in the same paragraph or item. */
25
+ /** The request sentences with neither a deadline nor a person in them, in the sentence after (same paragraph or item), or in a heading above. */
22
26
  export declare const ownerlessRequests: (doc: ProseDocument) => Sentence[];
23
27
  export declare const requestWithoutDeadline: Detector;
24
28
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"request-owner.d.ts","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,aAAa,EAAE,QAAQ,EAAuB,MAAM,cAAc,CAAC;AAM7G,oFAAoF;AACpF,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AAEX,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,OAAO,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAoChF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,SAAS,MAAM,EAAE,KAAG,OAA8C,CAAC;AAIvH;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,KAAK,KAAG,OAItD,CAAC;AAuDF,kIAAkI;AAClI,eAAO,MAAM,iBAAiB,GAAI,KAAK,aAAa,KAAG,QAAQ,EAQ9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAQhC,CAAC"}
1
+ {"version":3,"file":"request-owner.d.ts","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,aAAa,EAAW,QAAQ,EAAuB,MAAM,cAAc,CAAC;AAMtH,oFAAoF;AACpF,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAWnB,CAAC;AAEX,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,OAAO,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAuChF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,SAAS,MAAM,EAAE,KAAG,OAA8C,CAAC;AAwBvH;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,KAAK,KAAG,OAUtD,CAAC;AAoFF,iJAAiJ;AACjJ,eAAO,MAAM,iBAAiB,GAAI,KAAK,aAAa,KAAG,QAAQ,EAS9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAQhC,CAAC"}
@@ -11,6 +11,9 @@ export const REQUEST_LEXICONS = {
11
11
  owner: "request-owner",
12
12
  pointer: "request-pointer",
13
13
  offer: "request-offer",
14
+ timing: "request-timing",
15
+ invitation: "request-invitation",
16
+ contact: "request-contact",
14
17
  };
15
18
  /** A clock time (14:00, 14時, 2pm) says when as much as a date does; a duration (3時間) does not. */
16
19
  const CLOCK = /\d{1,2}\s*(?:[::]\d{2}|時(?!間)|\s?[ap]\.?m\.?(?![a-z]))/iu;
@@ -23,6 +26,9 @@ const wordsOf = (doc) => ({
23
26
  owner: patternsOf(doc.lexicons[REQUEST_LEXICONS.owner]),
24
27
  pointer: patternsOf(doc.lexicons[REQUEST_LEXICONS.pointer]),
25
28
  offer: patternsOf(doc.lexicons[REQUEST_LEXICONS.offer]),
29
+ timing: patternsOf(doc.lexicons[REQUEST_LEXICONS.timing]),
30
+ invitation: patternsOf(doc.lexicons[REQUEST_LEXICONS.invitation]),
31
+ contact: patternsOf(doc.lexicons[REQUEST_LEXICONS.contact]),
26
32
  });
27
33
  /** How far apart, in characters, the action word and the request ending may be: the action must be what is requested. */
28
34
  const ACTION_REACH = 12;
@@ -39,16 +45,36 @@ const placesOf = (text, patterns) => {
39
45
  };
40
46
  export const containsAny = (text, patterns) => placesOf(text, patterns).length > 0;
41
47
  const gapBetween = (left, right) => Math.max(left.start - right.end, right.start - left.end, 0);
48
+ /** An invitation verb right at the request ending (「ご相談ください」 "please come"): the reader may come, nothing is to be finished. */
49
+ const INVITATION_REACH = 1;
50
+ /** A comma or semicolon between an action and the invitation: the action is a request of its own (「申請書を提出し、会場へお越しください」). */
51
+ const CLAUSE_BREAK = /[、,,;;]/u;
52
+ /** A label and a colon (「電話:」 "Fax:"): a contact line, whose request is how to reach the writer. */
53
+ const LABEL_COLON = /^\s*[::]/u;
54
+ /** Whether the action is what the invitation is for (「登録をしにお越しください」「入力用にご使用ください」), not a request beside it. */
55
+ const invitedTo = (comparable, action, invitation) => {
56
+ const [left, right] = action.start <= invitation.start ? [action, invitation] : [invitation, action];
57
+ return !CLAUSE_BREAK.test(comparable.slice(left.end, right.start));
58
+ };
59
+ const holdsContactLine = (text, words) => {
60
+ const comparable = comparableWords(text);
61
+ return placesOf(comparable, words.contact).some((label) => LABEL_COLON.test(comparable.slice(label.end)));
62
+ };
42
63
  /**
43
64
  * A request for an action: an action word next to a request ending (「確認してください」「please send」), not a condition
44
65
  * (「ご不明な点があれば…ください」 is an offer), not an open offer to take the reader's questions (「ご質問はメールでお送りください」),
45
- * and not a pointer to where to read more (「詳細は資料をご確認ください」).
66
+ * not a pointer to where to read more (「詳細は資料をご確認ください」), not what an invitation is for (「登録をしにお越しください」),
67
+ * and not the way to reach the writer on a contact line (「ファックス番号:… 送信後、ご連絡ください」).
46
68
  * The action has to be close to the ending, or a noun like 検討会 or 履修登録 earlier in the sentence would make one.
47
69
  */
48
70
  export const isRequest = (text, words) => {
71
+ const comparable = comparableWords(text);
49
72
  const endings = placesOf(text, words.ending);
50
- const asked = placesOf(text, words.action).some((action) => endings.some((ending) => gapBetween(action, ending) <= ACTION_REACH));
51
- return asked && ![words.condition, words.offer, words.pointer].some((patterns) => containsAny(text, patterns));
73
+ const invitations = placesOf(text, words.invitation).filter((invitation) => endings.some((ending) => gapBetween(invitation, ending) <= INVITATION_REACH));
74
+ const asked = placesOf(text, words.action).some((action) => endings.some((ending) => gapBetween(action, ending) <= ACTION_REACH) && !invitations.some((invitation) => invitedTo(comparable, action, invitation)));
75
+ if (!asked || holdsContactLine(text, words))
76
+ return false;
77
+ return ![words.condition, words.offer, words.pointer].some((patterns) => containsAny(text, patterns));
52
78
  };
53
79
  const NAMED = new Set(["PROPN"]);
54
80
  /** A proper noun in the request itself (「Ito, please share」) names who; one in the next sentence may be a product or a place. */
@@ -81,17 +107,39 @@ const holdsWord = (sentence, patterns) => {
81
107
  const bounds = wordBounds(comparable, sentence);
82
108
  return placesOf(comparable, patterns).some((place) => bounds === undefined || (bounds.starts.has(place.start) && bounds.ends.has(place.end)));
83
109
  };
84
- /** Whether a sentence says when (a date, a clock time, a deadline word) or who (a role; a name in the request itself). */
110
+ /**
111
+ * Whether a sentence says when or who (a role). The request itself may also say when relative to something else
112
+ * (「提出いただく前に」 "before you submit") or name the person; the next sentence's timing or name may be about something else.
113
+ */
85
114
  const saysWhenOrWho = (sentence, words, dates, isRequestItself) => datedWithin(dates, sentence.span) ||
86
115
  CLOCK.test(proseText(sentence)) ||
87
116
  holdsWord(sentence, words.deadline) ||
88
117
  holdsWord(sentence, words.owner) ||
89
- (isRequestItself && namesSomeone(sentence));
118
+ (isRequestItself && (holdsWord(sentence, words.timing) || namesSomeone(sentence)));
90
119
  /** A paragraph break or a new list item between two sentences: the second does not continue the first. */
91
120
  const BREAK = /\n[^\S\n]*\n|\n[^\S\n]*(?:[-*+]|\d+[.)])[^\S\n]/u;
92
121
  const continues = (source, sentence, next) => next !== undefined && !BREAK.test(source.slice(sentence.span.end, next.span.start));
93
122
  const dateSpans = (tree) => tree === undefined ? [] : inDocumentOrder(tree).flatMap((node) => (node.kind === "date" ? [node.span] : []));
94
- /** The request sentences with neither a deadline nor a person in them or in the sentence after, in the same paragraph or item. */
123
+ /** A section's heading, read as a sentence so the deadline words match it the same way. */
124
+ const headingOf = (section) => ({
125
+ span: section.span,
126
+ text: section.heading,
127
+ ...(section.headingTokens === undefined ? {} : { tokens: section.headingTokens }),
128
+ });
129
+ /** The headings an offset sits under: its own section's, then each enclosing one's up to the title. */
130
+ const enclosingHeadings = (sections, offset) => {
131
+ const own = sections.findLastIndex((section) => section.span.start <= offset);
132
+ const chain = sections
133
+ .slice(0, own + 1)
134
+ .reduceRight((walk, section) => (section.depth < walk.depth ? { depth: section.depth, found: [...walk.found, section] } : walk), { depth: Number.POSITIVE_INFINITY, found: [] }).found;
135
+ return chain.filter((section) => section.depth > 0 && section.heading.trim() !== "").map(headingOf);
136
+ };
137
+ /**
138
+ * A notice whose heading names its deadline (「見積提出期限:10月26日」「【随時受付】」): every request under it inherits it.
139
+ * A date alone in a heading is more often the day the notice was issued or the event it announces, so it is not enough.
140
+ */
141
+ const underDeadlineHeading = (sections, sentence, words) => enclosingHeadings(sections, sentence.span.start).some((heading) => holdsWord(heading, words.deadline));
142
+ /** The request sentences with neither a deadline nor a person in them, in the sentence after (same paragraph or item), or in a heading above. */
95
143
  export const ownerlessRequests = (doc) => {
96
144
  const words = wordsOf(doc);
97
145
  const dates = dateSpans(doc.structure);
@@ -99,7 +147,9 @@ export const ownerlessRequests = (doc) => {
99
147
  if (!isRequest(proseText(sentence), words) || saysWhenOrWho(sentence, words, dates, true))
100
148
  return false;
101
149
  const next = doc.sentences[index + 1];
102
- return !continues(doc.source, sentence, next) || !saysWhenOrWho(next, words, dates, false);
150
+ if (continues(doc.source, sentence, next) && saysWhenOrWho(next, words, dates, false))
151
+ return false;
152
+ return !underDeadlineHeading(doc.sections, sentence, words);
103
153
  });
104
154
  };
105
155
  export const requestWithoutDeadline = (doc) => ownerlessRequests(doc).map((sentence) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"request-owner.js","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-owner.js","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-smell.d.ts","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAW,OAAO,EAA+B,QAAQ,EAAE,MAAM,cAAc,CAAC;AA0BtG,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,EAAE,SAAS,OAAO,EAAE,YAAY,OAAO,KAAG,OACwB,CAAC;AAoCnH,eAAO,MAAM,gBAAgB,EAAE,QAQ9B,CAAC"}
1
+ {"version":3,"file":"requirement-smell.d.ts","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAW,OAAO,EAA+B,QAAQ,EAAE,MAAM,cAAc,CAAC;AA8BtG,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,EAAE,SAAS,OAAO,EAAE,YAAY,OAAO,KAAG,OACwB,CAAC;AA6CnH,eAAO,MAAM,gBAAgB,EAAE,QAQ9B,CAAC"}
@@ -1,12 +1,16 @@
1
1
  import { entryCloses, entryIn, entryRanges } from "./lexicon-match.js";
2
2
  import { openEndAt, openEndNames } from "./open-end-names.js";
3
+ import { statesConcrete } from "./vague-deadline.js";
3
4
  // Requirements smells (Femmer et al. 2017; Berry et al. 2003; ISO/IEC/IEEE 29148): a loophole, an open-ended list and
4
5
  // "and/or", in a sentence that states a requirement. What makes a sentence a requirement, and each smell's words, come
5
6
  // from the language's lexicons; this file knows neither language.
6
7
  const OPEN_END = "requirement-open-end";
8
+ const LOOPHOLE = "requirement-loophole";
9
+ const TIME = "time";
10
+ const CONCRETE_DEADLINE = "concrete-deadline";
7
11
  /** Each smell: the lexicon of its words, and the finding's variant (the rule's messages). */
8
12
  const SMELLS = [
9
- { lexicon: "requirement-loophole", variant: "loophole" },
13
+ { lexicon: LOOPHOLE, variant: "loophole" },
10
14
  { lexicon: OPEN_END, variant: "open-end" },
11
15
  { lexicon: "requirement-either", variant: "either" },
12
16
  ];
@@ -32,9 +36,13 @@ const findingOf = (sentence, entry, variant, offset) => ({
32
36
  variant,
33
37
  values: { matched: entry.pattern, offset },
34
38
  });
39
+ /** A loophole about when (group: time) that the sentence bounds with a stated limit ("as soon as possible, but no later than two days after"). */
40
+ const boundedInTime = (doc, sentence, entry, lexicon) => lexicon === LOOPHOLE &&
41
+ entry.group === TIME &&
42
+ statesConcrete({ start: sentence.span.start, text: sentence.text }, (doc.lexicons[CONCRETE_DEADLINE] ?? []).map((limit) => limit.pattern));
35
43
  /** Where the word stands as a smell. An open-end word inside a name the document gives (業務執行取締役等) is none; without tokens it cannot be told apart. */
36
44
  const smellAt = (doc, sentence, entry, lexicon, names) => {
37
- if (!entryIn(sentence, entry))
45
+ if (!entryIn(sentence, entry) || boundedInTime(doc, sentence, entry, lexicon))
38
46
  return undefined;
39
47
  const tokenized = sentence.tokens !== undefined && (entry.tokens?.length ?? 0) > 0;
40
48
  return lexicon === OPEN_END && tokenized ? openEndAt(doc, sentence, entry, names()) : offsetOf(sentence, entry);
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-smell.js","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirement-smell.js","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-length.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAkD,MAAM,cAAc,CAAC;AAY7F,eAAO,MAAM,cAAc,EAAE,QAYtB,CAAC"}
1
+ {"version":3,"file":"sentence-length.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAkD,MAAM,cAAc,CAAC;AAkB7F,eAAO,MAAM,cAAc,EAAE,QAc5B,CAAC"}
@@ -1,22 +1,30 @@
1
1
  import { lengthOf, proseText } from "../measure.js";
2
- /** 文書と違う言語の文(和文の中の英文)は、その言語の単位と上限で測る。rule がその言語の段を持たなければ文書のもので。 */
3
- const measureOf = (sentence, unit, options) => {
2
+ import { pageMarkerPattern, pageMarkerSize } from "./page-marker.js";
3
+ /**
4
+ * 文書と違う言語の文(和文の中の英文)は、その言語の単位と上限で測る。rule がその言語の段を持たなければ文書のもので。
5
+ * 印刷版のページの印(( printed page 52044))は文の言葉ではないので数えない。
6
+ */
7
+ const measureOf = (sentence, unit, options, markers) => {
4
8
  const embedded = sentence.embeddedLanguage;
5
9
  const limit = embedded === undefined ? undefined : options.embeddedLimits?.[embedded.id];
6
- if (embedded === undefined || limit === undefined)
7
- return { size: lengthOf(sentence, unit), limit: options.limit };
10
+ if (embedded === undefined || limit === undefined) {
11
+ return { size: lengthOf(sentence, unit) - pageMarkerSize(proseText(sentence), markers, unit), limit: options.limit };
12
+ }
8
13
  return { size: lengthOf(sentence, embedded.lengthUnit), limit, variant: `embedded-${embedded.id}` };
9
14
  };
10
- export const sentenceLength = (doc, options) => doc.sentences
11
- .map((sentence) => ({ sentence, measure: measureOf(sentence, doc.lengthUnit, options) }))
12
- .filter(({ measure }) => measure.size > measure.limit)
13
- .map(({ sentence, measure }) => ({
14
- rule: "max-sentence-length",
15
- severity: "warning",
16
- line: 0,
17
- column: 0,
18
- quote: proseText(sentence),
19
- values: { count: measure.size, limit: measure.limit, offset: sentence.span.start },
20
- ...(measure.variant === undefined ? {} : { variant: measure.variant }),
21
- }));
15
+ export const sentenceLength = (doc, options) => {
16
+ const markers = pageMarkerPattern((options.lexicon ?? []).map((entry) => entry.pattern));
17
+ return doc.sentences
18
+ .map((sentence) => ({ sentence, measure: measureOf(sentence, doc.lengthUnit, options, markers) }))
19
+ .filter(({ measure }) => measure.size > measure.limit)
20
+ .map(({ sentence, measure }) => ({
21
+ rule: "max-sentence-length",
22
+ severity: "warning",
23
+ line: 0,
24
+ column: 0,
25
+ quote: proseText(sentence),
26
+ values: { count: measure.size, limit: measure.limit, offset: sentence.span.start },
27
+ ...(measure.variant === undefined ? {} : { variant: measure.variant }),
28
+ }));
29
+ };
22
30
  //# sourceMappingURL=sentence-length.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-length.js","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAKpD,mEAAmE;AACnE,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,IAAgB,EAAE,OAAwB,EAAW,EAAE;IAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACnH,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE,CAClE,GAAG,CAAC,SAAS;KACV,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;KACxF,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;KACrD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC;IAC1B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;IAClF,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;CACvE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"sentence-length.js","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIrE;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,IAAgB,EAAE,OAAwB,EAAE,OAA2B,EAAW,EAAE;IACzH,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACvH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACzF,OAAO,GAAG,CAAC,SAAS;SACjB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;SACjG,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;SACrD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;QAClF,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACvE,CAAC,CAAC,CAAC;AACR,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-rhythm.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,cAAc,CAAC;AAYtD,eAAO,MAAM,cAAc,EAAE,QAe5B,CAAC"}
1
+ {"version":3,"file":"sentence-rhythm.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAe/E,eAAO,MAAM,cAAc,EAAE,QAgB5B,CAAC"}
@@ -8,8 +8,11 @@ const coefficientOfVariation = (sizes) => {
8
8
  const variance = sizes.reduce((sum, size) => sum + (size - mean) ** 2, 0) / sizes.length;
9
9
  return Math.sqrt(variance) / mean;
10
10
  };
11
+ /** 箇条書きの項目は揃えて書くのが正しい形なので、地の文の文だけを測る。 */
12
+ const proseSentences = (doc) => doc.paragraphs.flatMap((paragraph) => paragraph.sentences);
11
13
  export const sentenceRhythm = (doc, options) => {
12
- const sizes = doc.sentences.map((sentence) => charLength(sentence));
14
+ const sentences = proseSentences(doc);
15
+ const sizes = sentences.map((sentence) => charLength(sentence));
13
16
  if (sizes.length < MIN_SENTENCES)
14
17
  return [];
15
18
  const spread = Math.round(coefficientOfVariation(sizes) * 100);
@@ -21,8 +24,8 @@ export const sentenceRhythm = (doc, options) => {
21
24
  severity: "warning",
22
25
  line: 0,
23
26
  column: 0,
24
- quote: doc.sentences[0] === undefined ? "" : proseText(doc.sentences[0]),
25
- values: { count: spread, limit: options.limit, offset: doc.sentences[0]?.span.start ?? 0 },
27
+ quote: sentences[0] === undefined ? "" : proseText(sentences[0]),
28
+ values: { count: spread, limit: options.limit, offset: sentences[0]?.span.start ?? 0 },
26
29
  },
27
30
  ];
28
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-rhythm.js","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGtD,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,sBAAsB,GAAG,CAAC,KAAwB,EAAU,EAAE;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO;QACL;YACE,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;SAC3F;KACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"sentence-rhythm.js","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGtD,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,sBAAsB,GAAG,CAAC,KAAwB,EAAU,EAAE;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC,CAAC;AAEF,yCAAyC;AACzC,MAAM,cAAc,GAAG,CAAC,GAAkB,EAAuB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE/H,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO;QACL;YACE,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;SACvF;KACF,CAAC;AACJ,CAAC,CAAC"}