X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2FFileName.cpp;h=32a5862fdb6568bc91cd22670ce6e4b1c0780445;hb=b198a36a363bb6a084407d476942d68ef5fb5e86;hp=69e0211c5f42953575c015934e0a11459693d2d3;hpb=10f4f2113aa7ed45af7b6aca50e76d4bf9772732;p=lyx.git diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp index 69e0211c5f..32a5862fdb 100644 --- a/src/support/FileName.cpp +++ b/src/support/FileName.cpp @@ -22,7 +22,6 @@ #include "support/Package.h" #include "support/qstring_helpers.h" -#include #include #include #include @@ -779,11 +778,7 @@ docstring FileName::fileContents(string const & encoding) const if (encoding.empty() || encoding == "UTF-8") s = QString::fromUtf8(contents.data()); else if (encoding == "ascii") -#if (QT_VERSION < 0x050000) - s = QString::fromAscii(contents.data()); -#else s = QString::fromLatin1(contents.data()); -#endif else if (encoding == "local8bit") s = QString::fromLocal8Bit(contents.data()); else if (encoding == "latin1") @@ -813,6 +808,19 @@ void FileName::changeExtension(string const & extension) } +void FileName::ensureExtension(string const & extension) +{ + string ext; + // Make sure the extension starts with a dot + if (!extension.empty() && extension[0] != '.') + ext= '.' + extension; + else + ext = extension; + if (!suffixIs(ascii_lowercase(absFileName()), ext)) + set(absFileName() + ext); +} + + docstring const FileName::relPath(string const & path) const { // FIXME UNICODE @@ -974,31 +982,11 @@ string DocFileName::mangledFileName(string const & dir, bool use_counter, bool e // Now the real work. Remove the extension. string mname = support::changeExtension(name, string()); - if (encrypt_path) { - QString qname = toqstr(mname); -#if QT_VERSION >= 0x050000 - QByteArray hash = QCryptographicHash::hash(qname.toLocal8Bit(),QCryptographicHash::Sha256); -#else - QByteArray hash = QCryptographicHash::hash(qname.toLocal8Bit(),QCryptographicHash::Sha1); -#endif - hash = hash.toHex(); - mname = fromqstr(QString(hash)); - mname = mname + "_" + onlyFileName(); - } + if (encrypt_path) + mname = "export_" + onlyFileName() + "_" + toHexHash(mname); // The mangled name must be a valid LaTeX name. - // The list of characters to keep is probably over-restrictive, - // but it is not really a problem. - // Apart from non-ASCII characters, at least the following characters - // are forbidden: '/', '.', ' ', and ':'. - // On windows it is not possible to create files with '<', '>' or '?' - // in the name. - static string const keep = "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "+-0123456789;="; - string::size_type pos = 0; - while ((pos = mname.find_first_not_of(keep, pos)) != string::npos) - mname[pos++] = '_'; + mname = sanitizeFileName(mname); // Add the extension back on mname = support::changeExtension(mname, getExtension(name));