From: Georg Baum Date: Thu, 30 Nov 2006 16:59:50 +0000 (+0000) Subject: more unicode filenames X-Git-Tag: 1.6.10~11694 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=875a88023be82ab340f48d451f23beaf89211522;p=lyx.git more unicode filenames git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16122 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/buffer.C b/src/buffer.C index e3bf85ad0c..75a5010d5c 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -153,7 +153,7 @@ typedef std::map DepClean; class Buffer::Impl { public: - Impl(Buffer & parent, string const & file, bool readonly); + Impl(Buffer & parent, FileName const & file, bool readonly); limited_stack undostack; limited_stack redostack; @@ -178,7 +178,7 @@ public: bool read_only; /// name of the file the buffer is associated with. - string filename; + FileName filename; boost::scoped_ptr messages; @@ -199,7 +199,7 @@ public: }; -Buffer::Impl::Impl(Buffer & parent, string const & file, bool readonly_) +Buffer::Impl::Impl(Buffer & parent, FileName const & file, bool readonly_) : lyx_clean(true), bak_clean(true), unnamed(false), read_only(readonly_), filename(file), file_fully_loaded(false), inset(params), toc_backend(&parent) @@ -207,7 +207,7 @@ Buffer::Impl::Impl(Buffer & parent, string const & file, bool readonly_) inset.setAutoBreakRows(true); lyxvc.buffer(&parent); temppath = createBufferTmpDir(); - params.filepath = onlyPath(file); + params.filepath = onlyPath(file.absFilename()); // FIXME: And now do something if temppath == string(), because we // assume from now on that temppath points to a valid temp dir. // See http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg67406.html @@ -215,7 +215,7 @@ Buffer::Impl::Impl(Buffer & parent, string const & file, bool readonly_) Buffer::Buffer(string const & file, bool readonly) - : pimpl_(new Impl(*this, file, readonly)) + : pimpl_(new Impl(*this, FileName(file), readonly)) { lyxerr[Debug::INFO] << "Buffer::Buffer()" << endl; } @@ -358,23 +358,24 @@ pair const Buffer::getLogName() const string const path = temppath(); - string const fname = addName(path, + FileName const fname(addName(temppath(), onlyFilename(changeExtension(filename, - ".log"))); - string const bname = + ".log")))); + FileName const bname( addName(path, onlyFilename( changeExtension(filename, - formats.extension("literate") + ".out"))); + formats.extension("literate") + ".out")))); // If no Latex log or Build log is newer, show Build log - if (fs::exists(bname) && - (!fs::exists(fname) || fs::last_write_time(fname) < fs::last_write_time(bname))) { + if (fs::exists(bname.toFilesystemEncoding()) && + (!fs::exists(fname.toFilesystemEncoding()) || + fs::last_write_time(fname.toFilesystemEncoding()) < fs::last_write_time(bname.toFilesystemEncoding()))) { lyxerr[Debug::FILES] << "Log name calculated as: " << bname << endl; - return make_pair(Buffer::buildlog, bname); + return make_pair(Buffer::buildlog, bname.absFilename()); } lyxerr[Debug::FILES] << "Log name calculated as: " << fname << endl; - return make_pair(Buffer::latexlog, fname); + return make_pair(Buffer::latexlog, fname.absFilename()); } @@ -389,9 +390,10 @@ void Buffer::setReadonly(bool const flag) void Buffer::setFileName(string const & newfile) { - pimpl_->filename = makeAbsPath(newfile); - params().filepath = onlyPath(pimpl_->filename); - setReadonly(fs::is_readonly(pimpl_->filename)); + string const filename = makeAbsPath(newfile); + pimpl_->filename = FileName(filename); + params().filepath = onlyPath(filename); + setReadonly(fs::is_readonly(pimpl_->filename.toFilesystemEncoding())); updateTitles(); } @@ -717,7 +719,7 @@ bool Buffer::save() const // make a backup if the file already exists string s; - if (lyxrc.make_backup && fs::exists(fileName())) { + if (lyxrc.make_backup && fs::exists(pimpl_->filename.toFilesystemEncoding())) { s = fileName() + '~'; if (!lyxrc.backupdir_path.empty()) s = addName(lyxrc.backupdir_path, @@ -728,7 +730,7 @@ bool Buffer::save() const // But to use this we need fs::copy_file to actually do a copy, // even when the target file exists. (Lgb) try { - fs::copy_file(fileName(), s, false); + fs::copy_file(pimpl_->filename.toFilesystemEncoding(), s, false); } catch (fs::filesystem_error const & fe) { Alert::error(_("Backup failure"), @@ -740,34 +742,34 @@ bool Buffer::save() const } } - if (writeFile(fileName())) { + if (writeFile(pimpl_->filename)) { markClean(); removeAutosaveFile(fileName()); } else { // Saving failed, so backup is not backup if (lyxrc.make_backup) - rename(FileName(s), FileName(fileName())); + rename(FileName(s), pimpl_->filename); return false; } return true; } -bool Buffer::writeFile(string const & fname) const +bool Buffer::writeFile(FileName const & fname) const { - if (pimpl_->read_only && fname == fileName()) + if (pimpl_->read_only && fname == pimpl_->filename) return false; bool retval = false; if (params().compressed) { - io::filtering_ostream ofs(io::gzip_compressor() | io::file_sink(fname)); + io::filtering_ostream ofs(io::gzip_compressor() | io::file_sink(fname.toFilesystemEncoding())); if (!ofs) return false; retval = do_writeFile(ofs); } else { - ofstream ofs(fname.c_str(), ios::out|ios::trunc); + ofstream ofs(fname.toFilesystemEncoding().c_str(), ios::out|ios::trunc); if (!ofs) return false; @@ -1078,7 +1080,7 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname, preamble += "\n"; } - string const name = runparams.nice ? changeExtension(pimpl_->filename, ".sgml") + string const name = runparams.nice ? changeExtension(fileName(), ".sgml") : fname; preamble += features.getIncludedFiles(name); preamble += features.getLyXSGMLEntities(); @@ -1519,9 +1521,9 @@ void Buffer::markDirty() } -string const & Buffer::fileName() const +string const Buffer::fileName() const { - return pimpl_->filename; + return pimpl_->filename.absFilename(); } diff --git a/src/buffer.h b/src/buffer.h index ab48f50817..c7e34a530e 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -35,6 +35,7 @@ namespace lyx { +namespace support { class FileName; } class BufferParams; class ErrorItem; @@ -144,7 +145,7 @@ public: bool save() const; /// Write file. Returns \c false if unsuccesful. - bool writeFile(std::string const &) const; + bool writeFile(support::FileName const &) const; /// Just a wrapper for the method below, first creating the ofstream. bool makeLaTeXFile(std::string const & filename, @@ -201,7 +202,7 @@ public: void markDirty(); /// Returns the buffer's filename. It is always an absolute path. - std::string const & fileName() const; + std::string const fileName() const; /// Returns the the path where the buffer lives. /// It is always an absolute path. diff --git a/src/bufferlist.C b/src/bufferlist.C index ed824f93c4..66d930aabd 100644 --- a/src/bufferlist.C +++ b/src/bufferlist.C @@ -39,6 +39,7 @@ namespace lyx { using support::addName; using support::bformat; +using support::FileName; using support::makeAbsPath; using support::makeDisplayPath; using support::onlyFilename; @@ -356,7 +357,7 @@ void BufferList::emergencyWrite(Buffer * buf) string s = buf->fileName(); s += ".emergency"; lyxerr << " " << s << endl; - if (buf->writeFile(s)) { + if (buf->writeFile(FileName(s))) { buf->markClean(); lyxerr << to_utf8(_(" Save seems successful. Phew.")) << endl; return; @@ -369,7 +370,7 @@ void BufferList::emergencyWrite(Buffer * buf) string s = addName(package().home_dir(), buf->fileName()); s += ".emergency"; lyxerr << ' ' << s << endl; - if (buf->writeFile(s)) { + if (buf->writeFile(FileName(s))) { buf->markClean(); lyxerr << to_utf8(_(" Save seems successful. Phew.")) << endl; return; @@ -383,7 +384,7 @@ void BufferList::emergencyWrite(Buffer * buf) s = addName(package().temp_dir(), buf->fileName()); s += ".emergency"; lyxerr << ' ' << s << endl; - if (buf->writeFile(s)) { + if (buf->writeFile(FileName(s))) { buf->markClean(); lyxerr << to_utf8(_(" Save seems successful. Phew.")) << endl; return; diff --git a/src/exporter.C b/src/exporter.C index 6c669bb3bd..0956e100d2 100644 --- a/src/exporter.C +++ b/src/exporter.C @@ -76,12 +76,12 @@ vector const Backends(Buffer const & buffer) /// ask the user what to do if a file already exists -int checkOverwrite(string const & filename) +int checkOverwrite(FileName const & filename) { - if (fs::exists(filename)) { + if (fs::exists(filename.toFilesystemEncoding())) { docstring text = bformat(_("The file %1$s already exists.\n\n" "Do you want to over-write that file?"), - makeDisplayPath(filename)); + makeDisplayPath(filename.absFilename())); return Alert::prompt(_("Over-write file?"), text, 0, 2, _("&Over-write"), _("Over-write &all"), @@ -120,7 +120,7 @@ CopyStatus copyFile(string const & format, return ret; if (!force) { - switch(checkOverwrite(destFile.absFilename())) { + switch(checkOverwrite(destFile)) { case 0: ret = SUCCESS; break; @@ -195,7 +195,7 @@ bool Exporter::Export(Buffer * buffer, string const & format, writeFileAscii(*buffer, filename, runparams); // no backend else if (backend_format == "lyx") - buffer->writeFile(filename); + buffer->writeFile(FileName(filename)); // Docbook backend else if (buffer->isDocBook()) { runparams.nice = !put_in_tempdir; @@ -219,9 +219,9 @@ bool Exporter::Export(Buffer * buffer, string const & format, string const error_type = (format == "program")? "Build" : bufferFormat(*buffer); string const ext = formats.extension(format); - string const tmp_result_file = changeExtension(filename, ext); + FileName const tmp_result_file(changeExtension(filename, ext)); bool const success = converters.convert(buffer, FileName(filename), - FileName(tmp_result_file), FileName(buffer->fileName()), backend_format, format, + tmp_result_file, FileName(buffer->fileName()), backend_format, format, buffer->errorList(error_type)); // Emit the signal to show the error list. buffer->errors(error_type); @@ -229,7 +229,7 @@ bool Exporter::Export(Buffer * buffer, string const & format, return false; if (put_in_tempdir) - result_file = tmp_result_file; + result_file = tmp_result_file.absFilename(); else { result_file = changeExtension(buffer->fileName(), ext); // We need to copy referenced files (e. g. included graphics @@ -248,9 +248,9 @@ bool Exporter::Export(Buffer * buffer, string const & format, } if (status == CANCEL) { buffer->message(_("Document export cancelled.")); - } else if (fs::exists(tmp_result_file)) { + } else if (fs::exists(tmp_result_file.toFilesystemEncoding())) { // Finally copy the main file - status = copyFile(format, FileName(tmp_result_file), + status = copyFile(format, tmp_result_file, FileName(result_file), result_file, status == FORCE); buffer->message(bformat(_("Document exported as %1$s " diff --git a/src/lyx_cb.C b/src/lyx_cb.C index 7debc6202c..c46b23dadd 100644 --- a/src/lyx_cb.C +++ b/src/lyx_cb.C @@ -234,7 +234,7 @@ int AutoSaveBuffer::generateChild() FileName const tmp_ret(tempName(string(), "lyxauto")); if (!tmp_ret.empty()) { - bv_.buffer()->writeFile(tmp_ret.absFilename()); + bv_.buffer()->writeFile(tmp_ret); // assume successful write of tmp_ret if (!rename(tmp_ret, fname_)) { failed = true; @@ -249,7 +249,7 @@ int AutoSaveBuffer::generateChild() if (failed) { // failed to write/rename tmp_ret so try writing direct - if (!bv_.buffer()->writeFile(fname_.absFilename())) { + if (!bv_.buffer()->writeFile(fname_)) { // It is dangerous to do this in the child, // but safe in the parent, so... if (pid == -1) diff --git a/src/lyxfunc.C b/src/lyxfunc.C index c19b7f2f7b..ae40bd2894 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -919,7 +919,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) format->extension()); filename = addName(buffer->temppath(), filename); - if (!buffer->writeFile(filename)) + if (!buffer->writeFile(FileName(filename))) break; } else { @@ -1563,7 +1563,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) << endl; } - if (defaults.writeFile(defaults.fileName())) + if (defaults.writeFile(FileName(defaults.fileName()))) // FIXME Should use bformat setMessage(_("Document defaults saved in ") + makeDisplayPath(fname)); @@ -1883,15 +1883,14 @@ void LyXFunc::open(string const & fname) // get absolute path of file and add ".lyx" to the filename if // necessary - string const fullpath = fileSearch(string(), filename, "lyx").absFilename(); - if (!fullpath.empty()) { - filename = fullpath; - } + FileName const fullname = fileSearch(string(), filename, "lyx"); + BOOST_ASSERT(!fullname.empty()); + filename = fullname.absFilename(); docstring const disp_fn = makeDisplayPath(filename); // if the file doesn't exist, let the user create one - if (!fs::exists(filename)) { + if (!fs::exists(fullname.toFilesystemEncoding())) { // the user specifically chose this name. Believe him. Buffer * const b = newFile(filename, string(), true); if (b)