#include "VSpace.h"
#include "frontends/alert.h"
+#include "insets/InsetListingsParams.h"
#include "support/lyxalgo.h" // for lyx::count
#include "support/convert.h"
graphicsDriver = "default";
sides = TextClass::OneSide;
columns = 1;
+ listings_params = string();
pagestyle = "default";
compressed = false;
for (int iter = 0; iter < 4; ++iter) {
lex >> fontsize;
} else if (token == "\\papercolumns") {
lex >> columns;
+ } else if (token == "\\listings_params") {
+ string par;
+ lex >> par;
+ // validate par and produce a valid listings parameter string
+ try {
+ listings_params = InsetListingsParams(par).params();
+ } catch (invalidParam & e) {
+ lyxerr << "Invalid parameter string " << par << endl;
+ lyxerr << e.what() << endl;
+ listings_params = string();
+ }
} else if (token == "\\papersides") {
int psides;
lex >> psides;
<< "\n\\papercolumns " << columns
<< "\n\\papersides " << sides
<< "\n\\paperpagestyle " << pagestyle << '\n';
+ if (!listings_params.empty())
+ os << "\\listings_params \"" <<
+ InsetListingsParams(listings_params).encodedString() << "\"\n";
for (int i = 0; i < 4; ++i) {
if (user_defined_bullet(i) != ITEMIZE_DEFAULTS[i]) {
if (user_defined_bullet(i).getFont() != -1) {
bool const use_babel = features.useBabel();
if (use_babel) {
language_options << features.getLanguages();
- language_options << language->babel();
- if (lyxrc.language_global_options)
+ if (!language->babel().empty()) {
+ if (!language_options.str().empty())
+ language_options << ',';
+ language_options << language->babel();
+ }
+ if (lyxrc.language_global_options && !language_options.str().empty())
clsoptions << language_options.str() << ',';
}
if (inputenc == "auto") {
string const doc_encoding =
language->encoding()->latexName();
+ Encoding::Package const package =
+ language->encoding()->package();
// Create a list with all the input encodings used
// in the document
std::set<string> encodings =
features.getEncodingSet(doc_encoding);
- // thailatex does not use the inputenc package, but sets up
- // babel directly for tis620-0 encoding, therefore we must
- // not request inputenc for tis620-0 encoding
- if (!encodings.empty() && doc_encoding != "tis620-0") {
+ if (!encodings.empty() || package == Encoding::inputenc) {
os << "\\usepackage[";
std::set<string>::const_iterator it = encodings.begin();
std::set<string>::const_iterator const end = encodings.end();
}
for (; it != end; ++it)
os << ',' << from_ascii(*it);
- if (doc_encoding != "tis620-0") {
+ if (package == Encoding::inputenc) {
if (!encodings.empty())
os << ',';
os << from_ascii(doc_encoding);
os << "]{inputenc}\n";
texrow.newline();
}
- // utf8-plain is for XeTeX users (inputenc not desired)
- } else if (inputenc != "default" && inputenc != "tis620-0" &&
- inputenc != "ascii" && inputenc != "utf8-plain") {
- os << "\\usepackage[" << from_ascii(inputenc)
- << "]{inputenc}\n";
- texrow.newline();
+ if (package == Encoding::CJK) {
+ os << "\\usepackage{CJK}\n";
+ texrow.newline();
+ }
+ } else if (inputenc != "default") {
+ switch (language->encoding()->package()) {
+ case Encoding::none:
+ break;
+ case Encoding::inputenc:
+ os << "\\usepackage[" << from_ascii(inputenc)
+ << "]{inputenc}\n";
+ texrow.newline();
+ break;
+ case Encoding::CJK:
+ os << "\\usepackage{CJK}\n";
+ texrow.newline();
+ break;
+ }
}
// The encoding "armscii8" is only available when the package "armtex" is loaded.
texrow.newline();
}
+ if (!listings_params.empty()) {
+ os << "\\usepackage{listings}\n";
+ texrow.newline();
+ os << "\\lstset{";
+ // do not test validity because listings_params is supposed to be valid
+ string par = InsetListingsParams(listings_params).separatedParams(true);
+ os << from_ascii(par);
+ // count the number of newlines
+ for (size_t i = 0; i < par.size(); ++i)
+ if (par[i] == '\n')
+ texrow.newline();
+ os << "}\n";
+ texrow.newline();
+ }
if (use_geometry || nonstandard_papersize) {
os << "\\usepackage{geometry}\n";
texrow.newline();
lyxpreamble += "\\makeatother\n";
- // dvipost settings come after everything else
- if (features.isAvailable("dvipost") && outputChanges) {
- 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";
- }
-
int const nlines =
int(lyx::count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));
for (int j = 0; j != nlines; ++j) {
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 lang_pack = lyxrc.language_package;
+ if (lang_pack != "\\usepackage{babel}")
+ return lang_pack;
+ // suppress the babel call when there is no babel language defined
+ // for the document language in the lib/languages file and if no
+ // other languages are used (lang_opts is then empty)
+ if (lang_opts.empty())
+ return string();
+ if (!lyxrc.language_global_options)
+ return "\\usepackage[" + lang_opts + "]{babel}";
+ return lang_pack;
}