From 035d5399645c1176af8690adec7e15fe1d963e78 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Fri, 29 Mar 2019 15:50:18 +0100 Subject: [PATCH] tex2lyx: support for bibencoding argument of \addbibresource --- src/tex2lyx/Preamble.cpp | 23 ++++++++++++++++++++++- src/tex2lyx/Preamble.h | 2 ++ src/tex2lyx/text.cpp | 16 ++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp index 924df16929..b0ac77970b 100644 --- a/src/tex2lyx/Preamble.cpp +++ b/src/tex2lyx/Preamble.cpp @@ -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; } diff --git a/src/tex2lyx/Preamble.h b/src/tex2lyx/Preamble.h index 804e5caf0c..63b812bd86 100644 --- a/src/tex2lyx/Preamble.h +++ b/src/tex2lyx/Preamble.h @@ -113,6 +113,8 @@ public: /// std::vector biblatex_bibliographies; /// + std::vector biblatex_encodings; + /// std::string bibencoding; /// std::string docencoding; diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index badae84ada..4dd5fa7589 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -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