X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.cpp;h=1061f3d28f07f659b2b15181282d13eede4467ec;hb=293b8dbe67dc025d03d0523d0079f71f5ab62ce3;hp=ac22116976d7cf8cbb08b0b7ed91802637dc1a78;hpb=095e533be957d3a47ed361ec6fa68945c7a32f91;p=features.git diff --git a/src/output_latex.cpp b/src/output_latex.cpp index ac22116976..1061f3d28f 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -409,7 +409,7 @@ void TeXEnvironment(Buffer const & buf, Text const & text, { ParagraphList const & paragraphs = text.paragraphs(); ParagraphList::const_iterator ipar = paragraphs.iterator_at(pit); - LYXERR(Debug::LATEX, "TeXEnvironment for paragraph " << pit); + LYXERR(Debug::OUTFILE, "TeXEnvironment for paragraph " << pit); Layout const & current_layout = ipar->layout(); depth_type const current_depth = ipar->params().depth(); @@ -462,10 +462,10 @@ void TeXEnvironment(Buffer const & buf, Text const & text, // Do not output empty environments if the whole paragraph has // been deleted with ct and changes are not output. bool output_changes; - if (runparams.for_searchAdv == OutputParams::NoSearch) + if (!runparams.find_effective()) output_changes = buf.params().output_changes; else - output_changes = (runparams.for_searchAdv == OutputParams::SearchWithDeleted); + output_changes = runparams.find_with_deleted(); if (size_t(pit + 1) < paragraphs.size()) { ParagraphList::const_iterator nextpar = paragraphs.iterator_at(pit + 1); Paragraph const & cpar = paragraphs.at(pit); @@ -490,7 +490,7 @@ void TeXEnvironment(Buffer const & buf, Text const & text, } if (pit != runparams.par_end) - LYXERR(Debug::LATEX, "TeXEnvironment for paragraph " << par_begin << " done."); + LYXERR(Debug::OUTFILE, "TeXEnvironment for paragraph " << par_begin << " done."); } @@ -578,7 +578,7 @@ void getArgInsets(otexstream & os, OutputParams const & runparams, Layout::LaTeX } } } - if ((runparams.for_searchAdv != OutputParams::NoSearch) && argnr > 1) { + if (runparams.find_effective() && argnr > 1) { // Mark end of arguments for findadv() only os << "\\endarguments{}"; } @@ -607,6 +607,14 @@ void popLanguageName() } +bool languageStackEmpty() +{ + OutputState * state = getOutputState(); + + return state->lang_switch_depth_.empty(); +} + + string const & openLanguageName() { OutputState * state = getOutputState(); @@ -738,7 +746,7 @@ void parStartCommand(Paragraph const & par, otexstream & os, break; case LATEX_ITEM_ENVIRONMENT: case LATEX_LIST_ENVIRONMENT: - if (runparams.for_searchAdv != OutputParams::NoSearch) { + if (runparams.find_effective()) { os << "\\" + style.itemcommand() << "{" << style.latexname() << "}"; } else { @@ -750,7 +758,7 @@ void parStartCommand(Paragraph const & par, otexstream & os, } break; case LATEX_ENVIRONMENT: - if (runparams.for_searchAdv != OutputParams::NoSearch) { + if (runparams.find_effective()) { os << "\\latexenvironment{" << style.latexname() << "}{"; } break; @@ -788,12 +796,12 @@ void TeXOnePar(Buffer const & buf, // Do not output empty commands if the whole paragraph has // been deleted with ct and changes are not output. - if ((runparams_in.for_searchAdv != OutputParams::SearchWithDeleted) && style.latextype != LATEX_ENVIRONMENT + if (!runparams_in.find_with_deleted() && style.latextype != LATEX_ENVIRONMENT && !par.empty() && par.isDeleted(0, par.size()) && !bparams.output_changes) return; - LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pit << " ptr " << &par << " '" - << everypar << "'"); + LYXERR(Debug::OUTFILE, "TeXOnePar for paragraph " << pit << " ptr " << &par << " '" + << everypar << "'"); OutputParams runparams = runparams_in; runparams.isLastPar = (pit == pit_type(paragraphs.size() - 1)); @@ -925,10 +933,12 @@ void TeXOnePar(Buffer const & buf, break; } } + bool const have_prior_nptpar = + prior_nontitle_par && !prior_nontitle_par->isPassThru(); Language const * const prev_language = - runparams_in.for_searchAdv != OutputParams::NoSearch + runparams_in.find_effective() ? languages.getLanguage("ignore") - : (prior_nontitle_par && !prior_nontitle_par->isPassThru()) + : (have_prior_nptpar) ? (use_prev_env_language ? state->prev_env_language_ : prior_nontitle_par->getParLanguage(bparams)) @@ -974,9 +984,11 @@ void TeXOnePar(Buffer const & buf, use_polyglossia && runparams.local_font != nullptr && outer_language->rightToLeft() - && !par_language->rightToLeft(); + && !par_language->rightToLeft() + && !(have_prior_nptpar + && (prev_language->rightToLeft() != par_language->rightToLeft())); bool const localswitch = - (runparams_in.for_searchAdv != OutputParams::NoSearch + (runparams_in.find_effective() || text.inset().forceLocalFontSwitch() || (using_begin_end && text.inset().forcePlainLayout()) || in_polyglossia_rtl_env) @@ -991,7 +1003,7 @@ void TeXOnePar(Buffer const & buf, bool const localswitch_needed = localswitch && par_lang != outer_lang; // localswitches need to be closed and reopened at each par - if ((runparams_in.for_searchAdv != OutputParams::NoSearch) || ((par_lang != prev_lang || localswitch_needed) + if (runparams_in.find_effective() || ((par_lang != prev_lang || localswitch_needed) // check if we already put language command in TeXEnvironment() && !(style.isEnvironment() && (pit == 0 || (priorpar->layout() != par.layout() @@ -1059,7 +1071,7 @@ void TeXOnePar(Buffer const & buf, // With CJK, the CJK tag has to be closed first (see below) if ((runparams.encoding->package() != Encoding::CJK || bparams.useNonTeXFonts - || (runparams.for_searchAdv != OutputParams::NoSearch)) + || runparams.find_effective()) && (par_lang != openLanguageName(state) || localswitch || intitle_command) && !par_lang.empty()) { string bc = use_polyglossia ? @@ -1300,7 +1312,7 @@ void TeXOnePar(Buffer const & buf, // when the paragraph uses CJK, the language has to be closed earlier if ((font.language()->encoding()->package() != Encoding::CJK) || bparams.useNonTeXFonts - || (runparams_in.for_searchAdv != OutputParams::NoSearch)) { + || runparams_in.find_effective()) { if (lang_end_command.empty()) { // If this is a child, we should restore the // master language after the last paragraph. @@ -1543,8 +1555,8 @@ void TeXOnePar(Buffer const & buf, if (intitle_command) state->nest_level_ -= 1; - LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pit << " done; ptr " - << &par << " next " << nextpar); + LYXERR(Debug::OUTFILE, "TeXOnePar for paragraph " << pit << " done; ptr " + << &par << " next " << nextpar); return; } @@ -1696,10 +1708,10 @@ void latexParagraphs(Buffer const & buf, // Do not output empty environments if the whole paragraph has // been deleted with ct and changes are not output. bool output_changes; - if (runparams.for_searchAdv == OutputParams::NoSearch) + if (!runparams.find_effective()) output_changes = bparams.output_changes; else - output_changes = (runparams.for_searchAdv == OutputParams::SearchWithDeleted); + output_changes = runparams.find_with_deleted(); bool const lastpar = size_t(pit + 1) >= paragraphs.size(); if (!lastpar) { ParagraphList::const_iterator nextpar = paragraphs.iterator_at(pit + 1); @@ -1768,7 +1780,7 @@ void latexParagraphs(Buffer const & buf, << '\n'; // If we have language_auto_begin, the stack will // already be empty, nothing to pop() - if (using_begin_end && !lyxrc.language_auto_begin) + if (using_begin_end && langOpenedAtThisLevel(state)) popLanguageName(); } @@ -1842,7 +1854,7 @@ pair switchEncoding(odocstream & os, BufferParams const & bparams, || oldEnc.package() == Encoding::japanese || oldEnc.package() == Encoding::none || newEnc.package() == Encoding::none - || (runparams.for_searchAdv != OutputParams::NoSearch)) + || runparams.find_effective()) return make_pair(false, 0); // FIXME We ignore encoding switches from/to encodings that do // neither support the inputenc package nor the CJK package here. @@ -1851,7 +1863,7 @@ pair switchEncoding(odocstream & os, BufferParams const & bparams, // but it is the best we can do. // change encoding - LYXERR(Debug::LATEX, "Changing LaTeX encoding from " + LYXERR(Debug::OUTFILE, "Changing LaTeX encoding from " << oldEnc.name() << " to " << newEnc.name()); os << setEncoding(newEnc.iconvName()); if (bparams.inputenc == "auto-legacy-plain")