X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCitation.cpp;h=d878056cd6a3be952cde07254d49c0c5155a267d;hb=eb294eadb5e7f22880da399ae082f74567bbfc4e;hp=6f52fe273547e69f6e6c6d6d301089caaa55312c;hpb=39caa7010008bbb32418d39d068f2fab65dbb748;p=lyx.git diff --git a/src/insets/InsetCitation.cpp b/src/insets/InsetCitation.cpp index 6f52fe2735..d878056cd6 100644 --- a/src/insets/InsetCitation.cpp +++ b/src/insets/InsetCitation.cpp @@ -18,6 +18,7 @@ #include "buffer_funcs.h" #include "BufferParams.h" #include "BufferView.h" +#include "Citation.h" #include "DispatchResult.h" #include "FuncCode.h" #include "FuncRequest.h" @@ -49,6 +50,7 @@ InsetCitation::InsetCitation(Buffer * buf, InsetCommandParams const & p) : InsetCommand(buf, p) { buffer().removeBiblioTempFiles(); + cleanKeys(); } @@ -166,6 +168,8 @@ void InsetCitation::doDispatch(Cursor & cur, FuncRequest & cmd) // fall through default: InsetCommand::doDispatch(cur, cmd); + if (cmd.action() == LFUN_INSET_MODIFY) + cleanKeys(); } } @@ -209,10 +213,11 @@ void InsetCitation::openCitation() CiteItem ci; titledata = bi.getInfo(kvar, buffer(), ci, from_ascii(lyxrc.citation_search_pattern)); - // some cleanup: commas and " and ", as used in name lists, + // some cleanup: commas, " and " and " et al.", as used in name lists, // are not expected in file names titledata = subst(titledata, from_ascii(","), docstring()); titledata = subst(titledata, from_ascii(" and "), from_ascii(" ")); + titledata = subst(titledata, from_ascii(" et al."), docstring()); bi.getLocators(kvar, doi, url, file); LYXERR(Debug::INSETS, "Locators: doi:" << doi << " url:" << url << " file:" << file << " title data:" << titledata @@ -282,7 +287,7 @@ bool InsetCitation::getStatus(Cursor & cur, FuncRequest const & cmd, bool InsetCitation::addKey(string const & key) { - docstring const ukey = from_utf8(key); + docstring const ukey = from_utf8(trim(key)); docstring const & curkeys = getParam("key"); if (curkeys.empty()) { setParam("key", ukey); @@ -291,10 +296,8 @@ bool InsetCitation::addKey(string const & key) } vector keys = getVectorFromString(curkeys); - vector::const_iterator it = keys.begin(); - vector::const_iterator en = keys.end(); - for (; it != en; ++it) { - if (*it == ukey) { + for (auto const & k : keys) { + if (k == ukey) { LYXERR0("Key " << key << " already present."); return false; } @@ -593,7 +596,7 @@ int InsetCitation::plaintext(odocstringstream & os, if (cmd == "nocite") return 0; - docstring const label = generateLabel(false); + docstring const label = generateLabel(); os << label; return label.size(); } @@ -601,22 +604,25 @@ int InsetCitation::plaintext(odocstringstream & os, static docstring const cleanupWhitespace(docstring const & citelist) { - docstring::const_iterator it = citelist.begin(); - docstring::const_iterator end = citelist.end(); // Paranoia check: make sure that there is no whitespace in here // -- at least not behind commas or at the beginning docstring result; char_type last = ','; - for (; it != end; ++it) { - if (*it != ' ') - last = *it; - if (*it != ' ' || last != ',') - result += *it; + for (char_type c : citelist) { + if (c != ' ') + last = c; + if (c != ' ' || last != ',') + result += c; } return result; } +void InsetCitation::cleanKeys() { + docstring cleankeys = cleanupWhitespace(getParam("key")); + setParam("key", cleankeys); +} + void InsetCitation::docbook(XMLStream & xs, OutputParams const &) const { if (getCmdName() == "nocite") @@ -657,7 +663,7 @@ docstring InsetCitation::xhtml(XMLStream & xs, OutputParams const &) const void InsetCitation::toString(odocstream & os) const { odocstringstream ods; - plaintext(ods, OutputParams(0)); + plaintext(ods, OutputParams(nullptr)); os << ods.str(); } @@ -775,6 +781,13 @@ void InsetCitation::latex(otexstream & os, OutputParams const & runparams) const } +pair InsetCitation::isWords() const +{ + docstring const label = generateLabel(false); + return pair(label.size(), wordCount(label)); +} + + string InsetCitation::contextMenuName() const { return "context-citation";