Delphi SynEdit 无法识别列表中的所有关键字 (Python)

Delphi SynEdit does not recognize all Keywords from the list (Python)

我在 Delphi XE6 应用程序中使用存储库中的 SynEdit r117。 我想突出显示 Python 代码。

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

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

有一个部分包含 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" 之后列表中的所有其他内容将不会突出显示。

有谁知道是什么导致了这次失败?

谢谢!

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

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

我 := FKeywords.IndexOf(s);

The search functions are documented on this link