X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=1b6a766fb54f6a7d289bc7eeb443260ff0f25c7f;hb=d9082639080b9de993742bd352f92e5183058cf5;hp=d69fa55bb539459b0760adc24d19724a6da75ec3;hpb=da8b5de973f8c19a867154dd29a8e25aa2f2e2ac;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index d69fa55bb5..1b6a766fb5 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -5,7 +5,7 @@ * * \author Asger Alstrup * \author Lars Gullik Bjønnes - * \author Richard Heck (XHTML output) + * \author Richard Kimberly Heck (XHTML output) * \author Jean-Marc Lasgouttes * \author Angus Leeming * \author John Levon @@ -20,12 +20,11 @@ #include "Paragraph.h" -#include "LayoutFile.h" #include "Buffer.h" #include "BufferParams.h" +#include "BufferEncodings.h" #include "Changes.h" #include "Counters.h" -#include "BufferEncodings.h" #include "InsetList.h" #include "Language.h" #include "LaTeXFeatures.h" @@ -39,11 +38,10 @@ #include "output_docbook.h" #include "ParagraphParameters.h" #include "SpellChecker.h" -#include "xml.h" #include "texstream.h" -#include "TextClass.h" #include "TexRow.h" #include "Text.h" +#include "TextClass.h" #include "WordLangTuple.h" #include "WordList.h" @@ -58,15 +56,11 @@ #include "support/debug.h" #include "support/docstring_list.h" -#include "support/ExceptionMessage.h" #include "support/gettext.h" #include "support/lassert.h" -#include "support/Length.h" #include "support/lstrings.h" #include "support/textutils.h" -#include "output_docbook.h" -#include #include #include #include @@ -365,19 +359,19 @@ public: char_type const c, otexstream & os, pos_type i, - unsigned int & column); + unsigned int & column) const; /// bool latexSpecialTU( char_type const c, otexstream & os, pos_type i, - unsigned int & column); + unsigned int & column) const; /// bool latexSpecialT3( char_type const c, otexstream & os, pos_type i, - unsigned int & column); + unsigned int & column) const; /// void validate(LaTeXFeatures & features) const; @@ -871,6 +865,7 @@ int Paragraph::eraseChars(pos_type start, pos_type end, bool trackChanges) return end - i; } + // Handle combining characters int Paragraph::Private::latexSurrogatePair(BufferParams const & bparams, otexstream & os, char_type c, char_type next, @@ -1134,10 +1129,12 @@ void Paragraph::Private::latexSpecialChar(otexstream & os, { char_type const c = owner_->getUChar(bparams, runparams, i); - if (style.pass_thru || runparams.pass_thru + if (style.pass_thru || runparams.pass_thru || runparams.for_search || contains(style.pass_thru_chars, c) || contains(runparams.pass_thru_chars, c)) { - if (c != '\0') { + if ((c == '\\') && runparams.for_search) + os << "\\\\"; + else if (c != '\0') { Encoding const * const enc = runparams.encoding; if (enc && !enc->encodable(c)) throw EncodingException(c); @@ -1241,7 +1238,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os, && !runparams.inIPA // TODO #10961: && not in inset Flex Code // TODO #10961: && not in layout LyXCode - && (!bparams.useNonTeXFonts || runparams.flavor != OutputParams::XETEX)) { + && (!bparams.useNonTeXFonts || runparams.flavor != Flavor::XeTeX)) { if (c == 0x2013) { // en-dash os << "--"; @@ -1322,7 +1319,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os, bool Paragraph::Private::latexSpecialT1(char_type const c, otexstream & os, - pos_type i, unsigned int & column) + pos_type i, unsigned int & column) const { switch (c) { case '>': @@ -1350,7 +1347,7 @@ bool Paragraph::Private::latexSpecialT1(char_type const c, otexstream & os, bool Paragraph::Private::latexSpecialTU(char_type const c, otexstream & os, - pos_type i, unsigned int & column) + pos_type i, unsigned int & column) const { // TU encoding is currently on par with T1. return latexSpecialT1(c, os, i, column); @@ -1358,7 +1355,7 @@ bool Paragraph::Private::latexSpecialTU(char_type const c, otexstream & os, bool Paragraph::Private::latexSpecialT3(char_type const c, otexstream & os, - pos_type /*i*/, unsigned int & column) + pos_type /*i*/, unsigned int & column) const { switch (c) { case '*': @@ -1395,7 +1392,7 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const features.addPreambleSnippet(os.release(), true); } - if (features.runparams().flavor == OutputParams::HTML + if (features.runparams().flavor == Flavor::Html && layout_->htmltitle()) { features.setHTMLTitle(owner_->asString(AS_STR_INSETS | AS_STR_SKIPDELETE)); } @@ -1490,7 +1487,7 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const } else if (!bp.use_dash_ligatures && (c == 0x2013 || c == 0x2014) && bp.useNonTeXFonts - && features.runparams().flavor == OutputParams::XETEX) + && features.runparams().flavor == Flavor::XeTeX) // XeTeX's dash behaviour is determined via a global setting features.require("xetexdashbreakstate"); BufferEncodings::validate(c, features); @@ -1566,19 +1563,19 @@ void flushString(ostream & os, docstring & s) void Paragraph::write(ostream & os, BufferParams const & bparams, - depth_type & dth) const + depth_type & depth) const { // The beginning or end of a deeper (i.e. nested) area? - if (dth != d->params_.depth()) { - if (d->params_.depth() > dth) { - while (d->params_.depth() > dth) { + if (depth != d->params_.depth()) { + if (d->params_.depth() > depth) { + while (d->params_.depth() > depth) { os << "\n\\begin_deeper"; - ++dth; + ++depth; } } else { - while (d->params_.depth() < dth) { + while (d->params_.depth() < depth) { os << "\n\\end_deeper"; - --dth; + --depth; } } } @@ -1691,11 +1688,11 @@ void Paragraph::validate(LaTeXFeatures & features) const } -void Paragraph::insert(pos_type start, docstring const & str, +void Paragraph::insert(pos_type pos, docstring const & str, Font const & font, Change const & change) { for (size_t i = 0, n = str.size(); i != n ; ++i) - insertChar(start + i, str[i], font, change); + insertChar(pos + i, str[i], font, change); } @@ -2515,7 +2512,7 @@ void Paragraph::latex(BufferParams const & bparams, if (c == META_INSET && i >= start_pos && (end_pos == -1 || i < end_pos)) { if (isDeleted(i)) - runparams.ctObject = getInset(i)->CtObject(runparams); + runparams.ctObject = getInset(i)->getCtObject(runparams); InsetMath const * im = getInset(i)->asInsetMath(); if (im && im->asHullInset() @@ -2596,7 +2593,8 @@ void Paragraph::latex(BufferParams const & bparams, c == META_INSET && getInset(i) && getInset(i)->allowMultiPar() - && getInset(i)->lyxCode() != ERT_CODE; + && getInset(i)->lyxCode() != ERT_CODE + && getInset(i)->producesOutput(); bool closeLanguage = false; bool lang_switched_at_inset = false; @@ -2629,7 +2627,6 @@ void Paragraph::latex(BufferParams const & bparams, os << "}"; alien_script.clear(); } - bool needPar = false; if (in_ct_deletion) { // We have to close and then reopen \lyxdeleted, // as strikeout needs to be on lowest level. @@ -2640,6 +2637,7 @@ void Paragraph::latex(BufferParams const & bparams, // Force language closing current_font.setLanguage(basefont.language()); Font const nextfont = (i == body_pos-1) ? basefont : current_font; + bool needPar = false; column += running_font.latexWriteEndChanges( os, bparams, runparams, basefont, nextfont, needPar); @@ -2707,8 +2705,8 @@ void Paragraph::latex(BufferParams const & bparams, if (in_ct_deletion) { // We have to close and then reopen \lyxdeleted, // as strikeout needs to be on lowest level. - bool needPar = false; OutputParams rp = runparams; + bool needPar = false; column += running_font.latexWriteEndChanges( os, bparams, rp, basefont, basefont, needPar); @@ -2840,14 +2838,14 @@ void Paragraph::latex(BufferParams const & bparams, if (incremented) --parInline; - if (runparams.ctObject == OutputParams::CT_DISPLAYOBJECT - || runparams.ctObject == OutputParams::CT_UDISPLAYOBJECT) { + if (runparams.ctObject == CtObject::DisplayObject + || runparams.ctObject == CtObject::UDisplayObject) { // Close \lyx*deleted and force its // reopening (if needed) os << '}'; column++; runningChange = Change(Change::UNCHANGED); - runparams.ctObject = OutputParams::CT_NORMAL; + runparams.ctObject = CtObject::Normal; } } } else if (i >= start_pos && (end_pos == -1 || i < end_pos)) { @@ -2907,6 +2905,31 @@ void Paragraph::latex(BufferParams const & bparams, alien_script.clear(); } + Font const font = empty() + ? getLayoutFont(bparams, real_outerfont) + : getFont(bparams, size() - 1, real_outerfont); + + InsetText const * textinset = inInset().asInsetText(); + + bool const maintext = textinset + ? textinset->text().isMainText() + : false; + + size_t const numpars = textinset + ? textinset->text().paragraphs().size() + : 0; + + bool needPar = false; + + if (style.resfont.size() != font.fontInfo().size() + && (!runparams.isLastPar || maintext + || (numpars > 1 && d->ownerCode() != CELL_CODE + && (inInset().getLayout().isDisplay() + || parInline))) + && !style.isCommand()) { + needPar = true; + } + // If we have an open font definition, we have to close it if (open_font) { // Make sure that \\par is done with the font of the last @@ -2918,31 +2941,6 @@ void Paragraph::latex(BufferParams const & bparams, // We must not change the font for the last paragraph // of non-multipar insets, tabular cells or commands, // since this produces unwanted whitespace. - - Font const font = empty() - ? getLayoutFont(bparams, real_outerfont) - : getFont(bparams, size() - 1, real_outerfont); - - InsetText const * textinset = inInset().asInsetText(); - - bool const maintext = textinset - ? textinset->text().isMainText() - : false; - - size_t const numpars = textinset - ? textinset->text().paragraphs().size() - : 0; - - bool needPar = false; - - if (style.resfont.size() != font.fontInfo().size() - && (!runparams.isLastPar || maintext - || (numpars > 1 && d->ownerCode() != CELL_CODE - && (inInset().getLayout().isDisplay() - || parInline))) - && !style.isCommand()) { - needPar = true; - } #ifdef FIXED_LANGUAGE_END_DETECTION if (next_) { running_font.latexWriteEndChanges(os, bparams, @@ -2960,11 +2958,11 @@ void Paragraph::latex(BufferParams const & bparams, running_font.latexWriteEndChanges(os, bparams, runparams, basefont, basefont, needPar); #endif - if (needPar) { - // The \par could not be inserted at the same nesting - // level of the font size change, so do it now. - os << "{\\" << font.latexSize() << "\\par}"; - } + } + if (needPar) { + // The \par could not be inserted at the same nesting + // level of the font size change, so do it now. + os << "{\\" << font.latexSize() << "\\par}"; } column += Changes::latexMarkChange(os, bparams, runningChange, @@ -3371,7 +3369,7 @@ std::vector Paragraph::simpleDocBookOnePar(Buffer const & buf, // If this is an InsetNewline, generate a new paragraph. Also reset the fonts, so that tags are closed in // this paragraph. - if (getInset(i) != nullptr && getInset(i)->lyxCode() == NEWLINE_CODE) { + if (getInset(i) && getInset(i)->lyxCode() == NEWLINE_CODE) { if (!ignore_fonts) xs->closeFontTags(); @@ -4135,12 +4133,12 @@ void Paragraph::setPlainLayout(DocumentClass const & tc) } -void Paragraph::setPlainOrDefaultLayout(DocumentClass const & tclass) +void Paragraph::setPlainOrDefaultLayout(DocumentClass const & tc) { if (usePlainLayout()) - setPlainLayout(tclass); + setPlainLayout(tc); else - setDefaultLayout(tclass); + setDefaultLayout(tc); }