X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBuffer.cpp;h=8ca74103a232a48705cd0814cdb14ab1dba8a768;hb=c5cab5a8f7e1f0f3996c1655c45a0fb88576dd5f;hp=74d5ac8deb428621552f968fb5e24fd25b339aac;hpb=6b095e2b7107110bec593edd02bbdcf25adae76a;p=lyx.git diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 74d5ac8deb..8ca74103a2 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -562,13 +562,13 @@ Buffer::~Buffer() } -Buffer * Buffer::cloneFromMaster() const +Buffer * Buffer::cloneWithChildren() const { BufferMap bufmap; cloned_buffers.push_back(new CloneList); CloneList * clones = cloned_buffers.back(); - masterBuffer()->cloneWithChildren(bufmap, clones); + cloneWithChildren(bufmap, clones); // make sure we got cloned BufferMap::const_iterator bit = bufmap.find(this); @@ -888,6 +888,7 @@ int Buffer::readHeader(Lexer & lex) params().options.erase(); params().master.erase(); params().float_placement.erase(); + params().float_alignment.erase(); params().paperwidth.erase(); params().paperheight.erase(); params().leftmargin.erase(); @@ -1040,6 +1041,10 @@ bool Buffer::readDocument(Lexer & lex) << absFileName() << ") does not include " "this document. Ignoring the master assignment."); + // If the master has just been created, un-hide it (#11162) + if (!master->fileName().exists()) + lyx::dispatch(FuncRequest(LFUN_BUFFER_SWITCH, + master->absFileName())); } } } @@ -1329,14 +1334,37 @@ Buffer::ReadStatus Buffer::convertLyXFormat(FileName const & fn, FileName Buffer::getBackupName() const { + map const file_formats = { + {544, "23"}, + {508, "22"}, + {474, "21"}, + {413, "20"}, + {345, "16"}, + {276, "15"}, + {245, "14"}, + {221, "13"}, + {220, "12"}, + {218, "1163"}, + {217, "116"}, + {216, "115"}, + {215, "11"}, + {210, "010"}, + {200, "006"} + }; FileName const & fn = fileName(); string const fname = fn.onlyFileNameWithoutExt(); string const fext = fn.extension() + "~"; string const fpath = lyxrc.backupdir_path.empty() ? fn.onlyPath().absFileName() : lyxrc.backupdir_path; - string const fform = convert(d->file_format); - string const backname = fname + "-lyxformat-" + fform; + string backup_suffix; + // If file format is from a stable series use version instead of file format + auto const it = file_formats.find(d->file_format); + if (it != file_formats.end()) + backup_suffix = "-lyx" + it->second; + else + backup_suffix = "-lyxformat-" + convert(d->file_format); + string const backname = fname + backup_suffix; FileName backup(addName(fpath, addExtension(backname, fext))); // limit recursion, just in case @@ -1874,8 +1902,7 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os, "file path name."), inputpath, uncodable_glyphs)); } else { - string docdir = - latex_path(original_path); + string docdir = os::latex_path(original_path); if (contains(docdir, '#')) { docdir = subst(docdir, "#", "\\#"); os << "\\catcode`\\#=11" @@ -1886,9 +1913,20 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os, os << "\\catcode`\\%=11" "\\def\\%{%}\\catcode`\\%=14\n"; } + bool const detokenize = !isAscii(from_utf8(docdir)); + bool const quote = contains(docdir, ' '); os << "\\makeatletter\n" - << "\\def\\input@path{{" - << docdir << "}}\n" + << "\\def\\input@path{{"; + if (detokenize) + os << "\\detokenize{"; + if (quote) + os << "\""; + os << docdir; + if (quote) + os << "\""; + if (detokenize) + os << "}"; + os << "}}\n" << "\\makeatother\n"; } } @@ -2382,7 +2420,8 @@ BiblioInfo const & Buffer::bibInfo() const } -void Buffer::registerBibfiles(FileNamePairList const & bf) const { +void Buffer::registerBibfiles(FileNamePairList const & bf) const +{ // We register the bib files in the master buffer, // if there is one, but also in every single buffer, // in case a child is compiled alone. @@ -2430,17 +2469,17 @@ void Buffer::checkIfBibInfoCacheIsValid() const } -void Buffer::reloadBibInfoCache() const +void Buffer::reloadBibInfoCache(bool const force) const { // use the master's cache Buffer const * const tmp = masterBuffer(); if (tmp != this) { - tmp->reloadBibInfoCache(); + tmp->reloadBibInfoCache(force); return; } checkIfBibInfoCacheIsValid(); - if (d->bibinfo_cache_valid_) + if (d->bibinfo_cache_valid_ && !force) return; d->bibinfo_.clear(); @@ -3869,6 +3908,9 @@ unique_ptr Buffer::getSourceCode(odocstream & os, string const & format, // No side effect of file copying and image conversion runparams.dryrun = true; + // Some macros rely on font encoding + runparams.main_fontenc = params().main_font_encoding(); + if (output == CurrentParagraph) { runparams.par_begin = par_begin; runparams.par_end = par_end; @@ -4365,7 +4407,8 @@ Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir Alert::error(_("File name error"), bformat(_("The directory path to the document\n%1$s\n" "contains spaces, but your TeX installation does " - "not allow them."), from_ascii(filePath()))); + "not allow them. You should save the file to a directory " + "whose name does not contain spaces."), from_ascii(filePath()))); return ExportTexPathHasSpaces; } else { runparams.nice = false;