PyQT Qscintilla Progress 4gl

Недавно я возился с созданием собственного редактора Progress 4GL, реализовав QsciLexerCustom в своем приложении Python. Но просматривая исходный код Qscintilla, я заметил, что у них уже есть лексер progress 4gl в QScintilla/lexers/LexProgress.cpp, но при чтении http://www.riverbankcomputing.com/static/Docs/QScintilla2/annotated.html они не указывают какой-либо класс QsciLexerProgress или какие-либо средства доступа к этому лексеру, которые я вижу.

Кто-нибудь знает как это сделать?

Любая помощь приветствуется.


person Robert Edwards    schedule 18.12.2012    source источник
comment
Привет Роберт. Возможно, этот сайт поможет: qscintilla.com   -  person K.Mulier    schedule 25.01.2017


Ответы (2)


QScintilla, по-видимому, является портом Scintilla для использования графического интерфейса Qt. Вероятно, для переноса лексера требуется немного работы, поэтому они, вероятно, просто не тратили время на портирование лексеров для непопулярных языков.

Другими словами, я думаю, что файл .cpp, который вы нашли, является просто остатком от Scintilla, который так и не был портирован на QScintilla, но все еще находится в их кодовой базе.

person Abe Voelker    schedule 18.12.2012
comment
Спасибо, я боялся, что это так. - person Robert Edwards; 18.12.2012
comment
@РобертЭдвардс. Этот ответ совершенно неверен. Пожалуйста, смотрите мой ответ для правильного объяснения (и потенциального решения). - person ekhumoro; 18.12.2012
comment
@ekhumoro Я не имел в виду, что лексеры нужно было переписать, я имел в виду, что будет некоторая работа, чтобы заставить их работать под QScintilla, что подробно объясняется в вашем посте. Возможно, слово «порт» было неправильным, но тот факт, что каждый лексер должен быть заключен в класс QsciLexer*, я думаю, доказывает мою точку зрения. Эта работа просто не была сделана для лексера Progress. - person Abe Voelker; 18.12.2012
comment
@AbeVoelker. Да, лексеры не нужно портировать, и файл .cpp не является остатком - это часть библиотеки Scintilla, которая скомпилирована в QScintilla. Таким образом, все лексеры полностью доступны для использования Qscintilla, просто их нужно настроить для правильной работы. Вот для чего нужны классы QsciLexer* (и их создание не составляет большого труда). Сказав все это, первое предложение вашего ответа верно правильное, так что, возможно, совершенно неправильное было немного резким ;-) - person ekhumoro; 19.12.2012

Классы QSciLexer* названы ошибочно. Они вообще не лексеры. Скорее они предоставляют оболочку для файлов свойств, используемых редактором на основе Scintilla, SciTE. . Файлы свойств содержат все настройки (шрифты, цвета, ключевые слова и т. д.), необходимые для настройки определенного лексического модуля Scintilla.

По умолчанию QScintilla не предоставляет класс QsciLexer* для каждого языка, который поддерживает Scintilla. Он просто предоставляет языки для наиболее часто используемых языков, а также те, которые запрашиваются пользователями в списке рассылки< /а>. Насколько я знаю, автор Qscintilla рад добавить класс QsciLexer* для любого языка, поддерживаемого Scintilla, — единственным требованием является наличие пригодного для использования файла свойств SciTE для соответствующего лексера.

К сожалению, текущие исходники SciTE не включают файл свойств для лексера Progress 4GL! Однако вполне возможно, что кто-то создал его когда-то, поэтому небольшой поиск, скорее всего, даст его. В противном случае вы всегда можете создать его самостоятельно.

PS: Это реально раздражает, что QScintilla не позволяет классу QsciLexer быть подклассом должным образом (некоторые критические виртуальные функции не являются общедоступными). Если бы это было так, можно было бы создать пользовательский класс-оболочку для любого языка, поддерживаемого Scintilla, без необходимости просить автора Qscintilla добавить его.

person ekhumoro    schedule 18.12.2012