QScintilla 语法高亮与 QsciLexerCustom - UTF-8 问题

问题描述

我在我的 C++ Qt 项目中使用 QScintilla 作为文本编辑器,并希望为我的自定义(ish)语言突出显示语法。

按照我找到的一个很好的指南 (qscintilla),我对 QsciLexerCustom 进行了子类化并实现了所有必要的方法,特别是 QsciLexerCustom::styleText。一切似乎都很好,直到我在编辑器中编写了一个非 ASCII 字符,这使得高亮显示发生了变化。经过一番调查,我发现密钥在 UTF8 的不同字符长度中最相似。这是我的 styleText 方法的开始:

void TemplateHighlighter::styleText(int start,int end)
{
    startStyling(start);

    const auto editor = qobject_cast<QsciScintilla*>(parent());
    mText = editor->text(start,end);
    mTextPos = 0;

    // do the work
}

现在例如,如果编辑器包含非 ASCII 文本,如 č-č-č,则使用 start == 0end == 8 调用 styleText 方法,因为这是 Scintilla UTF- 8 个缓冲器(3x 2B 加 2x 1B)。但是我从编辑器获得的这个范围的 QString 只有 5 个字符。因此,当我使用 setStyling(5,Styles::Example) 为整个字符串设置样式时,这还不够,因为这意味着我还没有为我要求的所有内容设置样式,至少最后一个 č 不会设置样式。

我试图想办法解决这个问题,但真的没有看到任何合理的选择,如果我想坚持使用 QStrings 并且不想使用原始缓冲区,这会使我的整个词法分析器实现无用.有什么我想念的吗?或者一些或多或少合理的解决方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)