【问题标题】:Delphi SynEdit does not recognize all Keywords from the list (Python)Delphi SynEdit 无法识别列表中的所有关键字(Python)
【发布时间】:2015-06-17 00:58:47
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 所有源文件都会出现这个问题吗?一个只包含 import sys 的文件怎么样?
  • 我已经改成://关键字列表KEYWORDCOUNT = 2;关键字:数组 [1..KEYWORDCOUNT] of UnicodeString = ('import');它无法识别“导入”,这似乎不是数组中位置的问题。这是单词本身的问题……我已经用 JScript 试过了。现在可以识别像导入这样的词。但我需要python...

标签: python delphi syntax-highlighting highlighting synedit


【解决方案1】:

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

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

I := FKeywords.IndexOf(s);

The search functions are documented on this link

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多