Remove the external lexer support
SCI_LOADLEXERLIBRARY has been removed since Scintilla 5, and I belive that Scintilla won't support it anymore: https://sourceforge.net/p/scintilla/bugs/2236/ Close #11451
This commit is contained in:
parent
a61b03ea88
commit
41a5bf0245
|
@ -55,6 +55,8 @@ UpgradeLog*.htm
|
|||
*.bak
|
||||
|
||||
PowerEditor/bin/notepad++.exe
|
||||
PowerEditor/bin/Notepad++.exp
|
||||
PowerEditor/bin/Notepad++.lib
|
||||
PowerEditor/bin/SciLexer.dll
|
||||
PowerEditor/bin/config.xml
|
||||
PowerEditor/bin/stylers.xml
|
||||
|
|
|
@ -23,7 +23,6 @@ class FileNameStringSplitter
|
|||
public:
|
||||
FileNameStringSplitter(const TCHAR *fileNameStr)
|
||||
{
|
||||
//if (!fileNameStr) return;
|
||||
TCHAR *pStr = NULL;
|
||||
bool isInsideQuotes = false;
|
||||
const int filePathLength = MAX_PATH;
|
||||
|
|
|
@ -35,7 +35,7 @@ enum LangType {L_TEXT, L_PHP , L_C, L_CPP, L_CS, L_OBJC, L_JAVA, L_RC,\
|
|||
L_REGISTRY, L_RUST, L_SPICE, L_TXT2TAGS, L_VISUALPROLOG, L_TYPESCRIPT,\
|
||||
// Don't use L_JS, use L_JAVASCRIPT instead
|
||||
// The end of enumated language type, so it should be always at the end
|
||||
L_EXTERNAL};
|
||||
L_END};
|
||||
enum class ExternalLexerAutoIndentMode { Standard, C_Like, Custom };
|
||||
enum class MacroStatus { Idle, RecordInProgress, RecordingStopped, PlayingBack };
|
||||
|
||||
|
@ -456,6 +456,10 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64, PF_ARM64 };
|
|||
HICON hToolbarIconDarkMode;
|
||||
};
|
||||
|
||||
// Due to Scintilla 5 doesn't support external lexer, the following 2 messages are deprecated - they do nothing and return always FALSE
|
||||
#define NPPM_GETEXTERNALLEXERAUTOINDENTMODE_DEPRECATED (NPPMSG + 103)
|
||||
#define NPPM_SETEXTERNALLEXERAUTOINDENTMODE_DEPRECATED (NPPMSG + 104)
|
||||
/*
|
||||
#define NPPM_GETEXTERNALLEXERAUTOINDENTMODE (NPPMSG + 103)
|
||||
// BOOL NPPM_GETEXTERNALLEXERAUTOINDENTMODE(const TCHAR *languageName, ExternalLexerAutoIndentMode &autoIndentMode)
|
||||
// Get ExternalLexerAutoIndentMode for an installed external programming language.
|
||||
|
@ -471,7 +475,7 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64, PF_ARM64 };
|
|||
// - C_Like means Notepad++ will perform a C-Language style indentation for the selected external language;
|
||||
// - Custom means a Plugin will be controlling auto-indentation for the current language.
|
||||
// returned value: TRUE if function call was successful, otherwise FALSE.
|
||||
|
||||
*/
|
||||
#define NPPM_ISAUTOINDENTON (NPPMSG + 105)
|
||||
// BOOL NPPM_ISAUTOINDENTON(0, 0)
|
||||
// Returns the current Use Auto-Indentation setting in Notepad++ Preferences.
|
||||
|
|
|
@ -173,82 +173,17 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath)
|
|||
// it's a lexer plugin
|
||||
if (GetLexerCount)
|
||||
{
|
||||
GetLexerNameFn GetLexerName = (GetLexerNameFn)::GetProcAddress(pi->_hLib, "GetLexerName");
|
||||
if (!GetLexerName)
|
||||
throw generic_string(TEXT("Loading GetLexerName function failed."));
|
||||
|
||||
GetLexerStatusTextFn GetLexerStatusText = (GetLexerStatusTextFn)::GetProcAddress(pi->_hLib, "GetLexerStatusText");
|
||||
|
||||
if (!GetLexerStatusText)
|
||||
throw generic_string(TEXT("Loading GetLexerStatusText function failed."));
|
||||
|
||||
// Assign a buffer for the lexer name.
|
||||
char lexName[MAX_EXTERNAL_LEXER_NAME_LEN];
|
||||
lexName[0] = '\0';
|
||||
TCHAR lexDesc[MAX_EXTERNAL_LEXER_DESC_LEN];
|
||||
lexDesc[0] = '\0';
|
||||
|
||||
int numLexers = GetLexerCount();
|
||||
|
||||
ExternalLangContainer *containers[30];
|
||||
|
||||
WcharMbcsConvertor& wmc = WcharMbcsConvertor::getInstance();
|
||||
for (int x = 0; x < numLexers; ++x)
|
||||
{
|
||||
GetLexerName(x, lexName, MAX_EXTERNAL_LEXER_NAME_LEN);
|
||||
GetLexerStatusText(x, lexDesc, MAX_EXTERNAL_LEXER_DESC_LEN);
|
||||
const TCHAR *pLexerName = wmc.char2wchar(lexName, CP_ACP);
|
||||
if (!nppParams.isExistingExternalLangName(pLexerName) && nppParams.ExternalLangHasRoom())
|
||||
containers[x] = new ExternalLangContainer(pLexerName, lexDesc);
|
||||
else
|
||||
containers[x] = NULL;
|
||||
}
|
||||
|
||||
TCHAR xmlPath[MAX_PATH];
|
||||
wcscpy_s(xmlPath, nppParams.getNppPath().c_str());
|
||||
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
||||
PathAppend(xmlPath, pi->_moduleName.c_str());
|
||||
PathRemoveExtension(xmlPath);
|
||||
PathAddExtension(xmlPath, TEXT(".xml"));
|
||||
|
||||
if (!PathFileExists(xmlPath))
|
||||
{
|
||||
lstrcpyn(xmlPath, TEXT("\0"), MAX_PATH );
|
||||
wcscpy_s(xmlPath, nppParams.getAppDataNppDir() );
|
||||
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
||||
PathAppend(xmlPath, pi->_moduleName.c_str());
|
||||
PathRemoveExtension( xmlPath );
|
||||
PathAddExtension( xmlPath, TEXT(".xml") );
|
||||
|
||||
if (! PathFileExists( xmlPath ) )
|
||||
{
|
||||
throw generic_string(generic_string(xmlPath) + TEXT(" is missing."));
|
||||
}
|
||||
}
|
||||
|
||||
TiXmlDocument *pXmlDoc = new TiXmlDocument(xmlPath);
|
||||
|
||||
if (!pXmlDoc->LoadFile())
|
||||
{
|
||||
delete pXmlDoc;
|
||||
pXmlDoc = NULL;
|
||||
throw generic_string(generic_string(xmlPath) + TEXT(" failed to load."));
|
||||
}
|
||||
|
||||
for (int x = 0; x < numLexers; ++x) // postpone adding in case the xml is missing/corrupt
|
||||
{
|
||||
if (containers[x] != NULL)
|
||||
nppParams.addExternalLangToEnd(containers[x]);
|
||||
}
|
||||
|
||||
nppParams.getExternalLexerFromXmlTree(pXmlDoc);
|
||||
nppParams.getExternalLexerDoc()->push_back(pXmlDoc);
|
||||
//const char *pDllName = wmc.wchar2char(pluginFilePath, CP_ACP);
|
||||
//::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, reinterpret_cast<LPARAM>(pDllName));
|
||||
// Lexer library (.dll) is not supported in Scintilla 5
|
||||
|
||||
generic_string s = pluginFileName;
|
||||
s += TEXT(" is a Lexer library.\n");
|
||||
s += TEXT("Lexer library is not supported in Scintilla 5.\nIt'll be loaded as only a normal plugin, the external language part won't work with this version of Notepad++.");
|
||||
::MessageBox(_nppData._nppHandle, s.c_str(), pluginFilePath, MB_OK);
|
||||
}
|
||||
|
||||
addInLoadedDlls(pluginFilePath, pluginFileName);
|
||||
_pluginInfos.push_back(pi);
|
||||
|
||||
return static_cast<int32_t>(_pluginInfos.size() - 1);
|
||||
}
|
||||
catch (std::exception& e)
|
||||
|
@ -258,17 +193,19 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath)
|
|||
}
|
||||
catch (generic_string& s)
|
||||
{
|
||||
if (pi && pi->_hLib)
|
||||
{
|
||||
::FreeLibrary(pi->_hLib);
|
||||
}
|
||||
|
||||
s += TEXT("\n\n");
|
||||
s += pluginFileName;
|
||||
s += USERMSG;
|
||||
if (::MessageBox(NULL, s.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||
if (::MessageBox(_nppData._nppHandle, s.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||
{
|
||||
if (pi && pi->_hLib)
|
||||
{
|
||||
::FreeLibrary(pi->_hLib);
|
||||
}
|
||||
::DeleteFile(pluginFilePath);
|
||||
}
|
||||
|
||||
delete pi;
|
||||
return -1;
|
||||
}
|
||||
|
@ -278,7 +215,7 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath)
|
|||
msg += TEXT("\n\n");
|
||||
msg += pluginFileName;
|
||||
msg += USERMSG;
|
||||
if (::MessageBox(NULL, msg.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||
if (::MessageBox(_nppData._nppHandle, msg.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||
{
|
||||
if (pi && pi->_hLib)
|
||||
{
|
||||
|
@ -291,7 +228,7 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath)
|
|||
}
|
||||
}
|
||||
|
||||
bool PluginsManager::loadPluginsV2(const TCHAR* dir, const PluginViewList* pluginUpdateInfoList)
|
||||
bool PluginsManager::loadPluginsFromItsOwnFolder(const TCHAR* dir, const PluginViewList* pluginUpdateInfoList)
|
||||
{
|
||||
if (_isDisabled)
|
||||
return false;
|
||||
|
|
|
@ -86,8 +86,7 @@ public:
|
|||
_nppData = nppData;
|
||||
}
|
||||
|
||||
int loadPlugin(const TCHAR *pluginFilePath);
|
||||
bool loadPluginsV2(const TCHAR *dir = NULL, const PluginViewList* pluginUpdateInfoList = nullptr);
|
||||
bool loadPluginsFromItsOwnFolder(const TCHAR *dir = NULL, const PluginViewList* pluginUpdateInfoList = nullptr);
|
||||
|
||||
bool unloadPlugin(int index, HWND nppHandle);
|
||||
|
||||
|
@ -127,6 +126,8 @@ private:
|
|||
IDAllocator _markerAlloc;
|
||||
bool _noMoreNotification = false;
|
||||
|
||||
int loadPlugin(const TCHAR* pluginFilePath);
|
||||
|
||||
void pluginCrashAlert(const TCHAR *pluginName, const TCHAR *funcSignature)
|
||||
{
|
||||
generic_string msg = pluginName;
|
||||
|
@ -162,5 +163,3 @@ private:
|
|||
|
||||
// External Lexer function definitions...
|
||||
typedef int (EXT_LEXER_DECL *GetLexerCountFn)();
|
||||
typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
|
||||
typedef void (EXT_LEXER_DECL *GetLexerStatusTextFn)(unsigned int Index, TCHAR *desc, int buflength);
|
||||
|
|
|
@ -407,9 +407,8 @@ LRESULT Notepad_plus::init(HWND hwnd)
|
|||
|
||||
_scintillaCtrls4Plugins.init(_pPublicInterface->getHinst(), hwnd);
|
||||
_pluginsManager.init(nppData);
|
||||
|
||||
bool enablePluginAdmin = _pluginsAdminDlg.initFromJson();
|
||||
_pluginsManager.loadPluginsV2(nppParam.getPluginRootDir(), enablePluginAdmin ? &_pluginsAdminDlg.getAvailablePluginUpdateInfoList() : nullptr);
|
||||
_pluginsManager.loadPluginsFromItsOwnFolder(nppParam.getPluginRootDir(), enablePluginAdmin ? &_pluginsAdminDlg.getAvailablePluginUpdateInfoList() : nullptr);
|
||||
_restoreButton.init(_pPublicInterface->getHinst(), hwnd);
|
||||
|
||||
// ------------ //
|
||||
|
@ -467,24 +466,6 @@ LRESULT Notepad_plus::init(HWND hwnd)
|
|||
//Languages Menu
|
||||
HMENU hLangMenu = ::GetSubMenu(_mainMenuHandle, MENUINDEX_LANGUAGE);
|
||||
|
||||
// Add external languages to menu
|
||||
for (int i = 0; i < nppParam.getNbExternalLang(); ++i)
|
||||
{
|
||||
ExternalLangContainer & externalLangContainer = nppParam.getELCFromIndex(i);
|
||||
|
||||
int numLangs = ::GetMenuItemCount(hLangMenu);
|
||||
const int bufferSize = 100;
|
||||
TCHAR buffer[bufferSize];
|
||||
|
||||
int x;
|
||||
for (x = 0; (x == 0 || lstrcmp(externalLangContainer._name, buffer) > 0) && x < numLangs; ++x)
|
||||
{
|
||||
::GetMenuString(hLangMenu, x, buffer, bufferSize, MF_BYPOSITION);
|
||||
}
|
||||
|
||||
::InsertMenu(hLangMenu, x - 1, MF_BYPOSITION, IDM_LANG_EXTERNAL + i, externalLangContainer._name);
|
||||
}
|
||||
|
||||
if (nppGUI._excludedLangList.size() > 0)
|
||||
{
|
||||
for (size_t i = 0, len = nppGUI._excludedLangList.size(); i < len; ++i)
|
||||
|
@ -2358,25 +2339,14 @@ void Notepad_plus::checkLangsMenu(int id) const
|
|||
|
||||
generic_string Notepad_plus::getLangDesc(LangType langType, bool getName)
|
||||
{
|
||||
NppParameters& nppParams = NppParameters::getInstance();
|
||||
|
||||
if ((langType >= L_EXTERNAL) && (langType < nppParams.L_END))
|
||||
{
|
||||
ExternalLangContainer & elc = nppParams.getELCFromIndex(langType - L_EXTERNAL);
|
||||
if (getName)
|
||||
return generic_string(elc._name);
|
||||
else
|
||||
return generic_string(elc._desc);
|
||||
}
|
||||
|
||||
if (langType > L_EXTERNAL)
|
||||
if (langType >= L_END)
|
||||
langType = L_TEXT;
|
||||
|
||||
generic_string str2Show;
|
||||
if (getName)
|
||||
str2Show = ScintillaEditView::langNames[langType].shortName;
|
||||
str2Show = ScintillaEditView::_langNames[langType].shortName;
|
||||
else
|
||||
str2Show = ScintillaEditView::langNames[langType].longName;
|
||||
str2Show = ScintillaEditView::_langNames[langType].longName;
|
||||
|
||||
if (langType == L_USER)
|
||||
{
|
||||
|
@ -3105,15 +3075,6 @@ void Notepad_plus::maintainIndentation(TCHAR ch)
|
|||
LangType type = _pEditView->getCurrentBuffer()->getLangType();
|
||||
ExternalLexerAutoIndentMode autoIndentMode = ExternalLexerAutoIndentMode::Standard;
|
||||
|
||||
// For external languages, query for custom auto-indentation funcionality
|
||||
if (type >= L_EXTERNAL)
|
||||
{
|
||||
NppParameters& nppParam = NppParameters::getInstance();
|
||||
autoIndentMode = nppParam.getELCFromIndex(type - L_EXTERNAL)._autoIndentMode;
|
||||
if (autoIndentMode == ExternalLexerAutoIndentMode::Custom)
|
||||
return;
|
||||
}
|
||||
|
||||
// Do not alter indentation if we were at the beginning of the line and we pressed Enter
|
||||
if ((((eolMode == SC_EOL_CRLF || eolMode == SC_EOL_LF) && ch == '\n') ||
|
||||
(eolMode == SC_EOL_CR && ch == '\r')) && prevLine >= 0 && _pEditView->getLineLength(prevLine) == 0)
|
||||
|
@ -3504,7 +3465,7 @@ LangType Notepad_plus::menuID2LangType(int cmdID)
|
|||
break;
|
||||
}
|
||||
}
|
||||
return L_EXTERNAL;
|
||||
return L_TEXT;
|
||||
}
|
||||
|
||||
|
||||
|
@ -4286,7 +4247,7 @@ void Notepad_plus::docOpenInNewInstance(FileTransferMode mode, int x, int y)
|
|||
if (lt != L_USER)
|
||||
{
|
||||
command += TEXT(" -l");
|
||||
command += ScintillaEditView::langNames[lt].lexerName;
|
||||
command += ScintillaEditView::_langNames[lt].lexerName;
|
||||
}
|
||||
command += TEXT(" -n");
|
||||
command += to_wstring(_pEditView->getCurrentLineNumber() + 1);
|
||||
|
@ -6160,7 +6121,7 @@ std::vector<generic_string> Notepad_plus::loadCommandlineParams(const TCHAR * co
|
|||
{
|
||||
pBuf->setLangType(L_USER, udl.c_str());
|
||||
}
|
||||
else if (lt != L_EXTERNAL && lt < nppParams.L_END)
|
||||
else
|
||||
{
|
||||
pBuf->setLangType(lt);
|
||||
}
|
||||
|
|
|
@ -415,7 +415,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
{
|
||||
if (!wParam)
|
||||
return FALSE;
|
||||
if (lParam < L_TEXT || lParam >= L_EXTERNAL || lParam == L_USER)
|
||||
if (lParam < L_TEXT || lParam >= L_END || lParam == L_USER)
|
||||
return FALSE;
|
||||
|
||||
BufferID id = (BufferID)wParam;
|
||||
|
@ -2555,24 +2555,14 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
return langDesc.length();
|
||||
}
|
||||
|
||||
case NPPM_GETEXTERNALLEXERAUTOINDENTMODE:
|
||||
case NPPM_GETEXTERNALLEXERAUTOINDENTMODE_DEPRECATED:
|
||||
{
|
||||
int index = nppParam.getExternalLangIndexFromName(reinterpret_cast<TCHAR*>(wParam));
|
||||
if (index < 0)
|
||||
return FALSE;
|
||||
|
||||
*(reinterpret_cast<ExternalLexerAutoIndentMode*>(lParam)) = nppParam.getELCFromIndex(index)._autoIndentMode;
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
case NPPM_SETEXTERNALLEXERAUTOINDENTMODE:
|
||||
case NPPM_SETEXTERNALLEXERAUTOINDENTMODE_DEPRECATED:
|
||||
{
|
||||
int index = nppParam.getExternalLangIndexFromName(reinterpret_cast<TCHAR*>(wParam));
|
||||
if (index < 0)
|
||||
return FALSE;
|
||||
|
||||
nppParam.getELCFromIndex(index)._autoIndentMode = static_cast<ExternalLexerAutoIndentMode>(lParam);
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
case NPPM_ISAUTOINDENTON:
|
||||
|
|
|
@ -3777,14 +3777,6 @@ void Notepad_plus::command(int id)
|
|||
_pDocMap->setSyntaxHiliting();
|
||||
}
|
||||
}
|
||||
else if ((id >= IDM_LANG_EXTERNAL) && (id <= IDM_LANG_EXTERNAL_LIMIT))
|
||||
{
|
||||
setLanguage((LangType)(id - IDM_LANG_EXTERNAL + L_EXTERNAL));
|
||||
if (_pDocMap)
|
||||
{
|
||||
_pDocMap->setSyntaxHiliting();
|
||||
}
|
||||
}
|
||||
else if ((id >= ID_MACRO) && (id < ID_MACRO_LIMIT))
|
||||
{
|
||||
int i = id - ID_MACRO;
|
||||
|
|
|
@ -2047,8 +2047,6 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode, bool shou
|
|||
LangType typeToSet = L_TEXT;
|
||||
if (id != 0 && id != IDM_LANG_USER)
|
||||
typeToSet = menuID2LangType(id);
|
||||
if (typeToSet == L_EXTERNAL )
|
||||
typeToSet = (LangType)(id - IDM_LANG_EXTERNAL + L_EXTERNAL);
|
||||
|
||||
Buffer *buf = MainFileManager.getBufferByID(lastOpened);
|
||||
|
||||
|
@ -2158,8 +2156,6 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode, bool shou
|
|||
|
||||
if (id != 0)
|
||||
typeToSet = menuID2LangType(id);
|
||||
if (typeToSet == L_EXTERNAL )
|
||||
typeToSet = (LangType)(id - IDM_LANG_EXTERNAL + L_EXTERNAL);
|
||||
|
||||
Buffer * buf = MainFileManager.getBufferByID(lastOpened);
|
||||
|
||||
|
|
|
@ -934,11 +934,6 @@ NppParameters::~NppParameters()
|
|||
delete _userLangArray[i];
|
||||
if (_hUXTheme)
|
||||
FreeLibrary(_hUXTheme);
|
||||
|
||||
for (std::vector<TiXmlDocument *>::iterator it = _pXmlExternalLexerDoc.begin(), end = _pXmlExternalLexerDoc.end(); it != end; ++it )
|
||||
delete (*it);
|
||||
|
||||
_pXmlExternalLexerDoc.clear();
|
||||
}
|
||||
|
||||
|
||||
|
@ -975,11 +970,6 @@ bool NppParameters::reloadStylers(const TCHAR* stylePath)
|
|||
|
||||
getUserStylersFromXmlTree();
|
||||
|
||||
// Reload plugin styles.
|
||||
for ( size_t i = 0; i < getExternalLexerDoc()->size(); ++i)
|
||||
{
|
||||
getExternalLexerFromXmlTree( getExternalLexerDoc()->at(i) );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1042,7 +1032,6 @@ generic_string NppParameters::getSettingsFolder()
|
|||
|
||||
bool NppParameters::load()
|
||||
{
|
||||
L_END = L_EXTERNAL;
|
||||
bool isAllLaoded = true;
|
||||
|
||||
_isx64 = sizeof(void *) == 8;
|
||||
|
@ -1481,10 +1470,6 @@ bool NppParameters::load()
|
|||
getSessionFromXmlTree(pXmlSessionDoc, _session);
|
||||
|
||||
delete pXmlSessionDoc;
|
||||
|
||||
for (size_t i = 0, len = _pXmlExternalLexerDoc.size() ; i < len ; ++i)
|
||||
if (_pXmlExternalLexerDoc[i])
|
||||
delete _pXmlExternalLexerDoc[i];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
|
@ -1590,21 +1575,6 @@ void NppParameters::SetTransparent(HWND hwnd, int percent)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
bool NppParameters::isExistingExternalLangName(const TCHAR *newName) const
|
||||
{
|
||||
if ((!newName) || (!newName[0]))
|
||||
return true;
|
||||
|
||||
for (int i = 0 ; i < _nbExternalLang ; ++i)
|
||||
{
|
||||
if (!lstrcmp(_externalLangArray[i]->_name, newName))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const TCHAR* NppParameters::getUserDefinedLangNameFromExt(TCHAR *ext, TCHAR *fullName) const
|
||||
{
|
||||
if ((!ext) || (!ext[0]))
|
||||
|
@ -1642,18 +1612,6 @@ const TCHAR* NppParameters::getUserDefinedLangNameFromExt(TCHAR *ext, TCHAR *ful
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
int NppParameters::getExternalLangIndexFromName(const TCHAR* externalLangName) const
|
||||
{
|
||||
for (int i = 0 ; i < _nbExternalLang ; ++i)
|
||||
{
|
||||
if (!lstrcmp(externalLangName, _externalLangArray[i]->_name))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
UserLangContainer* NppParameters::getULCFromName(const TCHAR *userLangName)
|
||||
{
|
||||
for (int i = 0 ; i < _nbUserLang ; ++i)
|
||||
|
@ -1756,25 +1714,6 @@ void NppParameters::getLangKeywordsFromXmlTree()
|
|||
feedKeyWordsParameters(root);
|
||||
}
|
||||
|
||||
|
||||
void NppParameters::getExternalLexerFromXmlTree(TiXmlDocument *doc)
|
||||
{
|
||||
TiXmlNode *root = doc->FirstChild(TEXT("NotepadPlus"));
|
||||
if (!root) return;
|
||||
feedKeyWordsParameters(root);
|
||||
feedStylerArray(root);
|
||||
}
|
||||
|
||||
|
||||
int NppParameters::addExternalLangToEnd(ExternalLangContainer * externalLang)
|
||||
{
|
||||
_externalLangArray[_nbExternalLang] = externalLang;
|
||||
++_nbExternalLang;
|
||||
++L_END;
|
||||
return _nbExternalLang-1;
|
||||
}
|
||||
|
||||
|
||||
bool NppParameters::getUserStylersFromXmlTree()
|
||||
{
|
||||
TiXmlNode *root = _pXmlUserStylerDoc->FirstChild(TEXT("NotepadPlus"));
|
||||
|
@ -2874,7 +2813,7 @@ std::pair<unsigned char, unsigned char> NppParameters::feedUserLang(TiXmlNode *n
|
|||
}
|
||||
|
||||
}
|
||||
catch (const std::exception& /*e*/)
|
||||
catch (const std::exception&)
|
||||
{
|
||||
delete _userLangArray[--_nbUserLang];
|
||||
}
|
||||
|
@ -3664,16 +3603,9 @@ bool NppParameters::feedStylerArray(TiXmlNode *node)
|
|||
const TCHAR *lexerName = element->Attribute(TEXT("name"));
|
||||
const TCHAR *lexerDesc = element->Attribute(TEXT("desc"));
|
||||
const TCHAR *lexerUserExt = element->Attribute(TEXT("ext"));
|
||||
const TCHAR *lexerExcluded = element->Attribute(TEXT("excluded"));
|
||||
if (lexerName)
|
||||
{
|
||||
_lexerStylerVect.addLexerStyler(lexerName, lexerDesc, lexerUserExt, childNode);
|
||||
if (lexerExcluded != NULL && (lstrcmp(lexerExcluded, TEXT("yes")) == 0))
|
||||
{
|
||||
int index = getExternalLangIndexFromName(lexerName);
|
||||
if (index != -1)
|
||||
_nppGUI._excludedLangList.push_back(LangMenuItem((LangType)(index + L_EXTERNAL)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3956,24 +3888,15 @@ TiXmlNode * NppParameters::getChildElementByAttribut(TiXmlNode *pere, const TCHA
|
|||
LangType NppParameters::getLangIDFromStr(const TCHAR *langName)
|
||||
{
|
||||
int lang = static_cast<int32_t>(L_TEXT);
|
||||
for (; lang < L_EXTERNAL; ++lang)
|
||||
for (; lang < L_END; ++lang)
|
||||
{
|
||||
const TCHAR * name = ScintillaEditView::langNames[lang].lexerName;
|
||||
const TCHAR * name = ScintillaEditView::_langNames[lang].lexerName;
|
||||
if (!lstrcmp(name, langName)) //found lang?
|
||||
{
|
||||
return (LangType)lang;
|
||||
}
|
||||
}
|
||||
|
||||
//Cannot find language, check if its an external one
|
||||
|
||||
LangType l = (LangType)lang;
|
||||
if (l == L_EXTERNAL) //try find external lexer
|
||||
{
|
||||
int id = NppParameters::getInstance().getExternalLangIndexFromName(langName);
|
||||
if (id != -1) return (LangType)(id + L_EXTERNAL);
|
||||
}
|
||||
|
||||
return L_TEXT;
|
||||
}
|
||||
|
||||
|
@ -6824,7 +6747,7 @@ void NppParameters::writeExcludedLangList(TiXmlElement *element)
|
|||
for (size_t i = 0, len = _nppGUI._excludedLangList.size(); i < len ; ++i)
|
||||
{
|
||||
LangType langType = _nppGUI._excludedLangList[i]._langType;
|
||||
if (langType >= L_EXTERNAL && langType < L_END)
|
||||
if (langType >= L_END)
|
||||
continue;
|
||||
|
||||
int nGrp = langType / groupNbMember;
|
||||
|
@ -7124,10 +7047,7 @@ int NppParameters::langTypeToCommandID(LangType lt) const
|
|||
|
||||
|
||||
default :
|
||||
if (lt >= L_EXTERNAL && lt < L_END)
|
||||
id = lt - L_EXTERNAL + IDM_LANG_EXTERNAL;
|
||||
else
|
||||
id = IDM_LANG_TEXT;
|
||||
id = IDM_LANG_TEXT;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
@ -7204,42 +7124,6 @@ generic_string NppParameters::writeStyles(LexerStylerArray & lexersStylers, Styl
|
|||
}
|
||||
}
|
||||
|
||||
for (size_t x = 0; x < _pXmlExternalLexerDoc.size(); ++x)
|
||||
{
|
||||
TiXmlNode* lexersRoot2 = ( _pXmlExternalLexerDoc[x]->FirstChild(TEXT("NotepadPlus")))->FirstChildElement(TEXT("LexerStyles"));
|
||||
for (TiXmlNode* childNode = lexersRoot2->FirstChildElement(TEXT("LexerType"));
|
||||
childNode ;
|
||||
childNode = childNode->NextSibling(TEXT("LexerType")))
|
||||
{
|
||||
TiXmlElement *element = childNode->ToElement();
|
||||
const TCHAR *nm = element->Attribute(TEXT("name"));
|
||||
|
||||
LexerStyler *pLs = _lexerStylerVect.getLexerStylerByName(nm);
|
||||
LexerStyler *pLs2 = lexersStylers.getLexerStylerByName(nm);
|
||||
|
||||
if (pLs)
|
||||
{
|
||||
const TCHAR *extStr = pLs->getLexerUserExt();
|
||||
element->SetAttribute(TEXT("ext"), extStr);
|
||||
|
||||
for (TiXmlNode *grChildNode = childNode->FirstChildElement(TEXT("WordsStyle"));
|
||||
grChildNode ;
|
||||
grChildNode = grChildNode->NextSibling(TEXT("WordsStyle")))
|
||||
{
|
||||
TiXmlElement *grElement = grChildNode->ToElement();
|
||||
const TCHAR *styleName = grElement->Attribute(TEXT("name"));
|
||||
const Style * pStyle = pLs->findByName(styleName);
|
||||
Style * pStyle2Sync = pLs2 ? pLs2->findByName(styleName) : nullptr;
|
||||
if (pStyle && pStyle2Sync)
|
||||
{
|
||||
writeStyle2Element(*pStyle, *pStyle2Sync, grElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_pXmlExternalLexerDoc[x]->SaveFile();
|
||||
}
|
||||
|
||||
TiXmlNode *globalStylesRoot = (_pXmlUserStylerDoc->FirstChild(TEXT("NotepadPlus")))->FirstChildElement(TEXT("GlobalStyles"));
|
||||
|
||||
for (TiXmlNode *childNode = globalStylesRoot->FirstChildElement(TEXT("WidgetStyle"));
|
||||
|
|
|
@ -241,7 +241,7 @@ struct CmdLineParams
|
|||
bool _isRecursive = false;
|
||||
bool _openFoldersAsWorkspace = false;
|
||||
|
||||
LangType _langType = L_EXTERNAL;
|
||||
LangType _langType = L_END;
|
||||
generic_string _localizationPath;
|
||||
generic_string _udlName;
|
||||
|
||||
|
@ -274,7 +274,7 @@ struct CmdLineParamsDTO
|
|||
intptr_t _column2go = 0;
|
||||
intptr_t _pos2go = 0;
|
||||
|
||||
LangType _langType = L_EXTERNAL;
|
||||
LangType _langType = L_END;
|
||||
generic_string _udlName;
|
||||
|
||||
static CmdLineParamsDTO FromCmdLineParams(const CmdLineParams& params)
|
||||
|
@ -1072,25 +1072,6 @@ private:
|
|||
friend class StylerDlg;
|
||||
};
|
||||
|
||||
#define MAX_EXTERNAL_LEXER_NAME_LEN 16
|
||||
#define MAX_EXTERNAL_LEXER_DESC_LEN 32
|
||||
|
||||
|
||||
|
||||
class ExternalLangContainer final
|
||||
{
|
||||
public:
|
||||
TCHAR _name[MAX_EXTERNAL_LEXER_NAME_LEN];
|
||||
TCHAR _desc[MAX_EXTERNAL_LEXER_DESC_LEN];
|
||||
ExternalLexerAutoIndentMode _autoIndentMode = ExternalLexerAutoIndentMode::Standard;
|
||||
|
||||
ExternalLangContainer(const TCHAR* name, const TCHAR* desc)
|
||||
{
|
||||
generic_strncpy(_name, name, MAX_EXTERNAL_LEXER_NAME_LEN);
|
||||
generic_strncpy(_desc, desc, MAX_EXTERNAL_LEXER_DESC_LEN);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct FindHistory final
|
||||
{
|
||||
|
@ -1287,7 +1268,6 @@ public:
|
|||
generic_string getSettingsFolder();
|
||||
|
||||
bool _isTaskListRBUTTONUP_Active = false;
|
||||
int L_END;
|
||||
|
||||
NppGUI & getNppGUI() {
|
||||
return _nppGUI;
|
||||
|
@ -1402,16 +1382,6 @@ public:
|
|||
UserLangContainer & getULCFromIndex(size_t i) {return *_userLangArray[i];};
|
||||
UserLangContainer * getULCFromName(const TCHAR *userLangName);
|
||||
|
||||
int getNbExternalLang() const {return _nbExternalLang;};
|
||||
int getExternalLangIndexFromName(const TCHAR *externalLangName) const;
|
||||
|
||||
ExternalLangContainer & getELCFromIndex(int i) {return *_externalLangArray[i];};
|
||||
|
||||
bool ExternalLangHasRoom() const {return _nbExternalLang < NB_MAX_EXTERNAL_LANG;};
|
||||
|
||||
void getExternalLexerFromXmlTree(TiXmlDocument *doc);
|
||||
std::vector<TiXmlDocument *> * getExternalLexerDoc() { return &_pXmlExternalLexerDoc; };
|
||||
|
||||
void writeDefaultUDL();
|
||||
void writeNonDefaultUDL();
|
||||
void writeNeed2SaveUDL();
|
||||
|
@ -1437,10 +1407,6 @@ public:
|
|||
int addUserLangToEnd(const UserLangContainer & userLang, const TCHAR *newName);
|
||||
void removeUserLang(size_t index);
|
||||
|
||||
bool isExistingExternalLangName(const TCHAR *newName) const;
|
||||
|
||||
int addExternalLangToEnd(ExternalLangContainer * externalLang);
|
||||
|
||||
TiXmlDocumentA * getNativeLangA() const {return _pXmlNativeLangDocA;};
|
||||
|
||||
TiXmlDocument * getToolIcons() const {return _pXmlToolIconsDoc;};
|
||||
|
@ -1682,8 +1648,6 @@ private:
|
|||
TiXmlDocumentA *_pXmlNativeLangDocA = nullptr;
|
||||
TiXmlDocumentA *_pXmlContextMenuDocA = nullptr;
|
||||
|
||||
std::vector<TiXmlDocument *> _pXmlExternalLexerDoc;
|
||||
|
||||
NppGUI _nppGUI;
|
||||
ScintillaViewParams _svp;
|
||||
Lang* _langList[NB_LANG] = { nullptr };
|
||||
|
@ -1704,7 +1668,6 @@ private:
|
|||
unsigned char _nbUserLang = 0; // won't be exceeded to 255;
|
||||
generic_string _userDefineLangsFolderPath;
|
||||
generic_string _userDefineLangPath;
|
||||
ExternalLangContainer* _externalLangArray[NB_MAX_EXTERNAL_LANG] = { nullptr };
|
||||
int _nbExternalLang = 0;
|
||||
|
||||
CmdLineParamsDTO _cmdLineParams;
|
||||
|
|
|
@ -1065,15 +1065,12 @@ const TCHAR * AutoCompletion::getApiFileName()
|
|||
}
|
||||
}
|
||||
|
||||
if (_curLang >= L_EXTERNAL && _curLang < NppParameters::getInstance().L_END)
|
||||
return NppParameters::getInstance().getELCFromIndex(_curLang - L_EXTERNAL)._name;
|
||||
|
||||
if (_curLang > L_EXTERNAL)
|
||||
if (_curLang > L_END)
|
||||
_curLang = L_TEXT;
|
||||
|
||||
if (_curLang == L_JAVASCRIPT)
|
||||
_curLang = L_JS;
|
||||
|
||||
return ScintillaEditView::langNames[_curLang].lexerName;
|
||||
return ScintillaEditView::_langNames[_curLang].lexerName;
|
||||
|
||||
}
|
||||
|
|
|
@ -1444,23 +1444,13 @@ bool FileManager::loadFileData(Document doc, int64_t fileSize, const TCHAR * fil
|
|||
}
|
||||
_pscratchTilla->execute(SCI_CLEARALL);
|
||||
|
||||
int lexerID = SCLEX_NULL;
|
||||
if (fileFormat._language < L_END)
|
||||
{
|
||||
lexerID = ScintillaEditView::_langNames[fileFormat._language].lexerID;
|
||||
}
|
||||
|
||||
if (fileFormat._language < L_EXTERNAL)
|
||||
{
|
||||
#pragma warning( push )
|
||||
#pragma warning( disable : 4996)
|
||||
const char* pName = LexerNameFromID(ScintillaEditView::langNames[fileFormat._language].lexerID); //deprecated, therefore disabled warning
|
||||
#pragma warning( pop )
|
||||
_pscratchTilla->execute(SCI_SETILEXER, 0, reinterpret_cast<LPARAM>(CreateLexer(pName)));
|
||||
}
|
||||
else
|
||||
{
|
||||
int id = fileFormat._language - L_EXTERNAL;
|
||||
TCHAR * name = nppParam.getELCFromIndex(id)._name;
|
||||
WcharMbcsConvertor& wmc = WcharMbcsConvertor::getInstance();
|
||||
const char *pName = wmc.wchar2char(name, CP_ACP);
|
||||
_pscratchTilla->execute(SCI_SETILEXER, 0, reinterpret_cast<LPARAM>(CreateLexer(pName)));
|
||||
}
|
||||
_pscratchTilla->setLexerFromID(lexerID);
|
||||
|
||||
if (fileFormat._encoding != -1)
|
||||
_pscratchTilla->execute(SCI_SETCODEPAGE, SC_CP_UTF8);
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
#include <shlwapi.h>
|
||||
#include "FindReplaceDlg.h"
|
||||
#include "ScintillaEditView.h"
|
||||
#include <ILexer.h>
|
||||
#include <Lexilla.h>
|
||||
#include "ILexer.h"
|
||||
#include "Lexilla.h"
|
||||
#include "Notepad_plus_msgs.h"
|
||||
#include "localization.h"
|
||||
#include "Utf8.h"
|
||||
|
@ -2314,6 +2314,9 @@ int FindReplaceDlg::processRange(ProcessOperation op, FindReplaceInfo & findRepl
|
|||
if (!isCreated() && !findReplaceInfo._txt2find)
|
||||
return nbProcessed;
|
||||
|
||||
if (!_ppEditView)
|
||||
return nbProcessed;
|
||||
|
||||
ScintillaEditView *pEditView = *_ppEditView;
|
||||
if (view2Process)
|
||||
pEditView = view2Process;
|
||||
|
@ -4311,7 +4314,7 @@ void Finder::setFinderStyle()
|
|||
NppDarkMode::setBorder(_scintView.getHSelf());
|
||||
|
||||
// Set current line background color for the finder
|
||||
const TCHAR * lexerName = ScintillaEditView::langNames[L_SEARCHRESULT].lexerName;
|
||||
const TCHAR * lexerName = ScintillaEditView::_langNames[L_SEARCHRESULT].lexerName;
|
||||
LexerStyler *pStyler = (NppParameters::getInstance().getLStylerArray()).getLexerStylerByName(lexerName);
|
||||
if (pStyler)
|
||||
{
|
||||
|
|
|
@ -61,7 +61,7 @@ const int ScintillaEditView::_markersArray[][NB_FOLDER_STATE] = {
|
|||
|
||||
// Array with all the names of all languages
|
||||
// The order of lang type (enum LangType) must be respected
|
||||
LanguageName ScintillaEditView::langNames[L_EXTERNAL + 1] = {
|
||||
LanguageName ScintillaEditView::_langNames[L_END + 1] = {
|
||||
{TEXT("normal"), TEXT("Normal text"), TEXT("Normal text file"), L_TEXT, SCLEX_NULL},
|
||||
{TEXT("php"), TEXT("PHP"), TEXT("PHP Hypertext Preprocessor file"), L_PHP, SCLEX_HTML},
|
||||
{TEXT("c"), TEXT("C"), TEXT("C source file"), L_C, SCLEX_CPP},
|
||||
|
@ -148,7 +148,7 @@ LanguageName ScintillaEditView::langNames[L_EXTERNAL + 1] = {
|
|||
{TEXT("txt2tags"), TEXT("txt2tags"), TEXT("txt2tags file"), L_TXT2TAGS, SCLEX_TXT2TAGS},
|
||||
{TEXT("visualprolog"), TEXT("Visual Prolog"), TEXT("Visual Prolog file"), L_VISUALPROLOG, SCLEX_VISUALPROLOG},
|
||||
{TEXT("typescript"), TEXT("TypeScript"), TEXT("TypeScript file"), L_TYPESCRIPT, SCLEX_CPP},
|
||||
{TEXT("ext"), TEXT("External"), TEXT("External"), L_EXTERNAL, SCLEX_NULL}
|
||||
{TEXT("endOfLang"), TEXT("EndOfLang"), TEXT("End of Language"), L_END, SCLEX_NULL}
|
||||
};
|
||||
|
||||
//const int MASK_RED = 0xFF0000;
|
||||
|
@ -877,36 +877,6 @@ void ScintillaEditView::setUserLexer(const TCHAR *userLangName)
|
|||
}
|
||||
}
|
||||
|
||||
void ScintillaEditView::setExternalLexer(LangType typeDoc)
|
||||
{
|
||||
int id = typeDoc - L_EXTERNAL;
|
||||
TCHAR * name = NppParameters::getInstance().getELCFromIndex(id)._name;
|
||||
|
||||
WcharMbcsConvertor& wmc = WcharMbcsConvertor::getInstance();
|
||||
const char *pName = wmc.wchar2char(name, CP_ACP);
|
||||
|
||||
execute(SCI_SETILEXER, 0, reinterpret_cast<LPARAM>(CreateLexer(pName)));
|
||||
|
||||
LexerStyler *pStyler = (NppParameters::getInstance().getLStylerArray()).getLexerStylerByName(name);
|
||||
if (pStyler)
|
||||
{
|
||||
for (const Style & style : *pStyler)
|
||||
{
|
||||
setStyle(style);
|
||||
|
||||
if (style._keywordClass >= 0 && style._keywordClass <= KEYWORDSET_MAX)
|
||||
{
|
||||
basic_string<char> keywordList("");
|
||||
if (!style._keywords.empty())
|
||||
{
|
||||
keywordList = wstring2string(style._keywords, CP_ACP);
|
||||
}
|
||||
execute(SCI_SETKEYWORDS, style._keywordClass, reinterpret_cast<LPARAM>(getCompleteKeywordList(keywordList, typeDoc, style._keywordClass)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScintillaEditView::setCppLexer(LangType langType)
|
||||
{
|
||||
const char *cppInstrs;
|
||||
|
@ -974,7 +944,7 @@ void ScintillaEditView::setJsLexer()
|
|||
execute(SCI_SETKEYWORDS, 2, reinterpret_cast<LPARAM>(doxygenKeyWords_char));
|
||||
}
|
||||
|
||||
const TCHAR *newLexerName = ScintillaEditView::langNames[L_JAVASCRIPT].lexerName;
|
||||
const TCHAR *newLexerName = ScintillaEditView::_langNames[L_JAVASCRIPT].lexerName;
|
||||
LexerStyler *pNewStyler = (NppParameters::getInstance().getLStylerArray()).getLexerStylerByName(newLexerName);
|
||||
if (pNewStyler) // New js styler is available, so we can use it do more modern styling
|
||||
{
|
||||
|
@ -1014,7 +984,7 @@ void ScintillaEditView::setJsLexer()
|
|||
}
|
||||
else // New js styler is not available, we use the old styling for the sake of retro-compatibility
|
||||
{
|
||||
const TCHAR *lexerName = ScintillaEditView::langNames[L_JS].lexerName;
|
||||
const TCHAR *lexerName = ScintillaEditView::_langNames[L_JS].lexerName;
|
||||
LexerStyler *pOldStyler = (NppParameters::getInstance().getLStylerArray()).getLexerStylerByName(lexerName);
|
||||
|
||||
if (pOldStyler)
|
||||
|
@ -1286,7 +1256,7 @@ void ScintillaEditView::setLexer(int lexerID, LangType langType, int whichList)
|
|||
|
||||
void ScintillaEditView::makeStyle(LangType language, const TCHAR **keywordArray)
|
||||
{
|
||||
const TCHAR * lexerName = ScintillaEditView::langNames[language].lexerName;
|
||||
const TCHAR * lexerName = ScintillaEditView::_langNames[language].lexerName;
|
||||
LexerStyler *pStyler = (NppParameters::getInstance().getLStylerArray()).getLexerStylerByName(lexerName);
|
||||
if (pStyler)
|
||||
{
|
||||
|
@ -1705,10 +1675,7 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
|
|||
|
||||
case L_TEXT :
|
||||
default :
|
||||
if (typeDoc >= L_EXTERNAL && typeDoc < NppParameters::getInstance().L_END)
|
||||
setExternalLexer(typeDoc);
|
||||
else
|
||||
setLexerFromID((_codepage == CP_CHINESE_TRADITIONAL) ? SCLEX_MAKEFILE : SCLEX_NULL);
|
||||
setLexerFromID(SCLEX_NULL);
|
||||
break;
|
||||
|
||||
}
|
||||
|
|
|
@ -541,7 +541,7 @@ public:
|
|||
|
||||
bool getIndicatorRange(size_t indicatorNumber, size_t* from = NULL, size_t* to = NULL, size_t* cur = NULL);
|
||||
|
||||
static LanguageName langNames[L_EXTERNAL+1];
|
||||
static LanguageName _langNames[L_END + 1];
|
||||
|
||||
void bufferUpdated(Buffer * buffer, int mask);
|
||||
BufferID getCurrentBufferID() { return _currentBufferID; };
|
||||
|
@ -609,6 +609,7 @@ public:
|
|||
void setPositionRestoreNeeded(bool val) { _positionRestoreNeeded = val; };
|
||||
void markedTextToClipboard(int indiStyle, bool doAll = false);
|
||||
void removeAnyDuplicateLines();
|
||||
bool setLexerFromID(int lexerID);
|
||||
|
||||
protected:
|
||||
static bool _SciInit;
|
||||
|
@ -650,7 +651,6 @@ protected:
|
|||
const char * getCompleteKeywordList(std::basic_string<char> & kwl, LangType langType, int keywordIndex);
|
||||
void setKeywords(LangType langType, const char *keywords, int index);
|
||||
void setLexer(int lexerID, LangType langType, int whichList);
|
||||
bool setLexerFromID(int lexerID);
|
||||
void makeStyle(LangType langType, const TCHAR **keywordArray = NULL);
|
||||
void setStyle(Style styleToSet); //NOT by reference (style edited)
|
||||
void setSpecialStyle(const Style & styleToSet); //by reference
|
||||
|
@ -665,7 +665,6 @@ protected:
|
|||
void setTclLexer();
|
||||
void setObjCLexer(LangType type);
|
||||
void setUserLexer(const TCHAR *userLangName = NULL);
|
||||
void setExternalLexer(LangType typeDoc);
|
||||
void setEmbeddedJSLexer();
|
||||
void setEmbeddedPhpLexer();
|
||||
void setEmbeddedAspLexer();
|
||||
|
|
|
@ -23,7 +23,7 @@ using namespace std;
|
|||
|
||||
FunctionParsersManager::~FunctionParsersManager()
|
||||
{
|
||||
for (size_t i = 0, len = L_EXTERNAL + nbMaxUserDefined; i < len; ++i)
|
||||
for (size_t i = 0, len = L_END + nbMaxUserDefined; i < len; ++i)
|
||||
{
|
||||
if (_parsers[i] != nullptr)
|
||||
delete _parsers[i];
|
||||
|
@ -160,7 +160,7 @@ bool FunctionParsersManager::loadFuncListFromXmlTree(generic_string & xmlDirPath
|
|||
index = lType;
|
||||
if (overrideId.empty())
|
||||
{
|
||||
generic_string lexerName = ScintillaEditView::langNames[lType].lexerName;
|
||||
generic_string lexerName = ScintillaEditView::_langNames[lType].lexerName;
|
||||
funcListRulePath += lexerName;
|
||||
funcListRulePath += TEXT(".xml");
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ bool FunctionParsersManager::getOverrideMapFromXmlTree(generic_string & xmlDirPa
|
|||
}
|
||||
else if (userDefinedLangName && userDefinedLangName[0])
|
||||
{
|
||||
if (_currentUDIndex < L_EXTERNAL + nbMaxUserDefined)
|
||||
if (_currentUDIndex < L_END + nbMaxUserDefined)
|
||||
{
|
||||
++_currentUDIndex;
|
||||
_parsers[_currentUDIndex] = new ParserInfo(id, userDefinedLangName);
|
||||
|
@ -343,10 +343,10 @@ FunctionParser * FunctionParsersManager::getParser(const AssociationInfo & assoI
|
|||
|
||||
case checkUserDefined:
|
||||
{
|
||||
if (_currentUDIndex == L_EXTERNAL) // no User Defined Language parser
|
||||
if (_currentUDIndex == L_END) // no User Defined Language parser
|
||||
return nullptr;
|
||||
|
||||
for (int i = L_EXTERNAL + 1; i <= _currentUDIndex; ++i)
|
||||
for (int i = L_END + 1; i <= _currentUDIndex; ++i)
|
||||
{
|
||||
if (_parsers[i]->_userDefinedLangName == assoInfo._userDefinedLangName)
|
||||
{
|
||||
|
|
|
@ -156,8 +156,8 @@ private:
|
|||
generic_string _xmlDirPath; // The 1st place to load function list files. Usually it's "%APPDATA%\Notepad++\functionList\"
|
||||
generic_string _xmlDirInstalledPath; // Where Notepad++ is installed. The 2nd place to load function list files. Usually it's "%PROGRAMFILES%\Notepad++\functionList\"
|
||||
|
||||
ParserInfo* _parsers[L_EXTERNAL + nbMaxUserDefined] = {nullptr};
|
||||
int _currentUDIndex = L_EXTERNAL;
|
||||
ParserInfo* _parsers[L_END + nbMaxUserDefined] = {nullptr};
|
||||
int _currentUDIndex = L_END;
|
||||
|
||||
bool getOverrideMapFromXmlTree(generic_string & xmlDirPath);
|
||||
bool loadFuncListFromXmlTree(generic_string & xmlDirPath, LangType lType, const generic_string& overrideId, int udlIndex = -1);
|
||||
|
|
|
@ -1933,7 +1933,7 @@ intptr_t CALLBACK NewDocumentSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP
|
|||
::SendDlgItemMessage(_hSelf, IDC_CHECK_OPENANSIASUTF8, BM_SETCHECK, (ID2Check == IDC_RADIO_UTF8SANSBOM && ndds._openAnsiAsUtf8)?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_OPENANSIASUTF8), ID2Check == IDC_RADIO_UTF8SANSBOM);
|
||||
|
||||
for (int i = L_TEXT + 1 ; i < nppParam.L_END ; ++i) // Skip L_TEXT
|
||||
for (int i = L_TEXT + 1 ; i < L_END ; ++i) // Skip L_TEXT
|
||||
{
|
||||
LangType lt = static_cast<LangType>(i);
|
||||
str.clear();
|
||||
|
@ -2372,7 +2372,7 @@ intptr_t CALLBACK LanguageSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
//
|
||||
// Lang Menu
|
||||
//
|
||||
for (int i = L_TEXT ; i < nppParam.L_END ; ++i)
|
||||
for (int i = L_TEXT ; i < L_END ; ++i)
|
||||
{
|
||||
generic_string str;
|
||||
if (static_cast<LangType>(i) != L_USER)
|
||||
|
@ -2626,29 +2626,6 @@ intptr_t CALLBACK LanguageSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
::EnableWindow(::GetDlgItem(_hSelf, idButton2Enable), TRUE);
|
||||
::EnableWindow(::GetDlgItem(_hSelf, idButton2Disable), FALSE);
|
||||
|
||||
if ((lmi._langType >= L_EXTERNAL) && (lmi._langType < nppParam.L_END))
|
||||
{
|
||||
bool found(false);
|
||||
for (size_t x = 0; x < nppParam.getExternalLexerDoc()->size() && !found; ++x)
|
||||
{
|
||||
TiXmlNode *lexersRoot = nppParam.getExternalLexerDoc()->at(x)->FirstChild(TEXT("NotepadPlus"))->FirstChildElement(TEXT("LexerStyles"));
|
||||
for (TiXmlNode *childNode = lexersRoot->FirstChildElement(TEXT("LexerType"));
|
||||
childNode ;
|
||||
childNode = childNode->NextSibling(TEXT("LexerType")))
|
||||
{
|
||||
TiXmlElement *element = childNode->ToElement();
|
||||
|
||||
if (generic_string(element->Attribute(TEXT("name"))) == lmi._langName)
|
||||
{
|
||||
element->SetAttribute(TEXT("excluded"), (LOWORD(wParam)==IDC_BUTTON_REMOVE)?TEXT("yes"):TEXT("no"));
|
||||
nppParam.getExternalLexerDoc()->at(x)->SaveFile();
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HWND grandParent = ::GetParent(_hParent);
|
||||
|
||||
if (LOWORD(wParam)==IDC_BUTTON_REMOVE)
|
||||
|
|
|
@ -526,8 +526,8 @@
|
|||
#define IDM_LANG_VISUALPROLOG (IDM_LANG + 83)
|
||||
#define IDM_LANG_TYPESCRIPT (IDM_LANG + 84)
|
||||
|
||||
#define IDM_LANG_EXTERNAL (IDM_LANG + 165)
|
||||
#define IDM_LANG_EXTERNAL_LIMIT (IDM_LANG + 179)
|
||||
//#define IDM_LANG_EXTERNAL (IDM_LANG + 165)
|
||||
//#define IDM_LANG_EXTERNAL_LIMIT (IDM_LANG + 179)
|
||||
|
||||
#define IDM_LANG_USER (IDM_LANG + 180) //46180: Used for translation
|
||||
#define IDM_LANG_USER_LIMIT (IDM_LANG + 210) //46210: Ajust with IDM_LANG_USER
|
||||
|
|
|
@ -226,7 +226,7 @@ LangType getLangTypeFromParam(ParamVector & params)
|
|||
{
|
||||
generic_string langStr;
|
||||
if (!getParamVal('l', params, langStr))
|
||||
return L_EXTERNAL;
|
||||
return L_TEXT;
|
||||
return NppParameters::getLangIDFromStr(langStr.c_str());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue