]> git.lyx.org Git - lyx.git/commitdiff
Improve info display for biblatex databases
authorJuergen Spitzmueller <spitz@lyx.org>
Sun, 18 Sep 2016 08:33:33 +0000 (10:33 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Sun, 18 Sep 2016 08:33:33 +0000 (10:33 +0200)
If an entry does not have a year field, check for a date field
(the common type in biblatex databases) and extract the year(s).

Candidate for branch.

src/BiblioInfo.cpp

index af157600e44e004980536c2243cee4cc1db60a98..c85eabd5e75ee5ddc605d41a65655d8222d3b38f 100644 (file)
@@ -316,8 +316,26 @@ docstring const BibTeXInfo::getAbbreviatedAuthor(
 
 docstring const BibTeXInfo::getYear() const
 {
-       if (is_bibtex_)
-               return operator[]("year");
+       if (is_bibtex_) {
+               // first try legacy year field
+               docstring year = operator[]("year");
+               if (!year.empty())
+                       return year;
+               // now try biblatex's date field
+               year = operator[]("date");
+               // Format is [-]YYYY-MM-DD*/[-]YYYY-MM-DD*
+               // We only want the years.
+               static regex const yreg("[-]?([\\d]{4}).*");
+               static regex const ereg(".*/([\\d]{4}).*");
+               smatch sm;
+               string const date = to_utf8(year);
+               regex_match(date, sm, yreg);
+               year = from_ascii(sm[1]);
+               // check for an endyear
+               if (regex_match(date, sm, ereg))
+                       year += char_type(0x2013) + from_ascii(sm[1]);
+               return year;
+       }
 
        docstring const opt = label();
        if (opt.empty())