From eef8720eca844d2647a4c14024dae03a1915b65c Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Sun, 9 Aug 2009 17:14:41 +0000 Subject: [PATCH] Move Text::insertStringAsLines and Text::insertStringAsParagraphs from Text2.cpp to Text.cpp. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30954 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Text.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/Text2.cpp | 79 --------------------------------------------------- 2 files changed, 79 insertions(+), 79 deletions(-) diff --git a/src/Text.cpp b/src/Text.cpp index 8edbe2f0a6..103c71ac73 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -414,6 +414,85 @@ void Text::breakParagraph(Cursor & cur, bool inverse_logic) } +// needed to insert the selection +void Text::insertStringAsLines(DocIterator const & dit, docstring const & str, + Font const & font) +{ + BufferParams const & bparams = owner_->buffer().params(); + pit_type pit = dit.pit(); + pos_type pos = dit.pos(); + + // insert the string, don't insert doublespace + bool space_inserted = true; + for (docstring::const_iterator cit = str.begin(); + cit != str.end(); ++cit) { + Paragraph & par = pars_[pit]; + if (*cit == '\n') { + if (autoBreakRows_ && (!par.empty() || par.allowEmpty())) { + lyx::breakParagraph(bparams, pars_, pit, pos, + par.layout().isEnvironment()); + ++pit; + pos = 0; + space_inserted = true; + } else { + continue; + } + // do not insert consecutive spaces if !free_spacing + } else if ((*cit == ' ' || *cit == '\t') && + space_inserted && !par.isFreeSpacing()) { + continue; + } else if (*cit == '\t') { + if (!par.isFreeSpacing()) { + // tabs are like spaces here + par.insertChar(pos, ' ', font, bparams.trackChanges); + ++pos; + space_inserted = true; + } else { + par.insertChar(pos, *cit, font, bparams.trackChanges); + ++pos; + space_inserted = true; + } + } else if (!isPrintable(*cit)) { + // Ignore unprintables + continue; + } else { + // just insert the character + par.insertChar(pos, *cit, font, bparams.trackChanges); + ++pos; + space_inserted = (*cit == ' '); + } + } +} + + +// 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, + Font const & font) +{ + docstring linestr = str; + bool newline_inserted = false; + + for (string::size_type i = 0, siz = linestr.size(); i < siz; ++i) { + if (linestr[i] == '\n') { + if (newline_inserted) { + // we know that \r will be ignored by + // insertStringAsLines. Of course, it is a dirty + // trick, but it works... + linestr[i - 1] = '\r'; + linestr[i] = '\n'; + } else { + linestr[i] = ' '; + newline_inserted = true; + } + } else if (isPrintable(linestr[i])) { + newline_inserted = false; + } + } + insertStringAsLines(dit, linestr, font); +} + + // insert a character, moves all the following breaks in the // same Paragraph one to the right and make a rebreak void Text::insertChar(Cursor & cur, char_type c) diff --git a/src/Text2.cpp b/src/Text2.cpp index cda8fae1ae..d83e85a41b 100644 --- a/src/Text2.cpp +++ b/src/Text2.cpp @@ -502,85 +502,6 @@ void Text::insertInset(Cursor & cur, Inset * inset) } -// needed to insert the selection -void Text::insertStringAsLines(DocIterator const & dit, docstring const & str, - Font const & font) -{ - BufferParams const & bparams = owner_->buffer().params(); - pit_type pit = dit.pit(); - pos_type pos = dit.pos(); - - // insert the string, don't insert doublespace - bool space_inserted = true; - for (docstring::const_iterator cit = str.begin(); - cit != str.end(); ++cit) { - Paragraph & par = pars_[pit]; - if (*cit == '\n') { - if (autoBreakRows_ && (!par.empty() || par.allowEmpty())) { - lyx::breakParagraph(bparams, pars_, pit, pos, - par.layout().isEnvironment()); - ++pit; - pos = 0; - space_inserted = true; - } else { - continue; - } - // do not insert consecutive spaces if !free_spacing - } else if ((*cit == ' ' || *cit == '\t') && - space_inserted && !par.isFreeSpacing()) { - continue; - } else if (*cit == '\t') { - if (!par.isFreeSpacing()) { - // tabs are like spaces here - par.insertChar(pos, ' ', font, bparams.trackChanges); - ++pos; - space_inserted = true; - } else { - par.insertChar(pos, *cit, font, bparams.trackChanges); - ++pos; - space_inserted = true; - } - } else if (!isPrintable(*cit)) { - // Ignore unprintables - continue; - } else { - // just insert the character - par.insertChar(pos, *cit, font, bparams.trackChanges); - ++pos; - space_inserted = (*cit == ' '); - } - } -} - - -// 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, - Font const & font) -{ - docstring linestr = str; - bool newline_inserted = false; - - for (string::size_type i = 0, siz = linestr.size(); i < siz; ++i) { - if (linestr[i] == '\n') { - if (newline_inserted) { - // we know that \r will be ignored by - // insertStringAsLines. Of course, it is a dirty - // trick, but it works... - linestr[i - 1] = '\r'; - linestr[i] = '\n'; - } else { - linestr[i] = ' '; - newline_inserted = true; - } - } else if (isPrintable(linestr[i])) { - newline_inserted = false; - } - } - insertStringAsLines(dit, linestr, font); -} - - bool Text::setCursor(Cursor & cur, pit_type par, pos_type pos, bool setfont, bool boundary) { -- 2.39.5