#include "BufferParams.h"
#include "BufferView.h"
#include "DispatchResult.h"
-#include "FuncRequest.h"
#include "LaTeXFeatures.h"
#include "output_xhtml.h"
#include "ParIterator.h"
InsetCitation::InsetCitation(Buffer * buf, InsetCommandParams const & p)
- : InsetCommand(buf, p, "citation")
+ : InsetCommand(buf, p)
{}
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())
docstring keys = getParam("key");
docstring label;
- if (contains(keys, ',')) {
- // Final comma allows while loop to cover all keys
- keys = ltrim(split(keys, label, ',')) + ',';
- 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())
}
-void InsetCitation::updateLabels(ParIterator const &, UpdateType utype)
+void InsetCitation::updateBuffer(ParIterator const &, UpdateType)
{
CiteEngine const engine = buffer().params().citeEngine();
if (cache.params == params() && cache.engine == engine)
docstring label = glabel;
if (label.size() > maxLabelChars) {
- label.erase(maxLabelChars-3);
+ label.erase(maxLabelChars - 3);
label += "...";
}
void InsetCitation::addToToc(DocIterator const & cpit)
{
+ // NOTE
+ // XHTML output uses the TOC to collect the citations
+ // from the document. So if this gets changed, then we
+ // will need to change how the citations are collected.
+ docstring const tocitem = getParam("key");
Toc & toc = buffer().tocBackend().toc("citation");
- toc.push_back(TocItem(cpit, 0, getParam("key")));
+ toc.push_back(TocItem(cpit, 0, tocitem));
}
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));
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 << "}";