chaffjs 0.17.0 → 0.18.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 (840) hide show
  1. package/dist/announced-count.d.ts +26 -0
  2. package/dist/announced-count.d.ts.map +1 -0
  3. package/dist/announced-count.js +104 -0
  4. package/dist/announced-count.js.map +1 -0
  5. package/dist/bare-url.d.ts +14 -0
  6. package/dist/bare-url.d.ts.map +1 -0
  7. package/dist/bare-url.js +28 -0
  8. package/dist/bare-url.js.map +1 -0
  9. package/dist/baseline.d.ts +5 -0
  10. package/dist/baseline.d.ts.map +1 -1
  11. package/dist/baseline.js +16 -1
  12. package/dist/baseline.js.map +1 -1
  13. package/dist/body-section.d.ts +7 -0
  14. package/dist/body-section.d.ts.map +1 -0
  15. package/dist/body-section.js +6 -0
  16. package/dist/body-section.js.map +1 -0
  17. package/dist/calendar-number.d.ts +2 -0
  18. package/dist/calendar-number.d.ts.map +1 -1
  19. package/dist/calendar-number.js +9 -2
  20. package/dist/calendar-number.js.map +1 -1
  21. package/dist/cli-args.d.ts +4 -0
  22. package/dist/cli-args.d.ts.map +1 -1
  23. package/dist/cli-args.js +5 -0
  24. package/dist/cli-args.js.map +1 -1
  25. package/dist/cli-text.d.ts.map +1 -1
  26. package/dist/cli-text.js +8 -4
  27. package/dist/cli-text.js.map +1 -1
  28. package/dist/cli.js +33 -30
  29. package/dist/cli.js.map +1 -1
  30. package/dist/commands/compare.d.ts +8 -0
  31. package/dist/commands/compare.d.ts.map +1 -0
  32. package/dist/commands/compare.js +72 -0
  33. package/dist/commands/compare.js.map +1 -0
  34. package/dist/commands/eval.d.ts.map +1 -1
  35. package/dist/commands/eval.js +17 -9
  36. package/dist/commands/eval.js.map +1 -1
  37. package/dist/commands/feedback.d.ts +5 -2
  38. package/dist/commands/feedback.d.ts.map +1 -1
  39. package/dist/commands/feedback.js +11 -5
  40. package/dist/commands/feedback.js.map +1 -1
  41. package/dist/commands/test.d.ts.map +1 -1
  42. package/dist/commands/test.js +2 -4
  43. package/dist/commands/test.js.map +1 -1
  44. package/dist/commands/tree.d.ts +13 -0
  45. package/dist/commands/tree.d.ts.map +1 -1
  46. package/dist/commands/tree.js +35 -5
  47. package/dist/commands/tree.js.map +1 -1
  48. package/dist/compare/atom.d.ts +31 -0
  49. package/dist/compare/atom.d.ts.map +1 -0
  50. package/dist/compare/atom.js +4 -0
  51. package/dist/compare/atom.js.map +1 -0
  52. package/dist/compare/clock-time.d.ts +8 -0
  53. package/dist/compare/clock-time.d.ts.map +1 -0
  54. package/dist/compare/clock-time.js +65 -0
  55. package/dist/compare/clock-time.js.map +1 -0
  56. package/dist/compare/extract.d.ts +15 -0
  57. package/dist/compare/extract.d.ts.map +1 -0
  58. package/dist/compare/extract.js +58 -0
  59. package/dist/compare/extract.js.map +1 -0
  60. package/dist/compare/fact-text.d.ts +23 -0
  61. package/dist/compare/fact-text.d.ts.map +1 -0
  62. package/dist/compare/fact-text.js +47 -0
  63. package/dist/compare/fact-text.js.map +1 -0
  64. package/dist/compare/markup-atoms.d.ts +11 -0
  65. package/dist/compare/markup-atoms.d.ts.map +1 -0
  66. package/dist/compare/markup-atoms.js +23 -0
  67. package/dist/compare/markup-atoms.js.map +1 -0
  68. package/dist/compare/match.d.ts +19 -0
  69. package/dist/compare/match.d.ts.map +1 -0
  70. package/dist/compare/match.js +84 -0
  71. package/dist/compare/match.js.map +1 -0
  72. package/dist/compare/outcome.d.ts +33 -0
  73. package/dist/compare/outcome.d.ts.map +1 -0
  74. package/dist/compare/outcome.js +40 -0
  75. package/dist/compare/outcome.js.map +1 -0
  76. package/dist/compare/proper-nouns.d.ts +19 -0
  77. package/dist/compare/proper-nouns.d.ts.map +1 -0
  78. package/dist/compare/proper-nouns.js +44 -0
  79. package/dist/compare/proper-nouns.js.map +1 -0
  80. package/dist/compare/render.d.ts +9 -0
  81. package/dist/compare/render.d.ts.map +1 -0
  82. package/dist/compare/render.js +64 -0
  83. package/dist/compare/render.js.map +1 -0
  84. package/dist/compare/spans.d.ts +9 -0
  85. package/dist/compare/spans.d.ts.map +1 -0
  86. package/dist/compare/spans.js +11 -0
  87. package/dist/compare/spans.js.map +1 -0
  88. package/dist/compare/text-atoms.d.ts +24 -0
  89. package/dist/compare/text-atoms.d.ts.map +1 -0
  90. package/dist/compare/text-atoms.js +67 -0
  91. package/dist/compare/text-atoms.js.map +1 -0
  92. package/dist/compare/text.d.ts +24 -0
  93. package/dist/compare/text.d.ts.map +1 -0
  94. package/dist/compare/text.js +90 -0
  95. package/dist/compare/text.js.map +1 -0
  96. package/dist/compare/tree-atoms.d.ts +20 -0
  97. package/dist/compare/tree-atoms.d.ts.map +1 -0
  98. package/dist/compare/tree-atoms.js +58 -0
  99. package/dist/compare/tree-atoms.js.map +1 -0
  100. package/dist/compare/written-names.d.ts +8 -0
  101. package/dist/compare/written-names.d.ts.map +1 -0
  102. package/dist/compare/written-names.js +24 -0
  103. package/dist/compare/written-names.js.map +1 -0
  104. package/dist/config/load.d.ts +15 -0
  105. package/dist/config/load.d.ts.map +1 -1
  106. package/dist/config/load.js +5 -0
  107. package/dist/config/load.js.map +1 -1
  108. package/dist/config/option-problems.d.ts +16 -0
  109. package/dist/config/option-problems.d.ts.map +1 -0
  110. package/dist/config/option-problems.js +58 -0
  111. package/dist/config/option-problems.js.map +1 -0
  112. package/dist/config/read.d.ts +4 -0
  113. package/dist/config/read.d.ts.map +1 -0
  114. package/dist/config/read.js +8 -0
  115. package/dist/config/read.js.map +1 -0
  116. package/dist/config/rule-problems.d.ts +2 -4
  117. package/dist/config/rule-problems.d.ts.map +1 -1
  118. package/dist/config/rule-problems.js +7 -1
  119. package/dist/config/rule-problems.js.map +1 -1
  120. package/dist/config/style.d.ts +16 -0
  121. package/dist/config/style.d.ts.map +1 -0
  122. package/dist/config/style.js +36 -0
  123. package/dist/config/style.js.map +1 -0
  124. package/dist/config/warnings.d.ts +6 -0
  125. package/dist/config/warnings.d.ts.map +1 -0
  126. package/dist/config/warnings.js +10 -0
  127. package/dist/config/warnings.js.map +1 -0
  128. package/dist/config/write.d.ts.map +1 -1
  129. package/dist/config/write.js +17 -4
  130. package/dist/config/write.js.map +1 -1
  131. package/dist/custom/bounded-match.d.ts +15 -0
  132. package/dist/custom/bounded-match.d.ts.map +1 -0
  133. package/dist/custom/bounded-match.js +43 -0
  134. package/dist/custom/bounded-match.js.map +1 -0
  135. package/dist/custom/load.d.ts +8 -0
  136. package/dist/custom/load.d.ts.map +1 -0
  137. package/dist/custom/load.js +11 -0
  138. package/dist/custom/load.js.map +1 -0
  139. package/dist/custom/parse.d.ts +70 -0
  140. package/dist/custom/parse.d.ts.map +1 -0
  141. package/dist/custom/parse.js +215 -0
  142. package/dist/custom/parse.js.map +1 -0
  143. package/dist/custom/problems.d.ts +5 -0
  144. package/dist/custom/problems.d.ts.map +1 -0
  145. package/dist/custom/problems.js +78 -0
  146. package/dist/custom/problems.js.map +1 -0
  147. package/dist/custom/regex-safety.d.ts +11 -0
  148. package/dist/custom/regex-safety.d.ts.map +1 -0
  149. package/dist/custom/regex-safety.js +110 -0
  150. package/dist/custom/regex-safety.js.map +1 -0
  151. package/dist/custom/token-pattern.d.ts +8 -0
  152. package/dist/custom/token-pattern.d.ts.map +1 -0
  153. package/dist/custom/token-pattern.js +75 -0
  154. package/dist/custom/token-pattern.js.map +1 -0
  155. package/dist/detect.d.ts.map +1 -1
  156. package/dist/detect.js +24 -2
  157. package/dist/detect.js.map +1 -1
  158. package/dist/detectors/acronym-context.d.ts +2 -0
  159. package/dist/detectors/acronym-context.d.ts.map +1 -1
  160. package/dist/detectors/acronym-context.js +12 -4
  161. package/dist/detectors/acronym-context.js.map +1 -1
  162. package/dist/detectors/ai-phrasing.d.ts +20 -0
  163. package/dist/detectors/ai-phrasing.d.ts.map +1 -0
  164. package/dist/detectors/ai-phrasing.js +112 -0
  165. package/dist/detectors/ai-phrasing.js.map +1 -0
  166. package/dist/detectors/announced-count.d.ts +4 -0
  167. package/dist/detectors/announced-count.d.ts.map +1 -0
  168. package/dist/detectors/announced-count.js +20 -0
  169. package/dist/detectors/announced-count.js.map +1 -0
  170. package/dist/detectors/broken-link.d.ts +17 -0
  171. package/dist/detectors/broken-link.d.ts.map +1 -0
  172. package/dist/detectors/broken-link.js +66 -0
  173. package/dist/detectors/broken-link.js.map +1 -0
  174. package/dist/detectors/cited-name.d.ts.map +1 -1
  175. package/dist/detectors/cited-name.js +4 -4
  176. package/dist/detectors/cited-name.js.map +1 -1
  177. package/dist/detectors/cited-title.d.ts +11 -0
  178. package/dist/detectors/cited-title.d.ts.map +1 -0
  179. package/dist/detectors/cited-title.js +75 -0
  180. package/dist/detectors/cited-title.js.map +1 -0
  181. package/dist/detectors/concrete-evidence.d.ts +1 -1
  182. package/dist/detectors/concrete-evidence.d.ts.map +1 -1
  183. package/dist/detectors/concrete-evidence.js +2 -1
  184. package/dist/detectors/concrete-evidence.js.map +1 -1
  185. package/dist/detectors/contrast-frame.d.ts +17 -0
  186. package/dist/detectors/contrast-frame.d.ts.map +1 -0
  187. package/dist/detectors/contrast-frame.js +32 -0
  188. package/dist/detectors/contrast-frame.js.map +1 -0
  189. package/dist/detectors/custom.d.ts +8 -0
  190. package/dist/detectors/custom.d.ts.map +1 -0
  191. package/dist/detectors/custom.js +71 -0
  192. package/dist/detectors/custom.js.map +1 -0
  193. package/dist/detectors/dangling-figure.d.ts +4 -0
  194. package/dist/detectors/dangling-figure.d.ts.map +1 -0
  195. package/dist/detectors/dangling-figure.js +18 -0
  196. package/dist/detectors/dangling-figure.js.map +1 -0
  197. package/dist/detectors/doubled-punctuation.d.ts +9 -0
  198. package/dist/detectors/doubled-punctuation.d.ts.map +1 -0
  199. package/dist/detectors/doubled-punctuation.js +33 -0
  200. package/dist/detectors/doubled-punctuation.js.map +1 -0
  201. package/dist/detectors/doubled-word.d.ts +5 -0
  202. package/dist/detectors/doubled-word.d.ts.map +1 -1
  203. package/dist/detectors/doubled-word.js +24 -11
  204. package/dist/detectors/doubled-word.js.map +1 -1
  205. package/dist/detectors/enumerated-runs.d.ts +1 -1
  206. package/dist/detectors/enumerated-runs.d.ts.map +1 -1
  207. package/dist/detectors/enumerated-runs.js +15 -4
  208. package/dist/detectors/enumerated-runs.js.map +1 -1
  209. package/dist/detectors/gram-furniture.d.ts +6 -0
  210. package/dist/detectors/gram-furniture.d.ts.map +1 -0
  211. package/dist/detectors/gram-furniture.js +21 -0
  212. package/dist/detectors/gram-furniture.js.map +1 -0
  213. package/dist/detectors/gram-place.d.ts +2 -0
  214. package/dist/detectors/gram-place.d.ts.map +1 -1
  215. package/dist/detectors/gram-place.js +9 -7
  216. package/dist/detectors/gram-place.js.map +1 -1
  217. package/dist/detectors/gram-windows.d.ts +9 -0
  218. package/dist/detectors/gram-windows.d.ts.map +1 -0
  219. package/dist/detectors/gram-windows.js +27 -0
  220. package/dist/detectors/gram-windows.js.map +1 -0
  221. package/dist/detectors/heading-case.d.ts +2 -0
  222. package/dist/detectors/heading-case.d.ts.map +1 -1
  223. package/dist/detectors/heading-case.js +29 -2
  224. package/dist/detectors/heading-case.js.map +1 -1
  225. package/dist/detectors/heading-code-words.d.ts +6 -0
  226. package/dist/detectors/heading-code-words.d.ts.map +1 -0
  227. package/dist/detectors/heading-code-words.js +29 -0
  228. package/dist/detectors/heading-code-words.js.map +1 -0
  229. package/dist/detectors/heading-echo.d.ts.map +1 -1
  230. package/dist/detectors/heading-echo.js +7 -4
  231. package/dist/detectors/heading-echo.js.map +1 -1
  232. package/dist/detectors/heading-level-skip.d.ts +12 -0
  233. package/dist/detectors/heading-level-skip.d.ts.map +1 -0
  234. package/dist/detectors/heading-level-skip.js +11 -0
  235. package/dist/detectors/heading-level-skip.js.map +1 -0
  236. package/dist/detectors/image-alt-text.d.ts +3 -0
  237. package/dist/detectors/image-alt-text.d.ts.map +1 -0
  238. package/dist/detectors/image-alt-text.js +9 -0
  239. package/dist/detectors/image-alt-text.js.map +1 -0
  240. package/dist/detectors/index.d.ts.map +1 -1
  241. package/dist/detectors/index.js +34 -1
  242. package/dist/detectors/index.js.map +1 -1
  243. package/dist/detectors/kutoten-consistency.d.ts +24 -0
  244. package/dist/detectors/kutoten-consistency.d.ts.map +1 -0
  245. package/dist/detectors/kutoten-consistency.js +77 -0
  246. package/dist/detectors/kutoten-consistency.js.map +1 -0
  247. package/dist/detectors/lead-in.d.ts +1 -0
  248. package/dist/detectors/lead-in.d.ts.map +1 -1
  249. package/dist/detectors/lead-in.js +2 -1
  250. package/dist/detectors/lead-in.js.map +1 -1
  251. package/dist/detectors/lexicon-match.d.ts +4 -0
  252. package/dist/detectors/lexicon-match.d.ts.map +1 -1
  253. package/dist/detectors/lexicon-match.js +7 -2
  254. package/dist/detectors/lexicon-match.js.map +1 -1
  255. package/dist/detectors/list-item.d.ts +45 -0
  256. package/dist/detectors/list-item.d.ts.map +1 -0
  257. package/dist/detectors/list-item.js +88 -0
  258. package/dist/detectors/list-item.js.map +1 -0
  259. package/dist/detectors/list-items.d.ts +31 -0
  260. package/dist/detectors/list-items.d.ts.map +1 -0
  261. package/dist/detectors/list-items.js +113 -0
  262. package/dist/detectors/list-items.js.map +1 -0
  263. package/dist/detectors/list-lead-in.d.ts +7 -0
  264. package/dist/detectors/list-lead-in.d.ts.map +1 -0
  265. package/dist/detectors/list-lead-in.js +28 -0
  266. package/dist/detectors/list-lead-in.js.map +1 -0
  267. package/dist/detectors/list-sentence.d.ts +65 -0
  268. package/dist/detectors/list-sentence.d.ts.map +1 -0
  269. package/dist/detectors/list-sentence.js +105 -0
  270. package/dist/detectors/list-sentence.js.map +1 -0
  271. package/dist/detectors/list-view.d.ts +34 -0
  272. package/dist/detectors/list-view.d.ts.map +1 -0
  273. package/dist/detectors/list-view.js +137 -0
  274. package/dist/detectors/list-view.js.map +1 -0
  275. package/dist/detectors/long-vowel.d.ts +7 -0
  276. package/dist/detectors/long-vowel.d.ts.map +1 -0
  277. package/dist/detectors/long-vowel.js +57 -0
  278. package/dist/detectors/long-vowel.js.map +1 -0
  279. package/dist/detectors/markup-finding.d.ts +6 -0
  280. package/dist/detectors/markup-finding.d.ts.map +1 -0
  281. package/dist/detectors/markup-finding.js +19 -0
  282. package/dist/detectors/markup-finding.js.map +1 -0
  283. package/dist/detectors/name-numeral.d.ts +1 -1
  284. package/dist/detectors/name-numeral.d.ts.map +1 -1
  285. package/dist/detectors/name-numeral.js +2 -7
  286. package/dist/detectors/name-numeral.js.map +1 -1
  287. package/dist/detectors/orthography.d.ts.map +1 -1
  288. package/dist/detectors/orthography.js +14 -10
  289. package/dist/detectors/orthography.js.map +1 -1
  290. package/dist/detectors/oxford-comma.d.ts +7 -1
  291. package/dist/detectors/oxford-comma.d.ts.map +1 -1
  292. package/dist/detectors/oxford-comma.js +135 -229
  293. package/dist/detectors/oxford-comma.js.map +1 -1
  294. package/dist/detectors/place-run.d.ts.map +1 -1
  295. package/dist/detectors/place-run.js +10 -6
  296. package/dist/detectors/place-run.js.map +1 -1
  297. package/dist/detectors/placeholder-text.d.ts +9 -0
  298. package/dist/detectors/placeholder-text.d.ts.map +1 -0
  299. package/dist/detectors/placeholder-text.js +18 -0
  300. package/dist/detectors/placeholder-text.js.map +1 -0
  301. package/dist/detectors/quote-around.d.ts +3 -0
  302. package/dist/detectors/quote-around.d.ts.map +1 -0
  303. package/dist/detectors/quote-around.js +8 -0
  304. package/dist/detectors/quote-around.js.map +1 -0
  305. package/dist/detectors/register.d.ts +11 -3
  306. package/dist/detectors/register.d.ts.map +1 -1
  307. package/dist/detectors/register.js +28 -9
  308. package/dist/detectors/register.js.map +1 -1
  309. package/dist/detectors/roman-numeral.d.ts +2 -0
  310. package/dist/detectors/roman-numeral.d.ts.map +1 -1
  311. package/dist/detectors/roman-numeral.js +2 -0
  312. package/dist/detectors/roman-numeral.js.map +1 -1
  313. package/dist/detectors/sentence-ending.d.ts +17 -1
  314. package/dist/detectors/sentence-ending.d.ts.map +1 -1
  315. package/dist/detectors/sentence-ending.js +13 -7
  316. package/dist/detectors/sentence-ending.js.map +1 -1
  317. package/dist/detectors/sentence-length.d.ts.map +1 -1
  318. package/dist/detectors/sentence-length.js +13 -4
  319. package/dist/detectors/sentence-length.js.map +1 -1
  320. package/dist/detectors/signals.d.ts +8 -0
  321. package/dist/detectors/signals.d.ts.map +1 -1
  322. package/dist/detectors/signals.js +67 -46
  323. package/dist/detectors/signals.js.map +1 -1
  324. package/dist/detectors/structure-tree.d.ts +6 -0
  325. package/dist/detectors/structure-tree.d.ts.map +1 -1
  326. package/dist/detectors/structure-tree.js +37 -1
  327. package/dist/detectors/structure-tree.js.map +1 -1
  328. package/dist/detectors/structure.d.ts +1 -3
  329. package/dist/detectors/structure.d.ts.map +1 -1
  330. package/dist/detectors/structure.js +3 -4
  331. package/dist/detectors/structure.js.map +1 -1
  332. package/dist/detectors/superlative-name.d.ts.map +1 -1
  333. package/dist/detectors/superlative-name.js +8 -5
  334. package/dist/detectors/superlative-name.js.map +1 -1
  335. package/dist/detectors/superlative-scope.d.ts.map +1 -1
  336. package/dist/detectors/superlative-scope.js +9 -4
  337. package/dist/detectors/superlative-scope.js.map +1 -1
  338. package/dist/detectors/token-column.d.ts +46 -0
  339. package/dist/detectors/token-column.d.ts.map +1 -0
  340. package/dist/detectors/token-column.js +95 -0
  341. package/dist/detectors/token-column.js.map +1 -0
  342. package/dist/detectors/unbalanced-bracket.d.ts +22 -0
  343. package/dist/detectors/unbalanced-bracket.d.ts.map +1 -0
  344. package/dist/detectors/unbalanced-bracket.js +119 -0
  345. package/dist/detectors/unbalanced-bracket.js.map +1 -0
  346. package/dist/detectors/url-run-on.d.ts +9 -0
  347. package/dist/detectors/url-run-on.d.ts.map +1 -0
  348. package/dist/detectors/url-run-on.js +19 -0
  349. package/dist/detectors/url-run-on.js.map +1 -0
  350. package/dist/document-sections.d.ts +13 -0
  351. package/dist/document-sections.d.ts.map +1 -0
  352. package/dist/document-sections.js +32 -0
  353. package/dist/document-sections.js.map +1 -0
  354. package/dist/document.d.ts +11 -4
  355. package/dist/document.d.ts.map +1 -1
  356. package/dist/document.js +90 -98
  357. package/dist/document.js.map +1 -1
  358. package/dist/email-parts.d.ts +28 -0
  359. package/dist/email-parts.d.ts.map +1 -0
  360. package/dist/email-parts.js +230 -0
  361. package/dist/email-parts.js.map +1 -0
  362. package/dist/eval.d.ts +2 -1
  363. package/dist/eval.d.ts.map +1 -1
  364. package/dist/eval.js +16 -4
  365. package/dist/eval.js.map +1 -1
  366. package/dist/figure-references.d.ts +30 -0
  367. package/dist/figure-references.d.ts.map +1 -0
  368. package/dist/figure-references.js +76 -0
  369. package/dist/figure-references.js.map +1 -0
  370. package/dist/files.d.ts +2 -0
  371. package/dist/files.d.ts.map +1 -1
  372. package/dist/files.js +4 -0
  373. package/dist/files.js.map +1 -1
  374. package/dist/heading-label.d.ts +22 -0
  375. package/dist/heading-label.d.ts.map +1 -0
  376. package/dist/heading-label.js +50 -0
  377. package/dist/heading-label.js.map +1 -0
  378. package/dist/in-page-nav.d.ts +4 -1
  379. package/dist/in-page-nav.d.ts.map +1 -1
  380. package/dist/in-page-nav.js +53 -18
  381. package/dist/in-page-nav.js.map +1 -1
  382. package/dist/joined-view.d.ts.map +1 -1
  383. package/dist/joined-view.js +1 -0
  384. package/dist/joined-view.js.map +1 -1
  385. package/dist/levels.d.ts +5 -1
  386. package/dist/levels.d.ts.map +1 -1
  387. package/dist/levels.js +9 -0
  388. package/dist/levels.js.map +1 -1
  389. package/dist/line-paragraphs.d.ts +8 -0
  390. package/dist/line-paragraphs.d.ts.map +1 -1
  391. package/dist/line-paragraphs.js +33 -10
  392. package/dist/line-paragraphs.js.map +1 -1
  393. package/dist/long-vowel.d.ts +35 -0
  394. package/dist/long-vowel.d.ts.map +1 -0
  395. package/dist/long-vowel.js +71 -0
  396. package/dist/long-vowel.js.map +1 -0
  397. package/dist/markdown-node.d.ts +19 -0
  398. package/dist/markdown-node.d.ts.map +1 -0
  399. package/dist/markdown-node.js +6 -0
  400. package/dist/markdown-node.js.map +1 -0
  401. package/dist/markdown-read.d.ts +17 -0
  402. package/dist/markdown-read.d.ts.map +1 -0
  403. package/dist/markdown-read.js +37 -0
  404. package/dist/markdown-read.js.map +1 -0
  405. package/dist/markup.d.ts +22 -0
  406. package/dist/markup.d.ts.map +1 -0
  407. package/dist/markup.js +180 -0
  408. package/dist/markup.js.map +1 -0
  409. package/dist/mask.js +8 -5
  410. package/dist/mask.js.map +1 -1
  411. package/dist/number-name.d.ts +21 -5
  412. package/dist/number-name.d.ts.map +1 -1
  413. package/dist/number-name.js +119 -17
  414. package/dist/number-name.js.map +1 -1
  415. package/dist/orthography.d.ts +2 -0
  416. package/dist/orthography.d.ts.map +1 -1
  417. package/dist/orthography.js +9 -4
  418. package/dist/orthography.js.map +1 -1
  419. package/dist/page-furniture.d.ts +5 -2
  420. package/dist/page-furniture.d.ts.map +1 -1
  421. package/dist/page-furniture.js +8 -2
  422. package/dist/page-furniture.js.map +1 -1
  423. package/dist/plain-source.d.ts +1 -0
  424. package/dist/plain-source.d.ts.map +1 -1
  425. package/dist/plain-source.js +2 -1
  426. package/dist/plain-source.js.map +1 -1
  427. package/dist/plugin.d.ts +115 -0
  428. package/dist/plugin.d.ts.map +1 -1
  429. package/dist/profile/for-file.d.ts.map +1 -1
  430. package/dist/profile/for-file.js +3 -1
  431. package/dist/profile/for-file.js.map +1 -1
  432. package/dist/quoted-span.d.ts.map +1 -1
  433. package/dist/quoted-span.js +8 -3
  434. package/dist/quoted-span.js.map +1 -1
  435. package/dist/reasons.d.ts +3 -0
  436. package/dist/reasons.d.ts.map +1 -1
  437. package/dist/reasons.js +6 -0
  438. package/dist/reasons.js.map +1 -1
  439. package/dist/reference-lists.d.ts +3 -0
  440. package/dist/reference-lists.d.ts.map +1 -0
  441. package/dist/reference-lists.js +75 -0
  442. package/dist/reference-lists.js.map +1 -0
  443. package/dist/render/explain.d.ts +7 -1
  444. package/dist/render/explain.d.ts.map +1 -1
  445. package/dist/render/explain.js +36 -12
  446. package/dist/render/explain.js.map +1 -1
  447. package/dist/render/friendly.d.ts.map +1 -1
  448. package/dist/render/friendly.js +19 -9
  449. package/dist/render/friendly.js.map +1 -1
  450. package/dist/render/options.d.ts +7 -0
  451. package/dist/render/options.d.ts.map +1 -0
  452. package/dist/render/options.js +50 -0
  453. package/dist/render/options.js.map +1 -0
  454. package/dist/render/rules-json.d.ts +4 -1
  455. package/dist/render/rules-json.d.ts.map +1 -1
  456. package/dist/render/rules-json.js +102 -12
  457. package/dist/render/rules-json.js.map +1 -1
  458. package/dist/render/rules-table.d.ts +4 -0
  459. package/dist/render/rules-table.d.ts.map +1 -0
  460. package/dist/render/rules-table.js +70 -0
  461. package/dist/render/rules-table.js.map +1 -0
  462. package/dist/render/sarif.js +4 -4
  463. package/dist/render/sarif.js.map +1 -1
  464. package/dist/render/semantic.js +3 -3
  465. package/dist/render/semantic.js.map +1 -1
  466. package/dist/render/severity-name.d.ts +6 -0
  467. package/dist/render/severity-name.d.ts.map +1 -0
  468. package/dist/render/severity-name.js +7 -0
  469. package/dist/render/severity-name.js.map +1 -0
  470. package/dist/render/text.d.ts +7 -2
  471. package/dist/render/text.d.ts.map +1 -1
  472. package/dist/render/text.js +15 -4
  473. package/dist/render/text.js.map +1 -1
  474. package/dist/resolve-genre.d.ts +1 -1
  475. package/dist/resolve-genre.d.ts.map +1 -1
  476. package/dist/resolve-genre.js +4 -1
  477. package/dist/resolve-genre.js.map +1 -1
  478. package/dist/rule-genres.d.ts +24 -0
  479. package/dist/rule-genres.d.ts.map +1 -0
  480. package/dist/rule-genres.js +11 -0
  481. package/dist/rule-genres.js.map +1 -0
  482. package/dist/rule-guide.d.ts +54 -0
  483. package/dist/rule-guide.d.ts.map +1 -0
  484. package/dist/rule-guide.js +81 -0
  485. package/dist/rule-guide.js.map +1 -0
  486. package/dist/rule-load.d.ts.map +1 -1
  487. package/dist/rule-load.js +87 -33
  488. package/dist/rule-load.js.map +1 -1
  489. package/dist/rule-options.d.ts +50 -0
  490. package/dist/rule-options.d.ts.map +1 -0
  491. package/dist/rule-options.js +106 -0
  492. package/dist/rule-options.js.map +1 -0
  493. package/dist/run.d.ts +13 -0
  494. package/dist/run.d.ts.map +1 -1
  495. package/dist/run.js +54 -10
  496. package/dist/run.js.map +1 -1
  497. package/dist/sentence-shape.d.ts.map +1 -1
  498. package/dist/sentence-shape.js +4 -4
  499. package/dist/sentence-shape.js.map +1 -1
  500. package/dist/setting-problems.d.ts +2 -1
  501. package/dist/setting-problems.d.ts.map +1 -1
  502. package/dist/setting-problems.js +6 -1
  503. package/dist/setting-problems.js.map +1 -1
  504. package/dist/span-cut.d.ts +6 -0
  505. package/dist/span-cut.d.ts.map +1 -0
  506. package/dist/span-cut.js +22 -0
  507. package/dist/span-cut.js.map +1 -0
  508. package/dist/structure/aside-depth.d.ts +21 -0
  509. package/dist/structure/aside-depth.d.ts.map +1 -0
  510. package/dist/structure/aside-depth.js +65 -0
  511. package/dist/structure/aside-depth.js.map +1 -0
  512. package/dist/structure/build.d.ts +5 -1
  513. package/dist/structure/build.d.ts.map +1 -1
  514. package/dist/structure/build.js +29 -17
  515. package/dist/structure/build.js.map +1 -1
  516. package/dist/structure/closed-pairs.d.ts +8 -0
  517. package/dist/structure/closed-pairs.d.ts.map +1 -0
  518. package/dist/structure/closed-pairs.js +22 -0
  519. package/dist/structure/closed-pairs.js.map +1 -0
  520. package/dist/structure/date-range.d.ts +21 -0
  521. package/dist/structure/date-range.d.ts.map +1 -0
  522. package/dist/structure/date-range.js +45 -0
  523. package/dist/structure/date-range.js.map +1 -0
  524. package/dist/structure/known-mentions.d.ts +18 -0
  525. package/dist/structure/known-mentions.d.ts.map +1 -0
  526. package/dist/structure/known-mentions.js +78 -0
  527. package/dist/structure/known-mentions.js.map +1 -0
  528. package/dist/structure/numbering.d.ts +1 -0
  529. package/dist/structure/numbering.d.ts.map +1 -1
  530. package/dist/structure/numbering.js +11 -6
  531. package/dist/structure/numbering.js.map +1 -1
  532. package/dist/structure/of.d.ts +3 -1
  533. package/dist/structure/of.d.ts.map +1 -1
  534. package/dist/structure/of.js +5 -1
  535. package/dist/structure/of.js.map +1 -1
  536. package/dist/structure/percent-sum.d.ts +16 -0
  537. package/dist/structure/percent-sum.d.ts.map +1 -0
  538. package/dist/structure/percent-sum.js +104 -0
  539. package/dist/structure/percent-sum.js.map +1 -0
  540. package/dist/structure/quoted-number.d.ts +8 -0
  541. package/dist/structure/quoted-number.d.ts.map +1 -0
  542. package/dist/structure/quoted-number.js +34 -0
  543. package/dist/structure/quoted-number.js.map +1 -0
  544. package/dist/structure/relative-find.d.ts.map +1 -1
  545. package/dist/structure/relative-find.js +34 -46
  546. package/dist/structure/relative-find.js.map +1 -1
  547. package/dist/structure/relative-resolve.d.ts.map +1 -1
  548. package/dist/structure/relative-resolve.js +76 -30
  549. package/dist/structure/relative-resolve.js.map +1 -1
  550. package/dist/structure/runs.d.ts +2 -0
  551. package/dist/structure/runs.d.ts.map +1 -1
  552. package/dist/structure/runs.js +2 -2
  553. package/dist/structure/runs.js.map +1 -1
  554. package/dist/structure/sexp.d.ts +1 -1
  555. package/dist/structure/sexp.d.ts.map +1 -1
  556. package/dist/structure/sexp.js +18 -6
  557. package/dist/structure/sexp.js.map +1 -1
  558. package/dist/structure/total.d.ts +3 -0
  559. package/dist/structure/total.d.ts.map +1 -1
  560. package/dist/structure/total.js +2 -2
  561. package/dist/structure/total.js.map +1 -1
  562. package/dist/structure/universal.d.ts +14 -2
  563. package/dist/structure/universal.d.ts.map +1 -1
  564. package/dist/structure/universal.js +17 -2
  565. package/dist/structure/universal.js.map +1 -1
  566. package/dist/structure/wrapped-tail.d.ts +14 -7
  567. package/dist/structure/wrapped-tail.d.ts.map +1 -1
  568. package/dist/structure/wrapped-tail.js +33 -8
  569. package/dist/structure/wrapped-tail.js.map +1 -1
  570. package/dist/style-load.d.ts +4 -0
  571. package/dist/style-load.d.ts.map +1 -0
  572. package/dist/style-load.js +28 -0
  573. package/dist/style-load.js.map +1 -0
  574. package/dist/style-parse.d.ts +19 -0
  575. package/dist/style-parse.d.ts.map +1 -0
  576. package/dist/style-parse.js +60 -0
  577. package/dist/style-parse.js.map +1 -0
  578. package/dist/subheading-line.d.ts +6 -0
  579. package/dist/subheading-line.d.ts.map +1 -0
  580. package/dist/subheading-line.js +57 -0
  581. package/dist/subheading-line.js.map +1 -0
  582. package/dist/template-syntax.d.ts +17 -0
  583. package/dist/template-syntax.d.ts.map +1 -0
  584. package/dist/template-syntax.js +140 -0
  585. package/dist/template-syntax.js.map +1 -0
  586. package/dist/text-above.d.ts +19 -0
  587. package/dist/text-above.d.ts.map +1 -0
  588. package/dist/text-above.js +43 -0
  589. package/dist/text-above.js.map +1 -0
  590. package/dist/text-figures.d.ts +10 -0
  591. package/dist/text-figures.d.ts.map +1 -0
  592. package/dist/text-figures.js +131 -0
  593. package/dist/text-figures.js.map +1 -0
  594. package/dist/trailing-aside.d.ts +2 -0
  595. package/dist/trailing-aside.d.ts.map +1 -0
  596. package/dist/trailing-aside.js +53 -0
  597. package/dist/trailing-aside.js.map +1 -0
  598. package/dist/tree-walk.d.ts +18 -0
  599. package/dist/tree-walk.d.ts.map +1 -0
  600. package/dist/tree-walk.js +45 -0
  601. package/dist/tree-walk.js.map +1 -0
  602. package/genres.yaml +26 -0
  603. package/package.json +5 -3
  604. package/reference-headings.yaml +17 -0
  605. package/rules/adverb-overuse.yaml +19 -0
  606. package/rules/agentless-passive.yaml +19 -0
  607. package/rules/agreement-slip.yaml +14 -1
  608. package/rules/ai-generated-composite.yaml +102 -0
  609. package/rules/ai-tell.yaml +23 -0
  610. package/rules/announced-count-mismatch.yaml +57 -0
  611. package/rules/announcing-opener.yaml +51 -0
  612. package/rules/assistant-residue.yaml +52 -0
  613. package/rules/bold-density.yaml +31 -0
  614. package/rules/broken-link.yaml +65 -0
  615. package/rules/closing-cliche.yaml +33 -0
  616. package/rules/colon-lead-in.yaml +59 -0
  617. package/rules/concrete-evidence-density.yaml +41 -0
  618. package/rules/contraction-consistency.yaml +18 -0
  619. package/rules/contrast-framing.yaml +57 -0
  620. package/rules/cushion-phrase-density.yaml +25 -0
  621. package/rules/dangling-figure-reference.yaml +61 -0
  622. package/rules/dangling-reference.yaml +53 -1
  623. package/rules/date-order.yaml +33 -1
  624. package/rules/date-range-reversed.yaml +46 -0
  625. package/rules/date-weekday-mismatch.yaml +17 -1
  626. package/rules/double-keigo.yaml +16 -0
  627. package/rules/doubled-punctuation.yaml +45 -0
  628. package/rules/doubled-word.yaml +17 -1
  629. package/rules/duplicate-definition.yaml +59 -1
  630. package/rules/emoji-density.yaml +25 -0
  631. package/rules/empty-conclusion.yaml +28 -0
  632. package/rules/empty-intensifier.yaml +19 -0
  633. package/rules/excessive-hedging.yaml +19 -0
  634. package/rules/expletive-construction.yaml +19 -0
  635. package/rules/heading-echo.yaml +31 -0
  636. package/rules/heading-level-skip.yaml +78 -0
  637. package/rules/hiragana-fukushi.yaml +16 -0
  638. package/rules/image-alt-text.yaml +54 -0
  639. package/rules/internal-jargon.yaml +21 -0
  640. package/rules/katakana-long-vowel.yaml +98 -0
  641. package/rules/kutoten-consistency.yaml +53 -0
  642. package/rules/latin-spacing.yaml +23 -4
  643. package/rules/max-kanji-continuous.yaml +16 -0
  644. package/rules/max-paragraph-length.yaml +33 -0
  645. package/rules/max-sentence-length.yaml +32 -0
  646. package/rules/ngram-repetition.yaml +29 -2
  647. package/rules/no-doubled-joshi.yaml +16 -0
  648. package/rules/no-em-dash.yaml +25 -0
  649. package/rules/no-mixed-desumasu.yaml +27 -2
  650. package/rules/no-nakaguro-parallel.yaml +20 -0
  651. package/rules/numbering-gap.yaml +53 -1
  652. package/rules/oxford-comma-consistency.yaml +18 -0
  653. package/rules/padded-intro.yaml +19 -0
  654. package/rules/paragraph-length-variance.yaml +49 -0
  655. package/rules/percent-sum-mismatch.yaml +58 -0
  656. package/rules/preamble-length.yaml +56 -0
  657. package/rules/preferred-term.yaml +27 -0
  658. package/rules/proper-noun-density.yaml +26 -0
  659. package/rules/repeated-conjunction.yaml +47 -0
  660. package/rules/repeated-sentence-head.yaml +23 -0
  661. package/rules/required-sections.yaml +49 -0
  662. package/rules/risk-disclosure.yaml +22 -0
  663. package/rules/rule-of-three.yaml +97 -0
  664. package/rules/sasete-itadaku.yaml +18 -0
  665. package/rules/section-length-uniformity.yaml +89 -0
  666. package/rules/sentence-initial-conjunction-run.yaml +18 -0
  667. package/rules/sentence-rhythm.yaml +25 -0
  668. package/rules/stock-transition.yaml +55 -0
  669. package/rules/stray-space.yaml +18 -0
  670. package/rules/taigen-dome-in-prose.yaml +19 -0
  671. package/rules/title-case-consistency.yaml +42 -0
  672. package/rules/total-mismatch.yaml +37 -1
  673. package/rules/unbalanced-bracket.yaml +56 -0
  674. package/rules/undefined-acronym.yaml +22 -0
  675. package/rules/unfilled-placeholder.yaml +50 -0
  676. package/rules/unqualified-superlative.yaml +19 -0
  677. package/rules/unsourced-number.yaml +16 -0
  678. package/rules/url-run-on.yaml +45 -0
  679. package/skills/chaff/SKILL.md +70 -0
  680. package/src/announced-count.ts +148 -0
  681. package/src/bare-url.ts +35 -0
  682. package/src/baseline.ts +17 -1
  683. package/src/body-section.ts +7 -0
  684. package/src/calendar-number.ts +18 -4
  685. package/src/cli-args.ts +6 -0
  686. package/src/cli-text.ts +8 -4
  687. package/src/cli.ts +37 -37
  688. package/src/commands/compare.ts +80 -0
  689. package/src/commands/eval.ts +19 -8
  690. package/src/commands/feedback.ts +12 -6
  691. package/src/commands/test.ts +2 -4
  692. package/src/commands/tree.ts +41 -5
  693. package/src/compare/atom.ts +33 -0
  694. package/src/compare/clock-time.ts +86 -0
  695. package/src/compare/extract.ts +78 -0
  696. package/src/compare/fact-text.ts +68 -0
  697. package/src/compare/markup-atoms.ts +29 -0
  698. package/src/compare/match.ts +105 -0
  699. package/src/compare/outcome.ts +70 -0
  700. package/src/compare/proper-nouns.ts +65 -0
  701. package/src/compare/render.ts +102 -0
  702. package/src/compare/spans.ts +17 -0
  703. package/src/compare/text-atoms.ts +95 -0
  704. package/src/compare/text.ts +120 -0
  705. package/src/compare/tree-atoms.ts +80 -0
  706. package/src/compare/written-names.ts +26 -0
  707. package/src/config/load.ts +21 -0
  708. package/src/config/option-problems.ts +70 -0
  709. package/src/config/read.ts +8 -0
  710. package/src/config/rule-problems.ts +12 -2
  711. package/src/config/style.ts +42 -0
  712. package/src/config/warnings.ts +13 -0
  713. package/src/config/write.ts +18 -4
  714. package/src/custom/bounded-match.ts +58 -0
  715. package/src/custom/load.ts +15 -0
  716. package/src/custom/parse.ts +274 -0
  717. package/src/custom/problems.ts +89 -0
  718. package/src/custom/regex-safety.ts +118 -0
  719. package/src/custom/token-pattern.ts +84 -0
  720. package/src/detect.ts +28 -2
  721. package/src/detectors/acronym-context.ts +16 -4
  722. package/src/detectors/ai-phrasing.ts +137 -0
  723. package/src/detectors/announced-count.ts +25 -0
  724. package/src/detectors/broken-link.ts +90 -0
  725. package/src/detectors/cited-name.ts +6 -5
  726. package/src/detectors/cited-title.ts +96 -0
  727. package/src/detectors/concrete-evidence.ts +3 -2
  728. package/src/detectors/contrast-frame.ts +54 -0
  729. package/src/detectors/custom.ts +89 -0
  730. package/src/detectors/dangling-figure.ts +22 -0
  731. package/src/detectors/doubled-punctuation.ts +49 -0
  732. package/src/detectors/doubled-word.ts +19 -4
  733. package/src/detectors/enumerated-runs.ts +13 -4
  734. package/src/detectors/gram-furniture.ts +30 -0
  735. package/src/detectors/gram-place.ts +9 -5
  736. package/src/detectors/gram-windows.ts +31 -0
  737. package/src/detectors/heading-case.ts +30 -2
  738. package/src/detectors/heading-code-words.ts +35 -0
  739. package/src/detectors/heading-echo.ts +8 -4
  740. package/src/detectors/heading-level-skip.ts +19 -0
  741. package/src/detectors/image-alt-text.ts +11 -0
  742. package/src/detectors/index.ts +43 -1
  743. package/src/detectors/kutoten-consistency.ts +96 -0
  744. package/src/detectors/lead-in.ts +3 -1
  745. package/src/detectors/lexicon-match.ts +9 -2
  746. package/src/detectors/list-item.ts +122 -0
  747. package/src/detectors/list-items.ts +163 -0
  748. package/src/detectors/list-lead-in.ts +33 -0
  749. package/src/detectors/list-sentence.ts +157 -0
  750. package/src/detectors/list-view.ts +157 -0
  751. package/src/detectors/long-vowel.ts +66 -0
  752. package/src/detectors/markup-finding.ts +24 -0
  753. package/src/detectors/name-numeral.ts +4 -2
  754. package/src/detectors/orthography.ts +23 -17
  755. package/src/detectors/oxford-comma.ts +178 -283
  756. package/src/detectors/place-run.ts +7 -4
  757. package/src/detectors/placeholder-text.ts +27 -0
  758. package/src/detectors/quote-around.ts +9 -0
  759. package/src/detectors/register.ts +37 -10
  760. package/src/detectors/roman-numeral.ts +3 -0
  761. package/src/detectors/sentence-ending.ts +14 -7
  762. package/src/detectors/sentence-length.ts +16 -5
  763. package/src/detectors/signals.ts +80 -46
  764. package/src/detectors/structure-tree.ts +45 -1
  765. package/src/detectors/structure.ts +3 -4
  766. package/src/detectors/superlative-name.ts +7 -4
  767. package/src/detectors/superlative-scope.ts +8 -3
  768. package/src/detectors/token-column.ts +149 -0
  769. package/src/detectors/unbalanced-bracket.ts +153 -0
  770. package/src/detectors/url-run-on.ts +27 -0
  771. package/src/document-sections.ts +46 -0
  772. package/src/document.ts +106 -138
  773. package/src/email-parts.ts +269 -0
  774. package/src/eval.ts +14 -4
  775. package/src/figure-references.ts +112 -0
  776. package/src/files.ts +5 -0
  777. package/src/heading-label.ts +55 -0
  778. package/src/in-page-nav.ts +48 -19
  779. package/src/joined-view.ts +1 -0
  780. package/src/levels.ts +14 -1
  781. package/src/line-paragraphs.ts +52 -9
  782. package/src/long-vowel.ts +99 -0
  783. package/src/markdown-node.ts +19 -0
  784. package/src/markdown-read.ts +44 -0
  785. package/src/markup.ts +210 -0
  786. package/src/mask.ts +8 -8
  787. package/src/number-name.ts +151 -24
  788. package/src/orthography.ts +10 -3
  789. package/src/page-furniture.ts +11 -2
  790. package/src/plain-source.ts +2 -1
  791. package/src/plugin.ts +101 -1
  792. package/src/profile/for-file.ts +3 -1
  793. package/src/quoted-span.ts +9 -3
  794. package/src/reasons.ts +9 -0
  795. package/src/reference-lists.ts +91 -0
  796. package/src/render/explain.ts +47 -13
  797. package/src/render/friendly.ts +20 -9
  798. package/src/render/options.ts +58 -0
  799. package/src/render/rules-json.ts +130 -14
  800. package/src/render/rules-table.ts +91 -0
  801. package/src/render/sarif.ts +4 -4
  802. package/src/render/semantic.ts +3 -3
  803. package/src/render/severity-name.ts +10 -0
  804. package/src/render/text.ts +21 -7
  805. package/src/resolve-genre.ts +4 -1
  806. package/src/rule-genres.ts +25 -0
  807. package/src/rule-guide.ts +135 -0
  808. package/src/rule-load.ts +91 -34
  809. package/src/rule-options.ts +131 -0
  810. package/src/run.ts +74 -11
  811. package/src/sentence-shape.ts +4 -5
  812. package/src/setting-problems.ts +7 -1
  813. package/src/span-cut.ts +28 -0
  814. package/src/structure/aside-depth.ts +67 -0
  815. package/src/structure/build.ts +38 -19
  816. package/src/structure/closed-pairs.ts +20 -0
  817. package/src/structure/date-range.ts +69 -0
  818. package/src/structure/known-mentions.ts +96 -0
  819. package/src/structure/numbering.ts +9 -5
  820. package/src/structure/of.ts +11 -3
  821. package/src/structure/percent-sum.ts +135 -0
  822. package/src/structure/quoted-number.ts +36 -0
  823. package/src/structure/relative-find.ts +34 -47
  824. package/src/structure/relative-resolve.ts +77 -30
  825. package/src/structure/runs.ts +2 -2
  826. package/src/structure/sexp.ts +17 -5
  827. package/src/structure/total.ts +2 -2
  828. package/src/structure/universal.ts +24 -4
  829. package/src/structure/wrapped-tail.ts +38 -13
  830. package/src/style-load.ts +28 -0
  831. package/src/style-parse.ts +77 -0
  832. package/src/subheading-line.ts +68 -0
  833. package/src/template-syntax.ts +164 -0
  834. package/src/text-above.ts +49 -0
  835. package/src/text-figures.ts +147 -0
  836. package/src/trailing-aside.ts +50 -0
  837. package/src/tree-walk.ts +48 -0
  838. package/styles/bunkacho.yaml +25 -0
  839. package/styles/ieice.yaml +29 -0
  840. package/styles/jis-z8301-2011.yaml +25 -0
@@ -0,0 +1,140 @@
1
+ import { spanOf } from "./markdown-node.js";
2
+ /**
3
+ * Template and MDX syntax written into the text: Liquid and Jinja tags (`{% ifversion %}`,
4
+ * `{% data variables.product.github %}`), outputs (`{{ page.title }}`, which also covers Hugo's shortcodes
5
+ * `{{< note >}}` and `{{% alert %}}`) and comments (`{# … #}`), and MDX comments (a block comment in braces).
6
+ */
7
+ const DELIMITERS = [
8
+ { open: "{%", close: "%}", closer: /%\}/gu },
9
+ { open: "{{", close: "}}", closer: /\}\}/gu },
10
+ { open: "{#", close: "#}", closer: /#\}/gu },
11
+ { open: "{/*", close: "*/}", closer: /\*\/\}/gu },
12
+ ];
13
+ const OPENER = /\{(?=[{%#]|\/\*)/gu;
14
+ // A tag never runs past a blank line: an unclosed `{{` is a character in the text, not a tag that swallows the page.
15
+ const BLANK_LINE = /\n[ \t]*\n/gu;
16
+ const stretchesOf = (text) => {
17
+ const breaks = [...text.matchAll(BLANK_LINE)];
18
+ const starts = [0, ...breaks.map((blank) => blank.index + blank[0].length)];
19
+ return starts.map((start, index) => ({ start, end: breaks[index]?.index ?? text.length }));
20
+ };
21
+ /** The first of the sorted `positions` at or after `from`. */
22
+ const firstAtOrAfter = (positions, from, low = 0, high = positions.length) => {
23
+ if (low >= high)
24
+ return positions[low];
25
+ const middle = (low + high) >> 1;
26
+ return (positions[middle] ?? from) >= from ? firstAtOrAfter(positions, from, low, middle) : firstAtOrAfter(positions, from, middle + 1, high);
27
+ };
28
+ /**
29
+ * The tags in one stretch, left to right: each opener closes at the first closer after it, and an opener inside a tag
30
+ * opens nothing. Each opener looks its closer up instead of scanning for it, so a line of unclosed openers is linear.
31
+ */
32
+ const tagsIn = (stretch) => {
33
+ const closers = DELIMITERS.map(({ closer }) => [...stretch.matchAll(closer)].map((match) => match.index));
34
+ return [...stretch.matchAll(OPENER)].reduce((tags, { index }) => {
35
+ if (index < (tags.at(-1)?.end ?? 0))
36
+ return tags;
37
+ const kind = DELIMITERS.findIndex(({ open }) => stretch.startsWith(open, index));
38
+ const delimiters = DELIMITERS[kind];
39
+ const close = delimiters === undefined ? undefined : firstAtOrAfter(closers[kind] ?? [], index + delimiters.open.length);
40
+ if (delimiters !== undefined && close !== undefined)
41
+ tags.push({ start: index, end: close + delimiters.close.length });
42
+ return tags;
43
+ }, []);
44
+ };
45
+ /** Where the template syntax stands. Read `code` with code already blanked, so a `{{` inside backticks opens nothing. */
46
+ export const templateSpans = (code) => stretchesOf(code).flatMap((stretch) => tagsIn(code.slice(stretch.start, stretch.end)).map((tag) => ({ start: stretch.start + tag.start, end: stretch.start + tag.end })));
47
+ /** A line that starts with a JSX element's tag (`<Tabs>`, `</Tabs>`). HTML's tags are lower case and stay HTML. */
48
+ const COMPONENT_START = /^[ \t]*<\/?[A-Z][^\n]*$/gmu;
49
+ const QUOTED = /"[^"\n]*"|'[^'\n]*'/gu;
50
+ /** Tags and nothing else, once quoted values are emptied and expressions taken out: `<TabItem value= label=>`. */
51
+ const TAGS_ONLY = /^[ \t]*(?:<\/?[A-Za-z][\w.:-]*(?:[ \t][^<>{}]*)?>[ \t]*)+$/u;
52
+ /** The line without its brace expressions, however deeply they nest; undefined when its braces do not balance. */
53
+ const withoutExpressions = (line) => {
54
+ const kept = [];
55
+ const depth = [...line.replace(QUOTED, '""')].reduce((level, char) => {
56
+ if (level < 0)
57
+ return level;
58
+ if (char === "{")
59
+ return level + 1;
60
+ if (char === "}")
61
+ return level - 1;
62
+ if (level === 0)
63
+ kept.push(char);
64
+ return level;
65
+ }, 0);
66
+ return depth === 0 ? kept.join("") : undefined;
67
+ };
68
+ const isComponentLine = (line) => {
69
+ const bare = withoutExpressions(line);
70
+ return bare !== undefined && TAGS_ONLY.test(bare);
71
+ };
72
+ /**
73
+ * Lines of nothing but JSX tags. MDX reads such a line as a block of its own, so the text on the next line is a
74
+ * paragraph; CommonMark reads it as the start of an HTML block that runs to the next blank line and hides that text.
75
+ */
76
+ export const componentLines = (source) => [...source.matchAll(COMPONENT_START)]
77
+ .filter((match) => isComponentLine(match[0]))
78
+ .map((match) => ({ start: match.index, end: match.index + match[0].length }));
79
+ const IMPORT_START = /^import(?:\s|\{)/u;
80
+ // The module's name in quotes ends the statement: "import data from 'CSV' before review." goes on, so it is prose.
81
+ const IMPORT_FROM = /(?:[\s}*]from\s*|^import\s*)["'][^"'\n]*["'];?[ \t]*(?:\n|$)/u;
82
+ /** JavaScript's shapes of `export`, read on the first line, so that "export default reports from…" stays a sentence. */
83
+ const EXPORT_SHAPES = [
84
+ /^export\s+(?:async\s+)?function\b/u,
85
+ /^export\s+class\s+[\w$]/u,
86
+ /^export\s+(?:const|let|var)\s+[\w${[][^=]*=/u,
87
+ /^export\s+default\s+(?:async\s+)?(?:function|class)\b/u,
88
+ /^export\s+default\s*[{(["'`<]/u,
89
+ /^export\s+default\s+[\w$.]+\s*\(/u,
90
+ /^export\s+default\s+[\w$]+(?:\.[\w$]+)*;?\s*$/u,
91
+ /^export\s*[{*]/u,
92
+ ];
93
+ const isExport = (paragraph) => {
94
+ const firstLine = paragraph.split("\n", 1)[0] ?? "";
95
+ return EXPORT_SHAPES.some((shape) => shape.test(firstLine));
96
+ };
97
+ /** A paragraph that is MDX's `import`/`export` block: JavaScript, which MDX runs to the next blank line. */
98
+ const isModuleBlock = (paragraph) => (IMPORT_START.test(paragraph) && IMPORT_FROM.test(paragraph)) || isExport(paragraph);
99
+ /** MDX's `import`/`export` lines: JavaScript, and only at the top level of the page. */
100
+ export const moduleBlocks = (root, source) => (root.children ?? []).flatMap((node) => {
101
+ const span = node.type === "paragraph" ? spanOf(node) : undefined;
102
+ return span !== undefined && isModuleBlock(source.slice(span.start, span.end)) ? [span] : [];
103
+ });
104
+ /** `[!NOTE]` and the like opening a quote: a GitHub alert (Obsidian's callouts write the same). */
105
+ const alertMarkerAt = (source, start) => {
106
+ const marker = /\[![A-Za-z]+\][^\n]*/uy;
107
+ marker.lastIndex = start;
108
+ return marker.test(source) ? { start, end: marker.lastIndex } : undefined;
109
+ };
110
+ const QUOTE_MARK = /^[ \t]*>[ \t]?/gmu;
111
+ /** The `>` that opens each line of a quote spanning `quote`: the quote's own mark, not its text. */
112
+ const quoteMarks = (source, quote) => [...source.slice(quote.start, quote.end).matchAll(QUOTE_MARK)].map((match) => ({
113
+ start: quote.start + match.index,
114
+ end: quote.start + match.index + match[0].length,
115
+ }));
116
+ /**
117
+ * A GitHub alert (`> [!NOTE]`) is the writer's own text set in a box, not a quote: only its marker line and the `>` of
118
+ * each line are not prose. Undefined when the quote is not an alert.
119
+ */
120
+ const alertMarks = (quote, whole, source) => {
121
+ const first = quote.children?.[0];
122
+ const start = first?.type === "paragraph" ? spanOf(first)?.start : undefined;
123
+ const marker = start === undefined ? undefined : alertMarkerAt(source, start);
124
+ return marker === undefined ? undefined : [marker, ...quoteMarks(source, whole)];
125
+ };
126
+ /**
127
+ * Reads the alerts of one walk over the tree in pre-order: the marks of each alert, undefined for any other node. A
128
+ * quote inside a quote is quoted, even one that opens like an alert; pre-order meets the outer quote first.
129
+ */
130
+ export const alertReader = (source) => {
131
+ const outer = { end: -1 };
132
+ return (node) => {
133
+ const quote = node.type === "blockquote" ? spanOf(node) : undefined;
134
+ if (quote === undefined || quote.start < outer.end)
135
+ return undefined;
136
+ outer.end = quote.end;
137
+ return alertMarks(node, quote, source);
138
+ };
139
+ };
140
+ //# sourceMappingURL=template-syntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-syntax.js","sourceRoot":"","sources":["../src/template-syntax.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 箇条書きや表のすぐ上に書いた文の塊。予告の文(以下の3点)や、割合の表の説明(売上の構成比)を読む rule が使う。
3
+ * 文書の頭まで読み返さないので、箇条書きや表の多い長い文書でも行数に比例する。
4
+ */
5
+ export type TextBlock = {
6
+ readonly start: number;
7
+ readonly text: string;
8
+ };
9
+ export declare const isBlank: (text: string) => boolean;
10
+ /** start の行の一つ上の行。文書の最初の行なら undefined。 */
11
+ export declare const lineAbove: (source: string, start: number) => TextBlock | undefined;
12
+ /**
13
+ * start の行より上の塊を、下の行から上へ。passed に当たる行(表の見出しの行など)と空行は、塊に着くまで飛ばす。
14
+ * 塊は次の空行まで。箇条書きの印で始まる行(親の項目)はそこで止める。下の行から順に返す。
15
+ */
16
+ export declare const linesAbove: (source: string, start: number, passed?: (text: string) => boolean) => TextBlock[];
17
+ /** 下の行から並べた塊を、一続きの文字列にする。 */
18
+ export declare const joined: (source: string, lines: readonly TextBlock[]) => TextBlock | undefined;
19
+ //# sourceMappingURL=text-above.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-above.d.ts","sourceRoot":"","sources":["../src/text-above.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAK1E,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,OAA2B,CAAC;AAQnE,0CAA0C;AAC1C,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,SAAS,GAAG,SAIrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,SAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,OAAqB,KAAG,SAAS,EAapH,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,SAAS,SAAS,EAAE,KAAG,SAAS,GAAG,SAIhF,CAAC"}
@@ -0,0 +1,43 @@
1
+ const BLANK = /^[ \t]*$/u;
2
+ const LIST_MARKER = /^[ \t]*(?:[-*+]|\d{1,3}[.)])[ \t]/u;
3
+ export const isBlank = (text) => BLANK.test(text);
4
+ /** 位置 end の改行で終わる行。 */
5
+ const lineEndingAt = (source, end) => {
6
+ const start = end === 0 ? 0 : source.lastIndexOf("\n", end - 1) + 1;
7
+ return { start, text: source.slice(start, end) };
8
+ };
9
+ /** start の行の一つ上の行。文書の最初の行なら undefined。 */
10
+ export const lineAbove = (source, start) => {
11
+ if (start === 0)
12
+ return undefined;
13
+ const end = source.lastIndexOf("\n", start - 1);
14
+ return end < 0 ? undefined : lineEndingAt(source, end);
15
+ };
16
+ /**
17
+ * start の行より上の塊を、下の行から上へ。passed に当たる行(表の見出しの行など)と空行は、塊に着くまで飛ばす。
18
+ * 塊は次の空行まで。箇条書きの印で始まる行(親の項目)はそこで止める。下の行から順に返す。
19
+ */
20
+ export const linesAbove = (source, start, passed = () => false) => {
21
+ const block = [];
22
+ let line = lineAbove(source, start);
23
+ while (line !== undefined) {
24
+ if (isBlank(line.text) || (block.length === 0 && passed(line.text))) {
25
+ if (block.length > 0)
26
+ break;
27
+ }
28
+ else {
29
+ block.push(line);
30
+ if (LIST_MARKER.test(line.text))
31
+ break;
32
+ }
33
+ line = lineAbove(source, line.start);
34
+ }
35
+ return block;
36
+ };
37
+ /** 下の行から並べた塊を、一続きの文字列にする。 */
38
+ export const joined = (source, lines) => {
39
+ const top = lines.at(-1);
40
+ const bottom = lines[0];
41
+ return top === undefined || bottom === undefined ? undefined : { start: top.start, text: source.slice(top.start, bottom.start + bottom.text.length) };
42
+ };
43
+ //# sourceMappingURL=text-above.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-above.js","sourceRoot":"","sources":["../src/text-above.ts"],"names":[],"mappings":"AAMA,MAAM,KAAK,GAAG,WAAW,CAAC;AAC1B,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnE,uBAAuB;AACvB,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,GAAW,EAAa,EAAE;IAC9D,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,KAAa,EAAyB,EAAE;IAChF,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAChD,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,SAAoC,GAAG,EAAE,CAAC,KAAK,EAAe,EAAE;IACxH,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM;QAC9B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM;QACzC,CAAC;QACD,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,KAA2B,EAAyB,EAAE;IAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACxJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Span } from "./plugin.ts";
2
+ import type { MarkdownNode } from "./markdown-node.ts";
3
+ /**
4
+ * テキストの図の範囲。最初の行の頭から最後の行の終わりまで(あいだの空行も入る)。source は LF でそろえたもの。
5
+ * skip は図と別に読む範囲(Markdown のコード・表・HTML・見出し)。その中の行は図の行に数えない。
6
+ */
7
+ export declare const textFigures: (source: string, skip?: readonly Span[]) => Span[];
8
+ /** Markdown の図。コード・表・HTML・見出しの外に描かれたものだけ。 */
9
+ export declare const markdownFigures: (root: MarkdownNode, source: string) => Span[];
10
+ //# sourceMappingURL=text-figures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-figures.d.ts","sourceRoot":"","sources":["../src/text-figures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA8HvD;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,OAAM,SAAS,IAAI,EAAO,KAAG,IAAI,EAGA,CAAC;AAK9E,6CAA6C;AAC7C,eAAO,MAAM,eAAe,GAAI,MAAM,YAAY,EAAE,QAAQ,MAAM,KAAG,IAAI,EAItE,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { mergeSpans } from "./span-merge.js";
2
+ import { spansOfType } from "./markdown-read.js";
3
+ /**
4
+ * 線と矢印で描いた図(RFC の状態遷移図、やり取りの図、枠の表)。文ではないので、コードブロックと同じく本文から外す。
5
+ *
6
+ * 見分けるのは形だけ。線の文字が多いか、語のあいだを 3 字以上空けて桁をそろえた行で、文の句読点が無いもの。
7
+ * そういう行が続く塊(行のあいだの空行は 1 行まで)のうち、2 行以上あり、線の行を 1 行でも含むものを図とする。
8
+ * 句読点の無い短い行(図の中の「(Close)」)は、図の行に挟まれていれば図に入る。塊の端にあれば入らない。
9
+ * 語の多い行は、句読点が無くても文の行(折り返した文の途中)として塊を切る。
10
+ * 桁をそろえただけの語の表は、線が無ければ本文のまま読む。
11
+ */
12
+ /** 線を引く文字。ASCII の + - | / \ < > ^ = と、U+2500 台の罫線・U+25A0 台の図形(▶ ▼)。 */
13
+ const LINE_CHAR = /[+\-|/\\<>^=\u2500-\u25FF]/gu;
14
+ /** 下向きの矢印として一文字で立つ v。語の中の v は数えない。 */
15
+ const ARROW_V = /(?<=^|\s)[vV](?=\s|$)/gu;
16
+ /** 線の文字が 3 つ続けば線(-->、+---+、<==)。 */
17
+ const LINE_RUN = /[+\-|/\\<>^=\u2500-\u25FF]{3,}/gu;
18
+ /** ただし「---」ちょうどは、語のあいだのダッシュ(47.041 --- Engineering)。 */
19
+ const DASH = /^-{3}$/u;
20
+ /** 行の空白以外の文字のうち、この割合以上が線の文字なら線の行。「== Community ==」のような見出しの印は半分に届かない。 */
21
+ const LINE_SHARE = 0.5;
22
+ /** 割合で線の行と読むのに要る、線の文字の数。箇条書きの「- EU」は印が 1 つだけ。 */
23
+ const MIN_LINE_CHARS = 2;
24
+ /** 語のあいだの 3 字以上の空白は、桁をそろえた印。文の区切りの空白は 2 字まで(RFC は文のあいだを 2 字空ける)。 */
25
+ const COLUMN_GAP = /\S {3,}\S/u;
26
+ /** 文の印: 語の直後の句読点に、次の語が続く("reply. It"、"link, then")。日本語は句点か読点があれば文。 */
27
+ const SENTENCE = /\p{L}\p{L}[.,;:?!]["')\]]?\s+\p{L}|[。、]/u;
28
+ /**
29
+ * 行末で終わる文("alpha Sends requests."、"beta Uses TCP.")。見るのは最後の桁で、小文字の語があり . ? ! で終わるもの。
30
+ * 括弧で閉じた注記("(return to LISTEN!)")と省略の点("...")は図の中の書き方で、文の終わりではない。
31
+ */
32
+ const SENTENCE_END = /[^.][.?!]["'”’]?$/u;
33
+ const LOWER_WORD = /\p{Ll}\p{Ll}/u;
34
+ const LAST_CELL = / {3,}/u;
35
+ const endsSentence = (text) => {
36
+ const cell = text.trim().split(LAST_CELL).at(-1) ?? "";
37
+ return SENTENCE_END.test(cell) && LOWER_WORD.test(cell);
38
+ };
39
+ /**
40
+ * 同じ線の文字だけの行(-----、==== ====)。見出しの下線や段の区切りで、図の中にあってもよいが図の印にはならない。
41
+ * 印にすると、区切りの線 2 本に挟まれた題(===== / Title / =====)や、下線を引いた見出しの前の箇条書きまで図になる。
42
+ */
43
+ const RULE_LINE = /^\s*([-=_~*])\1*(?:\s+\1+)*\s*$/u;
44
+ /** 行頭の箇条書きの印(-、*、+、1.、a))。印の後ろの空白は桁そろえではない。 */
45
+ const LIST_MARK = /^\s*(?:[-*+]|\p{N}{1,3}[.)]|\p{L}[.)])(?=\s)/u;
46
+ /** 語。句読点の無い行でも、語が多ければ文の一部(折り返した文の行)で、図の中の注記ではない。 */
47
+ const WORD = /\p{L}[\p{L}\p{N}'-]*/gu;
48
+ /** 図の中の注記(「(Close)」「(2 MSL)」「CLOSED」)の語の数の上限。 */
49
+ const MAX_PLAIN_WORDS = 4;
50
+ /** 図の中で、行と行のあいだに置ける空行の数。 */
51
+ const MAX_BLANK_RUN = 1;
52
+ /** 図と読むのに要る行の数。区切りの線 1 行は図ではない。 */
53
+ const MIN_FIGURE_LINES = 2;
54
+ const matchesOf = (text, pattern) => [...text.matchAll(pattern)].map((match) => match[0]);
55
+ const count = (text, pattern) => matchesOf(text, pattern).length;
56
+ /** 箇条書きの印は線に数えない(「- /」はパンくずの区切り)。 */
57
+ const isLineArt = (text) => {
58
+ const body = text.replace(LIST_MARK, "");
59
+ const visible = body.replace(/\s/gu, "").length;
60
+ const drawn = count(body, LINE_CHAR) + count(body, ARROW_V);
61
+ return matchesOf(body, LINE_RUN).some((run) => !DASH.test(run)) || (drawn >= MIN_LINE_CHARS && drawn >= visible * LINE_SHARE);
62
+ };
63
+ const kindOf = (text) => {
64
+ if (text.trim() === "")
65
+ return "blank";
66
+ if (SENTENCE.test(text) || endsSentence(text))
67
+ return "text";
68
+ if (RULE_LINE.test(text))
69
+ return "plain";
70
+ if (isLineArt(text))
71
+ return "line";
72
+ if (COLUMN_GAP.test(text.replace(LIST_MARK, "").trimStart()))
73
+ return "column";
74
+ return count(text, WORD) > MAX_PLAIN_WORDS ? "text" : "plain";
75
+ };
76
+ /** skip の中で始まる行は、文の行と同じく塊を切る。行も範囲も先頭から順に進むので、行ごとに範囲を全部なめない。 */
77
+ const rowsOf = (source, skip) => {
78
+ const regions = mergeSpans(skip, false);
79
+ const scan = { start: 0, region: 0 };
80
+ return source.split("\n").map((text) => {
81
+ while ((regions[scan.region]?.end ?? Number.POSITIVE_INFINITY) <= scan.start)
82
+ scan.region += 1;
83
+ const region = regions[scan.region];
84
+ const skipped = region !== undefined && region.start <= scan.start;
85
+ const row = { start: scan.start, end: scan.start + text.length, kind: skipped ? "text" : kindOf(text) };
86
+ scan.start = row.end + 1;
87
+ return row;
88
+ });
89
+ };
90
+ /** 図の行の塊。空行が MAX_BLANK_RUN を超えて続くか、文の行が来たら切れる。塊の端の空行と句読点の無い行は入れない。 */
91
+ const runsOf = (rows) => {
92
+ // 行ごとに配列を作り直すと、何万行の文書で行数の二乗になる。塊は押し足していく。
93
+ const runs = [[]];
94
+ const scan = { blanks: 0 };
95
+ const cut = () => {
96
+ if ((runs.at(-1) ?? []).length > 0)
97
+ runs.push([]);
98
+ };
99
+ rows.forEach((row) => {
100
+ if (row.kind === "blank") {
101
+ scan.blanks += 1;
102
+ if (scan.blanks > MAX_BLANK_RUN)
103
+ cut();
104
+ return;
105
+ }
106
+ scan.blanks = 0;
107
+ if (row.kind === "text")
108
+ cut();
109
+ else
110
+ runs.at(-1)?.push(row);
111
+ });
112
+ return runs.map(trimPlain).filter((run) => run.length > 0);
113
+ };
114
+ const isDrawn = (row) => row.kind === "line" || row.kind === "column";
115
+ const trimPlain = (run) => {
116
+ const first = run.findIndex(isDrawn);
117
+ return first === -1 ? [] : run.slice(first, run.findLastIndex(isDrawn) + 1);
118
+ };
119
+ const isFigure = (run) => run.filter(isDrawn).length >= MIN_FIGURE_LINES && run.some((row) => row.kind === "line");
120
+ /**
121
+ * テキストの図の範囲。最初の行の頭から最後の行の終わりまで(あいだの空行も入る)。source は LF でそろえたもの。
122
+ * skip は図と別に読む範囲(Markdown のコード・表・HTML・見出し)。その中の行は図の行に数えない。
123
+ */
124
+ export const textFigures = (source, skip = []) => runsOf(rowsOf(source, skip))
125
+ .filter(isFigure)
126
+ .map((run) => ({ start: run[0]?.start ?? 0, end: run.at(-1)?.end ?? 0 }));
127
+ /** Markdown が図と別に読む塊。この中の線は図として探さない(コードはもともと本文でなく、表の区切りの行は表、見出しは見出し)。 */
128
+ const NOT_FIGURE = ["code", "table", "html", "heading"];
129
+ /** Markdown の図。コード・表・HTML・見出しの外に描かれたものだけ。 */
130
+ export const markdownFigures = (root, source) => textFigures(source, NOT_FIGURE.flatMap((type) => spansOfType(root, type)));
131
+ //# sourceMappingURL=text-figures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-figures.js","sourceRoot":"","sources":["../src/text-figures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ownEnd: (text: string) => number;
2
+ //# sourceMappingURL=trailing-aside.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailing-aside.d.ts","sourceRoot":"","sources":["../src/trailing-aside.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,MAQrC,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 文末に添えた括弧(「最優先制約とする(§17)。」の(§17))を除いた、文そのものの終わり。
3
+ * 括弧が注記そのもの(文全体が括弧か、終わった文の後ろで「。)」と閉じる)なら、文末はその中にある。
4
+ * 述語に続く括弧は、中で文が終わっていても添え物(「費用(…を除く。)」)。続けて添えた括弧は全部除く。
5
+ *
6
+ * 後ろから一度だけ読む。法令の文は数千字あり、添えた括弧が何百も続くことがある。
7
+ */
8
+ const OPEN = new Set(["(", "("]);
9
+ const CLOSE = new Set([")", ")"]);
10
+ const STOPS = new Set(["。", ".", "!", "?", "!", "?"]);
11
+ const LINE_BREAKS = new Set(["\n", "\r"]);
12
+ const isSpace = (unit) => /\s/u.test(unit);
13
+ const isInlineSpace = (unit) => unit === " " || unit === "\t" || unit === " ";
14
+ /** before より前で、skip に当たらない最後の位置。無ければ -1。 */
15
+ const lastBefore = (text, before, skip) => {
16
+ let index = before - 1;
17
+ while (index >= 0 && skip(text.charAt(index)))
18
+ index -= 1;
19
+ return index;
20
+ };
21
+ /** closeAt の閉じ括弧と対になる開き括弧の位置。対が無ければ undefined。 */
22
+ const openingOf = (text, closeAt) => {
23
+ let depth = 0;
24
+ for (let index = closeAt - 1; index >= 0; index -= 1) {
25
+ const unit = text.charAt(index);
26
+ if (CLOSE.has(unit))
27
+ depth += 1;
28
+ else if (OPEN.has(unit) && depth === 0)
29
+ return index;
30
+ else if (OPEN.has(unit))
31
+ depth -= 1;
32
+ }
33
+ return undefined;
34
+ };
35
+ /** open から closeAt までの括弧が注記そのもの: 文の頭にあるか、終わった文の後ろで、中の文が終わっている。 */
36
+ const isNote = (text, open, closeAt) => {
37
+ if (lastBefore(text, open, isSpace) === -1)
38
+ return true;
39
+ const previous = text.charAt(lastBefore(text, open, isInlineSpace));
40
+ const inner = lastBefore(text, closeAt, isSpace);
41
+ return (STOPS.has(previous) || LINE_BREAKS.has(previous)) && inner > open && STOPS.has(text.charAt(inner));
42
+ };
43
+ export const ownEnd = (text) => {
44
+ let limit = text.length;
45
+ for (;;) {
46
+ const closeAt = lastBefore(text, limit, (unit) => isSpace(unit) || STOPS.has(unit));
47
+ const open = CLOSE.has(text.charAt(closeAt)) ? openingOf(text, closeAt) : undefined;
48
+ if (open === undefined)
49
+ return limit;
50
+ limit = isNote(text, open, closeAt) ? closeAt : open;
51
+ }
52
+ };
53
+ //# sourceMappingURL=trailing-aside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailing-aside.js","sourceRoot":"","sources":["../src/trailing-aside.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Walks over the Markdown tree and the structure tree. Both keep their own stack instead of recursing:
3
+ * a blockquote nested ten thousand levels deep is valid Markdown, and one call per level overflows the call stack.
4
+ */
5
+ type Branching<T> = {
6
+ readonly children?: readonly T[] | undefined;
7
+ };
8
+ /** Each node before its children, children from the left: the order a recursive walk visits them. */
9
+ export declare const eachPreOrder: <T extends Branching<T>>(root: T, visit: (node: T) => void) => void;
10
+ /** The nodes in pre-order. */
11
+ export declare const preOrder: <T extends Branching<T>>(root: T) => T[];
12
+ /**
13
+ * Each node's value from its children's values: children first, from the left, then the node. depth is 0 at the root.
14
+ * The same calls in the same order as `combine(node, childrenOf(node).map(recurse), depth)`.
15
+ */
16
+ export declare const foldPostOrder: <T, R>(root: T, childrenOf: (node: T) => readonly T[], combine: (node: T, children: readonly R[], depth: number) => R) => R;
17
+ export {};
18
+ //# sourceMappingURL=tree-walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-walk.d.ts","sourceRoot":"","sources":["../src/tree-walk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,SAAS,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC;AAErE,qGAAqG;AACrG,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAG,IAQxF,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAG,CAAC,EAI3D,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,KAAG,CAgBpJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Walks over the Markdown tree and the structure tree. Both keep their own stack instead of recursing:
3
+ * a blockquote nested ten thousand levels deep is valid Markdown, and one call per level overflows the call stack.
4
+ */
5
+ /** Each node before its children, children from the left: the order a recursive walk visits them. */
6
+ export const eachPreOrder = (root, visit) => {
7
+ const pending = [root];
8
+ while (pending.length > 0) {
9
+ const node = pending.pop();
10
+ if (node === undefined)
11
+ return;
12
+ visit(node);
13
+ (node.children ?? []).toReversed().forEach((child) => pending.push(child));
14
+ }
15
+ };
16
+ /** The nodes in pre-order. */
17
+ export const preOrder = (root) => {
18
+ const nodes = [];
19
+ eachPreOrder(root, (node) => nodes.push(node));
20
+ return nodes;
21
+ };
22
+ /**
23
+ * Each node's value from its children's values: children first, from the left, then the node. depth is 0 at the root.
24
+ * The same calls in the same order as `combine(node, childrenOf(node).map(recurse), depth)`.
25
+ */
26
+ export const foldPostOrder = (root, childrenOf, combine) => {
27
+ const frames = [{ node: root, children: childrenOf(root), results: [] }];
28
+ for (;;) {
29
+ const frame = frames.at(-1);
30
+ if (frame === undefined)
31
+ throw new Error("foldPostOrder lost its root");
32
+ const next = frame.children[frame.results.length];
33
+ if (next !== undefined) {
34
+ frames.push({ node: next, children: childrenOf(next), results: [] });
35
+ continue;
36
+ }
37
+ frames.pop();
38
+ const value = combine(frame.node, frame.results, frames.length);
39
+ const parent = frames.at(-1);
40
+ if (parent === undefined)
41
+ return value;
42
+ parent.results.push(value);
43
+ }
44
+ };
45
+ //# sourceMappingURL=tree-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-walk.js","sourceRoot":"","sources":["../src/tree-walk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qGAAqG;AACrG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAyB,IAAO,EAAE,KAAwB,EAAQ,EAAE;IAC9F,MAAM,OAAO,GAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO;QAC/B,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC;AAEF,8BAA8B;AAC9B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAyB,IAAO,EAAO,EAAE;IAC/D,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAIF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,IAAO,EAAE,UAAqC,EAAE,OAA8D,EAAK,EAAE;IACvJ,MAAM,MAAM,GAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACxF,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC"}
package/genres.yaml CHANGED
@@ -47,6 +47,10 @@ groups:
47
47
  paragraph-length-variance: off
48
48
  ai-tell: off
49
49
  ai-generated-composite: off
50
+ contrast-framing: off
51
+ stock-transition: off
52
+ announcing-opener: off
53
+ colon-lead-in: off
50
54
  # A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up.
51
55
  - id: docs
52
56
  name: { ja: 説明書, en: Documentation }
@@ -71,6 +75,10 @@ groups:
71
75
  paragraph-length-variance: off
72
76
  ai-tell: off
73
77
  ai-generated-composite: off
78
+ contrast-framing: off
79
+ stock-transition: off
80
+ announcing-opener: off
81
+ colon-lead-in: off
74
82
  # Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence.
75
83
  - id: academic
76
84
  name: { ja: 学術, en: Academic }
@@ -91,6 +99,7 @@ groups:
91
99
  rule-of-three: off
92
100
  section-length-uniformity: off
93
101
  paragraph-length-variance: off
102
+ stock-transition: off
94
103
  # Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles.
95
104
  # Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps.
96
105
  - id: literature
@@ -135,11 +144,19 @@ groups:
135
144
  paragraph-length-variance: off
136
145
  ai-tell: off
137
146
  ai-generated-composite: off
147
+ contrast-framing: off
148
+ stock-transition: off
149
+ announcing-opener: off
150
+ colon-lead-in: off
138
151
  dangling-reference: off
139
152
  duplicate-definition: off
140
153
  date-order: off
141
154
  date-weekday-mismatch: off
142
155
  total-mismatch: off
156
+ announced-count-mismatch: off
157
+ dangling-figure-reference: off
158
+ date-range-reversed: off
159
+ percent-sum-mismatch: off
143
160
  # A speech opens with greetings and closes with thanks: that is its form, not padding.
144
161
  - id: speech
145
162
  name: { ja: 話し言葉, en: Speech }
@@ -154,6 +171,10 @@ groups:
154
171
  rule-of-three: off
155
172
  section-length-uniformity: off
156
173
  paragraph-length-variance: off
174
+ contrast-framing: off
175
+ stock-transition: off
176
+ announcing-opener: off
177
+ colon-lead-in: off
157
178
 
158
179
  genres:
159
180
  - id: technical/spec
@@ -231,6 +252,8 @@ genres:
231
252
  dangling-reference: normal
232
253
  date-weekday-mismatch: normal
233
254
  total-mismatch: normal
255
+ dangling-figure-reference: normal
256
+ date-range-reversed: normal
234
257
  - id: legal/statute
235
258
  name: { ja: 法令・規程, en: Statute and regulation }
236
259
  summary:
@@ -250,6 +273,8 @@ genres:
250
273
  dangling-reference: normal
251
274
  date-weekday-mismatch: normal
252
275
  total-mismatch: normal
276
+ dangling-figure-reference: normal
277
+ date-range-reversed: normal
253
278
  - id: legal/judgment
254
279
  name: { ja: 判決, en: Court decision }
255
280
  summary:
@@ -393,3 +418,4 @@ genres:
393
418
  undefined-acronym: off
394
419
  ai-tell: off
395
420
  ai-generated-composite: off
421
+ assistant-residue: off