X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_pimpl.C;h=42ec28da89bfc29a2794968895aa9ea4b034bfda;hb=5091380d6bad1686800e384ed1bbb03836a15aab;hp=0126b79e2ea3cb67a4e35dea46cce48bb7c43dc2;hpb=3d5734b98f79ce5dc075ad53d9237a97b22b6b21;p=lyx.git diff --git a/src/paragraph_pimpl.C b/src/paragraph_pimpl.C index 0126b79e2e..42ec28da89 100644 --- a/src/paragraph_pimpl.C +++ b/src/paragraph_pimpl.C @@ -22,7 +22,6 @@ #include "encoding.h" #include "lyxrc.h" #include "debug.h" -#include "lyxtextclasslist.h" #include "support/LAssert.h" @@ -32,9 +31,6 @@ using std::ostream; using std::upper_bound; using std::lower_bound; -extern int tex_code_break_column; - - // Initialize static member. ShareContainer Paragraph::Pimpl::FontTable::container; // Initialization of the counter for the paragraph id's, @@ -47,7 +43,7 @@ struct special_phrase { string macro; bool builtin; }; - + special_phrase special_phrases[] = { { "LyX", "\\LyX{}", false }, { "TeX", "\\TeX{}", true }, @@ -55,7 +51,7 @@ special_phrase special_phrases[] = { { "LaTeX", "\\LaTeX{}", true }, }; -size_t phrases_nr = sizeof(special_phrases)/sizeof(special_phrase); +size_t const phrases_nr = sizeof(special_phrases)/sizeof(special_phrase); } // namespace anon @@ -143,15 +139,9 @@ void Paragraph::Pimpl::insertChar(pos_type pos, value_type c, it->pos(it->pos() + 1); } - // Update the inset table. - InsetTable search_inset(pos, 0); - for (InsetList::iterator it = lower_bound(owner_->insetlist.begin(), - owner_->insetlist.end(), - search_inset, matchIT()); - it != owner_->insetlist.end(); ++it) - { - ++it->pos; - } + // Update the insets + owner_->insetlist.increasePosAfterPos(pos); + owner_->setFont(pos, font); } @@ -165,18 +155,9 @@ void Paragraph::Pimpl::insertInset(pos_type pos, insertChar(pos, META_INSET, font); lyx::Assert(text[pos] == META_INSET); - // Add a new entry in the inset table. - InsetTable search_inset(pos, 0); - InsetList::iterator it = lower_bound(owner_->insetlist.begin(), - owner_->insetlist.end(), - search_inset, matchIT()); - if (it != owner_->insetlist.end() && it->pos == pos) { - lyxerr << "ERROR (Paragraph::InsertInset): " - "there is an inset in position: " << pos << endl; - } else { - owner_->insetlist.insert(it, InsetTable(pos, inset)); - inset->parOwner(owner_); - } + // Add a new entry in the insetlist. + owner_->insetlist.insert(inset, pos); + inset->parOwner(owner_); if (inset_owner) inset->setOwner(inset_owner); @@ -188,16 +169,7 @@ void Paragraph::Pimpl::erase(pos_type pos) lyx::Assert(pos < size()); // if it is an inset, delete the inset entry if (text[pos] == Paragraph::META_INSET) { - // find the entry - InsetTable search_inset(pos, 0); - InsetList::iterator it = - lower_bound(owner_->insetlist.begin(), - owner_->insetlist.end(), - search_inset, matchIT()); - if (it != owner_->insetlist.end() && it->pos == pos) { - delete it->inset; - owner_->insetlist.erase(it); - } + owner_->insetlist.erase(pos); } text.erase(text.begin() + pos); @@ -232,15 +204,8 @@ void Paragraph::Pimpl::erase(pos_type pos) for (; it != fend; ++it) it->pos(it->pos() - 1); - // Update the inset table. - InsetTable search_inset(pos, 0); - InsetList::iterator lend = owner_->insetlist.end(); - for (InsetList::iterator it = - upper_bound(owner_->insetlist.begin(), - lend, - search_inset, matchIT()); - it != lend; ++it) - --it->pos; + // Update the insetlist. + owner_->insetlist.decreasePosAfterPos(pos); } @@ -250,7 +215,7 @@ void Paragraph::Pimpl::simpleTeXBlanks(ostream & os, TexRow & texrow, LyXLayout const & style) { if (style.pass_thru) return; - if (column > tex_code_break_column + if (column > lyxrc.ascii_linelen && i && getChar(i - 1) != ' ' && (i < size() - 1) @@ -264,13 +229,7 @@ void Paragraph::Pimpl::simpleTeXBlanks(ostream & os, TexRow & texrow, || getChar(i - 1) == '?' || getChar(i - 1) == ':' || getChar(i - 1) == '!'))) { - if (tex_code_break_column == 0) { - // in batchmode we need LaTeX to still - // see it as a space not as an extra '\n' - os << " %\n"; - } else { - os << '\n'; - } + os << '\n'; texrow.newline(); texrow.start(owner_, i + 1); column = 0; @@ -346,6 +305,23 @@ void Paragraph::Pimpl::simpleTeXSpecialChars(Buffer const * buf, close = true; } +#ifdef WITH_WARNINGS +#warning Bug: we can have an empty font change here! +// if there has just been a font change, we are going to close it +// right now, which means stupid latex code like \textsf{}. AFAIK, +// this does not harm dvi output. A minor bug, thus (JMarc) +#endif + // some insets cannot be inside a font change command + if (open_font && inset->noFontChange()) { + column +=running_font. + latexWriteEndChanges(os, + basefont, + basefont); + open_font = false; + basefont = owner_->getLayoutFont(bparams); + running_font = basefont; + } + int tmp = inset->latex(buf, os, moving_arg, style.free_spacing); @@ -615,9 +591,6 @@ void Paragraph::Pimpl::validate(LaTeXFeatures & features, Language const * language = fcit->font().language(); if (language->babel() != doc_language->babel() && language != ignore_language && -#ifdef INHERIT_LANGUAGE - language != inherit_language && -#endif language != latex_language) { features.useLanguage(language); @@ -630,13 +603,13 @@ void Paragraph::Pimpl::validate(LaTeXFeatures & features, features.require("ParagraphLeftIndent"); // then the insets - InsetList::const_iterator icit = owner_->insetlist.begin(); - InsetList::const_iterator iend = owner_->insetlist.end(); + InsetList::iterator icit = owner_->insetlist.begin(); + InsetList::iterator iend = owner_->insetlist.end(); for (; icit != iend; ++icit) { - if (icit->inset) { - icit->inset->validate(features); + if (icit.getInset()) { + icit.getInset()->validate(features); if (layout.needprotect && - icit->inset->lyxCode() == Inset::FOOT_CODE) + icit.getInset()->lyxCode() == Inset::FOOT_CODE) features.require("NeedLyXFootnoteCode"); } } @@ -650,17 +623,17 @@ void Paragraph::Pimpl::validate(LaTeXFeatures & features, break; } } - } + } } Paragraph * Paragraph::Pimpl::getParFromID(int id) const { - InsetList::const_iterator cit = owner_->insetlist.begin(); - InsetList::const_iterator lend = owner_->insetlist.end(); + InsetList::iterator cit = owner_->insetlist.begin(); + InsetList::iterator lend = owner_->insetlist.end(); Paragraph * result; for (; cit != lend; ++cit) { - if ((result = cit->inset->getParFromID(id))) + if ((result = cit.getInset()->getParFromID(id))) return result; } return 0; @@ -675,24 +648,16 @@ LyXFont const Paragraph::Pimpl::realizeFont(LyXFont const & font, // check for environment font information char par_depth = owner_->getDepth(); Paragraph const * par = owner_; - LyXTextClass const & tclass = textclasslist[bparams.textclass]; + LyXTextClass const & tclass = bparams.getLyXTextClass(); while (par && par->getDepth() && !tmpfont.resolved()) { par = par->outerHook(); if (par) { - tmpfont.realize(par->layout()->font -#ifdef INHERIT_LANGUAGE - , bparams.language -#endif - ); + tmpfont.realize(par->layout()->font); par_depth = par->getDepth(); } } - tmpfont.realize(tclass.defaultfont() -#ifdef INHERIT_LANGUAGE - , bparams.language -#endif - ); + tmpfont.realize(tclass.defaultfont()); return tmpfont; }