LaTeXFeatures::LaTeXFeatures(Buffer const & b, BufferParams const & p,
OutputParams const & r)
- : buffer_(&b), params_(p), runparams_(r)
+ : buffer_(&b), params_(p), runparams_(r), in_float_(false)
{}
BufferParams const & bufferParams() const;
/// the return value is dependent upon both LyXRC and LaTeXFeatures.
bool useBabel() const;
+ /// are we in a float?
+ bool inFloat() const { return in_float_; }
+ /// are we in a float?
+ void inFloat(bool const b) { in_float_ = b; }
/// Runparams that will be used for exporting this file.
OutputParams const & runparams() const { return runparams_; }
* in validate().
*/
OutputParams const & runparams_;
+ ///
+ bool in_float_;
};
local_font(0), encoding(enc), free_spacing(false), use_babel(false),
use_japanese(false), linelen(0), depth(0),
exportdata(new ExportData),
- inComment(false), inTableCell(NO),
+ inComment(false), inTableCell(NO), inFloat(NONFLOAT),
inDeletedInset(0), changeOfDeletedInset(Change::UNCHANGED),
par_begin(0), par_end(0), isLastPar(false),
dryrun(false), verbatim(false)
ALIGNED
};
+ enum Float {
+ NONFLOAT,
+ MAINFLOAT,
+ SUBFLOAT
+ };
+
OutputParams(Encoding const *);
~OutputParams();
*/
TableCell inTableCell;
+ /** Whether we are inside a float or subfloat.
+ * Needed for subfloat detection on the command line.
+ */
+ Float inFloat;
+
/** Whether we are inside an inset that is logically deleted.
* A value > 0 indicates a deleted inset.
*/
int InsetCaption::latex(odocstream & os,
OutputParams const & runparams_in) const
{
- if (in_subfloat_)
+ if (runparams_in.inFloat == OutputParams::SUBFLOAT)
// caption is output as an optional argument
return 0;
// This is a bit too simplistic to take advantage of
string const & type = cnts.current_float();
// Memorize type for addToToc().
type_ = type;
- in_subfloat_ = cnts.isSubfloat();
if (type.empty())
full_label_ = master.B_("Senseless!!! ");
else {
else
name = master.B_(tclass.floats().getType(type).name());
docstring counter = from_utf8(type);
- if (in_subfloat_) {
+ if (cnts.isSubfloat()) {
counter = "sub-" + from_utf8(type);
name = bformat(_("Sub-%1$s"),
master.B_(tclass.floats().getType(type).name()));
///
std::string type_;
///
- bool in_subfloat_;
- ///
docstring custom_label_;
};
void InsetFloat::updateLabels(ParIterator const & it)
{
- Counters & cnts = buffer().masterBuffer()->params().documentClass().counters();
+ Counters & cnts =
+ buffer().masterBuffer()->params().documentClass().counters();
string const saveflt = cnts.current_float();
bool const savesubflt = cnts.isSubfloat();
if (params_.sideways)
features.require("rotfloat");
- if (params_.subfloat)
+ if (features.inFloat())
features.require("subfig");
- features.useFloat(params_.type, params_.subfloat);
+ features.useFloat(params_.type, features.inFloat());
+ features.inFloat(true);
InsetCollapsable::validate(features);
+ features.inFloat(false);
}
}
-int InsetFloat::latex(odocstream & os, OutputParams const & runparams) const
+int InsetFloat::latex(odocstream & os, OutputParams const & runparams_in) const
{
- if (params_.subfloat) {
- if (runparams.moving_arg)
+ if (runparams_in.inFloat != OutputParams::NONFLOAT) {
+ if (runparams_in.moving_arg)
os << "\\protect";
os << "\\subfloat";
- OutputParams rp = runparams;
+ OutputParams rp = runparams_in;
docstring const caption = getCaption(rp);
if (!caption.empty()) {
os << caption;
}
os << '{';
- int const i = InsetText::latex(os, runparams);
+ rp.inFloat = OutputParams::SUBFLOAT;
+ int const i = InsetText::latex(os, rp);
os << "}";
return i + 1;
}
+ OutputParams runparams(runparams_in);
+ runparams.inFloat = OutputParams::MAINFLOAT;
FloatList const & floats = buffer().params().documentClass().floats();
string tmptype = params_.type;
void InsetWrap::validate(LaTeXFeatures & features) const
{
features.require("wrapfig");
+ features.inFloat(true);
InsetCollapsable::validate(features);
+ features.inFloat(false);
}
}
-int InsetWrap::latex(odocstream & os, OutputParams const & runparams) const
+int InsetWrap::latex(odocstream & os, OutputParams const & runparams_in) const
{
+ OutputParams runparams(runparams_in);
+ runparams.inFloat = OutputParams::MAINFLOAT;
os << "\\begin{wrap" << from_ascii(params_.type) << '}';
// no optional argument when lines are zero
if (params_.lines != 0)