@kaciras-blog/markdown
Advanced tools
Comparing version 2.0.0-alpha.0 to 2.0.0-alpha.1
@@ -0,0 +0,0 @@ "use strict"; |
@@ -25,2 +25,13 @@ "use strict"; | ||
} | ||
/** | ||
* 解析指令语法,从中提取出各个部分并处理转义。 | ||
* | ||
* 【坑爹的兼容性】 | ||
* 原本是用环视处理转义,不支持括号计数,直接一个正则就能搞定。 | ||
* 但是傻逼 Safari 不支持环视,非要让劳资手写 Parser 艹。 | ||
* | ||
* @param src 待解析的文本 | ||
* @return 包含各个部分的对象 | ||
* @throws 如果给定的文本不符合指令语法 | ||
*/ | ||
function tokenize(src) { | ||
@@ -37,6 +48,16 @@ const match = /^@([a-z][a-z0-9\-_]*)/i.exec(src); | ||
} | ||
const href = utils_1.unescapeMd(src.slice(labelEnd + 2, srcEnd)); | ||
const label = utils_1.unescapeMd(src.slice(typePart.length + 1, labelEnd)); | ||
const href = (0, utils_1.unescapeMd)(src.slice(labelEnd + 2, srcEnd)); | ||
const label = (0, utils_1.unescapeMd)(src.slice(typePart.length + 1, labelEnd)); | ||
return { type, label, href }; | ||
} | ||
/** | ||
* 解析左右分别是正反括号的内容,找到结束的位置,支持括号计数和斜杠转义。 | ||
* | ||
* @param src 文本 | ||
* @param i 起始位置 | ||
* @param begin 左括号的字符码 | ||
* @param end 右括号字符码 | ||
* @return 结束位置 | ||
* @throws 如果给定的片段不符合语法 | ||
*/ | ||
function readBracket(src, i, begin, end) { | ||
@@ -66,2 +87,10 @@ if (src.charCodeAt(i) !== begin) { | ||
} | ||
/** | ||
* 检查链接,处理 URL 转义和 XSS 攻击。 | ||
* 如果链接具有 XSS 风险则返回空字符串。 | ||
* | ||
* @param md MarkdownIt 的实例 | ||
* @param link 需要检查的链接 | ||
* @return 安全的链接,可以直接写进HTML | ||
*/ | ||
function checkLink(md, link) { | ||
@@ -72,2 +101,5 @@ link = md.normalizeLink(link); | ||
exports.checkLink = checkLink; | ||
/** | ||
* 默认的指令表,有 audio、video 和 gif 类型,简单地渲染为<audio>和<video>元素 | ||
*/ | ||
exports.DefaultRenderMap = { | ||
@@ -85,2 +117,3 @@ audio(src) { | ||
}, | ||
// 仍然加上 controls 避免无法播放 | ||
gif(src) { | ||
@@ -90,2 +123,10 @@ return `<video src="${src}" loop muted controls></video>`; | ||
}; | ||
/** | ||
* MarkdownIt的插件函数,用法:markdownIt.use(require("markdown-media"), { ... }) | ||
* | ||
* 可以自定义map参数设置自定义渲染函数,也可以直接修改 markdownIt.renderer.rules.media | ||
* | ||
* @param markdownIt markdownIt实例 | ||
* @param map 渲染函数选项,用于自定义 | ||
*/ | ||
function install(markdownIt, map = exports.DefaultRenderMap) { | ||
@@ -92,0 +133,0 @@ markdownIt.renderer.rules.media = (tokens, idx) => { |
{ | ||
"name": "@kaciras-blog/markdown", | ||
"version": "2.0.0-alpha.0", | ||
"version": "2.0.0-alpha.1", | ||
"description": "Markdown-it plugins for Kaciras Blog", | ||
@@ -16,9 +16,9 @@ "license": "MIT", | ||
"engines": { | ||
"node": ">=16" | ||
"node": ">=17" | ||
}, | ||
"devDependencies": { | ||
"@types/markdown-it": "^12.0.3", | ||
"markdown-it": "^12.2.0" | ||
"@types/markdown-it": "^12.2.3", | ||
"markdown-it": "^12.3.2" | ||
}, | ||
"gitHead": "5a02829a31b5d6ff3cdd1c5a54e3bb07a768a25f" | ||
"gitHead": "ed68d810ad8d8439645ee0d6d5f34206333dfcb5" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
17713
342