#include "LaTeXFeatures.h"
#include "output_xhtml.h"
#include "ParIterator.h"
+#include "texstream.h"
#include "TocBackend.h"
#include "support/debug.h"
#include "support/lstrings.h"
#include <algorithm>
+#include <climits>
using namespace std;
using namespace lyx::support;
return _("No citations selected!");
vector<docstring> keys = getVectorFromString(key);
- vector<docstring>::const_iterator it = keys.begin();
- vector<docstring>::const_iterator en = keys.end();
+ if (keys.size() == 1)
+ return bi.getInfo(keys[0], buffer(), true);
+
docstring tip;
- for (; it != en; ++it) {
- docstring const key_info = bi.getInfo(*it, buffer());
+ tip += "<ol>";
+ for (docstring const & key : keys) {
+ docstring const key_info = bi.getInfo(key, buffer(), true);
if (key_info.empty())
continue;
- if (!tip.empty())
- tip += "\n";
- tip += wrap(key_info, -4);
+ tip += "<li>" + key_info + "</li>";
}
+ tip += "</ol>";
return tip;
}
namespace {
-CitationStyle asValidLatexCommand(string const & input, vector<CitationStyle> const valid_styles)
+CitationStyle asValidLatexCommand(string const & input, vector<CitationStyle> const & valid_styles)
{
CitationStyle cs = valid_styles[0];
cs.forceUpperCase = false;
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 "<a href='#LyXCite-" + key + "'>" +
+ return "<a href='#LyXCite-" + html::cleanAttr(key) + "'>" +
html::htmlize(content, XHTMLStream::ESCAPE_ALL) + "</a>";
}
buffer().params().documentClass().addCiteMacro("!textafter", to_utf8(after));
*/
docstring label;
- vector<docstring> const keys = getVectorFromString(key);
- label = biblist.getLabel(keys, buffer(), cite_type, for_xhtml, before, after);
+ vector<docstring> keys = getVectorFromString(key);
+ label = biblist.getLabel(keys, buffer(), cite_type, for_xhtml, UINT_MAX, before, after);
return label;
}
{
if (!cache.recalculate && buffer().citeLabelsValid())
return;
-
// The label may have changed, so we have to re-create it.
docstring const glabel = generateLabel();
-
- unsigned int const maxLabelChars = 45;
-
- docstring label = glabel;
- if (label.size() > maxLabelChars) {
- label.erase(maxLabelChars - 3);
- label += "...";
- }
-
cache.recalculate = false;
cache.generated_label = glabel;
- cache.screen_label = label;
+ unsigned int const maxLabelChars = 45;
+ cache.screen_label = glabel.substr(0, maxLabelChars + 1);
+ support::truncateWithEllipsis(cache.screen_label, maxLabelChars);
}
-void InsetCitation::addToToc(DocIterator const & cpit, bool output_active) const
+void InsetCitation::addToToc(DocIterator const & cpit, bool output_active,
+ UpdateType) const
{
// 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.
+ // BiblioInfo::collectCitedEntries() uses the TOC to collect the citations
+ // 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");
- Toc & toc = buffer().tocBackend().toc("citation");
- toc.push_back(TocItem(cpit, 0, tocitem, output_active));
+ shared_ptr<Toc> toc = buffer().tocBackend().toc("citation");
+ toc->push_back(TocItem(cpit, 0, tocitem, output_active));
}
}
-void InsetCitation::forToc(docstring & os, size_t) const
+void InsetCitation::forOutliner(docstring & os, size_t const, bool const) const
{
os += screenLabel();
}
// FIXME UNICODE
docstring const cite_str = from_utf8(citationStyleToString(cs));
- if (runparams.inulemcmd)
+ if (runparams.inulemcmd > 0)
os << "\\mbox{";
os << "\\" << cite_str;