OutputParams::OutputParams(Encoding const * enc)
: flavor(LATEX), math_flavor(NotApplicable), nice(false), is_child(false),
- moving_arg(false), intitle(false), inulemcmd(0), local_font(0),
- master_language(0), encoding(enc), free_spacing(false),
+ moving_arg(false), intitle(false), inbranch(false), inulemcmd(0),
+ local_font(0),master_language(0), encoding(enc), free_spacing(false),
use_babel(false), use_polyglossia(false), use_CJK(false),
use_indices(false), use_japanese(false), linelen(0), depth(0),
exportdata(new ExportData), postpone_fragile_stuff(false), inDisplayMath(false),
*/
bool intitle;
+ /** inbranch == true means that the environment being typeset
+ is inside an active branch inset.
+ */
+ bool inbranch;
+
/** inulemcmd > 0 means that the environment in which the
inset is typeset is part of a ulem or soul command (e.g., \uline,
\uuline, \uwave, \sout or \xout). Insets that output latex commands
void InsetBranch::latex(otexstream & os, OutputParams const & runparams) const
{
- if (producesOutput())
- InsetText::latex(os, runparams);
+ if (producesOutput()) {
+ OutputParams rp = runparams;
+ rp.inbranch = true;
+ InsetText::latex(os, rp);
+ }
}
if (localswitch_needed
|| (intitle_command && using_begin_end)
|| closing_rtl_ltr_environment
- || ((runparams.isLastPar || close_lang_switch)
+ || (((runparams.isLastPar && !runparams.inbranch) || close_lang_switch)
&& (par_lang != outer_lang || (using_begin_end
&& style.isEnvironment()
&& par_lang != nextpar_lang)))) {
state->open_encoding_ = none;
}
// Likewise for polyglossia or when using begin/end commands
+ // or after an active branch inset with a language switch
+ Language const * const outer_language = (runparams.local_font != 0)
+ ? runparams.local_font->language() : bparams.language;
+ string const & prev_lang = runparams.use_polyglossia
+ ? getPolyglossiaEnvName(outer_language)
+ : outer_language->babel();
string const & cur_lang = openLanguageName(state);
- if (maintext && !is_child && !cur_lang.empty()) {
+ if (((runparams.inbranch && langOpenedAtThisLevel(state) && prev_lang != cur_lang)
+ || (maintext && !is_child)) && !cur_lang.empty()) {
os << from_utf8(subst(lang_end_command,
"$$lang",
cur_lang))
<< '\n';
if (using_begin_end)
popLanguageName();
+ } else if (runparams.inbranch && !using_begin_end && prev_lang != cur_lang) {
+ os << subst(lang_begin_command, "$$lang", prev_lang) << '\n';
}
// reset inherited encoding