X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCitation.cpp;h=0335b9c771d9b21a3b8231803cdedebae657e232;hb=a6b07608d8e9de24383d3ebaec20b6b265ed9314;hp=a6a2738a9a75af3ff9855f9be5c39965d5e8ae9e;hpb=cce9adc1859f0134800c2405200f1467c8564b13;p=features.git
diff --git a/src/insets/InsetCitation.cpp b/src/insets/InsetCitation.cpp
index a6a2738a9a..0335b9c771 100644
--- a/src/insets/InsetCitation.cpp
+++ b/src/insets/InsetCitation.cpp
@@ -322,14 +322,14 @@ inline docstring wrapCitation(docstring const & key,
return content;
// we have to do the escaping here, because we will ultimately
// write this as a raw string, so as not to escape the tags.
- return "" +
- html::htmlize(content, XHTMLStream::ESCAPE_ALL) + "";
+ return "" +
+ xml::xmlize(content, XMLStream::ESCAPE_ALL) + "";
}
} // anonymous namespace
-vector> InsetCitation::getQualifiedLists(docstring const p) const
+vector> InsetCitation::getQualifiedLists(docstring const & p) const
{
vector ps =
getVectorFromString(p, from_ascii("\t"));
@@ -364,14 +364,33 @@ docstring InsetCitation::complexLabel(bool for_xhtml) const
if (!buf.isFullyLoaded())
return docstring();
+ docstring const & key = getParam("key");
+
BiblioInfo const & biblist = buf.masterBibInfo();
- if (biblist.empty())
+
+ // mark broken citations
+ setBroken(false);
+
+ if (biblist.empty()) {
+ setBroken(true);
return docstring();
+ }
- docstring const & key = getParam("key");
if (key.empty())
return _("No citations selected!");
+ // check all citations
+ // we only really want the last 'false', to suppress trimming, but
+ // we need to give the other defaults, too, to set it.
+ vector keys =
+ getVectorFromString(key, from_ascii(","), false, false);
+ for (auto const & k : keys) {
+ if (biblist.find(k) == biblist.end()) {
+ setBroken(true);
+ break;
+ }
+ }
+
string cite_type = getCmdName();
bool const uppercase = isUpperCase(cite_type[0]);
if (uppercase)
@@ -391,10 +410,6 @@ docstring InsetCitation::complexLabel(bool for_xhtml) const
buffer().params().documentClass().addCiteMacro("!textafter", to_utf8(after));
*/
docstring label;
- // we only really want the last 'false', to suppress trimming, but
- // we need to give the other defaults, too, to set it.
- vector keys =
- getVectorFromString(key, from_ascii(","), false, false);
CitationStyle cs = getCitationStyle(buffer().masterParams(),
cite_type, buffer().masterParams().citeStyles());
bool const qualified = cs.hasQualifiedList
@@ -449,8 +464,8 @@ docstring InsetCitation::basicLabel(bool for_xhtml) const
bool InsetCitation::forceLTR(OutputParams const & rp) const
{
// We have to force LTR for numeric references
- // [= plain BibTeX, numeric natbib and biblatex].
- // Except for XeTeX/bidi . See #3005.
+ // [= bibliography, plain BibTeX, numeric natbib
+ // and biblatex]. Except for XeTeX/bidi. See #3005.
if (rp.useBidiPackage())
return false;
return (buffer().masterParams().citeEngine() == "basic"
@@ -463,7 +478,7 @@ docstring InsetCitation::screenLabel() const
}
-void InsetCitation::updateBuffer(ParIterator const &, UpdateType)
+void InsetCitation::updateBuffer(ParIterator const &, UpdateType, bool const /*deleted*/)
{
if (!cache.recalculate && buffer().citeLabelsValid())
return;
@@ -485,10 +500,17 @@ void InsetCitation::addToToc(DocIterator const & cpit, bool output_active,
// from the document. It is used indirectly, via BiblioInfo::makeCitationLables,
// by both XHTML and plaintext output. So, if we change what goes into the TOC,
// then we will also need to change that routine.
- docstring const tocitem = getParam("key");
+ docstring tocitem;
+ if (isBroken())
+ tocitem = _("BROKEN: ");
+ tocitem += getParam("key");
TocBuilder & b = backend.builder("citation");
b.pushItem(cpit, tocitem, output_active);
b.pop();
+ if (isBroken()) {
+ shared_ptr toc2 = backend.toc("brokenrefs");
+ toc2->push_back(TocItem(cpit, 0, tocitem, output_active));
+ }
}
@@ -532,14 +554,14 @@ int InsetCitation::docbook(odocstream & os, OutputParams const &) const
}
-docstring InsetCitation::xhtml(XHTMLStream & xs, OutputParams const &) const
+docstring InsetCitation::xhtml(XMLStream & xs, OutputParams const &) const
{
string const & cmd = getCmdName();
if (cmd == "nocite")
return docstring();
// have to output this raw, because generateLabel() will include tags
- xs << XHTMLStream::ESCAPE_NONE << generateLabel(true);
+ xs << XMLStream::ESCAPE_NONE << generateLabel(true);
return docstring();
}