diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 1c476b9cd..c7c559ab2 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -144,6 +144,7 @@ struct DocumentP std::map vertexMap; bool rollback; bool closable; + bool keepTrailingDigits; int iUndoMode; unsigned int UndoMemSize; unsigned int UndoMaxStackSize; @@ -158,6 +159,7 @@ struct DocumentP iTransactionCount = 0; rollback = false; closable = true; + keepTrailingDigits = true; iUndoMode = 0; UndoMemSize = 0; UndoMaxStackSize = 20; @@ -807,6 +809,7 @@ void Document::writeObjects(const std::vector& obj, std::vector Document::readObjects(Base::XMLReader& reader) { + d->keepTrailingDigits = !reader.doNameMapping(); std::vector objs; // read the object types @@ -1802,9 +1805,11 @@ std::string Document::getUniqueObjectName(const char *Name) const std::string CleanName = Base::Tools::getIdentifier(Name); // remove also trailing digits from clean name which is to avoid to create lengthy names // like 'Box001001' - std::string::size_type index = CleanName.find_last_not_of("0123456789"); - if (index+1 < CleanName.size()) { - CleanName = CleanName.substr(0,index+1); + if (!d->keepTrailingDigits) { + std::string::size_type index = CleanName.find_last_not_of("0123456789"); + if (index+1 < CleanName.size()) { + CleanName = CleanName.substr(0,index+1); + } } // name in use? diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp index cc6d86201..91d4b8851 100644 --- a/src/Base/Reader.cpp +++ b/src/Base/Reader.cpp @@ -370,6 +370,11 @@ const char* Base::XMLReader::getName(const char* name) const return name; } +bool Base::XMLReader::doNameMapping() const +{ + return false; +} + // --------------------------------------------------------------------------- // Base::XMLReader: Implementation of the SAX DocumentHandler interface // --------------------------------------------------------------------------- diff --git a/src/Base/Reader.h b/src/Base/Reader.h index df82a5653..ae50a1412 100644 --- a/src/Base/Reader.h +++ b/src/Base/Reader.h @@ -161,6 +161,7 @@ public: bool isRegistered(Base::Persistence *Object) const; virtual void addName(const char*, const char*); virtual const char* getName(const char*) const; + virtual bool doNameMapping() const; //@} /// Schema Version of the document diff --git a/src/Gui/MergeDocuments.cpp b/src/Gui/MergeDocuments.cpp index 9af26e8bc..430843129 100644 --- a/src/Gui/MergeDocuments.cpp +++ b/src/Gui/MergeDocuments.cpp @@ -58,6 +58,10 @@ public: else return name; } + bool doNameMapping() const + { + return true; + } protected: void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname,