markdown-maker 1.9.2 → 1.10.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/.github/workflows/node.js.yml +1 -1
- package/build/cltool.d.ts +1 -0
- package/build/cltool.js +161 -0
- package/build/cltool.js.map +1 -0
- package/build/commands.d.ts +43 -0
- package/build/commands.js +223 -0
- package/build/commands.js.map +1 -0
- package/build/parse.d.ts +65 -0
- package/build/parse.js +281 -0
- package/build/parse.js.map +1 -0
- package/build/templates.d.ts +10 -0
- package/build/templates.js +20 -0
- package/build/templates.js.map +1 -0
- package/package.json +2 -2
- package/src/cltool.ts +11 -3
- package/src/commands.ts +44 -40
- package/src/parse.ts +13 -19
- package/src/templates/configTemplate.json +13 -0
- package/test/advanced.test.js +10 -8
- package/test/basic.test.js +11 -0
- package/test/errors.test.js +23 -1
- package/test/hooks.js +9 -0
- package/test/tester.test.js +12 -3
package/build/parse.js
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.splice = void 0;
|
4
|
+
var fs = require("fs"); /* for handling reading of files */
|
5
|
+
var path = require("path"); /* for handling file paths */
|
6
|
+
var Colors = require("colors.ts"); /* for adding colours to strings */
|
7
|
+
Colors.enable();
|
8
|
+
var marked = require("marked");
|
9
|
+
var commands_1 = require("./commands");
|
10
|
+
var TargetType;
|
11
|
+
(function (TargetType) {
|
12
|
+
TargetType[TargetType["HTML"] = 0] = "HTML";
|
13
|
+
TargetType[TargetType["MARKDOWN"] = 1] = "MARKDOWN";
|
14
|
+
})(TargetType || (TargetType = {}));
|
15
|
+
/* parse some md
|
16
|
+
* recursively with extra options */
|
17
|
+
var Parser = /** @class */ (function () {
|
18
|
+
function Parser(filename, clargs, opts) {
|
19
|
+
/* this.working_directory */
|
20
|
+
this.file = filename;
|
21
|
+
if (!opts)
|
22
|
+
opts = {};
|
23
|
+
/* the parent parser */
|
24
|
+
this.parent = opts.parent;
|
25
|
+
this.line_num = 0;
|
26
|
+
this.wd = path.dirname(filename);
|
27
|
+
this.wd_full = path.resolve(this.wd);
|
28
|
+
/* finished blob */
|
29
|
+
this.blobs = {};
|
30
|
+
/* all options */
|
31
|
+
this.opts = {
|
32
|
+
defs: {},
|
33
|
+
secs: [],
|
34
|
+
args: [],
|
35
|
+
depth: 0,
|
36
|
+
verbose: false,
|
37
|
+
debug: false,
|
38
|
+
max_depth: 5,
|
39
|
+
use_underscore: false,
|
40
|
+
toc_level: 3,
|
41
|
+
allow_undefined: false,
|
42
|
+
html: false,
|
43
|
+
watch: false,
|
44
|
+
targetType: undefined,
|
45
|
+
only_warn: false,
|
46
|
+
parent: undefined,
|
47
|
+
isFileCallback: function (f) {
|
48
|
+
if (!fs.existsSync(f))
|
49
|
+
return false;
|
50
|
+
return fs.readFileSync(f, "utf-8") + "\n";
|
51
|
+
},
|
52
|
+
};
|
53
|
+
if (!clargs) {
|
54
|
+
clargs = {};
|
55
|
+
}
|
56
|
+
/* append all commandline arguments to this */
|
57
|
+
Object.assign(this.opts, clargs);
|
58
|
+
Object.assign(this.opts, opts);
|
59
|
+
this.raw = this.opts.isFileCallback(filename) || filename;
|
60
|
+
}
|
61
|
+
/**
|
62
|
+
* parse wrapper for handling
|
63
|
+
* preprocessing, parsing and postprocess
|
64
|
+
**/
|
65
|
+
Parser.prototype.parse = function () {
|
66
|
+
(0, commands_1.load_extensions)(this);
|
67
|
+
if (this.opts.verbose || this.opts.debug) {
|
68
|
+
console.log(Colors.colors("magenta", "parsing " + this.file + ": depth=" + this.opts.depth));
|
69
|
+
}
|
70
|
+
if (this.opts.debug) {
|
71
|
+
console.log("Parsing options:");
|
72
|
+
console.log(this.opts);
|
73
|
+
}
|
74
|
+
/* reset sections for beginning parse */
|
75
|
+
if (this.opts.depth === 0)
|
76
|
+
this.opts.secs = [];
|
77
|
+
var __blob;
|
78
|
+
/* apply preproccessing to raw file */
|
79
|
+
__blob = this.preprocess(this.raw);
|
80
|
+
/* main parser instance call */
|
81
|
+
__blob = this.mainparse(__blob);
|
82
|
+
/**
|
83
|
+
* apply postprocessing after */
|
84
|
+
__blob = this.postprocess(__blob);
|
85
|
+
return __blob;
|
86
|
+
};
|
87
|
+
Parser.prototype.mainparse = function (blob) {
|
88
|
+
var _this = this;
|
89
|
+
if (this.opts.verbose || this.opts.debug) {
|
90
|
+
console.debug("beginning mainparse of '".concat(this.file, "'").blue);
|
91
|
+
}
|
92
|
+
/* main parser instance loop */
|
93
|
+
blob.split("\n").forEach(function (line, lnum) {
|
94
|
+
_this.line_num = lnum;
|
95
|
+
/* if line looks like a title */
|
96
|
+
var titleMatch = line.trim().match(/^(#+) (.+)$/);
|
97
|
+
if (titleMatch) {
|
98
|
+
if (_this.opts.verbose || _this.opts.debug)
|
99
|
+
console.log("found toc element: " + line);
|
100
|
+
/* implement toc level */
|
101
|
+
var level = titleMatch[1].length;
|
102
|
+
var title = titleMatch[2];
|
103
|
+
_this.opts.secs.push({ level: level, title: title });
|
104
|
+
if (_this.opts.debug) {
|
105
|
+
console.log("updated sections:", { level: level, title: title });
|
106
|
+
}
|
107
|
+
}
|
108
|
+
});
|
109
|
+
return this.parse_commands(blob, commands_1.commands.parse);
|
110
|
+
};
|
111
|
+
Parser.prototype.preprocess = function (blob) {
|
112
|
+
if (this.opts.verbose || this.opts.debug) {
|
113
|
+
console.debug("beginning preprocess of '".concat(this.file, "'").blue);
|
114
|
+
}
|
115
|
+
return this.parse_commands(blob, commands_1.commands.preparse);
|
116
|
+
};
|
117
|
+
Parser.prototype.postprocess = function (blob) {
|
118
|
+
if (this.opts.verbose || this.opts.debug) {
|
119
|
+
console.debug("beginning postprocess of '".concat(this.file, "'").blue);
|
120
|
+
}
|
121
|
+
blob = this.parse_commands(blob, commands_1.commands.postparse);
|
122
|
+
/* remove double empty lines */
|
123
|
+
blob = this.remove_double_blank_lines(blob);
|
124
|
+
blob = blob.trimEnd() + "\n\n";
|
125
|
+
return blob;
|
126
|
+
};
|
127
|
+
Parser.prototype.parse_commands = function (blob, commands) {
|
128
|
+
var _this = this;
|
129
|
+
commands.forEach(function (command) {
|
130
|
+
/* Add global flag to RegExp */
|
131
|
+
var re = new RegExp(command.validator.source, (command.validator.flags || "") + "g");
|
132
|
+
blob = blob.replace(re, function () {
|
133
|
+
var args = [];
|
134
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
135
|
+
args[_i] = arguments[_i];
|
136
|
+
}
|
137
|
+
return command.act(args, _this) || "";
|
138
|
+
});
|
139
|
+
});
|
140
|
+
return blob;
|
141
|
+
};
|
142
|
+
Parser.prototype.parse_all_commands = function (blob, commands) {
|
143
|
+
var _this = this;
|
144
|
+
Object.keys(commands).forEach(function (key) {
|
145
|
+
blob = _this.parse_commands(blob, commands[key]);
|
146
|
+
});
|
147
|
+
return blob;
|
148
|
+
};
|
149
|
+
Parser.prototype.titleId = function (title) {
|
150
|
+
var sep = this.opts.use_underscore ? "_" : "-";
|
151
|
+
title = title
|
152
|
+
.toLowerCase()
|
153
|
+
.replace(/[^\w\s]+/g, "")
|
154
|
+
.replace(/[\s_]+/g, sep);
|
155
|
+
return title;
|
156
|
+
};
|
157
|
+
Parser.prototype.gen_toc = function () {
|
158
|
+
var _this = this;
|
159
|
+
var __blob = [];
|
160
|
+
var tabSize = 2;
|
161
|
+
var beg = "* ";
|
162
|
+
var hor = " ".repeat(tabSize);
|
163
|
+
this.opts.secs.forEach(function (sec) {
|
164
|
+
if (sec.level > _this.opts.toc_level)
|
165
|
+
return;
|
166
|
+
var title = sec.title.replace(/_/g, " ");
|
167
|
+
title = _this.parse_all_commands(title, commands_1.commands);
|
168
|
+
var link = _this.titleId(title);
|
169
|
+
var __line = hor.repeat(Math.max(sec.level - 1, 0)) + beg + "[".concat(title, "](#").concat(link, ")");
|
170
|
+
__blob.push(__line);
|
171
|
+
});
|
172
|
+
return __blob.join("\n");
|
173
|
+
};
|
174
|
+
Parser.prototype.line_num_from_index = function (index) {
|
175
|
+
return this.raw.substring(0, index).split("\n").length + 1;
|
176
|
+
};
|
177
|
+
Parser.prototype.remove_double_blank_lines = function (blob) {
|
178
|
+
/* replace all triple newlines, and EOF by double newline */
|
179
|
+
blob = blob.replace(/(\r\n|\n){3,}/g, "\n\n");
|
180
|
+
return blob;
|
181
|
+
};
|
182
|
+
/* output the parsed document to bundle */
|
183
|
+
Parser.prototype.to = function (bundleName, callback) {
|
184
|
+
var dir = path.dirname(bundleName);
|
185
|
+
if (callback === undefined)
|
186
|
+
callback = function () { };
|
187
|
+
if (!fs.existsSync(dir)) {
|
188
|
+
fs.mkdirSync(dir, { recursive: true });
|
189
|
+
}
|
190
|
+
if (!this.opts.html) {
|
191
|
+
this.get(TargetType.MARKDOWN, function (blob) {
|
192
|
+
fs.writeFile(bundleName, blob, function () { return callback(bundleName); });
|
193
|
+
});
|
194
|
+
}
|
195
|
+
else {
|
196
|
+
var htmlFileName_1 = bundleName.replace(".md", ".html");
|
197
|
+
fs.writeFile(htmlFileName_1, this.html(), function () { return callback(htmlFileName_1); });
|
198
|
+
}
|
199
|
+
};
|
200
|
+
Parser.prototype.html = function () {
|
201
|
+
var htmlFormatted = marked(this.get(TargetType.HTML));
|
202
|
+
if (this.opts.watch) {
|
203
|
+
return ("<script>w=new WebSocket(\"ws:localhost:7788\");w.addEventListener(\"message\",(e)=>{if(e.data==\"refresh\")location.reload();});</script>\n" +
|
204
|
+
htmlFormatted);
|
205
|
+
}
|
206
|
+
return htmlFormatted;
|
207
|
+
};
|
208
|
+
Parser.prototype.get = function (targetType, callback) {
|
209
|
+
/* If target type is undefined, markdown is the default */
|
210
|
+
if (targetType === undefined)
|
211
|
+
targetType = TargetType.MARKDOWN;
|
212
|
+
if (this.blobs[targetType]) {
|
213
|
+
if (callback) {
|
214
|
+
callback(this.blobs[targetType]);
|
215
|
+
}
|
216
|
+
return this.blobs[targetType];
|
217
|
+
}
|
218
|
+
else {
|
219
|
+
try {
|
220
|
+
this.opts.targetType = targetType;
|
221
|
+
var blob = this.parse();
|
222
|
+
this.opts.targetType = undefined;
|
223
|
+
if (callback)
|
224
|
+
callback(blob);
|
225
|
+
return blob;
|
226
|
+
}
|
227
|
+
catch (error) {
|
228
|
+
/* Compile a traceback of error */
|
229
|
+
var traceback = "";
|
230
|
+
var p = this;
|
231
|
+
do {
|
232
|
+
if (error instanceof commands_1.MDMError)
|
233
|
+
traceback += "\n...on line ".concat(p.line_num_from_index(error.match.index), " in ").concat(p.file).grey(15);
|
234
|
+
else
|
235
|
+
traceback += "\n...on line ".concat(p.line_num, " in ").concat(p.file).grey(15);
|
236
|
+
if (p.parent)
|
237
|
+
p = p.parent;
|
238
|
+
} while (p.parent);
|
239
|
+
error.message += traceback;
|
240
|
+
/* only interested in node stacktrace when debugging */
|
241
|
+
if (!this.opts.debug)
|
242
|
+
error.stack = "";
|
243
|
+
if (this.opts.only_warn)
|
244
|
+
console.error(error);
|
245
|
+
else
|
246
|
+
throw error;
|
247
|
+
}
|
248
|
+
}
|
249
|
+
};
|
250
|
+
Parser.TOKEN = "#md";
|
251
|
+
return Parser;
|
252
|
+
}());
|
253
|
+
function splice(str, startIndex, width, newSubStr) {
|
254
|
+
var start = str.slice(0, startIndex);
|
255
|
+
var end = str.slice(startIndex + width);
|
256
|
+
return start + newSubStr + end;
|
257
|
+
}
|
258
|
+
exports.splice = splice;
|
259
|
+
/* add extention to marked for classed blockquotes*/
|
260
|
+
marked.use({
|
261
|
+
renderer: {
|
262
|
+
blockquote: function (quote) {
|
263
|
+
/* find the ending, and if not, return the default */
|
264
|
+
var ending = quote.match(/\{(.+)\}\s*<\/p>/);
|
265
|
+
if (!ending)
|
266
|
+
return "<blockquote>".concat(quote, "</blockquote>");
|
267
|
+
var args = ending[1].split(" ");
|
268
|
+
var classes = args.filter(function (arg) { return arg.startsWith("."); });
|
269
|
+
var id = args.filter(function (arg) { return arg.startsWith("#"); });
|
270
|
+
var classNames = classes.map(function (c) { return c.slice(1); });
|
271
|
+
var classText = classes.length > 0 ? "class=\"".concat(classNames.join(" "), "\"") : "";
|
272
|
+
var idText = id.length > 0 ? "id=\"".concat(id[0].slice(1), "\"") : "";
|
273
|
+
/* remove the ending from the quote */
|
274
|
+
quote = quote.replace(/\{(.+)\}\s*<\/p>/, "</p>");
|
275
|
+
return "<blockquote ".concat(classText, " ").concat(idText, ">\n").concat(quote.trim(), "</blockquote>");
|
276
|
+
},
|
277
|
+
},
|
278
|
+
});
|
279
|
+
module.exports = Parser;
|
280
|
+
exports.default = Parser;
|
281
|
+
//# sourceMappingURL=parse.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
declare const templates: {
|
2
|
+
[key: string]: string;
|
3
|
+
};
|
4
|
+
/**
|
5
|
+
* Function to add a template to the templates object. Similar to definitions and variables, but reside as an extension.
|
6
|
+
* @param name The name of the template
|
7
|
+
* @param content The replacement string
|
8
|
+
*/
|
9
|
+
export declare function new_template(name: string, content: string): void;
|
10
|
+
export default templates;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.new_template = void 0;
|
4
|
+
var templates = {};
|
5
|
+
/**
|
6
|
+
* Function to add a template to the templates object. Similar to definitions and variables, but reside as an extension.
|
7
|
+
* @param name The name of the template
|
8
|
+
* @param content The replacement string
|
9
|
+
*/
|
10
|
+
function new_template(name, content) {
|
11
|
+
templates[name] = content;
|
12
|
+
}
|
13
|
+
exports.new_template = new_template;
|
14
|
+
/* initialize default templates */
|
15
|
+
var presentation_template = require("../src/templates/presentation.js");
|
16
|
+
var mathjax_template = require("../src/templates/mathjax.js");
|
17
|
+
new_template("presentation", presentation_template);
|
18
|
+
new_template("mathjax", mathjax_template);
|
19
|
+
exports.default = templates;
|
20
|
+
//# sourceMappingURL=templates.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":";;;AAAA,IAAM,SAAS,GAA8B,EAAE,CAAC;AAEhD;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,OAAe;IACtD,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AAC9B,CAAC;AAFD,oCAEC;AAED,kCAAkC;AAClC,IAAM,qBAAqB,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAC1E,IAAM,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAChE,YAAY,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;AACpD,YAAY,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAE1C,kBAAe,SAAS,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "markdown-maker",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.10.0",
|
4
4
|
"description": "",
|
5
5
|
"main": "src/cltool.ts",
|
6
6
|
"bin": {
|
@@ -23,7 +23,7 @@
|
|
23
23
|
]
|
24
24
|
},
|
25
25
|
"scripts": {
|
26
|
-
"test": "mocha",
|
26
|
+
"test": "mocha --require test/hooks.js",
|
27
27
|
"test:yarn": "mocha",
|
28
28
|
"bundle": "tsc --project tsconfig.json",
|
29
29
|
"main": "node build/cltool.js document/main.md -o dist/bundle.md --debug",
|
package/src/cltool.ts
CHANGED
@@ -11,7 +11,7 @@ const { version } = require("../package.json"); /* package version number */
|
|
11
11
|
const choki = require("chokidar");
|
12
12
|
|
13
13
|
export const argParser = new ArgumentParser({
|
14
|
-
description: "Markdown bundler, with extra options",
|
14
|
+
description: "Markdown bundler, with extra options. Extension file is loaded from ./extensions.js, if it exists",
|
15
15
|
prog: "mdparse",
|
16
16
|
});
|
17
17
|
|
@@ -92,6 +92,14 @@ function main() {
|
|
92
92
|
clargs = argParser.parse_args();
|
93
93
|
}
|
94
94
|
|
95
|
+
/* if src is init, create config file and exit */
|
96
|
+
if (clargs.src == "init") {
|
97
|
+
const template = fs.readFileSync(path.join(__dirname, "..", "src", "templates", "configTemplate.json"));
|
98
|
+
fs.writeFileSync(configFileName, template);
|
99
|
+
fs.writeFileSync("main.md", "# Main\n");
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
95
103
|
/* helper method for calling parser */
|
96
104
|
const compile = (source, output, cb?) => {
|
97
105
|
/* load data from file, if it exists,
|
@@ -140,9 +148,8 @@ function main() {
|
|
140
148
|
|
141
149
|
/* compile once */
|
142
150
|
if (!clargs.watch) compile(clargs.src, clargs.output);
|
143
|
-
|
144
151
|
/* watch the folder and recompile on change */
|
145
|
-
|
152
|
+
else {
|
146
153
|
const srcDirName = path.dirname(clargs.src);
|
147
154
|
console.log(`Watching ${srcDirName} for changes...`.yellow);
|
148
155
|
server = new WebSocketServer({ port: 7788 });
|
@@ -154,6 +161,7 @@ function main() {
|
|
154
161
|
console.log(e.message);
|
155
162
|
}
|
156
163
|
}
|
164
|
+
|
157
165
|
}
|
158
166
|
|
159
167
|
/* main entrypoint */
|
package/src/commands.ts
CHANGED
@@ -42,7 +42,7 @@ export class Command {
|
|
42
42
|
constructor(
|
43
43
|
validator: RegExp,
|
44
44
|
acter: (match: RegExpMatchArray, parser: Parser) => string | void,
|
45
|
-
type: CommandType
|
45
|
+
type: CommandType
|
46
46
|
) {
|
47
47
|
this.type = type;
|
48
48
|
this.validator = validator;
|
@@ -71,7 +71,7 @@ export class Command {
|
|
71
71
|
new Command(
|
72
72
|
/(\s|^)<(.+)>/,
|
73
73
|
(match, parser) => `${match[1]}#mdvar<${match[2]}>`,
|
74
|
-
CommandType.PREPARSE
|
74
|
+
CommandType.PREPARSE
|
75
75
|
);
|
76
76
|
|
77
77
|
/* mddef */
|
@@ -80,7 +80,7 @@ new Command(
|
|
80
80
|
(match, parser) => {
|
81
81
|
parser.opts.defs[match[1]] = match[2].replace("_", " ");
|
82
82
|
},
|
83
|
-
CommandType.PARSE
|
83
|
+
CommandType.PARSE
|
84
84
|
);
|
85
85
|
|
86
86
|
/* mdvar */
|
@@ -92,7 +92,7 @@ new Command(
|
|
92
92
|
throw new Error(`Undefined variable: ${match[1]}`);
|
93
93
|
return (value = value || `<${match[1]}>`);
|
94
94
|
},
|
95
|
-
CommandType.PARSE
|
95
|
+
CommandType.PARSE
|
96
96
|
);
|
97
97
|
|
98
98
|
/** mdinclude */
|
@@ -107,17 +107,31 @@ new Command(
|
|
107
107
|
}
|
108
108
|
|
109
109
|
/* get the matching group */
|
110
|
-
|
110
|
+
let [_, name, condition] = match;
|
111
111
|
|
112
112
|
/* implement conditional imports */
|
113
113
|
if (condition && !parser.opts.args.includes(condition)) return;
|
114
114
|
|
115
|
+
const fsstat = fs.lstatSync(path.join(parser.wd, name));
|
116
|
+
if (fsstat.isDirectory()) {
|
117
|
+
/* check if a file with the same name of the
|
118
|
+
* exists in the folder */
|
119
|
+
|
120
|
+
if (fs.existsSync(path.join(parser.wd, name, `${name}.md`))) {
|
121
|
+
name = path.join(name, `${name}.md`);
|
122
|
+
} else {
|
123
|
+
throw new Error(
|
124
|
+
`No entry file found in folder "${name}". Looking for "${name}.md"`
|
125
|
+
);
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
115
129
|
const recursiveParser = new Parser(
|
116
130
|
path.join(parser.wd, name),
|
117
131
|
parser.opts,
|
118
132
|
{
|
119
133
|
parent: parser,
|
120
|
-
}
|
134
|
+
}
|
121
135
|
);
|
122
136
|
|
123
137
|
/* keep the options the same */
|
@@ -134,7 +148,7 @@ new Command(
|
|
134
148
|
parser.opts.depth--;
|
135
149
|
return blob;
|
136
150
|
},
|
137
|
-
CommandType.PARSE
|
151
|
+
CommandType.PARSE
|
138
152
|
);
|
139
153
|
|
140
154
|
/* mdlabel */
|
@@ -149,7 +163,7 @@ new Command(
|
|
149
163
|
parser.opts.secs.push({ level, title });
|
150
164
|
return `<span id="${link}"></span>`;
|
151
165
|
},
|
152
|
-
CommandType.PREPARSE
|
166
|
+
CommandType.PREPARSE
|
153
167
|
);
|
154
168
|
|
155
169
|
/* mdref */
|
@@ -163,7 +177,7 @@ new Command(
|
|
163
177
|
|
164
178
|
if (i === parser.opts.secs.length - 1)
|
165
179
|
throw new Error(
|
166
|
-
`Reference to [${match[1]}] could not be resolved
|
180
|
+
`Reference to [${match[1]}] could not be resolved!`
|
167
181
|
);
|
168
182
|
}
|
169
183
|
|
@@ -174,12 +188,12 @@ new Command(
|
|
174
188
|
else if (parser.opts.targetType === TargetType.MARKDOWN)
|
175
189
|
return `[${match[1]}](#${link})`;
|
176
190
|
},
|
177
|
-
CommandType.PARSE
|
191
|
+
CommandType.PARSE
|
178
192
|
);
|
179
193
|
|
180
194
|
/* mdtemplate */
|
181
195
|
new Command(
|
182
|
-
/#mdtemplate<(
|
196
|
+
/#mdtemplate<(\w+?)>/,
|
183
197
|
(match, parser) => {
|
184
198
|
const template = match[1];
|
185
199
|
const replacement = templates[template];
|
@@ -190,49 +204,39 @@ new Command(
|
|
190
204
|
throw new MDMError(`Template \"${template}\" not found!`, match);
|
191
205
|
}
|
192
206
|
},
|
193
|
-
CommandType.PARSE
|
207
|
+
CommandType.PARSE
|
194
208
|
);
|
195
209
|
|
196
210
|
new Command(
|
197
211
|
/#mdmaketoc(?:<>)?/,
|
198
212
|
(match, parser) => parser.gen_toc(),
|
199
|
-
CommandType.POSTPARSE
|
213
|
+
CommandType.POSTPARSE
|
200
214
|
);
|
201
215
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
if (
|
206
|
-
|
216
|
+
const loaded_extentions: fs.PathLike[] = [];
|
217
|
+
|
218
|
+
function load_extension(parser: Parser, file: fs.PathLike) {
|
219
|
+
if (loaded_extentions.includes(file)) return;
|
220
|
+
if (fs.existsSync(file)) {
|
221
|
+
const extensions = requireRuntime(file);
|
222
|
+
loaded_extentions.push(file);
|
207
223
|
extensions.main(new_template, new_command);
|
208
224
|
|
209
225
|
if (parser.opts.verbose)
|
210
|
-
console.log(
|
211
|
-
`Loaded global extensions from ${global_extensions_path}`
|
212
|
-
.yellow,
|
213
|
-
);
|
226
|
+
console.log(`Loaded extensions from ${file}`.yellow);
|
214
227
|
} else if (parser.opts.debug) {
|
215
|
-
console.log(
|
216
|
-
`No global extensions found at ${global_extensions_path}`.red,
|
217
|
-
);
|
228
|
+
console.log(`No extensions found at ${file}`.red);
|
218
229
|
}
|
230
|
+
}
|
231
|
+
|
232
|
+
export function load_extensions(parser: Parser) {
|
233
|
+
/* global extention */
|
234
|
+
const global_extensions_path = path.join(__dirname, "extensions.js");
|
235
|
+
load_extension(parser, global_extensions_path);
|
219
236
|
|
220
237
|
/* project extention */
|
221
238
|
const project_extensions_path = path.join(parser.wd_full, "extensions.js");
|
222
|
-
|
223
|
-
const extensions = requireRuntime(project_extensions_path);
|
224
|
-
extensions.main(new_template, new_command);
|
225
|
-
|
226
|
-
if (parser.opts.verbose)
|
227
|
-
console.log(
|
228
|
-
`Loaded project extensions from ${project_extensions_path}`
|
229
|
-
.yellow,
|
230
|
-
);
|
231
|
-
} else if (parser.opts.debug) {
|
232
|
-
console.log(
|
233
|
-
`No project extensions found at ${project_extensions_path}!`.red,
|
234
|
-
);
|
235
|
-
}
|
239
|
+
load_extension(parser, project_extensions_path);
|
236
240
|
}
|
237
241
|
|
238
242
|
/**
|
@@ -244,7 +248,7 @@ export function load_extensions(parser: Parser) {
|
|
244
248
|
export function new_command(
|
245
249
|
regex: RegExp,
|
246
250
|
acter: (match: RegExpMatchArray, parser: Parser) => string,
|
247
|
-
type?: CommandType
|
251
|
+
type?: CommandType
|
248
252
|
) {
|
249
253
|
new Command(regex, acter, type || CommandType.PARSE);
|
250
254
|
}
|
package/src/parse.ts
CHANGED
@@ -258,27 +258,21 @@ class Parser {
|
|
258
258
|
/* output the parsed document to bundle */
|
259
259
|
to(bundleName: string, callback: (fileName: string) => void) {
|
260
260
|
const dir = path.dirname(bundleName);
|
261
|
-
|
262
|
-
if (callback === undefined) callback = () => {};
|
261
|
+
if (callback === undefined) callback = () => { };
|
263
262
|
|
264
263
|
if (!fs.existsSync(dir)) {
|
265
264
|
fs.mkdirSync(dir, { recursive: true });
|
266
265
|
}
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
called = true;
|
272
|
-
}
|
266
|
+
|
267
|
+
if (!this.opts.html) {
|
268
|
+
this.get(TargetType.MARKDOWN, (blob) => {
|
269
|
+
fs.writeFile(bundleName, blob, () => callback(bundleName));
|
273
270
|
});
|
274
|
-
}
|
271
|
+
}
|
275
272
|
|
276
|
-
|
273
|
+
else {
|
277
274
|
const htmlFileName = bundleName.replace(".md", ".html");
|
278
|
-
fs.writeFile(htmlFileName, this.html(), () =>
|
279
|
-
if (!called) callback(htmlFileName);
|
280
|
-
called = true;
|
281
|
-
});
|
275
|
+
fs.writeFile(htmlFileName, this.html(), () => callback(htmlFileName));
|
282
276
|
}
|
283
277
|
}
|
284
278
|
|
@@ -293,7 +287,7 @@ class Parser {
|
|
293
287
|
return htmlFormatted;
|
294
288
|
}
|
295
289
|
|
296
|
-
get(targetType?: TargetType, callback
|
290
|
+
get(targetType?: TargetType, callback?: (blob: string) => void): string {
|
297
291
|
/* If target type is undefined, markdown is the default */
|
298
292
|
if (targetType === undefined) targetType = TargetType.MARKDOWN;
|
299
293
|
if (this.blobs[targetType]) {
|
@@ -307,10 +301,10 @@ class Parser {
|
|
307
301
|
let blob = this.parse();
|
308
302
|
this.opts.targetType = undefined;
|
309
303
|
if (callback) callback(blob);
|
310
|
-
return blob
|
304
|
+
return blob
|
311
305
|
} catch (error) {
|
306
|
+
/* Compile a traceback of error */
|
312
307
|
let traceback = "";
|
313
|
-
|
314
308
|
let p: Parser = this;
|
315
309
|
|
316
310
|
do {
|
@@ -324,7 +318,7 @@ class Parser {
|
|
324
318
|
|
325
319
|
error.message += traceback;
|
326
320
|
|
327
|
-
/* only interested in stacktrace
|
321
|
+
/* only interested in node stacktrace when debugging */
|
328
322
|
if (!this.opts.debug) error.stack = "";
|
329
323
|
|
330
324
|
if (this.opts.only_warn) console.error(error);
|
@@ -345,7 +339,7 @@ export function splice(
|
|
345
339
|
return start + newSubStr + end;
|
346
340
|
}
|
347
341
|
|
348
|
-
/* add extention to marked */
|
342
|
+
/* add extention to marked for classed blockquotes*/
|
349
343
|
marked.use({
|
350
344
|
renderer: {
|
351
345
|
blockquote(quote) {
|