X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=150c28d6a9adafe53b8be2cdc7d224dbf3d297e9;hb=69036ced3765f40048d62be800c98af3ea2d1b4a;hp=3d3e2582a4d84abde8b6294db1a580b09c65e619;hpb=2b7c1216145c1cc498e3cdebe9080cecdb1c4094;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 3d3e2582a4..150c28d6a9 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -208,8 +208,9 @@ public: TextContainer text_; typedef set Words; + typedef map LangWordsMap; /// - map words_; + LangWordsMap words_; /// Layout const * layout_; }; @@ -1078,10 +1079,16 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const Font f; TexRow tr; odocstringstream ods; - owner_->latex(bp, f, ods, tr, features.runparams()); - docstring d = ods.str(); - if (!d.empty()) - features.addPreambleSnippet(to_utf8(d)); + // we have to provide all the optional arguments here, even though + // the last one is the only one we care about. + owner_->latex(bp, f, ods, tr, features.runparams(), 0, -1, true); + docstring const d = ods.str(); + if (!d.empty()) { + // this will have "{" at the beginning, but not at the end + string const content = to_utf8(d); + string const cmd = layout_->latexname(); + features.addPreambleSnippet("\\" + cmd + content + "}"); + } } if (features.runparams().flavor == OutputParams::HTML @@ -1848,6 +1855,7 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams, case LYX_ALIGN_BLOCK: case LYX_ALIGN_LAYOUT: case LYX_ALIGN_SPECIAL: + case LYX_ALIGN_DECIMAL: break; case LYX_ALIGN_LEFT: case LYX_ALIGN_RIGHT: @@ -1868,6 +1876,7 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams, case LYX_ALIGN_BLOCK: case LYX_ALIGN_LAYOUT: case LYX_ALIGN_SPECIAL: + case LYX_ALIGN_DECIMAL: break; case LYX_ALIGN_LEFT: { string output; @@ -1916,6 +1925,7 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams, case LYX_ALIGN_BLOCK: case LYX_ALIGN_LAYOUT: case LYX_ALIGN_SPECIAL: + case LYX_ALIGN_DECIMAL: break; case LYX_ALIGN_LEFT: case LYX_ALIGN_RIGHT: @@ -1936,6 +1946,7 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams, case LYX_ALIGN_BLOCK: case LYX_ALIGN_LAYOUT: case LYX_ALIGN_SPECIAL: + case LYX_ALIGN_DECIMAL: break; case LYX_ALIGN_LEFT: { string output; @@ -1969,26 +1980,24 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams, // This one spits out the text of the paragraph -bool Paragraph::latex(BufferParams const & bparams, +void Paragraph::latex(BufferParams const & bparams, Font const & outerfont, odocstream & os, TexRow & texrow, OutputParams const & runparams, - int start_pos, int end_pos) const + int start_pos, int end_pos, bool force) const { LYXERR(Debug::LATEX, "Paragraph::latex... " << this); - if (layout().inpreamble) - return true; - - bool return_value = false; - - bool const allowcust = allowParagraphCustomization(); - // FIXME This check should not be needed. Perhaps issue an // error if it triggers. Layout const & style = inInset().forcePlainLayout() ? bparams.documentClass().plainLayout() : *d->layout_; + if (!force && style.inpreamble) + return; + + bool const allowcust = allowParagraphCustomization(); + // Current base font for all inherited font changes, without any // change caused by an individual character, except for the language: // It is set to the language of the first character. @@ -2223,9 +2232,8 @@ bool Paragraph::latex(BufferParams const & bparams, if (open_font) { #ifdef FIXED_LANGUAGE_END_DETECTION if (next_) { - running_font - .latexWriteEndChanges(os, bparams, runparams, - basefont, + running_font.latexWriteEndChanges(os, bparams, + runparams, basefont, next_->getFont(bparams, 0, outerfont)); } else { running_font.latexWriteEndChanges(os, bparams, @@ -2246,7 +2254,6 @@ bool Paragraph::latex(BufferParams const & bparams, // Needed if there is an optional argument but no contents. if (body_pos > 0 && body_pos == size()) { os << "}]~"; - return_value = false; } if (allowcust && d->endTeXParParams(bparams, os, texrow, runparams) @@ -2257,7 +2264,6 @@ bool Paragraph::latex(BufferParams const & bparams, } LYXERR(Debug::LATEX, "Paragraph::latex... done " << this); - return return_value; } @@ -3068,11 +3074,13 @@ bool Paragraph::isSeparator(pos_type pos) const void Paragraph::deregisterWords() { - map::const_iterator itl; - Private::Words::const_iterator it; - for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) { + Private::LangWordsMap::const_iterator itl = d->words_.begin(); + Private::LangWordsMap::const_iterator ite = d->words_.end(); + for (; itl != ite; ++itl) { WordList * wl = theWordList(itl->first); - for (it = (itl->second).begin(); it != (itl->second).end(); ++it) + Private::Words::const_iterator it = (itl->second).begin(); + Private::Words::const_iterator et = (itl->second).end(); + for (; it != et; ++it) wl->remove(*it); } d->words_.clear(); @@ -3118,13 +3126,16 @@ void Paragraph::locateWord(pos_type & from, pos_type & to, void Paragraph::collectWords() { + // This is the value that needs to be exposed in the preferences + // to resolve bug #6760. + static int minlength = 6; pos_type n = size(); for (pos_type pos = 0; pos < n; ++pos) { if (isWordSeparator(pos)) continue; pos_type from = pos; locateWord(from, pos, WHOLE_WORD); - if (pos - from >= 6) { + if (pos - from >= minlength) { docstring word = asString(from, pos, AS_STR_NONE); FontList::const_iterator cit = d->fontlist_.fontIterator(pos); if (cit == d->fontlist_.end()) @@ -3138,11 +3149,13 @@ void Paragraph::collectWords() void Paragraph::registerWords() { - map::const_iterator itl; - Private::Words::const_iterator it; - for (itl = d->words_.begin(); itl != d->words_.end(); ++itl) { + Private::LangWordsMap::const_iterator itl = d->words_.begin(); + Private::LangWordsMap::const_iterator ite = d->words_.end(); + for (; itl != ite; ++itl) { WordList * wl = theWordList(itl->first); - for (it = (itl->second).begin(); it != (itl->second).end(); ++it) + Private::Words::const_iterator it = (itl->second).begin(); + Private::Words::const_iterator et = (itl->second).end(); + for (; it != et; ++it) wl->insert(*it); } }