baoyu-markdown-to-html
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMarkdown to HTML Converter
Markdown 转 HTML 转换器
Converts Markdown files to beautifully styled HTML with inline CSS, optimized for WeChat Official Account and other platforms.
将Markdown文件转换为带有内联CSS的精美样式HTML,针对微信公众号和其他平台做了优化。
Script Directory
脚本目录
Agent Execution: Determine this SKILL.md directory as . Resolve runtime: if installed → ; if available → ; else suggest installing bun. Replace and with actual values.
{baseDir}${BUN_X}bunbunnpxnpx -y bun{baseDir}${BUN_X}| Script | Purpose |
|---|---|
| Main entry point |
Agent 执行逻辑:将本SKILL.md所在目录确定为。解析运行时:如果已安装则使用;如果可用则使用;否则建议用户安装bun。将和替换为实际值。
{baseDir}${BUN_X}bunbunnpxnpx -y bun{baseDir}${BUN_X}| 脚本 | 用途 |
|---|---|
| 主入口文件 |
Preferences (EXTEND.md)
偏好配置 (EXTEND.md)
Check EXTEND.md existence (priority order):
bash
undefined按以下优先级顺序检查EXTEND.md是否存在:
bash
undefinedmacOS, Linux, WSL, Git Bash
macOS, Linux, WSL, Git Bash
test -f .baoyu-skills/baoyu-markdown-to-html/EXTEND.md && echo "project"
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-markdown-to-html/EXTEND.md" && echo "xdg"
test -f "$HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md" && echo "user"
```powershelltest -f .baoyu-skills/baoyu-markdown-to-html/EXTEND.md && echo "project"
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-markdown-to-html/EXTEND.md" && echo "xdg"
test -f "$HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md" && echo "user"
```powershellPowerShell (Windows)
PowerShell (Windows)
if (Test-Path .baoyu-skills/baoyu-markdown-to-html/EXTEND.md) { "project" }
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
if (Test-Path "$xdg/baoyu-skills/baoyu-markdown-to-html/EXTEND.md") { "xdg" }
if (Test-Path "$HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md") { "user" }
┌──────────────────────────────────────────────────────────────┬───────────────────┐
│ Path │ Location │
├──────────────────────────────────────────────────────────────┼───────────────────┤
│ .baoyu-skills/baoyu-markdown-to-html/EXTEND.md │ Project directory │
├──────────────────────────────────────────────────────────────┼───────────────────┤
│ $HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md │ User home │
└──────────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐
│ Result │ Action │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Found │ Read, parse, apply settings │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Not found │ Use defaults │
└───────────┴───────────────────────────────────────────────────────────────────────────┘
**EXTEND.md Supports**: Default theme | Custom CSS variables | Code block styleif (Test-Path .baoyu-skills/baoyu-markdown-to-html/EXTEND.md) { "project" }
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
if (Test-Path "$xdg/baoyu-skills/baoyu-markdown-to-html/EXTEND.md") { "xdg" }
if (Test-Path "$HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md") { "user" }
┌──────────────────────────────────────────────────────────────┬───────────────────┐
│ 路径 │ 位置 │
├──────────────────────────────────────────────────────────────┼───────────────────┤
│ .baoyu-skills/baoyu-markdown-to-html/EXTEND.md │ 项目目录 │
├──────────────────────────────────────────────────────────────┼───────────────────┤
│ $HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md │ 用户根目录 │
└──────────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐
│ 检查结果 │ 执行动作 │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ 找到文件 │ 读取、解析并应用配置 │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ 未找到 │ 使用默认配置 │
└───────────┴───────────────────────────────────────────────────────────────────────────┘
**EXTEND.md 支持配置项**:默认主题 | 自定义CSS变量 | 代码块样式Workflow
工作流程
Step 0: Pre-check (Chinese Content)
步骤0:前置检查(中文内容)
Condition: Only execute if input file contains Chinese text.
Detection:
- Read input markdown file
- Check if content contains CJK characters (Chinese/Japanese/Korean)
- If no CJK content → skip to Step 1
Format Suggestion:
If CJK content detected AND skill is available:
baoyu-format-markdownUse to ask whether to format first. Formatting can fix:
AskUserQuestion- Bold markers with punctuation inside causing parse failures
** - CJK/English spacing issues
If user agrees: Invoke skill to format the file, then use formatted file as input.
baoyu-format-markdownIf user declines: Continue with original file.
触发条件:仅当输入文件包含中文文本时执行本步骤。
检测逻辑:
- 读取输入的Markdown文件
- 检查内容是否包含CJK字符(中文/日文/韩文)
- 如果没有CJK内容 → 直接跳转到步骤1
格式优化建议:
如果检测到CJK内容,且 skill可用:
baoyu-format-markdown调用询问用户是否先执行格式化。格式化可以修复以下问题:
AskUserQuestion- 加粗标记内部包含标点导致的解析失败
** - 中日韩字符与英文之间的空格问题
如果用户同意:调用 skill格式化文件,使用格式化后的文件作为后续输入。
baoyu-format-markdown如果用户拒绝:继续使用原始文件处理。
Step 1: Determine Theme
步骤1:确定主题
Theme resolution order (first match wins):
- User explicitly specified theme (CLI or conversation)
--theme - EXTEND.md (this skill's own EXTEND.md, checked in Step 0)
default_theme - EXTEND.md
baoyu-post-to-wechat(cross-skill fallback)default_theme - If none found → use AskUserQuestion to confirm
Cross-skill EXTEND.md check (only if this skill's EXTEND.md has no ):
default_themebash
undefined主题解析优先级(匹配到第一个即生效):
- 用户明确指定的主题(CLI 参数或者对话中指定)
--theme - EXTEND.md中配置的(本skill的EXTEND.md,已在步骤0中检查)
default_theme - 的EXTEND.md中配置的
baoyu-post-to-wechat(跨skill fallback)default_theme - 如果都未找到 → 调用向用户确认
AskUserQuestion
跨skill EXTEND.md检查(仅当本skill的EXTEND.md没有配置时执行):
default_themebash
undefinedCheck baoyu-post-to-wechat EXTEND.md for default_theme
检查baoyu-post-to-wechat的EXTEND.md中的default_theme配置
test -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && grep -o 'default_theme:.*' "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md"
```powershelltest -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && grep -o 'default_theme:.*' "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md"
```powershellPowerShell (Windows)
PowerShell (Windows)
if (Test-Path "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md") { Select-String -Pattern 'default_theme:.*' -Path "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" | ForEach-Object { $_.Matches.Value } }
**If theme is resolved from EXTEND.md**: Use it directly, do NOT ask the user.
**If no default found**: Use AskUserQuestion to confirm:
| Theme | Description |
|-------|-------------|
| `default` (Recommended) | Classic - traditional layout, centered title with bottom border, H2 with white text on colored background |
| `grace` | Elegant - text shadow, rounded cards, refined blockquotes |
| `simple` | Minimal - modern minimalist, asymmetric rounded corners, clean whitespace |
| `modern` | Modern - large radius, pill-shaped titles, relaxed line height (pair with `--color red` for traditional red-gold style) |if (Test-Path "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md") { Select-String -Pattern 'default_theme:.*' -Path "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" | ForEach-Object { $_.Matches.Value } }
**如果从EXTEND.md解析到主题**:直接使用,不需要再询问用户。
**如果未找到默认主题**:调用`AskUserQuestion`向用户确认可选主题:
| 主题 | 说明 |
|-------|-------------|
| `default`(推荐) | 经典款 - 传统布局,居中标题带下划线,H2标题为有色背景白字 |
| `grace` | 优雅款 - 文字阴影,圆角卡片,精致的引用块样式 |
| `simple` | 极简款 - 现代极简风,不对称圆角,干净的留白 |
| `modern` | 现代款 - 大圆角,胶囊形标题,宽松行高(搭配`--color red`可实现传统红金风格) |Step 1.5: Determine Citation Mode
步骤1.5:确定引用模式
Default: Off. Do not ask by default.
Enable only if the user explicitly asks for "微信外链转底部引用", "底部引用", "文末引用", or passes .
--citeBehavior when enabled:
- Ordinary external links are rendered with numbered superscripts and collected under a final section.
引用链接 - links stay as direct links and are not moved to the bottom.
https://mp.weixin.qq.com/... - Bare links where link text equals URL stay inline.
默认状态:关闭,默认不需要询问用户。
仅当用户明确要求「微信外链转底部引用」、「底部引用」、「文末引用」,或者传入参数时才启用。
--cite启用后行为:
- 普通外部链接会渲染为带编号的上标,统一收集到文末的章节
引用链接 - 的链接保留为直接链接,不会移动到底部
https://mp.weixin.qq.com/... - 链接文本与URL相同的裸链保留在行内
Step 2: Convert
步骤2:执行转换
bash
${BUN_X} {baseDir}/scripts/main.ts <markdown_file> --theme <theme> [--cite]bash
${BUN_X} {baseDir}/scripts/main.ts <markdown_file> --theme <theme> [--cite]Step 3: Report Result
步骤3:上报结果
Display the output path from JSON result. If backup was created, mention it.
展示JSON结果中的输出路径。如果创建了备份,需要告知用户。
Usage
使用方法
bash
${BUN_X} {baseDir}/scripts/main.ts <markdown_file> [options]Options:
| Option | Description | Default |
|---|---|---|
| Theme name (default, grace, simple, modern) | default |
| Primary color: preset name or hex value | theme default |
| Font: sans, serif, serif-cjk, mono, or CSS value | theme default |
| Font size: 14px, 15px, 16px, 17px, 18px | 16px |
| Override title from frontmatter | |
| Convert external links to bottom citations, append | false (off) |
| Keep the first heading in content | false (removed) |
| Show help |
Color Presets:
| Name | Hex | Label |
|---|---|---|
| blue | #0F4C81 | Classic Blue |
| green | #009874 | Emerald Green |
| vermilion | #FA5151 | Vibrant Vermilion |
| yellow | #FECE00 | Lemon Yellow |
| purple | #92617E | Lavender Purple |
| sky | #55C9EA | Sky Blue |
| rose | #B76E79 | Rose Gold |
| olive | #556B2F | Olive Green |
| black | #333333 | Graphite Black |
| gray | #A9A9A9 | Smoke Gray |
| pink | #FFB7C5 | Sakura Pink |
| red | #A93226 | China Red |
| orange | #D97757 | Warm Orange (modern default) |
Examples:
bash
undefinedbash
${BUN_X} {baseDir}/scripts/main.ts <markdown_file> [options]参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
| 主题名称(default、grace、simple、modern) | default |
| 主色调:预设名称或十六进制色值 | 主题默认值 |
| 字体:sans、serif、serif-cjk、mono,或者CSS字体值 | 主题默认值 |
| 字体大小:14px、15px、16px、17px、18px | 16px |
| 覆盖frontmatter中的标题 | 无 |
| 将外部链接转换为底部引用,追加 | false(关闭) |
| 保留内容中的第一个标题 | false(移除) |
| 展示帮助信息 | 无 |
颜色预设:
| 名称 | 十六进制值 | 标签 |
|---|---|---|
| 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 | 暖橙色(modern主题默认) |
使用示例:
bash
undefinedBasic conversion (uses default theme, removes first heading)
基础转换(使用默认主题,移除第一个标题)
${BUN_X} {baseDir}/scripts/main.ts article.md
${BUN_X} {baseDir}/scripts/main.ts article.md
With specific theme
指定主题转换
${BUN_X} {baseDir}/scripts/main.ts article.md --theme grace
${BUN_X} {baseDir}/scripts/main.ts article.md --theme grace
Theme with custom color
指定主题和自定义颜色
${BUN_X} {baseDir}/scripts/main.ts article.md --theme modern --color red
${BUN_X} {baseDir}/scripts/main.ts article.md --theme modern --color red
Enable bottom citations for ordinary external links
启用普通外部链接底部引用
${BUN_X} {baseDir}/scripts/main.ts article.md --cite
${BUN_X} {baseDir}/scripts/main.ts article.md --cite
Keep the first heading in content
保留内容中的第一个标题
${BUN_X} {baseDir}/scripts/main.ts article.md --keep-title
${BUN_X} {baseDir}/scripts/main.ts article.md --keep-title
Override title
覆盖文章标题
${BUN_X} {baseDir}/scripts/main.ts article.md --title "My Article"
undefined${BUN_X} {baseDir}/scripts/main.ts article.md --title "我的文章"
undefinedOutput
输出说明
File location: Same directory as input markdown file.
- Input:
/path/to/article.md - Output:
/path/to/article.html
Conflict handling: If HTML file already exists, it will be backed up first:
- Backup:
/path/to/article.html.bak-YYYYMMDDHHMMSS
JSON output to stdout:
json
{
"title": "Article Title",
"author": "Author Name",
"summary": "Article summary...",
"htmlPath": "/path/to/article.html",
"backupPath": "/path/to/article.html.bak-20260128180000",
"contentImages": [
{
"placeholder": "MDTOHTMLIMGPH_1",
"localPath": "/path/to/img.png",
"originalPath": "imgs/image.png"
}
]
}文件位置:与输入的Markdown文件同目录
- 输入:
/path/to/article.md - 输出:
/path/to/article.html
冲突处理:如果目标HTML文件已存在,会先进行备份:
- 备份路径:
/path/to/article.html.bak-YYYYMMDDHHMMSS
标准输出JSON格式:
json
{
"title": "文章标题",
"author": "作者名称",
"summary": "文章摘要...",
"htmlPath": "/path/to/article.html",
"backupPath": "/path/to/article.html.bak-20260128180000",
"contentImages": [
{
"placeholder": "MDTOHTMLIMGPH_1",
"localPath": "/path/to/img.png",
"originalPath": "imgs/image.png"
}
]
}Themes
主题说明
| Theme | Description |
|---|---|
| Classic - traditional layout, centered title with bottom border, H2 with white text on colored background |
| Elegant - text shadow, rounded cards, refined blockquotes (by @brzhang) |
| Minimal - modern minimalist, asymmetric rounded corners, clean whitespace (by @okooo5km) |
| Modern - large radius, pill-shaped titles, relaxed line height (pair with |
| 主题 | 说明 |
|---|---|
| 经典款 - 传统布局,居中标题带下划线,H2标题为有色背景白字 |
| 优雅款 - 文字阴影,圆角卡片,精致的引用块样式(作者 @brzhang) |
| 极简款 - 现代极简风,不对称圆角,干净的留白(作者 @okooo5km) |
| 现代款 - 大圆角,胶囊形标题,宽松行高(搭配 |
Supported Markdown Features
支持的Markdown特性
| Feature | Syntax |
|---|---|
| Headings | |
| Bold/Italic | |
| Code blocks | |
| Inline code | |
| Tables | GitHub-flavored markdown tables |
| Images | |
| Links | |
| Blockquotes | |
| Lists | |
| Alerts | |
| Footnotes | |
| Ruby text | `{base |
| Mermaid | |
| PlantUML | |
| 特性 | 语法 |
|---|---|
| 标题 | |
| 粗体/斜体 | |
| 代码块 | 带语法高亮的 |
| 行内代码 | |
| 表格 | GitHub风格Markdown表格 |
| 图片 | |
| 链接 | |
| 引用块 | |
| 列表 | |
| 提示框 | |
| 脚注 | |
| 注音 | `{base |
| Mermaid | |
| PlantUML | |
Frontmatter
Frontmatter
Supports YAML frontmatter for metadata:
yaml
---
title: Article Title
author: Author Name
description: Article summary
---If no title is found, extracts from first H1/H2 heading or uses filename.
支持YAML Frontmatter存储元数据:
yaml
---
title: 文章标题
author: 作者名称
description: 文章摘要
---如果未找到标题,会从第一个H1/H2标题提取或者使用文件名作为标题。
Extension Support
扩展支持
Custom configurations via EXTEND.md. See Preferences section for paths and supported options.
可通过EXTEND.md自定义配置,路径和支持的选项参考偏好配置章节。