static int open_encoding_ = none;
static int cjk_inherited_ = 0;
+Language const * prev_env_language_ = 0;
ParagraphList::const_iterator
bparams.documentClass().plainLayout() : pit->layout();
ParagraphList const & paragraphs = text.paragraphs();
+ ParagraphList::const_iterator const priorpit =
+ pit == paragraphs.begin() ? pit : boost::prior(pit);
+
+ bool const use_prev_env_language = prev_env_language_ != 0
+ && priorpit->layout().isEnvironment()
+ && (priorpit->getDepth() > pit->getDepth()
+ || (priorpit->getDepth() == pit->getDepth()
+ && priorpit->layout() != pit->layout()));
+ Encoding const * const prev_encoding = runparams.encoding;
Language const * const par_language = pit->getParLanguage(bparams);
Language const * const doc_language = bparams.language;
Language const * const prev_par_language =
(pit != paragraphs.begin())
- ? boost::prior(pit)->getParLanguage(bparams)
+ ? (use_prev_env_language ? prev_env_language_
+ : priorpit->getParLanguage(bparams))
: doc_language;
if (par_language->babel() != prev_par_language->babel()) {
<< pit->params().labelWidthString()
<< "}\n";
} else if (style.labeltype == LABEL_BIBLIO) {
- // ale970405
- os << '{' << bibitemWidest(buf) << "}\n";
+ if (pit->params().labelWidthString().empty())
+ os << '{' << bibitemWidest(buf) << "}\n";
+ else
+ os << '{'
+ << pit->params().labelWidthString()
+ << "}\n";
} else
os << from_ascii(style.latexparam()) << '\n';
texrow.newline();
if (style.isEnvironment()) {
os << "\\end{" << from_ascii(style.latexname()) << "}\n";
texrow.newline();
+ prev_env_language_ = par_language;
+ runparams.encoding = prev_encoding;
}
if (leftindent_open) {
os << "\\end{LyXParagraphLeftIndent}\n";
texrow.newline();
+ prev_env_language_ = par_language;
+ runparams.encoding = prev_encoding;
}
if (par != paragraphs.end())
Language const * const outer_language =
(runparams.local_font != 0) ?
runparams.local_font->language() : doc_language;
- // The previous language that was in effect is either the language of
- // the previous paragraph, if there is one, or else the outer language
- // if there is no previous paragraph
+
+ // The previous language that was in effect is the language of the
+ // previous paragraph, unless the previous paragraph is inside an
+ // environment with nesting depth greater than (or equal to, but with
+ // a different layout) the current one. If there is no previous
+ // paragraph, the previous language is the outer language.
+ bool const use_prev_env_language = prev_env_language_ != 0
+ && priorpit->layout().isEnvironment()
+ && (priorpit->getDepth() > pit->getDepth()
+ || (priorpit->getDepth() == pit->getDepth()
+ && priorpit->layout() != pit->layout()));
Language const * const prev_language =
- (pit != paragraphs.begin()) ?
- priorpit->getParLanguage(bparams) : outer_language;
+ (pit != paragraphs.begin())
+ ? (use_prev_env_language ? prev_env_language_
+ : priorpit->getParLanguage(bparams))
+ : outer_language;
if (par_language->babel() != prev_language->babel()
// check if we already put language command in TeXEnvironment()
// With CJK, only add switch if we have CJK content at the beginning
// of the paragraph
if (encoding->package() != Encoding::CJK || i == 0) {
- OutputParams tmp_rp = runparams;
- runparams.moving_arg = false;
pair<bool, int> enc_switch = switchEncoding(os, bparams, runparams,
*encoding);
- runparams = tmp_rp;
// the following is necessary after a CJK environment in a multilingual
// context (nesting issue).
if (par_language->encoding()->package() == Encoding::CJK &&
}
}
+ Encoding const * const prev_encoding = runparams.encoding;
+
bool const useSetSpace = bparams.documentClass().provides("SetSpace");
if (pit->allowParagraphCustomization()) {
if (pit->params().startOfAppendix()) {
os << "\\" << from_ascii(font.latexSize()) << " \\par}";
} else if (need_par) {
os << "\\par}";
- } else if (is_command)
+ } else if (is_command) {
os << '}';
+ runparams.encoding = prev_encoding;
+ }
bool pending_newline = false;
switch (style.latextype) {
break;
}
- // fall through possible
+ // fall through possible
default:
// we don't need it for the last paragraph!!!
if (nextpit != paragraphs.end())
// If this is the last paragraph, and a local_font was set upon entering
// the inset, and we're using "auto" or "default" encoding, the encoding
// should be set back to that local_font's encoding.
+ // However, do not change the encoding when XeTeX is used.
if (nextpit == paragraphs.end() && runparams_in.local_font != 0
&& runparams_in.encoding != runparams_in.local_font->language()->encoding()
- && (bparams.inputenc == "auto" || bparams.inputenc == "default")) {
+ && (bparams.inputenc == "auto" || bparams.inputenc == "default")
+ && (!bparams.useXetex)) {
runparams_in.encoding = runparams_in.local_font->language()->encoding();
os << setEncoding(runparams_in.encoding->iconvName());
}
// FIXME This check should not be needed. We should
// perhaps issue an error if it is.
Layout const & layout = par->forcePlainLayout() ?
- tclass.plainLayout() :
- par->layout();
+ tclass.plainLayout() : par->layout();
if (layout.intitle) {
if (already_title) {