2015-04-11 17 views
0

Я использую SynEdit r117 из репозитория в приложении Delphi XE6. Я хотел бы выделить код Python.Delphi SynEdit не распознает все ключевые слова из списка (Python)

Для этого я поместил компонент SynEdit в свою форму. Дополнительно я добавил компонент SynPythonSyn на него. Я связал их через Objectinspector.

Теперь я могу выделить НЕКОТОРЫЕ ключевые слова Python. После нескольких часов поиска я открыл Sourcfile SynHighlighterPython.pas , который был включен в пакет ZIP SynEdit.

Существует раздел со всеми Ключевыми словами питона:

// 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» не будут подсвечены.

Кто-нибудь может понять, что может послужить причиной такого отказа?

Спасибо!

+0

Возникает ли эта проблема для всех исходных файлов? Как насчет файла, содержащего, скажем, ** import ** sys –

+0

Я изменил его на: // Список ключевых слов KEYWORDCOUNT = 2; КЛЮЧЕВЫЕ СЛОВА: массив [1..KEYWORDCOUNT] от UnicodeString = ( 'import' ); Не удалось распознать «импорт» , кажется, что это не проблема положения в массиве. Это проблема самого слова ... Я попробовал это с JScript. Слова, такие как импорт, были признаны сейчас. Но мне нужен python ... –

ответ

0

Я смог получить подсветку синтаксиса. Похоже, что список слов, заполненных в SynHighligterPython.pas, содержит ключевые слова и NonKeywords в одном списке. Затем он предполагает, что объединенный список сортируется.

Таким образом, проблема возникает в функции IdentKind (возможно: PWideChar), которая использует FKeywords.Find (s, i) для поиска соответствующего ключевого слова. «Поиск» по определению работает только в отсортированном списке. Мое обходное решение состояло в том, чтобы изменить эту строку, чтобы использовать функцию indexof для поиска, как показано ниже.

I: = FKeywords.IndexOf (s);

The search functions are documented on this link

 Смежные вопросы

  • Нет связанных вопросов^_^