0

我在我的 Delphi XE6 应用程序中使用存储库中的 SynEdit r117。我想强调 Python 代码。

为此,我在我的表单上放置了一个 SynEdit 组件。另外,我将组件 SynPythonSyn 添加到它上面。我已经通过 Objectinspector 连接了它们。

现在我可以突出显示一些 Python 关键字。经过几个小时的搜索,我打开了 SynEdit 的 Package ZIP 中包含的 Sourcfile SynHighlighterPython.pas。

有一个部分包含python的所有关键字:

 // List of keywords
  KEYWORDCOUNT = 29;
  KEYWORDS: array [1..KEYWORDCOUNT] of UnicodeString =
    (
    'and',
    'assert',
    'break',
    'class',
    'continue',
    'def',
    'del',
    'elif',
    'else',
    'except',
    'exec',
    'finally',
    'for',
    'from',
    'global',
    'if',
    'import',
    'in',
    'is',
    'lambda',
    'not',
    'or',
    'pass',
    'print',
    'raise',
    'return',
    'try',
    'while',
    'yield'
    ); 

我的问题是,“exec”是最后一个突出显示的关键字。“exec”之后列表中的所有其他内容都不会突出显示。

有谁知道什么可能导致这个失败?

谢谢!

4

1 回答 1

0

我能够让语法突出显示工作。SynHighligterPython.pas 中填充的单词列表似乎在一个列表中包含关键字和非关键字。然后它假定组合列表已排序。

因此问题出现在使用 FKeywords.Find(s, i) 搜索匹配关键字的 Function IdentKind(Maybe:PWideChar) 中。根据定义,“查找”仅适用于排序列表。我的解决方法是更改​​此行以使用 indexof 函数进行搜索,如下所示。

我 := FKeywords.IndexOf(s);

搜索功能记录在此链接上

于 2016-05-23T00:21:19.377 回答