commit 4a75d358a1f0f6c4b63b64107c86d59cce4eecf9
Author: Richard Heck <[email protected]>
Date:   Sun Jul 17 22:50:17 2016 -0400

    The way this was previously, it had to fail if the GUI language
    was not English: We return the the abbreviated author "One and Two",
    but translated to the GUI language; then we search that for " and "
    in order to pull the authors apart again.
    
    I've just replaced the distinct routines with a single one that handles
    both cases, depending upon whether a Buffer is provided as one argument.
    
    (cherry picked from commit fb84ccd9fb8fbe1eeb764580964a333acb2e6c0d)
---
 src/BiblioInfo.cpp |   44 ++++++++++++++++++--------------------------
 src/BiblioInfo.h   |    8 ++++----
 2 files changed, 22 insertions(+), 30 deletions(-)

diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp
index 1d3b6fd..569f0d2 100644
--- a/src/BiblioInfo.cpp
+++ b/src/BiblioInfo.cpp
@@ -255,7 +255,8 @@ BibTeXInfo::BibTeXInfo(docstring const & key, docstring 
const & type)
 {}
 
 
-docstring const BibTeXInfo::getAbbreviatedAuthor(bool jurabib_style) const
+docstring const BibTeXInfo::getAbbreviatedAuthor(
+    Buffer const * buf, bool jurabib_style) const
 {
        if (!is_bibtex_) {
                docstring const opt = label();
@@ -296,32 +297,23 @@ docstring const BibTeXInfo::getAbbreviatedAuthor(bool 
jurabib_style) const
 
        docstring retval = familyName(authors[0]);
 
-       if (authors.size() == 2 && authors[1] != "others")
-               retval = bformat(from_ascii("%1$s and %2$s"),
-                       familyName(authors[0]), familyName(authors[1]));
-       else if (authors.size() >= 2)
-               retval = bformat(from_ascii("%1$s et al."),
-                       familyName(authors[0]));
+       if (authors.size() == 2 && authors[1] != "others") {
+               docstring const dformat = buf ? 
+                       buf->B_("%1$s and %2$s") : from_ascii("%1$s and %2$s");
+               retval = bformat(dformat, familyName(authors[0]), 
familyName(authors[1]));
+       } else if (authors.size() >= 2) {
+               // we get here either if the author list is longer than two 
names
+               // or if the second 'name' is "others". we do the same thing 
either
+               // way.
+               docstring const dformat = buf ? 
+                       buf->B_("%1$s et al.") : from_ascii("%1$s et al.");
+               retval = bformat(dformat, familyName(authors[0]));
+       }
 
        return convertLaTeXCommands(retval);
 }
 
 
-docstring const BibTeXInfo::getAbbreviatedAuthor(Buffer const & buf, bool 
jurabib_style) const
-{
-       docstring const author = getAbbreviatedAuthor(jurabib_style);
-       if (!is_bibtex_)
-               return author;
-       vector<docstring> const authors = getVectorFromString(author, 
from_ascii(" and "));
-       if (authors.size() == 2)
-               return bformat(buf.B_("%1$s and %2$s"), authors[0], authors[1]);
-       docstring::size_type const idx = author.rfind(from_ascii(" et al."));
-       if (idx != docstring::npos)
-               return bformat(buf.B_("%1$s et al."), author.substr(0, idx));
-       return author;
-}
-
-
 docstring const BibTeXInfo::getYear() const
 {
        if (is_bibtex_)
@@ -719,12 +711,12 @@ docstring BibTeXInfo::getValueForKey(string const & 
oldkey, Buffer const & buf,
                        ret = cite_number_;
                else if (key == "abbrvauthor")
                        // Special key to provide abbreviated author names.
-                       ret = getAbbreviatedAuthor(buf, false);
+                       ret = getAbbreviatedAuthor(&buf, false);
                else if (key == "shortauthor")
                        // When shortauthor is not defined, jurabib 
automatically
                        // provides jurabib-style abbreviated author names. We 
do
                        // this as well.
-                       ret = getAbbreviatedAuthor(buf, true);
+                       ret = getAbbreviatedAuthor(&buf, true);
                else if (key == "shorttitle") {
                        // When shorttitle is not defined, jurabib uses for 
`article'
                        // and `periodical' entries the form `journal volume 
[year]'
@@ -821,7 +813,7 @@ docstring const BiblioInfo::getAbbreviatedAuthor(docstring 
const & key, Buffer c
        if (it == end())
                return docstring();
        BibTeXInfo const & data = it->second;
-       return data.getAbbreviatedAuthor(buf, false);
+       return data.getAbbreviatedAuthor(&buf, false);
 }
 
 
@@ -1092,7 +1084,7 @@ void BiblioInfo::makeCitationLabels(Buffer const & buf)
                if (numbers) {
                        entry.label(entry.citeNumber());
                } else {
-                       docstring const auth = entry.getAbbreviatedAuthor(buf, 
false);
+                       docstring const auth = entry.getAbbreviatedAuthor(&buf, 
false);
                        // we do it this way so as to access the xref, if 
necessary
                        // note that this also gives us the modifier
                        docstring const year = getYear(*it, buf, true);
diff --git a/src/BiblioInfo.h b/src/BiblioInfo.h
index be7bf09..43b949a 100644
--- a/src/BiblioInfo.h
+++ b/src/BiblioInfo.h
@@ -52,10 +52,10 @@ public:
        /// constructor that sets the entryType
        BibTeXInfo(docstring const & key, docstring const & type);
        /// \return the short form of an authorlist, used for sorting
-       docstring const getAbbreviatedAuthor(bool jurabib_style = false) const;
-       /// \return the short form of an authorlist, translated to the
-       /// buffer language.
-       docstring const getAbbreviatedAuthor(Buffer const & buf, bool 
jurabib_style = false) const;
+       /// this will be translated to the UI language if buf is null
+       /// otherwise, it will be translated to the buffer language.
+       docstring const getAbbreviatedAuthor(
+           Buffer const * buf = 0, bool jurabib_style = false) const;
        ///
        docstring const getYear() const;
        ///

Reply via email to