]> git.lyx.org Git - lyx.git/commitdiff
tex2lyx: support for bibencoding argument of \addbibresource
authorJuergen Spitzmueller <spitz@lyx.org>
Fri, 29 Mar 2019 14:50:18 +0000 (15:50 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Fri, 29 Mar 2019 14:50:18 +0000 (15:50 +0100)
src/tex2lyx/Preamble.cpp
src/tex2lyx/Preamble.h
src/tex2lyx/text.cpp

index 924df1692941990dfb2b432344eb6f4cbb3293f8..b0ac77970b3ff30d33f0f57fff90c0c17dfd229d 100644 (file)
@@ -1752,7 +1752,28 @@ void Preamble::parse(Parser & p, string const & forceclass,
                }
 
                if (t.cs() == "addbibresource") {
-                       biblatex_bibliographies.push_back(removeExtension(p.getArg('{', '}')));
+                       string const options =  p.getArg('[', ']');
+                       string const arg = removeExtension(p.getArg('{', '}'));
+                       if (!options.empty()) {
+                               // check if the option contains a bibencoding, if yes, extract it
+                               string::size_type pos = options.find("bibencoding=");
+                               string encoding;
+                               if (pos != string::npos) {
+                                       string::size_type i = options.find(',', pos);
+                                       if (i == string::npos)
+                                               encoding = options.substr(pos + 1);
+                                       else
+                                               encoding = options.substr(pos, i - pos);
+                                       pos = encoding.find('=');
+                                       if (pos == string::npos)
+                                               encoding.clear();
+                                       else
+                                               encoding = encoding.substr(pos + 1);
+                               }
+                               if (!encoding.empty())
+                                       biblatex_encodings.push_back(normalize_filename(arg) + ' ' + encoding);
+                       }
+                       biblatex_bibliographies.push_back(arg);
                        continue;
                }
 
index 804e5caf0ccd59b28538dc9ec268df925b0deb25..63b812bd868256ed0164b43b9ef199825a46e8b4 100644 (file)
@@ -113,6 +113,8 @@ public:
        ///
        std::vector<std::string> biblatex_bibliographies;
        ///
+       std::vector<std::string> biblatex_encodings;
+       ///
        std::string bibencoding;
        ///
        std::string docencoding;
index badae84ada500cc873e6db19cd0fd0dac6f77819..4dd5fa7589df2810f0f17f247f706daefd0db08f 100644 (file)
@@ -5344,6 +5344,14 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
                                } else
                                        os << "encoding " << '"' << enc->name() << '"' << "\n";
                        }
+                       string bibfileencs;
+                       for (auto const & bf : preamble.biblatex_encodings) {
+                               if (!bibfileencs.empty())
+                                       bibfileencs += "\t";
+                               bibfileencs += bf;
+                       }
+                       if (!bibfileencs.empty())
+                               os << "file_encodings " << '"' << bibfileencs << '"' << "\n";
                        end_inset(os);
                        need_commentbib = false;
                        continue;
@@ -6209,6 +6217,14 @@ void check_comment_bib(ostream & os, Context & context)
        }
        if (!bibfiles.empty())
                os << "bibfiles " << '"' << bibfiles << '"' << "\n";
+       string bibfileencs;
+       for (auto const & bf : preamble.biblatex_encodings) {
+               if (!bibfileencs.empty())
+                       bibfileencs += "\t";
+               bibfileencs += bf;
+       }
+       if (!bibfileencs.empty())
+               os << "file_encodings " << '"' << bibfileencs << '"' << "\n";
        end_inset(os);// Bibtex
        os << "\\end_layout\n";
        end_inset(os);// Note