+
+
+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);
+ docstring const temp_str = lex.getDocString();
+
+ user_defined_bullet(index).setText(temp_str);
+ temp_bullet(index).setText(temp_str);
+}
+
+
+string const BufferParams::paperSizeName() const
+{
+ char real_papersize = papersize;
+ if (real_papersize == PAPER_DEFAULT)
+ real_papersize = lyxrc.default_papersize;
+
+ switch (real_papersize) {
+ case PAPER_A3:
+ return "a3";
+ case PAPER_A4:
+ return "a4";
+ case PAPER_A5:
+ return "a5";
+ case PAPER_B5:
+ return "b5";
+ case PAPER_USEXECUTIVE:
+ return "foolscap";
+ case PAPER_USLEGAL:
+ return "legal";
+ case PAPER_USLETTER:
+ default:
+ return "letter";
+ }
+}
+
+
+string const BufferParams::dvips_options() const
+{
+ string result;
+
+ if (use_geometry
+ && papersize == PAPER_CUSTOM
+ && !lyxrc.print_paper_dimension_flag.empty()
+ && !paperwidth.empty()
+ && !paperheight.empty()) {
+ // using a custom papersize
+ result = lyxrc.print_paper_dimension_flag;
+ result += ' ' + paperwidth;
+ result += ',' + paperheight;
+ } else {
+ string const paper_option = paperSizeName();
+ if (paper_option != "letter" ||
+ orientation != ORIENTATION_LANDSCAPE) {
+ // dvips won't accept -t letter -t landscape.
+ // In all other cases, include the paper size
+ // explicitly.
+ result = lyxrc.print_paper_flag;
+ result += ' ' + paper_option;
+ }
+ }
+ if (orientation == ORIENTATION_LANDSCAPE &&
+ papersize != PAPER_CUSTOM)
+ result += ' ' + lyxrc.print_landscape_flag;
+ return result;
+}
+
+
+string const BufferParams::babelCall(string const & lang_opts) const
+{
+ string tmp = lyxrc.language_package;
+ if (!lyxrc.language_global_options && tmp == "\\usepackage{babel}")
+ tmp = string("\\usepackage[") + lang_opts + "]{babel}";
+ return tmp;
+}
+
+
+string const BufferParams::loadFonts(string const & rm,
+ string const & sf, string const & tt,
+ bool const & sc, bool const & osf,
+ int const & sfscale, int const & ttscale) const
+{
+ /* The LaTeX font world is in a flux. In the PSNFSS font interface,
+ several packages have been replaced by others, that might not
+ be installed on every system. We have to take care for that
+ (see psnfss.pdf). We try to support all psnfss fonts as well
+ as the fonts that have become de facto standard in the LaTeX
+ world (e.g. Latin Modern). We do not support obsolete fonts
+ (like PSLatex). In general, it should be possible to mix any
+ rm font with any sf or tt font, respectively. (JSpitzm)
+ TODO:
+ -- separate math fonts.
+ */
+
+ if (rm == "default" && sf == "default" && tt == "default")
+ //nothing to do
+ return string();
+
+ ostringstream os;
+
+ // ROMAN FONTS
+ // Computer Modern (must be explicitely selectable -- there might be classes
+ // that define a different default font!
+ if (rm == "cmr") {
+ os << "\\renewcommand{\\rmdefault}{cmr}\n";
+ // osf for Computer Modern needs eco.sty
+ if (osf)
+ os << "\\usepackage{eco}\n";
+ }
+ // Latin Modern Roman
+ else if (rm == "lmodern")
+ os << "\\usepackage{lmodern}\n";
+ // AE
+ else if (rm == "ae") {
+ // not needed when using OT1 font encoding.
+ if (lyxrc.fontenc != "default")
+ os << "\\usepackage{ae,aecompl}\n";
+ }
+ // Times
+ else if (rm == "times") {
+ // try to load the best available package
+ if (LaTeXFeatures::isAvailable("mathptmx"))
+ os << "\\usepackage{mathptmx}\n";
+ else if (LaTeXFeatures::isAvailable("mathptm"))
+ os << "\\usepackage{mathptm}\n";
+ else
+ os << "\\usepackage{times}\n";
+ }
+ // Palatino
+ else if (rm == "palatino") {
+ // try to load the best available package
+ if (LaTeXFeatures::isAvailable("mathpazo")) {
+ os << "\\usepackage";
+ if (osf || sc) {
+ os << '[';
+ if (!osf)
+ os << "sc";
+ else
+ // "osf" includes "sc"!
+ os << "osf";
+ os << ']';
+ }
+ os << "{mathpazo}\n";
+ }
+ else if (LaTeXFeatures::isAvailable("mathpple"))
+ os << "\\usepackage{mathpple}\n";
+ else
+ os << "\\usepackage{palatino}\n";
+ }
+ // Utopia
+ else if (rm == "utopia") {
+ // fourier supersedes utopia.sty, but does
+ // not work with OT1 encoding.
+ if (LaTeXFeatures::isAvailable("fourier")
+ && lyxrc.fontenc != "default") {
+ os << "\\usepackage";
+ if (osf || sc) {
+ os << '[';
+ if (sc)
+ os << "expert";
+ if (osf && sc)
+ os << ',';
+ if (osf)
+ os << "oldstyle";
+ os << ']';
+ }
+ os << "{fourier}\n";
+ }
+ else
+ os << "\\usepackage{utopia}\n";
+ }
+ // Bera (complete fontset)
+ else if (rm == "bera" && sf == "default" && tt == "default")
+ os << "\\usepackage{bera}\n";
+ // everything else
+ else if (rm != "default")
+ os << "\\usepackage" << "{" << rm << "}\n";
+
+ // SANS SERIF
+ // Helvetica, Bera Sans
+ if (sf == "helvet" || sf == "berasans") {
+ if (sfscale != 100)
+ os << "\\usepackage[scaled=" << float(sfscale) / 100
+ << "]{" << sf << "}\n";
+ else
+ os << "\\usepackage{" << sf << "}\n";
+ }
+ // Avant Garde
+ else if (sf == "avant")
+ os << "\\usepackage{" << sf << "}\n";
+ // Computer Modern, Latin Modern, CM Bright
+ else if (sf != "default")
+ os << "\\renewcommand{\\sfdefault}{" << sf << "}\n";
+
+ // monospaced/typewriter
+ // Courier, LuxiMono
+ if (tt == "luximono" || tt == "beramono") {
+ if (ttscale != 100)
+ os << "\\usepackage[scaled=" << float(ttscale) / 100
+ << "]{" << tt << "}\n";
+ else
+ os << "\\usepackage{" << tt << "}\n";
+ }
+ // Courier
+ else if (tt == "courier" )
+ os << "\\usepackage{" << tt << "}\n";
+ // Computer Modern, Latin Modern, CM Bright
+ else if (tt != "default")
+ os << "\\renewcommand{\\ttdefault}{" << tt << "}\n";
+
+ return os.str();
+}
+
+
+Encoding const & BufferParams::encoding() const
+{
+ if (inputenc == "auto" || inputenc == "default")
+ return *(language->encoding());
+ Encoding const * const enc =
+ encodings.getFromLaTeXName(inputenc);
+ if (enc)
+ return *enc;
+ lyxerr << "Unknown inputenc value `" << inputenc
+ << "'. Using `auto' instead." << endl;
+ return *(language->encoding());
+}
+
+} // namespace lyx