docs:更新文档

This commit is contained in:
张益铭
2021-03-01 15:06:11 +08:00
parent 1542135ab0
commit 9064b372e8
5835 changed files with 904126 additions and 161722 deletions

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const componentPlugin: (md: MarkdownIt) => void;

View File

@@ -0,0 +1,83 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.componentPlugin = void 0;
// Replacing the default htmlBlock rule to allow using custom components at
// root level
const blockNames = require('markdown-it/lib/common/html_blocks');
const HTML_OPEN_CLOSE_TAG_RE = require('markdown-it/lib/common/html_re')
.HTML_OPEN_CLOSE_TAG_RE;
// An array of opening and corresponding closing sequences for html tags,
// last argument defines whether it can terminate a paragraph or not
const HTML_SEQUENCES = [
[/^<(script|pre|style)(?=(\s|>|$))/i, /<\/(script|pre|style)>/i, true],
[/^<!--/, /-->/, true],
[/^<\?/, /\?>/, true],
[/^<![A-Z]/, />/, true],
[/^<!\[CDATA\[/, /\]\]>/, true],
// PascalCase Components
[/^<[A-Z]/, />/, true],
// custom elements with hyphens
[/^<\w+\-/, />/, true],
[
new RegExp('^</?(' + blockNames.join('|') + ')(?=(\\s|/?>|$))', 'i'),
/^$/,
true
],
[new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\s*$'), /^$/, false]
];
exports.componentPlugin = (md) => {
md.block.ruler.at('html_block', htmlBlock);
};
const htmlBlock = (state, startLine, endLine, silent) => {
let i, nextLine, lineText;
let pos = state.bMarks[startLine] + state.tShift[startLine];
let max = state.eMarks[startLine];
// if it's indented more than 3 spaces, it should be a code block
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
if (!state.md.options.html) {
return false;
}
if (state.src.charCodeAt(pos) !== 0x3c /* < */) {
return false;
}
lineText = state.src.slice(pos, max);
for (i = 0; i < HTML_SEQUENCES.length; i++) {
if (HTML_SEQUENCES[i][0].test(lineText)) {
break;
}
}
if (i === HTML_SEQUENCES.length) {
return false;
}
if (silent) {
// true if this sequence can be a terminator, false otherwise
return HTML_SEQUENCES[i][2];
}
nextLine = startLine + 1;
// If we are here - we detected HTML block.
// Let's roll down till block end.
if (!HTML_SEQUENCES[i][1].test(lineText)) {
for (; nextLine < endLine; nextLine++) {
if (state.sCount[nextLine] < state.blkIndent) {
break;
}
pos = state.bMarks[nextLine] + state.tShift[nextLine];
max = state.eMarks[nextLine];
lineText = state.src.slice(pos, max);
if (HTML_SEQUENCES[i][1].test(lineText)) {
if (lineText.length !== 0) {
nextLine++;
}
break;
}
}
}
state.line = nextLine;
const token = state.push('html_block', '', 0);
token.map = [startLine, nextLine];
token.content = state.getLines(startLine, nextLine, state.blkIndent, true);
return true;
};
//# sourceMappingURL=component.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/component.ts"],"names":[],"mappings":";;;AAGA,2EAA2E;AAC3E,aAAa;AAEb,MAAM,UAAU,GAAa,OAAO,CAAC,oCAAoC,CAAC,CAAA;AAC1E,MAAM,sBAAsB,GAAW,OAAO,CAAC,gCAAgC,CAAC;KAC7E,sBAAsB,CAAA;AAEzB,yEAAyE;AACzE,oEAAoE;AACpE,MAAM,cAAc,GAAgC;IAClD,CAAC,mCAAmC,EAAE,yBAAyB,EAAE,IAAI,CAAC;IACtE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IACrB,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC;IACvB,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC/B,wBAAwB;IACxB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;IACtB,+BAA+B;IAC/B,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;IACtB;QACE,IAAI,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,EAAE,GAAG,CAAC;QACpE,IAAI;QACJ,IAAI;KACL;IACD,CAAC,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;CACnE,CAAA;AAEY,QAAA,eAAe,GAAG,CAAC,EAAc,EAAE,EAAE;IAChD,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,SAAS,GAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAW,EAAE;IAC1E,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAA;IACzB,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC3D,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAEjC,iEAAiE;IACjE,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE;QAClD,OAAO,KAAK,CAAA;KACb;IAED,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC1B,OAAO,KAAK,CAAA;KACb;IAED,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;QAC9C,OAAO,KAAK,CAAA;KACb;IAED,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAEpC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACvC,MAAK;SACN;KACF;IAED,IAAI,CAAC,KAAK,cAAc,CAAC,MAAM,EAAE;QAC/B,OAAO,KAAK,CAAA;KACb;IAED,IAAI,MAAM,EAAE;QACV,6DAA6D;QAC7D,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAC5B;IAED,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAA;IAExB,2CAA2C;IAC3C,kCAAkC;IAClC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACxC,OAAO,QAAQ,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE;gBAC5C,MAAK;aACN;YAED,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACrD,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC5B,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAEpC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,QAAQ,EAAE,CAAA;iBACX;gBACD,MAAK;aACN;SACF;KACF;IAED,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAA;IAErB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IAC7C,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACjC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAE1E,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const containerPlugin: (md: MarkdownIt) => void;

View File

@@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.containerPlugin = void 0;
const container = require('markdown-it-container');
exports.containerPlugin = (md) => {
md.use(...createContainer('tip', 'TIP'))
.use(...createContainer('warning', 'WARNING'))
.use(...createContainer('danger', 'WARNING'))
// explicitly escape Vue syntax
.use(container, 'v-pre', {
render: (tokens, idx) => tokens[idx].nesting === 1 ? `<div v-pre>\n` : `</div>\n`
});
};
function createContainer(klass, defaultTitle) {
return [
container,
klass,
{
render(tokens, idx) {
const token = tokens[idx];
const info = token.info.trim().slice(klass.length).trim();
if (token.nesting === 1) {
return `<div class="${klass} custom-block"><p class="custom-block-title">${info || defaultTitle}</p>\n`;
}
else {
return `</div>\n`;
}
}
}
];
}
//# sourceMappingURL=containers.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/containers.ts"],"names":[],"mappings":";;;AAGA,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AAErC,QAAA,eAAe,GAAG,CAAC,EAAc,EAAE,EAAE;IAChD,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACrC,GAAG,CAAC,GAAG,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7C,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,+BAA+B;SAC9B,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE;QACvB,MAAM,EAAE,CAAC,MAAe,EAAE,GAAW,EAAE,EAAE,CACvC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU;KAC3D,CAAC,CAAA;AACN,CAAC,CAAA;AAUD,SAAS,eAAe,CAAC,KAAa,EAAE,YAAoB;IAC1D,OAAO;QACL,SAAS;QACT,KAAK;QACL;YACE,MAAM,CAAC,MAAM,EAAE,GAAG;gBAChB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;gBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;gBACzD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE;oBACvB,OAAO,eAAe,KAAK,gDACzB,IAAI,IAAI,YACV,QAAQ,CAAA;iBACT;qBAAM;oBACL,OAAO,UAAU,CAAA;iBAClB;YACH,CAAC;SACF;KACF,CAAA;AACH,CAAC"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const extractHeaderPlugin: (md: MarkdownIt, include?: string[]) => void;

View File

@@ -0,0 +1,24 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractHeaderPlugin = void 0;
const parseHeader_1 = require("../../utils/parseHeader");
const slugify_1 = require("./slugify");
exports.extractHeaderPlugin = (md, include = ['h2', 'h3']) => {
md.renderer.rules.heading_open = (tokens, i, options, env, self) => {
const token = tokens[i];
if (include.includes(token.tag)) {
const title = tokens[i + 1].content;
const idAttr = token.attrs.find(([name]) => name === 'id');
const slug = idAttr && idAttr[1];
const data = md.__data;
const headers = data.headers || (data.headers = []);
headers.push({
level: parseInt(token.tag.slice(1), 10),
title: parseHeader_1.deeplyParseHeader(title),
slug: slug || slugify_1.slugify(title)
});
}
return self.renderToken(tokens, i, options);
};
};
//# sourceMappingURL=header.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/header.ts"],"names":[],"mappings":";;;AAEA,yDAA2D;AAC3D,uCAAmC;AAEtB,QAAA,mBAAmB,GAAG,CAAC,EAAc,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IAC5E,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;YAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;YAChC,MAAM,IAAI,GAAI,EAAU,CAAC,MAA4B,CAAA;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACvC,KAAK,EAAE,+BAAiB,CAAC,KAAK,CAAC;gBAC/B,IAAI,EAAE,IAAI,IAAI,iBAAO,CAAC,KAAK,CAAC;aAC7B,CAAC,CAAA;SACH;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1 @@
export declare const highlight: (str: string, lang: string) => string;

View File

@@ -0,0 +1,48 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.highlight = void 0;
const chalk = require('chalk');
const prism = require('prismjs');
const loadLanguages = require('prismjs/components/index');
const escapeHtml = require('escape-html');
// required to make embedded highlighting work...
loadLanguages(['markup', 'css', 'javascript']);
function wrap(code, lang) {
if (lang === 'text') {
code = escapeHtml(code);
}
return `<pre v-pre><code>${code}</code></pre>`;
}
exports.highlight = (str, lang) => {
if (!lang) {
return wrap(str, 'text');
}
lang = lang.toLowerCase();
const rawLang = lang;
if (lang === 'vue' || lang === 'html') {
lang = 'markup';
}
if (lang === 'md') {
lang = 'markdown';
}
if (lang === 'ts') {
lang = 'typescript';
}
if (lang === 'py') {
lang = 'python';
}
if (!prism.languages[lang]) {
try {
loadLanguages([lang]);
}
catch (e) {
console.warn(chalk.yellow(`[vuepress] Syntax highlight for language "${lang}" is not supported.`));
}
}
if (prism.languages[lang]) {
const code = prism.highlight(str, prism.languages[lang], lang);
return wrap(code, rawLang);
}
return wrap(str, 'text');
};
//# sourceMappingURL=highlight.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/highlight.ts"],"names":[],"mappings":";;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAChC,MAAM,aAAa,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;AACzD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAEzC,iDAAiD;AACjD,aAAa,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;AAE9C,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY;IACtC,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;KACxB;IACD,OAAO,oBAAoB,IAAI,eAAe,CAAA;AAChD,CAAC;AAEY,QAAA,SAAS,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;IACrD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;KACzB;IACD,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACzB,MAAM,OAAO,GAAG,IAAI,CAAA;IACpB,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE;QACrC,IAAI,GAAG,QAAQ,CAAA;KAChB;IACD,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,IAAI,GAAG,UAAU,CAAA;KAClB;IACD,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,IAAI,GAAG,YAAY,CAAA;KACpB;IACD,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,IAAI,GAAG,QAAQ,CAAA;KAChB;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QAC1B,IAAI;YACF,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;SACtB;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,MAAM,CACV,6CAA6C,IAAI,qBAAqB,CACvE,CACF,CAAA;SACF;KACF;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KAC3B;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC1B,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const highlightLinePlugin: (md: MarkdownIt) => void;

View File

@@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.highlightLinePlugin = void 0;
const RE = /{([\d,-]+)}/;
const wrapperRE = /^<pre .*?><code>/;
exports.highlightLinePlugin = (md) => {
const fence = md.renderer.rules.fence;
md.renderer.rules.fence = (...args) => {
const [tokens, idx, options] = args;
const token = tokens[idx];
const rawInfo = token.info;
if (!rawInfo || !RE.test(rawInfo)) {
return fence(...args);
}
const langName = rawInfo.replace(RE, '').trim();
// ensure the next plugin get the correct lang.
token.info = langName;
const lineNumbers = RE.exec(rawInfo)[1]
.split(',')
.map((v) => v.split('-').map((v) => parseInt(v, 10)));
const code = options.highlight
? options.highlight(token.content, langName)
: token.content;
const rawCode = code.replace(wrapperRE, '');
const highlightLinesCode = rawCode
.split('\n')
.map((split, index) => {
const lineNumber = index + 1;
const inRange = lineNumbers.some(([start, end]) => {
if (start && end) {
return lineNumber >= start && lineNumber <= end;
}
return lineNumber === start;
});
if (inRange) {
return `<div class="highlighted">&nbsp;</div>`;
}
return '<br>';
})
.join('');
const highlightLinesWrapperCode = `<div class="highlight-lines">${highlightLinesCode}</div>`;
return highlightLinesWrapperCode + code;
};
};
//# sourceMappingURL=highlightLines.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"highlightLines.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/highlightLines.ts"],"names":[],"mappings":";;;AAGA,MAAM,EAAE,GAAG,aAAa,CAAA;AACxB,MAAM,SAAS,GAAG,kBAAkB,CAAA;AAEvB,QAAA,mBAAmB,GAAG,CAAC,EAAc,EAAE,EAAE;IACpD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAM,CAAA;IACtC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;QACpC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAA;QAC1B,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACjC,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;SACtB;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/C,+CAA+C;QAC/C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAA;QAErB,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC;aACrC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS;YAC5B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC5C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC3C,MAAM,kBAAkB,GAAG,OAAO;aAC/B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACpB,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA;YAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE;gBAChD,IAAI,KAAK,IAAI,GAAG,EAAE;oBAChB,OAAO,UAAU,IAAI,KAAK,IAAI,UAAU,IAAI,GAAG,CAAA;iBAChD;gBACD,OAAO,UAAU,KAAK,KAAK,CAAA;YAC7B,CAAC,CAAC,CAAA;YACF,IAAI,OAAO,EAAE;gBACX,OAAO,uCAAuC,CAAA;aAC/C;YACD,OAAO,MAAM,CAAA;QACf,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,MAAM,yBAAyB,GAAG,gCAAgC,kBAAkB,QAAQ,CAAA;QAE5F,OAAO,yBAAyB,GAAG,IAAI,CAAA;IACzC,CAAC,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const hoistPlugin: (md: MarkdownIt) => void;

View File

@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.hoistPlugin = void 0;
// hoist <script> and <style> tags out of the returned html
// so that they can be placed outside as SFC blocks.
exports.hoistPlugin = (md) => {
const RE = /^<(script|style)(?=(\s|>|$))/i;
md.renderer.rules.html_block = (tokens, idx) => {
const content = tokens[idx].content;
const data = md.__data;
const hoistedTags = data.hoistedTags || (data.hoistedTags = []);
if (RE.test(content.trim())) {
hoistedTags.push(content);
return '';
}
else {
return content;
}
};
};
//# sourceMappingURL=hoist.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"hoist.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/hoist.ts"],"names":[],"mappings":";;;AAGA,2DAA2D;AAC3D,oDAAoD;AACvC,QAAA,WAAW,GAAG,CAAC,EAAc,EAAE,EAAE;IAC5C,MAAM,EAAE,GAAG,+BAA+B,CAAA;IAE1C,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;QACnC,MAAM,IAAI,GAAI,EAAU,CAAC,MAA4B,CAAA;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAA;QAC/D,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;YAC3B,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACzB,OAAO,EAAE,CAAA;SACV;aAAM;YACL,OAAO,OAAO,CAAA;SACf;IACH,CAAC,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const lineNumberPlugin: (md: MarkdownIt) => void;

View File

@@ -0,0 +1,22 @@
"use strict";
// markdown-it plugin for generating line numbers.
// It depends on preWrapper plugin.
Object.defineProperty(exports, "__esModule", { value: true });
exports.lineNumberPlugin = void 0;
exports.lineNumberPlugin = (md) => {
const fence = md.renderer.rules.fence;
md.renderer.rules.fence = (...args) => {
const rawCode = fence(...args);
const code = rawCode.slice(rawCode.indexOf('<code>'), rawCode.indexOf('</code>'));
const lines = code.split('\n');
const lineNumbersCode = [...Array(lines.length - 1)]
.map((line, index) => `<span class="line-number">${index + 1}</span><br>`)
.join('');
const lineNumbersWrapperCode = `<div class="line-numbers-wrapper">${lineNumbersCode}</div>`;
const finalCode = rawCode
.replace(/<\/div>$/, `${lineNumbersWrapperCode}</div>`)
.replace(/"(language-\w+)"/, '"$1 line-numbers-mode"');
return finalCode;
};
};
//# sourceMappingURL=lineNumbers.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"lineNumbers.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/lineNumbers.ts"],"names":[],"mappings":";AAAA,kDAAkD;AAClD,mCAAmC;;;AAItB,QAAA,gBAAgB,GAAG,CAAC,EAAc,EAAE,EAAE;IACjD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAM,CAAA;IACtC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EACzB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAC3B,CAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,6BAA6B,KAAK,GAAG,CAAC,aAAa,CAAC;aACzE,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,MAAM,sBAAsB,GAAG,qCAAqC,eAAe,QAAQ,CAAA;QAE3F,MAAM,SAAS,GAAG,OAAO;aACtB,OAAO,CAAC,UAAU,EAAE,GAAG,sBAAsB,QAAQ,CAAC;aACtD,OAAO,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAA;QAExD,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const linkPlugin: (md: MarkdownIt, externalAttrs: Record<string, string>) => void;

View File

@@ -0,0 +1,60 @@
"use strict";
// markdown-it plugin for:
// 1. adding target="_blank" to external links
// 2. normalize internal links to end with `.html`
Object.defineProperty(exports, "__esModule", { value: true });
exports.linkPlugin = void 0;
const url_1 = require("url");
const indexRE = /(^|.*\/)index.md(#?.*)$/i;
exports.linkPlugin = (md, externalAttrs) => {
md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
const token = tokens[idx];
const hrefIndex = token.attrIndex('href');
if (hrefIndex >= 0) {
const hrefAttr = token.attrs[hrefIndex];
const url = hrefAttr[1];
const isExternal = /^https?:/.test(url);
if (isExternal) {
Object.entries(externalAttrs).forEach(([key, val]) => {
token.attrSet(key, val);
});
}
else if (!url.startsWith('#')) {
normalizeHref(hrefAttr);
}
}
return self.renderToken(tokens, idx, options);
};
function normalizeHref(hrefAttr) {
let url = hrefAttr[1];
const indexMatch = url.match(indexRE);
if (indexMatch) {
const [, path, hash] = indexMatch;
url = path + hash;
}
else {
let cleanUrl = url.replace(/\#.*$/, '').replace(/\?.*$/, '');
// .md -> .html
if (cleanUrl.endsWith('.md')) {
cleanUrl = cleanUrl.replace(/\.md$/, '.html');
}
// ./foo -> ./foo.html
if (!cleanUrl.endsWith('.html') && !cleanUrl.endsWith('/')) {
cleanUrl += '.html';
}
const parsed = new url_1.URL(url, 'http://a.com');
url = cleanUrl + parsed.search + parsed.hash;
}
// ensure leading . for relative paths
if (!url.startsWith('/') && !/^\.\//.test(url)) {
url = './' + url;
}
// export it for existence check
const data = md.__data;
const links = data.links || (data.links = []);
links.push(url.replace(/\.html$/, ''));
// markdown-it encodes the uri
hrefAttr[1] = decodeURI(url);
}
};
//# sourceMappingURL=link.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/link.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const preWrapperPlugin: (md: MarkdownIt) => void;

View File

@@ -0,0 +1,21 @@
"use strict";
// markdown-it plugin for wrapping <pre> ... </pre>.
//
// If your plugin was chained before preWrapper, you can add additional eleemnt directly.
// If your plugin was chained after preWrapper, you can use these slots:
// 1. <!--beforebegin-->
// 2. <!--afterbegin-->
// 3. <!--beforeend-->
// 4. <!--afterend-->
Object.defineProperty(exports, "__esModule", { value: true });
exports.preWrapperPlugin = void 0;
exports.preWrapperPlugin = (md) => {
const fence = md.renderer.rules.fence;
md.renderer.rules.fence = (...args) => {
const [tokens, idx] = args;
const token = tokens[idx];
const rawCode = fence(...args);
return `<div class="language-${token.info.trim()}">${rawCode}</div>`;
};
};
//# sourceMappingURL=preWrapper.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"preWrapper.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/preWrapper.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,EAAE;AACF,yFAAyF;AACzF,wEAAwE;AACxE,0BAA0B;AAC1B,yBAAyB;AACzB,wBAAwB;AACxB,uBAAuB;;;AAIV,QAAA,gBAAgB,GAAG,CAAC,EAAc,EAAE,EAAE;IACjD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAM,CAAA;IACtC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;QACpC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QAC9B,OAAO,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,QAAQ,CAAA;IACtE,CAAC,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1 @@
export declare const slugify: (str: string) => string;

View File

@@ -0,0 +1,25 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.slugify = void 0;
// string.js slugify drops non ascii chars so we have to
// use a custom implementation here
const removeDiacritics = require('diacritics').remove;
// eslint-disable-next-line no-control-regex
const rControl = /[\u0000-\u001f]/g;
const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g;
exports.slugify = (str) => {
return (removeDiacritics(str)
// Remove control characters
.replace(rControl, '')
// Replace special characters
.replace(rSpecial, '-')
// Remove continous separators
.replace(/\-{2,}/g, '-')
// Remove prefixing and trailing separtors
.replace(/^\-+|\-+$/g, '')
// ensure it doesn't start with a number (#121)
.replace(/^(\d)/, '_$1')
// lowercase
.toLowerCase());
};
//# sourceMappingURL=slugify.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"slugify.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/slugify.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,mCAAmC;AACnC,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAA;AACrD,4CAA4C;AAC5C,MAAM,QAAQ,GAAG,kBAAkB,CAAA;AACnC,MAAM,QAAQ,GAAG,2CAA2C,CAAA;AAE/C,QAAA,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE;IAC7C,OAAO,CACL,gBAAgB,CAAC,GAAG,CAAC;QACnB,4BAA4B;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACtB,6BAA6B;SAC5B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;QACvB,8BAA8B;SAC7B,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;QACxB,0CAA0C;SACzC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAC1B,+CAA+C;SAC9C,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QACxB,YAAY;SACX,WAAW,EAAE,CACjB,CAAA;AACH,CAAC,CAAA"}

View File

@@ -0,0 +1,2 @@
import MarkdownIt from 'markdown-it';
export declare const snippetPlugin: (md: MarkdownIt, root: string) => void;

View File

@@ -0,0 +1,43 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.snippetPlugin = void 0;
const fs_1 = __importDefault(require("fs"));
exports.snippetPlugin = (md, root) => {
const parser = (state, startLine, endLine, silent) => {
const CH = '<'.charCodeAt(0);
const pos = state.bMarks[startLine] + state.tShift[startLine];
const max = state.eMarks[startLine];
// if it's indented more than 3 spaces, it should be a code block
if (state.sCount[startLine] - state.blkIndent >= 4) {
return false;
}
for (let i = 0; i < 3; ++i) {
const ch = state.src.charCodeAt(pos + i);
if (ch !== CH || pos + i >= max)
return false;
}
if (silent) {
return true;
}
const start = pos + 3;
const end = state.skipSpacesBack(max, pos);
const rawPath = state.src.slice(start, end).trim().replace(/^@/, root);
const filename = rawPath.split(/{/).shift().trim();
const content = fs_1.default.existsSync(filename)
? fs_1.default.readFileSync(filename).toString()
: 'Not found: ' + filename;
const meta = rawPath.replace(filename, '');
state.line = startLine + 1;
const token = state.push('fence', 'code', 0);
token.info = filename.split('.').pop() + meta;
token.content = content;
token.markup = '```';
token.map = [startLine, startLine + 1];
return true;
};
md.block.ruler.before('fence', 'snippet', parser);
};
//# sourceMappingURL=snippet.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../../src/node/markdown/plugins/snippet.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AAIN,QAAA,aAAa,GAAG,CAAC,EAAc,EAAE,IAAY,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9D,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAEnC,iEAAiE;QACjE,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE;YAClD,OAAO,KAAK,CAAA;SACb;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YACxC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG;gBAAE,OAAO,KAAK,CAAA;SAC9C;QAED,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAA;SACZ;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAA;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAG,CAAC,IAAI,EAAE,CAAA;QACnD,MAAM,OAAO,GAAG,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAA;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAE1C,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,CAAA;QAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC5C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QAC7C,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;QACvB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;QACpB,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QAEtC,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AACnD,CAAC,CAAA"}