Améliorer la coloration syntaxique du langage TCL dans Notepad++
Corrections à apporter dans le projet scintilla
La coloration syntaxique de TCL/TK est gérée dans par scintilla. Il faut modifier le fichier LexTCL.cxx puis compiler la solution avec VC++2008 pour obtenir scilexer.dll.
Les améliorations concernent l'ajout de règles de gestions...
Corrections à apporter dans le projet notepad ++
Il faut modifier les fichiers suivants :
- http://leohome.free.fr/download/npp/ScintillaEditView.cpp
- http://leohome.free.fr/download/npp/ScintillaEditView.h
[Note] Les fichiers langs.xml, langs.model.xml et styler.model.xml ont aussi été modifiés pour améliorer la coloration syntaxique.
Corrections dans ScintillaEditView.h
//suppression HL //void setTclLexer(); //fin suppression HL void setObjCLexer(LangType type); void setUserLexer(const TCHAR *userLangName = NULL); void setExternalLexer(LangType typeDoc); void setEmbeddedJSLexer(); void setPhpEmbeddedLexer(); void setEmbeddedAspLexer(); //Simple lexers // ajout HL void setTclLexer() { setLexer(SCLEX_TCL, L_TCL, LIST_0 | LIST_1 | LIST_2 | LIST_3 | LIST_4 | LIST_5 | LIST_6); }; // fin ajout HL
Corrections dans ScintillaEditView.cpp
Elles consistent à mettre en commentaire les lignes suivantes :
/* void ScintillaEditView::setTclLexer() { const char *tclInstrs; const char *tclTypes; execute(SCI_SETLEXER, SCLEX_TCL); const TCHAR *pKwArray[10] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; makeStyle(L_TCL, pKwArray); basic_string<char> keywordListInstruction(""); basic_string<char> keywordListType(""); if (pKwArray[LANG_INDEX_INSTR]) { #ifdef UNICODE basic_string<wchar_t> kwlW = pKwArray[LANG_INDEX_INSTR]; keywordListInstruction = wstring2string(kwlW, CP_ACP); #else keywordListInstruction = pKwArray[LANG_INDEX_INSTR]; #endif } tclInstrs = getCompleteKeywordList(keywordListInstruction, L_TCL, LANG_INDEX_INSTR); if (pKwArray[LANG_INDEX_TYPE]) { #ifdef UNICODE basic_string<wchar_t> kwlW = pKwArray[LANG_INDEX_TYPE]; keywordListType = wstring2string(kwlW, CP_ACP); #else keywordListType = pKwArray[LANG_INDEX_TYPE]; #endif } tclTypes = getCompleteKeywordList(keywordListType, L_TCL, LANG_INDEX_TYPE); execute(SCI_SETKEYWORDS, 0, (LPARAM)tclInstrs); execute(SCI_SETKEYWORDS, 1, (LPARAM)tclTypes); } */
Mettre à jour la version de Notepad ++ dans npp 5.7
Tout se passe dans les fichiers ressource.h
et Notepad_plus.rc
- Editer le fichier
\PowerEditor\src\resource.h
- modifier la ligne
#define NOTEPAD_PLUS_VERSION TEXT("Notepad++ v5.7.0.1 modifié pour TCL/TK")
- Editer le fichier
\PowerEditor\src\Notepad_plus.rc
- modifier la ligne :
LTEXT NOTEPAD_PLUS_VERSION, IDC_STATIC,70,20,165,11
- modifier la ligne :
LTEXT UNICODE_ANSI_MODE, IDC_STATIC,210,20,65,11
Modifications supplémentaires pour le fonctionnement sous wine
Sous wine 1.2, l'IHM "Searching...\nPress Enter to Cancel" gèle lors de la recherche dans des fichiers. Pour y remédier, je désactive l'affichage de cette IHM dans le fichier PowerEditor\src\Notepad_plus.cpp
(à 2 endroits) :
// modification HL //if (fileNames.size() > 1) // CancelThreadHandle = ::CreateThread(NULL, 0, AsyncCancelFindInFiles, _hSelf, 0, NULL); // fin modification HL
- désactiver la mise à jour automatique des fichiers (cf. config.xml)
- définir la taille de la tabulation à 3 caractères (cf. config.xml)
- à faire : affichage des bulles d'aide (problème complexe à résoudre)
Compiler npp 5.7
la compilation s'effectue sous VC++2008 :
- ouvrir le projet npp
- dans les propriétés du projet, effacer les commandes dans évènement de génération > évènement après génération > ligne de commande.
- lancer la compilation
Corrections à apporter dans l'installation
- ajouter le fichier
tcl.xml
dans installer/APIs - ajouter les fichiers suivants dans bin :
- notepad++.exe
- scilexer.dll
- NppShell64_01.dll
- contextMenu.xml
- langs.xml
- lang.model.xml
- config.model.xml (pour désactiver la mise à jour automatique des fichiers)
- styler.model.xml
- change.log
- ajouter les plugins suivants dans bin/plugins
- Function List (y compris le fichier xml de personnalisation des règles pour tcl/tk)
- Light explorer
- xml tools
- XBracketLight
- SnippetPlus
- modifier le script de création d'installation nsi
à compléter : mettre en ligne le fichier nppSetup5.7.0.1.nsi
Mettre à jour la version de Notepad ++ dans npp 5.51 (obsolète)
- Editer le fichier
\PowerEditor\src\resource.h
- modifier la ligne
##define NOTEPAD_PLUS_VERSION TEXT("Notepad++ v5.5.1.1 modifié pour TCL/TK")
- http://leohome.free.fr/download/npp/resource.h
- Editer le fichier Notepad_plus.rc
- modifier la ligne :
LTEXT NOTEPAD_PLUS_VERSION, IDC_STATIC,50,16,150,19
- modifier la ligne :
LTEXT UNICODE_ANSI_MODE, IDC_STATIC,200,16,65,11
Scripts modifiés pour intégrer la coloration syntaxique du langage TCL (obsolète)
Script d'installation modifié
http://leohome.free.fr/download/npp/notepad++5.01.2.nsi
Corriger la coloration syntaxique de tcl dans npp 5.01
1 / dans ScintillaEditView.cpp :
switch (typeDoc) { case L_C : case L_CPP : case L_JS: case L_JAVA : case L_RC : case L_CS : remove-> case L_TCL : setCppLexer(typeDoc); break;
...
case L_LUA : setLuaLexer(); break; add -> case L_TCL : add -> setTclLexer(typeDoc); break; case L_MAKEFILE : setMakefileLexer(); break;
2/ in ScintillaEditView.h
void setLuaLexer() { setLexer(SCLEX_LUA, L_LUA, LIST_0 | LIST_1 | LIST_2 |LIST_3); }; add -> void setTclLexer() { add -> setLexer(SCLEX_TCL, L_TCL, LIST_0 | LIST_1 | LIST_2 | LIST_3 | LIST_4 | LIST_5 | LIST_6); add -> }; void setMakefileLexer() { execute(SCI_SETLEXER, SCLEX_MAKEFILE); makeStyle(L_MAKEFILE); };