--- url: /zh/guide/introduction.md --- > For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt. # 概览 `react-wikitext` 把 MediaWiki 风格的 wikitext 渲染成 React 元素:源码先由解析器转换为强类型语义 AST,再转换为 HAST,最后交给 React。它不连接 MediaWiki API,不执行 Lua,也不接管站点路由。 ## 它解决什么问题 在 React 应用里展示 wiki 内容时,常见做法是拿到 HTML 后用 `dangerouslySetInnerHTML` 注入,或者直接嵌入 `iframe`。前者绕过了 React,后者无法复用宿主样式与交互。 `react-wikitext` 输出 React 元素而不是 HTML 字符串;渲染前会给出可查询的语义树与已清洗的 HAST;链接、图片和模板由宿主决定,库只负责校验与渲染。解析与准备可以放在服务端、Worker 或缓存层,客户端只接收快照。 ## 能力 | 能力 | 说明 | | ---------- | ------------------------------------------------------- | | 解析与渲染 | `wikiparser-node@1.48.1` 生成语法树;库归一化为语义 AST,再输出 React 元素 | | 快照与服务端 | 解析快照与渲染快照都是普通数据;服务端准备后,客户端只加载 `/view` | | 模板展开 | 可选的 `/expand`,用宿主解析函数展开受支持的模板与纯 wikitext 函数 | | 定制与调试 | 组件覆盖、`handlers`、rehype 插件、CSS 变量、文案与诊断 | | unified 接入 | `/unified` 提供 raw 模式,把各阶段注册到自己的处理器 | ### 默认输出 下面的示例没有配置解析函数。模板、图片占位与未配置路由的链接都是默认行为,不是渲染失败: ```tsx preview import { Wikitext } from "react-wikitext"; import "react-wikitext/styles.css"; const source = `== 默认输出 == 这段文字包含 '''粗体'''、''斜体'' 和 [[尚未配置路由的链接]]。 {{Infobox|title=模板默认不求值}} [[File:Example.png|thumb|图片默认只是占位]]`; export default function Demo() { return ; } ``` 完整行为见[渲染行为](/zh/guide/rendering.md)与[支持矩阵](/zh/guide/syntax-support.md)。 ## 明确的边界 默认管线不求值模板与解析器函数,也不执行 Lua;`/expand` 只覆盖受支持的子集。库不发起网络请求,图片默认不加载,内部链接默认不可导航。 它不是 MediaWiki 实现,也不含编辑器或虚拟列表;站点 API、编辑流程、完整扩展语义与分页调度由宿主负责。完整边界见[渲染行为](/zh/guide/rendering.md)。 ## 适用场景 适合只读的 wiki 镜像、存档与导出,也适合在知识库、文档站或后台中嵌入片段。需要在渲染前检查结构化数据、按块容错、把解析放到 Worker,或把链接、图片、模板接到自有路由与后端时,也可以使用本库。 以下场景更适合其他方案: | 场景 | 更合适的做法 | | ---------------- | ------------------------------- | | 内容本身就是 Markdown | `react-markdown` 等 Markdown 渲染器 | | 需要完整的站点级 wiki 语义 | 使用 MediaWiki / Parsoid 提供的解析结果 | | 只需要隔离展示第三方页面 | `iframe`,代价是无法复用宿主样式与交互 | | 需要所见即所得编辑 | 使用编辑器方案;本库只负责只读渲染 | ## 当前状态 :::note 当前版本 `0.1.0-alpha.1`,通过 alpha dist-tag 发布,安装命令为 `pnpm add react-wikitext@alpha`。0.x 阶段遵循语义化版本约定:次版本可能包含破坏性变更,补丁版本只做兼容修复。运行时支持 React `>=18.2 <20`,构建或服务端运行需要 Node `>=18.18`;解析器固定为 `wikiparser-node@1.48.1`,许可为 GPL-3.0-or-later。 ::: 兼容矩阵与版本策略见[状态与兼容性](/zh/project/status.md)。 ## 从这里开始 - [快速开始](/zh/guide/quick-start.md):安装并渲染第一段源码。 - [工作原理](/zh/guide/concepts.md):理解管线、快照与入口的拆分。 - [支持矩阵](/zh/guide/syntax-support.md):确认某段语法会被渲染、占位还是降级。 --- url: /zh/guide/quick-start.md --- > For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt. # 快速开始 本页把一段 wikitext 渲染到页面上。管线、快照与入口的取舍见[工作原理](/zh/guide/concepts.md)。 ## 环境要求 - React `>=18.2 <20`(peer dependency)。 - 构建或服务端运行需要 Node `>=18.18`。 - 支持 ESM 与 CJS;Vite 与 webpack 5 的消费者构建已有测试覆盖。 - 运行时不依赖 Wikimedia、字体 CDN 或外部 API。 ## 安装 ```bash pnpm add react-wikitext@alpha ``` 当前版本通过 alpha dist-tag 分发,安装命令需要显式指定通道;稳定版发布后可以直接使用 `pnpm add react-wikitext`。页面样式单独引入一次: ```ts import "react-wikitext/styles.css"; ``` ::::note npm 包只包含 `dist/`、`NOTICE` 与 `THIRD_PARTY_LICENSES`。从源码构建与本地调试流程见[贡献指南](/zh/project/contributing.md)。 :::: ## 最小示例 根入口的 `Wikitext` 组件一次完成解析、准备与渲染。引入一次样式文件即可: ```tsx preview import { Wikitext } from "react-wikitext"; import "react-wikitext/styles.css"; const source = `== 你好,wikitext == 这是一段 '''wikitext''',包含 [[内部链接|链接]] 和 ''斜体''。 * 第一项 * 第二项`; export default function Article() { return ; } ``` `Wikitext` 渲染出的根节点是 `div.wtr-view`。`lang` 与 `dir` 会写入容器属性,用于排版与辅助技术。 ::::warning `Wikitext` 与 `WikitextView` 依赖 React Context,只能在客户端组件中运行。根入口与 `/view` 的产物顶部已经带有 `"use client"` 指令,在 Next.js App Router 中直接使用即可;服务端只调用 `/parse`、`/hast` 等无 React 入口,链路见[服务端准备 + 客户端渲染](/zh/guide/server-rendering.md)。 :::: ## 你会看到什么 默认管线按下面的规则展示内容: - 标题、段落、粗体、斜体、列表、定义列表、表格、代码块与参考文献正常渲染。 - 内部链接默认是**无法导航的文本**;需要地址时通过 `resolveLink` 返回。 - 外链使用源码中的安全 URL,并带 `target="_blank"` 与 `rel="nofollow noopener noreferrer"`。 - 模板、解析器函数与文件尚未求值时显示明确的占位,不推断内容。 - 图片默认只显示占位;只有 `resolveImage` 返回并通过校验的地址才会生成 ``。 - 同页标题达到 4 个时自动生成目录;分类汇总到文末底栏。 - 未知结构降级为源码卡片,不会导致整页渲染失败。 逐项状态见[支持矩阵](/zh/guide/syntax-support.md),细节见[渲染行为](/zh/guide/rendering.md)。 ## 下一步 - [工作原理](/zh/guide/concepts.md):为什么解析与准备要分开,什么时候用 `/view`。 - [基本用法](/zh/guide/usage.md):显式管线、异步插件与组件覆盖。 - [链接与图片](/zh/guide/links-and-images.md):接入站内路由与媒体服务。 - [服务端与框架](/zh/guide/server-rendering.md):服务端准备、序列化与 hydration。 - [故障排查](/zh/guide/troubleshooting.md):占位、报错与常见配置问题。 - [入口总览](/zh/api/index.md):每个子路径导出的内容。 --- url: /zh/guide/concepts.md --- > For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt. # 工作原理 库把渲染拆成可以分别部署的阶段。理解这条管线和两种快照,就能判断什么时候该用根入口,什么时候该把解析放到服务端。 ## 处理管线 ```text source │ ├─(可选)/expand ─▶ 展开后的 source │ ▼ /parse ─▶ WikitextDocument(解析快照) │ ▼ /hast prepare ─▶ WikitextRenderDocument(渲染快照) │ ▼ /view ─▶ React ``` | 阶段 | 入口 | 输入 | 输出 | 是否必需 | | -- | --------------- | --------- | ------------------------ | ----- | | 展开 | `/expand` | 源码与模板解析函数 | 展开后的解析文档 | 可选 | | 解析 | `/parse`、`/ast` | 源码 | `WikitextDocument` | 必需 | | 准备 | `/hast` | 解析快照 | `WikitextRenderDocument` | 渲染前必需 | | 渲染 | `/view`、根入口 | 渲染快照 | React 元素 | 渲染时必需 | `/expand` 的结果已经是解析文档,不需要再手动解析一次;直接交给 `prepareWikitext`。 ## 两种快照 ### 解析快照 `WikitextDocument` ```ts interface WikitextDocument { readonly source: string; readonly ast: WikitextRoot; readonly syntax?: WikitextSyntaxRoot; readonly meta: WikitextDocumentMeta; readonly diagnostics: readonly WikitextDiagnostic[]; } ``` - `ast` 是归一化后的语义树,准备阶段不会修改它。 - `syntax` 只在 `retainSyntax: true` 时存在,用于源码坐标与 playground。 - 同一份源码配合不同的站点配置或 `pageName`,可能得到不同的 AST。 ### 渲染快照 `WikitextRenderDocument` ```ts interface WikitextRenderDocument { readonly source: string; readonly ast: WikitextRoot; // 插件处理后的工作树 readonly hast: import("hast").Root; // 已清洗的最终 HAST readonly headings: readonly WikitextHeadingInfo[]; readonly meta: WikitextRenderMeta; readonly diagnostics: readonly WikitextDiagnostic[]; } ``` - `hast` 已经包含目录、引用区与分类底栏,不需要在视图层再拼装。 - `ast` 是本次工作树的结果,节点 id 已经重新分配。 - `meta` 记录实际生效的策略、文案、标题策略与授权图片。 - `WikitextView` 只接受渲染快照,不接收源码。 查询节点时必须区分两份快照:不要用渲染快照里的 id 查原始解析快照。 ## 为什么要拆成两段 解析成本高,而准备选项经常变化。缓存解析快照,就可以用不同的链接、图片、文案或插件重复准备,而不必重新解析。服务端准备、客户端渲染也是同一套快照:客户端不加载解析器,也不重跑插件。 准备阶段在克隆的工作树上执行,原始快照保持只读。快照是普通数据,可以放进缓存、跨 Worker 传递或经网络传输;恢复函数会重新校验结构与预算。 :::note 准备阶段并不只是渲染前的小调整。它决定 HAST 的最终内容与安全边界;跳过准备、直接把 HAST 交给视图不在支持范围内。 ::: ## 语义归一化 上游解析器给出的是源码语法树。库在语义阶段完成结构归一化,React 层不再扫描源码。 无法安全或正确表达的结构会降级为源码卡片并写入诊断,不推断外观。模板、解析器函数、参数与文件默认输出占位,避免把“未求值”误当成“已求值”。 源码 HTML 按类别处理:允许的标签按白名单输出,禁止的标签整对丢弃并提示,未知标签降级。链接与图片在最终整理阶段再次校验协议、`target`、`rel` 与图片授权。 这套策略优先保证每一段输出都能解释、能审计,不追求最大化还原 Wikipedia。 ## 入口与加载边界 | 入口 | 加载解析器 | 加载 React | 典型用途 | | ---------- | ----- | -------- | --------------- | | 根入口 | 是 | 是 | 客户端直接渲染源码 | | `/view` | 否 | 是 | 客户端只渲染准备好的快照 | | `/parse` | 是 | 否 | 服务端、Worker、缓存 | | `/expand` | 是 | 否 | 解析前展开模板 | | `/hast` | 否 | 否 | 准备、序列化、恢复 | | `/ast` | 否 | 否 | 纯数据处理与 AST 查询 | | `/unified` | 否 | 否 | 显式注入解析器的 raw 模式 | | `/configs` | 否 | 否 | 站点配置常量 | 完整导出清单见[入口总览](/zh/api/index.md)。 :::warning React 入口在模块加载时创建 Context,并使用 `useId` / `useMemo`,因此只能在客户端组件中运行。根入口与 `/view` 的产物顶部带有 `"use client"` 指令,在 Next.js App Router 等环境中可以直接使用。服务端只应调用 `/parse`、`/hast` 等无 React 入口。 ::: ## 术语 | 术语 | 含义 | | -------- | -------------------------------------------------------- | | wikitext | MediaWiki 风格的页面源码 | | 解析快照 | 某份源码加上站点配置后的语义结果,对应 `WikitextDocument` | | 渲染快照 | 完成插件、HAST 转换、清洗与整理后的结果,对应 `WikitextRenderDocument` | | 解析函数 | 宿主提供的 `resolveLink`、`resolveImage`、`resolveTemplate` 等回调 | | 转换函数 | `prepareOptions.handlers` 中把自定义语义节点转换为 HAST 的函数 | | 策略 | `prepareOptions.policy` 中的 URL、标签与类名规则 | | 文案 | `prepareOptions.labels`,所有用户可见占位与提示 | ## 下一步 - [基本用法](/zh/guide/usage.md):源码组件与显式管线。 - [服务端与框架](/zh/guide/server-rendering.md):快照序列化、Next.js 与 hydration。 - [准备 `/hast`](/zh/api/prepare.md):插件、解析函数、策略与快照恢复。 --- url: /zh/guide/usage.md --- > For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt. # 基本用法 库提供两种用法:源码组件适合直接渲染,显式管线把解析、准备与视图拆开,适合服务端、缓存、Worker 与异步处理。两者的产物与入口关系见[工作原理](/zh/guide/concepts.md)。 ## 源码组件 ```tsx import { Wikitext } from "react-wikitext"; import "react-wikitext/styles.css"; export function Article({ source }: { source: string }) { return ( ); } ``` `Wikitext` 在组件内同步完成: 1. 用 `parseWikitext` 或传入的 `parser` 解析源码。 2. 用 `prepareWikitext` 克隆语义树、运行插件、生成 HAST 并清洗。 3. 用 `WikitextView` 渲染。 它用 `useMemo` 缓存解析与准备结果,依赖分别是 `[parser, source, parseOptions]` 与 `[document, prepareOptions]`。如果每次渲染都传入新的选项对象,会重新解析;请把选项放在组件外或用 `useMemo` 固定。 :::warning 根入口只走同步准备。`wikitextPlugins` / `rehypePlugins` 中出现异步插件时,`Wikitext` 会抛出 `ASYNC_PLUGIN_IN_SYNC_PATH`。需要异步插件时改用显式管线。 ::: ## 显式管线 ```tsx import { createWikiparser } from "react-wikitext/parse"; import { prepareWikitext } from "react-wikitext/hast"; import { WikitextView } from "react-wikitext/view"; import "react-wikitext/styles.css"; const parser = createWikiparser(); export function renderArticle(source: string) { const document = parser.parse(source, { pageName: "Example" }); const prepared = prepareWikitext(document, { headingIdStrategy: "instance", }); return ; } ``` 解析与准备都可以在 React 之外完成。`prepareWikitext` 不修改原始解析快照;插件在克隆的语义树上运行。 解析器可以在模块加载时创建一次并复用。配置在创建时固定,更换站点配置需要创建新的解析器: ```ts import { createWikiparser } from "react-wikitext/parse"; import { MEDIAWIKI_CONFIG } from "react-wikitext/configs"; export const parser = createWikiparser({ config: MEDIAWIKI_CONFIG, defaults: { pageName: "Example" }, }); ``` ## 复用准备结果 准备阶段会重跑插件、HAST 转换与清洗。同一份源码只改了展示组件时,不需要重新准备: ```tsx import type { WikitextRenderDocument } from "react-wikitext/hast"; import { WikitextView } from "react-wikitext/view"; function Article({ prepared }: { prepared: WikitextRenderDocument }) { return ( {displayName}, }} /> ); } ``` - 解析结果的缓存键至少包含源码、`pageName` 与站点配置。 - 准备结果的缓存键还要包含解析函数、插件、`policy`、`labels` 与 `headingIdStrategy`。 - 缓存与失效策略见[性能与预算](/zh/guide/performance.md)。 ## 异步插件 同步入口遇到异步插件会抛错。需要异步转换时使用 `prepareWikitextAsync`: ```tsx import { prepareWikitextAsync } from "react-wikitext/hast"; const prepared = await prepareWikitextAsync(document, { rehypePlugins: [ () => async (tree) => { // 异步补数据或改写 HAST return tree; }, ], }); ``` React 渲染前必须完成准备;`WikitextView` 不会等待 Promise。服务端场景见[服务端与框架](/zh/guide/server-rendering.md)。 ## 组件覆盖 `Wikitext` 与 `WikitextView` 都接受 `components`(按 HTML 标签)与 `semanticComponents`(按 wiki 语义类型)。覆盖点属于可信代码,适合接入设计系统: ```tsx preview import type { ReactNode } from "react"; import { Wikitext } from "react-wikitext"; import "react-wikitext/styles.css"; const source = `
这段引用由自定义组件渲染。
{{Infobox|title=模板徽标}}`; function Quote({ children }: { children?: ReactNode }) { return (
{children}
); } export default function Demo() { return ( ( {displayName} ), }} /> ); } ``` 完整映射与属性见 [React 组件 API](/zh/api/react.md),样式、文案与标题锚点见[样式与组件](/zh/guide/customization.md)。 ## 与 AI 协作 本文档站已开启 `llms` 支持,除每页标题下方的复制 Markdown 等入口外,同步发布两份面向 LLM 的纯文本文件: - [llms.txt](https://react-wikitext.pages.dev/zh/llms.txt):索引文件,包含文档站各页面的说明和链接 ``` https://react-wikitext.pages.dev/zh/llms.txt ``` - [llms-full.txt](https://react-wikitext.pages.dev/zh/llms-full.txt):合并了本文档站的全部中文内容 ``` https://react-wikitext.pages.dev/zh/llms-full.txt ``` 英文站内容对应 `/llms.txt` 与 `/llms-full.txt`。引用单页时,在页面地址后追加 `.md` 也可获得该页的纯 Markdown 版本。 可按需将上述链接复制给你的 agent。 ## 相关 - [服务端与框架](/zh/guide/server-rendering.md):服务端准备、序列化、Next.js 与 hydration。 - [性能与预算](/zh/guide/performance.md):预算、Worker 与缓存。 - [故障排查](/zh/guide/troubleshooting.md):`ASYNC_PLUGIN_IN_SYNC_PATH` 等常见错误。 --- url: /zh/guide/server-rendering.md --- > For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt. # 服务端与框架 解析与准备都不依赖 React,可以在服务端、构建期或 Worker 中完成。客户端只加载 `react-wikitext/view`,接收并恢复渲染快照。 ## 两种部署方式 | 方式 | 服务端做什么 | 客户端加载 | 适合 | | ----------- | ----------- | ---------------- | -------------- | | 客户端渲染源码 | 只发送源文本 | 根入口(解析器 + React) | 内容量小、按需交互 | | 服务端准备,客户端渲染 | 解析、准备、序列化快照 | `/view` + 恢复函数 | 内容稳定、希望减小客户端体积 | 第二种方式把解析成本留在服务端;客户端不再加载 `wikiparser-node`。 ## 服务端准备 ```tsx // server.tsx import { createWikiparser } from "react-wikitext/parse"; import { prepareWikitext, serializeWikitextRenderDocument } from "react-wikitext/hast"; const parser = createWikiparser(); export function preparePayload(source: string, pageName: string) { const document = parser.parse(source, { pageName }); const prepared = prepareWikitext(document); return serializeWikitextRenderDocument(prepared); } ``` ```tsx // client.tsx "use client"; import { useMemo } from "react"; import { restoreWikitextRenderDocument } from "react-wikitext/hast"; import { WikitextView } from "react-wikitext/view"; export function Article({ payload }: { payload: unknown }) { const prepared = useMemo(() => restoreWikitextRenderDocument(payload), [payload]); return ; } ``` `restoreWikitextRenderDocument` 会重新校验结构版本、根节点、HAST 结构与节点预算,并重新执行最终清洗。它不信任任意第三方 HAST;只恢复来自可信服务端或可信缓存的快照。 :::note 快照同时包含语义树、HAST 与源码,体积明显大于纯 HTML。大文档应按页或按块准备,并评估传输预算。 ::: ## Next.js App Router 根入口与 `/view` 在模块加载时创建 Context,并使用 React Hook,因此只能在客户端组件中运行。这两个入口的产物顶部带有 `"use client"` 指令,宿主不需要额外建立边界;服务端只使用 `/parse`、`/hast`。 ```tsx // app/wiki/[title]/page.tsx import { createWikiparser } from "react-wikitext/parse"; import { prepareWikitext, serializeWikitextRenderDocument } from "react-wikitext/hast"; import { ArticleView } from "./article-view"; import { loadPageSource } from "@/lib/wiki"; const parser = createWikiparser(); export default async function Page({ params }: { params: Promise<{ title: string }> }) { const { title } = await params; const source = await loadPageSource(title); const document = parser.parse(source, { pageName: title }); const payload = serializeWikitextRenderDocument(prepareWikitext(document)); return ; } ``` ```tsx // app/wiki/[title]/article-view.tsx "use client"; import { useMemo } from "react"; import { restoreWikitextRenderDocument } from "react-wikitext/hast"; import { WikitextView } from "react-wikitext/view"; export function ArticleView({ payload, lang }: { payload: unknown; lang: string }) { const prepared = useMemo(() => restoreWikitextRenderDocument(payload), [payload]); return ; } ``` ```tsx // app/layout.tsx import "react-wikitext/styles.css"; ``` - 服务端准备阶段只调用 `/parse` 与 `/hast`;这两个入口不加载 React。 - 客户端组件只负责恢复与渲染,不重新解析。 - 根入口与 `/view` 带 `"use client"`,Next.js 会把它们视为客户端边界:可以在 Server Component 中直接渲染,但解析随之发生在客户端。需要服务端解析时,按上面的页面组件先准备快照。 - 在其他 SSR 环境中,可以用 `renderToStaticMarkup` 渲染 `WikitextView`,再让客户端用同一份快照 hydrate。 ## Vite 与其他 SSR 普通 SSR 的思路相同:服务端准备快照,把它作为页面数据发送给客户端,客户端用 `/view` 恢复并挂载。 ```ts // server entry const payload = serializeWikitextRenderDocument(prepareWikitext(document)); const html = template.replace("__WIKITEXT__", JSON.stringify(payload).replace(/` 提前结束脚本。 - 如果页面要由搜索引擎直接读取正文,可以在服务端渲染 `WikitextView`;此时客户端必须用同一份快照、同一棵树 hydrate。 ## Hydration 与锚点 - `headingIdStrategy: "instance"` 使用 `useId` 生成实例前缀,服务端与客户端渲染同一棵树时保持一致。 - 如果服务端与客户端结构不同,或同一页有多个实例,显式传入 `idPrefix` 固定前缀。 - 需要与宿主约定裸锚点(例如已有 `#Section` 链接)时,使用 `headingIdStrategy: "mediawiki"`;它假设页面只有一个实例。 - `headingIdStrategy: "none"` 不写 id,也不生成目录链接,适合不需要锚点的嵌入式展示。 ## 缓存 渲染快照可以缓存,但键必须覆盖所有影响输出的输入: - `AST_SCHEMA_VERSION`、`RENDER_SCHEMA_VERSION` 与解析器版本。 - 源码与 `pageName`。 - 站点配置(`config`)。 - `prepareOptions`:解析函数、插件、`policy`、`labels`、`headingIdStrategy` 与 `handlers`。 恢复函数会拒绝版本不匹配的快照;升级库或解析器时应让缓存整体失效。解析结果的缓存策略见[性能与预算](/zh/guide/performance.md)。 ## 相关 - [基本用法](/zh/guide/usage.md):源码组件与显式管线。 - [准备 `/hast`](/zh/api/prepare.md):序列化、恢复与预算。 - [安全模型](/zh/guide/security.md):快照信任边界。 --- url: /zh/guide/rendering.md --- > For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt. # 渲染行为 本文描述默认管线**实际会输出什么**。库不会为了外观相似而推断语义:无法安全或正确表达的结构会明确降级为源码卡片或占位。如果只想查某段语法会被怎么处理,见[支持矩阵](/zh/guide/syntax-support.md)。 ## 段落、文本与格式 - 连续行内内容聚合为 `

`;两个及以上空行切分段落,单个换行折叠为空格。 - 粗体、斜体来自 MediaWiki 引号语法,输出 `` / ``;粗斜同时开启时为 `…`。 - 标题输出真实 `

`–`
`,并参与标题锚点与目录。 - 水平线输出 `
`。 - 注释、分类与行为开关不进入正文;分类汇总到文末底栏,行为开关只影响目录。 ## 列表 - `*`、`#`、`;`、`:` 前缀生成嵌套的 `