]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetCitation.cpp
Pure HTML output for math macros.
[lyx.git] / src / insets / InsetCitation.cpp
index 919b762d496fe7c1a9f87b44093a6624abccfdfd..9d2a4b1e16bb912e38fbfb377d5c352378596832 100644 (file)
@@ -119,7 +119,7 @@ docstring InsetCitation::toolTip(BufferView const & bv, int, int) const
        vector<docstring>::const_iterator en = keys.end();
        docstring tip;
        for (; it != en; ++it) {
-               docstring const key_info = bi.getInfo(*it);
+               docstring const key_info = bi.getInfo(*it, buffer());
                if (key_info.empty())
                        continue;
                if (!tip.empty())
@@ -432,18 +432,16 @@ docstring InsetCitation::basicLabel(bool for_xhtml) const
        docstring keys = getParam("key");
        docstring label;
 
-       if (contains(keys, ',')) {
-               // Final comma allows while loop to cover all keys
-               keys = ltrim(split(keys, label, ',')) + ',';
-               label = wrapCitation(label, label, for_xhtml);
-               while (contains(keys, ',')) {
-                       docstring key;
-                       keys = ltrim(split(keys, key, ','));
-                       label += ", " + wrapCitation(key, key, for_xhtml);
-               }
-       } else {
-               label = wrapCitation(keys, keys, for_xhtml);
-       }
+       docstring key;
+       do {
+               // if there is no comma, then everything goes into key
+               // and keys will be empty.
+               keys = trim(split(keys, key, ','));
+               key = trim(key);
+               if (!label.empty())
+                       label += ", ";
+               label += wrapCitation(key, key, for_xhtml);
+       } while (!keys.empty());
 
        docstring const & after = getParam("after");
        if (!after.empty())
@@ -458,7 +456,7 @@ docstring InsetCitation::screenLabel() const
 }
 
 
-void InsetCitation::updateLabels(ParIterator const &, UpdateType)
+void InsetCitation::updateBuffer(ParIterator const &, UpdateType)
 {
        CiteEngine const engine = buffer().params().citeEngine();
        if (cache.params == params() && cache.engine == engine)
@@ -471,7 +469,7 @@ void InsetCitation::updateLabels(ParIterator const &, UpdateType)
 
        docstring label = glabel;
        if (label.size() > maxLabelChars) {
-               label.erase(maxLabelChars-3);
+               label.erase(maxLabelChars - 3);
                label += "...";
        }
 
@@ -549,6 +547,7 @@ void InsetCitation::tocString(odocstream & os) const
 int InsetCitation::latex(odocstream & os, OutputParams const & runparams) const
 {
        CiteEngine cite_engine = buffer().params().citeEngine();
+       BiblioInfo const & bi = buffer().masterBibInfo();
        // FIXME UNICODE
        docstring const cite_str = from_utf8(
                asValidLatexCommand(getCmdName(), cite_engine));
@@ -565,7 +564,11 @@ int InsetCitation::latex(odocstream & os, OutputParams const & runparams) const
        else if (!after.empty())
                os << '[' << after << ']';
 
-       os << '{' << cleanupWhitespace(getParam("key")) << '}';
+       if (!bi.isBibtex(getParam("key")))
+               // escape chars with bibitems
+               os << '{' << escape(cleanupWhitespace(getParam("key"))) << '}';
+       else
+               os << '{' << cleanupWhitespace(getParam("key")) << '}';
 
        if (runparams.inulemcmd)
                os << "}";