Adicionando um novo lexer ao scintilla/scite (… e eventualmente wxPython StyledTextCtrl)
-
18-09-2020 - |
Pergunta
Alguém de vocês adicionou com sucesso um lexer ao scintilla?
Tenho seguido as breves instruções em http://www.scintilla.org/SciTELexer.html - e até descobri as instruções extras secretas em http://www.scintilla.org/ScintillaDoc.html#BuildingScintilla (Mudando o conjunto de Lexers)
Tudo é compilado e posso adicionar o lexer ao SciTE perfeitamente, mas meu método ColouriseMapfileDoc simplesmente não é chamado (um printf não produz saída).Se eu adicionar o mesmo código, por exemplo.o lexer ColouriseLuaDoc, está tudo bem (um printf faz produzir saída).
Especificamente eu tenho
- Em
scintilla/include/Scintilla.iface
, adicionadoval SCLEX_MAPFILE=99
- E quaisquer IDs de classe lexical
- No diretório scintilla/include execute
HFacer.py
e confirmou queSciLexer.h
arquivo foi alterado. - Criada
LexMapfile.cxx
com umColouriseMapfileDoc
função No final do arquivo associe o ID e o nome do lexer à função:
LexerModule lmMapfile(SCLEX_MAPFILE, ColouriseMapfileDoc, "mapfile");
Correr
LexGen.py
para gerar todos os makefiles (de acordo com as instruções secretas)- Criou um novo arquivo de propriedades SciTE clonando
scite/src/others.properties
- Configure alguns estilos
- Em
scite/src/SciTEGlobal.properties
adicionado$(filter.conf)
para a definição deopen.filter
. - Adicionado este idioma ao menu Idioma do SciTE,
- Construiu o Scintilla e o SciTE.
- Resmungou e amaldiçoou.
O que estou fazendo de errado, exceto talvez a etapa 12?
Solução
Caso alguém leia esta pergunta no futuro - você também terá que adicionar uma linhaimport yourformat
em SciTEGlobal.properties
.Essa é a etapa 9b não documentada.
Outras dicas
Caso alguém leia essa pergunta no futuro - você também precisará adicionar uma linha importar seu formato em sciteglobal.properties.Essa é a etapa 9b não documentada.
Esta etapa não é mais necessária.Compilei o 3.2.2 e isso foi feito com import *.O restante das etapas ainda está completo e relevante.
Estou torcendo um lexer diretamente scintilla/lexer/LexOthers.cxx
conforme descrito em http://www.scintilla.org/SciTELexer.html.Para o scite 3.2.3, a etapa 5b que falta é que você precisa adicionar LINK_LEXER(lmYouLexerMod);
em scintilla/src/Catalogue.cxx
.