zenn-markdown-html 0.1.104 → 0.1.105-alpha.3
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.
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.enableDiffHighlight = void 0;
|
|
7
|
+
var prismjs_1 = __importDefault(require("prismjs"));
|
|
8
|
+
var components_1 = __importDefault(require("prismjs/components/"));
|
|
9
|
+
/**
|
|
10
|
+
* PrismJSのDiff構文を使用できるようにするためのプラグイン
|
|
11
|
+
* ソースコードの大部分は、以下のファイルより抜き出したもの
|
|
12
|
+
* @reference https://github.com/PrismJS/prism/blob/master/plugins/diff-highlight/prism-diff-highlight.js
|
|
13
|
+
*/
|
|
14
|
+
function enableDiffHighlight() {
|
|
15
|
+
// this plugin needs to load `diff`
|
|
16
|
+
(0, components_1.default)('diff');
|
|
17
|
+
var LANGUAGE_REGEX = /^diff-([\w-]+)/i;
|
|
18
|
+
var HTML_TAG = /<\/?(?!\d)[^\s>/=$<%]+(?:\s(?:\s*[^\s>/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/gi;
|
|
19
|
+
//this will match a line plus the line break while ignoring the line breaks HTML tags may contain.
|
|
20
|
+
var HTML_LINE = RegExp(/(?:__|[^\r\n<])*(?:\r\n?|\n|(?:__|[^\r\n<])(?![^\r\n])(?:__)?)(?:__)?/.source.replace(/__/g, function () {
|
|
21
|
+
return HTML_TAG.source;
|
|
22
|
+
}), 'gi');
|
|
23
|
+
var warningLogged = false;
|
|
24
|
+
prismjs_1.default.hooks.add('before-sanity-check', function (env) {
|
|
25
|
+
var lang = env.language;
|
|
26
|
+
if (LANGUAGE_REGEX.test(lang) && !env.grammar) {
|
|
27
|
+
env.grammar = prismjs_1.default.languages[lang] = prismjs_1.default.languages.diff;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
prismjs_1.default.hooks.add('before-tokenize', function (env) {
|
|
31
|
+
if (!warningLogged && !prismjs_1.default.languages.diff && !prismjs_1.default.plugins.autoloader) {
|
|
32
|
+
warningLogged = true;
|
|
33
|
+
console.warn("Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js)." +
|
|
34
|
+
"Make sure the language definition is loaded or use Prism's Autoloader plugin.");
|
|
35
|
+
}
|
|
36
|
+
var lang = env.language;
|
|
37
|
+
if (LANGUAGE_REGEX.test(lang) && !prismjs_1.default.languages[lang]) {
|
|
38
|
+
prismjs_1.default.languages[lang] = prismjs_1.default.languages.diff;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
prismjs_1.default.hooks.add('wrap', function (env) {
|
|
42
|
+
var diffLanguage = '', diffGrammar;
|
|
43
|
+
if (env.language !== 'diff') {
|
|
44
|
+
var langMatch = LANGUAGE_REGEX.exec(env.language);
|
|
45
|
+
if (!langMatch) {
|
|
46
|
+
return; // not a language specific diff
|
|
47
|
+
}
|
|
48
|
+
diffLanguage = langMatch[1];
|
|
49
|
+
diffGrammar = prismjs_1.default.languages[diffLanguage];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A map from the name of a block to its line prefix, same as `Prism.languages.diff.PREFIXES`
|
|
53
|
+
*
|
|
54
|
+
* @type {Object<string, string>}
|
|
55
|
+
*/
|
|
56
|
+
var DIFF_PREFIXES = {
|
|
57
|
+
'deleted-sign': '-',
|
|
58
|
+
'deleted-arrow': '<',
|
|
59
|
+
'inserted-sign': '+',
|
|
60
|
+
'inserted-arrow': '>',
|
|
61
|
+
unchanged: ' ',
|
|
62
|
+
diff: '!',
|
|
63
|
+
};
|
|
64
|
+
var PREFIXES = prismjs_1.default.languages.diff && DIFF_PREFIXES;
|
|
65
|
+
// one of the diff tokens without any nested tokens
|
|
66
|
+
if (PREFIXES && env.type in PREFIXES) {
|
|
67
|
+
/** @type {string} */
|
|
68
|
+
var content = env.content.replace(HTML_TAG, ''); // remove all HTML tags
|
|
69
|
+
/** @type {string} */
|
|
70
|
+
var decoded = content.replace(/</g, '<').replace(/&/g, '&');
|
|
71
|
+
// remove any one-character prefix
|
|
72
|
+
var code = decoded.replace(/(^|[\r\n])./g, '$1');
|
|
73
|
+
// highlight, if possible
|
|
74
|
+
var highlighted = void 0;
|
|
75
|
+
if (diffLanguage && diffGrammar) {
|
|
76
|
+
highlighted = prismjs_1.default.highlight(code, diffGrammar, diffLanguage);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
highlighted = prismjs_1.default.util.encode(code);
|
|
80
|
+
}
|
|
81
|
+
// get the HTML source of the prefix token
|
|
82
|
+
var prefixToken = new prismjs_1.default.Token('prefix', PREFIXES[env.type], [/\w+/.exec(env.type)[0]]);
|
|
83
|
+
var prefix = prismjs_1.default.Token.stringify(prefixToken, env.language);
|
|
84
|
+
// add prefix
|
|
85
|
+
var lines = [];
|
|
86
|
+
var m = void 0;
|
|
87
|
+
HTML_LINE.lastIndex = 0;
|
|
88
|
+
while ((m = HTML_LINE.exec(highlighted))) {
|
|
89
|
+
lines.push(prefix + m[0]);
|
|
90
|
+
}
|
|
91
|
+
if (/(?:^|[\r\n]).$/.test(decoded)) {
|
|
92
|
+
// because both "+a\n+" and "+a\n" will map to "a\n" after the line prefixes are removed
|
|
93
|
+
lines.push(prefix);
|
|
94
|
+
}
|
|
95
|
+
env.content = lines.join('');
|
|
96
|
+
if (diffGrammar) {
|
|
97
|
+
env.classes.push('language-' + diffLanguage);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
exports.enableDiffHighlight = enableDiffHighlight;
|
package/lib/utils/highlight.js
CHANGED
|
@@ -7,9 +7,9 @@ exports.highlight = void 0;
|
|
|
7
7
|
var prismjs_1 = __importDefault(require("prismjs"));
|
|
8
8
|
var utils_1 = require("markdown-it/lib/common/utils");
|
|
9
9
|
var components_1 = __importDefault(require("prismjs/components/"));
|
|
10
|
-
var prism_diff_highlight_1 =
|
|
10
|
+
var prism_diff_highlight_1 = require("../prism-plugins/prism-diff-highlight");
|
|
11
11
|
// diffプラグインを有効化
|
|
12
|
-
(0, prism_diff_highlight_1.
|
|
12
|
+
(0, prism_diff_highlight_1.enableDiffHighlight)();
|
|
13
13
|
function loadPrismGrammer(lang) {
|
|
14
14
|
if (!lang)
|
|
15
15
|
return undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zenn-markdown-html",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.105-alpha.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Convert markdown to zenn flavor html.",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"test": "jest"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
+
"@swc/core": "^1.2.133",
|
|
24
|
+
"@swc/jest": "^0.2.17",
|
|
23
25
|
"@types/jest": "^26.0.19",
|
|
24
26
|
"@types/markdown-it": "^12.2.3",
|
|
25
27
|
"@types/node": "^14.0.5",
|
|
@@ -30,12 +32,10 @@
|
|
|
30
32
|
"eslint-config-prettier": "^8.3.0",
|
|
31
33
|
"jest": "^27.4.7",
|
|
32
34
|
"rimraf": "^3.0.2",
|
|
33
|
-
"ts-jest": "^27.1.3",
|
|
34
35
|
"typescript": "^4.5.4"
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
37
38
|
"@steelydylan/markdown-it-imsize": "^1.0.2",
|
|
38
|
-
"@steelydylan/prism-diff-highlight": "1.0.4",
|
|
39
39
|
"markdown-it": "^12.3.2",
|
|
40
40
|
"markdown-it-anchor": "^8.4.1",
|
|
41
41
|
"markdown-it-container": "^2.0.0",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"markdown-it-task-lists": "^2.1.1",
|
|
46
46
|
"prismjs": "^1.26.0"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "3db35250ae8f32a3befe5f72f42949fd86c85dba",
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
51
51
|
}
|