#include "graphics/GraphicsCache.h"
#include "graphics/PreviewLoader.h"
+#include "frontends/Application.h"
#include "frontends/alert.h"
#include "frontends/Delegates.h"
#include "frontends/WorkAreaManager.h"
/// has been externally modified? Can be reset by the user.
mutable bool externally_modified_;
+ ///Binding LaTeX lines with buffer positions.
+ //Common routine for LaTeX and Reference errors listing.
+ void traverseErrors(TeXErrors::Errors::const_iterator err,
+ TeXErrors::Errors::const_iterator end,
+ ErrorList & errorList) const;
+
private:
/// So we can force access via the accessors.
mutable Buffer const * parent_buffer;
if (!cloned_buffer_) {
temppath = createBufferTmpDir();
lyxvc.setBuffer(owner_);
+ Language const * inplang = theApp() ?
+ languages.getFromCode(theApp()->inputLanguageCode())
+ : nullptr;
+ if (inplang)
+ params.language = inplang;
if (use_gui)
wa_ = new frontend::WorkAreaManager;
return;
params().headsep.erase();
params().footskip.erase();
params().columnsep.erase();
+ params().font_roman_opts.erase();
+ params().font_sans_opts.erase();
+ params().font_typewriter_opts.erase();
params().fonts_cjk.erase();
params().listings_params.clear();
params().clearLayoutModules();
params().biblatex_bibstyle.erase();
params().biblatex_citestyle.erase();
params().multibib.erase();
+ params().lineno_opts.clear();
for (int i = 0; i < 4; ++i) {
params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i];
try { ofs.reset(encoding); }
catch (iconv_codecvt_facet_exception const & e) {
lyxerr << "Caught iconv exception: " << e.what() << endl;
- Alert::error(_("Iconv software exception Detected"), bformat(_("Please "
- "verify that the support software for your encoding (%1$s) is "
- "properly installed"), from_ascii(encoding)));
+ Alert::error(_("Iconv software exception Detected"),
+ bformat(_("Please verify that the `iconv' support software is"
+ " properly installed and supports the selected encoding"
+ " (%1$s), or change the encoding in"
+ " Document>Settings>Language."), from_ascii(encoding)));
return ExportError;
}
if (!openFileWrite(ofs, fname))
os << "\\catcode`\\%=11"
"\\def\\%{%}\\catcode`\\%=14\n";
}
- bool const detokenize = !isAscii(from_utf8(docdir));
+ bool const detokenize = !isAscii(from_utf8(docdir))
+ || contains(docdir, '~');
bool const quote = contains(docdir, ' ');
os << "\\makeatletter\n"
<< "\\def\\input@path{{";
runparams.use_babel = params().writeLaTeX(os, features,
d->filename.onlyPath());
+ // Active characters
+ runparams.active_chars = features.getActiveChars();
+
// Biblatex bibliographies are loaded here
if (params().useBiblatex()) {
vector<pair<docstring, string>> const bibfiles =
map<docstring, FileName>::const_iterator it =
bibfileCache.find(bibid);
if (it != bibfileCache.end()) {
- // i.e., bibfileCache[bibid]
+ // i.e., return bibfileCache[bibid];
return it->second;
}
LYXERR(Debug::FILES, "Reading file location for " << bibid);
- string texfile = changeExtension(to_utf8(bibid), "bib");
- // note that, if the filename can be found directly from the path,
- // findtexfile will just return a FileName object for that path.
- FileName file(findtexfile(texfile, "bib"));
- if (file.empty())
- file = FileName(makeAbsPath(texfile, filePath()));
+ string const texfile = changeExtension(to_utf8(bibid), "bib");
+ // we need to check first if this file exists where it's said to be.
+ // there's a weird bug that occurs otherwise: if the file is in the
+ // Buffer's directory but has the same name as some file that would be
+ // found by kpsewhich, then we find the latter, not the former.
+ FileName const local_file = makeAbsPath(texfile, filePath());
+ FileName file = local_file;
+ if (!file.exists()) {
+ // there's no need now to check whether the file can be found
+ // locally
+ file = findtexfile(texfile, "bib", true);
+ if (file.empty())
+ file = local_file;
+ }
LYXERR(Debug::FILES, "Found at: " << file);
bibfileCache[bibid] = file;
if (it == m.begin())
return m.end();
- it--;
+ --it;
return it;
}
if (format == "pdf4")
s += "\n"
+ bformat(_("Hint: use non-TeX fonts or set input encoding "
- " to '%1$s' or '%2$s'"),
- from_utf8(encodings.fromLyXName("utf8")->guiName()),
- from_utf8(encodings.fromLyXName("ascii")->guiName()));
+ " to '%1$s'"), from_utf8(encodings.fromLyXName("ascii")->guiName()));
Alert::error(_("Couldn't export file"), s);
}
return ExportNoPathToFormat;
result_file = dest_filename;
// We need to copy referenced files (e. g. included graphics
// if format == "dvi") to the result dir.
- vector<ExportedFile> const files =
+ vector<ExportedFile> const extfiles =
runparams.exportdata->externalFiles(format);
string const dest = runparams.export_folder.empty() ?
onlyPath(result_file) : runparams.export_folder;
: force_overwrite == ALL_FILES;
CopyStatus status = use_force ? FORCE : SUCCESS;
- for (ExportedFile const & exp : files) {
+ for (ExportedFile const & exp : extfiles) {
if (status == CANCEL) {
message(_("Document export cancelled."));
return ExportCancel;
"You should do so manually. Otherwise, you will be "
"asked about it again the next time you try to load "
"this file, and may over-write your own work."));
+ } else {
+ Alert::warning(_("Emergency File Renames"),
+ bformat(_("Emergency file renamed as:\n %1$s"),
+ from_utf8(newname.onlyFileName())));
}
}
return ReadOriginal;
}
-void Buffer::bufferErrors(TeXErrors const & terr, ErrorList & errorList) const
+void Buffer::Impl::traverseErrors(TeXErrors::Errors::const_iterator err, TeXErrors::Errors::const_iterator end, ErrorList & errorList) const
{
- for (auto const & err : terr) {
+ for (; err != end; ++err) {
TexRow::TextEntry start = TexRow::text_none, end = TexRow::text_none;
- int errorRow = err.error_in_line;
+ int errorRow = err->error_in_line;
Buffer const * buf = 0;
- Impl const * p = d;
- if (err.child_name.empty())
+ Impl const * p = this;
+ if (err->child_name.empty())
tie(start, end) = p->texrow.getEntriesFromRow(errorRow);
else {
// The error occurred in a child
- for (Buffer const * child : getDescendents()) {
+ for (Buffer const * child : owner_->getDescendents()) {
string const child_name =
DocFileName(changeExtension(child->absFileName(), "tex")).
mangledFileName();
- if (err.child_name != child_name)
+ if (err->child_name != child_name)
continue;
tie(start, end) = child->d->texrow.getEntriesFromRow(errorRow);
if (!TexRow::isNone(start)) {
- buf = d->cloned_buffer_
+ buf = this->cloned_buffer_
? child->d->cloned_buffer_->d->owner_
: child->d->owner_;
p = child->d;
}
}
}
- errorList.push_back(ErrorItem(err.error_desc, err.error_text,
+ errorList.push_back(ErrorItem(err->error_desc, err->error_text,
start, end, buf));
}
}
+void Buffer::bufferErrors(TeXErrors const & terr, ErrorList & errorList) const
+{
+ TeXErrors::Errors::const_iterator err = terr.begin();
+ TeXErrors::Errors::const_iterator end = terr.end();
+
+ d->traverseErrors(err, end, errorList);
+}
+
+
+void Buffer::bufferRefs(TeXErrors const & terr, ErrorList & errorList) const
+{
+ TeXErrors::Errors::const_iterator err = terr.begin_ref();
+ TeXErrors::Errors::const_iterator end = terr.end_ref();
+
+ d->traverseErrors(err, end, errorList);
+}
+
+
void Buffer::updateBuffer(UpdateScope scope, UpdateType utype) const
{
LBUFERR(!text().paragraphs().empty());
setChangesPresent(false);
Buffer & cbuf = const_cast<Buffer &>(*this);
+ // if we are reloading, then we could have a dangling TOC,
+ // in effect. so we need to go ahead and reset, even though
+ // we will do so again when we rebuild the TOC later.
+ cbuf.tocBackend().reset();
// do the real work
ParIterator parit = cbuf.par_iterator_begin();
// to resolve macros in it.
parit.text()->setMacrocontextPosition(parit);
+ // Reset bibitem counter in master (#8499)
+ Buffer const * const master = masterBuffer();
+ if (master == this && !d->ignore_parent)
+ master->params().documentClass().counters().reset(from_ascii("bibitem"));
+
depth_type maxdepth = 0;
pit_type const lastpit = parit.lastpit();
for ( ; parit.pit() <= lastpit ; ++parit.pit()) {