Пользовательское выделение Python wx.stc - PullRequest
4 голосов
/ 18 октября 2011

Из-за отсутствия ответов во многих случаях и хороших ответов, которые я получил здесь, вот мой вопрос.

Я пишу программу для языка музыкальной нотации ABC (пример приведен ниже).Этот язык не поддерживается в wx.stc , и я пока не нашел хорошего объяснения или примера того, как:

  1. добавить свой собственный лексер / маркер
  2. создать свой собственный маркер с нуля и использовать RichTextCtrl или тому подобное.

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

Пример записи ABC:

%% this is a midi or postscript argument, and should be colored 
X: 1   % this is a comment and should be colored differently
T: Speed The Plough   % everything followed by a colon, except for |: should be colored
M: 4/4   % a variety of others should be colored
L: 1/8
R: reel
K: Dmaj
d3A BAFB|AF~F2 EFDE|F2AF ~G3B|   % the non-alphanumerics should be colored
ABdg fgfe|d3A BAFB|AF~F2 EFDE|
F2AF GABG|1ABdg fedc:|2ABde fdde||
|:f2ab afdf|g2fg ed (3Bcd|a2ab afdB|   % | and |: should be colored differently
ABde fe~e2|f2ab afdf|g2fg edBA|
[1F2AF GABG|ABdg fddg:|2F2AF ~G3B|ABdg fgfe||

Ответы [ 2 ]

3 голосов
/ 07 декабря 2012

Чтобы сделать это в Python, вам нужно установить для лексера значение «container» и затем обработать событие «style-required»:

self.SetLexer(wx.stc.STC_LEX_CONTAINER)
self.SetStyleBits(5)
self.Bind(wx.stc.EVT_STC_STYLENEEDED, self.handleStyleNeeded)

То, что вы будете делать внутри обработчика, очевидно, будет зависетьо деталях синтаксиса, который вы пытаетесь выделить.

Для вдохновения я бы посоветовал вам ознакомиться с документацией по сцинтилле по стилю и взглянуть на источник код некоторых более простых встроенных лексеров.

Небольшое прибегание к поиску также нашло этот пример wx.stc , который может быть полезен.

0 голосов
/ 06 декабря 2012

Основываясь на имеющемся у вас теге "scintilla", я предполагаю, что вы знаете, что Scintilla - это то, что лежит в основе wx.stc.StyledTextCtrl.

Мне удалось найти краткое руководство по добавлениюнемного нового стиля для Scintilla: http://sphere.sourceforge.net/flik/docs/scintilla-container_lexer.html

Это довольно низкоуровневый и не Python.Я бы хотел сделать это комментарием, а не «ответом», но у меня пока недостаточно репутации для этого.

...