This commit is contained in:
18218461270@163.com 2025-08-20 20:12:00 +08:00
parent 83db432baa
commit b319a665b2
3 changed files with 100 additions and 0 deletions

19
index.js Normal file
View File

@ -0,0 +1,19 @@
'use strict';
/* global hexo */
const mermaid = require('./mermaid.js');
hexo.config.mermaid = Object.assign({
mmdcPath: 'mmdc',
timeout: 5000,
theme: 'default',
width: 800,
height: 600,
format: 'svg',
background: 'white',
scale: 1
},
hexo.config.mermaid);
hexo.extend.tag.register('mermaid', mermaid(hexo.config.mermaid), { ends = true });

57
lib/mermaid.js Normal file
View File

@ -0,0 +1,57 @@
'use strict';
const { spawnSync } = require('node:child_process');
function mermaid(config) {
return function(args, content) {
let options = Object.assign({}, config);
let caption = '';
for (const arg in args) {
const arr = arg.split(':');
if (arr.length == 1) {
caption = arr;
} else {
const { key, val } = arr;
options[key] = val;
}
}
const args = [
'-t', options.theme || 'default',
'-w', options.width || 800,
'-H', options.height || 600,
'-e', options.format || 'svg',
'-b', options.background || 'white',
'-s', options.scale || 1,
'-i', '-',
'-o', '-'
];
const result = spawnSync(options.mmdcPath, args, {
cwd: process.cwd(),
env: process.env,
input: content,
encoding: 'utf8',
timeout: options.timeout
});
if (result.status === 0) {
if (result.stderr) {
console.warn(result.stderr);
}
const path = 'data:image/svg+xml;base64,' + Buffer.from(result.stdout).toString('base64');
if (caption != '') {
return `<figure><img src="${ path }" alt="${ caption }"/><figcaption>${ caption }</figcaption></figure>`
} else {
return `<p><image src="${ path }"/></p>`;
}
}
if (result.error) {
throw result.error;
}
throw Error('mmdc exited with code ' + result.status + (result.stderr ? ': ' + result.stderr : '.'));
};
}
module.exports = mermaid;

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "hexo-tag-mermaid",
"version": "0.0.0",
"description": "add mermaid diagrams support for hexo.",
"homepage": "https://git.gzezfisher.top/FISHER_/hexo-tag-mermaid",
"bugs": {
"url": "https://git.gzezfisher.top/FISHER_/hexo-tag-mermaid/issues"
},
"repository": {
"type": "git",
"url": "https://git.gzezfisher.top/FISHER_/hexo-tag-mermaid.git"
},
"main": "index.js",
"files": [
"lib"
],
"contributers": [],
"tags": [
"hexo",
"plugin",
"mermaid"
],
"dependencies": {}
}