docstring const BibTeXInfo::getLabel(BibTeXInfo const * const xref,
Buffer const & buf, docstring const & format, bool richtext,
- docstring before, docstring after, docstring dialog, bool next) const
+ docstring const & before, docstring const & after,
+ docstring const & dialog, bool next) const
{
docstring loclabel;
}
-docstring const BiblioInfo::getLabel(vector<docstring> const & keys,
- Buffer const & buf, string const & style, bool richtext,
- docstring const & before, docstring const & after, docstring const & dialog) const
+docstring const BiblioInfo::getLabel(vector<docstring> keys,
+ Buffer const & buf, string const & style, bool for_xhtml,
+ size_t max_size, docstring const & before, docstring const & after,
+ docstring const & dialog) const
{
+ // shorter makes no sense
+ LASSERT(max_size >= 16, max_size = 16);
+
+ // we can't display more than 10 of these, anyway
+ bool const too_many_keys = keys.size() > 10;
+ if (too_many_keys)
+ keys.resize(10);
+
CiteEngineType const engine_type = buf.params().citeEngineType();
DocumentClass const & dc = buf.params().documentClass();
docstring const & format = from_utf8(dc.getCiteFormat(engine_type, style, "cite"));
xrefptr = &(xrefit->second);
}
}
- ret = data.getLabel(xrefptr, buf, ret, richtext,
- before, after, dialog, key+1 != ken);
+ ret = data.getLabel(xrefptr, buf, ret, for_xhtml,
+ before, after, dialog, key + 1 != ken);
+ }
+
+ if (ret.size() > max_size) {
+ ret.resize(max_size - 3);
+ ret += "...";
+ } else if (too_many_keys) {
+ if (ret.size() > max_size - 3)
+ ret.resize(max_size - 3);
+ ret += "...";
}
return ret;
}
vector<docstring> const BiblioInfo::getCiteStrings(
vector<docstring> const & keys, vector<CitationStyle> const & styles,
- Buffer const & buf, bool richtext, docstring const & before,
- docstring const & after, docstring const & dialog) const
+ Buffer const & buf, docstring const & before,
+ docstring const & after, docstring const & dialog, size_t max_size) const
{
if (empty())
return vector<docstring>();
vector<docstring> vec(styles.size());
for (size_t i = 0; i != vec.size(); ++i) {
style = styles[i].cmd;
- vec[i] = getLabel(keys, buf, style, richtext, before, after, dialog);
+ vec[i] = getLabel(keys, buf, style, false, max_size, before, after, dialog);
}
return vec;
#include "Citation.h"
-#include <vector>
#include <map>
#include <set>
+#include <vector>
namespace lyx {
/// \return formatted BibTeX data for a citation label
docstring const getLabel(BibTeXInfo const * const xref,
Buffer const & buf, docstring const & format, bool richtext,
- docstring before, docstring after, docstring dialog, bool next = false) const;
+ const docstring & before, const docstring & after,
+ const docstring & dialog, bool next = false) const;
///
const_iterator find(docstring const & f) const { return bimap_.find(f); }
///
bool richtext = false) const;
/// \return formatted BibTeX data for citation labels.
/// Citation labels can have more than one key.
- docstring const getLabel(std::vector<docstring> const & keys,
- Buffer const & buf, std::string const & style, bool richtext = false,
- docstring const & before = docstring(),
- docstring const & after = docstring(),
+ docstring const getLabel(std::vector<docstring> keys,
+ Buffer const & buf, std::string const & style, bool for_xhtml,
+ size_t max_size, docstring const & before, docstring const & after,
docstring const & dialog = docstring()) const;
/// Is this a reference from a bibtex database
/// or from a bibliography environment?
/// list of keys, using either numerical or author-year style depending
/// upon the active engine.
std::vector<docstring> const getCiteStrings(std::vector<docstring> const & keys,
- std::vector<CitationStyle> const & styles, Buffer const & buf, bool richtext = false,
- docstring const & before = docstring(),
- docstring const & after = docstring(),
- docstring const & dialog = docstring()) const;
+ std::vector<CitationStyle> const & styles, Buffer const & buf,
+ docstring const & before, docstring const & after, docstring const & dialog,
+ size_t max_size) const;
/// Collects the cited entries from buf.
void collectCitedEntries(Buffer const & buf);
/// A list of BibTeX keys cited in the current document, sorted by
if (!selectedLV->selectionModel()->selectedIndexes().empty())
curr = selectedLV->selectionModel()->selectedIndexes()[0].row();
- QStringList sty = citationStyles(bi);
+ static const size_t max_length = 80;
+ QStringList sty = citationStyles(bi, max_length);
if (sty.isEmpty()) {
// some error
}
-QStringList GuiCitation::citationStyles(BiblioInfo const & bi)
+QStringList GuiCitation::citationStyles(BiblioInfo const & bi, size_t max_size)
{
docstring const before = qstring_to_ucs4(textBeforeED->text());
docstring const after = qstring_to_ucs4(textAfterED->text());
vector<CitationStyle> styles = citeStyles_;
// FIXME: pass a dictionary instead of individual before, after, dialog, etc.
vector<docstring> ret = bi.getCiteStrings(keys, styles, documentBuffer(),
- false, before, after, from_utf8("dialog"));
+ before, after, from_utf8("dialog"), max_size);
return to_qstring_list(ret);
}
);
/// List of example cite strings
- QStringList citationStyles(BiblioInfo const & bi);
+ QStringList citationStyles(BiblioInfo const & bi, size_t max_size);
/// Set the Params variable for the Controller.
void apply(int const choice, bool const full, bool const force,
vector<docstring> const keys = getVectorFromString(key);
vector<CitationStyle> const citeStyleList = buf->params().citeStyles();
+ static const size_t max_length = 40;
vector<docstring> citeStrings =
buf->masterBibInfo().getCiteStrings(keys, citeStyleList, bv->buffer(),
- false, before, after, from_utf8("dialog"));
+ before, after, from_utf8("dialog"), max_length);
vector<docstring>::const_iterator cit = citeStrings.begin();
vector<docstring>::const_iterator end = citeStrings.end();
#include "support/lstrings.h"
#include <algorithm>
+#include <climits>
using namespace std;
using namespace lyx::support;
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;
}
- Make selection by mouse drag more reliable in mathed (bug 9074).
- Fix undo with many individual changes (e.g. with replace all)
- (bug #7079).
+ (bug 7079).
+
+- Fix problem with display of citation information when a whole lot of
+ entries are cited at once (bug 9131).
- Do not spellcheck "code" style in logical markup module.