如何实现jQuery Terminal中可重叠格式的字符串注入算法?
寻求正确注入可重叠格式的算法(jQuery Terminal unix_formatting扩展)
我基于付费项目重构了jQuery Terminal的unix_formatting扩展(一款处理ANSI转义码的格式化工具),已获许可将代码用于开源项目。此前仅需输出纯文本,现在需要将解析后的结构转换为jQuery Terminal的格式。
解析完成后得到的结构示例:
var data = [ { text: " the knight ▄▄▄▄▄ fuel", formatting: [ {start: 55, end: 65, format: '[[b;#555;#000]'}, {start: 65, end: 66, format: '[[;#000;]'}, {start: 66, end: 76, format: '[[b;#555;]'} ] }
jQuery Terminal的格式规则:以format字段内容作为开启标记,单个]作为关闭标记,格式允许重叠。
原本使用库中的$.terminal.substring函数处理,但该函数在处理长文本(如需拆分的ANSI Art大文本)时性能较差。我尝试了预处理注入算法,但在复杂ANSI Art(如Denis Ritchie的作品)测试中失效,部分格式标记直接显示——原因是格式插入后改变了字符串长度,而原start/end标记基于无格式文本的位置。
相关代码片段:
function format_lines(str, len) { str = $.terminal.apply_formatters(str, { unixFormatting: { format_text: function(line) { // return line.text; return format_text(line); }, ansiArt: true } }); ... }
其中format_text函数接收上述解析后的结构,当前实现无效。
内容的提问来源于stack exchange,提问作者jcubic
相关产品推荐
相关产品推荐

