From 856e8e52056fdab1969a95125480611e18bcdbe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jim=20Liu=20=E5=AE=9D=E7=8E=89?= Date: Sat, 28 Feb 2026 12:13:39 -0600 Subject: [PATCH] feat(baoyu-markdown-to-html): modularize render.ts and bundle code themes locally Split monolithic render.ts into cli, constants, extend-config, html-builder, renderer, themes, and types modules. Bundle highlight.js code theme CSS files locally instead of CDN loading. --- .../baoyu-markdown-to-html/scripts/md/cli.ts | 163 +++ .../scripts/md/code-themes/1c-light.min.css | 9 + .../scripts/md/code-themes/a11y-dark.min.css | 7 + .../scripts/md/code-themes/a11y-light.min.css | 7 + .../scripts/md/code-themes/agate.min.css | 20 + .../md/code-themes/an-old-hope.min.css | 9 + .../md/code-themes/androidstudio.min.css | 1 + .../md/code-themes/arduino-light.min.css | 1 + .../scripts/md/code-themes/arta.min.css | 1 + .../scripts/md/code-themes/ascetic.min.css | 1 + .../atom-one-dark-reasonable.min.css | 1 + .../md/code-themes/atom-one-dark.min.css | 1 + .../md/code-themes/atom-one-light.min.css | 1 + .../md/code-themes/brown-paper.min.css | 1 + .../md/code-themes/codepen-embed.min.css | 1 + .../md/code-themes/color-brewer.min.css | 1 + .../scripts/md/code-themes/dark.min.css | 1 + .../scripts/md/code-themes/default.min.css | 9 + .../scripts/md/code-themes/devibeans.min.css | 7 + .../scripts/md/code-themes/docco.min.css | 1 + .../scripts/md/code-themes/far.min.css | 1 + .../scripts/md/code-themes/felipec.min.css | 7 + .../scripts/md/code-themes/foundation.min.css | 1 + .../md/code-themes/github-dark-dimmed.min.css | 9 + .../md/code-themes/github-dark.min.css | 10 + .../scripts/md/code-themes/github.min.css | 10 + .../scripts/md/code-themes/gml.min.css | 1 + .../scripts/md/code-themes/googlecode.min.css | 1 + .../md/code-themes/gradient-dark.min.css | 1 + .../md/code-themes/gradient-light.min.css | 1 + .../scripts/md/code-themes/grayscale.min.css | 1 + .../scripts/md/code-themes/hybrid.min.css | 1 + .../scripts/md/code-themes/idea.min.css | 1 + .../md/code-themes/intellij-light.min.css | 1 + .../scripts/md/code-themes/ir-black.min.css | 1 + .../md/code-themes/isbl-editor-dark.min.css | 1 + .../md/code-themes/isbl-editor-light.min.css | 1 + .../md/code-themes/kimbie-dark.min.css | 1 + .../md/code-themes/kimbie-light.min.css | 1 + .../scripts/md/code-themes/lightfair.min.css | 1 + .../scripts/md/code-themes/lioshi.min.css | 1 + .../scripts/md/code-themes/magula.min.css | 1 + .../scripts/md/code-themes/mono-blue.min.css | 1 + .../md/code-themes/monokai-sublime.min.css | 1 + .../scripts/md/code-themes/monokai.min.css | 1 + .../scripts/md/code-themes/night-owl.min.css | 1 + .../scripts/md/code-themes/nnfx-dark.min.css | 10 + .../scripts/md/code-themes/nnfx-light.min.css | 10 + .../scripts/md/code-themes/nord.min.css | 1 + .../scripts/md/code-themes/obsidian.min.css | 1 + .../md/code-themes/panda-syntax-dark.min.css | 1 + .../md/code-themes/panda-syntax-light.min.css | 1 + .../md/code-themes/paraiso-dark.min.css | 1 + .../md/code-themes/paraiso-light.min.css | 1 + .../scripts/md/code-themes/pojoaque.min.css | 1 + .../scripts/md/code-themes/purebasic.min.css | 1 + .../md/code-themes/qtcreator-dark.min.css | 1 + .../md/code-themes/qtcreator-light.min.css | 1 + .../scripts/md/code-themes/rainbow.min.css | 1 + .../scripts/md/code-themes/routeros.min.css | 1 + .../md/code-themes/school-book.min.css | 1 + .../md/code-themes/shades-of-purple.min.css | 1 + .../scripts/md/code-themes/srcery.min.css | 1 + .../md/code-themes/stackoverflow-dark.min.css | 13 + .../code-themes/stackoverflow-light.min.css | 13 + .../scripts/md/code-themes/sunburst.min.css | 1 + .../md/code-themes/tokyo-night-dark.min.css | 8 + .../md/code-themes/tokyo-night-light.min.css | 8 + .../code-themes/tomorrow-night-blue.min.css | 1 + .../code-themes/tomorrow-night-bright.min.css | 1 + .../scripts/md/code-themes/vs.min.css | 1 + .../scripts/md/code-themes/vs2015.min.css | 1 + .../scripts/md/code-themes/xcode.min.css | 1 + .../scripts/md/code-themes/xt256.min.css | 1 + .../scripts/md/constants.ts | 84 ++ .../scripts/md/extend-config.ts | 53 + .../scripts/md/html-builder.ts | 142 +++ .../scripts/md/render.ts | 1079 +---------------- .../scripts/md/renderer.ts | 434 +++++++ .../scripts/md/themes.ts | 62 + .../scripts/md/types.ts | 78 ++ 81 files changed, 1256 insertions(+), 1061 deletions(-) create mode 100644 skills/baoyu-markdown-to-html/scripts/md/cli.ts create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/1c-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/agate.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/an-old-hope.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/androidstudio.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/arduino-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/arta.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/ascetic.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark-reasonable.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/brown-paper.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/codepen-embed.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/color-brewer.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/default.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/devibeans.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/docco.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/far.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/felipec.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/foundation.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark-dimmed.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/github.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/gml.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/googlecode.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/grayscale.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/hybrid.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/idea.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/intellij-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/ir-black.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/lightfair.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/lioshi.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/magula.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/mono-blue.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai-sublime.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/night-owl.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/nord.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/obsidian.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/pojoaque.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/purebasic.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/rainbow.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/routeros.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/school-book.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/shades-of-purple.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/srcery.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/sunburst.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-dark.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-light.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-blue.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-bright.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/vs.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/vs2015.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/xcode.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/code-themes/xt256.min.css create mode 100644 skills/baoyu-markdown-to-html/scripts/md/constants.ts create mode 100644 skills/baoyu-markdown-to-html/scripts/md/extend-config.ts create mode 100644 skills/baoyu-markdown-to-html/scripts/md/html-builder.ts create mode 100644 skills/baoyu-markdown-to-html/scripts/md/renderer.ts create mode 100644 skills/baoyu-markdown-to-html/scripts/md/themes.ts create mode 100644 skills/baoyu-markdown-to-html/scripts/md/types.ts diff --git a/skills/baoyu-markdown-to-html/scripts/md/cli.ts b/skills/baoyu-markdown-to-html/scripts/md/cli.ts new file mode 100644 index 0000000..5b0263a --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/cli.ts @@ -0,0 +1,163 @@ +import type { CliOptions, ThemeName } from "./types.js"; +import { + FONT_FAMILY_MAP, + FONT_SIZE_OPTIONS, + COLOR_PRESETS, + CODE_BLOCK_THEMES, +} from "./constants.js"; +import { THEME_NAMES } from "./themes.js"; +import { loadExtendConfig } from "./extend-config.js"; + +export function printUsage(): void { + console.error( + [ + "Usage:", + " npx tsx src/md/render.ts [options]", + "", + "Options:", + ` --theme Theme (${THEME_NAMES.join(", ")})`, + ` --color Primary color: ${Object.keys(COLOR_PRESETS).join(", ")}, or hex`, + ` --font-family Font: ${Object.keys(FONT_FAMILY_MAP).join(", ")}, or CSS value`, + ` --font-size Font size: ${FONT_SIZE_OPTIONS.join(", ")} (default: 16px)`, + ` --code-theme Code highlight theme (default: github)`, + ` --mac-code-block Show Mac-style code block header`, + ` --line-number Show line numbers in code blocks`, + ` --cite Enable footnote citations`, + ` --count Show reading time / word count`, + ` --legend Image caption: title-alt, alt-title, title, alt, none`, + ` --keep-title Keep the first heading in output`, + ].join("\n") + ); +} + +function parseArgValue(argv: string[], i: number, flag: string): string | null { + const arg = argv[i]!; + if (arg.includes("=")) { + return arg.slice(flag.length + 1); + } + const next = argv[i + 1]; + return next ?? null; +} + +function resolveFontFamily(value: string): string { + return FONT_FAMILY_MAP[value] ?? value; +} + +function resolveColor(value: string): string { + return COLOR_PRESETS[value] ?? value; +} + +export function parseArgs(argv: string[]): CliOptions | null { + const ext = loadExtendConfig(); + + let inputPath = ""; + let theme: ThemeName = ext.default_theme ?? "default"; + let keepTitle = ext.keep_title ?? false; + let primaryColor: string | undefined = ext.default_color ? resolveColor(ext.default_color) : undefined; + let fontFamily: string | undefined = ext.default_font_family ? resolveFontFamily(ext.default_font_family) : undefined; + let fontSize: string | undefined = ext.default_font_size ?? undefined; + let codeTheme = ext.default_code_theme ?? "github"; + let isMacCodeBlock = ext.mac_code_block ?? true; + let isShowLineNumber = ext.show_line_number ?? false; + let citeStatus = ext.cite ?? false; + let countStatus = ext.count ?? false; + let legend = ext.legend ?? "alt"; + + for (let i = 0; i < argv.length; i += 1) { + const arg = argv[i]!; + + if (!arg.startsWith("--") && !inputPath) { + inputPath = arg; + continue; + } + + if (arg === "--help" || arg === "-h") { + return null; + } + + if (arg === "--keep-title") { keepTitle = true; continue; } + if (arg === "--mac-code-block") { isMacCodeBlock = true; continue; } + if (arg === "--no-mac-code-block") { isMacCodeBlock = false; continue; } + if (arg === "--line-number") { isShowLineNumber = true; continue; } + if (arg === "--cite") { citeStatus = true; continue; } + if (arg === "--count") { countStatus = true; continue; } + + if (arg === "--theme" || arg.startsWith("--theme=")) { + const val = parseArgValue(argv, i, "--theme"); + if (!val) { console.error("Missing value for --theme"); return null; } + theme = val as ThemeName; + if (!arg.includes("=")) i += 1; + continue; + } + + if (arg === "--color" || arg.startsWith("--color=")) { + const val = parseArgValue(argv, i, "--color"); + if (!val) { console.error("Missing value for --color"); return null; } + primaryColor = resolveColor(val); + if (!arg.includes("=")) i += 1; + continue; + } + + if (arg === "--font-family" || arg.startsWith("--font-family=")) { + const val = parseArgValue(argv, i, "--font-family"); + if (!val) { console.error("Missing value for --font-family"); return null; } + fontFamily = resolveFontFamily(val); + if (!arg.includes("=")) i += 1; + continue; + } + + if (arg === "--font-size" || arg.startsWith("--font-size=")) { + const val = parseArgValue(argv, i, "--font-size"); + if (!val) { console.error("Missing value for --font-size"); return null; } + fontSize = val.endsWith("px") ? val : `${val}px`; + if (!FONT_SIZE_OPTIONS.includes(fontSize)) { + console.error(`Invalid font size: ${fontSize}. Valid: ${FONT_SIZE_OPTIONS.join(", ")}`); + return null; + } + if (!arg.includes("=")) i += 1; + continue; + } + + if (arg === "--code-theme" || arg.startsWith("--code-theme=")) { + const val = parseArgValue(argv, i, "--code-theme"); + if (!val) { console.error("Missing value for --code-theme"); return null; } + codeTheme = val; + if (!CODE_BLOCK_THEMES.includes(codeTheme)) { + console.error(`Unknown code theme: ${codeTheme}`); + return null; + } + if (!arg.includes("=")) i += 1; + continue; + } + + if (arg === "--legend" || arg.startsWith("--legend=")) { + const val = parseArgValue(argv, i, "--legend"); + if (!val) { console.error("Missing value for --legend"); return null; } + const valid = ["title-alt", "alt-title", "title", "alt", "none"]; + if (!valid.includes(val)) { + console.error(`Invalid legend: ${val}. Valid: ${valid.join(", ")}`); + return null; + } + legend = val; + if (!arg.includes("=")) i += 1; + continue; + } + + console.error(`Unknown argument: ${arg}`); + return null; + } + + if (!inputPath) { + return null; + } + + if (!THEME_NAMES.includes(theme)) { + console.error(`Unknown theme: ${theme}`); + return null; + } + + return { + inputPath, theme, keepTitle, primaryColor, fontFamily, fontSize, + codeTheme, isMacCodeBlock, isShowLineNumber, citeStatus, countStatus, legend, + }; +} diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/1c-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/1c-light.min.css new file mode 100644 index 0000000..a9d9bf9 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/1c-light.min.css @@ -0,0 +1,9 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: 1c-light + Description: Style IDE 1C:Enterprise 8 + Author: (c) Barilko Vitaliy + Maintainer: @Diversus23 + Website: https://softonit.ru/ + License: see project LICENSE + Touched: 2023 +*/.hljs{color:#00f;background:#fff}.hljs-comment{color:green}.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-function,.hljs-keyword,.hljs-name,.hljs-punctuation,.hljs-selector-tag{color:red}.hljs-params,.hljs-type{color:#00f}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-symbol,.hljs-template-tag{color:#000}.hljs-section,.hljs-title{color:#00f}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:red}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#00f}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#963200}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-dark.min.css new file mode 100644 index 0000000..7820d7d --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-dark.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/.hljs{background:#2b2b2b;color:#f8f8f2}.hljs-comment,.hljs-quote{color:#d4d0ab}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ffa07a}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#f5ab35}.hljs-attribute{color:gold}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#abe338}.hljs-section,.hljs-title{color:#00e0e0}.hljs-keyword,.hljs-selector-tag{color:#dcc6e0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-light.min.css new file mode 100644 index 0000000..8b5ab90 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/a11y-light.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: a11y-light + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/.hljs{background:#fefefe;color:#545454}.hljs-comment,.hljs-quote{color:#696969}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#d91e18}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#aa5d00}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:green}.hljs-section,.hljs-title{color:#007faa}.hljs-keyword,.hljs-selector-tag{color:#7928a1}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/agate.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/agate.min.css new file mode 100644 index 0000000..bdbeed4 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/agate.min.css @@ -0,0 +1,20 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Agate + Author: (c) Taufik Nurrohman + Maintainer: @taufik-nurrohman + Updated: 2021-04-24 + + #333 + #62c8f3 + #7bd694 + #888 + #a2fca2 + #ade5fc + #b8d8a2 + #c6b4f0 + #d36363 + #fc9b9b + #fcc28c + #ffa + #fff +*/.hljs{background:#333;color:#fff}.hljs-doctag,.hljs-meta-keyword,.hljs-name,.hljs-strong{font-weight:700}.hljs-code,.hljs-emphasis{font-style:italic}.hljs-section,.hljs-tag{color:#62c8f3}.hljs-selector-class,.hljs-selector-id,.hljs-template-variable,.hljs-variable{color:#ade5fc}.hljs-meta-string,.hljs-string{color:#a2fca2}.hljs-attr,.hljs-quote,.hljs-selector-attr{color:#7bd694}.hljs-tag .hljs-attr{color:inherit}.hljs-attribute,.hljs-title,.hljs-type{color:#ffa}.hljs-number,.hljs-symbol{color:#d36363}.hljs-bullet,.hljs-template-tag{color:#b8d8a2}.hljs-built_in,.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#fcc28c}.hljs-code,.hljs-comment,.hljs-formula{color:#888}.hljs-link,.hljs-regexp,.hljs-selector-pseudo{color:#c6b4f0}.hljs-meta{color:#fc9b9b}.hljs-deletion{background:#fc9b9b;color:#333}.hljs-addition{background:#a2fca2;color:#333}.hljs-subst{color:#fff}.hljs a{color:inherit}.hljs a:focus,.hljs a:hover{color:inherit;text-decoration:underline}.hljs mark{background:#555;color:inherit} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/an-old-hope.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/an-old-hope.min.css new file mode 100644 index 0000000..ffc7f8c --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/an-old-hope.min.css @@ -0,0 +1,9 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: An Old Hope – Star Wars Syntax + Author: (c) Gustavo Costa + Maintainer: @gusbemacbe + + Original theme - Ocean Dark Theme – by https://github.com/gavsiu + Based on Jesse Leite's Atom syntax theme 'An Old Hope' + https://github.com/JesseLeite/an-old-hope-syntax-atom +*/.hljs{background:#1c1d21;color:#c0c5ce}.hljs-comment,.hljs-quote{color:#b6b18b}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#eb3c54}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#e7ce56}.hljs-attribute{color:#ee7c2b}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#4fb4d7}.hljs-section,.hljs-title{color:#78bb65}.hljs-keyword,.hljs-selector-tag{color:#b45ea4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/androidstudio.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/androidstudio.min.css new file mode 100644 index 0000000..7fbe783 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/androidstudio.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/arduino-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/arduino-light.min.css new file mode 100644 index 0000000..cadb130 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/arduino-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#434f54}.hljs-subst{color:#434f54}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#00979d}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-literal{color:#d35400}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#00979d}.hljs-deletion,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#005c5f}.hljs-comment{color:rgba(149,165,166,.8)}.hljs-meta .hljs-keyword{color:#728e00}.hljs-meta{color:#434f54}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-function{color:#728e00}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-number{color:#8a7b52} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/arta.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/arta.min.css new file mode 100644 index 0000000..8dcdc74 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/arta.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#222;color:#aaa}.hljs-subst{color:#aaa}.hljs-section{color:#fff}.hljs-comment,.hljs-meta,.hljs-quote{color:#444}.hljs-bullet,.hljs-regexp,.hljs-string,.hljs-symbol{color:#fc3}.hljs-addition,.hljs-number{color:#0c6}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-literal,.hljs-template-variable,.hljs-type{color:#32aaee}.hljs-keyword,.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag{color:#64a}.hljs-deletion,.hljs-template-tag,.hljs-title,.hljs-variable{color:#b16}.hljs-doctag,.hljs-section,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/ascetic.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/ascetic.min.css new file mode 100644 index 0000000..3c9fe03 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/ascetic.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-link,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#888}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#ccc}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark-reasonable.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark-reasonable.min.css new file mode 100644 index 0000000..9296216 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark-reasonable.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-keyword,.hljs-operator,.hljs-pattern-match{color:#f92672}.hljs-function,.hljs-pattern-match .hljs-constructor{color:#61aeee}.hljs-function .hljs-params{color:#a6e22e}.hljs-function .hljs-params .hljs-typing{color:#fd971f}.hljs-module-access .hljs-module{color:#7e57c2}.hljs-constructor{color:#e2b93d}.hljs-constructor .hljs-string{color:#9ccc65}.hljs-comment,.hljs-quote{color:#b18eb1;font-style:italic}.hljs-doctag,.hljs-formula{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark.min.css new file mode 100644 index 0000000..5344ee3 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-light.min.css new file mode 100644 index 0000000..df0268a --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/atom-one-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#383a42;background:#fafafa}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/brown-paper.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/brown-paper.min.css new file mode 100644 index 0000000..6231e8a --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/brown-paper.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#363c69;background:url(./brown-papersq.png) #b7a68e}.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#059}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-link,.hljs-name,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#2c009f}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#802022}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/codepen-embed.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/codepen-embed.min.css new file mode 100644 index 0000000..0d7dff6 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/codepen-embed.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#222;color:#fff}.hljs-comment,.hljs-quote{color:#777}.hljs-built_in,.hljs-bullet,.hljs-deletion,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-regexp,.hljs-symbol,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ab875d}.hljs-attribute,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-title,.hljs-type{color:#9b869b}.hljs-addition,.hljs-keyword,.hljs-selector-tag,.hljs-string{color:#8f9c6c}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/color-brewer.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/color-brewer.min.css new file mode 100644 index 0000000..1c677e3 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/color-brewer.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-addition,.hljs-meta,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable{color:#756bb1}.hljs-comment,.hljs-quote{color:#636363}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp{color:#31a354}.hljs-deletion,.hljs-variable{color:#88f}.hljs-built_in,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-tag,.hljs-title,.hljs-type{color:#3182bd}.hljs-emphasis{font-style:italic}.hljs-attribute{color:#e6550d} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/dark.min.css new file mode 100644 index 0000000..9ed546b --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#ddd;background:#303030}.hljs-keyword,.hljs-link,.hljs-literal,.hljs-section,.hljs-selector-tag{color:#fff}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-name,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#d88}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#979797}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/default.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/default.min.css new file mode 100644 index 0000000..a75ea91 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/default.min.css @@ -0,0 +1,9 @@ +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/devibeans.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/devibeans.min.css new file mode 100644 index 0000000..d8c4c0f --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/devibeans.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: devibeans (dark) + Author: @terminaldweller + Maintainer: @terminaldweller + + Inspired by vim's jellybeans theme (https://github.com/nanotech/jellybeans.vim) +*/.hljs{background:#000;color:#a39e9b}.hljs-attr,.hljs-template-tag{color:#8787d7}.hljs-comment,.hljs-doctag,.hljs-quote{color:#396}.hljs-params{color:#a39e9b}.hljs-regexp{color:#d700ff}.hljs-literal,.hljs-number,.hljs-selector-id,.hljs-tag{color:#ef5350}.hljs-meta,.hljs-meta .hljs-keyword{color:#0087ff}.hljs-code,.hljs-formula,.hljs-keyword,.hljs-link,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-variable{color:#64b5f6}.hljs-built_in,.hljs-deletion,.hljs-title{color:#ff8700}.hljs-attribute,.hljs-function,.hljs-name,.hljs-property,.hljs-section,.hljs-type{color:#ffd75f}.hljs-addition,.hljs-bullet,.hljs-meta .hljs-string,.hljs-string,.hljs-subst,.hljs-symbol{color:#558b2f}.hljs-selector-tag{color:#96f}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/docco.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/docco.min.css new file mode 100644 index 0000000..382ecbb --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/docco.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#f8f8ff}.hljs-comment,.hljs-quote{color:#408080;font-style:italic}.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-subst{color:#954121}.hljs-number{color:#40a070}.hljs-doctag,.hljs-string{color:#219161}.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-type{color:#19469d}.hljs-params{color:#00f}.hljs-title{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-template-variable,.hljs-variable{color:teal}.hljs-link,.hljs-regexp{color:#b68}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/far.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/far.min.css new file mode 100644 index 0000000..c338ef6 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/far.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#0ff;background:navy}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable{color:#ff0}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-type,.hljs-variable{color:#fff}.hljs-comment,.hljs-deletion,.hljs-doctag,.hljs-quote{color:#888}.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp{color:#0f0}.hljs-meta{color:teal}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/felipec.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/felipec.min.css new file mode 100644 index 0000000..7f76cd0 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/felipec.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + * Theme: FelipeC + * Author: (c) 2021 Felipe Contreras + * Website: https://github.com/felipec/vim-felipec + * + * Autogenerated with vim-felipec's generator. +*/.hljs{color:#dedde4;background-color:#1d1c21}.hljs ::selection,.hljs::selection{color:#1d1c21;background-color:#ba9cef}.hljs-code,.hljs-comment,.hljs-quote{color:#9e9da4}.hljs-deletion,.hljs-literal,.hljs-number{color:#f09080}.hljs-doctag,.hljs-meta,.hljs-operator,.hljs-punctuation,.hljs-selector-attr,.hljs-subst,.hljs-template-variable{color:#ffbb7b}.hljs-type{color:#fddb7c}.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-title{color:#c4da7d}.hljs-addition,.hljs-regexp,.hljs-string{color:#93e4a4}.hljs-class,.hljs-property{color:#65e7d1}.hljs-name,.hljs-selector-tag{color:#30c2d8}.hljs-built_in,.hljs-keyword{color:#5fb8f2}.hljs-bullet,.hljs-section{color:#90aafa}.hljs-selector-pseudo{color:#ba9cef}.hljs-attr,.hljs-attribute,.hljs-params,.hljs-variable{color:#d991d2}.hljs-link,.hljs-symbol{color:#ec8dab}.hljs-literal,.hljs-strong,.hljs-title{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/foundation.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/foundation.min.css new file mode 100644 index 0000000..1ddcfa6 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/foundation.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#eee;color:#000}.hljs-addition,.hljs-attribute,.hljs-emphasis,.hljs-link{color:#070}.hljs-emphasis{font-style:italic}.hljs-deletion,.hljs-string,.hljs-strong{color:#d14}.hljs-strong{font-weight:700}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-section,.hljs-title{color:#900}.hljs-class .hljs-title,.hljs-title.class_,.hljs-type{color:#458}.hljs-template-variable,.hljs-variable{color:#369}.hljs-bullet{color:#970}.hljs-meta{color:#34b}.hljs-code,.hljs-keyword,.hljs-literal,.hljs-number,.hljs-selector-tag{color:#099}.hljs-regexp{background-color:#fff0ff;color:#808}.hljs-symbol{color:#990073}.hljs-name,.hljs-selector-class,.hljs-selector-id,.hljs-tag{color:#070} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark-dimmed.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark-dimmed.min.css new file mode 100644 index 0000000..e266dfc --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark-dimmed.min.css @@ -0,0 +1,9 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark Dimmed + Description: Dark dimmed theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Colors taken from GitHub's CSS +*/.hljs{color:#adbac7;background:#22272e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#f47067}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#dcbdfb}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#6cb6ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#96d0ff}.hljs-built_in,.hljs-symbol{color:#f69d50}.hljs-code,.hljs-comment,.hljs-formula{color:#768390}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#8ddb8c}.hljs-subst{color:#adbac7}.hljs-section{color:#316dca;font-weight:700}.hljs-bullet{color:#eac55f}.hljs-emphasis{color:#adbac7;font-style:italic}.hljs-strong{color:#adbac7;font-weight:700}.hljs-addition{color:#b4f1b4;background-color:#1b4721}.hljs-deletion{color:#ffd8d3;background-color:#78191b} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark.min.css new file mode 100644 index 0000000..03b6da8 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/github-dark.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/github.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/github.min.css new file mode 100644 index 0000000..275239a --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/github.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/gml.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/gml.min.css new file mode 100644 index 0000000..89455fe --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/gml.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#222;color:silver}.hljs-keyword{color:#ffb871;font-weight:700}.hljs-built_in{color:#ffb871}.hljs-literal{color:#ff8080}.hljs-symbol{color:#58e55a}.hljs-comment{color:#5b995b}.hljs-string{color:#ff0}.hljs-number{color:#ff8080}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-code,.hljs-deletion,.hljs-doctag,.hljs-function,.hljs-link,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-name,.hljs-quote,.hljs-regexp,.hljs-section,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:silver}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/googlecode.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/googlecode.min.css new file mode 100644 index 0000000..0140b89 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/googlecode.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote{color:#800}.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-title{color:#008}.hljs-template-variable,.hljs-variable{color:#660}.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#080}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-symbol{color:#066}.hljs-attr,.hljs-built_in,.hljs-doctag,.hljs-params,.hljs-title,.hljs-type{color:#606}.hljs-attribute,.hljs-subst{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-selector-class,.hljs-selector-id{color:#9b703f}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-dark.min.css new file mode 100644 index 0000000..4aba928 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background-color:#652487;background-image:linear-gradient(160deg,#652487 0,#443ac3 35%,#0174b7 68%,#04988e 100%);color:#e7e4eb}.hljs-subtr{color:#e7e4eb}.hljs-comment,.hljs-doctag,.hljs-meta,.hljs-quote{color:#af8dd9}.hljs-attr,.hljs-regexp,.hljs-selector-id,.hljs-selector-tag,.hljs-tag,.hljs-template-tag{color:#aefbff}.hljs-bullet,.hljs-params,.hljs-selector-class{color:#f19fff}.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-symbol,.hljs-type{color:#17fc95}.hljs-addition,.hljs-link,.hljs-number{color:#c5fe00}.hljs-string{color:#38c0ff}.hljs-addition,.hljs-attribute{color:#e7ff9f}.hljs-template-variable,.hljs-variable{color:#e447ff}.hljs-built_in,.hljs-class,.hljs-formula,.hljs-function,.hljs-name,.hljs-title{color:#ffc800}.hljs-deletion,.hljs-literal,.hljs-selector-pseudo{color:#ff9e44}.hljs-emphasis,.hljs-quote{font-style:italic}.hljs-keyword,.hljs-params,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-template-tag{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-light.min.css new file mode 100644 index 0000000..c5db6fd --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/gradient-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background-color:#f9ccff;background-image:linear-gradient(295deg,#f9ccff 0,#e6bbf9 11%,#9ec6f9 32%,#55e6ee 60%,#91f5d1 74%,#f9ffbf 98%);color:#250482}.hljs-subtr{color:#01958b}.hljs-comment,.hljs-doctag,.hljs-meta,.hljs-quote{color:#cb7200}.hljs-attr,.hljs-regexp,.hljs-selector-id,.hljs-selector-tag,.hljs-tag,.hljs-template-tag{color:#07bd5f}.hljs-bullet,.hljs-params,.hljs-selector-class{color:#43449f}.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-symbol,.hljs-type{color:#7d2801}.hljs-addition,.hljs-link,.hljs-number{color:#7f0096}.hljs-string{color:#2681ab}.hljs-addition,.hljs-attribute{color:#296562}.hljs-template-variable,.hljs-variable{color:#025c8f}.hljs-built_in,.hljs-class,.hljs-formula,.hljs-function,.hljs-name,.hljs-title{color:#529117}.hljs-deletion,.hljs-literal,.hljs-selector-pseudo{color:#ad13ff}.hljs-emphasis,.hljs-quote{font-style:italic}.hljs-keyword,.hljs-params,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-template-tag{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/grayscale.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/grayscale.min.css new file mode 100644 index 0000000..5eefdaa --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/grayscale.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#333;background:#fff}.hljs-comment,.hljs-quote{color:#777;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number{color:#777}.hljs-doctag,.hljs-formula,.hljs-string{color:#333;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC)}.hljs-section,.hljs-selector-id,.hljs-title{color:#000;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-name,.hljs-title.class_,.hljs-type{color:#333;font-weight:700}.hljs-tag{color:#333}.hljs-regexp{color:#333;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==)}.hljs-bullet,.hljs-link,.hljs-symbol{color:#000;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==)}.hljs-built_in{color:#000;text-decoration:underline}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{color:#fff;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==)}.hljs-addition{color:#000;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/hybrid.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/hybrid.min.css new file mode 100644 index 0000000..52489b6 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/hybrid.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1d1f21;color:#c5c8c6}.hljs span::selection,.hljs::selection{background:#373b41}.hljs span::-moz-selection,.hljs::-moz-selection{background:#373b41}.hljs-name,.hljs-title{color:#f0c674}.hljs-comment,.hljs-meta,.hljs-meta .hljs-keyword{color:#707880}.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol{color:#c66}.hljs-addition,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#b5bd68}.hljs-attribute,.hljs-code,.hljs-selector-id{color:#b294bb}.hljs-bullet,.hljs-keyword,.hljs-selector-tag,.hljs-tag{color:#81a2be}.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-variable{color:#8abeb7}.hljs-built_in,.hljs-quote,.hljs-section,.hljs-selector-class,.hljs-type{color:#de935f}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/idea.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/idea.min.css new file mode 100644 index 0000000..7cc62ff --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/idea.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-subst,.hljs-title{font-weight:400;color:#000}.hljs-comment,.hljs-quote{color:grey;font-style:italic}.hljs-meta{color:olive}.hljs-tag{background:#efefef}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-tag,.hljs-type{font-weight:700;color:navy}.hljs-attribute,.hljs-link,.hljs-number,.hljs-regexp{font-weight:700;color:#00f}.hljs-link,.hljs-number,.hljs-regexp{font-weight:400}.hljs-string{color:green;font-weight:700}.hljs-bullet,.hljs-formula,.hljs-symbol{color:#000;background:#d0eded;font-style:italic}.hljs-doctag{text-decoration:underline}.hljs-template-variable,.hljs-variable{color:#660e7a}.hljs-addition{background:#baeeba}.hljs-deletion{background:#ffc8bd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/intellij-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/intellij-light.min.css new file mode 100644 index 0000000..97fc3e2 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/intellij-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-subst,.hljs-title{font-weight:400;color:#000}.hljs-title.function_{color:#7a7a43}.hljs-code,.hljs-comment,.hljs-quote{color:#8c8c8c;font-style:italic}.hljs-meta{color:#9e880d}.hljs-section{color:#871094}.hljs-built_in,.hljs-keyword,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-symbol,.hljs-template-tag,.hljs-type,.hljs-variable.language_{color:#0033b3}.hljs-attr,.hljs-property{color:#871094}.hljs-attribute{color:#174ad4}.hljs-number{color:#1750eb}.hljs-regexp{color:#264eff}.hljs-link{text-decoration:underline;color:#006dcc}.hljs-meta .hljs-string,.hljs-string{color:#067d17}.hljs-char.escape_{color:#0037a6}.hljs-doctag{text-decoration:underline}.hljs-template-variable{color:#248f8f}.hljs-addition{background:#bee6be}.hljs-deletion{background:#d6d6d6}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/ir-black.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/ir-black.min.css new file mode 100644 index 0000000..e78fd08 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/ir-black.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#000;color:#f8f8f8}.hljs-comment,.hljs-meta,.hljs-quote{color:#7c7c7c}.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#96cbfe}.hljs-attribute,.hljs-selector-id{color:#ffffb6}.hljs-addition,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#a8ff60}.hljs-subst{color:#daefa3}.hljs-link,.hljs-regexp{color:#e9c062}.hljs-doctag,.hljs-section,.hljs-title,.hljs-type{color:#ffffb6}.hljs-bullet,.hljs-literal,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#c6c5fe}.hljs-deletion,.hljs-number{color:#ff73fd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-dark.min.css new file mode 100644 index 0000000..535ef87 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#404040}.hljs,.hljs-subst{color:#f0f0f0}.hljs-comment{color:#b5b5b5;font-style:italic}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f0f0f0;font-weight:700}.hljs-string{color:#97bf0d}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#f0f0f0}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#e2c696}.hljs-built_in,.hljs-literal{color:#97bf0d;font-weight:700}.hljs-addition,.hljs-bullet,.hljs-code{color:#397300}.hljs-class{color:#ce9d4d;font-weight:700}.hljs-section,.hljs-title{color:#df471e}.hljs-title>.hljs-built_in{color:#81bce9;font-weight:400}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-light.min.css new file mode 100644 index 0000000..f008c74 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/isbl-editor-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-subst{color:#000}.hljs-comment{color:#555;font-style:italic}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{color:#000;font-weight:700}.hljs-string{color:navy}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#000}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#5e1700}.hljs-built_in,.hljs-literal{color:navy;font-weight:700}.hljs-addition,.hljs-bullet,.hljs-code{color:#397300}.hljs-class{color:#6f1c00;font-weight:700}.hljs-section,.hljs-title{color:#fb2c00}.hljs-title>.hljs-built_in{color:teal;font-weight:400}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-dark.min.css new file mode 100644 index 0000000..cf56cea --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#221a0f;color:#d3af86}.hljs-comment,.hljs-quote{color:#d6baad}.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#dc3958}.hljs-built_in,.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f79a32}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#889b4a}.hljs-function,.hljs-keyword,.hljs-selector-tag{color:#98676a}.hljs-attribute,.hljs-section,.hljs-title{color:#f06431}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-light.min.css new file mode 100644 index 0000000..b9d0ea4 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/kimbie-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fbebd4;color:#84613d}.hljs-comment,.hljs-quote{color:#a57a4c}.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#dc3958}.hljs-built_in,.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f79a32}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#889b4a}.hljs-function,.hljs-keyword,.hljs-selector-tag{color:#98676a}.hljs-attribute,.hljs-section,.hljs-title{color:#f06431}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/lightfair.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/lightfair.min.css new file mode 100644 index 0000000..b6c3791 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/lightfair.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#444;background:#fff}.hljs-name{color:#01a3a3}.hljs-meta,.hljs-tag{color:#789}.hljs-comment{color:#888}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#4286f4}.hljs-section,.hljs-title{color:#4286f4;font-weight:700}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#bc6060}.hljs-literal{color:#62bcbc}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#25c6c6}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/lioshi.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/lioshi.min.css new file mode 100644 index 0000000..3d6a92f --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/lioshi.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#303030;color:#c5c8c6}.hljs-comment{color:#8d8d8d}.hljs-quote{color:#b3c7d8}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#c66}.hljs-built_in,.hljs-literal,.hljs-number,.hljs-subst .hljs-link,.hljs-type{color:#de935f}.hljs-attribute{color:#f0c674}.hljs-addition,.hljs-bullet,.hljs-params,.hljs-string{color:#b5bd68}.hljs-class,.hljs-function,.hljs-keyword,.hljs-selector-tag{color:#be94bb}.hljs-meta,.hljs-section,.hljs-title{color:#81a2be}.hljs-symbol{color:#dbc4d9}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/magula.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/magula.min.css new file mode 100644 index 0000000..e024387 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/magula.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background-color:#f4f4f4;color:#000}.hljs-subst{color:#000}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-variable{color:#050}.hljs-comment,.hljs-quote{color:#777}.hljs-link,.hljs-literal,.hljs-number,.hljs-regexp,.hljs-type{color:#800}.hljs-deletion,.hljs-meta{color:#00e}.hljs-built_in,.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-tag,.hljs-title{font-weight:700;color:navy}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/mono-blue.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/mono-blue.min.css new file mode 100644 index 0000000..fb74d40 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/mono-blue.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#eaeef3;color:#00193a}.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title{font-weight:700}.hljs-comment{color:#738191}.hljs-addition,.hljs-built_in,.hljs-literal,.hljs-name,.hljs-quote,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-tag,.hljs-title,.hljs-type{color:#0048ab}.hljs-attribute,.hljs-bullet,.hljs-deletion,.hljs-link,.hljs-meta,.hljs-regexp,.hljs-subst,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#4c81c9}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai-sublime.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai-sublime.min.css new file mode 100644 index 0000000..247e2e9 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai-sublime.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#23241f;color:#f8f8f2}.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params,.hljs-title.class_{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai.min.css new file mode 100644 index 0000000..d289f63 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/monokai.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#272822;color:#ddd}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-number,.hljs-selector-tag,.hljs-strong,.hljs-tag{color:#f92672}.hljs-code{color:#66d9ef}.hljs-attr,.hljs-attribute,.hljs-link,.hljs-regexp,.hljs-symbol{color:#bf79db}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-emphasis,.hljs-section,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string,.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#a6e22e}.hljs-class .hljs-title,.hljs-title.class_{color:#fff}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#75715e}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-section,.hljs-selector-id,.hljs-selector-tag,.hljs-title,.hljs-type{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/night-owl.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/night-owl.min.css new file mode 100644 index 0000000..ed94590 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/night-owl.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#011627;color:#d6deeb}.hljs-keyword{color:#c792ea;font-style:italic}.hljs-built_in{color:#addb67;font-style:italic}.hljs-type{color:#82aaff}.hljs-literal{color:#ff5874}.hljs-number{color:#f78c6c}.hljs-regexp{color:#5ca7e4}.hljs-string{color:#ecc48d}.hljs-subst{color:#d3423e}.hljs-symbol{color:#82aaff}.hljs-class{color:#ffcb8b}.hljs-function{color:#82aaff}.hljs-title{color:#dcdcaa;font-style:italic}.hljs-params{color:#7fdbca}.hljs-comment{color:#637777;font-style:italic}.hljs-doctag{color:#7fdbca}.hljs-meta,.hljs-meta .hljs-keyword{color:#82aaff}.hljs-meta .hljs-string{color:#ecc48d}.hljs-section{color:#82b1ff}.hljs-attr,.hljs-name,.hljs-tag{color:#7fdbca}.hljs-attribute{color:#80cbc4}.hljs-variable{color:#addb67}.hljs-bullet{color:#d9f5dd}.hljs-code{color:#80cbc4}.hljs-emphasis{color:#c792ea;font-style:italic}.hljs-strong{color:#addb67;font-weight:700}.hljs-formula{color:#c792ea}.hljs-link{color:#ff869a}.hljs-quote{color:#697098;font-style:italic}.hljs-selector-tag{color:#ff6363}.hljs-selector-id{color:#fad430}.hljs-selector-class{color:#addb67;font-style:italic}.hljs-selector-attr,.hljs-selector-pseudo{color:#c792ea;font-style:italic}.hljs-template-tag{color:#c792ea}.hljs-template-variable{color:#addb67}.hljs-addition{color:#addb67ff;font-style:italic}.hljs-deletion{color:#ef535090;font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-dark.min.css new file mode 100644 index 0000000..4e6403d --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-dark.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: nnfx dark + Description: a theme inspired by Netscape Navigator/Firefox + Author: (c) 2020-2021 Jim Mason + Maintainer: @RocketMan + License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 + Updated: 2021-05-17 + + @version 1.1.0 +*/.hljs{background:#333;color:#fff}.language-xml .hljs-meta,.language-xml .hljs-meta-string{font-weight:700;font-style:italic;color:#69f}.hljs-comment,.hljs-quote{font-style:italic;color:#9c6}.hljs-built_in,.hljs-keyword,.hljs-name{color:#a7a}.hljs-attr,.hljs-name{font-weight:700}.hljs-string{font-weight:400}.hljs-code,.hljs-link,.hljs-meta .hljs-string,.hljs-number,.hljs-regexp,.hljs-string{color:#bce}.hljs-bullet,.hljs-symbol,.hljs-template-variable,.hljs-title,.hljs-variable{color:#d40}.hljs-class .hljs-title,.hljs-title.class_,.hljs-type{font-weight:700;color:#96c}.hljs-attr,.hljs-function .hljs-title,.hljs-subst,.hljs-tag,.hljs-title.function_{color:#fff}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#797}.hljs-deletion{background-color:#c99}.hljs-meta{color:#69f}.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{font-weight:700;color:#69f}.hljs-selector-pseudo{font-style:italic}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-light.min.css new file mode 100644 index 0000000..469223a --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/nnfx-light.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: nnfx light + Description: a theme inspired by Netscape Navigator/Firefox + Author: (c) 2020-2021 Jim Mason + Maintainer: @RocketMan + License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 + Updated: 2021-05-17 + + @version 1.1.0 +*/.hljs{background:#fff;color:#000}.language-xml .hljs-meta,.language-xml .hljs-meta-string{font-weight:700;font-style:italic;color:#48b}.hljs-comment,.hljs-quote{font-style:italic;color:#070}.hljs-built_in,.hljs-keyword,.hljs-name{color:#808}.hljs-attr,.hljs-name{font-weight:700}.hljs-string{font-weight:400}.hljs-code,.hljs-link,.hljs-meta .hljs-string,.hljs-number,.hljs-regexp,.hljs-string{color:#00f}.hljs-bullet,.hljs-symbol,.hljs-template-variable,.hljs-title,.hljs-variable{color:#f40}.hljs-class .hljs-title,.hljs-title.class_,.hljs-type{font-weight:700;color:#639}.hljs-attr,.hljs-function .hljs-title,.hljs-subst,.hljs-tag,.hljs-title.function_{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#beb}.hljs-deletion{background-color:#fbb}.hljs-meta{color:#269}.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{font-weight:700;color:#48b}.hljs-selector-pseudo{font-style:italic}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/nord.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/nord.min.css new file mode 100644 index 0000000..efbb0c1 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/nord.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2e3440}.hljs,.hljs-subst{color:#d8dee9}.hljs-selector-tag{color:#81a1c1}.hljs-selector-id{color:#8fbcbb;font-weight:700}.hljs-selector-attr,.hljs-selector-class{color:#8fbcbb}.hljs-property,.hljs-selector-pseudo{color:#88c0d0}.hljs-addition{background-color:rgba(163,190,140,.5)}.hljs-deletion{background-color:rgba(191,97,106,.5)}.hljs-built_in,.hljs-class,.hljs-type{color:#8fbcbb}.hljs-function,.hljs-function>.hljs-title,.hljs-title.hljs-function{color:#88c0d0}.hljs-keyword,.hljs-literal,.hljs-symbol{color:#81a1c1}.hljs-number{color:#b48ead}.hljs-regexp{color:#ebcb8b}.hljs-string{color:#a3be8c}.hljs-title{color:#8fbcbb}.hljs-params{color:#d8dee9}.hljs-bullet{color:#81a1c1}.hljs-code{color:#8fbcbb}.hljs-emphasis{font-style:italic}.hljs-formula{color:#8fbcbb}.hljs-strong{font-weight:700}.hljs-link:hover{text-decoration:underline}.hljs-comment,.hljs-quote{color:#4c566a}.hljs-doctag{color:#8fbcbb}.hljs-meta,.hljs-meta .hljs-keyword{color:#5e81ac}.hljs-meta .hljs-string{color:#a3be8c}.hljs-attr{color:#8fbcbb}.hljs-attribute{color:#d8dee9}.hljs-name{color:#81a1c1}.hljs-section{color:#88c0d0}.hljs-tag{color:#81a1c1}.hljs-template-variable,.hljs-variable{color:#d8dee9}.hljs-template-tag{color:#5e81ac}.language-abnf .hljs-attribute{color:#88c0d0}.language-abnf .hljs-symbol{color:#ebcb8b}.language-apache .hljs-attribute{color:#88c0d0}.language-apache .hljs-section{color:#81a1c1}.language-arduino .hljs-built_in{color:#88c0d0}.language-aspectj .hljs-meta{color:#d08770}.language-aspectj>.hljs-title{color:#88c0d0}.language-bnf .hljs-attribute{color:#8fbcbb}.language-clojure .hljs-name{color:#88c0d0}.language-clojure .hljs-symbol{color:#ebcb8b}.language-coq .hljs-built_in{color:#88c0d0}.language-cpp .hljs-meta .hljs-string{color:#8fbcbb}.language-css .hljs-built_in{color:#88c0d0}.language-css .hljs-keyword{color:#d08770}.language-diff .hljs-meta,.language-ebnf .hljs-attribute{color:#8fbcbb}.language-glsl .hljs-built_in{color:#88c0d0}.language-groovy .hljs-meta:not(:first-child),.language-haxe .hljs-meta,.language-java .hljs-meta{color:#d08770}.language-ldif .hljs-attribute{color:#8fbcbb}.language-lisp .hljs-name,.language-lua .hljs-built_in,.language-moonscript .hljs-built_in,.language-nginx .hljs-attribute{color:#88c0d0}.language-nginx .hljs-section{color:#5e81ac}.language-pf .hljs-built_in,.language-processing .hljs-built_in{color:#88c0d0}.language-scss .hljs-keyword,.language-stylus .hljs-keyword{color:#81a1c1}.language-swift .hljs-meta{color:#d08770}.language-vim .hljs-built_in{color:#88c0d0;font-style:italic}.language-yaml .hljs-meta{color:#d08770} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/obsidian.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/obsidian.min.css new file mode 100644 index 0000000..c2a0786 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/obsidian.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#e0e2e4;background:#282b2e}.hljs-keyword,.hljs-literal,.hljs-selector-id,.hljs-selector-tag{color:#93c763}.hljs-number{color:#ffcd22}.hljs-attribute{color:#668bb0}.hljs-link,.hljs-regexp{color:#d39745}.hljs-meta{color:#557182}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-emphasis,.hljs-name,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-subst,.hljs-tag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable{color:#8cbbad}.hljs-string,.hljs-symbol{color:#ec7600}.hljs-comment,.hljs-deletion,.hljs-quote{color:#818e96}.hljs-selector-class{color:#a082bd}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-class .hljs-title,.hljs-code,.hljs-section,.hljs-title.class_{color:#fff} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-dark.min.css new file mode 100644 index 0000000..55e26c6 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#e6e6e6;background:#2a2c2d}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}.hljs-comment,.hljs-quote{color:#bbb;font-style:italic}.hljs-params{color:#bbb}.hljs-attr,.hljs-punctuation{color:#e6e6e6}.hljs-meta,.hljs-name,.hljs-selector-tag{color:#ff4b82}.hljs-char.escape_,.hljs-operator{color:#b084eb}.hljs-deletion,.hljs-keyword{color:#ff75b5}.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-variable.language_{color:#ff9ac1}.hljs-code,.hljs-formula,.hljs-property,.hljs-section,.hljs-subst,.hljs-title.function_{color:#45a9f9}.hljs-addition,.hljs-bullet,.hljs-meta .hljs-string,.hljs-selector-class,.hljs-string,.hljs-symbol,.hljs-title.class_,.hljs-title.class_.inherited__{color:#19f9d8}.hljs-attribute,.hljs-built_in,.hljs-doctag,.hljs-link,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-number,.hljs-punctuation,.hljs-selector-id,.hljs-tag,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#ffb86c} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-light.min.css new file mode 100644 index 0000000..6710dbd --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/panda-syntax-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#2a2c2d;background:#e6e6e6}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}.hljs-comment,.hljs-quote{color:#676b79;font-style:italic}.hljs-params{color:#676b79}.hljs-attr,.hljs-punctuation{color:#2a2c2d}.hljs-char.escape_,.hljs-meta,.hljs-name,.hljs-operator,.hljs-selector-tag{color:#c56200}.hljs-deletion,.hljs-keyword{color:#d92792}.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-variable.language_{color:#cc5e91}.hljs-code,.hljs-formula,.hljs-property,.hljs-section,.hljs-subst,.hljs-title.function_{color:#3787c7}.hljs-addition,.hljs-bullet,.hljs-meta .hljs-string,.hljs-selector-class,.hljs-string,.hljs-symbol,.hljs-title.class_,.hljs-title.class_.inherited__{color:#0d7d6c}.hljs-attribute,.hljs-built_in,.hljs-doctag,.hljs-link,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-number,.hljs-selector-id,.hljs-tag,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#7641bb} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-dark.min.css new file mode 100644 index 0000000..d51dd18 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2f1e2e;color:#a39e9b}.hljs-comment,.hljs-quote{color:#8d8687}.hljs-link,.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ef6155}.hljs-built_in,.hljs-deletion,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f99b15}.hljs-attribute,.hljs-section,.hljs-title{color:#fec418}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#48b685}.hljs-keyword,.hljs-selector-tag{color:#815ba4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-light.min.css new file mode 100644 index 0000000..3a17c3f --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/paraiso-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#e7e9db;color:#4f424c}.hljs-comment,.hljs-quote{color:#776e71}.hljs-link,.hljs-meta,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ef6155}.hljs-built_in,.hljs-deletion,.hljs-literal,.hljs-number,.hljs-params,.hljs-type{color:#f99b15}.hljs-attribute,.hljs-section,.hljs-title{color:#fec418}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#48b685}.hljs-keyword,.hljs-selector-tag{color:#815ba4}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/pojoaque.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/pojoaque.min.css new file mode 100644 index 0000000..71345a9 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/pojoaque.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#dccf8f;background:url(./pojoaque.jpg) left top #181914}.hljs-comment,.hljs-quote{color:#586e75;font-style:italic}.hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#b64926}.hljs-doctag,.hljs-number,.hljs-regexp,.hljs-string{color:#468966}.hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#ffb03b}.hljs-class .hljs-title,.hljs-tag,.hljs-template-variable,.hljs-title.class_,.hljs-type,.hljs-variable{color:#b58900}.hljs-attribute{color:#b89859}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#cb4b16}.hljs-deletion{color:#dc322f}.hljs-selector-class,.hljs-selector-id{color:#d3a60c}.hljs-formula{background:#073642}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/purebasic.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/purebasic.min.css new file mode 100644 index 0000000..e026c45 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/purebasic.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#ffffdf}.hljs,.hljs-attr,.hljs-function,.hljs-name,.hljs-number,.hljs-params,.hljs-subst,.hljs-type{color:#000}.hljs-addition,.hljs-comment,.hljs-regexp,.hljs-section,.hljs-selector-pseudo{color:#0aa}.hljs-built_in,.hljs-class,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-selector-class{color:#066;font-weight:700}.hljs-code,.hljs-tag,.hljs-title,.hljs-variable{color:#066}.hljs-selector-attr,.hljs-string{color:#0080ff}.hljs-attribute,.hljs-deletion,.hljs-link,.hljs-symbol{color:#924b72}.hljs-literal,.hljs-meta,.hljs-selector-id{color:#924b72;font-weight:700}.hljs-name,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-dark.min.css new file mode 100644 index 0000000..976e519 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#aaa;background:#000}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#f5f}.hljs-code .hljs-selector-class{color:#aaf}.hljs-emphasis,.hljs-stronge,.hljs-type{font-style:italic}.hljs-function,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-symbol{color:#ff5}.hljs-subst,.hljs-tag,.hljs-title{color:#aaa}.hljs-attribute{color:#f55}.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-variable{color:#88f}.hljs-addition,.hljs-built_in,.hljs-link,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:#f5f}.hljs-comment,.hljs-deletion,.hljs-meta{color:#5ff} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-light.min.css new file mode 100644 index 0000000..7f1af8c --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/qtcreator-light.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#000;background:#fff}.hljs-emphasis,.hljs-strong{color:#000}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:navy}.hljs-code .hljs-selector-class{color:purple}.hljs-emphasis,.hljs-stronge,.hljs-type{font-style:italic}.hljs-function,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-symbol{color:olive}.hljs-subst,.hljs-tag,.hljs-title{color:#000}.hljs-attribute{color:maroon}.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-variable{color:#0055af}.hljs-addition,.hljs-built_in,.hljs-comment,.hljs-deletion,.hljs-link,.hljs-meta,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:green} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/rainbow.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/rainbow.min.css new file mode 100644 index 0000000..c8ca25f --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/rainbow.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#474949;color:#d1d9e1}.hljs-comment,.hljs-quote{color:#969896;font-style:italic}.hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:#c9c}.hljs-number,.hljs-selector-attr,.hljs-selector-pseudo{color:#f99157}.hljs-doctag,.hljs-regexp,.hljs-string{color:#8abeb7}.hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#b5bd68}.hljs-class .hljs-title,.hljs-selector-id,.hljs-template-variable,.hljs-title.class_,.hljs-variable{color:#fc6}.hljs-name,.hljs-section,.hljs-strong{font-weight:700}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#f99157}.hljs-deletion{color:#dc322f}.hljs-formula{background:#eee8d5}.hljs-attr,.hljs-attribute{color:#81a2be}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/routeros.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/routeros.min.css new file mode 100644 index 0000000..0378678 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/routeros.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#444;background:#f0f0f0}.hljs-subst{color:#444}.hljs-comment{color:#888}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-attribute{color:#0e9a00}.hljs-function{color:#99069a}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#bc6060}.hljs-literal{color:#78a960}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#0c9a9a}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/school-book.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/school-book.min.css new file mode 100644 index 0000000..843f268 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/school-book.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#3e5915;background:#f6f5b2}.hljs-keyword,.hljs-literal,.hljs-selector-tag{color:#059}.hljs-subst{color:#3e5915}.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-link,.hljs-section,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#2c009f}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#e60415}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-id,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/shades-of-purple.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/shades-of-purple.min.css new file mode 100644 index 0000000..3dd25b4 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/shades-of-purple.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2d2b57;color:#e3dfff;font-weight:400}.hljs-subst{color:#e3dfff}.hljs-title{color:#fad000;font-weight:400}.hljs-name{color:#a1feff}.hljs-tag{color:#fff}.hljs-attr{color:#f8d000;font-style:italic}.hljs-built_in,.hljs-keyword,.hljs-section,.hljs-selector-tag{color:#fb9e00}.hljs-addition,.hljs-attribute,.hljs-bullet,.hljs-code,.hljs-deletion,.hljs-quote,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-string,.hljs-symbol,.hljs-template-tag{color:#4cd213}.hljs-meta,.hljs-meta .hljs-string{color:#fb9e00}.hljs-comment{color:#ac65ff}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-strong{font-weight:400}.hljs-literal,.hljs-number{color:#fa658d}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/srcery.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/srcery.min.css new file mode 100644 index 0000000..377d61a --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/srcery.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1c1b19;color:#fce8c3}.hljs-literal,.hljs-quote,.hljs-subst{color:#fce8c3}.hljs-symbol,.hljs-type{color:#68a8e4}.hljs-deletion,.hljs-keyword{color:#ef2f27}.hljs-attribute,.hljs-function,.hljs-name,.hljs-section,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-title{color:#fbb829}.hljs-class,.hljs-code,.hljs-property,.hljs-template-variable,.hljs-variable{color:#0aaeb3}.hljs-addition,.hljs-bullet,.hljs-regexp,.hljs-string{color:#98bc37}.hljs-built_in,.hljs-params{color:#ff5c8f}.hljs-selector-tag,.hljs-template-tag{color:#2c78bf}.hljs-comment,.hljs-link,.hljs-meta,.hljs-number{color:#918175}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-dark.min.css new file mode 100644 index 0000000..33cea55 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-dark.min.css @@ -0,0 +1,13 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: StackOverflow Dark + Description: Dark theme as used on stackoverflow.com + Author: stackoverflow.com + Maintainer: @Hirse + Website: https://github.com/StackExchange/Stacks + License: MIT + Updated: 2021-05-15 + + Updated for @stackoverflow/stacks v0.64.0 + Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less + Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less +*/.hljs{color:#fff;background:#1c1b1b}.hljs-subst{color:#fff}.hljs-comment{color:#999}.hljs-attr,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-selector-tag{color:#88aece}.hljs-attribute{color:#c59bc1}.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#f08d49}.hljs-selector-class{color:#88aece}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#b5bd68}.hljs-meta,.hljs-selector-pseudo{color:#88aece}.hljs-built_in,.hljs-literal,.hljs-title{color:#f08d49}.hljs-bullet,.hljs-code{color:#ccc}.hljs-meta .hljs-string{color:#b5bd68}.hljs-deletion{color:#de7176}.hljs-addition{color:#76c490}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-light.min.css new file mode 100644 index 0000000..c36d63d --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/stackoverflow-light.min.css @@ -0,0 +1,13 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: StackOverflow Light + Description: Light theme as used on stackoverflow.com + Author: stackoverflow.com + Maintainer: @Hirse + Website: https://github.com/StackExchange/Stacks + License: MIT + Updated: 2021-05-15 + + Updated for @stackoverflow/stacks v0.64.0 + Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less + Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less +*/.hljs{color:#2f3337;background:#f6f6f6}.hljs-subst{color:#2f3337}.hljs-comment{color:#656e77}.hljs-attr,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-section,.hljs-selector-tag{color:#015692}.hljs-attribute{color:#803378}.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-id,.hljs-template-tag,.hljs-type{color:#b75501}.hljs-selector-class{color:#015692}.hljs-link,.hljs-regexp,.hljs-selector-attr,.hljs-string,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#54790d}.hljs-meta,.hljs-selector-pseudo{color:#015692}.hljs-built_in,.hljs-literal,.hljs-title{color:#b75501}.hljs-bullet,.hljs-code{color:#535a60}.hljs-meta .hljs-string{color:#54790d}.hljs-deletion{color:#c02d2e}.hljs-addition{color:#2f6f44}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/sunburst.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/sunburst.min.css new file mode 100644 index 0000000..9210ae6 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/sunburst.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#000;color:#f8f8f8}.hljs-comment,.hljs-quote{color:#aeaeae;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#e28964}.hljs-string{color:#65b042}.hljs-subst{color:#daefa3}.hljs-link,.hljs-regexp{color:#e9c062}.hljs-name,.hljs-section,.hljs-tag,.hljs-title{color:#89bdff}.hljs-class .hljs-title,.hljs-doctag,.hljs-title.class_{text-decoration:underline}.hljs-bullet,.hljs-number,.hljs-symbol{color:#3387cc}.hljs-params,.hljs-template-variable,.hljs-variable{color:#3e87e3}.hljs-attribute{color:#cda869}.hljs-meta{color:#8996a8}.hljs-formula{background-color:#0e2231;color:#f8f8f8;font-style:italic}.hljs-addition{background-color:#253b22;color:#f8f8f8}.hljs-deletion{background-color:#420e09;color:#f8f8f8}.hljs-selector-class{color:#9b703f}.hljs-selector-id{color:#8b98ab}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-dark.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-dark.min.css new file mode 100644 index 0000000..dc63ad9 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-dark.min.css @@ -0,0 +1,8 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Tokyo-night-Dark + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 +*/.hljs-comment,.hljs-meta{color:#565f89}.hljs-deletion,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-tag,.hljs-template-tag,.hljs-variable.language_{color:#f7768e}.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-template-variable,.hljs-type,.hljs-variable{color:#ff9e64}.hljs-attribute,.hljs-built_in{color:#e0af68}.hljs-keyword,.hljs-property,.hljs-subst,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#7dcfff}.hljs-selector-tag{color:#73daca}.hljs-addition,.hljs-bullet,.hljs-quote,.hljs-string,.hljs-symbol{color:#9ece6a}.hljs-code,.hljs-formula,.hljs-section{color:#7aa2f7}.hljs-attr,.hljs-char.escape_,.hljs-keyword,.hljs-name,.hljs-operator{color:#bb9af7}.hljs-punctuation{color:#c0caf5}.hljs{background:#1a1b26;color:#9aa5ce}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-light.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-light.min.css new file mode 100644 index 0000000..0096d4d --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tokyo-night-light.min.css @@ -0,0 +1,8 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: Tokyo-night-light + origin: https://github.com/enkia/tokyo-night-vscode-theme + Description: Original highlight.js style + Author: (c) Henri Vandersleyen + License: see project LICENSE + Touched: 2022 +*/.hljs-comment,.hljs-meta{color:#9699a3}.hljs-deletion,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-tag,.hljs-template-tag,.hljs-variable.language_{color:#8c4351}.hljs-link,.hljs-literal,.hljs-number,.hljs-params,.hljs-template-variable,.hljs-type,.hljs-variable{color:#965027}.hljs-attribute,.hljs-built_in{color:#8f5e15}.hljs-keyword,.hljs-property,.hljs-subst,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#0f4b6e}.hljs-selector-tag{color:#33635c}.hljs-addition,.hljs-bullet,.hljs-quote,.hljs-string,.hljs-symbol{color:#485e30}.hljs-code,.hljs-formula,.hljs-section{color:#34548a}.hljs-attr,.hljs-char.escape_,.hljs-keyword,.hljs-name,.hljs-operator{color:#5a4a78}.hljs-punctuation{color:#343b58}.hljs{background:#d5d6db;color:#565a6e}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-blue.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-blue.min.css new file mode 100644 index 0000000..2f71b26 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-blue.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs-comment,.hljs-quote{color:#7285b7}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ff9da4}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#ffc58f}.hljs-attribute{color:#ffeead}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#d1f1a9}.hljs-section,.hljs-title{color:#bbdaff}.hljs-keyword,.hljs-selector-tag{color:#ebbbff}.hljs{background:#002451;color:#fff}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-bright.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-bright.min.css new file mode 100644 index 0000000..d335629 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/tomorrow-night-bright.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs-comment,.hljs-quote{color:#969896}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#d54e53}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#e78c45}.hljs-attribute{color:#e7c547}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#b9ca4a}.hljs-section,.hljs-title{color:#7aa6da}.hljs-keyword,.hljs-selector-tag{color:#c397d8}.hljs{background:#000;color:#eaeaea}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/vs.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/vs.min.css new file mode 100644 index 0000000..fb695c1 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/vs.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#00f}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#a31515}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:#2b91af}.hljs-doctag{color:grey}.hljs-attr{color:red}.hljs-bullet,.hljs-link,.hljs-symbol{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/vs2015.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/vs2015.min.css new file mode 100644 index 0000000..7f6fe11 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/vs2015.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta .hljs-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/xcode.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/xcode.min.css new file mode 100644 index 0000000..cda4adc --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/xcode.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.xml .hljs-meta{color:silver}.hljs-comment,.hljs-quote{color:#007400}.hljs-attribute,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#aa0d91}.hljs-template-variable,.hljs-variable{color:#3f6e74}.hljs-code,.hljs-meta .hljs-string,.hljs-string{color:#c41a16}.hljs-link,.hljs-regexp{color:#0e0eff}.hljs-bullet,.hljs-number,.hljs-symbol,.hljs-title{color:#1c00cf}.hljs-meta,.hljs-section{color:#643820}.hljs-built_in,.hljs-class .hljs-title,.hljs-params,.hljs-title.class_,.hljs-type{color:#5c2699}.hljs-attr{color:#836c28}.hljs-subst{color:#000}.hljs-formula{background-color:#eee;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-class,.hljs-selector-id{color:#9b703f}.hljs-doctag,.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/code-themes/xt256.min.css b/skills/baoyu-markdown-to-html/scripts/md/code-themes/xt256.min.css new file mode 100644 index 0000000..ef34f0c --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/code-themes/xt256.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#eaeaea;background:#000}.hljs-subst{color:#eaeaea}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-type{color:#eaeaea}.hljs-params{color:#da0000}.hljs-literal,.hljs-name,.hljs-number{color:red;font-weight:bolder}.hljs-comment{color:#969896}.hljs-quote,.hljs-selector-id{color:#0ff}.hljs-template-variable,.hljs-title,.hljs-variable{color:#0ff;font-weight:700}.hljs-keyword,.hljs-selector-class,.hljs-symbol{color:#fff000}.hljs-bullet,.hljs-string{color:#0f0}.hljs-section,.hljs-tag{color:#000fff}.hljs-selector-tag{color:#000fff;font-weight:700}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-regexp{color:#f0f}.hljs-meta{color:#fff;font-weight:bolder} \ No newline at end of file diff --git a/skills/baoyu-markdown-to-html/scripts/md/constants.ts b/skills/baoyu-markdown-to-html/scripts/md/constants.ts new file mode 100644 index 0000000..2edd803 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/constants.ts @@ -0,0 +1,84 @@ +import type { StyleConfig } from "./types.js"; + +export const FONT_FAMILY_MAP: Record = { + sans: `-apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif`, + serif: `Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif`, + "serif-cjk": `"Source Han Serif SC", "Noto Serif CJK SC", "Source Han Serif CN", STSong, SimSun, serif`, + mono: `Menlo, Monaco, 'Courier New', monospace`, +}; + +export const FONT_SIZE_OPTIONS = ["14px", "15px", "16px", "17px", "18px"]; + +export const COLOR_PRESETS: Record = { + blue: "#0F4C81", + green: "#009874", + vermilion: "#FA5151", + yellow: "#FECE00", + purple: "#92617E", + sky: "#55C9EA", + rose: "#B76E79", + olive: "#556B2F", + black: "#333333", + gray: "#A9A9A9", + pink: "#FFB7C5", + red: "#A93226", + orange: "#D97757", +}; + +export const CODE_BLOCK_THEMES = [ + "1c-light", "a11y-dark", "a11y-light", "agate", "an-old-hope", + "androidstudio", "arduino-light", "arta", "ascetic", + "atom-one-dark-reasonable", "atom-one-dark", "atom-one-light", + "brown-paper", "codepen-embed", "color-brewer", "dark", "default", + "devibeans", "docco", "far", "felipec", "foundation", + "github-dark-dimmed", "github-dark", "github", "gml", "googlecode", + "gradient-dark", "gradient-light", "grayscale", "hybrid", "idea", + "intellij-light", "ir-black", "isbl-editor-dark", "isbl-editor-light", + "kimbie-dark", "kimbie-light", "lightfair", "lioshi", "magula", + "mono-blue", "monokai-sublime", "monokai", "night-owl", "nnfx-dark", + "nnfx-light", "nord", "obsidian", "panda-syntax-dark", + "panda-syntax-light", "paraiso-dark", "paraiso-light", "pojoaque", + "purebasic", "qtcreator-dark", "qtcreator-light", "rainbow", "routeros", + "school-book", "shades-of-purple", "srcery", "stackoverflow-dark", + "stackoverflow-light", "sunburst", "tokyo-night-dark", "tokyo-night-light", + "tomorrow-night-blue", "tomorrow-night-bright", "vs", "vs2015", "xcode", + "xt256", +]; + +export const DEFAULT_STYLE: StyleConfig = { + primaryColor: "#0F4C81", + fontFamily: FONT_FAMILY_MAP.sans!, + fontSize: "16px", + foreground: "0 0% 3.9%", + blockquoteBackground: "#f7f7f7", + accentColor: "#6B7280", + containerBg: "transparent", +}; + +export const THEME_STYLE_DEFAULTS: Record> = { + default: { + primaryColor: COLOR_PRESETS.blue, + }, + grace: { + primaryColor: COLOR_PRESETS.purple, + }, + simple: { + primaryColor: COLOR_PRESETS.green, + }, + modern: { + primaryColor: COLOR_PRESETS.orange, + accentColor: "#E4B1A0", + containerBg: "rgba(250, 249, 245, 1)", + fontFamily: FONT_FAMILY_MAP.sans, + fontSize: "15px", + blockquoteBackground: "rgba(255, 255, 255, 0.6)", + }, +}; + +export const macCodeSvg = ` + + + + + +`.trim(); diff --git a/skills/baoyu-markdown-to-html/scripts/md/extend-config.ts b/skills/baoyu-markdown-to-html/scripts/md/extend-config.ts new file mode 100644 index 0000000..e377233 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/extend-config.ts @@ -0,0 +1,53 @@ +import fs from "node:fs"; +import { homedir } from "node:os"; +import path from "node:path"; +import type { ExtendConfig } from "./types.js"; + +function extractYamlFrontMatter(content: string): string | null { + const match = content.match(/^---\s*\n([\s\S]*?)\n---\s*$/m); + return match ? match[1]! : null; +} + +function parseExtendYaml(yaml: string): Partial { + const config: Partial = {}; + for (const line of yaml.split("\n")) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const colonIdx = trimmed.indexOf(":"); + if (colonIdx < 0) continue; + const key = trimmed.slice(0, colonIdx).trim(); + let value = trimmed.slice(colonIdx + 1).trim().replace(/^['"]|['"]$/g, ""); + if (value === "null" || value === "") continue; + + if (key === "default_theme") config.default_theme = value; + else if (key === "default_color") config.default_color = value; + else if (key === "default_font_family") config.default_font_family = value; + else if (key === "default_font_size") config.default_font_size = value.endsWith("px") ? value : `${value}px`; + else if (key === "default_code_theme") config.default_code_theme = value; + else if (key === "mac_code_block") config.mac_code_block = value === "true"; + else if (key === "show_line_number") config.show_line_number = value === "true"; + else if (key === "cite") config.cite = value === "true"; + else if (key === "count") config.count = value === "true"; + else if (key === "legend") config.legend = value; + else if (key === "keep_title") config.keep_title = value === "true"; + } + return config; +} + +export function loadExtendConfig(): Partial { + const paths = [ + path.join(process.cwd(), ".baoyu-skills", "baoyu-markdown-to-html", "EXTEND.md"), + path.join(homedir(), ".baoyu-skills", "baoyu-markdown-to-html", "EXTEND.md"), + ]; + for (const p of paths) { + try { + const content = fs.readFileSync(p, "utf-8"); + const yaml = extractYamlFrontMatter(content); + if (!yaml) continue; + return parseExtendYaml(yaml); + } catch { + continue; + } + } + return {}; +} diff --git a/skills/baoyu-markdown-to-html/scripts/md/html-builder.ts b/skills/baoyu-markdown-to-html/scripts/md/html-builder.ts new file mode 100644 index 0000000..3ca61a0 --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/html-builder.ts @@ -0,0 +1,142 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import type { StyleConfig, HtmlDocumentMeta } from "./types.js"; +import { DEFAULT_STYLE } from "./constants.js"; + +const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url)); +const CODE_THEMES_DIR = path.resolve(SCRIPT_DIR, "code-themes"); + +export function buildCss(baseCss: string, themeCss: string, style: StyleConfig = DEFAULT_STYLE): string { + const variables = ` +:root { + --md-primary-color: ${style.primaryColor}; + --md-font-family: ${style.fontFamily}; + --md-font-size: ${style.fontSize}; + --foreground: ${style.foreground}; + --blockquote-background: ${style.blockquoteBackground}; + --md-accent-color: ${style.accentColor}; + --md-container-bg: ${style.containerBg}; +} + +body { + margin: 0; + padding: 24px; + background: #ffffff; +} + +#output { + max-width: 860px; + margin: 0 auto; +} +`.trim(); + + return [variables, baseCss, themeCss].join("\n\n"); +} + +export function loadCodeThemeCss(themeName: string): string { + const filePath = path.join(CODE_THEMES_DIR, `${themeName}.min.css`); + try { + return fs.readFileSync(filePath, "utf-8"); + } catch { + console.error(`Code theme CSS not found: ${filePath}`); + return ""; + } +} + +export function buildHtmlDocument(meta: HtmlDocumentMeta, css: string, html: string, codeThemeCss?: string): string { + const lines = [ + "", + "", + "", + ' ', + ' ', + ` ${meta.title}`, + ]; + if (meta.author) { + lines.push(` `); + } + if (meta.description) { + lines.push(` `); + } + lines.push(` `); + if (codeThemeCss) { + lines.push(` `); + } + lines.push( + "", + "", + '
', + html, + "
", + "", + "" + ); + return lines.join("\n"); +} + +export async function inlineCss(html: string): Promise { + try { + const { default: juice } = await import("juice"); + return juice(html, { + inlinePseudoElements: true, + preserveImportant: true, + resolveCSSVariables: false, + }); + } catch (error) { + const detail = error instanceof Error ? error.message : String(error); + throw new Error( + `Missing dependency "juice" for CSS inlining. Install it first (e.g. "bun add juice" or "npm add juice"). Original error: ${detail}` + ); + } +} + +export function normalizeCssText(cssText: string, style: StyleConfig = DEFAULT_STYLE): string { + return cssText + .replace(/var\(--md-primary-color\)/g, style.primaryColor) + .replace(/var\(--md-font-family\)/g, style.fontFamily) + .replace(/var\(--md-font-size\)/g, style.fontSize) + .replace(/var\(--blockquote-background\)/g, style.blockquoteBackground) + .replace(/var\(--md-accent-color\)/g, style.accentColor) + .replace(/var\(--md-container-bg\)/g, style.containerBg) + .replace(/hsl\(var\(--foreground\)\)/g, "#3f3f3f") + .replace(/--md-primary-color:\s*[^;"']+;?/g, "") + .replace(/--md-font-family:\s*[^;"']+;?/g, "") + .replace(/--md-font-size:\s*[^;"']+;?/g, "") + .replace(/--blockquote-background:\s*[^;"']+;?/g, "") + .replace(/--md-accent-color:\s*[^;"']+;?/g, "") + .replace(/--md-container-bg:\s*[^;"']+;?/g, "") + .replace(/--foreground:\s*[^;"']+;?/g, ""); +} + +export function normalizeInlineCss(html: string, style: StyleConfig = DEFAULT_STYLE): string { + let output = html; + output = output.replace( + /]*)>([\s\S]*?)<\/style>/gi, + (_match, attrs: string, cssText: string) => + `${normalizeCssText(cssText, style)}` + ); + output = output.replace( + /style="([^"]*)"/gi, + (_match, cssText: string) => `style="${normalizeCssText(cssText, style)}"` + ); + output = output.replace( + /style='([^']*)'/gi, + (_match, cssText: string) => `style='${normalizeCssText(cssText, style)}'` + ); + return output; +} + +export function modifyHtmlStructure(htmlString: string): string { + let output = htmlString; + const pattern = + /]*)>([\s\S]*?)(|)<\/li>/i; + while (pattern.test(output)) { + output = output.replace(pattern, "$2$3"); + } + return output; +} + +export function removeFirstHeading(html: string): string { + return html.replace(/]*>[\s\S]*?<\/h[12]>/, ""); +} diff --git a/skills/baoyu-markdown-to-html/scripts/md/render.ts b/skills/baoyu-markdown-to-html/scripts/md/render.ts index 13d56ed..840dc3e 100644 --- a/skills/baoyu-markdown-to-html/scripts/md/render.ts +++ b/skills/baoyu-markdown-to-html/scripts/md/render.ts @@ -1,874 +1,21 @@ #!/usr/bin/env npx tsx import fs from "node:fs"; -import { homedir } from "node:os"; import path from "node:path"; -import { fileURLToPath } from "node:url"; -import frontMatter from "front-matter"; -import hljs from "highlight.js/lib/core"; -import { marked, type RendererObject, type Tokens } from "marked"; -import readingTime, { type ReadTimeResults } from "reading-time"; -import { unified } from "unified"; -import remarkParse from "remark-parse"; -import remarkCjkFriendly from "remark-cjk-friendly"; -import remarkStringify from "remark-stringify"; - +import type { StyleConfig, HtmlDocumentMeta } from "./types.js"; +import { DEFAULT_STYLE, THEME_STYLE_DEFAULTS } from "./constants.js"; +import { loadThemeCss, normalizeThemeCss } from "./themes.js"; +import { parseArgs, printUsage } from "./cli.js"; +import { initRenderer, renderMarkdown, postProcessHtml } from "./renderer.js"; import { - markedAlert, - markedFootnotes, - markedInfographic, - markedMarkup, - markedPlantUML, - markedRuby, - markedSlider, - markedToc, - MDKatex, -} from "./extensions/index.js"; -import { - COMMON_LANGUAGES, - highlightAndFormatCode, -} from "./utils/languages.js"; - -type ThemeName = string; - -const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url)); -const THEME_DIR = path.resolve(SCRIPT_DIR, "themes"); -const EXTERNAL_THEME_CONFIG_PATH = - process.env.MD_THEME_CONFIG_PATH - || "/Users/jimliu/GitHub/md/packages/shared/src/configs/theme.ts"; -const EXTERNAL_THEME_DIR = - process.env.MD_THEME_DIR - || path.resolve(path.dirname(EXTERNAL_THEME_CONFIG_PATH), "theme-css"); -const FALLBACK_THEMES: ThemeName[] = ["default", "grace", "simple"]; - -const FONT_FAMILY_MAP: Record = { - sans: `-apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif`, - serif: `Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif`, - "serif-cjk": `"Source Han Serif SC", "Noto Serif CJK SC", "Source Han Serif CN", STSong, SimSun, serif`, - mono: `Menlo, Monaco, 'Courier New', monospace`, -}; - -const FONT_SIZE_OPTIONS = ["14px", "15px", "16px", "17px", "18px"]; - -const COLOR_PRESETS: Record = { - blue: "#0F4C81", - green: "#009874", - vermilion: "#FA5151", - yellow: "#FECE00", - purple: "#92617E", - sky: "#55C9EA", - rose: "#B76E79", - olive: "#556B2F", - black: "#333333", - gray: "#A9A9A9", - pink: "#FFB7C5", - red: "#A93226", - orange: "#D97757", -}; - -const CODE_BLOCK_THEMES = [ - "1c-light", "a11y-dark", "a11y-light", "agate", "an-old-hope", - "androidstudio", "arduino-light", "arta", "ascetic", - "atom-one-dark-reasonable", "atom-one-dark", "atom-one-light", - "brown-paper", "codepen-embed", "color-brewer", "dark", "default", - "devibeans", "docco", "far", "felipec", "foundation", - "github-dark-dimmed", "github-dark", "github", "gml", "googlecode", - "gradient-dark", "gradient-light", "grayscale", "hybrid", "idea", - "intellij-light", "ir-black", "isbl-editor-dark", "isbl-editor-light", - "kimbie-dark", "kimbie-light", "lightfair", "lioshi", "magula", - "mono-blue", "monokai-sublime", "monokai", "night-owl", "nnfx-dark", - "nnfx-light", "nord", "obsidian", "panda-syntax-dark", - "panda-syntax-light", "paraiso-dark", "paraiso-light", "pojoaque", - "purebasic", "qtcreator-dark", "qtcreator-light", "rainbow", "routeros", - "school-book", "shades-of-purple", "srcery", "stackoverflow-dark", - "stackoverflow-light", "sunburst", "tokyo-night-dark", "tokyo-night-light", - "tomorrow-night-blue", "tomorrow-night-bright", "vs", "vs2015", "xcode", - "xt256", -]; - -const HLJS_CDN_BASE = "https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/npm/highlightjs/11.11.1"; - -interface StyleConfig { - primaryColor: string; - fontFamily: string; - fontSize: string; - foreground: string; - blockquoteBackground: string; - accentColor: string; - containerBg: string; -} - -const DEFAULT_STYLE: StyleConfig = { - primaryColor: "#0F4C81", - fontFamily: FONT_FAMILY_MAP.sans!, - fontSize: "16px", - foreground: "0 0% 3.9%", - blockquoteBackground: "#f7f7f7", - accentColor: "#6B7280", - containerBg: "transparent", -}; - -const THEME_STYLE_DEFAULTS: Record> = { - default: { - primaryColor: COLOR_PRESETS.blue, - }, - grace: { - primaryColor: COLOR_PRESETS.purple, - }, - simple: { - primaryColor: COLOR_PRESETS.green, - }, - modern: { - primaryColor: COLOR_PRESETS.orange, - accentColor: "#E4B1A0", - containerBg: "rgba(250, 249, 245, 1)", - fontFamily: FONT_FAMILY_MAP.sans, - fontSize: "15px", - blockquoteBackground: "rgba(255, 255, 255, 0.6)", - }, -}; - -Object.entries(COMMON_LANGUAGES).forEach(([name, lang]) => { - hljs.registerLanguage(name, lang); -}); - -export { hljs }; - -function stripOutputScope(cssContent: string): string { - let css = cssContent; - css = css.replace(/#output\s*\{/g, "body {"); - css = css.replace(/#output\s+/g, ""); - css = css.replace(/^#output\s*/gm, ""); - return css; -} - -function discoverThemesFromDir(dir: string): string[] { - if (!fs.existsSync(dir)) { - return []; - } - return fs - .readdirSync(dir) - .filter((name) => name.endsWith(".css")) - .map((name) => name.replace(/\.css$/i, "")) - .filter((name) => name.toLowerCase() !== "base"); -} - -function readThemeNamesFromConfig(configPath: string): string[] { - if (!fs.existsSync(configPath)) { - return []; - } - const content = fs.readFileSync(configPath, "utf-8"); - const match = content.match(/themeOptionsMap\s*=\s*\{([\s\S]*?)\n\}/); - if (!match) { - return []; - } - return Array.from(match[1].matchAll(/^\s*([a-zA-Z0-9_-]+)\s*:/gm)).map( - (item) => item[1]! - ); -} - -function resolveThemeNames(): ThemeName[] { - const localThemes = discoverThemesFromDir(THEME_DIR); - const externalThemes = discoverThemesFromDir(EXTERNAL_THEME_DIR); - const configThemes = readThemeNamesFromConfig(EXTERNAL_THEME_CONFIG_PATH); - const combined = new Set([ - ...localThemes, - ...externalThemes, - ...configThemes, - ]); - const resolved = Array.from(combined).filter((name) => - fs.existsSync(path.join(THEME_DIR, `${name}.css`)) - || fs.existsSync(path.join(EXTERNAL_THEME_DIR, `${name}.css`)) - ); - return resolved.length ? resolved : FALLBACK_THEMES; -} - -const THEME_NAMES: ThemeName[] = resolveThemeNames(); - -marked.setOptions({ - breaks: true, -}); -marked.use(markedSlider()); - -interface IOpts { - legend?: string; - citeStatus?: boolean; - countStatus?: boolean; - isMacCodeBlock?: boolean; - isShowLineNumber?: boolean; - themeMode?: "light" | "dark"; -} - -interface RendererAPI { - reset: (newOpts: Partial) => void; - setOptions: (newOpts: Partial) => void; - getOpts: () => IOpts; - parseFrontMatterAndContent: (markdown: string) => { - yamlData: Record; - markdownContent: string; - readingTime: ReadTimeResults; - }; - buildReadingTime: (reading: ReadTimeResults) => string; - buildFootnotes: () => string; - buildAddition: () => string; - createContainer: (html: string) => string; -} - -interface ParseResult { - yamlData: Record; - markdownContent: string; - readingTime: ReadTimeResults; -} - -function escapeHtml(text: string): string { - return text - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'") - .replace(/`/g, "`"); -} - -function buildAddition(): string { - return ` - - `; -} - -function buildFootnoteArray(footnotes: [number, string, string][]): string { - return footnotes - .map(([index, title, link]) => - link === title - ? `[${index}]: ${title}
` - : `[${index}] ${title}: ${link}
` - ) - .join("\n"); -} - -function transform(legend: string, text: string | null, title: string | null): string { - const options = legend.split("-"); - for (const option of options) { - if (option === "alt" && text) { - return text; - } - if (option === "title" && title) { - return title; - } - } - return ""; -} - -const macCodeSvg = ` - - - - - -`.trim(); - -function parseFrontMatterAndContent(markdownText: string): ParseResult { - try { - const parsed = frontMatter(markdownText); - const yamlData = parsed.attributes; - const markdownContent = parsed.body; - - const readingTimeResult = readingTime(markdownContent); - - return { - yamlData: yamlData as Record, - markdownContent, - readingTime: readingTimeResult, - }; - } catch (error) { - console.error("Error parsing front-matter:", error); - return { - yamlData: {}, - markdownContent: markdownText, - readingTime: readingTime(markdownText), - }; - } -} - -export function initRenderer(opts: IOpts = {}): RendererAPI { - const footnotes: [number, string, string][] = []; - let footnoteIndex = 0; - let codeIndex = 0; - const listOrderedStack: boolean[] = []; - const listCounters: number[] = []; - const isBrowser = typeof window !== "undefined"; - - function getOpts(): IOpts { - return opts; - } - - function styledContent(styleLabel: string, content: string, tagName?: string): string { - const tag = tagName ?? styleLabel; - const className = `${styleLabel.replace(/_/g, "-")}`; - const headingAttr = /^h\d$/.test(tag) ? " data-heading=\"true\"" : ""; - return `<${tag} class="${className}"${headingAttr}>${content}`; - } - - function addFootnote(title: string, link: string): number { - const existingFootnote = footnotes.find(([, , existingLink]) => existingLink === link); - if (existingFootnote) { - return existingFootnote[0]; - } - - footnotes.push([++footnoteIndex, title, link]); - return footnoteIndex; - } - - function reset(newOpts: Partial): void { - footnotes.length = 0; - footnoteIndex = 0; - setOptions(newOpts); - } - - function setOptions(newOpts: Partial): void { - opts = { ...opts, ...newOpts }; - marked.use(markedAlert()); - if (isBrowser) { - marked.use(MDKatex({ nonStandard: true }, true)); - } - marked.use(markedMarkup()); - marked.use(markedInfographic({ themeMode: opts.themeMode })); - } - - function buildReadingTime(readingTimeResult: ReadTimeResults): string { - if (!opts.countStatus) { - return ""; - } - if (!readingTimeResult.words) { - return ""; - } - return ` -
-

字数 ${readingTimeResult?.words},阅读大约需 ${Math.ceil(readingTimeResult?.minutes)} 分钟

-
- `; - } - - const buildFootnotes = () => { - if (!footnotes.length) { - return ""; - } - - return ( - styledContent("h4", "引用链接") - + styledContent("footnotes", buildFootnoteArray(footnotes), "p") - ); - }; - - const renderer: RendererObject = { - heading({ tokens, depth }: Tokens.Heading) { - const text = this.parser.parseInline(tokens); - const tag = `h${depth}`; - return styledContent(tag, text); - }, - - paragraph({ tokens }: Tokens.Paragraph): string { - const text = this.parser.parseInline(tokens); - const isFigureImage = text.includes(" { - const windowRef = typeof window !== "undefined" ? (window as any) : undefined; - if (windowRef && windowRef.mermaid) { - const mermaid = windowRef.mermaid; - await mermaid.run(); - } else { - const mermaid = await import("mermaid"); - await mermaid.default.run(); - } - }, 0) as any as number; - } - return `
${text}
`; - } - const langText = lang.split(" ")[0]; - const isLanguageRegistered = hljs.getLanguage(langText); - const language = isLanguageRegistered ? langText : "plaintext"; - - const highlighted = highlightAndFormatCode( - text, - language, - hljs, - !!opts.isShowLineNumber - ); - - const span = `${macCodeSvg}`; - let pendingAttr = ""; - if (!isLanguageRegistered && langText !== "plaintext") { - const escapedText = text.replace(/"/g, """); - pendingAttr = ` data-language-pending="${langText}" data-raw-code="${escapedText}" data-show-line-number="${opts.isShowLineNumber}"`; - } - const code = `${highlighted}`; - - return `
${span}${code}
`; - }, - - codespan({ text }: Tokens.Codespan): string { - const escapedText = escapeHtml(text); - return styledContent("codespan", escapedText, "code"); - }, - - list({ ordered, items, start = 1 }: Tokens.List) { - listOrderedStack.push(ordered); - listCounters.push(Number(start)); - - const html = items.map((item) => this.listitem(item)).join(""); - - listOrderedStack.pop(); - listCounters.pop(); - - return styledContent(ordered ? "ol" : "ul", html); - }, - - listitem(token: Tokens.ListItem) { - const ordered = listOrderedStack[listOrderedStack.length - 1]; - const idx = listCounters[listCounters.length - 1]!; - - listCounters[listCounters.length - 1] = idx + 1; - - const prefix = ordered ? `${idx}. ` : "• "; - - let content: string; - try { - content = this.parser.parseInline(token.tokens); - } catch { - content = this.parser - .parse(token.tokens) - .replace(/^]*)?>([\s\S]*?)<\/p>/, "$1"); - } - - return styledContent("listitem", `${prefix}${content}`, "li"); - }, - - image({ href, title, text }: Tokens.Image): string { - const newText = opts.legend ? transform(opts.legend, text, title) : ""; - const subText = newText ? styledContent("figcaption", newText) : ""; - const titleAttr = title ? ` title="${title}"` : ""; - return `
${text}${subText}
`; - }, - - link({ href, title, text, tokens }: Tokens.Link): string { - const parsedText = this.parser.parseInline(tokens); - if (/^https?:\/\/mp\.weixin\.qq\.com/.test(href)) { - return `${parsedText}`; - } - if (href === text) { - return parsedText; - } - if (opts.citeStatus) { - const ref = addFootnote(title || text, href); - return `${parsedText}[${ref}]`; - } - return `${parsedText}`; - }, - - strong({ tokens }: Tokens.Strong): string { - return styledContent("strong", this.parser.parseInline(tokens)); - }, - - em({ tokens }: Tokens.Em): string { - return styledContent("em", this.parser.parseInline(tokens)); - }, - - table({ header, rows }: Tokens.Table): string { - const headerRow = header - .map((cell) => { - const text = this.parser.parseInline(cell.tokens); - return styledContent("th", text); - }) - .join(""); - const body = rows - .map((row) => { - const rowContent = row.map((cell) => this.tablecell(cell)).join(""); - return styledContent("tr", rowContent); - }) - .join(""); - return ` -
- - ${headerRow} - ${body} -
-
- `; - }, - - tablecell(token: Tokens.TableCell): string { - const text = this.parser.parseInline(token.tokens); - return styledContent("td", text); - }, - - hr(_: Tokens.Hr): string { - return styledContent("hr", ""); - }, - }; - - marked.use({ renderer }); - marked.use(markedMarkup()); - marked.use(markedToc()); - marked.use(markedSlider()); - marked.use(markedAlert({})); - if (isBrowser) { - marked.use(MDKatex({ nonStandard: true }, true)); - } - marked.use(markedFootnotes()); - marked.use( - markedPlantUML({ - inlineSvg: isBrowser, - }) - ); - marked.use(markedInfographic()); - marked.use(markedRuby()); - - return { - buildAddition, - buildFootnotes, - setOptions, - reset, - parseFrontMatterAndContent, - buildReadingTime, - createContainer(content: string) { - return styledContent("container", content, "section"); - }, - getOpts, - }; -} - -function printUsage(): void { - console.error( - [ - "Usage:", - " npx tsx src/md/render.ts [options]", - "", - "Options:", - ` --theme Theme (${THEME_NAMES.join(", ")})`, - ` --color Primary color: ${Object.keys(COLOR_PRESETS).join(", ")}, or hex`, - ` --font-family Font: ${Object.keys(FONT_FAMILY_MAP).join(", ")}, or CSS value`, - ` --font-size Font size: ${FONT_SIZE_OPTIONS.join(", ")} (default: 16px)`, - ` --code-theme Code highlight theme (default: github)`, - ` --mac-code-block Show Mac-style code block header`, - ` --line-number Show line numbers in code blocks`, - ` --cite Enable footnote citations`, - ` --count Show reading time / word count`, - ` --legend Image caption: title-alt, alt-title, title, alt, none`, - ` --keep-title Keep the first heading in output`, - ].join("\n") - ); -} - -function parseArgValue(argv: string[], i: number, flag: string): string | null { - const arg = argv[i]!; - if (arg.includes("=")) { - return arg.slice(flag.length + 1); - } - const next = argv[i + 1]; - return next ?? null; -} - -function resolveFontFamily(value: string): string { - return FONT_FAMILY_MAP[value] ?? value; -} - -function resolveColor(value: string): string { - return COLOR_PRESETS[value] ?? value; -} - -function parseArgs(argv: string[]): CliOptions | null { - const ext = loadExtendConfig(); - - let inputPath = ""; - let theme: ThemeName = ext.default_theme ?? "default"; - let keepTitle = ext.keep_title ?? false; - let primaryColor: string | undefined = ext.default_color ? resolveColor(ext.default_color) : undefined; - let fontFamily: string | undefined = ext.default_font_family ? resolveFontFamily(ext.default_font_family) : undefined; - let fontSize: string | undefined = ext.default_font_size ?? undefined; - let codeTheme = ext.default_code_theme ?? "github"; - let isMacCodeBlock = ext.mac_code_block ?? true; - let isShowLineNumber = ext.show_line_number ?? false; - let citeStatus = ext.cite ?? false; - let countStatus = ext.count ?? false; - let legend = ext.legend ?? "alt"; - - for (let i = 0; i < argv.length; i += 1) { - const arg = argv[i]!; - - if (!arg.startsWith("--") && !inputPath) { - inputPath = arg; - continue; - } - - if (arg === "--help" || arg === "-h") { - return null; - } - - if (arg === "--keep-title") { keepTitle = true; continue; } - if (arg === "--mac-code-block") { isMacCodeBlock = true; continue; } - if (arg === "--no-mac-code-block") { isMacCodeBlock = false; continue; } - if (arg === "--line-number") { isShowLineNumber = true; continue; } - if (arg === "--cite") { citeStatus = true; continue; } - if (arg === "--count") { countStatus = true; continue; } - - if (arg === "--theme" || arg.startsWith("--theme=")) { - const val = parseArgValue(argv, i, "--theme"); - if (!val) { console.error("Missing value for --theme"); return null; } - theme = val as ThemeName; - if (!arg.includes("=")) i += 1; - continue; - } - - if (arg === "--color" || arg.startsWith("--color=")) { - const val = parseArgValue(argv, i, "--color"); - if (!val) { console.error("Missing value for --color"); return null; } - primaryColor = resolveColor(val); - if (!arg.includes("=")) i += 1; - continue; - } - - if (arg === "--font-family" || arg.startsWith("--font-family=")) { - const val = parseArgValue(argv, i, "--font-family"); - if (!val) { console.error("Missing value for --font-family"); return null; } - fontFamily = resolveFontFamily(val); - if (!arg.includes("=")) i += 1; - continue; - } - - if (arg === "--font-size" || arg.startsWith("--font-size=")) { - const val = parseArgValue(argv, i, "--font-size"); - if (!val) { console.error("Missing value for --font-size"); return null; } - fontSize = val.endsWith("px") ? val : `${val}px`; - if (!FONT_SIZE_OPTIONS.includes(fontSize)) { - console.error(`Invalid font size: ${fontSize}. Valid: ${FONT_SIZE_OPTIONS.join(", ")}`); - return null; - } - if (!arg.includes("=")) i += 1; - continue; - } - - if (arg === "--code-theme" || arg.startsWith("--code-theme=")) { - const val = parseArgValue(argv, i, "--code-theme"); - if (!val) { console.error("Missing value for --code-theme"); return null; } - codeTheme = val; - if (!CODE_BLOCK_THEMES.includes(codeTheme)) { - console.error(`Unknown code theme: ${codeTheme}`); - return null; - } - if (!arg.includes("=")) i += 1; - continue; - } - - if (arg === "--legend" || arg.startsWith("--legend=")) { - const val = parseArgValue(argv, i, "--legend"); - if (!val) { console.error("Missing value for --legend"); return null; } - const valid = ["title-alt", "alt-title", "title", "alt", "none"]; - if (!valid.includes(val)) { - console.error(`Invalid legend: ${val}. Valid: ${valid.join(", ")}`); - return null; - } - legend = val; - if (!arg.includes("=")) i += 1; - continue; - } - - console.error(`Unknown argument: ${arg}`); - return null; - } - - if (!inputPath) { - return null; - } - - if (!THEME_NAMES.includes(theme)) { - console.error(`Unknown theme: ${theme}`); - return null; - } - - return { - inputPath, theme, keepTitle, primaryColor, fontFamily, fontSize, - codeTheme, isMacCodeBlock, isShowLineNumber, citeStatus, countStatus, legend, - }; -} - -interface CliOptions { - inputPath: string; - theme: ThemeName; - keepTitle: boolean; - primaryColor?: string; - fontFamily?: string; - fontSize?: string; - codeTheme: string; - isMacCodeBlock: boolean; - isShowLineNumber: boolean; - citeStatus: boolean; - countStatus: boolean; - legend: string; -} - -interface ExtendConfig { - default_theme: string | null; - default_color: string | null; - default_font_family: string | null; - default_font_size: string | null; - default_code_theme: string | null; - mac_code_block: boolean | null; - show_line_number: boolean | null; - cite: boolean | null; - count: boolean | null; - legend: string | null; - keep_title: boolean | null; -} - -function extractYamlFrontMatter(content: string): string | null { - const match = content.match(/^---\s*\n([\s\S]*?)\n---\s*$/m); - return match ? match[1]! : null; -} - -function parseExtendYaml(yaml: string): Partial { - const config: Partial = {}; - for (const line of yaml.split("\n")) { - const trimmed = line.trim(); - if (!trimmed || trimmed.startsWith("#")) continue; - const colonIdx = trimmed.indexOf(":"); - if (colonIdx < 0) continue; - const key = trimmed.slice(0, colonIdx).trim(); - let value = trimmed.slice(colonIdx + 1).trim().replace(/^['"]|['"]$/g, ""); - if (value === "null" || value === "") continue; - - if (key === "default_theme") config.default_theme = value; - else if (key === "default_color") config.default_color = value; - else if (key === "default_font_family") config.default_font_family = value; - else if (key === "default_font_size") config.default_font_size = value.endsWith("px") ? value : `${value}px`; - else if (key === "default_code_theme") config.default_code_theme = value; - else if (key === "mac_code_block") config.mac_code_block = value === "true"; - else if (key === "show_line_number") config.show_line_number = value === "true"; - else if (key === "cite") config.cite = value === "true"; - else if (key === "count") config.count = value === "true"; - else if (key === "legend") config.legend = value; - else if (key === "keep_title") config.keep_title = value === "true"; - } - return config; -} - -function loadExtendConfig(): Partial { - const paths = [ - path.join(process.cwd(), ".baoyu-skills", "baoyu-markdown-to-html", "EXTEND.md"), - path.join(homedir(), ".baoyu-skills", "baoyu-markdown-to-html", "EXTEND.md"), - ]; - for (const p of paths) { - try { - const content = fs.readFileSync(p, "utf-8"); - const yaml = extractYamlFrontMatter(content); - if (!yaml) continue; - return parseExtendYaml(yaml); - } catch { - continue; - } - } - return {}; -} - -function preprocessCjkEmphasis(markdown: string): string { - const processor = unified() - .use(remarkParse) - .use(remarkCjkFriendly); - const tree = processor.parse(markdown); - const visit = (node: any, parent?: any, index?: number) => { - if (node.children) { - for (let i = 0; i < node.children.length; i++) { - visit(node.children[i], node, i); - } - } - if (node.type === "strong" && parent && typeof index === "number") { - const text = extractText(node); - parent.children[index] = { type: "html", value: `${text}` }; - } - if (node.type === "emphasis" && parent && typeof index === "number") { - const text = extractText(node); - parent.children[index] = { type: "html", value: `${text}` }; - } - }; - const extractText = (node: any): string => { - if (node.type === "text") return node.value; - if (node.children) return node.children.map(extractText).join(""); - return ""; - }; - visit(tree); - const stringify = unified().use(remarkStringify); - let result = stringify.stringify(tree); - result = result.replace(/&#x([0-9A-Fa-f]+);/g, (_, hex) => - String.fromCodePoint(parseInt(hex, 16)) - ); - return result; -} - -function renderMarkdown(raw: string, renderer: RendererAPI): { - html: string; - readingTime: ReadTimeResults; -} { - const preprocessed = preprocessCjkEmphasis(raw); - const { markdownContent, readingTime: readingTimeResult } = - renderer.parseFrontMatterAndContent(preprocessed); - - const html = marked.parse(markdownContent) as string; - - return { html, readingTime: readingTimeResult }; -} - -function postProcessHtml( - baseHtml: string, - reading: ReadTimeResults, - renderer: RendererAPI -): string { - let html = baseHtml; - html = renderer.buildReadingTime(reading) + html; - html += renderer.buildFootnotes(); - html += renderer.buildAddition(); - html += ` - - `; - html += ` - - `; - return renderer.createContainer(html); -} + buildCss, + loadCodeThemeCss, + buildHtmlDocument, + inlineCss, + normalizeInlineCss, + modifyHtmlStructure, + removeFirstHeading, +} from "./html-builder.js"; function formatTimestamp(date = new Date()): string { const pad = (value: number) => String(value).padStart(2, "0"); @@ -877,198 +24,6 @@ function formatTimestamp(date = new Date()): string { )}${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`; } -function ensureMarkdownPath(inputPath: string): void { - if (!inputPath.toLowerCase().endsWith(".md")) { - throw new Error("Input file must end with .md"); - } -} - -function loadThemeCss(theme: ThemeName): { - baseCss: string; - themeCss: string; -} { - const basePathCandidates = [ - path.join(THEME_DIR, "base.css"), - path.join(EXTERNAL_THEME_DIR, "base.css"), - ]; - const themePathCandidates = [ - path.join(THEME_DIR, `${theme}.css`), - path.join(EXTERNAL_THEME_DIR, `${theme}.css`), - ]; - const basePath = basePathCandidates.find((candidate) => - fs.existsSync(candidate) - ); - const themePath = themePathCandidates.find((candidate) => - fs.existsSync(candidate) - ); - - if (!basePath) { - throw new Error( - `Missing base CSS. Checked: ${basePathCandidates.join(", ")}` - ); - } - - if (!themePath) { - throw new Error( - `Missing theme CSS for "${theme}". Checked: ${themePathCandidates.join(", ")}` - ); - } - - return { - baseCss: fs.readFileSync(basePath, "utf-8"), - themeCss: fs.readFileSync(themePath, "utf-8"), - }; -} - -function buildCss(baseCss: string, themeCss: string, style: StyleConfig = DEFAULT_STYLE): string { - const variables = ` -:root { - --md-primary-color: ${style.primaryColor}; - --md-font-family: ${style.fontFamily}; - --md-font-size: ${style.fontSize}; - --foreground: ${style.foreground}; - --blockquote-background: ${style.blockquoteBackground}; - --md-accent-color: ${style.accentColor}; - --md-container-bg: ${style.containerBg}; -} - -body { - margin: 0; - padding: 24px; - background: #ffffff; -} - -#output { - max-width: 860px; - margin: 0 auto; -} -`.trim(); - - return [variables, baseCss, themeCss].join("\n\n"); -} - -function normalizeThemeCss(css: string): string { - return stripOutputScope(css); -} - -async function fetchCodeThemeCss(themeName: string): Promise { - const url = `${HLJS_CDN_BASE}/styles/${themeName}.min.css`; - try { - const res = await fetch(url); - if (!res.ok) { - console.error(`Failed to fetch code theme CSS: ${res.status} ${url}`); - return ""; - } - return await res.text(); - } catch (error) { - console.error(`Failed to fetch code theme CSS from ${url}:`, error); - return ""; - } -} - -interface HtmlDocumentMeta { - title: string; - author?: string; - description?: string; -} - -function buildHtmlDocument(meta: HtmlDocumentMeta, css: string, html: string, codeThemeCss?: string): string { - const lines = [ - "", - "", - "", - ' ', - ' ', - ` ${meta.title}`, - ]; - if (meta.author) { - lines.push(` `); - } - if (meta.description) { - lines.push(` `); - } - lines.push(` `); - if (codeThemeCss) { - lines.push(` `); - } - lines.push( - "", - "", - '
', - html, - "
", - "", - "" - ); - return lines.join("\n"); -} - -async function inlineCss(html: string): Promise { - try { - const { default: juice } = await import("juice"); - return juice(html, { - inlinePseudoElements: true, - preserveImportant: true, - resolveCSSVariables: false, - }); - } catch (error) { - const detail = error instanceof Error ? error.message : String(error); - throw new Error( - `Missing dependency "juice" for CSS inlining. Install it first (e.g. "bun add juice" or "npm add juice"). Original error: ${detail}` - ); - } -} - -function normalizeCssText(cssText: string, style: StyleConfig = DEFAULT_STYLE): string { - return cssText - .replace(/var\(--md-primary-color\)/g, style.primaryColor) - .replace(/var\(--md-font-family\)/g, style.fontFamily) - .replace(/var\(--md-font-size\)/g, style.fontSize) - .replace(/var\(--blockquote-background\)/g, style.blockquoteBackground) - .replace(/var\(--md-accent-color\)/g, style.accentColor) - .replace(/var\(--md-container-bg\)/g, style.containerBg) - .replace(/hsl\(var\(--foreground\)\)/g, "#3f3f3f") - .replace(/--md-primary-color:\s*[^;"']+;?/g, "") - .replace(/--md-font-family:\s*[^;"']+;?/g, "") - .replace(/--md-font-size:\s*[^;"']+;?/g, "") - .replace(/--blockquote-background:\s*[^;"']+;?/g, "") - .replace(/--md-accent-color:\s*[^;"']+;?/g, "") - .replace(/--md-container-bg:\s*[^;"']+;?/g, "") - .replace(/--foreground:\s*[^;"']+;?/g, ""); -} - -function normalizeInlineCss(html: string, style: StyleConfig = DEFAULT_STYLE): string { - let output = html; - output = output.replace( - /]*)>([\s\S]*?)<\/style>/gi, - (_match, attrs: string, cssText: string) => - `${normalizeCssText(cssText, style)}` - ); - output = output.replace( - /style="([^"]*)"/gi, - (_match, cssText: string) => `style="${normalizeCssText(cssText, style)}"` - ); - output = output.replace( - /style='([^']*)'/gi, - (_match, cssText: string) => `style='${normalizeCssText(cssText, style)}'` - ); - return output; -} - -function modifyHtmlStructure(htmlString: string): string { - let output = htmlString; - const pattern = - /]*)>([\s\S]*?)(|)<\/li>/i; - while (pattern.test(output)) { - output = output.replace(pattern, "$2$3"); - } - return output; -} - -function removeFirstHeading(html: string): string { - return html.replace(/]*>[\s\S]*?<\/h[12]>/, ""); -} - async function main(): Promise { const options = parseArgs(process.argv.slice(2)); if (!options) { @@ -1077,7 +32,10 @@ async function main(): Promise { } const inputPath = path.resolve(process.cwd(), options.inputPath); - ensureMarkdownPath(inputPath); + if (!inputPath.toLowerCase().endsWith(".md")) { + console.error("Input file must end with .md"); + process.exit(1); + } if (!fs.existsSync(inputPath)) { console.error(`File not found: ${inputPath}`); @@ -1100,8 +58,7 @@ async function main(): Promise { const { baseCss, themeCss } = loadThemeCss(options.theme); const css = normalizeThemeCss(buildCss(baseCss, themeCss, style)); - - const codeThemeCss = await fetchCodeThemeCss(options.codeTheme); + const codeThemeCss = loadCodeThemeCss(options.codeTheme); const markdown = fs.readFileSync(inputPath, "utf-8"); diff --git a/skills/baoyu-markdown-to-html/scripts/md/renderer.ts b/skills/baoyu-markdown-to-html/scripts/md/renderer.ts new file mode 100644 index 0000000..65fb0cb --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/renderer.ts @@ -0,0 +1,434 @@ +import frontMatter from "front-matter"; +import hljs from "highlight.js/lib/core"; +import { marked, type RendererObject, type Tokens } from "marked"; +import readingTime, { type ReadTimeResults } from "reading-time"; +import { unified } from "unified"; +import remarkParse from "remark-parse"; +import remarkCjkFriendly from "remark-cjk-friendly"; +import remarkStringify from "remark-stringify"; + +import { + markedAlert, + markedFootnotes, + markedInfographic, + markedMarkup, + markedPlantUML, + markedRuby, + markedSlider, + markedToc, + MDKatex, +} from "./extensions/index.js"; +import { + COMMON_LANGUAGES, + highlightAndFormatCode, +} from "./utils/languages.js"; +import { macCodeSvg } from "./constants.js"; +import type { IOpts, ParseResult, RendererAPI } from "./types.js"; + +Object.entries(COMMON_LANGUAGES).forEach(([name, lang]) => { + hljs.registerLanguage(name, lang); +}); + +export { hljs }; + +marked.setOptions({ + breaks: true, +}); +marked.use(markedSlider()); + +function escapeHtml(text: string): string { + return text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'") + .replace(/`/g, "`"); +} + +function buildAddition(): string { + return ` + + `; +} + +function buildFootnoteArray(footnotes: [number, string, string][]): string { + return footnotes + .map(([index, title, link]) => + link === title + ? `[${index}]: ${title}
` + : `[${index}] ${title}: ${link}
` + ) + .join("\n"); +} + +function transform(legend: string, text: string | null, title: string | null): string { + const options = legend.split("-"); + for (const option of options) { + if (option === "alt" && text) { + return text; + } + if (option === "title" && title) { + return title; + } + } + return ""; +} + +function parseFrontMatterAndContent(markdownText: string): ParseResult { + try { + const parsed = frontMatter(markdownText); + const yamlData = parsed.attributes; + const markdownContent = parsed.body; + const readingTimeResult = readingTime(markdownContent); + return { + yamlData: yamlData as Record, + markdownContent, + readingTime: readingTimeResult, + }; + } catch (error) { + console.error("Error parsing front-matter:", error); + return { + yamlData: {}, + markdownContent: markdownText, + readingTime: readingTime(markdownText), + }; + } +} + +export function initRenderer(opts: IOpts = {}): RendererAPI { + const footnotes: [number, string, string][] = []; + let footnoteIndex = 0; + let codeIndex = 0; + const listOrderedStack: boolean[] = []; + const listCounters: number[] = []; + const isBrowser = typeof window !== "undefined"; + + function getOpts(): IOpts { + return opts; + } + + function styledContent(styleLabel: string, content: string, tagName?: string): string { + const tag = tagName ?? styleLabel; + const className = `${styleLabel.replace(/_/g, "-")}`; + const headingAttr = /^h\d$/.test(tag) ? " data-heading=\"true\"" : ""; + return `<${tag} class="${className}"${headingAttr}>${content}`; + } + + function addFootnote(title: string, link: string): number { + const existingFootnote = footnotes.find(([, , existingLink]) => existingLink === link); + if (existingFootnote) { + return existingFootnote[0]; + } + footnotes.push([++footnoteIndex, title, link]); + return footnoteIndex; + } + + function reset(newOpts: Partial): void { + footnotes.length = 0; + footnoteIndex = 0; + setOptions(newOpts); + } + + function setOptions(newOpts: Partial): void { + opts = { ...opts, ...newOpts }; + marked.use(markedAlert()); + if (isBrowser) { + marked.use(MDKatex({ nonStandard: true }, true)); + } + marked.use(markedMarkup()); + marked.use(markedInfographic({ themeMode: opts.themeMode })); + } + + function buildReadingTime(readingTimeResult: ReadTimeResults): string { + if (!opts.countStatus) { + return ""; + } + if (!readingTimeResult.words) { + return ""; + } + return ` +
+

字数 ${readingTimeResult?.words},阅读大约需 ${Math.ceil(readingTimeResult?.minutes)} 分钟

+
+ `; + } + + const buildFootnotes = () => { + if (!footnotes.length) { + return ""; + } + return ( + styledContent("h4", "引用链接") + + styledContent("footnotes", buildFootnoteArray(footnotes), "p") + ); + }; + + const renderer: RendererObject = { + heading({ tokens, depth }: Tokens.Heading) { + const text = this.parser.parseInline(tokens); + const tag = `h${depth}`; + return styledContent(tag, text); + }, + + paragraph({ tokens }: Tokens.Paragraph): string { + const text = this.parser.parseInline(tokens); + const isFigureImage = text.includes(" { + const windowRef = typeof window !== "undefined" ? (window as any) : undefined; + if (windowRef && windowRef.mermaid) { + const mermaid = windowRef.mermaid; + await mermaid.run(); + } else { + const mermaid = await import("mermaid"); + await mermaid.default.run(); + } + }, 0) as any as number; + } + return `
${text}
`; + } + const langText = lang.split(" ")[0]; + const isLanguageRegistered = hljs.getLanguage(langText); + const language = isLanguageRegistered ? langText : "plaintext"; + + const highlighted = highlightAndFormatCode( + text, + language, + hljs, + !!opts.isShowLineNumber + ); + + const span = `${macCodeSvg}`; + let pendingAttr = ""; + if (!isLanguageRegistered && langText !== "plaintext") { + const escapedText = text.replace(/"/g, """); + pendingAttr = ` data-language-pending="${langText}" data-raw-code="${escapedText}" data-show-line-number="${opts.isShowLineNumber}"`; + } + const code = `${highlighted}`; + + return `
${span}${code}
`; + }, + + codespan({ text }: Tokens.Codespan): string { + const escapedText = escapeHtml(text); + return styledContent("codespan", escapedText, "code"); + }, + + list({ ordered, items, start = 1 }: Tokens.List) { + listOrderedStack.push(ordered); + listCounters.push(Number(start)); + const html = items.map((item) => this.listitem(item)).join(""); + listOrderedStack.pop(); + listCounters.pop(); + return styledContent(ordered ? "ol" : "ul", html); + }, + + listitem(token: Tokens.ListItem) { + const ordered = listOrderedStack[listOrderedStack.length - 1]; + const idx = listCounters[listCounters.length - 1]!; + listCounters[listCounters.length - 1] = idx + 1; + const prefix = ordered ? `${idx}. ` : "• "; + let content: string; + try { + content = this.parser.parseInline(token.tokens); + } catch { + content = this.parser + .parse(token.tokens) + .replace(/^]*)?>([\s\S]*?)<\/p>/, "$1"); + } + return styledContent("listitem", `${prefix}${content}`, "li"); + }, + + image({ href, title, text }: Tokens.Image): string { + const newText = opts.legend ? transform(opts.legend, text, title) : ""; + const subText = newText ? styledContent("figcaption", newText) : ""; + const titleAttr = title ? ` title="${title}"` : ""; + return `
${text}${subText}
`; + }, + + link({ href, title, text, tokens }: Tokens.Link): string { + const parsedText = this.parser.parseInline(tokens); + if (/^https?:\/\/mp\.weixin\.qq\.com/.test(href)) { + return `${parsedText}`; + } + if (href === text) { + return parsedText; + } + if (opts.citeStatus) { + const ref = addFootnote(title || text, href); + return `${parsedText}[${ref}]`; + } + return `${parsedText}`; + }, + + strong({ tokens }: Tokens.Strong): string { + return styledContent("strong", this.parser.parseInline(tokens)); + }, + + em({ tokens }: Tokens.Em): string { + return styledContent("em", this.parser.parseInline(tokens)); + }, + + table({ header, rows }: Tokens.Table): string { + const headerRow = header + .map((cell) => { + const text = this.parser.parseInline(cell.tokens); + return styledContent("th", text); + }) + .join(""); + const body = rows + .map((row) => { + const rowContent = row.map((cell) => this.tablecell(cell)).join(""); + return styledContent("tr", rowContent); + }) + .join(""); + return ` +
+ + ${headerRow} + ${body} +
+
+ `; + }, + + tablecell(token: Tokens.TableCell): string { + const text = this.parser.parseInline(token.tokens); + return styledContent("td", text); + }, + + hr(_: Tokens.Hr): string { + return styledContent("hr", ""); + }, + }; + + marked.use({ renderer }); + marked.use(markedMarkup()); + marked.use(markedToc()); + marked.use(markedSlider()); + marked.use(markedAlert({})); + if (isBrowser) { + marked.use(MDKatex({ nonStandard: true }, true)); + } + marked.use(markedFootnotes()); + marked.use( + markedPlantUML({ + inlineSvg: isBrowser, + }) + ); + marked.use(markedInfographic()); + marked.use(markedRuby()); + + return { + buildAddition, + buildFootnotes, + setOptions, + reset, + parseFrontMatterAndContent, + buildReadingTime, + createContainer(content: string) { + return styledContent("container", content, "section"); + }, + getOpts, + }; +} + +function preprocessCjkEmphasis(markdown: string): string { + const processor = unified() + .use(remarkParse) + .use(remarkCjkFriendly); + const tree = processor.parse(markdown); + const extractText = (node: any): string => { + if (node.type === "text") return node.value; + if (node.children) return node.children.map(extractText).join(""); + return ""; + }; + const visit = (node: any, parent?: any, index?: number) => { + if (node.children) { + for (let i = 0; i < node.children.length; i++) { + visit(node.children[i], node, i); + } + } + if (node.type === "strong" && parent && typeof index === "number") { + const text = extractText(node); + parent.children[index] = { type: "html", value: `${text}` }; + } + if (node.type === "emphasis" && parent && typeof index === "number") { + const text = extractText(node); + parent.children[index] = { type: "html", value: `${text}` }; + } + }; + visit(tree); + const stringify = unified().use(remarkStringify); + let result = stringify.stringify(tree); + result = result.replace(/&#x([0-9A-Fa-f]+);/g, (_, hex) => + String.fromCodePoint(parseInt(hex, 16)) + ); + return result; +} + +export function renderMarkdown(raw: string, renderer: RendererAPI): { + html: string; + readingTime: ReadTimeResults; +} { + const preprocessed = preprocessCjkEmphasis(raw); + const { markdownContent, readingTime: readingTimeResult } = + renderer.parseFrontMatterAndContent(preprocessed); + const html = marked.parse(markdownContent) as string; + return { html, readingTime: readingTimeResult }; +} + +export function postProcessHtml( + baseHtml: string, + reading: ReadTimeResults, + renderer: RendererAPI +): string { + let html = baseHtml; + html = renderer.buildReadingTime(reading) + html; + html += renderer.buildFootnotes(); + html += renderer.buildAddition(); + html += ` + + `; + html += ` + + `; + return renderer.createContainer(html); +} diff --git a/skills/baoyu-markdown-to-html/scripts/md/themes.ts b/skills/baoyu-markdown-to-html/scripts/md/themes.ts new file mode 100644 index 0000000..9c3dbeb --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/themes.ts @@ -0,0 +1,62 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import type { ThemeName } from "./types.js"; + +const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url)); +export const THEME_DIR = path.resolve(SCRIPT_DIR, "themes"); +const FALLBACK_THEMES: ThemeName[] = ["default", "grace", "simple"]; + +function stripOutputScope(cssContent: string): string { + let css = cssContent; + css = css.replace(/#output\s*\{/g, "body {"); + css = css.replace(/#output\s+/g, ""); + css = css.replace(/^#output\s*/gm, ""); + return css; +} + +function discoverThemesFromDir(dir: string): string[] { + if (!fs.existsSync(dir)) { + return []; + } + return fs + .readdirSync(dir) + .filter((name) => name.endsWith(".css")) + .map((name) => name.replace(/\.css$/i, "")) + .filter((name) => name.toLowerCase() !== "base"); +} + +function resolveThemeNames(): ThemeName[] { + const localThemes = discoverThemesFromDir(THEME_DIR); + const resolved = localThemes.filter((name) => + fs.existsSync(path.join(THEME_DIR, `${name}.css`)) + ); + return resolved.length ? resolved : FALLBACK_THEMES; +} + +export const THEME_NAMES: ThemeName[] = resolveThemeNames(); + +export function loadThemeCss(theme: ThemeName): { + baseCss: string; + themeCss: string; +} { + const basePath = path.join(THEME_DIR, "base.css"); + const themePath = path.join(THEME_DIR, `${theme}.css`); + + if (!fs.existsSync(basePath)) { + throw new Error(`Missing base CSS: ${basePath}`); + } + + if (!fs.existsSync(themePath)) { + throw new Error(`Missing theme CSS for "${theme}": ${themePath}`); + } + + return { + baseCss: fs.readFileSync(basePath, "utf-8"), + themeCss: fs.readFileSync(themePath, "utf-8"), + }; +} + +export function normalizeThemeCss(css: string): string { + return stripOutputScope(css); +} diff --git a/skills/baoyu-markdown-to-html/scripts/md/types.ts b/skills/baoyu-markdown-to-html/scripts/md/types.ts new file mode 100644 index 0000000..669f8cb --- /dev/null +++ b/skills/baoyu-markdown-to-html/scripts/md/types.ts @@ -0,0 +1,78 @@ +import type { ReadTimeResults } from "reading-time"; + +export type ThemeName = string; + +export interface StyleConfig { + primaryColor: string; + fontFamily: string; + fontSize: string; + foreground: string; + blockquoteBackground: string; + accentColor: string; + containerBg: string; +} + +export interface IOpts { + legend?: string; + citeStatus?: boolean; + countStatus?: boolean; + isMacCodeBlock?: boolean; + isShowLineNumber?: boolean; + themeMode?: "light" | "dark"; +} + +export interface RendererAPI { + reset: (newOpts: Partial) => void; + setOptions: (newOpts: Partial) => void; + getOpts: () => IOpts; + parseFrontMatterAndContent: (markdown: string) => { + yamlData: Record; + markdownContent: string; + readingTime: ReadTimeResults; + }; + buildReadingTime: (reading: ReadTimeResults) => string; + buildFootnotes: () => string; + buildAddition: () => string; + createContainer: (html: string) => string; +} + +export interface ParseResult { + yamlData: Record; + markdownContent: string; + readingTime: ReadTimeResults; +} + +export interface CliOptions { + inputPath: string; + theme: ThemeName; + keepTitle: boolean; + primaryColor?: string; + fontFamily?: string; + fontSize?: string; + codeTheme: string; + isMacCodeBlock: boolean; + isShowLineNumber: boolean; + citeStatus: boolean; + countStatus: boolean; + legend: string; +} + +export interface ExtendConfig { + default_theme: string | null; + default_color: string | null; + default_font_family: string | null; + default_font_size: string | null; + default_code_theme: string | null; + mac_code_block: boolean | null; + show_line_number: boolean | null; + cite: boolean | null; + count: boolean | null; + legend: string | null; + keep_title: boolean | null; +} + +export interface HtmlDocumentMeta { + title: string; + author?: string; + description?: string; +}