]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathHull.cpp
Small improvement for bug #7509 as suggested by JMarc
[lyx.git] / src / mathed / InsetMathHull.cpp
index aa74b9c191e96dbd5af806039cfdadbae9cc706c..686e4274077c61251d66d4ec7e6ffb242cfa0789 100644 (file)
@@ -53,6 +53,7 @@
 #include "support/convert.h"
 #include "support/lassert.h"
 #include "support/debug.h"
+#include "support/filetools.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
 
@@ -244,7 +245,8 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype)
        if (haveNumbers()) {
                BufferParams const & bp = buffer_->params();
                string const & lang = it->getParLanguage(bp)->code();
-               Counters & cnts = bp.documentClass().counters();
+               Counters & cnts =
+                       buffer_->masterBuffer()->params().documentClass().counters();
 
                // right now, we only need to do this at export time
                if (utype == OutputUpdate) {
@@ -258,9 +260,8 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype)
                // this has to be done separately
                docstring const eqstr = from_ascii("equation");
                if (cnts.hasCounter(eqstr)) {
-                       if (utype == OutputUpdate) {
+                       if (utype == OutputUpdate)
                                counter_map[eqstr] = cnts.value(eqstr);
-                       LYXERR0(counter_map[eqstr]);}
                        for (size_t i = 0; i != label_.size(); ++i) {
                                if (numbered(i)) {
                                        cnts.step(eqstr, utype);
@@ -779,9 +780,9 @@ void InsetMathHull::header_write(WriteStream & os) const
 
        case hullEquation:
                if (n)
-                       os << "\\begin{equation" << star(n) << "}\n";
+                       os << "\n\\begin{equation" << star(n) << "}\n";
                else
-                       os << "\\[\n";
+                       os << "\n\\[\n";
                break;
 
        case hullEqnArray:
@@ -789,17 +790,17 @@ void InsetMathHull::header_write(WriteStream & os) const
        case hullFlAlign:
        case hullGather:
        case hullMultline:
-               os << "\\begin{" << hullName(type_) << star(n) << "}\n";
+               os << "\n\\begin{" << hullName(type_) << star(n) << "}\n";
                break;
 
        case hullAlignAt:
        case hullXAlignAt:
-               os << "\\begin{" << hullName(type_) << star(n) << '}'
+               os << "\n\\begin{" << hullName(type_) << star(n) << '}'
                  << '{' << static_cast<unsigned int>((ncols() + 1)/2) << "}\n";
                break;
 
        case hullXXAlignAt:
-               os << "\\begin{" << hullName(type_) << '}'
+               os << "\n\\begin{" << hullName(type_) << '}'
                  << '{' << static_cast<unsigned int>((ncols() + 1)/2) << "}\n";
                break;
 
@@ -808,7 +809,7 @@ void InsetMathHull::header_write(WriteStream & os) const
                break;
 
        default:
-               os << "\\begin{unknown" << star(n) << "}\n";
+               os << "\n\\begin{unknown" << star(n) << "}\n";
                break;
        }
 }
@@ -1596,7 +1597,7 @@ bool InsetMathHull::getStatus(Cursor & cur, FuncRequest const & cmd,
                // LABEL_INSERT?
                bool const enable = (type_ == hullMultline)
                        ? (nrows() - 1 == cur.row())
-                       : display() != Inline && nrows() > 1;
+                       : display() != Inline;
                row_type const r = (type_ == hullMultline) ? nrows() - 1 : cur.row();
                status.setEnabled(enable);
                status.setOnOff(enable && numbered(r));
@@ -1935,8 +1936,12 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons
                InsetMathGrid::mathmlize(ms);
                ms << ETag("math");
        } else {
+               TexRow texrow;
+               texrow.reset();
+               otexstream ols(ls, texrow);
                ms << MTag("alt role='tex'");
-               res = latex(ls, runparams);
+               latex(ols, runparams);
+               res = texrow.rows();
                ms << from_utf8(subst(subst(to_utf8(ls.str()), "&", "&amp;"), "<", "&lt;"));
                ms << ETag("alt");
        }
@@ -1961,6 +1966,9 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons
 bool InsetMathHull::haveNumbers() const
 {
        bool havenumbers = false;
+       // inline formulas are never numbered (bug 7351 part 3)
+       if (getType() == hullSimple)
+               return havenumbers;
        for (size_t i = 0; i != numbered_.size(); ++i) {
                if (numbered_[i]) {
                        havenumbers = true;
@@ -2013,7 +2021,7 @@ void InsetMathHull::htmlize(HtmlStream & os) const
 // and we simply do not have that in InsetMathGrid.
 void InsetMathHull::mathmlize(MathStream & os) const
 {
-       bool havenumbers = haveNumbers();
+       bool const havenumbers = haveNumbers();
        bool const havetable = havenumbers || nrows() > 1 || ncols() > 1;
 
        if (havetable)
@@ -2140,18 +2148,35 @@ docstring InsetMathHull::xhtml(XHTMLStream & xs, OutputParams const & op) const
        // tried and failed with MathML or HTML or (b) didn't try yet at all but
        // aren't doing LaTeX, in which case we are doing Images.
        if (!success && mathtype != BufferParams::LaTeX) {
-               loadPreview(docit_);
-               graphics::PreviewImage const * pimage = preview_->getPreviewImage(buffer());
-               if (pimage) {
+               graphics::PreviewImage const * pimage = 0;
+               if (!op.dryrun) {
+                       loadPreview(docit_);
+                       pimage = preview_->getPreviewImage(buffer());
                        // FIXME Do we always have png?
+               }
+
+               if (pimage || op.dryrun) {
+                       string const filename = pimage ? pimage->filename().onlyFileName()
+                                                      : "previewimage.png";
+                       if (pimage) {
+                               // if we are not in the master buffer, then we need to see that the
+                               // generated image is copied there; otherwise, preview fails.
+                               Buffer const * mbuf = buffer().masterBuffer();
+                               if (mbuf != &buffer()) {
+                                       string mbtmp = mbuf->temppath();
+                                       FileName const mbufimg(support::addName(mbtmp, filename));
+                                       pimage->filename().copyTo(mbufimg);
+                               }
+                               // add the file to the list of files to be exported
+                               op.exportdata->addExternalFile("xhtml", pimage->filename());
+                       }
+
                        string const tag = (getType() == hullSimple) ? "span" : "div";
-                       FileName const & mathimg = pimage->filename();
-                       xs << html::StartTag(tag)
-                          << html::CompTag("img", "src=\"" + mathimg.onlyFileName() + "\"")
-                          << html::EndTag(tag);
-                       xs.cr();
-                       // add the file to the list of files to be exported
-                       op.exportdata->addExternalFile("xhtml", mathimg);
+                       xs << html::CR()
+                          << html::StartTag(tag)
+                                << html::CompTag("img", "src=\"" + filename + "\"")
+                                << html::EndTag(tag)
+                                << html::CR();
                        success = true;
                }
        }
@@ -2174,10 +2199,9 @@ docstring InsetMathHull::xhtml(XHTMLStream & xs, OutputParams const & op) const
                // probably should allow for some kind of customization here
                string const tag = (getType() == hullSimple) ? "span" : "div";
                xs << html::StartTag(tag, "class='math'")
-                  << XHTMLStream::ESCAPE_AND
                   << latex 
-                  << html::EndTag(tag);
-               xs.cr();
+                  << html::EndTag(tag)
+                  << html::CR();
        }
        return docstring();
 }