]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
cmake: remove 2.8 warning
[lyx.git] / src / Buffer.cpp
index 1e7f06f5afa592b91b1bb2b153ee260917088f6d..c6ac1591d73e1f829e1c157a8b39de332b38c7ce 100644 (file)
@@ -342,7 +342,6 @@ Buffer::Impl::Impl(Buffer * owner, FileName const & file, bool readonly_,
        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_;
@@ -1087,6 +1086,11 @@ bool Buffer::save() const
 
 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;
 
@@ -1148,7 +1152,7 @@ docstring Buffer::emergencyWrite()
        }
 
        // 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))) {
@@ -1271,6 +1275,14 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
        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,
@@ -1344,15 +1356,6 @@ void Buffer::writeLaTeXSource(otexstream & os,
        }
        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
@@ -1506,6 +1509,11 @@ void Buffer::makeDocBookFile(FileName const & fname,
        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();
@@ -1580,8 +1588,6 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
 
        params().documentClass().counters().reset();
 
-       updateMacros();
-
        sgml::openTag(os, top);
        os << '\n';
        docbookParagraphs(text(), *this, os, runparams);
@@ -1599,6 +1605,11 @@ void Buffer::makeLyXHTMLFile(FileName const & fname,
        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();
@@ -1613,10 +1624,7 @@ void Buffer::writeLyXHTMLSource(odocstream & os,
 {
        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"
@@ -1702,8 +1710,6 @@ void Buffer::validate(LaTeXFeatures & features) const
 {
        params().validate(features);
 
-       updateMacros();
-
        for_each(paragraphs().begin(), paragraphs().end(),
                 bind(&Paragraph::validate, _1, ref(features)));
 
@@ -2544,7 +2550,7 @@ Buffer const * Buffer::parent() const
 ListOfBuffers Buffer::allRelatives() const
 {
        ListOfBuffers lb = masterBuffer()->getDescendents();
-       lb.push_front(const_cast<Buffer *>(this));
+       lb.push_front(const_cast<Buffer *>(masterBuffer()));
        return lb;
 }
 
@@ -3458,6 +3464,11 @@ namespace {
 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;
 }
 
 
@@ -3518,9 +3529,6 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
        filename = changeExtension(filename,
                                   formats.extension(backend_format));
 
-       // fix macros
-       updateMacroInstances();
-
        // Plain text backend
        if (backend_format == "text") {
                runparams.flavor = OutputParams::TEXT;
@@ -3558,7 +3566,6 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
                        if (d->cloned_buffer_) {
                                d->cloned_buffer_->d->errorLists["Export"] =
                                        d->errorLists["Export"];
-                               errors("Export");
                        }
                        return false;
                }
@@ -3573,7 +3580,6 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
                        if (d->cloned_buffer_) {
                                d->cloned_buffer_->d->errorLists["Export"] =
                                        d->errorLists["Export"];
-                               errors("Export");
                        }
                        return false;
                }
@@ -3715,12 +3721,17 @@ bool Buffer::isExportable(string const & format) const
 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;
@@ -3891,24 +3902,56 @@ Buffer::ReadStatus Buffer::loadThisLyXFile(FileName const & fn)
 
 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));
        }
 }