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.
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/dist/bin/rev.js +29 -21
- package/dist/bin/rev.js.map +1 -1
- package/dist/lib/build.d.ts +43 -0
- package/dist/lib/build.d.ts.map +1 -1
- package/dist/lib/build.js +175 -5
- package/dist/lib/build.js.map +1 -1
- package/dist/lib/commands/build.d.ts.map +1 -1
- package/dist/lib/commands/build.js +39 -125
- package/dist/lib/commands/build.js.map +1 -1
- package/dist/lib/commands/comments.js +3 -3
- package/dist/lib/commands/comments.js.map +1 -1
- package/dist/lib/commands/context.d.ts +12 -1
- package/dist/lib/commands/context.d.ts.map +1 -1
- package/dist/lib/commands/context.js +34 -1
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/merge-resolve.js +1 -1
- package/dist/lib/commands/merge-resolve.js.map +1 -1
- package/dist/lib/commands/quality.js +2 -2
- package/dist/lib/commands/quality.js.map +1 -1
- package/dist/lib/commands/sections.js +1 -1
- package/dist/lib/commands/sections.js.map +1 -1
- package/dist/lib/commands/text-ops.js +1 -1
- package/dist/lib/commands/text-ops.js.map +1 -1
- package/dist/lib/commands/utilities.d.ts.map +1 -1
- package/dist/lib/commands/utilities.js +5 -2
- package/dist/lib/commands/utilities.js.map +1 -1
- package/dist/lib/commands/word-tools.js +2 -2
- package/dist/lib/commands/word-tools.js.map +1 -1
- package/dist/lib/crossref.d.ts.map +1 -1
- package/dist/lib/crossref.js +12 -41
- package/dist/lib/crossref.js.map +1 -1
- package/dist/lib/csl.d.ts.map +1 -1
- package/dist/lib/csl.js +14 -22
- package/dist/lib/csl.js.map +1 -1
- package/dist/lib/diff-engine.js +1 -1
- package/dist/lib/diff-engine.js.map +1 -1
- package/dist/lib/equations.d.ts.map +1 -1
- package/dist/lib/equations.js +12 -3
- package/dist/lib/equations.js.map +1 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +1 -30
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/image-registry.d.ts.map +1 -1
- package/dist/lib/image-registry.js +4 -0
- package/dist/lib/image-registry.js.map +1 -1
- package/dist/lib/import.d.ts +1 -1
- package/dist/lib/import.d.ts.map +1 -1
- package/dist/lib/import.js +1 -1
- package/dist/lib/import.js.map +1 -1
- package/dist/lib/input.d.ts +0 -11
- package/dist/lib/input.d.ts.map +1 -1
- package/dist/lib/input.js +0 -35
- package/dist/lib/input.js.map +1 -1
- package/dist/lib/merge.d.ts.map +1 -1
- package/dist/lib/merge.js +9 -1
- package/dist/lib/merge.js.map +1 -1
- package/dist/lib/ooxml.d.ts +22 -0
- package/dist/lib/ooxml.d.ts.map +1 -1
- package/dist/lib/ooxml.js +130 -0
- package/dist/lib/ooxml.js.map +1 -1
- package/dist/lib/orcid.d.ts.map +1 -1
- package/dist/lib/orcid.js +16 -7
- package/dist/lib/orcid.js.map +1 -1
- package/dist/lib/plugins.d.ts.map +1 -1
- package/dist/lib/plugins.js +8 -4
- package/dist/lib/plugins.js.map +1 -1
- package/dist/lib/protect-restore.d.ts.map +1 -1
- package/dist/lib/protect-restore.js +7 -5
- package/dist/lib/protect-restore.js.map +1 -1
- package/dist/lib/restore-references.d.ts.map +1 -1
- package/dist/lib/restore-references.js +25 -3
- package/dist/lib/restore-references.js.map +1 -1
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +1 -19
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/slides.js +1 -1
- package/dist/lib/slides.js.map +1 -1
- package/dist/lib/spelling.js +1 -1
- package/dist/lib/spelling.js.map +1 -1
- package/dist/lib/tui.js +0 -1
- package/dist/lib/tui.js.map +1 -1
- package/dist/lib/utils.d.ts +14 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +41 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/word-extraction.d.ts +5 -5
- package/dist/lib/word-extraction.d.ts.map +1 -1
- package/dist/lib/word-extraction.js +25 -106
- package/dist/lib/word-extraction.js.map +1 -1
- package/dist/lib/word.d.ts +14 -38
- package/dist/lib/word.d.ts.map +1 -1
- package/dist/lib/word.js +24 -179
- package/dist/lib/word.js.map +1 -1
- package/dist/lib/wordcomments.d.ts.map +1 -1
- package/dist/lib/wordcomments.js +9 -7
- package/dist/lib/wordcomments.js.map +1 -1
- package/package.json +17 -6
- package/.gitattributes +0 -1
- package/PLAN-tables-and-postprocess.md +0 -850
- package/bin/rev.ts +0 -145
- package/docs-src/build.py +0 -113
- package/docs-src/extra.css +0 -208
- package/docs-src/md-to-html.lua +0 -6
- package/docs-src/template.html +0 -116
- package/eslint.config.js +0 -27
- package/lib/anchor-match.ts +0 -307
- package/lib/annotations.ts +0 -695
- package/lib/build.ts +0 -2047
- package/lib/citations.ts +0 -160
- package/lib/commands/build.ts +0 -885
- package/lib/commands/citations.ts +0 -515
- package/lib/commands/comments.ts +0 -1077
- package/lib/commands/context.ts +0 -185
- package/lib/commands/core.ts +0 -328
- package/lib/commands/doi.ts +0 -451
- package/lib/commands/file-ops.ts +0 -372
- package/lib/commands/history.ts +0 -320
- package/lib/commands/index.ts +0 -87
- package/lib/commands/init.ts +0 -259
- package/lib/commands/merge-resolve.ts +0 -378
- package/lib/commands/preview.ts +0 -178
- package/lib/commands/project-info.ts +0 -244
- package/lib/commands/quality.ts +0 -517
- package/lib/commands/response.ts +0 -454
- package/lib/commands/section-boundaries.ts +0 -82
- package/lib/commands/sections.ts +0 -451
- package/lib/commands/sync.ts +0 -689
- package/lib/commands/text-ops.ts +0 -449
- package/lib/commands/utilities.ts +0 -448
- package/lib/commands/verify-anchors.ts +0 -272
- package/lib/commands/word-tools.ts +0 -340
- package/lib/comment-realign.ts +0 -99
- package/lib/config.ts +0 -84
- package/lib/crossref.ts +0 -781
- package/lib/csl.ts +0 -191
- package/lib/dependencies.ts +0 -132
- package/lib/diff-engine.ts +0 -465
- package/lib/doi-cache.ts +0 -115
- package/lib/doi.ts +0 -879
- package/lib/equations.ts +0 -506
- package/lib/errors.ts +0 -350
- package/lib/format.ts +0 -541
- package/lib/git.ts +0 -326
- package/lib/grammar.ts +0 -303
- package/lib/image-registry.ts +0 -180
- package/lib/import.ts +0 -932
- package/lib/input.ts +0 -174
- package/lib/journals.ts +0 -543
- package/lib/macro-filter.lua +0 -201
- package/lib/macros.ts +0 -273
- package/lib/merge.ts +0 -633
- package/lib/ooxml.ts +0 -768
- package/lib/orcid.ts +0 -144
- package/lib/pdf-comments.ts +0 -263
- package/lib/pdf-import.ts +0 -524
- package/lib/plugins.ts +0 -362
- package/lib/postprocess.ts +0 -188
- package/lib/pptx-color-filter.lua +0 -37
- package/lib/pptx-template.ts +0 -469
- package/lib/pptx-themes/academic.pptx +0 -0
- package/lib/pptx-themes/corporate.pptx +0 -0
- package/lib/pptx-themes/dark.pptx +0 -0
- package/lib/pptx-themes/default.pptx +0 -0
- package/lib/pptx-themes/minimal.pptx +0 -0
- package/lib/pptx-themes/plant.pptx +0 -0
- package/lib/pptx-themes.ts +0 -483
- package/lib/protect-restore.ts +0 -520
- package/lib/rate-limiter.ts +0 -127
- package/lib/response.ts +0 -200
- package/lib/restore-references.ts +0 -240
- package/lib/review.ts +0 -327
- package/lib/schema.ts +0 -494
- package/lib/scientific-words.ts +0 -73
- package/lib/sections.ts +0 -428
- package/lib/slides.ts +0 -756
- package/lib/spelling.ts +0 -334
- package/lib/templates.ts +0 -526
- package/lib/themes.ts +0 -742
- package/lib/trackchanges.ts +0 -166
- package/lib/tui.ts +0 -450
- package/lib/types.ts +0 -546
- package/lib/undo.ts +0 -250
- package/lib/utils.ts +0 -69
- package/lib/variables.ts +0 -179
- package/lib/word-extraction.ts +0 -525
- package/lib/word.ts +0 -526
- package/lib/wordcomments.ts +0 -789
- package/mkdocs.yml +0 -64
- package/scripts/postbuild.js +0 -47
- package/tsconfig.json +0 -26
- 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)
|
package/docs-src/extra.css
DELETED
|
@@ -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; }
|
package/docs-src/md-to-html.lua
DELETED
package/docs-src/template.html
DELETED
|
@@ -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
|
-
];
|