Move some more packages from unconditionally swallowing to the package

registration mechanism, so that they are only swallowed if LyX will load them.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40315 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Georg Baum 2011-11-29 20:09:40 +00:00
parent 4c72c6a32d
commit 5a525d932f
3 changed files with 58 additions and 28 deletions

View File

@ -448,6 +448,7 @@ Preamble::Preamble() : one_language(true)
h_tocdepth = "3";
h_tracking_changes = "false";
h_use_bibtopic = "false";
h_use_indices = "false";
h_use_geometry = "false";
h_use_amsmath = "1";
h_use_default_options = "false";
@ -705,27 +706,21 @@ void Preamble::handle_package(Parser &p, string const & name,
else if (is_known(name, known_old_language_packages)) {
// known language packages from the times before babel
// if they are found and not also babel, they will be used as
// cutom language package
// custom language package
h_language_package = "\\usepackage{" + name + "}";
}
else if (name == "makeidx")
; // ignore this
else if (name == "prettyref")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "varioref")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "verbatim")
; // ignore this
else if (name == "nomencl")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "textcomp")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "lyxskak") {
// ignore this and its options
@ -733,13 +728,11 @@ void Preamble::handle_package(Parser &p, string const & name,
options.clear();
}
else if (name == "url")
; // ignore this
else if (name == "array" || name == "booktabs" ||
name == "color" || name == "hhline" ||
name == "longtable" || name == "subscript" ||
name == "ulem") {
else if (name == "array" || name == "booktabs" || name == "float" ||
name == "color" || name == "hhline" || name == "longtable" ||
name == "makeidx" || name == "nomencl" || name == "splitidx" ||
name == "setspace" || name == "subscript" || name == "ulem" ||
name == "url") {
if (!in_lyx_preamble)
h_preamble << package_beg_sep << name
<< package_mid_sep << "\\usepackage{"
@ -747,22 +740,19 @@ void Preamble::handle_package(Parser &p, string const & name,
}
else if (name == "graphicx")
; // ignore this
else if (name == "setspace")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "geometry")
handle_geometry(options);
else if (name == "rotfloat")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "wrapfig")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (name == "subfig")
; // ignore this
; // ignore this FIXME: Use the package separator mechanism instead
else if (is_known(name, known_languages))
h_language = name;
@ -857,6 +847,11 @@ bool Preamble::writeLyXHeader(ostream & os)
else if (is_known(h_language, known_english_quotes_languages))
h_quotes_language = "english";
if (contains(h_float_placement, "H"))
registerAutomaticallyLoadedPackage("float");
if (h_spacing != "single" && h_spacing != "default")
registerAutomaticallyLoadedPackage("setspace");
// output the LyX file settings
os << "#LyX file created by tex2lyx " << PACKAGE_VERSION << "\n"
<< "\\lyxformat " << LYX_FORMAT << '\n'
@ -948,6 +943,7 @@ bool Preamble::writeLyXHeader(ostream & os)
<< "\\use_undertilde " << h_use_undertilde << "\n"
<< "\\cite_engine " << h_cite_engine << "\n"
<< "\\use_bibtopic " << h_use_bibtopic << "\n"
<< "\\use_indices " << h_use_indices << "\n"
<< "\\paperorientation " << h_paperorientation << '\n'
<< "\\suppress_date " << h_suppress_date << '\n'
<< "\\use_refstyle " << h_use_refstyle << '\n';

View File

@ -39,6 +39,8 @@ public:
///
std::string notefontcolor() const { return h_notefontcolor; }
///
std::string use_indices() const { return h_use_indices; }
///
bool indentParagraphs() const;
///
bool isPackageUsed(std::string const & package) const;
@ -136,6 +138,7 @@ private:
std::string h_tocdepth;
std::string h_tracking_changes;
std::string h_use_bibtopic;
std::string h_use_indices;
std::string h_use_geometry;
std::string h_use_amsmath;
std::string h_use_default_options;

View File

@ -1223,6 +1223,15 @@ void parse_environment(Parser & p, ostream & os, bool outer,
float_type = "";
if (!opt.empty())
os << "placement " << opt << '\n';
if (contains(opt, "H"))
preamble.registerAutomaticallyLoadedPackage("float");
else {
Floating const & fl = parent_context.textclass.floats()
.getType(unstarred_name);
if (!fl.floattype().empty() && fl.usesFloatPkg())
preamble.registerAutomaticallyLoadedPackage("float");
}
os << "wide " << convert<string>(is_starred)
<< "\nsideways false"
<< "\nstatus open\n\n";
@ -1386,12 +1395,16 @@ void parse_environment(Parser & p, ostream & os, bool outer,
parent_context.add_extra_stuff("\\align center\n");
else if (name == "singlespace")
parent_context.add_extra_stuff("\\paragraph_spacing single\n");
else if (name == "onehalfspace")
else if (name == "onehalfspace") {
parent_context.add_extra_stuff("\\paragraph_spacing onehalf\n");
else if (name == "doublespace")
preamble.registerAutomaticallyLoadedPackage("setspace");
} else if (name == "doublespace") {
parent_context.add_extra_stuff("\\paragraph_spacing double\n");
else if (name == "spacing")
preamble.registerAutomaticallyLoadedPackage("setspace");
} else if (name == "spacing") {
parent_context.add_extra_stuff("\\paragraph_spacing other " + p.verbatim_item() + "\n");
preamble.registerAutomaticallyLoadedPackage("setspace");
}
parse_text(p, os, FLAG_END, outer, parent_context);
// Just in case the environment is empty
parent_context.extra_stuff.erase();
@ -1503,6 +1516,9 @@ void parse_environment(Parser & p, ostream & os, bool outer,
p.skip_spaces();
if (!title_layout_found)
title_layout_found = newlayout->intitle;
set<string> const & req = newlayout->requires();
for (set<string>::const_iterator it = req.begin(); it != req.end(); it++)
preamble.registerAutomaticallyLoadedPackage(*it);
}
// The single '=' is meant here.
@ -2392,6 +2408,10 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
p.skip_spaces();
if (!title_layout_found)
title_layout_found = newlayout->intitle;
set<string> const & req = newlayout->requires();
for (set<string>::const_iterator it = req.begin();
it != req.end(); it++)
preamble.registerAutomaticallyLoadedPackage(*it);
} else
handle_ert(os, "\\date{" + date + '}',
context);
@ -2409,6 +2429,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
p.skip_spaces();
if (!title_layout_found)
title_layout_found = newlayout->intitle;
set<string> const & req = newlayout->requires();
for (set<string>::const_iterator it = req.begin(); it != req.end(); it++)
preamble.registerAutomaticallyLoadedPackage(*it);
}
// Section headings and the like
@ -2419,6 +2442,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
p.skip_spaces();
if (!title_layout_found)
title_layout_found = newlayout->intitle;
set<string> const & req = newlayout->requires();
for (set<string>::const_iterator it = req.begin(); it != req.end(); it++)
preamble.registerAutomaticallyLoadedPackage(*it);
}
else if (t.cs() == "caption") {
@ -3125,6 +3151,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
<< convert_command_inset_arg(p.verbatim_item())
<< "\"\n";
end_inset(os);
preamble.registerAutomaticallyLoadedPackage("nomencl");
}
else if (t.cs() == "label") {
@ -3142,6 +3169,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
os << "type \"idx\"\n";
end_inset(os);
skip_spaces_braces(p);
preamble.registerAutomaticallyLoadedPackage("makeidx");
if (preamble.use_indices() == "true")
preamble.registerAutomaticallyLoadedPackage("splitidx");
}
else if (t.cs() == "printnomenclature") {
@ -3168,6 +3198,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
os << "width \"" << width << '\"';
end_inset(os);
skip_spaces_braces(p);
preamble.registerAutomaticallyLoadedPackage("nomencl");
}
else if ((t.cs() == "textsuperscript" || t.cs() == "textsubscript")) {