ParSepTranslator const & parseptranslator()
{
- static ParSepTranslator translator = init_parseptranslator();
+ static ParSepTranslator const translator =
+ init_parseptranslator();
return translator;
}
QuotesLangTranslator const & quoteslangtranslator()
{
- static QuotesLangTranslator translator = init_quoteslangtranslator();
+ static QuotesLangTranslator const translator =
+ init_quoteslangtranslator();
return translator;
}
PaperSizeTranslator const & papersizetranslator()
{
- static PaperSizeTranslator translator = initPaperSizeTranslator();
+ static PaperSizeTranslator const translator =
+ initPaperSizeTranslator();
return translator;
}
PaperOrientationTranslator const & paperorientationtranslator()
{
- static PaperOrientationTranslator translator = init_paperorientationtranslator();
+ static PaperOrientationTranslator const translator =
+ init_paperorientationtranslator();
return translator;
}
SidesTranslator const & sidestranslator()
{
- static SidesTranslator translator = init_sidestranslator();
+ static SidesTranslator const translator = init_sidestranslator();
return translator;
}
PackageTranslator const & packagetranslator()
{
- static PackageTranslator translator = init_packagetranslator();
+ static PackageTranslator const translator =
+ init_packagetranslator();
return translator;
}
{
CiteEngineTypeTranslator translator("authoryear", ENGINE_TYPE_AUTHORYEAR);
translator.addPair("numerical", ENGINE_TYPE_NUMERICAL);
+ translator.addPair("default", ENGINE_TYPE_DEFAULT);
return translator;
}
CiteEngineTypeTranslator const & citeenginetypetranslator()
{
- static CiteEngineTypeTranslator translator = init_citeenginetypetranslator();
+ static CiteEngineTypeTranslator const translator =
+ init_citeenginetypetranslator();
return translator;
}
SpaceTranslator const & spacetranslator()
{
- static SpaceTranslator translator = init_spacetranslator();
+ static SpaceTranslator const translator = init_spacetranslator();
return translator;
}
BufferParams::Impl *
BufferParams::MemoryTraits::clone(BufferParams::Impl const * ptr)
{
- LASSERT(ptr, /**/);
-
+ LBUFERR(ptr);
return new BufferParams::Impl(*ptr);
}
orientation = ORIENTATION_PORTRAIT;
use_geometry = false;
cite_engine_.push_back("basic");
- cite_engine_type_ = ENGINE_TYPE_NUMERICAL;
+ cite_engine_type_ = ENGINE_TYPE_DEFAULT;
biblio_style = "plain";
use_bibtopic = false;
use_indices = false;
- trackChanges = false;
- outputChanges = false;
+ track_changes = false;
+ output_changes = false;
use_default_options = true;
maintain_unincluded_children = false;
secnumdepth = 3;
docstring BufferParams::B_(string const & l10n) const
{
- LASSERT(language, /**/);
+ LASSERT(language, return from_utf8(l10n));
return getMessages(language->code()).get(l10n);
}
map<string, string> const & BufferParams::auto_packages()
{
+ // FIXME THREAD
+ // It is extremely unlikely that there could be a problem here, but...
static map<string, string> packages;
if (packages.empty()) {
// adding a package here implies a file format change!
Bullet & BufferParams::temp_bullet(lyx::size_type const index)
{
- LASSERT(index < 4, /**/);
+ LASSERT(index < 4, return pimpl_->temp_bullets[0]);
return pimpl_->temp_bullets[index];
}
Bullet const & BufferParams::temp_bullet(lyx::size_type const index) const
{
- LASSERT(index < 4, /**/);
+ LASSERT(index < 4, return pimpl_->temp_bullets[0]);
return pimpl_->temp_bullets[index];
}
Bullet & BufferParams::user_defined_bullet(lyx::size_type const index)
{
- LASSERT(index < 4, /**/);
+ LASSERT(index < 4, return pimpl_->temp_bullets[0]);
return pimpl_->user_defined_bullets[index];
}
Bullet const & BufferParams::user_defined_bullet(lyx::size_type const index) const
{
- LASSERT(index < 4, /**/);
+ LASSERT(index < 4, return pimpl_->temp_bullets[0]);
return pimpl_->user_defined_bullets[index];
}
// be available.
string tcp;
LayoutFileList & bcl = LayoutFileList::get();
- if (tcp.empty() && !filepath.empty())
+ if (!filepath.empty())
tcp = bcl.addLocalLayout(classname, filepath.absFileName());
+ // that returns non-empty if a "local" layout file is found.
if (!tcp.empty())
setBaseClass(tcp);
else
} else if (token == "\\begin_preamble") {
readPreamble(lex);
} else if (token == "\\begin_local_layout") {
- readLocalLayout(lex);
+ readLocalLayout(lex, false);
+ } else if (token == "\\begin_forced_local_layout") {
+ readLocalLayout(lex, true);
} else if (token == "\\begin_modules") {
readModules(lex);
} else if (token == "\\begin_removed_modules") {
} else if (token == "\\use_indices") {
lex >> use_indices;
} else if (token == "\\tracking_changes") {
- lex >> trackChanges;
+ lex >> track_changes;
} else if (token == "\\output_changes") {
- lex >> outputChanges;
+ lex >> output_changes;
} else if (token == "\\branch") {
lex.eatLine();
docstring branch = lex.getDocString();
<< convert<string>(maintain_unincluded_children) << '\n';
// local layout information
+ string const local_layout = getLocalLayout(false);
if (!local_layout.empty()) {
// remove '\n' from the end
string const tmplocal = rtrim(local_layout, "\n");
<< tmplocal
<< "\n\\end_local_layout\n";
}
+ string const forced_local_layout = getLocalLayout(true);
+ if (!forced_local_layout.empty()) {
+ // remove '\n' from the end
+ string const tmplocal = rtrim(forced_local_layout, "\n");
+ os << "\\begin_forced_local_layout\n"
+ << tmplocal
+ << "\n\\end_forced_local_layout\n";
+ }
// then the text parameters
if (language != ignore_language)
}
}
- os << "\\tracking_changes " << convert<string>(trackChanges) << '\n'
- << "\\output_changes " << convert<string>(outputChanges) << '\n'
+ os << "\\tracking_changes " << convert<string>(track_changes) << '\n'
+ << "\\output_changes " << convert<string>(output_changes) << '\n'
<< "\\html_math_output " << html_math_output << '\n'
<< "\\html_css_as_file " << html_css_as_file << '\n'
<< "\\html_be_strict " << convert<string>(html_be_strict) << '\n';
if (columns > 1 && language->rightToLeft())
features.require("rtloutputdblcol");
- if (outputChanges) {
+ if (output_changes) {
bool dvipost = LaTeXFeatures::isAvailable("dvipost");
bool xcolorulem = LaTeXFeatures::isAvailable("ulem") &&
LaTeXFeatures::isAvailable("xcolor");
if (pdfoptions().colorlinks)
features.require("color");
}
+ if (!listings_params.empty()) {
+ // do not test validity because listings_params is
+ // supposed to be valid
+ string par =
+ InsetListingsParams(listings_params).separatedParams(true);
+ // we can't support all packages, but we should load the color package
+ if (par.find("\\color", 0) != string::npos)
+ features.require("color");
+ }
// some languages are only available via polyglossia
if (features.runparams().flavor == OutputParams::XETEX
os << '{' << from_ascii(tclass.latexname()) << "}\n";
// end of \documentclass defs
- // if we use fontspec, we have to load the AMS packages here
+ // if we use fontspec or newtxmath, we have to load the AMS packages here
string const ams = features.loadAMSPackages();
- if (useNonTeXFonts && !ams.empty())
+ bool const ot1 = (font_encoding() == "default" || font_encoding() == "OT1");
+ bool const use_newtxmath =
+ theLaTeXFonts().getLaTeXFont(from_ascii(fonts_math)).getUsedPackage(
+ ot1, false, false) == "newtxmath";
+ if ((useNonTeXFonts || use_newtxmath) && !ams.empty())
os << from_ascii(ams);
if (useNonTeXFonts) {
os << "}\n";
}
- if (!listings_params.empty() || features.isRequired("listings"))
- os << "\\usepackage{listings}\n";
-
- if (!listings_params.empty()) {
- os << "\\lstset{";
- // do not test validity because listings_params is
- // supposed to be valid
- string par =
- InsetListingsParams(listings_params).separatedParams(true);
- // we can't support all packages, but we should load the color package
- if (par.find("\\color", 0) != string::npos)
- features.require("color");
- os << from_utf8(par)
- << "}\n";
- }
if (!features.isProvided("geometry")
&& (use_geometry || nonstandard_papersize)) {
odocstringstream ods;
+ atlyxpreamble + "\\makeatother\n\n";
// We try to load babel late, in case it interferes with other packages.
- // Jurabib, hyperref and varioref have to be called after babel, though.
+ // Jurabib, hyperref, varioref and listings (bug 8995) have to be
+ // called after babel, though.
if (use_babel && !features.isRequired("jurabib")
&& !features.isRequired("hyperref")
&& !features.isRequired("varioref")
features.needBabelLangOptions())) + '\n';
lyxpreamble += from_utf8(features.getBabelPostsettings());
}
+ if (!listings_params.empty() || features.isRequired("listings"))
+ lyxpreamble += "\\usepackage{listings}\n";
+ if (!listings_params.empty()) {
+ lyxpreamble += "\\lstset{";
+ // do not test validity because listings_params is
+ // supposed to be valid
+ string par =
+ InsetListingsParams(listings_params).separatedParams(true);
+ lyxpreamble += from_utf8(par);
+ lyxpreamble += "}\n";
+ }
// xunicode needs to be loaded at least after amsmath, amssymb,
// esint and the other packages that provide special glyphs
- if (features.runparams().flavor == OutputParams::XETEX)
+ if (features.runparams().flavor == OutputParams::XETEX
+ && useNonTeXFonts)
lyxpreamble += "\\usepackage{xunicode}\n";
// Polyglossia must be loaded last
}
-void BufferParams::makeDocumentClass()
+void BufferParams::makeDocumentClass(bool const clone)
{
if (!baseClass())
return;
for (; it != en; ++it)
mods.push_back(*it);
- doc_class_ = getDocumentClass(*baseClass(), mods);
+ doc_class_ = getDocumentClass(*baseClass(), mods, clone);
- if (!local_layout.empty()) {
- TextClass::ReturnValues success =
- doc_class_->read(local_layout, TextClass::MODULE);
- if (success != TextClass::OK && success != TextClass::OK_OLDFORMAT) {
- docstring const msg = _("Error reading internal layout information");
- frontend::Alert::warning(_("Read Error"), msg);
- }
+ TextClass::ReturnValues success = TextClass::OK;
+ if (!forced_local_layout_.empty())
+ success = doc_class_->read(forced_local_layout_, TextClass::MODULE);
+ if (!local_layout_.empty() &&
+ (success == TextClass::OK || success == TextClass::OK_OLDFORMAT))
+ success = doc_class_->read(local_layout_, TextClass::MODULE);
+ if (success != TextClass::OK && success != TextClass::OK_OLDFORMAT) {
+ docstring const msg = _("Error reading internal layout information");
+ frontend::Alert::warning(_("Read Error"), msg);
}
}
}
+std::string BufferParams::getLocalLayout(bool forced) const
+{
+ if (forced)
+ return doc_class_->forcedLayouts();
+ else
+ return local_layout_;
+}
+
+
+void BufferParams::setLocalLayout(string const & layout, bool forced)
+{
+ if (forced)
+ forced_local_layout_ = layout;
+ else
+ local_layout_ = layout;
+}
+
+
bool BufferParams::addLayoutModule(string const & modName)
{
LayoutModuleList::const_iterator it = layout_modules_.begin();
&& default_output_format != "default")
return default_output_format;
if (isDocBook()
- || useNonTeXFonts
|| encoding().package() == Encoding::japanese) {
vector<Format const *> const formats = exportableFormats(true);
if (formats.empty())
// return the first we find
return formats.front()->name();
}
+ if (useNonTeXFonts)
+ return lyxrc.default_otf_view_format;
return lyxrc.default_view_format;
}
}
-void BufferParams::readLocalLayout(Lexer & lex)
+void BufferParams::readLocalLayout(Lexer & lex, bool forced)
{
- if (lex.getString() != "\\begin_local_layout")
+ string const expected = forced ? "\\begin_forced_local_layout" :
+ "\\begin_local_layout";
+ if (lex.getString() != expected)
lyxerr << "Error (BufferParams::readLocalLayout):"
"consistency check failed." << endl;
- local_layout = lex.getLongString("\\end_local_layout");
+ if (forced)
+ forced_local_layout_ =
+ lex.getLongString("\\end_forced_local_layout");
+ else
+ local_layout_ = lex.getLongString("\\end_local_layout");
}
os << "\\usepackage{CJK}\n";
break;
}
+ // Load the CJK package if needed by a secondary language.
+ // If the main encoding is some variant of UTF8, use CJKutf8.
+ if (encoding().package() != Encoding::CJK && features.mustProvide("CJK")) {
+ if (encoding().iconvName() == "UTF-8"
+ && LaTeXFeatures::isAvailable("CJKutf8"))
+ os << "\\usepackage{CJKutf8}\n";
+ else
+ os << "\\usepackage{CJK}\n";
+ }
}
}