- vector<docstring> keys = getVectorFromString(getParam("key"));
- vector<docstring>::const_iterator it = keys.begin();
- vector<docstring>::const_iterator end = keys.end();
- for (; it != end; ++it) {
- // get the bibdata corresponding to the key
- docstring const author = biblist.getAbbreviatedAuthor(*it);
- docstring const year = biblist.getYear(*it, for_xhtml);
- docstring const citenum = for_xhtml ? biblist.getCiteNumber(*it) : *it;
-
- if (author.empty() || year.empty())
- // We can't construct a "complex" label without that info.
- // So fail safely.
- return docstring();
-
- // authors1/<before>; ... ;
- // authors_last, <after>
- if (cite_type == "cite") {
- if (engine == ENGINE_BASIC) {
- label += wrapCitation(*it, citenum, for_xhtml) + sep_str;
- } else if (engine == ENGINE_JURABIB) {
- if (it == keys.begin())
- label += wrapCitation(*it, author, for_xhtml) + before_str + sep_str;
- else
- label += wrapCitation(*it, author, for_xhtml) + sep_str;
- }
- }
- // nocite
- else if (cite_type == "nocite") {
- label += *it + sep_str;
- }
- // (authors1 (<before> year); ... ;
- // authors_last (<before> year, <after>)
- else if (cite_type == "citet") {
- switch (engine) {
- case ENGINE_NATBIB_AUTHORYEAR:
- label += author + op_str + before_str +
- wrapCitation(*it, year, for_xhtml) + cp + sep_str;
- break;
- case ENGINE_NATBIB_NUMERICAL:
- label += author + op_str + before_str +
- wrapCitation(*it, citenum, for_xhtml) + cp + sep_str;
- break;
- case ENGINE_JURABIB:
- label += before_str + author + op_str +
- wrapCitation(*it, year, for_xhtml) + cp + sep_str;
- break;
- case ENGINE_BASIC:
- break;
- }
- }
- // author, year; author, year; ...
- else if (cite_type == "citep" ||
- cite_type == "citealp") {
- if (engine == ENGINE_NATBIB_NUMERICAL) {
- label += wrapCitation(*it, citenum, for_xhtml) + sep_str;
- } else {
- label += wrapCitation(*it, author + ", " + year, for_xhtml) + sep_str;
- }
-
- }
- // (authors1 <before> year;
- // authors_last <before> year, <after>)
- else if (cite_type == "citealt") {
- switch (engine) {
- case ENGINE_NATBIB_AUTHORYEAR:
- label += author + ' ' + before_str +
- wrapCitation(*it, year, for_xhtml) + sep_str;
- break;
- case ENGINE_NATBIB_NUMERICAL:
- label += author + ' ' + before_str + '#' +
- wrapCitation(*it, citenum, for_xhtml) + sep_str;
- break;
- case ENGINE_JURABIB:
- label += before_str +
- wrapCitation(*it, author + ' ' + year, for_xhtml) + sep_str;
- break;
- case ENGINE_BASIC:
- break;
- }
-
-
- }
- // author; author; ...
- else if (cite_type == "citeauthor") {
- label += wrapCitation(*it, author, for_xhtml) + sep_str;
- }
- // year; year; ...
- else if (cite_type == "citeyear" ||
- cite_type == "citeyearpar") {
- label += wrapCitation(*it, year, for_xhtml) + sep_str;
- }
- }
- label = rtrim(rtrim(label), sep);
-
- if (!after_str.empty()) {
- if (cite_type == "citet") {
- // insert "after" before last ')'
- label.insert(label.size() - 1, after_str);
- } else {
- bool const add =
- !(engine == ENGINE_NATBIB_NUMERICAL &&
- (cite_type == "citeauthor" ||
- cite_type == "citeyear"));
- if (add)
- label += after_str;
- }
- }
-
- if (!before_str.empty() && (cite_type == "citep" ||
- cite_type == "citealp" ||
- cite_type == "citeyearpar")) {
- label = before_str + label;