mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-07 12:32:26 +00:00
Georg's mangling patch.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8485 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
60e502702e
commit
f146640834
@ -1,3 +1,8 @@
|
|||||||
|
2004-03-09 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||||
|
|
||||||
|
* filename.[Ch] (mangledFilename): make sure that mangled names are
|
||||||
|
unique
|
||||||
|
|
||||||
2004-02-21 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
2004-02-21 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||||
|
|
||||||
* filetools.[Ch] (CreateBufferTmpDir): rename to createBufferTmpDir,
|
* filetools.[Ch] (CreateBufferTmpDir): rename to createBufferTmpDir,
|
||||||
|
@ -18,7 +18,11 @@
|
|||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
|
||||||
|
using std::map;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
@ -65,6 +69,15 @@ string const FileName::outputFilename(string const & path) const
|
|||||||
|
|
||||||
string const FileName::mangledFilename() const
|
string const FileName::mangledFilename() const
|
||||||
{
|
{
|
||||||
|
// We need to make sure that every FileName instance for a given
|
||||||
|
// filename returns the same mangled name.
|
||||||
|
typedef map<string, string> MangledMap;
|
||||||
|
static MangledMap mangledNames;
|
||||||
|
MangledMap::const_iterator const it = mangledNames.find(name_);
|
||||||
|
if (it != mangledNames.end())
|
||||||
|
return (*it).second;
|
||||||
|
|
||||||
|
// Now the real work
|
||||||
string mname = os::slashify_path(name_);
|
string mname = os::slashify_path(name_);
|
||||||
// Remove the extension.
|
// Remove the extension.
|
||||||
mname = ChangeExtension(name_, string());
|
mname = ChangeExtension(name_, string());
|
||||||
@ -73,7 +86,15 @@ string const FileName::mangledFilename() const
|
|||||||
// Replace '.' in the file name with '_'
|
// Replace '.' in the file name with '_'
|
||||||
mname = subst(mname, ".", "_");
|
mname = subst(mname, ".", "_");
|
||||||
// Add the extension back on
|
// Add the extension back on
|
||||||
return ChangeExtension(mname, GetExtension(name_));
|
mname = ChangeExtension(mname, GetExtension(name_));
|
||||||
|
// Prepend a counter to the filename. This is necessary to make
|
||||||
|
// the mangled name unique.
|
||||||
|
static int counter = 0;
|
||||||
|
std::ostringstream s;
|
||||||
|
s << counter++;
|
||||||
|
mname = s.str() + mname;
|
||||||
|
mangledNames[name_] = mname;
|
||||||
|
return mname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,6 +46,10 @@ public:
|
|||||||
/** \return a mangled version of the absolute file name,
|
/** \return a mangled version of the absolute file name,
|
||||||
* suitable for use in the temp dir when, for example, converting
|
* suitable for use in the temp dir when, for example, converting
|
||||||
* an image file to another format.
|
* an image file to another format.
|
||||||
|
* It is guaranteed that
|
||||||
|
* - two different filenames have different mangled names
|
||||||
|
* - two FileName instances with the same filename have identical
|
||||||
|
* mangled names
|
||||||
*/
|
*/
|
||||||
std::string const mangledFilename() const;
|
std::string const mangledFilename() const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user