首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在现有Scintilla lexer上创建和着色新构造

在现有Scintilla lexer上创建和着色新构造
EN

Stack Overflow用户
提问于 2014-02-25 17:09:41
回答 2查看 1.1K关注 0票数 3

全,

我正在使用QScintilla语法-高亮显示我的领域特定语言(DSL)。

因为我的DSL是基于python的,所以我为QScintilla使用了现有的Python。我设法创建新的关键字如下:

代码语言:javascript
运行
复制
self.text = Qscintilla(self)
pythonLexer = QsciLexerPython(self.text)
self.text.setLexer(pythonLexer)
self.text.SendScintilla(QsciScintilla.SCI_SETKEYWORDS,1,bytes('WARNING', 'utf-8'))

现在,我如何选择一个颜色来突出我新创建的关键字?

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2014-02-25 19:07:34

当涉及到高亮显示一组关键字时,QsciLexerPython是非常有限的,因为它只给您两个可玩的。这个限制是由底层Scintilla库中的Python类施加的,因此没有什么可做的(除非您希望创建一个修补程序)。

但是,如果只需要突出显示一组额外的关键字,则可以将QsciLexerPython子类并重新实现其关键词方法:

代码语言:javascript
运行
复制
class CustomLexer(QsciLexerPython):
    def keywords(self, keyset):
        if keyset == QsciLexerPython.HighlightedIdentifier:
            return b'WARNING'
        return QsciLexerPython.keywords(self, keyset)

有了这一点,您就可以对样式进行设置颜色、字体等

代码语言:javascript
运行
复制
    pythonLexer = CustomLexer(self.text)
    pythonLexer.setColor(
        QColor('purple'), QsciLexerPython.HighlightedIdentifier)
    ...

(PS:注意关键字只能包含0-255范围内的单字节字符)

票数 0
EN

Stack Overflow用户

发布于 2017-05-13 18:02:22

为了获得更大的灵活性,您可以考虑构建您自己的自定义lexer,而不是从现有的QsciLexerPython 1派生的。小心-这会是更多的工作。

QScintilla为此目的提供了QsciLexerCustom类。您必须像这样对它进行子类划分:

代码语言:javascript
运行
复制
class MyLexer(QsciLexerCustom):

    def __init__(self, parent):
        super(MyLexer, self).__init__(parent)
        [...]
    ''''''

    def language(self):
        [...]
    ''''''

    def description(self, style):
        [...]
    ''''''

    def styleText(self, start, end):
        # Called everytime the editors text has changed
        [...]
    ''''''

'''--- end class ---'''

请注意以下各部分:

  • __init__(self, parent):构造函数通常是您创建样式对象的地方。
  • language(self):此方法必须返回语言的名称。你必须实现它,但是我不清楚它究竟被用来做什么。
  • description(self, style_nr):返回给定样式的描述性名称。
  • styleText(self, start, end):每次编辑文本发生变化时都会被调用。在这里您实现了语法高亮!

有关更多详细信息,请访问以下网站:https://qscintilla.com/subclass-qscilexercustom/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22021294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档