Skip to content

SwingCosmic/unity-richtext-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

unity-richtext

一个可扩展的Unity富文本解析器和DOM转换器

Features

  • 采用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实体转义,可用&lt;代替<
  • 空白字符的解析行为取决于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注入

About

A js library for converting Unity RichText to DOM

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors