docrev 0.8.1 → 0.8.5

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 (306) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/PLAN-tables-and-postprocess.md +850 -0
  3. package/README.md +33 -0
  4. package/bin/rev.js +12 -131
  5. package/bin/rev.ts +145 -0
  6. package/dist/bin/rev.d.ts +9 -0
  7. package/dist/bin/rev.d.ts.map +1 -0
  8. package/dist/bin/rev.js +118 -0
  9. package/dist/bin/rev.js.map +1 -0
  10. package/dist/lib/annotations.d.ts +91 -0
  11. package/dist/lib/annotations.d.ts.map +1 -0
  12. package/dist/lib/annotations.js +554 -0
  13. package/dist/lib/annotations.js.map +1 -0
  14. package/dist/lib/build.d.ts +171 -0
  15. package/dist/lib/build.d.ts.map +1 -0
  16. package/dist/lib/build.js +755 -0
  17. package/dist/lib/build.js.map +1 -0
  18. package/dist/lib/citations.d.ts +34 -0
  19. package/dist/lib/citations.d.ts.map +1 -0
  20. package/dist/lib/citations.js +140 -0
  21. package/dist/lib/citations.js.map +1 -0
  22. package/dist/lib/commands/build.d.ts +13 -0
  23. package/dist/lib/commands/build.d.ts.map +1 -0
  24. package/dist/lib/commands/build.js +678 -0
  25. package/dist/lib/commands/build.js.map +1 -0
  26. package/dist/lib/commands/citations.d.ts +11 -0
  27. package/dist/lib/commands/citations.d.ts.map +1 -0
  28. package/dist/lib/commands/citations.js +428 -0
  29. package/dist/lib/commands/citations.js.map +1 -0
  30. package/dist/lib/commands/comments.d.ts +11 -0
  31. package/dist/lib/commands/comments.d.ts.map +1 -0
  32. package/dist/lib/commands/comments.js +883 -0
  33. package/dist/lib/commands/comments.js.map +1 -0
  34. package/dist/lib/commands/context.d.ts +35 -0
  35. package/dist/lib/commands/context.d.ts.map +1 -0
  36. package/dist/lib/commands/context.js +59 -0
  37. package/dist/lib/commands/context.js.map +1 -0
  38. package/dist/lib/commands/core.d.ts +11 -0
  39. package/dist/lib/commands/core.d.ts.map +1 -0
  40. package/dist/lib/commands/core.js +246 -0
  41. package/dist/lib/commands/core.js.map +1 -0
  42. package/dist/lib/commands/doi.d.ts +11 -0
  43. package/dist/lib/commands/doi.d.ts.map +1 -0
  44. package/dist/lib/commands/doi.js +373 -0
  45. package/dist/lib/commands/doi.js.map +1 -0
  46. package/dist/lib/commands/history.d.ts +11 -0
  47. package/dist/lib/commands/history.d.ts.map +1 -0
  48. package/dist/lib/commands/history.js +245 -0
  49. package/dist/lib/commands/history.js.map +1 -0
  50. package/dist/lib/commands/index.d.ts +28 -0
  51. package/dist/lib/commands/index.d.ts.map +1 -0
  52. package/dist/lib/commands/index.js +35 -0
  53. package/dist/lib/commands/index.js.map +1 -0
  54. package/dist/lib/commands/init.d.ts +11 -0
  55. package/dist/lib/commands/init.d.ts.map +1 -0
  56. package/dist/lib/commands/init.js +209 -0
  57. package/dist/lib/commands/init.js.map +1 -0
  58. package/dist/lib/commands/response.d.ts +11 -0
  59. package/dist/lib/commands/response.d.ts.map +1 -0
  60. package/dist/lib/commands/response.js +317 -0
  61. package/dist/lib/commands/response.js.map +1 -0
  62. package/dist/lib/commands/sections.d.ts +11 -0
  63. package/dist/lib/commands/sections.d.ts.map +1 -0
  64. package/dist/lib/commands/sections.js +1071 -0
  65. package/dist/lib/commands/sections.js.map +1 -0
  66. package/dist/lib/commands/utilities.d.ts +19 -0
  67. package/dist/lib/commands/utilities.d.ts.map +1 -0
  68. package/dist/lib/commands/utilities.js +2009 -0
  69. package/dist/lib/commands/utilities.js.map +1 -0
  70. package/dist/lib/comment-realign.d.ts +50 -0
  71. package/dist/lib/comment-realign.d.ts.map +1 -0
  72. package/dist/lib/comment-realign.js +372 -0
  73. package/dist/lib/comment-realign.js.map +1 -0
  74. package/dist/lib/config.d.ts +41 -0
  75. package/dist/lib/config.d.ts.map +1 -0
  76. package/dist/lib/config.js +76 -0
  77. package/dist/lib/config.js.map +1 -0
  78. package/dist/lib/crossref.d.ts +108 -0
  79. package/dist/lib/crossref.d.ts.map +1 -0
  80. package/dist/lib/crossref.js +597 -0
  81. package/dist/lib/crossref.js.map +1 -0
  82. package/dist/lib/dependencies.d.ts +30 -0
  83. package/dist/lib/dependencies.d.ts.map +1 -0
  84. package/dist/lib/dependencies.js +95 -0
  85. package/dist/lib/dependencies.js.map +1 -0
  86. package/dist/lib/doi-cache.d.ts +29 -0
  87. package/dist/lib/doi-cache.d.ts.map +1 -0
  88. package/dist/lib/doi-cache.js +104 -0
  89. package/dist/lib/doi-cache.js.map +1 -0
  90. package/dist/lib/doi.d.ts +65 -0
  91. package/dist/lib/doi.d.ts.map +1 -0
  92. package/dist/lib/doi.js +710 -0
  93. package/dist/lib/doi.js.map +1 -0
  94. package/dist/lib/equations.d.ts +61 -0
  95. package/dist/lib/equations.d.ts.map +1 -0
  96. package/dist/lib/equations.js +445 -0
  97. package/dist/lib/equations.js.map +1 -0
  98. package/dist/lib/errors.d.ts +60 -0
  99. package/dist/lib/errors.d.ts.map +1 -0
  100. package/dist/lib/errors.js +303 -0
  101. package/dist/lib/errors.js.map +1 -0
  102. package/dist/lib/format.d.ts +104 -0
  103. package/dist/lib/format.d.ts.map +1 -0
  104. package/dist/lib/format.js +416 -0
  105. package/dist/lib/format.js.map +1 -0
  106. package/dist/lib/git.d.ts +88 -0
  107. package/dist/lib/git.d.ts.map +1 -0
  108. package/dist/lib/git.js +304 -0
  109. package/dist/lib/git.js.map +1 -0
  110. package/dist/lib/grammar.d.ts +62 -0
  111. package/dist/lib/grammar.d.ts.map +1 -0
  112. package/dist/lib/grammar.js +244 -0
  113. package/dist/lib/grammar.js.map +1 -0
  114. package/dist/lib/image-registry.d.ts +68 -0
  115. package/dist/lib/image-registry.d.ts.map +1 -0
  116. package/dist/lib/image-registry.js +112 -0
  117. package/dist/lib/image-registry.js.map +1 -0
  118. package/dist/lib/import.d.ts +184 -0
  119. package/dist/lib/import.d.ts.map +1 -0
  120. package/dist/lib/import.js +1581 -0
  121. package/dist/lib/import.js.map +1 -0
  122. package/dist/lib/journals.d.ts +55 -0
  123. package/dist/lib/journals.d.ts.map +1 -0
  124. package/dist/lib/journals.js +417 -0
  125. package/dist/lib/journals.js.map +1 -0
  126. package/dist/lib/merge.d.ts +138 -0
  127. package/dist/lib/merge.d.ts.map +1 -0
  128. package/dist/lib/merge.js +603 -0
  129. package/dist/lib/merge.js.map +1 -0
  130. package/dist/lib/orcid.d.ts +36 -0
  131. package/dist/lib/orcid.d.ts.map +1 -0
  132. package/dist/lib/orcid.js +117 -0
  133. package/dist/lib/orcid.js.map +1 -0
  134. package/dist/lib/pdf-comments.d.ts +95 -0
  135. package/dist/lib/pdf-comments.d.ts.map +1 -0
  136. package/dist/lib/pdf-comments.js +192 -0
  137. package/dist/lib/pdf-comments.js.map +1 -0
  138. package/dist/lib/pdf-import.d.ts +118 -0
  139. package/dist/lib/pdf-import.d.ts.map +1 -0
  140. package/dist/lib/pdf-import.js +397 -0
  141. package/dist/lib/pdf-import.js.map +1 -0
  142. package/dist/lib/plugins.d.ts +76 -0
  143. package/dist/lib/plugins.d.ts.map +1 -0
  144. package/dist/lib/plugins.js +235 -0
  145. package/dist/lib/plugins.js.map +1 -0
  146. package/dist/lib/postprocess.d.ts +42 -0
  147. package/dist/lib/postprocess.d.ts.map +1 -0
  148. package/dist/lib/postprocess.js +138 -0
  149. package/dist/lib/postprocess.js.map +1 -0
  150. package/dist/lib/pptx-template.d.ts +59 -0
  151. package/dist/lib/pptx-template.d.ts.map +1 -0
  152. package/dist/lib/pptx-template.js +613 -0
  153. package/dist/lib/pptx-template.js.map +1 -0
  154. package/dist/lib/pptx-themes.d.ts +80 -0
  155. package/dist/lib/pptx-themes.d.ts.map +1 -0
  156. package/dist/lib/pptx-themes.js +818 -0
  157. package/dist/lib/pptx-themes.js.map +1 -0
  158. package/dist/lib/protect-restore.d.ts +137 -0
  159. package/dist/lib/protect-restore.d.ts.map +1 -0
  160. package/dist/lib/protect-restore.js +394 -0
  161. package/dist/lib/protect-restore.js.map +1 -0
  162. package/dist/lib/rate-limiter.d.ts +27 -0
  163. package/dist/lib/rate-limiter.d.ts.map +1 -0
  164. package/dist/lib/rate-limiter.js +79 -0
  165. package/dist/lib/rate-limiter.js.map +1 -0
  166. package/dist/lib/response.d.ts +41 -0
  167. package/dist/lib/response.d.ts.map +1 -0
  168. package/dist/lib/response.js +150 -0
  169. package/dist/lib/response.js.map +1 -0
  170. package/dist/lib/review.d.ts +35 -0
  171. package/dist/lib/review.d.ts.map +1 -0
  172. package/dist/lib/review.js +263 -0
  173. package/dist/lib/review.js.map +1 -0
  174. package/dist/lib/schema.d.ts +66 -0
  175. package/dist/lib/schema.d.ts.map +1 -0
  176. package/dist/lib/schema.js +339 -0
  177. package/dist/lib/schema.js.map +1 -0
  178. package/dist/lib/scientific-words.d.ts +6 -0
  179. package/dist/lib/scientific-words.d.ts.map +1 -0
  180. package/dist/lib/scientific-words.js +66 -0
  181. package/dist/lib/scientific-words.js.map +1 -0
  182. package/dist/lib/sections.d.ts +40 -0
  183. package/dist/lib/sections.d.ts.map +1 -0
  184. package/dist/lib/sections.js +288 -0
  185. package/dist/lib/sections.js.map +1 -0
  186. package/dist/lib/slides.d.ts +86 -0
  187. package/dist/lib/slides.d.ts.map +1 -0
  188. package/dist/lib/slides.js +676 -0
  189. package/dist/lib/slides.js.map +1 -0
  190. package/dist/lib/spelling.d.ts +76 -0
  191. package/dist/lib/spelling.d.ts.map +1 -0
  192. package/dist/lib/spelling.js +272 -0
  193. package/dist/lib/spelling.js.map +1 -0
  194. package/dist/lib/templates.d.ts +30 -0
  195. package/dist/lib/templates.d.ts.map +1 -0
  196. package/dist/lib/templates.js +504 -0
  197. package/dist/lib/templates.js.map +1 -0
  198. package/dist/lib/themes.d.ts +85 -0
  199. package/dist/lib/themes.d.ts.map +1 -0
  200. package/dist/lib/themes.js +652 -0
  201. package/dist/lib/themes.js.map +1 -0
  202. package/dist/lib/trackchanges.d.ts +51 -0
  203. package/dist/lib/trackchanges.d.ts.map +1 -0
  204. package/dist/lib/trackchanges.js +202 -0
  205. package/dist/lib/trackchanges.js.map +1 -0
  206. package/dist/lib/tui.d.ts +76 -0
  207. package/dist/lib/tui.d.ts.map +1 -0
  208. package/dist/lib/tui.js +377 -0
  209. package/dist/lib/tui.js.map +1 -0
  210. package/dist/lib/types.d.ts +447 -0
  211. package/dist/lib/types.d.ts.map +1 -0
  212. package/dist/lib/types.js +6 -0
  213. package/dist/lib/types.js.map +1 -0
  214. package/dist/lib/undo.d.ts +57 -0
  215. package/dist/lib/undo.d.ts.map +1 -0
  216. package/dist/lib/undo.js +185 -0
  217. package/dist/lib/undo.js.map +1 -0
  218. package/dist/lib/utils.d.ts +16 -0
  219. package/dist/lib/utils.d.ts.map +1 -0
  220. package/dist/lib/utils.js +40 -0
  221. package/dist/lib/utils.js.map +1 -0
  222. package/dist/lib/variables.d.ts +42 -0
  223. package/dist/lib/variables.d.ts.map +1 -0
  224. package/dist/lib/variables.js +141 -0
  225. package/dist/lib/variables.js.map +1 -0
  226. package/dist/lib/word.d.ts +80 -0
  227. package/dist/lib/word.d.ts.map +1 -0
  228. package/dist/lib/word.js +360 -0
  229. package/dist/lib/word.js.map +1 -0
  230. package/dist/lib/wordcomments.d.ts +51 -0
  231. package/dist/lib/wordcomments.d.ts.map +1 -0
  232. package/dist/lib/wordcomments.js +587 -0
  233. package/dist/lib/wordcomments.js.map +1 -0
  234. package/eslint.config.js +27 -0
  235. package/lib/annotations.ts +622 -0
  236. package/lib/apply-buildup-colors.py +88 -0
  237. package/lib/build.ts +1013 -0
  238. package/lib/{citations.js → citations.ts} +38 -27
  239. package/lib/commands/{build.js → build.ts} +80 -27
  240. package/lib/commands/{citations.js → citations.ts} +36 -18
  241. package/lib/commands/{comments.js → comments.ts} +187 -54
  242. package/lib/commands/{context.js → context.ts} +18 -8
  243. package/lib/commands/{core.js → core.ts} +34 -20
  244. package/lib/commands/{doi.js → doi.ts} +32 -16
  245. package/lib/commands/{history.js → history.ts} +25 -12
  246. package/lib/commands/{index.js → index.ts} +9 -5
  247. package/lib/commands/{init.js → init.ts} +20 -8
  248. package/lib/commands/{response.js → response.ts} +47 -20
  249. package/lib/commands/{sections.js → sections.ts} +273 -68
  250. package/lib/commands/{utilities.js → utilities.ts} +338 -158
  251. package/lib/{comment-realign.js → comment-realign.ts} +117 -45
  252. package/lib/config.ts +84 -0
  253. package/lib/{crossref.js → crossref.ts} +213 -138
  254. package/lib/dependencies.ts +106 -0
  255. package/lib/doi-cache.ts +115 -0
  256. package/lib/{doi.js → doi.ts} +115 -281
  257. package/lib/{equations.js → equations.ts} +60 -64
  258. package/lib/{errors.js → errors.ts} +56 -48
  259. package/lib/{format.js → format.ts} +137 -63
  260. package/lib/{git.js → git.ts} +66 -63
  261. package/lib/{grammar.js → grammar.ts} +45 -32
  262. package/lib/image-registry.ts +180 -0
  263. package/lib/import.ts +2060 -0
  264. package/lib/journals.ts +505 -0
  265. package/lib/{merge.js → merge.ts} +185 -135
  266. package/lib/{orcid.js → orcid.ts} +17 -22
  267. package/lib/{pdf-comments.js → pdf-comments.ts} +76 -18
  268. package/lib/{pdf-import.js → pdf-import.ts} +148 -70
  269. package/lib/{plugins.js → plugins.ts} +82 -39
  270. package/lib/postprocess.ts +188 -0
  271. package/lib/pptx-color-filter.lua +37 -0
  272. package/lib/pptx-template.ts +625 -0
  273. package/lib/pptx-themes/academic.pptx +0 -0
  274. package/lib/pptx-themes/corporate.pptx +0 -0
  275. package/lib/pptx-themes/dark.pptx +0 -0
  276. package/lib/pptx-themes/default.pptx +0 -0
  277. package/lib/pptx-themes/minimal.pptx +0 -0
  278. package/lib/pptx-themes/plant.pptx +0 -0
  279. package/lib/pptx-themes.ts +896 -0
  280. package/lib/protect-restore.ts +516 -0
  281. package/lib/rate-limiter.ts +94 -0
  282. package/lib/{response.js → response.ts} +36 -21
  283. package/lib/{review.js → review.ts} +53 -43
  284. package/lib/{schema.js → schema.ts} +70 -25
  285. package/lib/{sections.js → sections.ts} +71 -76
  286. package/lib/slides.ts +793 -0
  287. package/lib/{spelling.js → spelling.ts} +43 -59
  288. package/lib/{templates.js → templates.ts} +20 -17
  289. package/lib/themes.ts +742 -0
  290. package/lib/{trackchanges.js → trackchanges.ts} +52 -23
  291. package/lib/types.ts +509 -0
  292. package/lib/{undo.js → undo.ts} +75 -52
  293. package/lib/utils.ts +41 -0
  294. package/lib/{variables.js → variables.ts} +60 -54
  295. package/lib/word.ts +428 -0
  296. package/lib/{wordcomments.js → wordcomments.ts} +94 -40
  297. package/package.json +15 -5
  298. package/skill/REFERENCE.md +67 -0
  299. package/tsconfig.json +26 -0
  300. package/lib/annotations.js +0 -414
  301. package/lib/build.js +0 -639
  302. package/lib/config.js +0 -79
  303. package/lib/import.js +0 -1145
  304. package/lib/journals.js +0 -629
  305. package/lib/word.js +0 -225
  306. /package/lib/{scientific-words.js → scientific-words.ts} +0 -0
@@ -0,0 +1,597 @@
1
+ /**
2
+ * Cross-reference handling - dynamic figure/table references
3
+ *
4
+ * Enables:
5
+ * - @fig:label syntax in source (auto-numbered)
6
+ * - Conversion to "Figure 1" in Word output
7
+ * - Auto-conversion back during import
8
+ */
9
+ import * as fs from 'fs';
10
+ import * as path from 'path';
11
+ import YAML from 'yaml';
12
+ // =============================================================================
13
+ // Constants
14
+ // =============================================================================
15
+ /** Characters of context to check before a reference for deduplication */
16
+ const REF_CONTEXT_WINDOW = 100;
17
+ /** Minimum word length for similarity calculations */
18
+ const MIN_WORD_LENGTH = 2;
19
+ // =============================================================================
20
+ // Internal Helpers
21
+ // =============================================================================
22
+ /**
23
+ * Discover section files from a directory by reading config files
24
+ * Only returns files explicitly defined in rev.yaml or sections.yaml
25
+ * Returns empty array if no config found (caller should handle this)
26
+ */
27
+ function discoverSectionFiles(directory) {
28
+ // Try rev.yaml first
29
+ const revYamlPath = path.join(directory, 'rev.yaml');
30
+ if (fs.existsSync(revYamlPath)) {
31
+ try {
32
+ const config = YAML.parse(fs.readFileSync(revYamlPath, 'utf-8'));
33
+ if (config.sections && Array.isArray(config.sections) && config.sections.length > 0) {
34
+ return config.sections.filter((f) => fs.existsSync(path.join(directory, f)));
35
+ }
36
+ }
37
+ catch (e) {
38
+ if (process.env.DEBUG) {
39
+ console.warn('crossref: YAML parse error in rev.yaml:', e.message);
40
+ }
41
+ }
42
+ }
43
+ // Try sections.yaml
44
+ const sectionsPath = path.join(directory, 'sections.yaml');
45
+ if (fs.existsSync(sectionsPath)) {
46
+ try {
47
+ const config = YAML.parse(fs.readFileSync(sectionsPath, 'utf-8'));
48
+ if (config.sections) {
49
+ const sectionOrder = Object.entries(config.sections)
50
+ .sort((a, b) => (a[1].order ?? 999) - (b[1].order ?? 999))
51
+ .map(([file]) => file);
52
+ return sectionOrder.filter((f) => fs.existsSync(path.join(directory, f)));
53
+ }
54
+ }
55
+ catch (e) {
56
+ if (process.env.DEBUG) {
57
+ console.warn('crossref: YAML parse error in sections.yaml:', e.message);
58
+ }
59
+ }
60
+ }
61
+ // No config found - return empty array
62
+ // Caller must handle this (either error or use explicit sections)
63
+ return [];
64
+ }
65
+ // =============================================================================
66
+ // Detection Patterns
67
+ // =============================================================================
68
+ /**
69
+ * Patterns for detecting hardcoded references
70
+ * Matches complex patterns including:
71
+ * - Simple: "Figure 1", "Fig. 2a", "Table S1"
72
+ * - Ranges: "Figures 1-3", "Fig. 1a-c", "Figs. 1a-3b"
73
+ * - Lists: "Figures 1, 2, and 3", "Fig. 1a, b, c", "Tables 1 & 2"
74
+ * - Mixed: "Figs. 1, 3-5, and 7"
75
+ *
76
+ * Uses a simpler base pattern and parses the full match for lists
77
+ */
78
+ const DETECTION_PATTERNS = {
79
+ // Captures the full reference including lists with "and"
80
+ // Group 1: type prefix (Figure, Fig., etc.)
81
+ // Group 2: reference list (parsed by parseReferenceList())
82
+ // Matches: "1", "1a", "1-3", "1a-c", "1, 2, 3", "1 and 2", "1, 2 and 3", "1, 2, and 3"
83
+ // Separator: comma/dash/ampersand, optionally followed by "and"
84
+ // Standalone letters must be followed by separator, punctuation, or word boundary
85
+ // Also handles: "see Figure 1", "(Fig. 1)", "in Figures 1–3"
86
+ // Note: 'gi' flag makes these case-insensitive, so "figure 1" is also matched
87
+ figure: /\b(Figures?|Figs?\.?)\s+((?:\d+|S\d+)[a-z]?(?:(?:\s*[-–—,&]\s*(?:and\s+)?|\s+and\s+)(?:(?:\d+|S\d+)[a-z]?|[a-z]\b))*)/gi,
88
+ table: /\b(Tables?|Tabs?\.?)\s+((?:\d+|S\d+)[a-z]?(?:(?:\s*[-–—,&]\s*(?:and\s+)?|\s+and\s+)(?:(?:\d+|S\d+)[a-z]?|[a-z]\b))*)/gi,
89
+ equation: /\b(Equations?|Eqs?\.?)\s+((?:\d+)[a-z]?(?:(?:\s*[-–—,&]\s*(?:and\s+)?|\s+and\s+)(?:(?:\d+)[a-z]?|[a-z]\b))*)/gi,
90
+ };
91
+ /**
92
+ * Patterns to EXCLUDE from detection (false positives)
93
+ * These look like references but aren't (e.g., "Table of Contents", "Figure skating")
94
+ */
95
+ const EXCLUSION_PATTERNS = [
96
+ /\bTable\s+of\s+Contents?\b/gi,
97
+ /\bFigure\s+skating\b/gi,
98
+ /\bFigure\s+out\b/gi,
99
+ /\bFigure\s+it\b/gi,
100
+ /\bTable\s+setting/gi,
101
+ /\bEquation\s+editor\b/gi,
102
+ ];
103
+ /**
104
+ * Pattern for extracting anchors from markdown: {#fig:label}, {#tbl:label}
105
+ */
106
+ const ANCHOR_PATTERN = /\{#(fig|tbl|eq):([^}]+)\}/gi;
107
+ /**
108
+ * Pattern for @-style references: @fig:label, @tbl:label
109
+ */
110
+ const REF_PATTERN = /@(fig|tbl|eq):([a-zA-Z0-9_-]+)/gi;
111
+ // =============================================================================
112
+ // Public API
113
+ // =============================================================================
114
+ /**
115
+ * Normalize a reference type to standard form
116
+ */
117
+ export function normalizeType(typeStr) {
118
+ if (typeof typeStr !== 'string') {
119
+ throw new TypeError(`typeStr must be a string, got ${typeof typeStr}`);
120
+ }
121
+ const lower = typeStr.toLowerCase().replace(/\.$/, '');
122
+ if (lower.startsWith('fig'))
123
+ return 'fig';
124
+ if (lower.startsWith('tab'))
125
+ return 'tbl';
126
+ if (lower.startsWith('eq'))
127
+ return 'eq';
128
+ return lower;
129
+ }
130
+ /**
131
+ * Parse a reference number, handling supplementary (S1, S2) and letter suffixes (1a, 1b)
132
+ */
133
+ export function parseRefNumber(numStr, suffix = null) {
134
+ if (!numStr || typeof numStr !== 'string') {
135
+ return { isSupp: false, num: 0, suffix: suffix || null };
136
+ }
137
+ const isSupp = numStr.toUpperCase().startsWith('S');
138
+ const numPart = isSupp ? numStr.slice(1) : numStr;
139
+ // Extract suffix if embedded in numStr (e.g., "1a")
140
+ const match = numPart.match(/^(\d+)([a-z])?$/i);
141
+ const num = match && match[1] ? parseInt(match[1], 10) : parseInt(numPart, 10);
142
+ const extractedSuffix = suffix || (match && match[2]) || null;
143
+ return { isSupp, num, suffix: extractedSuffix ? extractedSuffix.toLowerCase() : null };
144
+ }
145
+ /**
146
+ * Parse a reference list string like "1, 2, and 3" or "1a-c" or "1a-3b"
147
+ * Returns an array of {num, isSupp, suffix} objects
148
+ */
149
+ export function parseReferenceList(listStr) {
150
+ const results = [];
151
+ if (!listStr || typeof listStr !== 'string')
152
+ return results;
153
+ // Normalize: replace "and" with comma, normalize dashes
154
+ let normalized = listStr
155
+ .replace(/\s+and\s+/gi, ', ')
156
+ .replace(/[–—]/g, '-') // en-dash, em-dash → hyphen
157
+ .replace(/&/g, ', '); // & → comma
158
+ // Split by comma (but not by dash, which indicates ranges)
159
+ const parts = normalized.split(/\s*,\s*/).filter((p) => p.trim());
160
+ let lastFullRef = null; // Track the last full reference for implicit prefixes
161
+ for (const part of parts) {
162
+ const trimmed = part.trim();
163
+ if (!trimmed)
164
+ continue;
165
+ // Check if this is a range (contains -)
166
+ if (trimmed.includes('-')) {
167
+ const parts = trimmed.split('-').map((s) => s.trim());
168
+ const start = parts[0] || '';
169
+ const end = parts[1] || '';
170
+ // Check if end is just a letter (e.g., "1a-c" where end is "c")
171
+ const endIsLetterOnly = /^[a-z]$/i.test(end);
172
+ const startRef = parseRefNumber(start);
173
+ // For letter-only end, don't parse as number
174
+ const endRef = endIsLetterOnly
175
+ ? { num: startRef.num, isSupp: startRef.isSupp, suffix: end.toLowerCase() }
176
+ : parseRefNumber(end);
177
+ // Handle different range types:
178
+ // 1. Suffix-only range on same number: "1a-c" → 1a, 1b, 1c
179
+ // 2. Number range: "1-3" → 1, 2, 3
180
+ // 3. Cross-number suffix range: "1a-3b" → 1a...1z, 2a...2z, 3a, 3b (limited)
181
+ if (startRef.suffix && endRef.suffix && startRef.num !== endRef.num) {
182
+ // Cross-number suffix range: "1a-3b"
183
+ // For academic papers, limit intermediate figures to same suffix range
184
+ // e.g., "1a-3b" typically means 1a, 1b, 2a, 2b, 3a, 3b
185
+ const maxSuffix = Math.max(startRef.suffix.charCodeAt(0), endRef.suffix.charCodeAt(0));
186
+ for (let n = startRef.num; n <= endRef.num; n++) {
187
+ const suffixStart = n === startRef.num ? startRef.suffix.charCodeAt(0) : 'a'.charCodeAt(0);
188
+ const suffixEnd = n === endRef.num ? endRef.suffix.charCodeAt(0) : maxSuffix;
189
+ for (let s = suffixStart; s <= suffixEnd; s++) {
190
+ results.push({
191
+ num: n,
192
+ isSupp: startRef.isSupp,
193
+ suffix: String.fromCharCode(s),
194
+ });
195
+ }
196
+ }
197
+ lastFullRef = { num: endRef.num, isSupp: startRef.isSupp };
198
+ }
199
+ else if (startRef.suffix || endRef.suffix) {
200
+ // Suffix range on same number: "1a-c"
201
+ const num = startRef.num !== 0 ? startRef.num : (lastFullRef ? lastFullRef.num : 1);
202
+ const isSupp = startRef.isSupp ? startRef.isSupp : (lastFullRef ? lastFullRef.isSupp : false);
203
+ const startCode = (startRef.suffix || 'a').charCodeAt(0);
204
+ const endCode = (endRef.suffix || 'a').charCodeAt(0);
205
+ for (let code = startCode; code <= endCode; code++) {
206
+ results.push({
207
+ num,
208
+ isSupp,
209
+ suffix: String.fromCharCode(code),
210
+ });
211
+ }
212
+ lastFullRef = { num, isSupp };
213
+ }
214
+ else {
215
+ // Pure number range: "1-3"
216
+ for (let n = startRef.num; n <= endRef.num; n++) {
217
+ results.push({
218
+ num: n,
219
+ isSupp: startRef.isSupp,
220
+ suffix: null,
221
+ });
222
+ }
223
+ lastFullRef = { num: endRef.num, isSupp: startRef.isSupp };
224
+ }
225
+ }
226
+ else {
227
+ // Single reference or implicit suffix
228
+ // Check if it's just a letter (implicit prefix from previous number)
229
+ if (/^[a-z]$/i.test(trimmed) && lastFullRef) {
230
+ // Implicit prefix: "b" after "1a" means "1b"
231
+ results.push({
232
+ num: lastFullRef.num,
233
+ isSupp: lastFullRef.isSupp,
234
+ suffix: trimmed.toLowerCase(),
235
+ });
236
+ }
237
+ else {
238
+ // Full reference: "1", "1a", "S1", "S1a"
239
+ const ref = parseRefNumber(trimmed);
240
+ results.push(ref);
241
+ lastFullRef = { num: ref.num, isSupp: ref.isSupp };
242
+ }
243
+ }
244
+ }
245
+ return results;
246
+ }
247
+ /**
248
+ * Build a registry of figure/table labels from .md files
249
+ * Scans for {#fig:label} and {#tbl:label} anchors
250
+ *
251
+ * IMPORTANT: This function requires either explicit sections or a rev.yaml/sections.yaml config.
252
+ * It will NOT guess by scanning all .md files, as this leads to incorrect numbering
253
+ * when temporary files (paper_clean.md, etc.) exist in the directory.
254
+ */
255
+ export function buildRegistry(directory, sections) {
256
+ if (typeof directory !== 'string') {
257
+ throw new TypeError(`directory must be a string, got ${typeof directory}`);
258
+ }
259
+ const figures = new Map();
260
+ const tables = new Map();
261
+ const equations = new Map();
262
+ // Counters for numbering (separate for main and supplementary)
263
+ let figNum = 0;
264
+ let figSuppNum = 0;
265
+ let tblNum = 0;
266
+ let tblSuppNum = 0;
267
+ let eqNum = 0;
268
+ let orderedFiles;
269
+ if (Array.isArray(sections) && sections.length > 0) {
270
+ // Use explicitly provided section files - most reliable
271
+ orderedFiles = sections.filter((f) => fs.existsSync(path.join(directory, f)));
272
+ }
273
+ else {
274
+ // Try to determine sections from config files (rev.yaml or sections.yaml)
275
+ orderedFiles = discoverSectionFiles(directory);
276
+ // If no config found, return empty registry rather than guessing
277
+ // This prevents bugs from scanning wrong files
278
+ }
279
+ // Determine if a file is supplementary
280
+ const isSupplementary = (filename) => filename.toLowerCase().includes('supp') || filename.toLowerCase().includes('appendix');
281
+ // Process each file in order
282
+ for (const file of orderedFiles) {
283
+ const filePath = path.join(directory, file);
284
+ const content = fs.readFileSync(filePath, 'utf-8');
285
+ const isSupp = isSupplementary(file);
286
+ // Find all anchors
287
+ let match;
288
+ ANCHOR_PATTERN.lastIndex = 0;
289
+ while ((match = ANCHOR_PATTERN.exec(content)) !== null) {
290
+ const typeRaw = match[1];
291
+ const labelRaw = match[2];
292
+ if (!typeRaw || !labelRaw)
293
+ continue;
294
+ const type = typeRaw.toLowerCase();
295
+ const label = labelRaw;
296
+ if (type === 'fig') {
297
+ if (isSupp) {
298
+ figSuppNum++;
299
+ figures.set(label, { label, num: figSuppNum, isSupp: true, file });
300
+ }
301
+ else {
302
+ figNum++;
303
+ figures.set(label, { label, num: figNum, isSupp: false, file });
304
+ }
305
+ }
306
+ else if (type === 'tbl') {
307
+ if (isSupp) {
308
+ tblSuppNum++;
309
+ tables.set(label, { label, num: tblSuppNum, isSupp: true, file });
310
+ }
311
+ else {
312
+ tblNum++;
313
+ tables.set(label, { label, num: tblNum, isSupp: false, file });
314
+ }
315
+ }
316
+ else if (type === 'eq') {
317
+ eqNum++;
318
+ equations.set(label, { label, num: eqNum, isSupp: false, file });
319
+ }
320
+ }
321
+ }
322
+ // Build reverse lookup: number → label
323
+ const byNumber = {
324
+ fig: new Map(),
325
+ figS: new Map(),
326
+ tbl: new Map(),
327
+ tblS: new Map(),
328
+ eq: new Map(),
329
+ };
330
+ for (const [label, info] of figures) {
331
+ const key = info.isSupp ? 'figS' : 'fig';
332
+ byNumber[key].set(info.num, label);
333
+ }
334
+ for (const [label, info] of tables) {
335
+ const key = info.isSupp ? 'tblS' : 'tbl';
336
+ byNumber[key].set(info.num, label);
337
+ }
338
+ for (const [label, info] of equations) {
339
+ byNumber.eq.set(info.num, label);
340
+ }
341
+ return { figures, tables, equations, byNumber };
342
+ }
343
+ /**
344
+ * Get the display string for a label (e.g., "Figure 1", "Table S2")
345
+ */
346
+ export function labelToDisplay(type, label, registry) {
347
+ if (!registry || !registry.figures)
348
+ return null;
349
+ const collection = type === 'fig' ? registry.figures : type === 'tbl' ? registry.tables : registry.equations;
350
+ const info = collection.get(label);
351
+ if (!info)
352
+ return null;
353
+ const prefix = type === 'fig' ? 'Figure' : type === 'tbl' ? 'Table' : 'Equation';
354
+ const numStr = info.isSupp ? `S${info.num}` : `${info.num}`;
355
+ return `${prefix} ${numStr}`;
356
+ }
357
+ /**
358
+ * Get the label for a display number (e.g., "fig:heatmap" from Figure 1)
359
+ */
360
+ export function numberToLabel(type, num, isSupp, registry) {
361
+ if (!registry || !registry.byNumber)
362
+ return null;
363
+ const key = isSupp ? `${type}S` : type;
364
+ return registry.byNumber[key]?.get(num) || null;
365
+ }
366
+ /**
367
+ * Detect all hardcoded references in text
368
+ */
369
+ export function detectHardcodedRefs(text) {
370
+ if (typeof text !== 'string') {
371
+ throw new TypeError(`text must be a string, got ${typeof text}`);
372
+ }
373
+ const refs = [];
374
+ for (const [type, pattern] of Object.entries(DETECTION_PATTERNS)) {
375
+ pattern.lastIndex = 0;
376
+ let match;
377
+ while ((match = pattern.exec(text)) !== null) {
378
+ // Pattern groups:
379
+ // [1] = type prefix (Figure, Fig., etc.)
380
+ // [2] = reference list string (e.g., "1, 2, and 3" or "1a-3b")
381
+ const listStr = match[2];
382
+ if (!listStr)
383
+ continue;
384
+ const numbers = parseReferenceList(listStr);
385
+ // Skip if no valid numbers were parsed
386
+ if (numbers.length === 0)
387
+ continue;
388
+ refs.push({
389
+ type: normalizeType(type),
390
+ match: match[0],
391
+ numbers,
392
+ position: match.index,
393
+ });
394
+ }
395
+ }
396
+ // Sort by position
397
+ refs.sort((a, b) => a.position - b.position);
398
+ return refs;
399
+ }
400
+ /**
401
+ * Convert hardcoded references to @-style references
402
+ */
403
+ export function convertHardcodedRefs(text, registry) {
404
+ // Input validation delegated to detectHardcodedRefs
405
+ const refs = detectHardcodedRefs(text);
406
+ const conversions = [];
407
+ const warnings = [];
408
+ // Process in reverse order to preserve positions
409
+ let result = text;
410
+ for (let i = refs.length - 1; i >= 0; i--) {
411
+ const ref = refs[i];
412
+ if (!ref)
413
+ continue;
414
+ // Build replacement
415
+ const labels = [];
416
+ for (const { num, isSupp } of ref.numbers) {
417
+ const label = numberToLabel(ref.type, num, isSupp, registry);
418
+ if (label) {
419
+ labels.push(`@${ref.type}:${label}`);
420
+ }
421
+ else {
422
+ const displayNum = isSupp ? `S${num}` : `${num}`;
423
+ warnings.push(`Unknown reference: ${ref.type} ${displayNum} (no matching label)`);
424
+ labels.push(ref.match); // Keep original if no match
425
+ }
426
+ }
427
+ if (labels.length > 0 && !labels.includes(ref.match)) {
428
+ const replacement = labels.join('; ');
429
+ // Skip if the @-syntax already appears in the preceding text
430
+ // This prevents duplication when import restores @fig:x and then we see "Fig. 1"
431
+ // e.g., "@fig:map@fig:map{++@fig:map++}" or "@fig:mapFigure 1" patterns
432
+ const textBefore = result.slice(Math.max(0, ref.position - REF_CONTEXT_WINDOW), ref.position);
433
+ const alreadyHasRef = labels.some((label) => textBefore.includes(label));
434
+ if (alreadyHasRef) {
435
+ continue; // Skip - ref already present nearby
436
+ }
437
+ result =
438
+ result.slice(0, ref.position) + replacement + result.slice(ref.position + ref.match.length);
439
+ conversions.push({
440
+ from: ref.match,
441
+ to: replacement,
442
+ });
443
+ }
444
+ }
445
+ return { converted: result, conversions, warnings };
446
+ }
447
+ /**
448
+ * Detect @-style references in text
449
+ */
450
+ export function detectDynamicRefs(text) {
451
+ if (typeof text !== 'string') {
452
+ throw new TypeError(`text must be a string, got ${typeof text}`);
453
+ }
454
+ const refs = [];
455
+ REF_PATTERN.lastIndex = 0;
456
+ let match;
457
+ while ((match = REF_PATTERN.exec(text)) !== null) {
458
+ const type = match[1];
459
+ const label = match[2];
460
+ if (!type || !label)
461
+ continue;
462
+ refs.push({
463
+ type: type,
464
+ label: label,
465
+ match: match[0],
466
+ position: match.index,
467
+ });
468
+ }
469
+ return refs;
470
+ }
471
+ /**
472
+ * Get reference status for a file/text
473
+ */
474
+ export function getRefStatus(text, registry) {
475
+ const dynamic = detectDynamicRefs(text);
476
+ const hardcoded = detectHardcodedRefs(text);
477
+ // Count anchors in this text
478
+ ANCHOR_PATTERN.lastIndex = 0;
479
+ let figCount = 0, tblCount = 0, eqCount = 0;
480
+ let match;
481
+ while ((match = ANCHOR_PATTERN.exec(text)) !== null) {
482
+ const type = match[1];
483
+ if (!type)
484
+ continue;
485
+ if (type === 'fig')
486
+ figCount++;
487
+ else if (type === 'tbl')
488
+ tblCount++;
489
+ else if (type === 'eq')
490
+ eqCount++;
491
+ }
492
+ return {
493
+ dynamic,
494
+ hardcoded,
495
+ anchors: { figures: figCount, tables: tblCount, equations: eqCount },
496
+ };
497
+ }
498
+ /**
499
+ * Detect forward references in combined text
500
+ * A forward reference is a @ref that appears before its {#anchor} definition
501
+ */
502
+ export function detectForwardRefs(text) {
503
+ // Build map of anchor positions: "fig:label" -> position
504
+ const anchorPositions = new Map();
505
+ ANCHOR_PATTERN.lastIndex = 0;
506
+ let match;
507
+ while ((match = ANCHOR_PATTERN.exec(text)) !== null) {
508
+ const type = match[1];
509
+ const label = match[2];
510
+ if (!type || !label)
511
+ continue;
512
+ const key = `${type}:${label}`;
513
+ // Only store first occurrence (in case of duplicates)
514
+ if (!anchorPositions.has(key)) {
515
+ anchorPositions.set(key, match.index);
516
+ }
517
+ }
518
+ // Find all references
519
+ const refs = detectDynamicRefs(text);
520
+ // Filter to only forward references
521
+ const forwardRefs = refs.filter((ref) => {
522
+ const key = `${ref.type}:${ref.label}`;
523
+ const anchorPos = anchorPositions.get(key);
524
+ // Forward ref if anchor doesn't exist or appears after the reference
525
+ return anchorPos === undefined || ref.position < anchorPos;
526
+ });
527
+ return { forwardRefs, anchorPositions };
528
+ }
529
+ /**
530
+ * Resolve forward references to display format
531
+ * Only resolves refs that appear before their anchor definition
532
+ * Leaves other refs for pandoc-crossref to handle (preserves clickable links)
533
+ */
534
+ export function resolveForwardRefs(text, registry) {
535
+ const { forwardRefs } = detectForwardRefs(text);
536
+ const resolved = [];
537
+ const unresolved = [];
538
+ // Process in reverse order to preserve positions
539
+ let result = text;
540
+ for (let i = forwardRefs.length - 1; i >= 0; i--) {
541
+ const ref = forwardRefs[i];
542
+ if (!ref)
543
+ continue;
544
+ const display = labelToDisplay(ref.type, ref.label, registry);
545
+ if (display) {
546
+ result =
547
+ result.slice(0, ref.position) + display + result.slice(ref.position + ref.match.length);
548
+ resolved.push({
549
+ from: ref.match,
550
+ to: display,
551
+ position: ref.position,
552
+ });
553
+ }
554
+ else {
555
+ unresolved.push({
556
+ ref: ref.match,
557
+ position: ref.position,
558
+ });
559
+ }
560
+ }
561
+ return { text: result, resolved, unresolved };
562
+ }
563
+ /**
564
+ * Format registry for display
565
+ */
566
+ export function formatRegistry(registry) {
567
+ const lines = [];
568
+ if (registry.figures.size > 0) {
569
+ lines.push('Figures:');
570
+ for (const [label, info] of registry.figures) {
571
+ const num = info.isSupp ? `S${info.num}` : info.num;
572
+ lines.push(` Figure ${num}: @fig:${label} (${info.file})`);
573
+ }
574
+ }
575
+ if (registry.tables.size > 0) {
576
+ if (lines.length > 0)
577
+ lines.push('');
578
+ lines.push('Tables:');
579
+ for (const [label, info] of registry.tables) {
580
+ const num = info.isSupp ? `S${info.num}` : info.num;
581
+ lines.push(` Table ${num}: @tbl:${label} (${info.file})`);
582
+ }
583
+ }
584
+ if (registry.equations.size > 0) {
585
+ if (lines.length > 0)
586
+ lines.push('');
587
+ lines.push('Equations:');
588
+ for (const [label, info] of registry.equations) {
589
+ lines.push(` Equation ${info.num}: @eq:${label} (${info.file})`);
590
+ }
591
+ }
592
+ if (lines.length === 0) {
593
+ lines.push('No figure/table anchors found.');
594
+ }
595
+ return lines.join('\n');
596
+ }
597
+ //# sourceMappingURL=crossref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crossref.js","sourceRoot":"","sources":["../../lib/crossref.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Dependency checking utilities for pandoc, LaTeX, and related tools
3
+ */
4
+ /**
5
+ * Check if pandoc-crossref is available
6
+ */
7
+ export declare function hasPandocCrossref(): boolean;
8
+ /**
9
+ * Check if pandoc is available
10
+ */
11
+ export declare function hasPandoc(): boolean;
12
+ /**
13
+ * Check if LaTeX is available (for PDF generation)
14
+ */
15
+ export declare function hasLatex(): boolean;
16
+ /**
17
+ * Get installation instructions for missing dependencies
18
+ */
19
+ export declare function getInstallInstructions(dependency: string): string;
20
+ export interface DependencyStatus {
21
+ pandoc: boolean;
22
+ latex: boolean;
23
+ crossref: boolean;
24
+ messages: string[];
25
+ }
26
+ /**
27
+ * Check dependencies and return status
28
+ */
29
+ export declare function checkDependencies(): DependencyStatus;
30
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../lib/dependencies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAYlC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAwBjE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,gBAAgB,CAmBpD"}