X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText.cpp;h=baa9c3f1f82d6e6f055941b2c7315cb525fe753d;hb=4d5bef1bdcbe7a20d67613a793acb89f0e583bf6;hp=7c6fa5a233973a55b46e88d29cd1b0cae9840525;hpb=b436d85783257a8d6233a0f55a420c6c6d2d507b;p=lyx.git diff --git a/src/Text.cpp b/src/Text.cpp index 7c6fa5a233..baa9c3f1f8 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -46,7 +46,6 @@ #include "ParIterator.h" #include "TextClass.h" #include "TextMetrics.h" -#include "VSpace.h" #include "WordLangTuple.h" #include "WordList.h" @@ -69,8 +68,34 @@ #include +#include #include + +// TODO: replace if in Text::readParToken() with compile time switch +#if 0 + +#include "support/metahash.h" + +typedef boost::mpl::string<'\\end','_lay','out'> end_layout; +typedef boost::mpl::string<'\\end','in','set'> end_inset; + +void foo() +{ + std::string token = "\\end_layout"; + + switch (boost::hash_value(token)) { + case lyx::support::hash_string::value: + return; + case lyx::support::hash_string::value: + return; + default: ; + }; + +} +#endif + + using namespace std; using namespace lyx::support; @@ -242,11 +267,13 @@ Font const Text::outerFont(pit_type par_offset) const { depth_type par_depth = pars_[par_offset].getDepth(); FontInfo tmpfont = inherit_font; - + depth_type prev_par_depth = 0; // Resolve against environment font information while (par_offset != pit_type(pars_.size()) + && par_depth != prev_par_depth && par_depth && !tmpfont.resolved()) { + prev_par_depth = par_depth; par_offset = outerHook(par_offset); if (par_offset != pit_type(pars_.size())) { tmpfont.realize(pars_[par_offset].layout().font); @@ -317,6 +344,7 @@ InsetText const & Text::inset() const } + void Text::readParToken(Paragraph & par, Lexer & lex, string const & token, Font & font, Change & change, ErrorList & errorList) { @@ -356,7 +384,6 @@ void Text::readParToken(Paragraph & par, Lexer & lex, // of this document. For example, when you apply class article to a beamer document, // all unknown layouts such as frame will be added to document class article so that // these layouts can keep their original names. - tclass.addLayoutIfNeeded(layoutname); bool const added_one = tclass.addLayoutIfNeeded(layoutname); if (added_one) { // Warn the user. @@ -697,8 +724,7 @@ void Text::breakParagraph(Cursor & cur, bool inverse_logic) return; } - // a layout change may affect also the following paragraph - recUndo(cur, cur.pit(), undoSpan(cur.pit()) - 1); + cur.recordUndo(); // Always break behind a space // It is better to erase the space (Dekel) @@ -756,12 +782,12 @@ void Text::breakParagraph(Cursor & cur, bool inverse_logic) // needed to insert the selection -void Text::insertStringAsLines(DocIterator const & dit, docstring const & str, +void Text::insertStringAsLines(Cursor & cur, docstring const & str, Font const & font) { BufferParams const & bparams = owner_->buffer().params(); - pit_type pit = dit.pit(); - pos_type pos = dit.pos(); + pit_type pit = cur.pit(); + pos_type pos = cur.pos(); // insert the string, don't insert doublespace bool space_inserted = true; @@ -803,12 +829,13 @@ void Text::insertStringAsLines(DocIterator const & dit, docstring const & str, space_inserted = (*cit == ' '); } } + setCursor(cur, pit, pos); } // turn double CR to single CR, others are converted into one // blank. Then insertStringAsLines is called -void Text::insertStringAsParagraphs(DocIterator const & dit, docstring const & str, +void Text::insertStringAsParagraphs(Cursor & cur, docstring const & str, Font const & font) { docstring linestr = str; @@ -830,7 +857,7 @@ void Text::insertStringAsParagraphs(DocIterator const & dit, docstring const & s newline_inserted = false; } } - insertStringAsLines(dit, linestr, font); + insertStringAsLines(cur, linestr, font); } @@ -1250,7 +1277,11 @@ void Text::acceptOrRejectChanges(Cursor & cur, ChangeOp op) pos_type left = (pit == begPit ? begPos : 0); pos_type right = (pit == endPit ? endPos : parSize); - + + if (left == right) + // there is no change here + continue; + if (op == ACCEPT) { pars_[pit].acceptChanges(left, right); } else { @@ -1664,7 +1695,7 @@ bool Text::dissolveInset(Cursor & cur) // change it to the buffer language. ParagraphList::iterator it = plist.begin(); ParagraphList::iterator it_end = plist.end(); - for (; it != it_end; it++) + for (; it != it_end; ++it) it->changeLanguage(b.params(), latex_language, b.language()); pasteParagraphList(cur, plist, b.params().documentClassPtr(), @@ -1941,7 +1972,10 @@ docstring Text::asString(pit_type beg, pit_type end, int options) const void Text::forToc(docstring & os, size_t maxlen, bool shorten) const { - LASSERT(maxlen > 10, maxlen = 30); + if (maxlen == 0) + maxlen = std::numeric_limits::max(); + else + LASSERT(maxlen >= 8, maxlen = TOC_ENTRY_LENGTH); for (size_t i = 0; i != pars_.size() && os.length() < maxlen; ++i) pars_[i].forToc(os, maxlen); if (shorten && os.length() >= maxlen)