49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
/* eslint-disable @typescript-eslint/naming-convention */
|
|
const renderAny = require('wavedrom/lib/render-any');
|
|
const onmlStringify = require('onml/stringify.js');
|
|
const darkSkin = require('wavedrom/skins/dark');
|
|
const lightSkin = require('wavedrom/skins/default');
|
|
|
|
function selectSkin(skin) {
|
|
if (skin === 'dark') {
|
|
return darkSkin;
|
|
} else if (skin === 'light') {
|
|
return lightSkin;
|
|
}
|
|
return darkSkin;
|
|
}
|
|
|
|
function replaceRectsWithCustomString(svgString, style) {
|
|
const regex = /<rect\s+([^>]*)\s*\/?>/gs;
|
|
|
|
const replacedSvgString = svgString.replace(regex, (match, attributes, content) => {
|
|
match = match.replace('fill:#FFF;', 'fill:var(--vscode-editor-background)');
|
|
return match;
|
|
});
|
|
|
|
return replacedSvgString;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {number} id
|
|
* @param {any} json
|
|
* @param {'dark' | 'light'} style
|
|
* @returns {string}
|
|
*/
|
|
function renderWaveDrom(id, json, style) {
|
|
const skin = selectSkin(style);
|
|
const renderObj = renderAny(id, json, skin);
|
|
let svgString = onmlStringify(renderObj);
|
|
|
|
// TODO: more elegant ? 这里是为了解决黑色模式下部分 rect 仍然是白色背景
|
|
svgString = replaceRectsWithCustomString(svgString, style);
|
|
|
|
return svgString;
|
|
}
|
|
|
|
const Wavedrom = {
|
|
renderWaveDrom
|
|
};
|
|
|
|
module.exports = Wavedrom; |