On Sat, Oct 31, 2015 at 05:57:46PM -0400, Scott Kostyshak wrote: > On Sat, Oct 31, 2015 at 09:21:15PM +0000, Guenter Milde wrote:
> > I'd prefer you to do this. > > OK I'll work on it. Does the attached patch look good? We need to do something similar for the other FIXMEs you put in 1523fc60, right? Scott
>From ef7d21fc35679683f537c186ce9200cba232a8b3 Mon Sep 17 00:00:00 2001 From: Scott Kostyshak <[email protected]> Date: Sat, 31 Oct 2015 18:59:23 -0400 Subject: [PATCH] Improve XeTeX/LuaTeX with TeX fonts, #9740 More fixes are needed to solve the FIXMEs in 1523fc60. --- src/BufferParams.cpp | 15 ++++++++++----- src/BufferParams.h | 3 ++- src/PDFOptions.cpp | 18 +++++++----------- src/PDFOptions.h | 2 +- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 537178e..0fd747b 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -1577,7 +1577,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, } // handle inputenc etc. - writeEncodingPreamble(os, features); + bool const ie = writeEncodingPreamble(os, features); + bool const inputenc_loaded = ie || features.isProvided("inputenc"); // includeonly if (!features.runparams().includeall && !included_children_.empty()) { @@ -1903,7 +1904,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, OutputParams tmp_params = features.runparams(); pdfoptions().writeLaTeX(tmp_params, os, - features.isProvided("hyperref")); + features.isProvided("hyperref"), inputenc_loaded); // set back for the rest lyxpreamble.clear(); // correctly break URLs with hyperref and dvi output @@ -2924,19 +2925,20 @@ docstring BufferParams::getGraphicsDriver(string const & package) const } -void BufferParams::writeEncodingPreamble(otexstream & os, +bool BufferParams::writeEncodingPreamble(otexstream & os, LaTeXFeatures & features) const { // "inputenc" package not required with non-TeX fonts. if (useNonTeXFonts) - return; + return false; // "inputenc" fails with XeTeX (even in 8-bit compatiblitly mode) and with TeX fonts, // (this is a bug in the "inputenc" package see #9740). if (features.runparams().flavor == OutputParams::XETEX) - return; + return false; // For LuaTeX with TeX fonts, we can load // the "luainputenc" package with the specified encoding(s) (see below). + bool ret = false; if (inputenc == "auto") { string const doc_encoding = language->encoding()->latexName(); @@ -2955,6 +2957,7 @@ void BufferParams::writeEncodingPreamble(otexstream & os, && !features.isRequired("japanese") && !features.isProvided("inputenc")) { os << "\\usepackage["; + ret = true; set<string>::const_iterator it = encodings.begin(); set<string>::const_iterator const end = encodings.end(); if (it != end) { @@ -2993,6 +2996,7 @@ void BufferParams::writeEncodingPreamble(otexstream & os, || features.isProvided("inputenc")) break; os << "\\usepackage[" << from_ascii(encoding().latexName()); + ret = true; if (features.runparams().flavor == OutputParams::LUATEX || features.runparams().flavor == OutputParams::DVILUATEX) os << "]{luainputenc}\n"; @@ -3017,6 +3021,7 @@ void BufferParams::writeEncodingPreamble(otexstream & os, os << "\\usepackage{CJK}\n"; } } + return ret; } diff --git a/src/BufferParams.h b/src/BufferParams.h index b5ab65e..328ca17 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -412,7 +412,8 @@ public: /// return supported drivers for specific packages docstring getGraphicsDriver(std::string const & package) const; /// handle inputenc etc. - void writeEncodingPreamble(otexstream & os, LaTeXFeatures & features) const; + /// return true if (lua)inputenc is written here + bool writeEncodingPreamble(otexstream & os, LaTeXFeatures & features) const; /// std::string const parseFontName(std::string const & name) const; /// set up the document fonts diff --git a/src/PDFOptions.cpp b/src/PDFOptions.cpp index 6646888..2ecc5c6 100644 --- a/src/PDFOptions.cpp +++ b/src/PDFOptions.cpp @@ -90,7 +90,7 @@ void PDFOptions::writeFile(ostream & os) const void PDFOptions::writeLaTeX(OutputParams & runparams, otexstream & os, - bool hyperref_already_provided) const + bool hyperref_already_provided, bool inputenc_loaded) const { // FIXME Unicode string opt; @@ -178,15 +178,12 @@ void PDFOptions::writeLaTeX(OutputParams & runparams, otexstream & os, // Usually, "(lua)inputenc" converts the input to LICR. // As hyperref provides good coverage for \inputencoding{utf8}, we can try // this if the current input encoding does not support a character. - // FIXME: inputenc (part 1 of 2) - // Replace the "FullUnicode" check with - // check for loading of inputenc or luainputenc package - // (see BufferParams::writeEncodingPreamble and runparams.encoding->package()). - // Otherwise \inputencoding is not defined - // (e.g. if "latex-encoding" is set to "ascii"). - // Dont forget to keep the check below (part 2) in sync! + // Check for loading of inputenc or luainputenc package. + // Otherwise \inputencoding is not defined + // (e.g. if "latex-encoding" is set to "ascii"). + // This check is also done for a separate \inputencoding below. if (need_unicode && enc && enc->iconvName() != "UTF-8" - &&!runparams.isFullUnicode()) { + && inputenc_loaded) { os << "\\inputencoding{utf8}\n" << setEncoding("UTF-8"); } @@ -204,9 +201,8 @@ void PDFOptions::writeLaTeX(OutputParams & runparams, otexstream & os, << "\\fi\n"; } else os << from_utf8(opt); - // FIXME: inputenc (part 2 of 2) if (need_unicode && enc && enc->iconvName() != "UTF-8" - &&!runparams.isFullUnicode()) { + && inputenc_loaded) { os << setEncoding(enc->iconvName()) << "\\inputencoding{" << from_ascii(enc->latexName()) << "}\n"; } diff --git a/src/PDFOptions.h b/src/PDFOptions.h index d74caf4..70dddaf 100644 --- a/src/PDFOptions.h +++ b/src/PDFOptions.h @@ -37,7 +37,7 @@ public: void writeFile(std::ostream &) const; /// output to tex header void writeLaTeX(OutputParams &, otexstream &, - bool hyperref_already_provided) const; + bool hyperref_already_provided, bool inputenc_loaded) const; /// read tokens from lyx header std::string readToken(Lexer &lex, std::string const & token); /// set implicit settings for hyperref -- 2.1.4
