docrev 0.9.13 → 0.9.14
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/.claude/settings.local.json +9 -9
- package/.gitattributes +1 -1
- package/CHANGELOG.md +149 -149
- package/PLAN-tables-and-postprocess.md +850 -850
- package/README.md +391 -391
- package/bin/rev.js +11 -11
- package/bin/rev.ts +145 -145
- package/completions/rev.bash +127 -127
- package/completions/rev.ps1 +210 -210
- package/completions/rev.zsh +207 -207
- package/dev_notes/stress2/build_adversarial.ts +186 -186
- package/dev_notes/stress2/drift_matcher.ts +62 -62
- package/dev_notes/stress2/probe_anchors.ts +35 -35
- package/dev_notes/stress2/project/discussion.before.md +3 -3
- package/dev_notes/stress2/project/discussion.md +3 -3
- package/dev_notes/stress2/project/methods.before.md +20 -20
- package/dev_notes/stress2/project/methods.md +20 -20
- package/dev_notes/stress2/project/rev.yaml +5 -5
- package/dev_notes/stress2/project/sections.yaml +4 -4
- package/dev_notes/stress2/sections.yaml +5 -5
- package/dev_notes/stress2/trace_placement.ts +50 -50
- package/dev_notes/stresstest_boundaries.ts +27 -27
- package/dev_notes/stresstest_drift_apply.ts +43 -43
- package/dev_notes/stresstest_drift_compare.ts +43 -43
- package/dev_notes/stresstest_drift_v2.ts +54 -54
- package/dev_notes/stresstest_inspect.ts +54 -54
- package/dev_notes/stresstest_pstyle.ts +55 -55
- package/dev_notes/stresstest_section_debug.ts +23 -23
- package/dev_notes/stresstest_split.ts +70 -70
- package/dev_notes/stresstest_trace.ts +19 -19
- package/dev_notes/stresstest_verify_no_overwrite.ts +40 -40
- package/dist/lib/build.d.ts +38 -1
- package/dist/lib/build.d.ts.map +1 -1
- package/dist/lib/build.js +68 -30
- package/dist/lib/build.js.map +1 -1
- package/dist/lib/commands/build.d.ts.map +1 -1
- package/dist/lib/commands/build.js +38 -5
- package/dist/lib/commands/build.js.map +1 -1
- package/dist/lib/commands/utilities.js +164 -164
- package/dist/lib/commands/word-tools.js +8 -8
- package/dist/lib/grammar.js +3 -3
- package/dist/lib/pdf-comments.js +44 -44
- package/dist/lib/plugins.js +57 -57
- package/dist/lib/pptx-themes.js +115 -115
- package/dist/lib/spelling.js +2 -2
- package/dist/lib/templates.js +387 -387
- package/dist/lib/themes.js +51 -51
- package/eslint.config.js +27 -27
- package/lib/anchor-match.ts +276 -276
- package/lib/annotations.ts +644 -644
- package/lib/build.ts +1300 -1251
- package/lib/citations.ts +160 -160
- package/lib/commands/build.ts +833 -801
- package/lib/commands/citations.ts +515 -515
- package/lib/commands/comments.ts +1050 -1050
- package/lib/commands/context.ts +174 -174
- package/lib/commands/core.ts +309 -309
- package/lib/commands/doi.ts +435 -435
- package/lib/commands/file-ops.ts +372 -372
- package/lib/commands/history.ts +320 -320
- package/lib/commands/index.ts +87 -87
- package/lib/commands/init.ts +259 -259
- package/lib/commands/merge-resolve.ts +378 -378
- package/lib/commands/preview.ts +178 -178
- package/lib/commands/project-info.ts +244 -244
- package/lib/commands/quality.ts +517 -517
- package/lib/commands/response.ts +454 -454
- package/lib/commands/section-boundaries.ts +82 -82
- package/lib/commands/sections.ts +451 -451
- package/lib/commands/sync.ts +706 -706
- package/lib/commands/text-ops.ts +449 -449
- package/lib/commands/utilities.ts +448 -448
- package/lib/commands/verify-anchors.ts +272 -272
- package/lib/commands/word-tools.ts +340 -340
- package/lib/comment-realign.ts +517 -517
- package/lib/config.ts +84 -84
- package/lib/crossref.ts +781 -781
- package/lib/csl.ts +191 -191
- package/lib/dependencies.ts +98 -98
- package/lib/diff-engine.ts +465 -465
- package/lib/doi-cache.ts +115 -115
- package/lib/doi.ts +897 -897
- package/lib/equations.ts +506 -506
- package/lib/errors.ts +346 -346
- package/lib/format.ts +541 -541
- package/lib/git.ts +326 -326
- package/lib/grammar.ts +303 -303
- package/lib/image-registry.ts +180 -180
- package/lib/import.ts +911 -911
- package/lib/journals.ts +543 -543
- package/lib/merge.ts +633 -633
- package/lib/orcid.ts +144 -144
- package/lib/pdf-comments.ts +263 -263
- package/lib/pdf-import.ts +524 -524
- package/lib/plugins.ts +362 -362
- package/lib/postprocess.ts +188 -188
- package/lib/pptx-color-filter.lua +37 -37
- package/lib/pptx-template.ts +469 -469
- package/lib/pptx-themes.ts +483 -483
- package/lib/protect-restore.ts +520 -520
- package/lib/rate-limiter.ts +94 -94
- package/lib/response.ts +197 -197
- package/lib/restore-references.ts +240 -240
- package/lib/review.ts +327 -327
- package/lib/schema.ts +417 -417
- package/lib/scientific-words.ts +73 -73
- package/lib/sections.ts +335 -335
- package/lib/slides.ts +756 -756
- package/lib/spelling.ts +334 -334
- package/lib/templates.ts +526 -526
- package/lib/themes.ts +742 -742
- package/lib/trackchanges.ts +247 -247
- package/lib/tui.ts +450 -450
- package/lib/types.ts +550 -550
- package/lib/undo.ts +250 -250
- package/lib/utils.ts +69 -69
- package/lib/variables.ts +179 -179
- package/lib/word-extraction.ts +806 -806
- package/lib/word.ts +643 -643
- package/lib/wordcomments.ts +817 -817
- package/package.json +137 -137
- package/scripts/postbuild.js +28 -28
- package/skill/REFERENCE.md +431 -431
- package/skill/SKILL.md +258 -258
- package/tsconfig.json +26 -26
- package/types/index.d.ts +525 -525
package/bin/rev.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// Run the compiled TypeScript entry point directly (no tsx needed)
|
|
4
|
-
|
|
5
|
-
import { pathToFileURL, fileURLToPath } from 'url';
|
|
6
|
-
import { dirname, join } from 'path';
|
|
7
|
-
|
|
8
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
-
const compiled = join(__dirname, '..', 'dist', 'bin', 'rev.js');
|
|
10
|
-
|
|
11
|
-
// Windows requires file:// URLs for dynamic ESM imports
|
|
12
|
-
await import(pathToFileURL(compiled).href);
|
|
2
|
+
|
|
3
|
+
// Run the compiled TypeScript entry point directly (no tsx needed)
|
|
4
|
+
|
|
5
|
+
import { pathToFileURL, fileURLToPath } from 'url';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
7
|
+
|
|
8
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const compiled = join(__dirname, '..', 'dist', 'bin', 'rev.js');
|
|
10
|
+
|
|
11
|
+
// Windows requires file:// URLs for dynamic ESM imports
|
|
12
|
+
await import(pathToFileURL(compiled).href);
|
package/bin/rev.ts
CHANGED
|
@@ -1,145 +1,145 @@
|
|
|
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();
|
|
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/completions/rev.bash
CHANGED
|
@@ -1,127 +1,127 @@
|
|
|
1
|
-
# Bash completion for rev (docrev)
|
|
2
|
-
# Install: source this file or add to ~/.bashrc:
|
|
3
|
-
# eval "$(rev completions bash)"
|
|
4
|
-
|
|
5
|
-
_rev_completions() {
|
|
6
|
-
local cur prev words cword
|
|
7
|
-
_init_completion || return
|
|
8
|
-
|
|
9
|
-
local commands="build new import sections extract review status comments resolve reply strip refs migrate config install doi citations equations figures response anonymize validate merge diff history help init split word-count wc stats search backup export preview watch lint grammar annotate apply comment completions"
|
|
10
|
-
local build_formats="pdf docx tex all"
|
|
11
|
-
local doi_actions="check lookup fetch add"
|
|
12
|
-
local eq_actions="list extract convert from-word"
|
|
13
|
-
local help_topics="workflow syntax commands"
|
|
14
|
-
local preview_formats="pdf docx"
|
|
15
|
-
|
|
16
|
-
case "${prev}" in
|
|
17
|
-
rev)
|
|
18
|
-
COMPREPLY=($(compgen -W "${commands} --help --version" -- "${cur}"))
|
|
19
|
-
return
|
|
20
|
-
;;
|
|
21
|
-
build)
|
|
22
|
-
COMPREPLY=($(compgen -W "${build_formats} --toc --show-changes --clean" -- "${cur}"))
|
|
23
|
-
return
|
|
24
|
-
;;
|
|
25
|
-
new)
|
|
26
|
-
COMPREPLY=($(compgen -W "--list --template" -- "${cur}"))
|
|
27
|
-
return
|
|
28
|
-
;;
|
|
29
|
-
--template)
|
|
30
|
-
COMPREPLY=($(compgen -W "paper minimal thesis proposal" -- "${cur}"))
|
|
31
|
-
return
|
|
32
|
-
;;
|
|
33
|
-
doi)
|
|
34
|
-
COMPREPLY=($(compgen -W "${doi_actions}" -- "${cur}"))
|
|
35
|
-
return
|
|
36
|
-
;;
|
|
37
|
-
equations|eq)
|
|
38
|
-
COMPREPLY=($(compgen -W "${eq_actions}" -- "${cur}"))
|
|
39
|
-
return
|
|
40
|
-
;;
|
|
41
|
-
validate)
|
|
42
|
-
COMPREPLY=($(compgen -W "--journal --list" -- "${cur}"))
|
|
43
|
-
return
|
|
44
|
-
;;
|
|
45
|
-
--journal)
|
|
46
|
-
COMPREPLY=($(compgen -W "nature science plos cell ecology custom" -- "${cur}"))
|
|
47
|
-
return
|
|
48
|
-
;;
|
|
49
|
-
help)
|
|
50
|
-
COMPREPLY=($(compgen -W "${help_topics}" -- "${cur}"))
|
|
51
|
-
return
|
|
52
|
-
;;
|
|
53
|
-
config)
|
|
54
|
-
COMPREPLY=($(compgen -W "user" -- "${cur}"))
|
|
55
|
-
return
|
|
56
|
-
;;
|
|
57
|
-
word-count|wc)
|
|
58
|
-
COMPREPLY=($(compgen -W "--limit --journal" -- "${cur}"))
|
|
59
|
-
return
|
|
60
|
-
;;
|
|
61
|
-
preview)
|
|
62
|
-
COMPREPLY=($(compgen -W "${preview_formats}" -- "${cur}"))
|
|
63
|
-
return
|
|
64
|
-
;;
|
|
65
|
-
watch)
|
|
66
|
-
COMPREPLY=($(compgen -W "pdf docx all --no-open" -- "${cur}"))
|
|
67
|
-
return
|
|
68
|
-
;;
|
|
69
|
-
lint)
|
|
70
|
-
COMPREPLY=($(compgen -W "--fix" -- "${cur}"))
|
|
71
|
-
return
|
|
72
|
-
;;
|
|
73
|
-
grammar)
|
|
74
|
-
COMPREPLY=($(compgen -W "--learn --forget --list --rules --no-scientific --severity" -- "${cur}"))
|
|
75
|
-
return
|
|
76
|
-
;;
|
|
77
|
-
annotate)
|
|
78
|
-
COMPREPLY=($(compgen -f -X '!*.docx' -- "${cur}"))
|
|
79
|
-
return
|
|
80
|
-
;;
|
|
81
|
-
apply)
|
|
82
|
-
COMPREPLY=($(compgen -f -X '!*.md' -- "${cur}"))
|
|
83
|
-
return
|
|
84
|
-
;;
|
|
85
|
-
comment)
|
|
86
|
-
COMPREPLY=($(compgen -f -X '!*.docx' -- "${cur}"))
|
|
87
|
-
return
|
|
88
|
-
;;
|
|
89
|
-
completions)
|
|
90
|
-
COMPREPLY=($(compgen -W "bash zsh" -- "${cur}"))
|
|
91
|
-
return
|
|
92
|
-
;;
|
|
93
|
-
import|sections|extract|review|status|comments|strip|refs|migrate|figures|response|anonymize|split)
|
|
94
|
-
# Complete with .md and .docx files
|
|
95
|
-
COMPREPLY=($(compgen -f -X '!*.@(md|docx)' -- "${cur}"))
|
|
96
|
-
return
|
|
97
|
-
;;
|
|
98
|
-
resolve|reply)
|
|
99
|
-
# Complete with -n option or .md files
|
|
100
|
-
if [[ "${cur}" == -* ]]; then
|
|
101
|
-
COMPREPLY=($(compgen -W "-n -m" -- "${cur}"))
|
|
102
|
-
else
|
|
103
|
-
COMPREPLY=($(compgen -f -X '!*.md' -- "${cur}"))
|
|
104
|
-
fi
|
|
105
|
-
return
|
|
106
|
-
;;
|
|
107
|
-
check|lookup|add|fetch)
|
|
108
|
-
# DOI subcommands - complete with .bib files
|
|
109
|
-
COMPREPLY=($(compgen -f -X '!*.bib' -- "${cur}"))
|
|
110
|
-
return
|
|
111
|
-
;;
|
|
112
|
-
citations)
|
|
113
|
-
COMPREPLY=($(compgen -f -X '!*.bib' -- "${cur}"))
|
|
114
|
-
return
|
|
115
|
-
;;
|
|
116
|
-
merge)
|
|
117
|
-
# Complete with .md and .docx files
|
|
118
|
-
COMPREPLY=($(compgen -f -X '!*.@(md|docx)' -- "${cur}"))
|
|
119
|
-
return
|
|
120
|
-
;;
|
|
121
|
-
esac
|
|
122
|
-
|
|
123
|
-
# Default: complete with files
|
|
124
|
-
COMPREPLY=($(compgen -f -- "${cur}"))
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
complete -F _rev_completions rev
|
|
1
|
+
# Bash completion for rev (docrev)
|
|
2
|
+
# Install: source this file or add to ~/.bashrc:
|
|
3
|
+
# eval "$(rev completions bash)"
|
|
4
|
+
|
|
5
|
+
_rev_completions() {
|
|
6
|
+
local cur prev words cword
|
|
7
|
+
_init_completion || return
|
|
8
|
+
|
|
9
|
+
local commands="build new import sections extract review status comments resolve reply strip refs migrate config install doi citations equations figures response anonymize validate merge diff history help init split word-count wc stats search backup export preview watch lint grammar annotate apply comment completions"
|
|
10
|
+
local build_formats="pdf docx tex all"
|
|
11
|
+
local doi_actions="check lookup fetch add"
|
|
12
|
+
local eq_actions="list extract convert from-word"
|
|
13
|
+
local help_topics="workflow syntax commands"
|
|
14
|
+
local preview_formats="pdf docx"
|
|
15
|
+
|
|
16
|
+
case "${prev}" in
|
|
17
|
+
rev)
|
|
18
|
+
COMPREPLY=($(compgen -W "${commands} --help --version" -- "${cur}"))
|
|
19
|
+
return
|
|
20
|
+
;;
|
|
21
|
+
build)
|
|
22
|
+
COMPREPLY=($(compgen -W "${build_formats} --toc --show-changes --clean" -- "${cur}"))
|
|
23
|
+
return
|
|
24
|
+
;;
|
|
25
|
+
new)
|
|
26
|
+
COMPREPLY=($(compgen -W "--list --template" -- "${cur}"))
|
|
27
|
+
return
|
|
28
|
+
;;
|
|
29
|
+
--template)
|
|
30
|
+
COMPREPLY=($(compgen -W "paper minimal thesis proposal" -- "${cur}"))
|
|
31
|
+
return
|
|
32
|
+
;;
|
|
33
|
+
doi)
|
|
34
|
+
COMPREPLY=($(compgen -W "${doi_actions}" -- "${cur}"))
|
|
35
|
+
return
|
|
36
|
+
;;
|
|
37
|
+
equations|eq)
|
|
38
|
+
COMPREPLY=($(compgen -W "${eq_actions}" -- "${cur}"))
|
|
39
|
+
return
|
|
40
|
+
;;
|
|
41
|
+
validate)
|
|
42
|
+
COMPREPLY=($(compgen -W "--journal --list" -- "${cur}"))
|
|
43
|
+
return
|
|
44
|
+
;;
|
|
45
|
+
--journal)
|
|
46
|
+
COMPREPLY=($(compgen -W "nature science plos cell ecology custom" -- "${cur}"))
|
|
47
|
+
return
|
|
48
|
+
;;
|
|
49
|
+
help)
|
|
50
|
+
COMPREPLY=($(compgen -W "${help_topics}" -- "${cur}"))
|
|
51
|
+
return
|
|
52
|
+
;;
|
|
53
|
+
config)
|
|
54
|
+
COMPREPLY=($(compgen -W "user" -- "${cur}"))
|
|
55
|
+
return
|
|
56
|
+
;;
|
|
57
|
+
word-count|wc)
|
|
58
|
+
COMPREPLY=($(compgen -W "--limit --journal" -- "${cur}"))
|
|
59
|
+
return
|
|
60
|
+
;;
|
|
61
|
+
preview)
|
|
62
|
+
COMPREPLY=($(compgen -W "${preview_formats}" -- "${cur}"))
|
|
63
|
+
return
|
|
64
|
+
;;
|
|
65
|
+
watch)
|
|
66
|
+
COMPREPLY=($(compgen -W "pdf docx all --no-open" -- "${cur}"))
|
|
67
|
+
return
|
|
68
|
+
;;
|
|
69
|
+
lint)
|
|
70
|
+
COMPREPLY=($(compgen -W "--fix" -- "${cur}"))
|
|
71
|
+
return
|
|
72
|
+
;;
|
|
73
|
+
grammar)
|
|
74
|
+
COMPREPLY=($(compgen -W "--learn --forget --list --rules --no-scientific --severity" -- "${cur}"))
|
|
75
|
+
return
|
|
76
|
+
;;
|
|
77
|
+
annotate)
|
|
78
|
+
COMPREPLY=($(compgen -f -X '!*.docx' -- "${cur}"))
|
|
79
|
+
return
|
|
80
|
+
;;
|
|
81
|
+
apply)
|
|
82
|
+
COMPREPLY=($(compgen -f -X '!*.md' -- "${cur}"))
|
|
83
|
+
return
|
|
84
|
+
;;
|
|
85
|
+
comment)
|
|
86
|
+
COMPREPLY=($(compgen -f -X '!*.docx' -- "${cur}"))
|
|
87
|
+
return
|
|
88
|
+
;;
|
|
89
|
+
completions)
|
|
90
|
+
COMPREPLY=($(compgen -W "bash zsh" -- "${cur}"))
|
|
91
|
+
return
|
|
92
|
+
;;
|
|
93
|
+
import|sections|extract|review|status|comments|strip|refs|migrate|figures|response|anonymize|split)
|
|
94
|
+
# Complete with .md and .docx files
|
|
95
|
+
COMPREPLY=($(compgen -f -X '!*.@(md|docx)' -- "${cur}"))
|
|
96
|
+
return
|
|
97
|
+
;;
|
|
98
|
+
resolve|reply)
|
|
99
|
+
# Complete with -n option or .md files
|
|
100
|
+
if [[ "${cur}" == -* ]]; then
|
|
101
|
+
COMPREPLY=($(compgen -W "-n -m" -- "${cur}"))
|
|
102
|
+
else
|
|
103
|
+
COMPREPLY=($(compgen -f -X '!*.md' -- "${cur}"))
|
|
104
|
+
fi
|
|
105
|
+
return
|
|
106
|
+
;;
|
|
107
|
+
check|lookup|add|fetch)
|
|
108
|
+
# DOI subcommands - complete with .bib files
|
|
109
|
+
COMPREPLY=($(compgen -f -X '!*.bib' -- "${cur}"))
|
|
110
|
+
return
|
|
111
|
+
;;
|
|
112
|
+
citations)
|
|
113
|
+
COMPREPLY=($(compgen -f -X '!*.bib' -- "${cur}"))
|
|
114
|
+
return
|
|
115
|
+
;;
|
|
116
|
+
merge)
|
|
117
|
+
# Complete with .md and .docx files
|
|
118
|
+
COMPREPLY=($(compgen -f -X '!*.@(md|docx)' -- "${cur}"))
|
|
119
|
+
return
|
|
120
|
+
;;
|
|
121
|
+
esac
|
|
122
|
+
|
|
123
|
+
# Default: complete with files
|
|
124
|
+
COMPREPLY=($(compgen -f -- "${cur}"))
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
complete -F _rev_completions rev
|