X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferparams.C;h=be159dc2a31e652896f7ae1c7c017c8f5eb533ad;hb=b9963e1a57135c3e2ab128a9ec4300f0e4886992;hp=448edc75dc9ea4ae960fb3a706d767532134e414;hpb=7c15014ec2884e50a17559c1269747658c924eb3;p=lyx.git diff --git a/src/bufferparams.C b/src/bufferparams.C index 448edc75dc..be159dc2a3 100644 --- a/src/bufferparams.C +++ b/src/bufferparams.C @@ -38,6 +38,8 @@ #include "frontends/Alert.h" #include "support/lyxalgo.h" // for lyx::count +#include "support/convert.h" +#include "support/translator.h" #include @@ -58,8 +60,187 @@ using std::pair; namespace biblio = lyx::biblio; -struct BufferParams::Impl +// Local translators +namespace { + +// Paragraph separation +typedef Translator ParSepTranslator; + + +ParSepTranslator const init_parseptranslator() +{ + ParSepTranslator translator(string_paragraph_separation[0], BufferParams::PARSEP_INDENT); + translator.addPair(string_paragraph_separation[1], BufferParams::PARSEP_SKIP); + return translator; +} + + +ParSepTranslator const & parseptranslator() +{ + static ParSepTranslator translator = init_parseptranslator(); + return translator; +} + + +// Quotes language +typedef Translator QuotesLangTranslator; + + +QuotesLangTranslator const init_quoteslangtranslator() +{ + QuotesLangTranslator translator(string_quotes_language[0], InsetQuotes::EnglishQ); + translator.addPair(string_quotes_language[1], InsetQuotes::SwedishQ); + translator.addPair(string_quotes_language[2], InsetQuotes::GermanQ); + translator.addPair(string_quotes_language[3], InsetQuotes::PolishQ); + translator.addPair(string_quotes_language[4], InsetQuotes::FrenchQ); + translator.addPair(string_quotes_language[5], InsetQuotes::DanishQ); + return translator; +} + + +QuotesLangTranslator const & quoteslangtranslator() +{ + static QuotesLangTranslator translator = init_quoteslangtranslator(); + return translator; +} + + +// Paper size +typedef Translator PaperSizeTranslator; + + +PaperSizeTranslator const init_papersizetranslator() +{ + 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; +} + + +PaperSizeTranslator const & papersizetranslator() +{ + static PaperSizeTranslator translator = init_papersizetranslator(); + return translator; +} + + +// Paper orientation +typedef Translator PaperOrientationTranslator; + + +PaperOrientationTranslator const init_paperorientationtranslator() +{ + PaperOrientationTranslator translator(string_orientation[0], ORIENTATION_PORTRAIT); + translator.addPair(string_orientation[1], ORIENTATION_LANDSCAPE); + return translator; +} + + +PaperOrientationTranslator const & paperorientationtranslator() +{ + static PaperOrientationTranslator translator = init_paperorientationtranslator(); + return translator; +} + + +// Page sides +typedef Translator SidesTranslator; + + +SidesTranslator const init_sidestranslator() +{ + SidesTranslator translator(1, LyXTextClass::OneSide); + translator.addPair(2, LyXTextClass::TwoSides); + return translator; +} + + +SidesTranslator const & sidestranslator() +{ + static SidesTranslator translator = init_sidestranslator(); + return translator; +} + + + +// AMS +typedef Translator AMSTranslator; + + +AMSTranslator const init_amstranslator() +{ + AMSTranslator translator(0, BufferParams::AMS_OFF); + translator.addPair(1, BufferParams::AMS_AUTO); + translator.addPair(2, BufferParams::AMS_ON); + return translator; +} + + +AMSTranslator const & amstranslator() +{ + static AMSTranslator translator = init_amstranslator(); + return translator; +} + + +// Cite engine +typedef Translator CiteEngineTranslator; + + +CiteEngineTranslator const init_citeenginetranslator() +{ + CiteEngineTranslator translator("basic", biblio::ENGINE_BASIC); + translator.addPair("natbib_numerical", biblio::ENGINE_NATBIB_NUMERICAL); + translator.addPair("natbib_authoryear", biblio::ENGINE_NATBIB_AUTHORYEAR); + translator.addPair("jurabib", biblio::ENGINE_JURABIB); + return translator; +} + + +CiteEngineTranslator const & citeenginetranslator() +{ + static CiteEngineTranslator translator = init_citeenginetranslator(); + return translator; +} + + +// Spacing +typedef Translator SpaceTranslator; + + +SpaceTranslator const init_spacetranslator() +{ + SpaceTranslator translator("default", Spacing::Default); + translator.addPair("single", Spacing::Single); + translator.addPair("onehalf", Spacing::Onehalf); + translator.addPair("double", Spacing::Double); + translator.addPair("other", Spacing::Other); + return translator; +} + + +SpaceTranslator const & spacetranslator() +{ + static SpaceTranslator translator = init_spacetranslator(); + return translator; +} + +// ends annonym namespace +} + + +class BufferParams::Impl { +public: Impl(); AuthorList authorlist; @@ -85,6 +266,8 @@ BufferParams::Impl::Impl() BufferParams::Impl * BufferParams::MemoryTraits::clone(BufferParams::Impl const * ptr) { + BOOST_ASSERT(ptr); + return new BufferParams::Impl(*ptr); } @@ -105,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; @@ -163,28 +344,28 @@ BranchList const & BufferParams::branchlist() const } -Bullet & BufferParams::temp_bullet(lyx::size_type index) +Bullet & BufferParams::temp_bullet(lyx::size_type const index) { BOOST_ASSERT(index < 4); return pimpl_->temp_bullets[index]; } -Bullet const & BufferParams::temp_bullet(lyx::size_type index) const +Bullet const & BufferParams::temp_bullet(lyx::size_type const index) const { BOOST_ASSERT(index < 4); return pimpl_->temp_bullets[index]; } -Bullet & BufferParams::user_defined_bullet(lyx::size_type index) +Bullet & BufferParams::user_defined_bullet(lyx::size_type const index) { BOOST_ASSERT(index < 4); return pimpl_->user_defined_bullets[index]; } -Bullet const & BufferParams::user_defined_bullet(lyx::size_type index) const +Bullet const & BufferParams::user_defined_bullet(lyx::size_type const index) const { BOOST_ASSERT(index < 4); return pimpl_->user_defined_bullets[index]; @@ -218,7 +399,7 @@ void BufferParams::setDefSkip(VSpace const & vs) string const BufferParams::readToken(LyXLex & lex, string const & token) { if (token == "\\textclass") { - lex.eatLine(); + lex.next(); string const classname = lex.getString(); pair pp = textclasslist.NumberOfClass(classname); @@ -229,7 +410,8 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) return classname; } if (!getLyXTextClass().isTeXClassAvailable()) { - string msg = bformat(_("The document uses a missing " + string const msg = + bformat(_("The document uses a missing " "TeX class \"%1$s\".\n"), classname); Alert::warning(_("Document class not available"), msg + _("LyX will not be able to produce output.")); @@ -242,117 +424,60 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) } else if (token == "\\language") { readLanguage(lex); } else if (token == "\\inputencoding") { - lex.eatLine(); - inputenc = lex.getString(); + lex >> inputenc; } else if (token == "\\graphics") { readGraphicsDriver(lex); } else if (token == "\\fontscheme") { - lex.eatLine(); - fonts = lex.getString(); + lex >> fonts; } else if (token == "\\paragraph_separation") { - int tmpret = lex.findToken(string_paragraph_separation); - if (tmpret == -1) - ++tmpret; - paragraph_separation = - static_cast(tmpret); + string parsep; + lex >> parsep; + paragraph_separation = parseptranslator().find(parsep); } else if (token == "\\defskip") { - lex.nextToken(); + lex.next(); pimpl_->defskip = VSpace(lex.getString()); } else if (token == "\\quotes_language") { - // FIXME: should be params.readQuotes() - int tmpret = lex.findToken(string_quotes_language); - if (tmpret == -1) - ++tmpret; - InsetQuotes::quote_language tmpl = - InsetQuotes::EnglishQ; - switch (tmpret) { - case 0: - tmpl = InsetQuotes::EnglishQ; - break; - case 1: - tmpl = InsetQuotes::SwedishQ; - break; - case 2: - tmpl = InsetQuotes::GermanQ; - break; - case 3: - tmpl = InsetQuotes::PolishQ; - break; - case 4: - tmpl = InsetQuotes::FrenchQ; - break; - case 5: - tmpl = InsetQuotes::DanishQ; - break; - } - quotes_language = tmpl; - } else if (token == "\\quotes_times") { - // FIXME: should be params.readQuotes() - lex.nextToken(); - switch (lex.getInteger()) { - case 1: - quotes_times = InsetQuotes::SingleQ; - break; - case 2: - quotes_times = InsetQuotes::DoubleQ; - break; - } + string quotes_lang; + lex >> quotes_lang; + quotes_language = quoteslangtranslator().find(quotes_lang); } else if (token == "\\papersize") { - int tmpret = lex.findToken(string_papersize); - if (tmpret == -1) - ++tmpret; - else - papersize2 = VMARGIN_PAPER_TYPE(tmpret); - } else if (token == "\\paperpackage") { - int tmpret = lex.findToken(string_paperpackages); - if (tmpret == -1) { - ++tmpret; - paperpackage = PACKAGE_NONE; - } else - paperpackage = PAPER_PACKAGES(tmpret); + string ppsize; + lex >> ppsize; + papersize = papersizetranslator().find(ppsize); } else if (token == "\\use_geometry") { - lex.nextToken(); - use_geometry = lex.getInteger(); + lex >> use_geometry; } else if (token == "\\use_amsmath") { - lex.nextToken(); - use_amsmath = static_cast( - lex.getInteger()); + int use_ams; + lex >> use_ams; + use_amsmath = amstranslator().find(use_ams); } else if (token == "\\cite_engine") { - lex.nextToken(); - string const engine = lex.getString(); - - cite_engine = biblio::ENGINE_BASIC; - if (engine == "natbib_numerical") - cite_engine = biblio::ENGINE_NATBIB_NUMERICAL; - else if (engine == "natbib_authoryear") - cite_engine = biblio::ENGINE_NATBIB_AUTHORYEAR; - else if (engine == "jurabib") - cite_engine = biblio::ENGINE_JURABIB; - + string engine; + lex >> engine; + cite_engine = citeenginetranslator().find(engine); } else if (token == "\\use_bibtopic") { - lex.nextToken(); - use_bibtopic = lex.getInteger(); + lex >> use_bibtopic; } else if (token == "\\tracking_changes") { - lex.nextToken(); - tracking_changes = lex.getInteger(); + lex >> tracking_changes; + } else if (token == "\\output_changes") { + lex >> output_changes; } else if (token == "\\branch") { - lex.nextToken(); + lex.next(); string branch = lex.getString(); branchlist().add(branch); while (true) { - lex.nextToken(); + lex.next(); string const tok = lex.getString(); if (tok == "\\end_branch") break; Branch * branch_ptr = branchlist().find(branch); if (tok == "\\selected") { - lex.nextToken(); + lex.next(); if (branch_ptr) branch_ptr->setSelected(lex.getInteger()); } // not yet operational if (tok == "\\color") { - lex.nextToken(); + lex.eatLine(); string color = lex.getString(); if (branch_ptr) branch_ptr->setColor(color); @@ -364,141 +489,61 @@ string const BufferParams::readToken(LyXLex & lex, string const & token) } } } else if (token == "\\author") { - lex.nextToken(); + lex.eatLine(); istringstream ss(lex.getString()); Author a; ss >> a; author_map.push_back(pimpl_->authorlist.record(a)); } else if (token == "\\paperorientation") { - int tmpret = lex.findToken(string_orientation); - if (tmpret == -1) - ++tmpret; - orientation = - static_cast(tmpret); + string orient; + lex >> orient; + orientation = paperorientationtranslator().find(orient); } else if (token == "\\paperwidth") { - lex.next(); - paperwidth = lex.getString(); + lex >> paperwidth; } else if (token == "\\paperheight") { - lex.next(); - paperheight = lex.getString(); + lex >> paperheight; } else if (token == "\\leftmargin") { - lex.next(); - leftmargin = lex.getString(); + lex >> leftmargin; } else if (token == "\\topmargin") { - lex.next(); - topmargin = lex.getString(); + lex >> topmargin; } else if (token == "\\rightmargin") { - lex.next(); - rightmargin = lex.getString(); + lex >> rightmargin; } else if (token == "\\bottommargin") { - lex.next(); - bottommargin = lex.getString(); + lex >> bottommargin; } else if (token == "\\headheight") { - lex.next(); - headheight = lex.getString(); + lex >> headheight; } else if (token == "\\headsep") { - lex.next(); - headsep = lex.getString(); + lex >> headsep; } else if (token == "\\footskip") { - lex.next(); - footskip = lex.getString(); + lex >> footskip; } else if (token == "\\paperfontsize") { - lex.nextToken(); - fontsize = rtrim(lex.getString()); + lex >> fontsize; } else if (token == "\\papercolumns") { - lex.nextToken(); - columns = lex.getInteger(); + lex >> columns; } else if (token == "\\papersides") { - lex.nextToken(); - switch (lex.getInteger()) { - default: - case 1: sides = LyXTextClass::OneSide; break; - case 2: sides = LyXTextClass::TwoSides; break; - } + int psides; + lex >> psides; + sides = sidestranslator().find(psides); } else if (token == "\\paperpagestyle") { - lex.nextToken(); - pagestyle = rtrim(lex.getString()); + lex >> pagestyle; } else if (token == "\\bullet") { - // FIXME: should be params.readBullets() - lex.nextToken(); - int const index = lex.getInteger(); - lex.nextToken(); - int temp_int = lex.getInteger(); - user_defined_bullet(index).setFont(temp_int); - temp_bullet(index).setFont(temp_int); - lex.nextToken(); - temp_int = lex.getInteger(); - user_defined_bullet(index).setCharacter(temp_int); - temp_bullet(index).setCharacter(temp_int); - lex.nextToken(); - temp_int = lex.getInteger(); - user_defined_bullet(index).setSize(temp_int); - temp_bullet(index).setSize(temp_int); - lex.nextToken(); - string const temp_str = lex.getString(); - if (temp_str != "\\end_bullet") { - // this element isn't really necessary for - // parsing but is easier for humans - // to understand bullets. Put it back and - // set a debug message? - lex.printError("\\end_bullet expected, got" + temp_str); - //how can I put it back? - } + readBullets(lex); } else if (token == "\\bulletLaTeX") { - // The bullet class should be able to read this. - lex.nextToken(); - int const index = lex.getInteger(); - lex.next(); - string temp_str = lex.getString(); - string sum_str; - while (temp_str != "\\end_bullet") { - // this loop structure is needed when user - // enters an empty string since the first - // thing returned will be the \\end_bullet - // OR - // if the LaTeX entry has spaces. Each element - // therefore needs to be read in turn - sum_str += temp_str; - lex.next(); - temp_str = lex.getString(); - } - - user_defined_bullet(index).setText(sum_str); - temp_bullet(index).setText(sum_str); + readBulletsLaTeX(lex); } else if (token == "\\secnumdepth") { - lex.nextToken(); - secnumdepth = lex.getInteger(); + lex >> secnumdepth; } else if (token == "\\tocdepth") { - lex.nextToken(); - tocdepth = lex.getInteger(); + lex >> tocdepth; } else if (token == "\\spacing") { - lex.next(); - string const tmp = rtrim(lex.getString()); - Spacing::Space tmp_space = Spacing::Default; - float tmp_val = 0.0; - if (tmp == "single") { - tmp_space = Spacing::Single; - } else if (tmp == "onehalf") { - tmp_space = Spacing::Onehalf; - } else if (tmp == "double") { - tmp_space = Spacing::Double; - } else if (tmp == "other") { - lex.next(); - tmp_space = Spacing::Other; - tmp_val = lex.getFloat(); - } else { - lex.printError("Unknown spacing token: '$$Token'"); + string nspacing; + lex >> nspacing; + string tmp_val; + if (nspacing == "other") { + lex >> tmp_val; } -#if 0 // FIXME: Handled in lyx2lyx ? - // Small hack so that files written with klyx will be - // parsed correctly. - if (first_par) - par->params().spacing(Spacing(tmp_space, tmp_val)); -#endif - spacing().set(tmp_space, tmp_val); + spacing().set(spacetranslator().find(nspacing), tmp_val); } else if (token == "\\float_placement") { - lex.nextToken(); - float_placement = lex.getString(); + lex >> float_placement; } else { return token; } @@ -524,12 +569,12 @@ void BufferParams::writeFile(ostream & os) const << "\n\\end_preamble\n"; } - /* the options */ + // the options if (!options.empty()) { os << "\\options " << options << '\n'; } - /* then the text parameters */ + // then the text parameters if (language != ignore_language) os << "\\language " << language->lang() << '\n'; os << "\\inputencoding " << inputenc @@ -543,32 +588,16 @@ void BufferParams::writeFile(ostream & os) const spacing().writeFile(os); - string cite_engine_str = "basic"; - switch (cite_engine) { - case biblio::ENGINE_BASIC: - break; - case biblio::ENGINE_NATBIB_NUMERICAL: - cite_engine_str = "natbib_numerical"; - break; - case biblio::ENGINE_NATBIB_AUTHORYEAR: - cite_engine_str = "natbib_authoryear"; - break; - case biblio::ENGINE_JURABIB: - cite_engine_str = "jurabib"; - break; - } - - os << "\\papersize " << string_papersize[papersize2] - << "\n\\paperpackage " << string_paperpackages[paperpackage] - << "\n\\use_geometry " << use_geometry + os << "\\papersize " << string_papersize[papersize] + << "\n\\use_geometry " << convert(use_geometry) << "\n\\use_amsmath " << use_amsmath - << "\n\\cite_engine " << cite_engine_str - << "\n\\use_bibtopic " << use_bibtopic + << "\n\\cite_engine " << citeenginetranslator().find(cite_engine) + << "\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() @@ -610,39 +639,28 @@ void BufferParams::writeFile(ostream & os) const << string_paragraph_separation[paragraph_separation] << "\n\\defskip " << getDefSkip().asLyXCommand() << "\n\\quotes_language " - << string_quotes_language[quotes_language] << '\n'; - switch (quotes_times) { - // An output operator for insetquotes would be nice - case InsetQuotes::SingleQ: - os << "\\quotes_times 1\n"; break; - case InsetQuotes::DoubleQ: - os << "\\quotes_times 2\n"; break; - } - os << "\\papercolumns " << columns + << string_quotes_language[quotes_language] + << "\n\\papercolumns " << columns << "\n\\papersides " << sides << "\n\\paperpagestyle " << pagestyle << '\n'; for (int i = 0; i < 4; ++i) { if (user_defined_bullet(i) != ITEMIZE_DEFAULTS[i]) { if (user_defined_bullet(i).getFont() != -1) { - os << "\\bullet " << i - << "\n\t" - << user_defined_bullet(i).getFont() - << "\n\t" - << user_defined_bullet(i).getCharacter() - << "\n\t" - << user_defined_bullet(i).getSize() - << "\n\\end_bullet\n"; + os << "\\bullet " << i << " " + << user_defined_bullet(i).getFont() << " " + << user_defined_bullet(i).getCharacter() << " " + << user_defined_bullet(i).getSize() << "\n"; } else { - os << "\\bulletLaTeX " << i - << "\n\t\"" + os << "\\bulletLaTeX " << i << " \"" << user_defined_bullet(i).getText() - << "\"\n\\end_bullet\n"; + << "\"\n"; } } } - os << "\\tracking_changes " << 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(); @@ -669,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; } } @@ -791,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; @@ -825,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()) @@ -1032,13 +1040,13 @@ 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" "\\dvipost{osend color pop}\n" "\\dvipost{cbstart color push Blue}\n" - "\\dvipost{cbend color pop} \n"; + "\\dvipost{cbend color pop}\n"; } int const nlines = @@ -1051,32 +1059,6 @@ bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features, return use_babel; } -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() { @@ -1151,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"); @@ -1162,6 +1144,37 @@ void BufferParams::readGraphicsDriver(LyXLex & lex) } +void BufferParams::readBullets(LyXLex & lex) +{ + if (!lex.next()) return; + + int const index = lex.getInteger(); + lex.next(); + int temp_int = lex.getInteger(); + user_defined_bullet(index).setFont(temp_int); + temp_bullet(index).setFont(temp_int); + lex >> temp_int; + user_defined_bullet(index).setCharacter(temp_int); + temp_bullet(index).setCharacter(temp_int); + lex >> temp_int; + user_defined_bullet(index).setSize(temp_int); + temp_bullet(index).setSize(temp_int); +} + + +void BufferParams::readBulletsLaTeX(LyXLex & lex) +{ + // The bullet class should be able to read this. + if (!lex.next()) return; + int const index = lex.getInteger(); + lex.next(true); + string const temp_str = lex.getString(); + + user_defined_bullet(index).setText(temp_str); + temp_bullet(index).setText(temp_str); +} + + string const BufferParams::paperSizeName() const { char real_papersize = papersize; @@ -1169,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: @@ -1193,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()) { @@ -1213,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; }