docrev 0.11.3 → 0.12.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 (193) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -0
  3. package/dist/bin/rev.js +29 -21
  4. package/dist/bin/rev.js.map +1 -1
  5. package/dist/lib/build.d.ts +43 -0
  6. package/dist/lib/build.d.ts.map +1 -1
  7. package/dist/lib/build.js +175 -5
  8. package/dist/lib/build.js.map +1 -1
  9. package/dist/lib/commands/build.d.ts.map +1 -1
  10. package/dist/lib/commands/build.js +39 -125
  11. package/dist/lib/commands/build.js.map +1 -1
  12. package/dist/lib/commands/comments.js +3 -3
  13. package/dist/lib/commands/comments.js.map +1 -1
  14. package/dist/lib/commands/context.d.ts +12 -1
  15. package/dist/lib/commands/context.d.ts.map +1 -1
  16. package/dist/lib/commands/context.js +34 -1
  17. package/dist/lib/commands/context.js.map +1 -1
  18. package/dist/lib/commands/merge-resolve.js +1 -1
  19. package/dist/lib/commands/merge-resolve.js.map +1 -1
  20. package/dist/lib/commands/quality.js +2 -2
  21. package/dist/lib/commands/quality.js.map +1 -1
  22. package/dist/lib/commands/sections.js +1 -1
  23. package/dist/lib/commands/sections.js.map +1 -1
  24. package/dist/lib/commands/text-ops.js +1 -1
  25. package/dist/lib/commands/text-ops.js.map +1 -1
  26. package/dist/lib/commands/utilities.d.ts.map +1 -1
  27. package/dist/lib/commands/utilities.js +5 -2
  28. package/dist/lib/commands/utilities.js.map +1 -1
  29. package/dist/lib/commands/word-tools.js +2 -2
  30. package/dist/lib/commands/word-tools.js.map +1 -1
  31. package/dist/lib/crossref.d.ts.map +1 -1
  32. package/dist/lib/crossref.js +12 -41
  33. package/dist/lib/crossref.js.map +1 -1
  34. package/dist/lib/csl.d.ts.map +1 -1
  35. package/dist/lib/csl.js +14 -22
  36. package/dist/lib/csl.js.map +1 -1
  37. package/dist/lib/diff-engine.js +1 -1
  38. package/dist/lib/diff-engine.js.map +1 -1
  39. package/dist/lib/equations.d.ts.map +1 -1
  40. package/dist/lib/equations.js +12 -3
  41. package/dist/lib/equations.js.map +1 -1
  42. package/dist/lib/errors.d.ts.map +1 -1
  43. package/dist/lib/errors.js +1 -30
  44. package/dist/lib/errors.js.map +1 -1
  45. package/dist/lib/image-registry.d.ts.map +1 -1
  46. package/dist/lib/image-registry.js +4 -0
  47. package/dist/lib/image-registry.js.map +1 -1
  48. package/dist/lib/import.d.ts +1 -1
  49. package/dist/lib/import.d.ts.map +1 -1
  50. package/dist/lib/import.js +1 -1
  51. package/dist/lib/import.js.map +1 -1
  52. package/dist/lib/input.d.ts +0 -11
  53. package/dist/lib/input.d.ts.map +1 -1
  54. package/dist/lib/input.js +0 -35
  55. package/dist/lib/input.js.map +1 -1
  56. package/dist/lib/merge.d.ts.map +1 -1
  57. package/dist/lib/merge.js +9 -1
  58. package/dist/lib/merge.js.map +1 -1
  59. package/dist/lib/ooxml.d.ts +22 -0
  60. package/dist/lib/ooxml.d.ts.map +1 -1
  61. package/dist/lib/ooxml.js +130 -0
  62. package/dist/lib/ooxml.js.map +1 -1
  63. package/dist/lib/orcid.d.ts.map +1 -1
  64. package/dist/lib/orcid.js +16 -7
  65. package/dist/lib/orcid.js.map +1 -1
  66. package/dist/lib/plugins.d.ts.map +1 -1
  67. package/dist/lib/plugins.js +8 -4
  68. package/dist/lib/plugins.js.map +1 -1
  69. package/dist/lib/protect-restore.d.ts.map +1 -1
  70. package/dist/lib/protect-restore.js +7 -5
  71. package/dist/lib/protect-restore.js.map +1 -1
  72. package/dist/lib/restore-references.d.ts.map +1 -1
  73. package/dist/lib/restore-references.js +25 -3
  74. package/dist/lib/restore-references.js.map +1 -1
  75. package/dist/lib/schema.d.ts.map +1 -1
  76. package/dist/lib/schema.js +1 -19
  77. package/dist/lib/schema.js.map +1 -1
  78. package/dist/lib/slides.js +1 -1
  79. package/dist/lib/slides.js.map +1 -1
  80. package/dist/lib/spelling.js +1 -1
  81. package/dist/lib/spelling.js.map +1 -1
  82. package/dist/lib/tui.js +0 -1
  83. package/dist/lib/tui.js.map +1 -1
  84. package/dist/lib/utils.d.ts +14 -0
  85. package/dist/lib/utils.d.ts.map +1 -1
  86. package/dist/lib/utils.js +41 -0
  87. package/dist/lib/utils.js.map +1 -1
  88. package/dist/lib/word-extraction.d.ts +5 -5
  89. package/dist/lib/word-extraction.d.ts.map +1 -1
  90. package/dist/lib/word-extraction.js +25 -106
  91. package/dist/lib/word-extraction.js.map +1 -1
  92. package/dist/lib/word.d.ts +14 -38
  93. package/dist/lib/word.d.ts.map +1 -1
  94. package/dist/lib/word.js +24 -179
  95. package/dist/lib/word.js.map +1 -1
  96. package/dist/lib/wordcomments.d.ts.map +1 -1
  97. package/dist/lib/wordcomments.js +9 -7
  98. package/dist/lib/wordcomments.js.map +1 -1
  99. package/package.json +17 -6
  100. package/.gitattributes +0 -1
  101. package/PLAN-tables-and-postprocess.md +0 -850
  102. package/bin/rev.ts +0 -145
  103. package/docs-src/build.py +0 -113
  104. package/docs-src/extra.css +0 -208
  105. package/docs-src/md-to-html.lua +0 -6
  106. package/docs-src/template.html +0 -116
  107. package/eslint.config.js +0 -27
  108. package/lib/anchor-match.ts +0 -307
  109. package/lib/annotations.ts +0 -695
  110. package/lib/build.ts +0 -2047
  111. package/lib/citations.ts +0 -160
  112. package/lib/commands/build.ts +0 -885
  113. package/lib/commands/citations.ts +0 -515
  114. package/lib/commands/comments.ts +0 -1077
  115. package/lib/commands/context.ts +0 -185
  116. package/lib/commands/core.ts +0 -328
  117. package/lib/commands/doi.ts +0 -451
  118. package/lib/commands/file-ops.ts +0 -372
  119. package/lib/commands/history.ts +0 -320
  120. package/lib/commands/index.ts +0 -87
  121. package/lib/commands/init.ts +0 -259
  122. package/lib/commands/merge-resolve.ts +0 -378
  123. package/lib/commands/preview.ts +0 -178
  124. package/lib/commands/project-info.ts +0 -244
  125. package/lib/commands/quality.ts +0 -517
  126. package/lib/commands/response.ts +0 -454
  127. package/lib/commands/section-boundaries.ts +0 -82
  128. package/lib/commands/sections.ts +0 -451
  129. package/lib/commands/sync.ts +0 -689
  130. package/lib/commands/text-ops.ts +0 -449
  131. package/lib/commands/utilities.ts +0 -448
  132. package/lib/commands/verify-anchors.ts +0 -272
  133. package/lib/commands/word-tools.ts +0 -340
  134. package/lib/comment-realign.ts +0 -99
  135. package/lib/config.ts +0 -84
  136. package/lib/crossref.ts +0 -781
  137. package/lib/csl.ts +0 -191
  138. package/lib/dependencies.ts +0 -132
  139. package/lib/diff-engine.ts +0 -465
  140. package/lib/doi-cache.ts +0 -115
  141. package/lib/doi.ts +0 -879
  142. package/lib/equations.ts +0 -506
  143. package/lib/errors.ts +0 -350
  144. package/lib/format.ts +0 -541
  145. package/lib/git.ts +0 -326
  146. package/lib/grammar.ts +0 -303
  147. package/lib/image-registry.ts +0 -180
  148. package/lib/import.ts +0 -932
  149. package/lib/input.ts +0 -174
  150. package/lib/journals.ts +0 -543
  151. package/lib/macro-filter.lua +0 -201
  152. package/lib/macros.ts +0 -273
  153. package/lib/merge.ts +0 -633
  154. package/lib/ooxml.ts +0 -768
  155. package/lib/orcid.ts +0 -144
  156. package/lib/pdf-comments.ts +0 -263
  157. package/lib/pdf-import.ts +0 -524
  158. package/lib/plugins.ts +0 -362
  159. package/lib/postprocess.ts +0 -188
  160. package/lib/pptx-color-filter.lua +0 -37
  161. package/lib/pptx-template.ts +0 -469
  162. package/lib/pptx-themes/academic.pptx +0 -0
  163. package/lib/pptx-themes/corporate.pptx +0 -0
  164. package/lib/pptx-themes/dark.pptx +0 -0
  165. package/lib/pptx-themes/default.pptx +0 -0
  166. package/lib/pptx-themes/minimal.pptx +0 -0
  167. package/lib/pptx-themes/plant.pptx +0 -0
  168. package/lib/pptx-themes.ts +0 -483
  169. package/lib/protect-restore.ts +0 -520
  170. package/lib/rate-limiter.ts +0 -127
  171. package/lib/response.ts +0 -200
  172. package/lib/restore-references.ts +0 -240
  173. package/lib/review.ts +0 -327
  174. package/lib/schema.ts +0 -494
  175. package/lib/scientific-words.ts +0 -73
  176. package/lib/sections.ts +0 -428
  177. package/lib/slides.ts +0 -756
  178. package/lib/spelling.ts +0 -334
  179. package/lib/templates.ts +0 -526
  180. package/lib/themes.ts +0 -742
  181. package/lib/trackchanges.ts +0 -166
  182. package/lib/tui.ts +0 -450
  183. package/lib/types.ts +0 -546
  184. package/lib/undo.ts +0 -250
  185. package/lib/utils.ts +0 -69
  186. package/lib/variables.ts +0 -179
  187. package/lib/word-extraction.ts +0 -525
  188. package/lib/word.ts +0 -526
  189. package/lib/wordcomments.ts +0 -789
  190. package/mkdocs.yml +0 -64
  191. package/scripts/postbuild.js +0 -47
  192. package/tsconfig.json +0 -26
  193. package/types/index.d.ts +0 -531
package/bin/rev.ts DELETED
@@ -1,145 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * rev - Revision workflow for Word ↔ Markdown round-trips
5
- *
6
- * Handles track changes and comments when collaborating on academic papers.
7
- * Preserves reviewer feedback through the Markdown editing workflow.
8
- */
9
-
10
- import { program, Command } from 'commander';
11
- import chalk from 'chalk';
12
- import * as fs from 'fs';
13
-
14
- // Import refactored command modules
15
- import {
16
- registerAllCommands,
17
- setQuietMode,
18
- setJsonMode,
19
- } from '../lib/commands/index.js';
20
-
21
- // Global flags
22
- let quietMode = false;
23
- let jsonMode = false;
24
-
25
- // Levenshtein distance for command suggestions
26
- function levenshtein(a: string, b: string): number {
27
- const matrix: number[][] = Array(b.length + 1).fill(null).map(() => Array(a.length + 1).fill(0));
28
- for (let i = 0; i <= a.length; i++) matrix[0]![i] = i;
29
- for (let j = 0; j <= b.length; j++) matrix[j]![0] = j;
30
- for (let j = 1; j <= b.length; j++) {
31
- for (let i = 1; i <= a.length; i++) {
32
- const cost = a[i - 1] === b[j - 1] ? 0 : 1;
33
- matrix[j]![i] = Math.min(
34
- matrix[j]![i - 1]! + 1,
35
- matrix[j - 1]![i]! + 1,
36
- matrix[j - 1]![i - 1]! + cost
37
- );
38
- }
39
- }
40
- return matrix[b.length]![a.length]!;
41
- }
42
-
43
- // Find similar commands for typo suggestions
44
- function suggestCommand(input: string, commands: string[]): string[] {
45
- const suggestions = commands
46
- .map(cmd => ({ cmd, dist: levenshtein(input.toLowerCase(), cmd.toLowerCase()) }))
47
- .filter(({ dist }) => dist <= 3)
48
- .sort((a, b) => a.dist - b.dist)
49
- .slice(0, 3)
50
- .map(({ cmd }) => cmd);
51
- return suggestions;
52
- }
53
-
54
- interface PackageJson {
55
- version: string;
56
- name?: string;
57
- description?: string;
58
- [key: string]: unknown;
59
- }
60
-
61
- // Read version from package.json
62
- const pkgPath = new URL('../package.json', import.meta.url);
63
- const pkg: PackageJson = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
64
-
65
- program
66
- .name('rev')
67
- .description('Revision workflow for Word ↔ Markdown round-trips')
68
- .version(`${pkg.version}\nNode ${process.version} | ${process.platform} ${process.arch}`, '-V, --version', 'Output version information')
69
- .configureOutput({
70
- outputError: (str: string, write: (str: string) => void) => write(chalk.red(str)),
71
- })
72
- .showHelpAfterError(chalk.dim('(use --help for usage information)'))
73
- .option('--no-color', 'Disable colored output')
74
- .option('-q, --quiet', 'Suppress non-essential output')
75
- .option('--json', 'Output in JSON format (for scripting)')
76
- .hook('preAction', (thisCommand: Command) => {
77
- const opts = thisCommand.opts<{ color?: boolean; quiet?: boolean; json?: boolean }>();
78
- if (opts.color === false) {
79
- chalk.level = 0;
80
- }
81
- if (opts.quiet) {
82
- quietMode = true;
83
- setQuietMode(true);
84
- }
85
- if (opts.json) {
86
- jsonMode = true;
87
- setJsonMode(true);
88
- chalk.level = 0; // Disable colors in JSON mode
89
- }
90
- });
91
-
92
- // Register all command modules
93
- // Commands organized by module:
94
- // core.js: review, strip, status
95
- // comments.js: comments, resolve, next, prev, first, last, todo, accept, reject, reply
96
- // init.js: init, new, config
97
- // sections.js: import, extract, split, sync, merge
98
- // build.js: refs, migrate, install, doctor, build
99
- // response.js: response, validate, profiles, anonymize
100
- // citations.js: citations, figures, equations, pdf-comments
101
- // doi.js: doi, orcid
102
- // history.js: diff, history, contributors
103
- // utilities.js: help, completions, word-count, stats, search, backup, archive,
104
- // export, preview, watch, lint, grammar, annotate, apply, comment,
105
- // clean, check, open, spelling, upgrade, batch, install-cli-skill
106
- registerAllCommands(program, pkg);
107
-
108
- // Get all command names for typo suggestions
109
- const allCommands = program.commands.map(cmd => cmd.name());
110
- const allAliases = program.commands.flatMap(cmd => cmd.aliases());
111
- const allCommandNames = [...allCommands, ...allAliases];
112
-
113
- // Handle unknown commands with suggestions
114
- program.on('command:*', (operands: string[]) => {
115
- const unknown = operands[0];
116
- console.error(chalk.red(`Unknown command: ${unknown}`));
117
-
118
- const suggestions = suggestCommand(unknown!, allCommandNames);
119
- if (suggestions.length > 0) {
120
- console.error();
121
- console.error(chalk.yellow('Did you mean?'));
122
- for (const s of suggestions) {
123
- console.error(chalk.cyan(` rev ${s}`));
124
- }
125
- }
126
- console.error();
127
- console.error(chalk.dim('Run "rev help" for available commands.'));
128
- process.exit(1);
129
- });
130
-
131
- // Default to status when no command given
132
- const args = process.argv.slice(2);
133
- const globalOpts = ['--no-color', '-q', '--quiet', '--json', '-V', '--version', '-h', '--help'];
134
- const hasOnlyGlobalOpts = args.every(arg => globalOpts.includes(arg) || arg.startsWith('--no-') || arg.startsWith('-'));
135
- const hasCommand = args.some(arg => !arg.startsWith('-') && !globalOpts.includes(arg));
136
-
137
- if (args.length === 0 || (hasOnlyGlobalOpts && !hasCommand && !args.includes('-h') && !args.includes('--help') && !args.includes('-V') && !args.includes('--version'))) {
138
- // Insert 'status' after any global options
139
- const insertPos = process.argv.findIndex((arg, i) => i >= 2 && !arg.startsWith('-'));
140
- if (insertPos === -1) {
141
- process.argv.push('status');
142
- }
143
- }
144
-
145
- program.parse();
package/docs-src/build.py DELETED
@@ -1,113 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Build the docrev documentation site using pandoc + Bootstrap 5 Sandstone.
4
-
5
- Usage (from project root):
6
- python docs-src/build.py # build to site/
7
- python docs-src/build.py --serve # build + open index.html
8
- python docs-src/build.py --deploy # build + push to gh-pages
9
- """
10
-
11
- import argparse
12
- import json
13
- import shutil
14
- import subprocess
15
- import sys
16
- import webbrowser
17
- from pathlib import Path
18
-
19
- HERE = Path(__file__).parent # docs-src/
20
- PROJECT = HERE.parent # project root
21
- DOCS = PROJECT / "docs"
22
- SITE = PROJECT / "site"
23
- TEMPLATE = HERE / "template.html"
24
- EXTRA_CSS = HERE / "extra.css"
25
- LUA_FILTER = HERE / "md-to-html.lua"
26
-
27
- PAGES = [
28
- # (source md, output html, page title, active-key, toc)
29
- ("index.md", "index.html", "Home", "active-home", False),
30
- ("workflow.md", "workflow.html", "Get Started", "active-workflow", True),
31
- ("commands.md", "commands.html", "Commands", "active-commands", True),
32
- ("configuration.md", "configuration.html", "Configuration", "active-configuration", True),
33
- ("troubleshooting.md","troubleshooting.html","Troubleshooting","active-troubleshooting",True),
34
- ]
35
-
36
-
37
- def get_version() -> str:
38
- pkg = PROJECT / "package.json"
39
- if pkg.exists():
40
- return json.loads(pkg.read_text())["version"]
41
- return ""
42
-
43
-
44
- def build_page(md_name, html_name, title, active_key, use_toc, version):
45
- src = DOCS / md_name
46
- dst = SITE / html_name
47
-
48
- cmd = [
49
- "pandoc", str(src),
50
- "--template", str(TEMPLATE),
51
- "--to", "html5",
52
- "--from", "markdown+smart+definition_lists",
53
- "--highlight-style", "pygments",
54
- "--lua-filter", str(LUA_FILTER),
55
- "--metadata", f"title={title}",
56
- "--metadata", f"pagetitle={title}",
57
- "--metadata", f"version={version}",
58
- "--metadata", f"{active_key}=true",
59
- "--output", str(dst),
60
- ]
61
-
62
- if use_toc:
63
- cmd += ["--toc", "--toc-depth=3"]
64
-
65
- result = subprocess.run(cmd, capture_output=True, text=True)
66
- if result.returncode != 0:
67
- print(f" ERROR: {md_name}")
68
- print(result.stderr)
69
- return False
70
-
71
- print(f" {html_name}")
72
- return True
73
-
74
-
75
- def build(deploy=False, serve=False):
76
- if SITE.exists():
77
- shutil.rmtree(SITE)
78
- SITE.mkdir()
79
- assets = SITE / "assets"
80
- assets.mkdir()
81
-
82
- shutil.copy(EXTRA_CSS, assets / "extra.css")
83
-
84
- version = get_version()
85
- print(f"Building docrev {version} → site/")
86
-
87
- ok = all(build_page(*p, version) for p in PAGES)
88
-
89
- if not ok:
90
- sys.exit(1)
91
-
92
- print("Done.")
93
-
94
- if serve:
95
- webbrowser.open(str(SITE / "index.html"))
96
-
97
- if deploy:
98
- print("\nDeploying to gh-pages …")
99
- result = subprocess.run(
100
- ["python", "-m", "ghp_import", "-n", "-p", "-f", str(SITE)],
101
- cwd=PROJECT,
102
- )
103
- if result.returncode != 0:
104
- sys.exit(result.returncode)
105
- print("Deployed.")
106
-
107
-
108
- if __name__ == "__main__":
109
- parser = argparse.ArgumentParser()
110
- parser.add_argument("--serve", action="store_true", help="Open index.html after build")
111
- parser.add_argument("--deploy", action="store_true", help="Push site/ to gh-pages")
112
- args = parser.parse_args()
113
- build(deploy=args.deploy, serve=args.serve)
@@ -1,208 +0,0 @@
1
- /* ── Base ──────────────────────────────────────────────── */
2
- html, body {
3
- height: 100%;
4
- }
5
-
6
- body {
7
- background-color: #F5F6F8;
8
- color: #3E3F3A;
9
- display: flex;
10
- flex-direction: column;
11
- min-height: 100vh;
12
- padding-top: 4rem;
13
- font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
14
- }
15
-
16
- .container { flex: 1; }
17
- footer { margin-top: auto; }
18
-
19
- /* ── Navbar (pkgdown-style subtle tint, not bg-primary) ── */
20
- .navbar {
21
- background: color-mix(in oklab, color-mix(in oklab, var(--bs-body-bg) 95%, var(--bs-primary)) 95%, var(--bs-body-color));
22
- border-bottom: 1px solid #DFD7CA;
23
- line-height: initial;
24
- }
25
-
26
- .navbar .nav-link.active {
27
- font-weight: 600;
28
- color: var(--bs-primary) !important;
29
- }
30
-
31
- /* ── Links ─────────────────────────────────────────────── */
32
- a { color: #325D88; }
33
- a:hover { color: #1E3D5C; }
34
-
35
- /* ── Headings ──────────────────────────────────────────── */
36
- h1 { font-size: 2rem; font-weight: 600; margin-bottom: 1rem; }
37
- h2 {
38
- font-size: 1.4rem; font-weight: 600;
39
- margin-top: 2rem; margin-bottom: .65rem;
40
- padding-bottom: .3rem;
41
- border-bottom: 1px solid #DFD7CA;
42
- }
43
- h3 { font-size: 1.1rem; font-weight: 600; margin-top: 1.5rem; }
44
- h4 { font-size: 1rem; font-weight: 600; margin-top: 1.2rem; }
45
-
46
- /* ── Code ──────────────────────────────────────────────── */
47
- pre, div.sourceCode {
48
- background-color: #EEEEED;
49
- border: 1px solid #DFD7CA;
50
- border-radius: .375rem;
51
- padding: .9rem 1.1rem;
52
- font-size: .85rem;
53
- overflow-x: auto;
54
- margin: 1em 0;
55
- }
56
-
57
- code {
58
- background-color: #EEEEED;
59
- color: #3E3F3A;
60
- border-radius: .25rem;
61
- padding: .1em .35em;
62
- font-size: .875em;
63
- }
64
-
65
- pre code, div.sourceCode code {
66
- background: none;
67
- padding: 0;
68
- border-radius: 0;
69
- font-size: inherit;
70
- color: inherit;
71
- }
72
-
73
- div.sourceCode { padding: 0; }
74
- div.sourceCode pre { border: none; margin: 0; }
75
-
76
- /* ── Tables ────────────────────────────────────────────── */
77
- table {
78
- width: 100%;
79
- border-collapse: collapse;
80
- margin: 1em 0;
81
- font-size: .9rem;
82
- }
83
-
84
- thead th {
85
- background-color: #DFD7CA;
86
- color: #3E3F3A;
87
- font-weight: 600;
88
- padding: .5rem .75rem;
89
- border-bottom: 2px solid #c8c0b4;
90
- text-align: left;
91
- }
92
-
93
- td, th { padding: .4rem .75rem; border-bottom: 1px solid #e8e2d8; }
94
- tbody tr:hover { background-color: rgba(223,215,202,.2); }
95
-
96
- /* ── TOC sidebar ───────────────────────────────────────── */
97
- aside#toc, aside .toc, aside nav.toc { font-size: .875rem; }
98
-
99
- aside h2.h6 {
100
- text-transform: uppercase;
101
- font-size: .68rem;
102
- letter-spacing: .07em;
103
- color: #6c757d;
104
- font-weight: 600;
105
- margin-bottom: .5rem;
106
- border: none;
107
- padding: 0;
108
- }
109
-
110
- aside .toc, aside #TOC {
111
- position: sticky;
112
- top: 5rem;
113
- max-height: calc(100vh - 6rem);
114
- overflow-y: auto;
115
- }
116
-
117
- aside ul {
118
- list-style: none;
119
- padding-left: .9rem;
120
- margin: 0;
121
- }
122
- aside > nav > .toc > ul,
123
- aside .toc > ul { padding-left: 0; }
124
-
125
- aside li { margin: .1rem 0; }
126
-
127
- aside a {
128
- color: #6c757d;
129
- text-decoration: none;
130
- display: block;
131
- line-height: 1.55;
132
- }
133
- aside a:hover { color: #325D88; }
134
-
135
- /* ── Home page cards ───────────────────────────────────── */
136
- .doc-card {
137
- border: 1px solid #DFD7CA;
138
- border-radius: .375rem;
139
- padding: 1.1rem 1.25rem;
140
- height: 100%;
141
- background: #fff;
142
- transition: border-color .15s, box-shadow .15s;
143
- }
144
- .doc-card:hover {
145
- border-color: #325D88;
146
- box-shadow: 0 2px 8px rgba(50,93,136,.1);
147
- }
148
- .doc-card h5 { font-size: 1rem; font-weight: 600; margin-bottom: .4rem; }
149
- .doc-card p { font-size: .875rem; color: #6c757d; margin-bottom: .6rem; }
150
- .doc-card a.stretched-link::after { z-index: 1; }
151
-
152
- /* ── Badges row ────────────────────────────────────────── */
153
- .badge-row { margin-bottom: 1rem; line-height: 2; }
154
- .badge-row img { margin-right: .25rem; }
155
-
156
- /* ── ── ── DARK MODE ── ── ── ──────────────────────────── */
157
-
158
- [data-bs-theme="dark"] body { background-color: #343739; color: #DFD7CA; }
159
-
160
- [data-bs-theme="dark"] .navbar {
161
- background: color-mix(in oklab, color-mix(in oklab, #343739 92%, var(--bs-primary)) 95%, #DFD7CA);
162
- border-bottom-color: #495057;
163
- }
164
-
165
- [data-bs-theme="dark"] a { color: #7ba8d0; }
166
- [data-bs-theme="dark"] a:hover { color: #a5c4e8; }
167
-
168
- [data-bs-theme="dark"] .navbar .nav-link.active { color: #7ba8d0 !important; }
169
-
170
- [data-bs-theme="dark"] h1,
171
- [data-bs-theme="dark"] h2,
172
- [data-bs-theme="dark"] h3,
173
- [data-bs-theme="dark"] h4 { color: #DFD7CA; }
174
-
175
- [data-bs-theme="dark"] h2 { border-color: #495057; }
176
-
177
- [data-bs-theme="dark"] pre,
178
- [data-bs-theme="dark"] div.sourceCode {
179
- background-color: #2C2F31;
180
- border-color: #495057;
181
- color: #DFD7CA;
182
- }
183
-
184
- [data-bs-theme="dark"] code {
185
- background-color: #2C2F31;
186
- color: #DFD7CA;
187
- }
188
-
189
- [data-bs-theme="dark"] div.sourceCode span[class] { color: #DFD7CA !important; }
190
-
191
- [data-bs-theme="dark"] thead th {
192
- background-color: #3d4043;
193
- color: #DFD7CA;
194
- border-color: #495057;
195
- }
196
- [data-bs-theme="dark"] td,
197
- [data-bs-theme="dark"] th { border-color: #3d4043; }
198
- [data-bs-theme="dark"] tbody tr:hover { background-color: rgba(73,80,87,.3); }
199
-
200
- [data-bs-theme="dark"] aside a { color: #8e9499; }
201
- [data-bs-theme="dark"] aside a:hover { color: #7ba8d0; }
202
-
203
- [data-bs-theme="dark"] .doc-card {
204
- background: #2C2F31;
205
- border-color: #495057;
206
- }
207
- [data-bs-theme="dark"] .doc-card:hover { border-color: #7ba8d0; }
208
- [data-bs-theme="dark"] .doc-card p { color: #8e9499; }
@@ -1,6 +0,0 @@
1
- -- Rewrite .md links to .html in pandoc output
2
- function Link(el)
3
- el.target = el.target:gsub("%.md$", ".html")
4
- el.target = el.target:gsub("%.md#", ".html#")
5
- return el
6
- end
@@ -1,116 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-bs-theme="light">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>$if(pagetitle)$$pagetitle$ — $endif$docrev</title>
7
- <meta name="description" content="CLI for writing documents in Markdown while collaborating with Word users.">
8
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootswatch@5.3.3/dist/sandstone/bootstrap.min.css">
9
- $if(highlighting-css)$
10
- <style>
11
- $highlighting-css$
12
- </style>
13
- $endif$
14
- <link rel="stylesheet" href="assets/extra.css">
15
- </head>
16
- <body>
17
-
18
- <nav class="navbar navbar-expand-lg fixed-top" aria-label="Site navigation">
19
- <div class="container">
20
- <a class="navbar-brand me-2" href="index.html">docrev</a>
21
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-main" aria-controls="navbar-main" aria-expanded="false" aria-label="Toggle navigation">
22
- <span class="navbar-toggler-icon"></span>
23
- </button>
24
- <div class="collapse navbar-collapse" id="navbar-main">
25
- <ul class="navbar-nav me-auto">
26
- <li class="nav-item">
27
- <a class="nav-link$if(active-home)$ active$endif$" $if(active-home)$aria-current="page"$endif$ href="index.html">Home</a>
28
- </li>
29
- <li class="nav-item">
30
- <a class="nav-link$if(active-workflow)$ active$endif$" $if(active-workflow)$aria-current="page"$endif$ href="workflow.html">Get Started</a>
31
- </li>
32
- <li class="nav-item">
33
- <a class="nav-link$if(active-commands)$ active$endif$" $if(active-commands)$aria-current="page"$endif$ href="commands.html">Commands</a>
34
- </li>
35
- <li class="nav-item">
36
- <a class="nav-link$if(active-configuration)$ active$endif$" $if(active-configuration)$aria-current="page"$endif$ href="configuration.html">Configuration</a>
37
- </li>
38
- <li class="nav-item">
39
- <a class="nav-link$if(active-troubleshooting)$ active$endif$" $if(active-troubleshooting)$aria-current="page"$endif$ href="troubleshooting.html">Troubleshooting</a>
40
- </li>
41
- </ul>
42
- <ul class="navbar-nav">
43
- <li class="nav-item">
44
- <button id="theme-toggle" class="btn btn-link nav-link border-0" aria-label="Toggle dark mode">
45
- <svg id="icon-sun" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
46
- <path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8M8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0m0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13m8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5M3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8m10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0m-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0m9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707M4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707"/>
47
- </svg>
48
- <svg id="icon-moon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16" style="display:none">
49
- <path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278"/>
50
- </svg>
51
- </button>
52
- </li>
53
- <li class="nav-item">
54
- <a class="nav-link" href="https://github.com/gcol33/docrev" aria-label="GitHub">
55
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
56
- <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"/>
57
- </svg>
58
- </a>
59
- </li>
60
- <li class="nav-item">
61
- <a class="nav-link" href="https://www.npmjs.com/package/docrev" aria-label="npm">
62
- <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
63
- <path d="M0 0v16h16V0zm5.333 13.333H2.667V5.333h2.666v5.334H8V5.333h2.667v8H5.333z"/>
64
- </svg>
65
- </a>
66
- </li>
67
- </ul>
68
- </div>
69
- </div>
70
- </nav>
71
-
72
- <div class="container template-$if(active-home)$home$else$article$endif$">
73
- <div class="row">
74
- <main id="main" class="$if(toc)$col-md-9$else$col-12$endif$">
75
- $body$
76
- </main>
77
- $if(toc)$
78
- <aside class="col-md-3 d-none d-md-block">
79
- <nav id="toc" data-toggle="toc" aria-label="On this page">
80
- <h2 class="h6">On this page</h2>
81
- <div class="toc">$toc$</div>
82
- </nav>
83
- </aside>
84
- $endif$
85
- </div>
86
- </div>
87
-
88
- <footer class="border-top py-3 mt-auto">
89
- <div class="container d-flex justify-content-between align-items-center text-muted" style="font-size:.85rem">
90
- <span>docrev$if(version)$ $version$$endif$</span>
91
- <span>Built with <a href="https://pandoc.org" class="text-muted">pandoc</a></span>
92
- </div>
93
- </footer>
94
-
95
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
96
- <script>
97
- (function () {
98
- var html = document.documentElement;
99
- var sun = document.getElementById('icon-sun');
100
- var moon = document.getElementById('icon-moon');
101
- function apply(t) {
102
- html.setAttribute('data-bs-theme', t);
103
- sun.style.display = t === 'dark' ? 'none' : '';
104
- moon.style.display = t === 'dark' ? '' : 'none';
105
- }
106
- apply(localStorage.getItem('docrev-theme') || 'light');
107
- document.getElementById('theme-toggle').addEventListener('click', function () {
108
- var next = html.getAttribute('data-bs-theme') === 'dark' ? 'light' : 'dark';
109
- localStorage.setItem('docrev-theme', next);
110
- apply(next);
111
- });
112
- })();
113
- </script>
114
-
115
- </body>
116
- </html>
package/eslint.config.js DELETED
@@ -1,27 +0,0 @@
1
- export default [
2
- {
3
- languageOptions: {
4
- ecmaVersion: 2022,
5
- sourceType: 'module',
6
- globals: {
7
- console: 'readonly',
8
- process: 'readonly',
9
- Buffer: 'readonly',
10
- URL: 'readonly',
11
- setTimeout: 'readonly',
12
- clearTimeout: 'readonly',
13
- setInterval: 'readonly',
14
- clearInterval: 'readonly',
15
- },
16
- },
17
- rules: {
18
- 'no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
19
- 'no-constant-condition': 'warn',
20
- 'no-empty': ['warn', { allowEmptyCatch: true }],
21
- 'prefer-const': 'warn',
22
- 'no-var': 'error',
23
- 'eqeqeq': ['warn', 'smart'],
24
- },
25
- ignores: ['node_modules/**', 'test/**'],
26
- },
27
- ];