mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-14 01:22:33 +00:00
Better fix for bug #5096: Language switch fails in environments.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@30804 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
f5de1ce0df
commit
700dd75d5e
@ -52,6 +52,7 @@ enum OpenEncoding {
|
|||||||
|
|
||||||
static int open_encoding_ = none;
|
static int open_encoding_ = none;
|
||||||
static int cjk_inherited_ = 0;
|
static int cjk_inherited_ = 0;
|
||||||
|
Language const * prev_env_language_ = 0;
|
||||||
|
|
||||||
|
|
||||||
ParagraphList::const_iterator
|
ParagraphList::const_iterator
|
||||||
@ -119,12 +120,20 @@ TeXEnvironment(Buffer const & buf,
|
|||||||
bparams.documentClass().plainLayout() : pit->layout();
|
bparams.documentClass().plainLayout() : pit->layout();
|
||||||
|
|
||||||
ParagraphList const & paragraphs = text.paragraphs();
|
ParagraphList const & paragraphs = text.paragraphs();
|
||||||
|
ParagraphList::const_iterator const priorpit =
|
||||||
|
pit == paragraphs.begin() ? pit : boost::prior(pit);
|
||||||
|
|
||||||
|
bool const use_prev_env_language = priorpit->layout().isEnvironment()
|
||||||
|
&& (priorpit->getDepth() > pit->getDepth()
|
||||||
|
|| (priorpit->getDepth() == pit->getDepth()
|
||||||
|
&& priorpit->layout() != pit->layout()));
|
||||||
|
|
||||||
Language const * const par_language = pit->getParLanguage(bparams);
|
Language const * const par_language = pit->getParLanguage(bparams);
|
||||||
Language const * const doc_language = bparams.language;
|
Language const * const doc_language = bparams.language;
|
||||||
Language const * const prev_par_language =
|
Language const * const prev_par_language =
|
||||||
(pit != paragraphs.begin())
|
(pit != paragraphs.begin())
|
||||||
? boost::prior(pit)->getParLanguage(bparams)
|
? (use_prev_env_language ? prev_env_language_
|
||||||
|
: priorpit->getParLanguage(bparams))
|
||||||
: doc_language;
|
: doc_language;
|
||||||
if (par_language->babel() != prev_par_language->babel()) {
|
if (par_language->babel() != prev_par_language->babel()) {
|
||||||
|
|
||||||
@ -244,6 +253,7 @@ TeXEnvironment(Buffer const & buf,
|
|||||||
if (style.isEnvironment()) {
|
if (style.isEnvironment()) {
|
||||||
os << "\\end{" << from_ascii(style.latexname()) << "}\n";
|
os << "\\end{" << from_ascii(style.latexname()) << "}\n";
|
||||||
texrow.newline();
|
texrow.newline();
|
||||||
|
prev_env_language_ = par_language;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leftindent_open) {
|
if (leftindent_open) {
|
||||||
@ -342,36 +352,23 @@ TeXOnePar(Buffer const & buf,
|
|||||||
Language const * const outer_language =
|
Language const * const outer_language =
|
||||||
(runparams.local_font != 0) ?
|
(runparams.local_font != 0) ?
|
||||||
runparams.local_font->language() : doc_language;
|
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
|
|
||||||
Language const * prev_language =
|
|
||||||
(pit != paragraphs.begin()) ?
|
|
||||||
priorpit->getParLanguage(bparams) : outer_language;
|
|
||||||
|
|
||||||
// When the language is changed at the very start of a LyX environment,
|
// The previous language that was in effect is the language of the
|
||||||
// the language switch in the LaTeX code occurs just before switching to
|
// previous paragraph, unless the previous paragraph is inside an
|
||||||
// the corresponding LaTeX environment. So, when the environment ends,
|
// environment with nesting depth greater than (or equal to, but with
|
||||||
// we have to restore the language that was in effect.
|
// a different layout) the current one. If there is no previous
|
||||||
bool env_lang_switch = false;
|
// paragraph, the previous language is the outer language.
|
||||||
if (!priorpit->hasSameLayout(*pit)) {
|
bool const use_prev_env_language = priorpit->layout().isEnvironment()
|
||||||
ParagraphList::const_iterator outpit = priorpit;
|
&& (priorpit->getDepth() > pit->getDepth()
|
||||||
while (outpit != paragraphs.begin()
|
|| (priorpit->getDepth() == pit->getDepth()
|
||||||
&& (outpit->hasSameLayout(*priorpit)
|
&& priorpit->layout() != pit->layout()));
|
||||||
|| outpit->getDepth() > priorpit->getDepth()))
|
Language const * const prev_language =
|
||||||
outpit = boost::prior(outpit);
|
(pit != paragraphs.begin())
|
||||||
ParagraphList::const_iterator const inpit = boost::next(outpit);
|
? (use_prev_env_language ? prev_env_language_
|
||||||
Language const * const outenv_language
|
: priorpit->getParLanguage(bparams))
|
||||||
= outpit->getParLanguage(bparams);
|
: outer_language;
|
||||||
Language const * const inenv_language
|
|
||||||
= inpit->getParLanguage(bparams);
|
|
||||||
if (outenv_language->babel() != inenv_language->babel())
|
|
||||||
env_lang_switch = true;
|
|
||||||
if (outenv_language->babel() != par_language->babel())
|
|
||||||
prev_language = outenv_language;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((par_language->babel() != prev_language->babel() || env_lang_switch)
|
if (par_language->babel() != prev_language->babel()
|
||||||
// check if we already put language command in TeXEnvironment()
|
// check if we already put language command in TeXEnvironment()
|
||||||
&& !(style.isEnvironment()
|
&& !(style.isEnvironment()
|
||||||
&& (pit == paragraphs.begin() ||
|
&& (pit == paragraphs.begin() ||
|
||||||
|
Loading…
Reference in New Issue
Block a user