X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferparams.C;h=be159dc2a31e652896f7ae1c7c017c8f5eb533ad;hb=b9963e1a57135c3e2ab128a9ec4300f0e4886992;hp=d1734695812aba9fd0d22d85095a1fc9b7ccd880;hpb=701b99ecd70ac472aa53c8b2317af44def4f9670;p=lyx.git diff --git a/src/bufferparams.C b/src/bufferparams.C index d173469581..be159dc2a3 100644 --- a/src/bufferparams.C +++ b/src/bufferparams.C @@ -38,7 +38,7 @@ #include "frontends/Alert.h" #include "support/lyxalgo.h" // for lyx::count -#include "support/tostr.h" +#include "support/convert.h" #include "support/translator.h" #include @@ -105,42 +105,23 @@ QuotesLangTranslator const & quoteslangtranslator() } -// Quote times -typedef Translator QuotesTimesTranslator; - - -QuotesTimesTranslator const init_quotestimestranslator() -{ - QuotesTimesTranslator translator(1, InsetQuotes::SingleQ); - translator.addPair(2, InsetQuotes::DoubleQ); - return translator; -} - - -QuotesTimesTranslator const & quotestimestranslator() -{ - static QuotesTimesTranslator translator = init_quotestimestranslator(); - return translator; -} - - // Paper size -typedef Translator PaperSizeTranslator; +typedef Translator PaperSizeTranslator; PaperSizeTranslator const init_papersizetranslator() { - PaperSizeTranslator translator(string_papersize[0], VM_PAPER_DEFAULT); - translator.addPair(string_papersize[1], VM_PAPER_CUSTOM); - translator.addPair(string_papersize[2], VM_PAPER_USLETTER); - translator.addPair(string_papersize[3], VM_PAPER_USLEGAL); - translator.addPair(string_papersize[4], VM_PAPER_USEXECUTIVE); - translator.addPair(string_papersize[5], VM_PAPER_A3); - translator.addPair(string_papersize[6], VM_PAPER_A4); - translator.addPair(string_papersize[7], VM_PAPER_A5); - translator.addPair(string_papersize[8], VM_PAPER_B3); - translator.addPair(string_papersize[9], VM_PAPER_B4); - translator.addPair(string_papersize[10], VM_PAPER_B5); + PaperSizeTranslator translator(string_papersize[0], PAPER_DEFAULT); + translator.addPair(string_papersize[1], PAPER_CUSTOM); + translator.addPair(string_papersize[2], PAPER_USLETTER); + translator.addPair(string_papersize[3], PAPER_USLEGAL); + translator.addPair(string_papersize[4], PAPER_USEXECUTIVE); + translator.addPair(string_papersize[5], PAPER_A3); + translator.addPair(string_papersize[6], PAPER_A4); + translator.addPair(string_papersize[7], PAPER_A5); + translator.addPair(string_papersize[8], PAPER_B3); + translator.addPair(string_papersize[9], PAPER_B4); + translator.addPair(string_papersize[10], PAPER_B5); return translator; } @@ -152,27 +133,6 @@ PaperSizeTranslator const & papersizetranslator() } -// Paper packages -typedef Translator PaperPackagesTranslator; - - -PaperPackagesTranslator const init_paperpackagestranslator() -{ - PaperPackagesTranslator translator(string_paperpackages[0], PACKAGE_NONE); - translator.addPair(string_paperpackages[1], PACKAGE_A4); - translator.addPair(string_paperpackages[2], PACKAGE_A4WIDE); - translator.addPair(string_paperpackages[3], PACKAGE_WIDEMARGINSA4); - return translator; -} - - -PaperPackagesTranslator const & paperpackagestranslator() -{ - static PaperPackagesTranslator translator = init_paperpackagestranslator(); - return translator; -} - - // Paper orientation typedef Translator PaperOrientationTranslator; @@ -278,8 +238,9 @@ SpaceTranslator const & spacetranslator() } -struct BufferParams::Impl +class BufferParams::Impl { +public: Impl(); AuthorList authorlist; @@ -327,19 +288,17 @@ BufferParams::BufferParams() { paragraph_separation = PARSEP_INDENT; quotes_language = InsetQuotes::EnglishQ; - quotes_times = InsetQuotes::DoubleQ; fontsize = "default"; /* PaperLayout */ papersize = PAPER_DEFAULT; - papersize2 = VM_PAPER_DEFAULT; /* DEFAULT */ - paperpackage = PACKAGE_NONE; orientation = ORIENTATION_PORTRAIT; use_geometry = false; use_amsmath = AMS_AUTO; cite_engine = biblio::ENGINE_BASIC; use_bibtopic = false; tracking_changes = false; + output_changes = false; secnumdepth = 3; tocdepth = 3; language = default_language; @@ -481,18 +440,10 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) string quotes_lang; lex >> quotes_lang; quotes_language = quoteslangtranslator().find(quotes_lang); - } else if (token == "\\quotes_times") { - int qtimes; - lex >> qtimes; - quotes_times = quotestimestranslator().find(qtimes); } else if (token == "\\papersize") { string ppsize; lex >> ppsize; - papersize2 = papersizetranslator().find(ppsize); - } else if (token == "\\paperpackage") { - string ppackage; - lex >> ppackage; - paperpackage = paperpackagestranslator().find(ppackage); + papersize = papersizetranslator().find(ppsize); } else if (token == "\\use_geometry") { lex >> use_geometry; } else if (token == "\\use_amsmath") { @@ -507,6 +458,8 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) lex >> use_bibtopic; } else if (token == "\\tracking_changes") { lex >> tracking_changes; + } else if (token == "\\output_changes") { + lex >> output_changes; } else if (token == "\\branch") { lex.next(); string branch = lex.getString(); @@ -635,17 +588,16 @@ void BufferParams::writeFile(ostream & os) const spacing().writeFile(os); - os << "\\papersize " << string_papersize[papersize2] - << "\n\\paperpackage " << string_paperpackages[paperpackage] - << "\n\\use_geometry " << tostr(use_geometry) + os << "\\papersize " << string_papersize[papersize] + << "\n\\use_geometry " << convert(use_geometry) << "\n\\use_amsmath " << use_amsmath << "\n\\cite_engine " << citeenginetranslator().find(cite_engine) - << "\n\\use_bibtopic " << tostr(use_bibtopic) + << "\n\\use_bibtopic " << convert(use_bibtopic) << "\n\\paperorientation " << string_orientation[orientation] << '\n'; - std::list::const_iterator it = branchlist().begin(); - std::list::const_iterator end = branchlist().end(); + BranchList::const_iterator it = branchlist().begin(); + BranchList::const_iterator end = branchlist().end(); for (; it != end; ++it) { os << "\\branch " << it->getBranch() << "\n\\selected " << it->getSelected() @@ -687,9 +639,7 @@ void BufferParams::writeFile(ostream & os) const << string_paragraph_separation[paragraph_separation] << "\n\\defskip " << getDefSkip().asLyXCommand() << "\n\\quotes_language " - << string_quotes_language[quotes_language] << '\n' - << "\\quotes_times " - << quotestimestranslator().find(quotes_times) + << string_quotes_language[quotes_language] << "\n\\papercolumns " << columns << "\n\\papersides " << sides << "\n\\paperpagestyle " << pagestyle << '\n'; @@ -709,7 +659,8 @@ void BufferParams::writeFile(ostream & os) const } } - os << "\\tracking_changes " << tostr(tracking_changes) << "\n"; + os << "\\tracking_changes " << convert(tracking_changes) << "\n"; + os << "\\output_changes " << convert(output_changes) << "\n"; if (tracking_changes) { AuthorList::Authors::const_iterator it = pimpl_->authorlist.begin(); @@ -736,32 +687,37 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, clsoptions << fontsize << "pt,"; } + // custom, A3, B3 and B4 paper sizes need geometry + bool nonstandard_papersize = (papersize == PAPER_B3) || + (papersize == PAPER_B4) || + (papersize == PAPER_A3) || + (papersize == PAPER_CUSTOM); - if (!use_geometry && - (paperpackage == PACKAGE_NONE)) { + if (!use_geometry) { switch (papersize) { - case PAPER_A3PAPER: - clsoptions << "a3paper,"; - break; - case PAPER_A4PAPER: + case PAPER_A4: clsoptions << "a4paper,"; break; case PAPER_USLETTER: clsoptions << "letterpaper,"; break; - case PAPER_A5PAPER: + case PAPER_A5: clsoptions << "a5paper,"; break; - case PAPER_B5PAPER: + case PAPER_B5: clsoptions << "b5paper,"; break; - case PAPER_EXECUTIVEPAPER: + case PAPER_USEXECUTIVE: clsoptions << "executivepaper,"; break; - case PAPER_LEGALPAPER: + case PAPER_USLEGAL: clsoptions << "legalpaper,"; break; case PAPER_DEFAULT: + case PAPER_A3: + case PAPER_B3: + case PAPER_B4: + case PAPER_CUSTOM: break; } } @@ -858,33 +814,14 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, texrow.newline(); } - // At the very beginning the text parameters. - if (paperpackage != PACKAGE_NONE) { - switch (paperpackage) { - case PACKAGE_NONE: - break; - case PACKAGE_A4: - os << "\\usepackage{a4}\n"; - texrow.newline(); - break; - case PACKAGE_A4WIDE: - os << "\\usepackage{a4wide}\n"; - texrow.newline(); - break; - case PACKAGE_WIDEMARGINSA4: - os << "\\usepackage[widemargins]{a4}\n"; - texrow.newline(); - break; - } - } - if (use_geometry) { + if (use_geometry || nonstandard_papersize) { os << "\\usepackage{geometry}\n"; texrow.newline(); os << "\\geometry{verbose"; if (orientation == ORIENTATION_LANDSCAPE) os << ",landscape"; - switch (papersize2) { - case VM_PAPER_CUSTOM: + switch (papersize) { + case PAPER_CUSTOM: if (!paperwidth.empty()) os << ",paperwidth=" << paperwidth; @@ -892,58 +829,62 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, os << ",paperheight=" << paperheight; break; - case VM_PAPER_USLETTER: + case PAPER_USLETTER: os << ",letterpaper"; break; - case VM_PAPER_USLEGAL: + case PAPER_USLEGAL: os << ",legalpaper"; break; - case VM_PAPER_USEXECUTIVE: + case PAPER_USEXECUTIVE: os << ",executivepaper"; break; - case VM_PAPER_A3: + case PAPER_A3: os << ",a3paper"; break; - case VM_PAPER_A4: + case PAPER_A4: os << ",a4paper"; break; - case VM_PAPER_A5: + case PAPER_A5: os << ",a5paper"; break; - case VM_PAPER_B3: + case PAPER_B3: os << ",b3paper"; break; - case VM_PAPER_B4: + case PAPER_B4: os << ",b4paper"; break; - case VM_PAPER_B5: + case PAPER_B5: os << ",b5paper"; break; default: - // default papersize ie VM_PAPER_DEFAULT + // default papersize ie PAPER_DEFAULT switch (lyxrc.default_papersize) { case PAPER_DEFAULT: // keep compiler happy case PAPER_USLETTER: os << ",letterpaper"; break; - case PAPER_LEGALPAPER: + case PAPER_USLEGAL: os << ",legalpaper"; break; - case PAPER_EXECUTIVEPAPER: + case PAPER_USEXECUTIVE: os << ",executivepaper"; break; - case PAPER_A3PAPER: + case PAPER_A3: os << ",a3paper"; break; - case PAPER_A4PAPER: + case PAPER_A4: os << ",a4paper"; break; - case PAPER_A5PAPER: + case PAPER_A5: os << ",a5paper"; break; - case PAPER_B5PAPER: + case PAPER_B5: os << ",b5paper"; break; + case PAPER_B3: + case PAPER_B4: + case PAPER_CUSTOM: + break; } } if (!topmargin.empty()) @@ -1099,7 +1040,7 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, lyxpreamble += "\\makeatother\n"; // dvipost settings come after everything else - if (tracking_changes) { + if (features.isAvailable("dvipost") && tracking_changes && output_changes) { lyxpreamble += "\\dvipostlayout\n" "\\dvipost{osstart color push Red}\n" @@ -1119,33 +1060,6 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, } -void BufferParams::setPaperStuff() -{ - papersize = PAPER_DEFAULT; - char const c1 = paperpackage; - if (c1 == PACKAGE_NONE) { - char const c2 = papersize2; - if (c2 == VM_PAPER_USLETTER) - papersize = PAPER_USLETTER; - else if (c2 == VM_PAPER_USLEGAL) - papersize = PAPER_LEGALPAPER; - else if (c2 == VM_PAPER_USEXECUTIVE) - papersize = PAPER_EXECUTIVEPAPER; - else if (c2 == VM_PAPER_A3) - papersize = PAPER_A3PAPER; - else if (c2 == VM_PAPER_A4) - papersize = PAPER_A4PAPER; - else if (c2 == VM_PAPER_A5) - papersize = PAPER_A5PAPER; - else if ((c2 == VM_PAPER_B3) || (c2 == VM_PAPER_B4) || - (c2 == VM_PAPER_B5)) - papersize = PAPER_B5PAPER; - } else if ((c1 == PACKAGE_A4) || (c1 == PACKAGE_A4WIDE) || - (c1 == PACKAGE_WIDEMARGINSA4)) - papersize = PAPER_A4PAPER; -} - - void BufferParams::useClassDefaults() { LyXTextClass const & tclass = textclasslist[textclass]; @@ -1219,7 +1133,7 @@ void BufferParams::readGraphicsDriver(LyXLex & lex) if (test == tmptok) { graphicsDriver = tmptok; break; - } else if (test == "last_item") { + } else if (test == "") { lex.printError( "Warning: graphics driver `$$Token' not recognized!\n" " Setting graphics driver to `default'.\n"); @@ -1268,17 +1182,17 @@ string const BufferParams::paperSizeName() const real_papersize = lyxrc.default_papersize; switch (real_papersize) { - case PAPER_A3PAPER: + case PAPER_A3: return "a3"; - case PAPER_A4PAPER: + case PAPER_A4: return "a4"; - case PAPER_A5PAPER: + case PAPER_A5: return "a5"; - case PAPER_B5PAPER: + case PAPER_B5: return "b5"; - case PAPER_EXECUTIVEPAPER: + case PAPER_USEXECUTIVE: return "foolscap"; - case PAPER_LEGALPAPER: + case PAPER_USLEGAL: return "legal"; case PAPER_USLETTER: default: @@ -1292,7 +1206,7 @@ string const BufferParams::dvips_options() const string result; if (use_geometry - && papersize2 == VM_PAPER_CUSTOM + && papersize == PAPER_CUSTOM && !lyxrc.print_paper_dimension_flag.empty() && !paperwidth.empty() && !paperheight.empty()) { @@ -1312,7 +1226,7 @@ string const BufferParams::dvips_options() const } } if (orientation == ORIENTATION_LANDSCAPE && - papersize2 != VM_PAPER_CUSTOM) + papersize != PAPER_CUSTOM) result += ' ' + lyxrc.print_landscape_flag; return result; }