temppath = cloned_buffer_->d->temppath;
file_fully_loaded = true;
params = cloned_buffer_->d->params;
- gui_ = cloned_buffer->d->gui_;
bibfiles_cache_ = cloned_buffer_->d->bibfiles_cache_;
bibinfo_ = cloned_buffer_->d->bibinfo_;
bibinfo_cache_valid_ = cloned_buffer_->d->bibinfo_cache_valid_;
bool Buffer::writeFile(FileName const & fname) const
{
+ // FIXME Do we need to do these here? I don't think writing
+ // the LyX file depends upon it. (RGH)
+ // updateBuffer();
+ // updateMacroInstances();
+
if (d->read_only && fname == d->filename)
return false;
}
// 2) In HOME directory.
- string s = addName(package().home_dir().absFileName(), absFileName());
+ string s = addName(Package::get_home_dir().absFileName(), absFileName());
s += ".emergency";
lyxerr << ' ' << s << endl;
if (writeFile(FileName(s))) {
errorList.clear();
bool failed_export = false;
otexstream os(ofs, d->texrow);
+
+ // make sure we are ready to export
+ // this needs to be done before we validate
+ // FIXME Do we need to do this all the time? I.e., in children
+ // of a master we are exporting?
+ updateBuffer();
+ updateMacroInstances();
+
try {
os.texrow().reset();
writeLaTeXSource(os, original_path,
}
LYXERR(Debug::INFO, "lyx document header finished");
- // Don't move this behind the parent_buffer=0 code below,
- // because then the macros will not get the right "redefinition"
- // flag as they don't see the parent macros which are output before.
- updateMacros();
-
- // fold macros if possible, still with parent buffer as the
- // macros will be put in the prefix anyway.
- updateMacroInstances();
-
// There are a few differences between nice LaTeX and usual files:
// usual is \batchmode and has a
// special input@path to allow the including of figures
if (!openFileWrite(ofs, fname))
return;
+ // make sure we are ready to export
+ // this needs to be done before we validate
+ updateBuffer();
+ updateMacroInstances();
+
writeDocBookSource(ofs, fname.absFileName(), runparams, body_only);
ofs.close();
params().documentClass().counters().reset();
- updateMacros();
-
sgml::openTag(os, top);
os << '\n';
docbookParagraphs(text(), *this, os, runparams);
if (!openFileWrite(ofs, fname))
return;
+ // make sure we are ready to export
+ // this has to be done before we validate
+ updateBuffer(UpdateMaster, OutputUpdate);
+ updateMacroInstances();
+
writeLyXHTMLSource(ofs, runparams, body_only);
ofs.close();
{
LaTeXFeatures features(*this, params(), runparams);
validate(features);
- updateBuffer(UpdateMaster, OutputUpdate);
d->bibinfo_.makeCitationLabels(*this);
- updateMacros();
- updateMacroInstances();
if (!only_body) {
os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
{
params().validate(features);
- updateMacros();
-
for_each(paragraphs().begin(), paragraphs().end(),
bind(&Paragraph::validate, _1, ref(features)));
ListOfBuffers Buffer::allRelatives() const
{
ListOfBuffers lb = masterBuffer()->getDescendents();
- lb.push_front(const_cast<Buffer *>(this));
+ lb.push_front(const_cast<Buffer *>(masterBuffer()));
return lb;
}
void Buffer::setExportStatus(bool e) const
{
d->doing_export = e;
+ ListOfBuffers clist = getDescendents();
+ ListOfBuffers::const_iterator cit = clist.begin();
+ ListOfBuffers::const_iterator const cen = clist.end();
+ for (; cit != cen; ++cit)
+ (*cit)->d->doing_export = e;
}
filename = changeExtension(filename,
formats.extension(backend_format));
- // fix macros
- updateMacroInstances();
-
// Plain text backend
if (backend_format == "text") {
runparams.flavor = OutputParams::TEXT;
if (d->cloned_buffer_) {
d->cloned_buffer_->d->errorLists["Export"] =
d->errorLists["Export"];
- errors("Export");
}
return false;
}
if (d->cloned_buffer_) {
d->cloned_buffer_->d->errorLists["Export"] =
d->errorLists["Export"];
- errors("Export");
}
return false;
}
vector<Format const *> Buffer::exportableFormats(bool only_viewable) const
{
vector<string> const backs = backends();
+ set<string> excludes;
+ if (params().useNonTeXFonts) {
+ excludes.insert("latex");
+ excludes.insert("pdflatex");
+ }
vector<Format const *> result =
- theConverters().getReachable(backs[0], only_viewable, true);
+ theConverters().getReachable(backs[0], only_viewable, true, excludes);
for (vector<string>::const_iterator it = backs.begin() + 1;
it != backs.end(); ++it) {
vector<Format const *> r =
- theConverters().getReachable(*it, only_viewable, false);
+ theConverters().getReachable(*it, only_viewable, false, excludes);
result.insert(result.end(), r.begin(), r.end());
}
return result;
void Buffer::bufferErrors(TeXErrors const & terr, ErrorList & errorList) const
{
- TeXErrors::Errors::const_iterator cit = terr.begin();
+ TeXErrors::Errors::const_iterator it = terr.begin();
TeXErrors::Errors::const_iterator end = terr.end();
+ ListOfBuffers clist = getDescendents();
+ ListOfBuffers::const_iterator cen = clist.end();
- for (; cit != end; ++cit) {
+ for (; it != end; ++it) {
int id_start = -1;
int pos_start = -1;
- int errorRow = cit->error_in_line;
- bool found = d->texrow.getIdFromRow(errorRow, id_start,
- pos_start);
+ int errorRow = it->error_in_line;
+ Buffer const * buf = 0;
+ Impl const * p = d;
+ if (it->child_name.empty())
+ p->texrow.getIdFromRow(errorRow, id_start, pos_start);
+ else {
+ // The error occurred in a child
+ ListOfBuffers::const_iterator cit = clist.begin();
+ for (; cit != cen; ++cit) {
+ string const child_name =
+ DocFileName(changeExtension(
+ (*cit)->absFileName(), "tex")).
+ mangledFileName();
+ if (it->child_name != child_name)
+ continue;
+ (*cit)->d->texrow.getIdFromRow(errorRow,
+ id_start, pos_start);
+ if (id_start != -1) {
+ buf = d->cloned_buffer_
+ ? (*cit)->d->cloned_buffer_->d->owner_
+ : (*cit)->d->owner_;
+ p = (*cit)->d;
+ break;
+ }
+ }
+ }
int id_end = -1;
int pos_end = -1;
+ bool found;
do {
++errorRow;
- found = d->texrow.getIdFromRow(errorRow, id_end, pos_end);
+ found = p->texrow.getIdFromRow(errorRow, id_end, pos_end);
} while (found && id_start == id_end && pos_start == pos_end);
- errorList.push_back(ErrorItem(cit->error_desc,
- cit->error_text, id_start, pos_start, pos_end));
+ if (id_start != id_end) {
+ // Next registered position is outside the inset where
+ // the error occurred, so signal end-of-paragraph
+ pos_end = 0;
+ }
+
+ errorList.push_back(ErrorItem(it->error_desc,
+ it->error_text, id_start, pos_start, pos_end, buf));
}
}