mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-22 21:34:58 +02:00
Fix UDL deletion issue
While there are the UDL in the userDefineLangs folder (new system) and a (or some) UDL in "userDefineLang.xml" (old system). The complete UDL deletion in "userDefineLang.xml" not remove "userDefineLang.xml" file. This PR fixes the problem. Fix #8101, close #13513
This commit is contained in:
parent
6d917af8ba
commit
4934b46bd7
@ -1383,7 +1383,7 @@ bool NppParameters::load()
|
|||||||
{
|
{
|
||||||
auto r = addUserDefineLangsFromXmlTree(_pXmlUserLangDoc);
|
auto r = addUserDefineLangsFromXmlTree(_pXmlUserLangDoc);
|
||||||
if (r.second - r.first > 0)
|
if (r.second - r.first > 0)
|
||||||
_pXmlUserLangsDoc.push_back(UdlXmlFileState(_pXmlUserLangDoc, false, r));
|
_pXmlUserLangsDoc.push_back(UdlXmlFileState(_pXmlUserLangDoc, false, true, r));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& i : udlFiles)
|
for (const auto& i : udlFiles)
|
||||||
@ -1398,7 +1398,7 @@ bool NppParameters::load()
|
|||||||
{
|
{
|
||||||
auto r = addUserDefineLangsFromXmlTree(udlDoc);
|
auto r = addUserDefineLangsFromXmlTree(udlDoc);
|
||||||
if (r.second - r.first > 0)
|
if (r.second - r.first > 0)
|
||||||
_pXmlUserLangsDoc.push_back(UdlXmlFileState(udlDoc, false, r));
|
_pXmlUserLangsDoc.push_back(UdlXmlFileState(udlDoc, false, false, r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3097,7 +3097,7 @@ bool NppParameters::importUDLFromFile(const generic_string& sourceFile)
|
|||||||
loadOkay = (r.second - r.first) != 0;
|
loadOkay = (r.second - r.first) != 0;
|
||||||
if (loadOkay)
|
if (loadOkay)
|
||||||
{
|
{
|
||||||
_pXmlUserLangsDoc.push_back(UdlXmlFileState(nullptr, true, r));
|
_pXmlUserLangsDoc.push_back(UdlXmlFileState(nullptr, true, true, r));
|
||||||
|
|
||||||
// imported UDL from xml file will be added into default udl, so we should make default udl dirty
|
// imported UDL from xml file will be added into default udl, so we should make default udl dirty
|
||||||
setUdlXmlDirtyFromXmlDoc(_pXmlUserLangDoc);
|
setUdlXmlDirtyFromXmlDoc(_pXmlUserLangDoc);
|
||||||
@ -3298,7 +3298,7 @@ Default UDL + Created + Imported
|
|||||||
void NppParameters::writeDefaultUDL()
|
void NppParameters::writeDefaultUDL()
|
||||||
{
|
{
|
||||||
bool firstCleanDone = false;
|
bool firstCleanDone = false;
|
||||||
std::vector<bool> deleteState;
|
std::vector<std::pair<bool, bool>> deleteState; //vector< pair<toDel, isInDefaultSharedContainer> >
|
||||||
for (const auto& udl : _pXmlUserLangsDoc)
|
for (const auto& udl : _pXmlUserLangsDoc)
|
||||||
{
|
{
|
||||||
if (!_pXmlUserLangDoc)
|
if (!_pXmlUserLangDoc)
|
||||||
@ -3310,7 +3310,7 @@ void NppParameters::writeDefaultUDL()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool toDelete = (udl._indexRange.second - udl._indexRange.first) == 0;
|
bool toDelete = (udl._indexRange.second - udl._indexRange.first) == 0;
|
||||||
deleteState.push_back(toDelete);
|
deleteState.push_back(std::pair(toDelete, udl._isInDefaultSharedContainer));
|
||||||
if ((!udl._udlXmlDoc || udl._udlXmlDoc == _pXmlUserLangDoc) && udl._isDirty && !toDelete) // new created or/and imported UDL plus _pXmlUserLangDoc (if exist)
|
if ((!udl._udlXmlDoc || udl._udlXmlDoc == _pXmlUserLangDoc) && udl._isDirty && !toDelete) // new created or/and imported UDL plus _pXmlUserLangDoc (if exist)
|
||||||
{
|
{
|
||||||
TiXmlNode *root = _pXmlUserLangDoc->FirstChild(TEXT("NotepadPlus"));
|
TiXmlNode *root = _pXmlUserLangDoc->FirstChild(TEXT("NotepadPlus"));
|
||||||
@ -3331,11 +3331,11 @@ void NppParameters::writeDefaultUDL()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool deleteAll = true;
|
bool deleteAll = true;
|
||||||
for (bool del : deleteState)
|
for (std::pair<bool, bool> udlState : deleteState)
|
||||||
{
|
{
|
||||||
if (!del)
|
if (!udlState.first && udlState.second) // if not marked to be delete udl is (&&) in default shared container (ie. "userDefineLang.xml" file)
|
||||||
{
|
{
|
||||||
deleteAll = false;
|
deleteAll = false; // let's keep "userDefineLang.xml" file
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3683,7 +3683,7 @@ int NppParameters::addUserLangToEnd(const UserLangContainer & userLang, const TC
|
|||||||
++_nbUserLang;
|
++_nbUserLang;
|
||||||
unsigned char iEnd = _nbUserLang;
|
unsigned char iEnd = _nbUserLang;
|
||||||
|
|
||||||
_pXmlUserLangsDoc.push_back(UdlXmlFileState(nullptr, true, make_pair(iBegin, iEnd)));
|
_pXmlUserLangsDoc.push_back(UdlXmlFileState(nullptr, true, true, make_pair(iBegin, iEnd)));
|
||||||
|
|
||||||
// imported UDL from xml file will be added into default udl, so we should make default udl dirty
|
// imported UDL from xml file will be added into default udl, so we should make default udl dirty
|
||||||
setUdlXmlDirtyFromXmlDoc(_pXmlUserLangDoc);
|
setUdlXmlDirtyFromXmlDoc(_pXmlUserLangDoc);
|
||||||
|
@ -1349,9 +1349,11 @@ private:
|
|||||||
struct UdlXmlFileState final {
|
struct UdlXmlFileState final {
|
||||||
TiXmlDocument* _udlXmlDoc = nullptr;
|
TiXmlDocument* _udlXmlDoc = nullptr;
|
||||||
bool _isDirty = false;
|
bool _isDirty = false;
|
||||||
|
bool _isInDefaultSharedContainer = false; // contained in "userDefineLang.xml" file
|
||||||
std::pair<unsigned char, unsigned char> _indexRange;
|
std::pair<unsigned char, unsigned char> _indexRange;
|
||||||
|
|
||||||
UdlXmlFileState(TiXmlDocument* doc, bool isDirty, std::pair<unsigned char, unsigned char> range) : _udlXmlDoc(doc), _isDirty(isDirty), _indexRange(range) {};
|
UdlXmlFileState(TiXmlDocument* doc, bool isDirty, bool isInDefaultSharedContainer, std::pair<unsigned char, unsigned char> range)
|
||||||
|
: _udlXmlDoc(doc), _isDirty(isDirty), _isInDefaultSharedContainer(isInDefaultSharedContainer), _indexRange(range) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
const int NB_LANG = 100;
|
const int NB_LANG = 100;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user