X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FPDFOptions.cpp;h=7de277c3212162655a60fcd7b565c43dae64e35f;hb=4e69b9bac5e970572b9cf9169e3db9060c47e3b6;hp=7729a86ea6550604382eee2e7e07ce7e897dbc44;hpb=8b83daaef0ce23926c47c1a15252e692ded18297;p=lyx.git diff --git a/src/PDFOptions.cpp b/src/PDFOptions.cpp index 7729a86ea6..7de277c321 100644 --- a/src/PDFOptions.cpp +++ b/src/PDFOptions.cpp @@ -89,10 +89,9 @@ void PDFOptions::writeFile(ostream & os) const } -int PDFOptions::writeLaTeX(OutputParams & runparams, odocstream & os, +void PDFOptions::writeLaTeX(OutputParams & runparams, otexstream & os, bool hyperref_already_provided) const { - int lines = 0; // FIXME Unicode string opt; string hyperset; @@ -103,7 +102,7 @@ int PDFOptions::writeLaTeX(OutputParams & runparams, odocstream & os, // only use the hyperref settings if hyperref is enabled by the user // see bug #7052 - if(use_hyperref) { + if (use_hyperref) { // try to extract author and title from document when none is // explicitly given if (pdfusetitle && title.empty() && author.empty()) @@ -142,7 +141,6 @@ int PDFOptions::writeLaTeX(OutputParams & runparams, odocstream & os, hyperset += quoted_options; } hyperset = rtrim(hyperset,","); - } // check if the hyperref settings use an encoding that exceeds @@ -152,7 +150,7 @@ int PDFOptions::writeLaTeX(OutputParams & runparams, odocstream & os, bool need_unicode = false; if (enc) { for (size_t n = 0; n < hs.size(); ++n) { - if (enc->latexChar(hs[n], true) != docstring(1, hs[n])) + if (!enc->encodable(hs[n])) need_unicode = true; } } @@ -171,28 +169,35 @@ int PDFOptions::writeLaTeX(OutputParams & runparams, odocstream & os, // FIXME: rename in this case the PDF settings dialog checkbox // label from "Use Hyperref" to "Customize Hyperref Settings" // as discussd in bug #6293 - opt = "\\hypersetup{" + opt + hyperset + "}\n"; + opt = "\\hypersetup{" + rtrim(opt + hyperset, ",") + "}\n"; } - lines = int(count(opt.begin(), opt.end(), '\n')); - // hyperref expects utf8! - if (need_unicode && enc && enc->iconvName() != "UTF-8") { + if (need_unicode && enc && enc->iconvName() != "UTF-8" + &&!runparams.isFullUnicode()) { os << "\\inputencoding{utf8}\n" << setEncoding("UTF-8"); - ++lines; } - // if hyperref is loaded by the document class and hyperset is empty, - // nothing must be output, see bug #7048 - if (!(hyperref_already_provided && hyperset.empty())) + // If hyperref is loaded by the document class, we output + // \hypersetup \AtBeginDocument if hypersetup is not (yet) + // defined. In this case, the class loads hyperref late + // (see bug #7048). + if (hyperref_already_provided && !opt.empty()) { + os << "\\ifx\\hypersetup\\undefined\n" + << " \\AtBeginDocument{%\n " + << from_utf8(opt) + << " }\n" + << "\\else\n " + << from_utf8(opt) + << "\\fi\n"; + } else os << from_utf8(opt); - if (need_unicode && enc && enc->iconvName() != "UTF-8") { + if (need_unicode && enc && enc->iconvName() != "UTF-8" + &&!runparams.isFullUnicode()) { os << setEncoding(enc->iconvName()) << "\\inputencoding{" << from_ascii(enc->latexName()) << "}\n"; - ++lines; } - return lines; }