MDCP - Markdown代码块插件
MDCP (Markdown Code-block Plugin) 是在 Markdown 中以代码插件的形式实现的插件系统,如果没有安装相应插件,则渲染成代码块,因此可以在任何 Markdown 渲染器中使用。该方案可以成为 MDX 的替代方案。
实现方式参考:
- https://github.com/remcohaszing/rehype-mermaid/blob/44c183ae43aa8f1d63b45286b9373b8674b8547f/src/rehype-mermaid.ts#L67
- https://github.com/Rooyca/query-json/blob/5dcab3f42980c5d37acf377585537dbc296d81f2/src/main.ts#L19
注意:以下内容由AI(GitHub Copilot)生成
简介
MDCP 旨在解决在 Markdown 文档中嵌入动态、交互式内容的问题,同时保持与标准 Markdown 渲染器的兼容性。通过将插件封装在代码块中,MDCP 实现了"优雅降级",即在支持相应插件的环境中呈现丰富的交互式内容,而在不支持的环境中则显示为普通代码块,确保内容始终可访问。
核心特点
- 通用兼容性:在所有标准 Markdown 渲染器中都能正常工作
- 优雅降级:在不支持的环境中自动转为可读的代码块
- 易于扩展:简单的插件开发模型和注册机制
- 插件生态:支持社区开发和共享各类功能插件
- 轻量依赖:最小化外部依赖,易于集成到现有系统
典型应用场景
- 数据可视化:图表、地图、网络拓扑等
- 交互式教程:代码示例、演示、练习
- 富媒体内容:视频播放器、画廊、幻灯片
- 表单与用户输入:调查问卷、反馈表单
- 嵌入式工具:计算器、转换器、编辑器
基本使用
MDCP 插件使用标准的 Markdown 代码块语法,通过特定的语言标识符来调用不同的插件:
markdown
```mdcp-[插件名]
[插件配置和内容]
```
例如,创建一个简单的图表:
markdown
```mdcp-chart
type: bar
data: [12, 19, 3, 5, 2, 3]
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"]
title: "示例图表"
```
工作原理(方案示例)
MDCP 通过以下方式工作:
标准化语法:使用 Markdown 的代码块语法,通过自定义语言标识符指定插件类型
mdcp-charttype: bar data: [10, 20, 30, 40] labels: ["Q1", "Q2", "Q3", "Q4"]
检测与转换:
- 当渲染器支持相应的 MDCP 插件时,插件解析代码块内容并转换为交互式组件
- 当渲染器不支持相应插件时,内容被显示为普通代码块,保持可读性
插件注册机制:
- 通过标准化的注册API,开发者可以创建和分享 MDCP 插件
- 渲染器可以按需加载插件,减少不必要的资源消耗
支持的插件类型(示例)
- mdcp-chart: 各类数据可视化图表
- mdcp-diagram: 流程图、UML图等
- mdcp-math: 数学公式和方程
- mdcp-map: 交互式地图
- mdcp-form: 表单和用户输入组件
- mdcp-media: 多媒体内容嵌入
- mdcp-code: 可执行代码示例
快速开始
- 在您的 Markdown 渲染环境中安装 MDCP 支持
- 在 Markdown 文档中使用 MDCP 代码块语法
- 添加所需插件的配置
与 MDX 的比较
特性 | MDCP | MDX |
---|---|---|
渲染器兼容性 | 任何 Markdown 渲染器 | 需专门的 MDX 渲染器 |
降级行为 | 自动降级为代码块 | 不支持自动降级 |
语法复杂度 | 低(基于标准代码块) | 中-高(引入 JSX 语法) |
开发复杂度 | 低(专注于内容描述) | 中-高(需要 React 知识) |
组件作用域 | 代码块级别 | 文档全局级别 |
插件示例
图表插件
mdcp-chart
type: line
data: [
[1, 3, 2, 5, 4],
[5, 4, 3, 2, 1]
]
labels: ["Jan", "Feb", "Mar", "Apr", "May"]
title: "销售趋势"
交互式地图
mdcp-map
center: [39.9042, 116.4074]
zoom: 10
markers: [
{ lat: 39.9042, lng: 116.4074, label: "北京" },
{ lat: 31.2304, lng: 121.4737, label: "上海" }
]
插件开发
MDCP 提供简单的插件开发API,开发者可以创建自定义插件来扩展功能。一个基本的MDCP插件结构:
javascript
// 示例插件框架
mdcp.register('my-plugin', {
render(content, options) {
// 解析内容
// 创建和返回组件
},
defaultOptions: {
// 默认配置
}
});
贡献指南
我们欢迎社区贡献,包括:
- 新插件开发
- 文档改进
- 核心功能增强
- 错误报告和修复
许可证
待定