]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathHull.cpp
add busy.gif to resources (in line with cmake)
[lyx.git] / src / mathed / InsetMathHull.cpp
index 38ea7cb77dbfca3fb513dd6d616f948494568f87..f06f7eba22204005958d69e93843dc6d1925238e 100644 (file)
@@ -224,6 +224,12 @@ void InsetMathHull::setBuffer(Buffer & buffer)
 }
 
 
+namespace {
+       const char * counters_to_save[] = {"section", "chapter"};
+       unsigned int const numcnts = sizeof(counters_to_save)/sizeof(char *);
+}
+
+
 void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype)
 {
        if (!buffer_) {
@@ -233,18 +239,40 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype)
                return;
        }
 
-       BufferParams const & bp = buffer_->params();
-       string const & lang = it->getParLanguage(bp)->code();
-       Counters & cnts = bp.documentClass().counters();
-       // so we don't have to write it ten times...
-       docstring const eqstr = from_ascii("equation");
+       // if any of the equations are numbered, then we want to save the values
+       // of some of the counters.
+       if (haveNumbers()) {
+               BufferParams const & bp = buffer_->params();
+               string const & lang = it->getParLanguage(bp)->code();
+               Counters & cnts = bp.documentClass().counters();
+
+               // right now, we only need to do this at export time
+               if (utype == OutputUpdate) {
+                       for (size_t i = 0; i < numcnts; ++i) {
+                               docstring const cnt = from_ascii(counters_to_save[i]);
+                               if (cnts.hasCounter(cnt))
+                                       counter_map[cnt] = cnts.value(cnt);
+                       }
+               }
 
+               // this has to be done separately
+               docstring const eqstr = from_ascii("equation");
+               if (cnts.hasCounter(eqstr)) {
+                       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);
+                                       numbers_[i] = cnts.theCounter(eqstr, lang);
+                               } else
+                                       numbers_[i] = empty_docstring();
+                       }
+               }
+       }
+
+       // now the labels
        for (size_t i = 0; i != label_.size(); ++i) {
-               if (numbered(i) && cnts.hasCounter(eqstr)) {
-                       cnts.step(eqstr, utype);
-                       numbers_[i] = cnts.theCounter(eqstr, lang);
-               } else
-                       numbers_[i] = empty_docstring();
                if (label_[i])
                        label_[i]->updateBuffer(it, utype);
        }
@@ -253,7 +281,7 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype)
 }
 
 
-void InsetMathHull::addToToc(DocIterator const & pit)
+void InsetMathHull::addToToc(DocIterator const & pit) const
 {
        if (!buffer_) {
                //FIXME: buffer_ should be set at creation for this inset! Problem is
@@ -561,7 +589,29 @@ void InsetMathHull::preparePreview(DocIterator const & pos,
                }
        }
 
-       docstring const snippet = macro_preamble.str() + latexString(*this);
+       docstring setcnt;
+       if (forexport && haveNumbers()) {
+               docstring eqstr = from_ascii("equation");
+               CounterMap::const_iterator it = counter_map.find(eqstr);
+               if (it != counter_map.end()) {
+                       int num = it->second;
+                       if (num >= 0)
+                               setcnt += from_ascii("\\setcounter{") + eqstr + '}' +
+                                         '{' + convert<docstring>(num) + '}' + '\n';
+               }
+               for (size_t i = 0; i != numcnts; ++i) {
+                       docstring cnt = from_ascii(counters_to_save[i]);
+                       it = counter_map.find(cnt);
+                       if (it == counter_map.end())
+                                       continue;
+                       int num = it->second;
+                       if (num > 0)
+                               setcnt += from_ascii("\\setcounter{") + cnt + '}' +
+                                         '{' + convert<docstring>(num) + '}';
+               }
+       }
+       docstring const snippet = macro_preamble.str() +
+           setcnt + latexString(*this);
        LYXERR(Debug::MACROS, "Preview snippet: " << snippet);
        preview_->addPreview(snippet, *buffer, forexport);
 }
@@ -729,9 +779,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:
@@ -739,17 +789,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;
 
@@ -758,7 +808,7 @@ void InsetMathHull::header_write(WriteStream & os) const
                break;
 
        default:
-               os << "\\begin{unknown" << star(n) << "}\n";
+               os << "\n\\begin{unknown" << star(n) << "}\n";
                break;
        }
 }
@@ -1870,6 +1920,7 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons
        ++ms.tab(); ms.cr(); ms.os() << '<' << bname << '>';
 
        odocstringstream ls;
+       otexstream ols(ls);
        if (runparams.flavor == OutputParams::XML) {
                ms << MTag("alt role='tex' ");
                // Workaround for db2latex: db2latex always includes equations with
@@ -1886,7 +1937,7 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons
                ms << ETag("math");
        } else {
                ms << MTag("alt role='tex'");
-               res = latex(ls, runparams);
+               res = latex(ols, runparams);
                ms << from_utf8(subst(subst(to_utf8(ls.str()), "&", "&amp;"), "<", "&lt;"));
                ms << ETag("alt");
        }
@@ -1908,13 +1959,7 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons
 }
 
 
-// FIXME XHTML
-// We need to do something about alignment here.
-//
-// This duplicates code from InsetMathGrid, but
-// we need access here to number information,
-// and we simply do not have that in InsetMathGrid.
-void InsetMathHull::htmlize(HtmlStream & os) const
+bool InsetMathHull::haveNumbers() const
 {
        bool havenumbers = false;
        for (size_t i = 0; i != numbered_.size(); ++i) {
@@ -1923,6 +1968,19 @@ void InsetMathHull::htmlize(HtmlStream & os) const
                        break;
                }
        }
+       return havenumbers;
+}
+
+
+// FIXME XHTML
+// We need to do something about alignment here.
+//
+// This duplicates code from InsetMathGrid, but
+// we need access here to number information,
+// and we simply do not have that in InsetMathGrid.
+void InsetMathHull::htmlize(HtmlStream & os) const
+{
+       bool const havenumbers = haveNumbers();
        bool const havetable = havenumbers || nrows() > 1 || ncols() > 1;
 
        if (!havetable) {
@@ -1956,13 +2014,7 @@ void InsetMathHull::htmlize(HtmlStream & os) const
 // and we simply do not have that in InsetMathGrid.
 void InsetMathHull::mathmlize(MathStream & os) const
 {
-       bool havenumbers = false;
-       for (size_t i = 0; i != numbered_.size(); ++i) {
-               if (numbered_[i]) {
-                       havenumbers = true;
-                       break;
-               }
-       }
+       bool const havenumbers = haveNumbers();
        bool const havetable = havenumbers || nrows() > 1 || ncols() > 1;
 
        if (havetable)
@@ -1999,13 +2051,7 @@ void InsetMathHull::mathmlize(MathStream & os) const
 void InsetMathHull::mathAsLatex(WriteStream & os) const
 {
        MathEnsurer ensurer(os, false);
-       bool havenumbers = false;
-       for (size_t i = 0; i != numbered_.size(); ++i) {
-               if (numbered_[i]) {
-                       havenumbers = true;
-                       break;
-               }
-       }
+       bool havenumbers = haveNumbers();
        bool const havetable = havenumbers || nrows() > 1 || ncols() > 1;
 
        if (!havetable) {
@@ -2115,7 +2161,6 @@ docstring InsetMathHull::xhtml(XHTMLStream & xs, OutputParams const & op) const
        // if mathtype was LaTeX, since we won't have entered any of the
        // earlier branches
        if (!success /* || mathtype != BufferParams::LaTeX */) {
-               string const tag = (getType() == hullSimple) ? "span" : "div";
                // Unfortunately, we cannot use latexString() because we do not want
                // $...$ or whatever.
                odocstringstream ls;
@@ -2128,6 +2173,7 @@ docstring InsetMathHull::xhtml(XHTMLStream & xs, OutputParams const & op) const
                // http://www.math.union.edu/~dpvc/jsMath/
                // FIXME XHTML
                // 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