From f8ee51c0ed770537af478569b869e5fc91d787d1 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Wed, 17 Sep 2025 17:03:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=AE=80=E5=8D=95=E7=9A=84markdown=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leopard/server/helper/MdHelper.java | 1246 +++++++++++++++++ .../lanyuanxiaoyao/leopard/server/MdTest.java | 26 + 2 files changed, 1272 insertions(+) create mode 100644 leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/MdHelper.java create mode 100644 leopard-server/src/test/java/com/lanyuanxiaoyao/leopard/server/MdTest.java diff --git a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/MdHelper.java b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/MdHelper.java new file mode 100644 index 0000000..5fc9958 --- /dev/null +++ b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/helper/MdHelper.java @@ -0,0 +1,1246 @@ +package com.lanyuanxiaoyao.leopard.server.helper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.StringJoiner; +import lombok.Getter; +import lombok.Setter; + +/** + * Markdown文档构建助手类 + * + *

该类提供了一套流畅的API,用于构建结构化的Markdown文档。 + * 支持标题、列表、代码块、表格、链接等多种Markdown元素的构建。

+ * + *

开发说明

+ *

MdHelper采用构建器模式和树形结构设计,通过Section(节)组织文档结构, + * 每个Section可以包含子Section,形成树形的文档结构。使用时通过{@link #of()}方法 + * 获取初始构建器,然后通过链式调用添加各种元素,最后调用{@link SectionBuilder#build()} + * 方法生成Markdown文本。

+ * + *

核心组件

+ * + * + *

调用流程

+ *
    + *
  1. 通过{@link #of()}方法创建根构建器
  2. + *
  3. 通过构建器的各种方法添加文档元素,如标题、文本、列表等
  4. + *
  5. 对于列表、引用等可嵌套的元素,会返回新的构建器实例
  6. + *
  7. 通过{@link SectionBuilder#endXxx()}方法结束嵌套结构,返回上层构建器
  8. + *
  9. 调用{@link SectionBuilder#build()}方法生成最终的Markdown文本
  10. + *
+ * + *

数据流动

+ *
    + *
  1. 用户调用构建器方法添加内容
  2. + *
  3. 构建器方法创建对应的{@link Section}对象并添加到当前节的子节列表中
  4. + *
  5. 对于嵌套结构,会创建新的构建器实例,形成链式调用关系
  6. + *
  7. 调用{@link SectionBuilder#build()}时,触发{@link MdParser}进行深度优先遍历解析
  8. + *
  9. {@link MdParser}递归遍历所有节,根据节类型调用相应的解析方法生成Markdown文本
  10. + *
  11. 最终返回完整的Markdown字符串
  12. + *
+ * + *

使用示例:

+ *
+ * String markdown = MdHelper.of()
+ *     .bigTitle("主标题")
+ *     .title("副标题")
+ *     .text("这是一段普通文本")
+ *     .ul()
+ *         .text("无序列表项1")
+ *         .text("无序列表项2")
+ *     .endUl()
+ *     .build();
+ * 
+ * + * @author liuqichun03 + * @since 2022/11/8 + */ +public class MdHelper { + + + /** + * 创建一个新的Markdown文档构建器 + * + * @return SectionBuilder 文档构建器实例 + */ + public static SectionBuilder of() { + return new SectionBuilder(new Section(Section.Type.NORMAL, null, null, null, 0)); + } + + + /** + * 文本样式枚举 + * + *

定义了Markdown文本支持的各种样式,包括粗体、斜体、颜色等。

+ */ + @Getter + public enum Style { + /** + * 普通文本样式 + */ + NORMAL("normal"), + + /** + * 粗体样式 + */ + BOLD("bold"), + + /** + * 斜体样式 + */ + ITALIC("italic"), + + /** + * 红色文本 + */ + RED("red"), + + /** + * 绿色文本 + */ + GREEN("green"), + + /** + * 灰色文本 + */ + GRAY("gray"), + + /** + * 黄色文本 + */ + YELLOW("gold"), + + /** + * 蓝色文本 + */ + BLUE("blue"); + + private final String name; + + Style(String name) { + this.name = name; + } + } + + /** + * 字体样式处理类 + * + *

用于处理文本的样式,支持组合多种样式。

+ */ + public static class Fonts { + /** + * 空字体实例 + */ + public static final Fonts EMPTY = Fonts.of(""); + private final String text; + private Set