X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FPDFOptions.cpp;h=ff44a17ddbd09d37193591930b64d8720c9336bd;hb=e674f6bdc69bf3072d91d316ab4da3ef26343be2;hp=94896f562b3692dcbb55ece886a441579070b75f;hpb=9d0ea8aeff32833a90b3fe64df0c5518a9e241be;p=lyx.git diff --git a/src/PDFOptions.cpp b/src/PDFOptions.cpp index 94896f562b..ff44a17ddb 100644 --- a/src/PDFOptions.cpp +++ b/src/PDFOptions.cpp @@ -12,20 +12,20 @@ #include "PDFOptions.h" +#include "Lexer.h" + #include "support/convert.h" -#include "support/lstrings.h" #include "support/debug.h" -#include "Lexer.h" +#include "support/lstrings.h" #include #include -namespace lyx { +using namespace std; +using namespace lyx::support; +namespace lyx { -using std::ostream; -using std::ostringstream; -using std::string; const string PDFOptions::pagemode_fullscreen("FullScreen"); @@ -47,10 +47,10 @@ bool PDFOptions::empty() const && pdfborder == x.pdfborder && colorlinks == x.colorlinks && backref == x.backref - && pagebackref == x.pagebackref && pdfusetitle == x.pdfusetitle; } + void PDFOptions::writeFile(ostream & os) const { os << "\\use_hyperref " << convert(use_hyperref) << '\n'; @@ -75,8 +75,7 @@ void PDFOptions::writeFile(ostream & os) const os << "\\pdf_breaklinks " << convert(breaklinks) << '\n'; os << "\\pdf_pdfborder " << convert(pdfborder) << '\n'; os << "\\pdf_colorlinks " << convert(colorlinks) << '\n'; - os << "\\pdf_backref " << convert(backref) << '\n'; - os << "\\pdf_pagebackref " << convert(pagebackref) << '\n'; + os << "\\pdf_backref " << backref << '\n'; os << "\\pdf_pdfusetitle " << convert(pdfusetitle) << '\n'; if (!pagemode.empty()) @@ -86,14 +85,11 @@ void PDFOptions::writeFile(ostream & os) const os << "\\pdf_quoted_options \"" << quoted_options << "\"\n"; } -void PDFOptions::writeLaTeX(odocstream & os, bool hyper_required) const + +void PDFOptions::writeLaTeX(odocstream & os, bool hyperref_already_provided) const { - if (!use_hyperref && !hyper_required) - return; - string opt; - opt = "\\usepackage["; // since LyX uses unicode, also set the PDF strings to unicode strings with the // hyperref option "unicode" opt += "unicode=true, "; @@ -118,15 +114,12 @@ void PDFOptions::writeLaTeX(odocstream & os, bool hyper_required) const opt += (pdfborder ?'0':'1'); opt += "},"; - opt += "backref=" + convert(backref) + ','; - opt += "pagebackref=" + convert(pagebackref) + ','; - opt += "\n "; + opt += "backref=" + backref + ','; opt += "colorlinks=" + convert(colorlinks) + ','; if (!pagemode.empty()) opt += "pdfpagemode=" + pagemode + ','; - opt = support::rtrim(opt,","); - opt += "]\n {hyperref}\n"; + // load the pdftitle etc. as hypersetup, otherwise you'll get // LaTeX-errors when using non-latin characters @@ -141,11 +134,28 @@ void PDFOptions::writeLaTeX(odocstream & os, bool hyper_required) const hyperset += "\n pdfkeywords={" + keywords + "},"; if (!quoted_options.empty()){ hyperset += "\n "; - hyperset += quoted_options_get(); + hyperset += quoted_options; } - hyperset = support::rtrim(hyperset,","); - if (!hyperset.empty()) - opt += "\\hypersetup{" + hyperset + "}\n "; + hyperset = rtrim(hyperset,","); + + + // use in \\usepackage parameter as not all options can be handled inside \\hypersetup + if (!hyperref_already_provided) { + opt = rtrim(opt,","); + opt = "\\usepackage[" + opt + "]\n {hyperref}\n"; + + if (!hyperset.empty()) + opt += "\\hypersetup{" + hyperset + "}\n "; + } else + // only in case hyperref is already loaded by the current text class + // try to put it into hyperset + // + // FIXME: this still does not fix the cases where hyperref is loaded + // and the option is active only when part of usepackage parameter + // (e.g. pdfusetitle). + { + opt = "\\hypersetup{" + opt + hyperset + "}\n "; + } // FIXME UNICODE os << from_utf8(opt); @@ -180,8 +190,6 @@ string PDFOptions::readToken(Lexer &lex, string const & token) lex >> colorlinks; } else if (token == "\\pdf_backref") { lex >> backref; - } else if (token == "\\pdf_pagebackref") { - lex >> pagebackref; } else if (token == "\\pdf_pdfusetitle") { lex >> pdfusetitle; } else if (token == "\\pdf_pagemode") { @@ -195,12 +203,13 @@ string PDFOptions::readToken(Lexer &lex, string const & token) } -// prepared for check -string PDFOptions::quoted_options_get() const +// check the string from UI +string PDFOptions::quoted_options_check(string const str) const { - return quoted_options; + return subst(str, "\n", ""); } + // set implicit settings for hyperref void PDFOptions::clear() { @@ -216,8 +225,7 @@ void PDFOptions::clear() breaklinks = false; pdfborder = false; colorlinks = false; - backref = false; - pagebackref = false; + backref = "false"; pagemode.clear(); quoted_options.clear(); pdfusetitle = true; //in contrast with hyperref