]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBibitem.cpp
Update comment: a function was renamed.
[lyx.git] / src / insets / InsetBibitem.cpp
index afc30ae37d395647c16ac4391912fb0ea43c835d..6336da32d40b620acc029bb1d822dc90ae07df48 100644 (file)
@@ -28,7 +28,6 @@
 #include "Language.h"
 #include "Lexer.h"
 #include "output_xhtml.h"
-#include "OutputParams.h"
 #include "Paragraph.h"
 #include "ParagraphList.h"
 #include "ParIterator.h"
@@ -112,7 +111,8 @@ ParamInfo const & InsetBibitem::findInfo(string const & /* cmdName */)
                param_info_.add("label", ParamInfo::LATEX_OPTIONAL,
                                ParamInfo::HANDLING_LATEXIFY);
                param_info_.add("key", ParamInfo::LATEX_REQUIRED,
-                               ParamInfo::HANDLING_ESCAPE);
+                               ParamInfo::ParamHandling(ParamInfo::HANDLING_ESCAPE
+                                                        | ParamInfo::HANDLING_LTRIM));
                param_info_.add("literal", ParamInfo::LYX_INTERNAL);
        }
        return param_info_;
@@ -154,8 +154,9 @@ void InsetBibitem::doDispatch(Cursor & cur, FuncRequest & cmd)
                setParam("literal", p["literal"]);
 
                if (p["key"] != old_key) {
+                       // changeRefsIfUnique handles undo
+                       cur.bv().buffer().changeRefsIfUnique(old_key, p["key"]);
                        updateCommand(p["key"]);
-                       cur.bv().buffer().changeRefsIfUnique(old_key, params()["key"]);
                        cur.forceBufferUpdate();
                        buffer().invalidateBibinfoCache();
                }
@@ -186,7 +187,16 @@ docstring InsetBibitem::bibLabel() const
        BufferParams const & bp = buffer().masterBuffer()->params();
        if (bp.citeEngineType() == ENGINE_TYPE_NUMERICAL)
                return autolabel_;
-       docstring const & label = getParam("label");
+       docstring label = getParam("label");
+       if (!label.empty() && bp.citeEngine() == "natbib") {
+               // Add a space before opening paren
+               label = subst(label, from_ascii("("), from_ascii(" ("));
+               // and strip off long author list
+               docstring striplabel;
+               label = rsplit(label, striplabel, ')');
+               if (!striplabel.empty())
+                       label = striplabel + ")";
+       }
        return label.empty() ? autolabel_ : label;
 }
 
@@ -206,7 +216,7 @@ int InsetBibitem::plaintext(odocstringstream & os,
        docstring const str = oss.str();
        os << str;
 
-       return str.size();
+       return int(str.size());
 }
 
 
@@ -219,9 +229,9 @@ docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
 
        int w = 0;
 
-       InsetBibitem const * bitem = 0;
+       InsetBibitem const * bitem = nullptr;
 
-       // FIXME: this font is used unitialized for now but should  be set to
+       // FIXME: this font is used uninitialized for now but should  be set to
        // a proportional font. Here is what Georg Baum has to say about it:
        /*
        bibitemWidest() is supposed to find the bibitem with the widest label in the
@@ -248,6 +258,7 @@ docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
        ParagraphList::const_iterator it = buffer.paragraphs().begin();
        ParagraphList::const_iterator end = buffer.paragraphs().end();
 
+       bool is_literal = false;
        for (; it != end; ++it) {
                if (it->insetList().empty())
                        continue;
@@ -268,16 +279,19 @@ docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
                // So for now we just use the label size in order to be sure
                // that GUI and no-GUI gives the same bibitem (even if that is
                // potentially the wrong one.
-               int const wx = label.size();
+               int const wx = int(label.size());
 
                if (wx > w) {
                        w = wx;
                        lbl = label;
+                       is_literal = (bitem->getParam("literal") == "true");
                }
        }
 
        if (!lbl.empty()) {
                InsetCommandParams p(BIBITEM_CODE);
+               if (is_literal)
+                       p["literal"] = from_ascii("true");
                return p.prepareCommand(runparams, lbl, ParamInfo::HANDLING_LATEXIFY);
        }
 
@@ -285,7 +299,7 @@ docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
 }
 
 
-void InsetBibitem::collectBibKeys(InsetIterator const & it) const
+void InsetBibitem::collectBibKeys(InsetIterator const & it, FileNameList & /*checkedFiles*/) const
 {
        docstring const key = getParam("key");
        docstring const label = getParam("label");
@@ -312,7 +326,7 @@ void InsetBibitem::collectBibKeys(InsetIterator const & it) const
 
 
 // Update the counters of this inset and of its contents
-void InsetBibitem::updateBuffer(ParIterator const & it, UpdateType utype)
+void InsetBibitem::updateBuffer(ParIterator const & it, UpdateType utype, bool const /*deleted*/)
 {
        BufferParams const & bp = buffer().masterBuffer()->params();
        Counters & counters = bp.documentClass().counters();
@@ -328,20 +342,26 @@ void InsetBibitem::updateBuffer(ParIterator const & it, UpdateType utype)
 }
 
 
-docstring InsetBibitem::xhtml(XHTMLStream & xs, OutputParams const &) const
+void InsetBibitem::docbook(XMLStream &, OutputParams const &) const
+{
+       // Nothing to do: everything is implemented in makeBibliography.
+}
+
+
+docstring InsetBibitem::xhtml(XMLStream & xs, OutputParams const &) const
 {
        // FIXME XHTML
        // XHTML 1.1 doesn't have the "name" attribute for <a>, so we have to use
-       // the "id" atttribute to get the document to validate. Probably, we will
+       // the "id" attribute to get the document to validate. Probably, we will
        // need to use "name" anyway, eventually, because some browsers do not
        // handle jumping to ids. If we don't do that, though, we can just put the
        // id into the span tag.
        string const attrs =
-               "id='LyXCite-" + to_utf8(html::cleanAttr(getParam("key"))) + "'";
-       xs << html::CompTag("a", attrs);
-       xs << html::StartTag("span", "class='bibitemlabel'");
+                       "id='LyXCite-" + to_utf8(xml::cleanAttr(getParam("key"))) + "'";
+       xs << xml::CompTag("a", attrs);
+       xs << xml::StartTag("span", "class='bibitemlabel'");
        xs << bibLabel();
-       xs << html::EndTag("span");
+       xs << xml::EndTag("span");
        return docstring();
 }