mirror of
https://github.com/jaywcjlove/reference.git
synced 2025-06-17 04:31:22 +08:00
feat: HTML code preview is supported in markdown.
This commit is contained in:
@ -3,11 +3,19 @@ import rehypeParse from 'rehype-parse';
|
||||
import {unified} from 'unified';
|
||||
import { VFile } from 'vfile';
|
||||
|
||||
export function getSVGNode(iconPath) {
|
||||
export function getSVGNode(iconPath, space = 'svg') {
|
||||
const svgStr = fs.readFileSync(iconPath);
|
||||
const processor = unified().use(rehypeParse,{ fragment: true, space: "svg" })
|
||||
const processor = unified().use(rehypeParse,{ fragment: true, space })
|
||||
const file = new VFile();
|
||||
file.value = svgStr.toString();
|
||||
const hastNode = processor.runSync(processor.parse(file), file);
|
||||
return hastNode.children || []
|
||||
}
|
||||
|
||||
export function getVNode(str = '', space = 'html') {
|
||||
const processor = unified().use(rehypeParse,{ fragment: true, space })
|
||||
const file = new VFile();
|
||||
file.value = str.toString();
|
||||
const hastNode = processor.runSync(processor.parse(file), file);
|
||||
return hastNode.children || []
|
||||
}
|
14
scripts/utils/rehypePreviewHTML.mjs
Normal file
14
scripts/utils/rehypePreviewHTML.mjs
Normal file
@ -0,0 +1,14 @@
|
||||
import { getCodeString } from 'rehype-rewrite';
|
||||
import { getVNode } from './getSVGNode.mjs';
|
||||
|
||||
export function rehypePreviewHTML(node, parent) {
|
||||
if (node.type === 'element' && node.tagName === 'pre' && node.properties?.className?.includes('language-html')) {
|
||||
const child = node.children[0];
|
||||
if (child?.tagName === 'code' && child.data?.meta === 'preview') {
|
||||
const code = getCodeString(node.children)
|
||||
const vnode = getVNode(code || '')
|
||||
node.children = vnode
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user