如何存储语法突出显示的文本

How to store syntax-highlighted text?

本文关键字:显示 文本 语法 何存储 存储      更新时间:2023-10-16

我正在创建一个简单的文本编辑器,从头开始语法高亮显示作为学校项目。现在,我使用QStringList来存储文本数据,但稍后我将添加语法高亮功能,我不知道我应该如何存储数据。

一种选择是根本不保存颜色信息,并不断地从代码解析器中获取它。但这可能非常低效。

也许更好的想法是,每一行都有一个结构体列表(包含颜色和字符串),它将存储文本中每个单词的颜色。但我也不确定这能有多快。

存储这些数据的最佳方式是什么?

谢谢

我将建议两种方法。

方法1:使用属性存储文本
将数据结构更改为结构的容器。该结构将包含一个文本字符串和一个样式变量:
struct Text_With_Properties
{
  std::string text;
  Properties  text_properties;
};

这可能会占用更多的空间,可能不是最有效的方法。

方法2:解析样式更改
许多编辑器将以正常字体显示文本,然后对样式更改进行另一次解析。例如,当在第二遍中发现c++关键字时,编辑器将更改其样式。

此方法不需要更多的数据空间,但需要更多的处理时间。

这个问题可能太宽泛了。但是您可能会使用HTML标记。它还提供了一种简单的测试方法,因为您可以在浏览器中打开输出。