38 lines
1.3 KiB
C
38 lines
1.3 KiB
C
/* markdown.h - 面向终端输出的流式 Markdown 渲染器
|
|
*
|
|
* 设计目标: 在"纯行式 REPL"的前提下把常见 Markdown 变成 ANSI 样式,
|
|
* 且必须能处理任意分片 (SSE 的一小片文本可能把一个标记切成两半).
|
|
*
|
|
* 渲染:
|
|
* 块级 # ~ ###### 标题、> 引用、- * + 无序列表、--- 分隔线、| 表格
|
|
* 行内 **粗体**、*斜体* / _斜体_、`行内代码`、[链接文字] (蓝色高亮)
|
|
*
|
|
* 不渲染 (原样保留, 一个字节都不丢):
|
|
* 围栏代码块 (含 ``` 标记本身)、图片 、链接的 (url) 部分、
|
|
* 行内代码的内容
|
|
*/
|
|
#ifndef LIGENT_MARKDOWN_H
|
|
#define LIGENT_MARKDOWN_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
|
|
typedef struct MdRenderer MdRenderer;
|
|
|
|
/* enabled = 0 时完全透传, 逐字节不改写内容 (供管道 / --no-color 使用) */
|
|
MdRenderer *md_new(int enabled);
|
|
void md_set_enabled(MdRenderer *r, int enabled);
|
|
|
|
/* 输出目标, 默认 stdout (测试时指向内存流) */
|
|
void md_set_out(MdRenderer *r, FILE *out);
|
|
|
|
/* 喂入一段文本 (NUL 结尾). 内部保持状态, 可被任意切分 */
|
|
void md_feed(MdRenderer *r, const char *text);
|
|
|
|
/* 一条消息结束: 冲刷残留、闭合未闭合的样式 */
|
|
void md_finish(MdRenderer *r);
|
|
|
|
void md_free(MdRenderer *r);
|
|
|
|
#endif /* LIGENT_MARKDOWN_H */
|