一个可扩展的Unity富文本解析器和DOM转换器
- 采用ANTLR4解析,支持多种富文本标签语法
- 兼容大部分HTML语法,并且支持HTML实体转义如
< - 支持UGUI, TextMeshPro, 和UI Toolkit各自的版本
- 针对不同标签的转换器可以扩展和自定义替换
- 支持插值表达式,并且可以自定义插值语法和处理器
- 未知标签和属性可以转换为回退默认元素,默认为
<span> - 可以用来处理半结构化的LLM/agent输出内容,混合了大量文本和自定义标签如
<think>和<file_content>
示例:采用了自定义标签解析器、自定义插值处理器(Ruby和图标)并忽略未知标签的HTML渲染结果,数据内容来自游戏《崩坏:星穹铁道》
<br />简单自闭标签<u>underline</u>简单成对标签<a href="https://github.com">GitHub</a>带普通属性的标签,支持成对和自闭形式。属性值只包含字母数字时可以省略引号<color=#FF0000>red text</color>默认属性标签,支持成对和自闭形式
<!-- comment -->注释标签
- 除
<外的任何字符均可作为文本内容 - 支持HTML实体转义,可用
<代替< - 空白字符的解析行为取决于DOM API,通常情况下会压缩空格
- 所有标签必须闭合。
- 未闭合的自闭标签(如
<br>)在Unity和HTML中是允许的, 但由于需要准备自闭标签白名单才能和成对标签区分,因此不支持 - 丢失结束标签的成对标签可能不会造成语法错误,但行为未定义。 在浏览器的DOM解析中,通常会导致标签内容应用到文档末尾
- 未闭合的自闭标签(如
import UnityRichText from 'unity-richtext';
const text = `<color=#FFFF00>Hello, ${name}!</color>`;
UnityRichText.parseToHTML(desc, {
name: 'World'
});
// <span style="color: #FFFF00;">Hello, World!</span>您可以自定义插值处理器来应对各种字符串插值表达式。
例如,使用lodash.template来将${expr}风格换成<%= expr %>。
- 插值处理器支持返回HTML,但需要自行处理以防止XSS注入
