#include "lyxlex.h"
#include "Lsstream.h"
#include "author.h"
+#include "gettext.h"
#include "support/lyxalgo.h" // for lyx::count
#include "support/lyxlib.h"
#include "support/lstrings.h"
#include "support/types.h"
+#include "frontends/Alert.h"
+
#include <cstdlib>
#include <algorithm>
+using namespace lyx::support;
+
using std::ostream;
using std::endl;
using std::pair;
-#ifdef WITH_WARNINGS
-#warning Do we need this horrible thing? (JMarc)
-#endif
-bool use_babel;
BufferParams::BufferParams()
// Initialize textclass to point to article. if `first' is
textclass = 0;
return classname;
}
+ if (!getLyXTextClass().isTeXClassAvailable()) {
+ string 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."));
+ }
} else if (token == "\\begin_preamble") {
readPreamble(lex);
} else if (token == "\\options") {
if (tmpret == -1)
++tmpret;
paragraph_separation =
- static_cast<BufferParams::PARSEP>(tmpret);
+ static_cast<PARSEP>(tmpret);
} else if (token == "\\defskip") {
lex.nextToken();
defskip = VSpace(lex.getString());
if (tmpret == -1)
++tmpret;
else
- papersize2 = tmpret;
+ papersize2 = VMARGIN_PAPER_TYPE(tmpret);
} else if (token == "\\paperpackage") {
int tmpret = lex.findToken(string_paperpackages);
if (tmpret == -1) {
++tmpret;
- paperpackage = BufferParams::PACKAGE_NONE;
+ paperpackage = PACKAGE_NONE;
} else
- paperpackage = tmpret;
+ paperpackage = PAPER_PACKAGES(tmpret);
} else if (token == "\\use_geometry") {
lex.nextToken();
use_geometry = lex.getInteger();
} else if (token == "\\use_amsmath") {
lex.nextToken();
- use_amsmath = static_cast<BufferParams::AMS>(
+ use_amsmath = static_cast<AMS>(
lex.getInteger());
} else if (token == "\\use_natbib") {
lex.nextToken();
tracking_changes = lex.getInteger();
} else if (token == "\\author") {
lex.nextToken();
- istringstream ss(lex.getString());
+ istringstream ss(STRCONV(lex.getString()));
Author a;
ss >> a;
author_map.push_back(authorlist.record(a));
if (tmpret == -1)
++tmpret;
orientation =
- static_cast<BufferParams::PAPER_ORIENTATION>(tmpret);
+ static_cast<PAPER_ORIENTATION>(tmpret);
} else if (token == "\\paperwidth") {
lex.next();
paperwidth = lex.getString();
}
-void BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features,
+bool BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features,
TexRow & texrow) const
{
os << "\\documentclass";
if (!use_geometry &&
(paperpackage == PACKAGE_NONE)) {
switch (papersize) {
+ case PAPER_A3PAPER:
+ clsoptions << "a3paper,";
+ break;
case PAPER_A4PAPER:
clsoptions << "a4paper,";
break;
case PAPER_LEGALPAPER:
clsoptions << "legalpaper,";
break;
+ case PAPER_DEFAULT:
+ break;
}
}
clsoptions << "landscape,";
// language should be a parameter to \documentclass
- use_babel = false;
- ostringstream language_options;
if (language->babel() == "hebrew"
&& default_language->babel() != "hebrew")
// This seems necessary
features.useLanguage(default_language);
- if (lyxrc.language_use_babel ||
- language->lang() != lyxrc.default_language ||
- features.hasLanguages()) {
- use_babel = true;
+ ostringstream language_options;
+ bool const use_babel = features.useBabel();
+ if (use_babel) {
language_options << features.getLanguages();
language_options << language->babel();
if (lyxrc.language_global_options)
// 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();
}
os << lyxpreamble;
+ return use_babel;
}
void BufferParams::setPaperStuff()
}
}
}
+
+
+string const BufferParams::paperSizeName() const
+{
+ char real_papersize = papersize;
+ if (real_papersize == PAPER_DEFAULT)
+ real_papersize = lyxrc.default_papersize;
+
+ switch (real_papersize) {
+ case PAPER_A3PAPER:
+ return "a3";
+ case PAPER_A4PAPER:
+ return "a4";
+ case PAPER_A5PAPER:
+ return "a5";
+ case PAPER_B5PAPER:
+ return "b5";
+ case PAPER_EXECUTIVEPAPER:
+ return "foolscap";
+ case PAPER_LEGALPAPER:
+ return "legal";
+ case PAPER_USLETTER:
+ default:
+ return "letter";
+ }
+}
+
+
+string const BufferParams::dvips_options() const
+{
+ string result;
+
+ if (use_geometry
+ && papersize2 == VM_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 &&
+ papersize2 != VM_PAPER_CUSTOM)
+ result += ' ' + lyxrc.print_landscape_flag;
+ return result;
+}