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();
}
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;
}
docstring const str = oss.str();
os << str;
- return str.size();
+ return int(str.size());
}
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
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;
// 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);
}
// 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();
}
-docstring InsetBibitem::xhtml(XHTMLStream & xs, OutputParams const &) const
+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();
}