]> git.lyx.org Git - features.git/commitdiff
Move contents of paragraph_funcs.* to Text.h and Text.cpp.
authorAbdelrazak Younes <younes@lyx.org>
Sun, 9 Aug 2009 17:30:41 +0000 (17:30 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Sun, 9 Aug 2009 17:30:41 +0000 (17:30 +0000)
The goal is to simplify the code afterwards.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30955 a592a061-630c-0410-9148-cb99ea01b6c8

23 files changed:
development/scons/scons_manifest.py
src/Buffer.cpp
src/BufferView.cpp
src/Cursor.cpp
src/CutAndPaste.cpp
src/Makefile.am
src/Paragraph.cpp
src/ParagraphMetrics.cpp
src/Text.cpp
src/Text.h
src/Text2.cpp
src/Text3.cpp
src/TextMetrics.cpp
src/buffer_funcs.cpp
src/insets/InsetCaption.cpp
src/insets/InsetTabular.cpp
src/insets/InsetText.cpp
src/output_docbook.cpp
src/output_latex.cpp
src/output_xhtml.cpp
src/paragraph_funcs.cpp [deleted file]
src/paragraph_funcs.h [deleted file]
src/rowpainter.cpp

index 1c398eafcfdb35b37160730e887ebc54441986c3..6e1ddb854794d0801bb868c980b599cdc9280370 100644 (file)
@@ -109,7 +109,6 @@ src_header_files = Split('''
     paper.h
     ParIterator.h
     Paragraph.h
-    paragraph_funcs.h
     ParagraphList.h
     ParagraphMetrics.h
     ParagraphParameters.h
@@ -208,7 +207,6 @@ src_pre_files = Split('''
     output_latex.cpp
     output_plaintext.cpp
     output_xhtml.cpp
-    paragraph_funcs.cpp
     PDFOptions.cpp
     ParIterator.cpp
     Paragraph.cpp
index 168f5797979c27028ae43905b494965f51f5e910..b3137ad4b73cc1ea091b14259b298c9daeba7381 100644 (file)
@@ -49,7 +49,6 @@
 #include "output_latex.h"
 #include "output_xhtml.h"
 #include "output_plaintext.h"
-#include "paragraph_funcs.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
index ee5fffa53a0a9442cd6a95a63f8894b8fd3a9d38..ec1f15704095df8eaa45af178939744c56f5bdf8 100644 (file)
@@ -41,7 +41,6 @@
 #include "LyXRC.h"
 #include "MetricsInfo.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
 #include "Session.h"
index b4aee4cf6942b1b7b8cc8564ab425c97b425e5ef..3edf97065d34c4965be9b023a66cd07f503a36cb 100644 (file)
@@ -28,7 +28,6 @@
 #include "Language.h"
 #include "LyXFunc.h" // only for setMessage()
 #include "LyXRC.h"
-#include "paragraph_funcs.h"
 #include "Paragraph.h"
 #include "ParIterator.h"
 #include "Row.h"
index 317410497602ff19c1d95eebf0d7413fbae52714..1efca23341064d63d4f91d4294ed68194abbe0e8 100644 (file)
@@ -33,7 +33,6 @@
 #include "LyXRC.h"
 #include "Text.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
 #include "Undo.h"
index 306d801a7920bfd405929657165b1d832c9f369c..6bcfca1e4e3dd7ea52d3e675129c8c56b62f0f17 100644 (file)
@@ -147,7 +147,6 @@ SOURCEFILESCORE = \
        OutputParams.cpp \
        output_plaintext.cpp \
        Paragraph.cpp \
-       paragraph_funcs.cpp \
        ParagraphMetrics.cpp \
        ParagraphParameters.cpp \
        ParIterator.cpp \
@@ -249,7 +248,6 @@ HEADERFILESCORE = \
        OutputParams.h \
        output_plaintext.h \
        paper.h \
-       paragraph_funcs.h \
        Paragraph.h \
        ParagraphList.h \
        ParagraphMetrics.h \
index a6041d06c7b5d3e32defe8037b25a86b77c2adef..6dce930e9a47e2bc0d036e2bbba67a8bece1c86a 100644 (file)
@@ -36,7 +36,6 @@
 #include "OutputParams.h"
 #include "output_latex.h"
 #include "output_xhtml.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "SpellChecker.h"
 #include "sgml.h"
index 16f2fb2713b0c5224905594ff4ad162e2ff7b9c7..d0822312fb2b5421d357e38c66c6e9e8e6bf6039 100644 (file)
@@ -31,7 +31,6 @@
 #include "LyXRC.h"
 #include "Row.h"
 #include "OutputParams.h"
-#include "paragraph_funcs.h"
 #include "sgml.h"
 #include "TextClass.h"
 #include "TexRow.h"
index 103c71ac73539af75061d4c0be74441d5caf4641..153685cc9eb8981c0e17acd5d60e0de96e228353 100644 (file)
 #include "ErrorList.h"
 #include "FuncRequest.h"
 #include "factory.h"
+#include "InsetList.h"
 #include "Language.h"
+#include "Layout.h"
 #include "Length.h"
 #include "Lexer.h"
 #include "lyxfind.h"
 #include "LyXRC.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
 #include "TextClass.h"
@@ -79,6 +80,260 @@ namespace lyx {
 using cap::cutSelection;
 using cap::pasteParagraphList;
 
+static bool moveItem(Paragraph & fromPar, pos_type fromPos,
+       Paragraph & toPar, pos_type toPos, BufferParams const & params)
+{
+       // Note: moveItem() does not honour change tracking!
+       // Therefore, it should only be used for breaking and merging paragraphs
+
+       // We need a copy here because the character at fromPos is going to be erased.
+       Font const tmpFont = fromPar.getFontSettings(params, fromPos);
+       Change const tmpChange = fromPar.lookupChange(fromPos);
+
+       if (Inset * tmpInset = fromPar.getInset(fromPos)) {
+               fromPar.releaseInset(fromPos);
+               // The inset is not in fromPar any more.
+               if (!toPar.insertInset(toPos, tmpInset, tmpFont, tmpChange)) {
+                       delete tmpInset;
+                       return false;
+               }
+               return true;
+       }
+
+       char_type const tmpChar = fromPar.getChar(fromPos);
+       fromPar.eraseChar(fromPos, false);
+       toPar.insertChar(toPos, tmpChar, tmpFont, tmpChange);
+       return true;
+}
+
+
+void breakParagraphConservative(BufferParams const & bparams,
+       ParagraphList & pars, pit_type par_offset, pos_type pos)
+{
+       // create a new paragraph
+       Paragraph & tmp = *pars.insert(boost::next(pars.begin(), par_offset + 1),
+                                      Paragraph());
+       Paragraph & par = pars[par_offset];
+
+       tmp.setInsetOwner(&par.inInset());
+       tmp.makeSameLayout(par);
+
+       LASSERT(pos <= par.size(), /**/);
+
+       if (pos < par.size()) {
+               // move everything behind the break position to the new paragraph
+               pos_type pos_end = par.size() - 1;
+
+               for (pos_type i = pos, j = 0; i <= pos_end; ++i) {
+                       if (moveItem(par, pos, tmp, j, bparams)) {
+                               ++j;
+                       }
+               }
+               // Move over the end-of-par change information
+               tmp.setChange(tmp.size(), par.lookupChange(par.size()));
+               par.setChange(par.size(), Change(bparams.trackChanges ?
+                                          Change::INSERTED : Change::UNCHANGED));
+       }
+}
+
+
+void mergeParagraph(BufferParams const & bparams,
+       ParagraphList & pars, pit_type par_offset)
+{
+       Paragraph & next = pars[par_offset + 1];
+       Paragraph & par = pars[par_offset];
+
+       pos_type pos_end = next.size() - 1;
+       pos_type pos_insert = par.size();
+
+       // the imaginary end-of-paragraph character (at par.size()) has to be
+       // marked as unmodified. Otherwise, its change is adopted by the first
+       // character of the next paragraph.
+       if (par.isChanged(par.size())) {
+               LYXERR(Debug::CHANGES,
+                  "merging par with inserted/deleted end-of-par character");
+               par.setChange(par.size(), Change(Change::UNCHANGED));
+       }
+
+       Change change = next.lookupChange(next.size());
+
+       // move the content of the second paragraph to the end of the first one
+       for (pos_type i = 0, j = pos_insert; i <= pos_end; ++i) {
+               if (moveItem(next, 0, par, j, bparams)) {
+                       ++j;
+               }
+       }
+
+       // move the change of the end-of-paragraph character
+       par.setChange(par.size(), change);
+
+       pars.erase(boost::next(pars.begin(), par_offset + 1));
+}
+
+
+pit_type depthHook(pit_type pit, ParagraphList const & pars, depth_type depth)
+{
+       pit_type newpit = pit;
+
+       if (newpit != 0)
+               --newpit;
+
+       while (newpit != 0 && pars[newpit].getDepth() > depth)
+               --newpit;
+
+       if (pars[newpit].getDepth() > depth)
+               return pit;
+
+       return newpit;
+}
+
+
+pit_type outerHook(pit_type par_offset, ParagraphList const & pars)
+{
+       Paragraph const & par = pars[par_offset];
+
+       if (par.getDepth() == 0)
+               return pars.size();
+       return depthHook(par_offset, pars, depth_type(par.getDepth() - 1));
+}
+
+
+bool isFirstInSequence(pit_type par_offset, ParagraphList const & pars)
+{
+       Paragraph const & par = pars[par_offset];
+
+       pit_type dhook_offset = depthHook(par_offset, pars, par.getDepth());
+
+       if (dhook_offset == par_offset)
+               return true;
+
+       Paragraph const & dhook = pars[dhook_offset];
+
+       return dhook.layout() != par.layout()
+               || dhook.getDepth() != par.getDepth();
+}
+
+
+void setLabelWidthStringToSequence(pit_type const par_offset,
+       ParagraphList & pars, docstring const & s)
+{
+       pit_type offset = par_offset;
+       // Find first of same layout in sequence
+       while (!isFirstInSequence(offset, pars)) {
+               offset = depthHook(offset, pars, pars[offset].getDepth());
+       }
+
+       // now apply label width string to every par
+       // in sequence
+       pit_type const end = pars.size();
+       depth_type const depth = pars[offset].getDepth();
+       Layout const & layout = pars[offset].layout();
+       for (pit_type pit = offset; pit != end; ++pit) {
+               while (pars[pit].getDepth() > depth)
+                       ++pit;
+               if (pars[pit].getDepth() < depth)
+                       return;
+               if (pars[pit].layout() != layout)
+                       return;
+               pars[pit].setLabelWidthString(s);
+       }
+}
+
+
+int getEndLabel(pit_type p, ParagraphList const & pars)
+{
+       pit_type pit = p;
+       depth_type par_depth = pars[p].getDepth();
+       while (pit != pit_type(pars.size())) {
+               Layout const & layout = pars[pit].layout();
+               int const endlabeltype = layout.endlabeltype;
+
+               if (endlabeltype != END_LABEL_NO_LABEL) {
+                       if (p + 1 == pit_type(pars.size()))
+                               return endlabeltype;
+
+                       depth_type const next_depth =
+                               pars[p + 1].getDepth();
+                       if (par_depth > next_depth ||
+                           (par_depth == next_depth && layout != pars[p + 1].layout()))
+                               return endlabeltype;
+                       break;
+               }
+               if (par_depth == 0)
+                       break;
+               pit = outerHook(pit, pars);
+               if (pit != pit_type(pars.size()))
+                       par_depth = pars[pit].getDepth();
+       }
+       return END_LABEL_NO_LABEL;
+}
+
+
+Font const outerFont(pit_type par_offset, ParagraphList const & pars)
+{
+       depth_type par_depth = pars[par_offset].getDepth();
+       FontInfo tmpfont = inherit_font;
+
+       // Resolve against environment font information
+       while (par_offset != pit_type(pars.size())
+              && par_depth
+              && !tmpfont.resolved()) {
+               par_offset = outerHook(par_offset, pars);
+               if (par_offset != pit_type(pars.size())) {
+                       tmpfont.realize(pars[par_offset].layout().font);
+                       par_depth = pars[par_offset].getDepth();
+               }
+       }
+
+       return Font(tmpfont);
+}
+
+
+bool isFullyDeleted(ParagraphList const & pars)
+{
+       pit_type const pars_size = static_cast<pit_type>(pars.size());
+
+       // check all paragraphs
+       for (pit_type pit = 0; pit < pars_size; ++pit) {
+               if (!pars[pit].empty())   // prevent assertion failure
+                       if (!pars[pit].isDeleted(0, pars[pit].size()))
+                               return false;
+       }
+       return true;
+}
+
+
+void acceptChanges(ParagraphList & pars, BufferParams const & bparams)
+{
+       pit_type pars_size = static_cast<pit_type>(pars.size());
+
+       // first, accept changes within each individual paragraph
+       // (do not consider end-of-par)
+       for (pit_type pit = 0; pit < pars_size; ++pit) {
+               if (!pars[pit].empty())   // prevent assertion failure
+                       pars[pit].acceptChanges(0, pars[pit].size());
+       }
+
+       // next, accept imaginary end-of-par characters
+       for (pit_type pit = 0; pit < pars_size; ++pit) {
+               pos_type pos = pars[pit].size();
+
+               if (pars[pit].isInserted(pos)) {
+                       pars[pit].setChange(pos, Change(Change::UNCHANGED));
+               } else if (pars[pit].isDeleted(pos)) {
+                       if (pit == pars_size - 1) {
+                               // we cannot remove a par break at the end of the last
+                               // paragraph; instead, we mark it unchanged
+                               pars[pit].setChange(pos, Change(Change::UNCHANGED));
+                       } else {
+                               mergeParagraph(bparams, pars, pit);
+                               --pit;
+                               --pars_size;
+                       }
+               }
+       }
+}
+
 InsetText const & Text::inset() const
 {
        return *owner_;
@@ -339,6 +594,105 @@ double Text::spacing(Paragraph const & par) const
 }
 
 
+/**
+ * This breaks a paragraph at the specified position.
+ * The new paragraph will:
+ * - Decrease depth by one (or change layout to default layout) when
+ *    keep_layout == false  
+ * - keep current depth and layout when keep_layout == true
+ */
+static void breakParagraph(BufferParams const & bparams,
+                   ParagraphList & pars, pit_type par_offset, pos_type pos, 
+                   bool keep_layout)
+{
+       // create a new paragraph, and insert into the list
+       ParagraphList::iterator tmp =
+               pars.insert(boost::next(pars.begin(), par_offset + 1),
+                           Paragraph());
+
+       Paragraph & par = pars[par_offset];
+
+       // remember to set the inset_owner
+       tmp->setInsetOwner(&par.inInset());
+       // without doing that we get a crash when typing <Return> at the
+       // end of a paragraph
+       tmp->setPlainOrDefaultLayout(bparams.documentClass());
+
+       // layout stays the same with latex-environments
+       if (keep_layout) {
+               tmp->setLayout(par.layout());
+               tmp->setLabelWidthString(par.params().labelWidthString());
+               tmp->params().depth(par.params().depth());
+       } else if (par.params().depth() > 0) {
+               Paragraph const & hook = pars[outerHook(par_offset, pars)];
+               tmp->setLayout(hook.layout());
+               // not sure the line below is useful
+               tmp->setLabelWidthString(par.params().labelWidthString());
+               tmp->params().depth(hook.params().depth());
+       }
+
+       bool const isempty = (par.allowEmpty() && par.empty());
+
+       if (!isempty && (par.size() > pos || par.empty())) {
+               tmp->setLayout(par.layout());
+               tmp->params().align(par.params().align());
+               tmp->setLabelWidthString(par.params().labelWidthString());
+
+               tmp->params().depth(par.params().depth());
+               tmp->params().noindent(par.params().noindent());
+
+               // move everything behind the break position
+               // to the new paragraph
+
+               /* Note: if !keepempty, empty() == true, then we reach
+                * here with size() == 0. So pos_end becomes - 1. This
+                * doesn't cause problems because both loops below
+                * enforce pos <= pos_end and 0 <= pos
+                */
+               pos_type pos_end = par.size() - 1;
+
+               for (pos_type i = pos, j = 0; i <= pos_end; ++i) {
+                       if (moveItem(par, pos, *tmp, j, bparams)) {
+                               ++j;
+                       }
+               }
+       }
+
+       // Move over the end-of-par change information
+       tmp->setChange(tmp->size(), par.lookupChange(par.size()));
+       par.setChange(par.size(), Change(bparams.trackChanges ?
+                                          Change::INSERTED : Change::UNCHANGED));
+
+       if (pos) {
+               // Make sure that we keep the language when
+               // breaking paragraph.
+               if (tmp->empty()) {
+                       Font changed = tmp->getFirstFontSettings(bparams);
+                       Font const & old = par.getFontSettings(bparams, par.size());
+                       changed.setLanguage(old.language());
+                       tmp->setFont(0, changed);
+               }
+
+               return;
+       }
+
+       if (!isempty) {
+               bool const soa = par.params().startOfAppendix();
+               par.params().clear();
+               // do not lose start of appendix marker (bug 4212)
+               par.params().startOfAppendix(soa);
+               par.setPlainOrDefaultLayout(bparams.documentClass());
+       }
+
+       // layout stays the same with latex-environments
+       if (keep_layout) {
+               par.setLayout(tmp->layout());
+               par.setLabelWidthString(tmp->params().labelWidthString());
+               par.params().depth(tmp->params().depth());
+       }
+}
+
+
 void Text::breakParagraph(Cursor & cur, bool inverse_logic)
 {
        LASSERT(this == cur.text(), /**/);
index 1a3808fec32b6f03e1fdc81648708caeaf713528..47860104a45d469bd0ce9bd0778f31e3e0ad845e 100644 (file)
 
 namespace lyx {
 
+class Buffer;
+class BufferParams;
 class BufferView;
 class CompletionList;
+class Cursor;
 class CursorSlice;
 class DocIterator;
 class ErrorList;
@@ -29,12 +32,10 @@ class FontInfo;
 class FuncRequest;
 class FuncStatus;
 class Inset;
-class Cursor;
 class Lexer;
 class PainterInfo;
 class Spacing;
 
-
 /// This class encapsulates the main text data and operations in LyX
 class Text {
 public:
@@ -357,6 +358,51 @@ private:
        DocIterator macrocontext_position_;
 };
 
+
+///
+void breakParagraphConservative(BufferParams const & bparams,
+                               ParagraphList & paragraphs,
+                               pit_type par,
+                               pos_type pos);
+
+/**
+ * Append the next paragraph onto the tail of this one.
+ * Be careful, this doesent make any check at all.
+ */
+void mergeParagraph(BufferParams const & bparams,
+       ParagraphList & paragraphs, pit_type par);
+
+
+/// for the environments
+pit_type depthHook(pit_type par,
+       ParagraphList const & plist, depth_type depth);
+
+pit_type outerHook(pit_type par, ParagraphList const & plist);
+
+/// Is it the first par with same depth and layout?
+bool isFirstInSequence(pit_type par, ParagraphList const & plist);
+
+/** Set Label Width string to all paragraphs of the same layout
+    and depth in a sequence */
+void setLabelWidthStringToSequence(pit_type const par_offset,
+       ParagraphList & pars, docstring const & s);
+
+/** Check if the current paragraph is the last paragraph in a
+    proof environment */
+int getEndLabel(pit_type par, ParagraphList const & plist);
+
+/**
+ * Get the font of the "environment" of paragraph \p par_offset in \p pars.
+ * All font changes of the paragraph are relative to this font.
+ */
+Font const outerFont(pit_type par_offset, ParagraphList const & pars);
+
+/// accept the changes within the complete ParagraphList
+void acceptChanges(ParagraphList & pars, BufferParams const & bparams);
+
+/// return true if the whole ParagraphList is deleted
+bool isFullyDeleted(ParagraphList const & pars);
+
 } // namespace lyx
 
 #endif // TEXT_H
index d83e85a41b842a84f1dfa3f02fe672b0033ec351..080fdc0c463e332b12ae32a7986cf1f9f0a3f164 100644 (file)
@@ -40,7 +40,6 @@
 #include "LyXFunc.h"
 #include "LyXRC.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "TextClass.h"
 #include "TextMetrics.h"
index a9b1e30f0961de7d3eaac352e0ac59856a05a0f6..a84c4a05e8e90a9f2cc59f98a6a2db6578e2fc64 100644 (file)
@@ -41,7 +41,6 @@
 #include "Lexer.h"
 #include "LyXRC.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "TextClass.h"
 #include "TextMetrics.h"
index 89dbbdc0acefd1151d78285367f945d041689870..fe9cb929476ac165869b38f7e327dc913143eddc 100644 (file)
@@ -34,7 +34,6 @@
 #include "Length.h"
 #include "LyXRC.h"
 #include "MetricsInfo.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
 #include "rowpainter.h"
index 7d23306d2ba35b0b11ae01f948d33fcc4ec67703..ee52fc68ec0f687c533e90209e988f3ec7568887 100644 (file)
@@ -28,7 +28,6 @@
 #include "LyX.h"
 #include "TextClass.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphList.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
index 4b19a6d3bfe785cf3d78dd66a63dde98ac7fd018..db95f060b98095494b7b86f53ec886dba7607a4f 100644 (file)
@@ -30,7 +30,6 @@
 #include "output_latex.h"
 #include "OutputParams.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "TextClass.h"
 #include "TocBackend.h"
 
index a576d2685a5684e1a758364236145b8d9d988cb5..1738869e18062fe9a2805ca0df7e36ea982c9c85 100644 (file)
@@ -38,7 +38,6 @@
 #include "LyXRC.h"
 #include "MetricsInfo.h"
 #include "OutputParams.h"
-#include "paragraph_funcs.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
index ed39b2558db7999fd8327abe3e6a58457f085c73..52644f8b57196685689f523803684ba6bf88280b 100644 (file)
@@ -40,7 +40,6 @@
 #include "output_xhtml.h"
 #include "OutputParams.h"
 #include "output_plaintext.h"
-#include "paragraph_funcs.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
index 535d507c63a6ab635fedbbd8f4829a581462cbfa..cfb6980336317bbaf8f32188f45582df5f12b417 100644 (file)
 #include "Layout.h"
 #include "OutputParams.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphList.h"
 #include "ParagraphParameters.h"
 #include "sgml.h"
+#include "Text.h"
 #include "TextClass.h"
 
 #include "support/lassert.h"
index 59c114042337a39559cfd7dd34b5e1cb5139353f..1ff05aa98b2d3071ea83d30eee04438011a4a72f 100644 (file)
@@ -21,7 +21,6 @@
 #include "LyXRC.h"
 #include "OutputParams.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "TextClass.h"
 #include "TexRow.h"
index 1c61421c7fc3356cb8038ec282810307ebf8d056..a5f36fa0ba20e2c179e31969c53847c3995a9273 100644 (file)
 #include "Layout.h"
 #include "OutputParams.h"
 #include "Paragraph.h"
-#include "paragraph_funcs.h"
 #include "ParagraphList.h"
 #include "ParagraphParameters.h"
 #include "sgml.h"
+#include "Text.h"
 #include "TextClass.h"
 
 #include "support/lassert.h"
diff --git a/src/paragraph_funcs.cpp b/src/paragraph_funcs.cpp
deleted file mode 100644 (file)
index dfc895d..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/**
- * \file paragraph_funcs.cpp
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author Lars Gullik Bjønnes
- *
- * Full author contact details are available in file CREDITS.
- */
-
-#include <config.h>
-
-#include "paragraph_funcs.h"
-
-#include "BufferParams.h"
-#include "Changes.h"
-#include "InsetList.h"
-#include "Layout.h"
-#include "Paragraph.h"
-#include "ParagraphParameters.h"
-#include "Text.h"
-#include "TextClass.h"
-
-#include "support/debug.h"
-
-#include "support/lassert.h"
-#include <boost/next_prior.hpp>
-
-using namespace std;
-
-namespace lyx {
-
-static bool moveItem(Paragraph & fromPar, pos_type fromPos,
-       Paragraph & toPar, pos_type toPos, BufferParams const & params)
-{
-       // Note: moveItem() does not honour change tracking!
-       // Therefore, it should only be used for breaking and merging paragraphs
-
-       // We need a copy here because the character at fromPos is going to be erased.
-       Font const tmpFont = fromPar.getFontSettings(params, fromPos);
-       Change const tmpChange = fromPar.lookupChange(fromPos);
-
-       if (Inset * tmpInset = fromPar.getInset(fromPos)) {
-               fromPar.releaseInset(fromPos);
-               // The inset is not in fromPar any more.
-               if (!toPar.insertInset(toPos, tmpInset, tmpFont, tmpChange)) {
-                       delete tmpInset;
-                       return false;
-               }
-               return true;
-       }
-
-       char_type const tmpChar = fromPar.getChar(fromPos);
-       fromPar.eraseChar(fromPos, false);
-       toPar.insertChar(toPos, tmpChar, tmpFont, tmpChange);
-       return true;
-}
-
-
-void breakParagraph(BufferParams const & bparams,
-                   ParagraphList & pars, pit_type par_offset, pos_type pos, 
-                   bool keep_layout)
-{
-       // create a new paragraph, and insert into the list
-       ParagraphList::iterator tmp =
-               pars.insert(boost::next(pars.begin(), par_offset + 1),
-                           Paragraph());
-
-       Paragraph & par = pars[par_offset];
-
-       // remember to set the inset_owner
-       tmp->setInsetOwner(&par.inInset());
-       // without doing that we get a crash when typing <Return> at the
-       // end of a paragraph
-       tmp->setPlainOrDefaultLayout(bparams.documentClass());
-
-       // layout stays the same with latex-environments
-       if (keep_layout) {
-               tmp->setLayout(par.layout());
-               tmp->setLabelWidthString(par.params().labelWidthString());
-               tmp->params().depth(par.params().depth());
-       } else if (par.params().depth() > 0) {
-               Paragraph const & hook = pars[outerHook(par_offset, pars)];
-               tmp->setLayout(hook.layout());
-               // not sure the line below is useful
-               tmp->setLabelWidthString(par.params().labelWidthString());
-               tmp->params().depth(hook.params().depth());
-       }
-
-       bool const isempty = (par.allowEmpty() && par.empty());
-
-       if (!isempty && (par.size() > pos || par.empty())) {
-               tmp->setLayout(par.layout());
-               tmp->params().align(par.params().align());
-               tmp->setLabelWidthString(par.params().labelWidthString());
-
-               tmp->params().depth(par.params().depth());
-               tmp->params().noindent(par.params().noindent());
-
-               // move everything behind the break position
-               // to the new paragraph
-
-               /* Note: if !keepempty, empty() == true, then we reach
-                * here with size() == 0. So pos_end becomes - 1. This
-                * doesn't cause problems because both loops below
-                * enforce pos <= pos_end and 0 <= pos
-                */
-               pos_type pos_end = par.size() - 1;
-
-               for (pos_type i = pos, j = 0; i <= pos_end; ++i) {
-                       if (moveItem(par, pos, *tmp, j, bparams)) {
-                               ++j;
-                       }
-               }
-       }
-
-       // Move over the end-of-par change information
-       tmp->setChange(tmp->size(), par.lookupChange(par.size()));
-       par.setChange(par.size(), Change(bparams.trackChanges ?
-                                          Change::INSERTED : Change::UNCHANGED));
-
-       if (pos) {
-               // Make sure that we keep the language when
-               // breaking paragraph.
-               if (tmp->empty()) {
-                       Font changed = tmp->getFirstFontSettings(bparams);
-                       Font const & old = par.getFontSettings(bparams, par.size());
-                       changed.setLanguage(old.language());
-                       tmp->setFont(0, changed);
-               }
-
-               return;
-       }
-
-       if (!isempty) {
-               bool const soa = par.params().startOfAppendix();
-               par.params().clear();
-               // do not lose start of appendix marker (bug 4212)
-               par.params().startOfAppendix(soa);
-               par.setPlainOrDefaultLayout(bparams.documentClass());
-       }
-
-       // layout stays the same with latex-environments
-       if (keep_layout) {
-               par.setLayout(tmp->layout());
-               par.setLabelWidthString(tmp->params().labelWidthString());
-               par.params().depth(tmp->params().depth());
-       }
-}
-
-
-void breakParagraphConservative(BufferParams const & bparams,
-       ParagraphList & pars, pit_type par_offset, pos_type pos)
-{
-       // create a new paragraph
-       Paragraph & tmp = *pars.insert(boost::next(pars.begin(), par_offset + 1),
-                                      Paragraph());
-       Paragraph & par = pars[par_offset];
-
-       tmp.setInsetOwner(&par.inInset());
-       tmp.makeSameLayout(par);
-
-       LASSERT(pos <= par.size(), /**/);
-
-       if (pos < par.size()) {
-               // move everything behind the break position to the new paragraph
-               pos_type pos_end = par.size() - 1;
-
-               for (pos_type i = pos, j = 0; i <= pos_end; ++i) {
-                       if (moveItem(par, pos, tmp, j, bparams)) {
-                               ++j;
-                       }
-               }
-               // Move over the end-of-par change information
-               tmp.setChange(tmp.size(), par.lookupChange(par.size()));
-               par.setChange(par.size(), Change(bparams.trackChanges ?
-                                          Change::INSERTED : Change::UNCHANGED));
-       }
-}
-
-
-void mergeParagraph(BufferParams const & bparams,
-       ParagraphList & pars, pit_type par_offset)
-{
-       Paragraph & next = pars[par_offset + 1];
-       Paragraph & par = pars[par_offset];
-
-       pos_type pos_end = next.size() - 1;
-       pos_type pos_insert = par.size();
-
-       // the imaginary end-of-paragraph character (at par.size()) has to be
-       // marked as unmodified. Otherwise, its change is adopted by the first
-       // character of the next paragraph.
-       if (par.isChanged(par.size())) {
-               LYXERR(Debug::CHANGES,
-                  "merging par with inserted/deleted end-of-par character");
-               par.setChange(par.size(), Change(Change::UNCHANGED));
-       }
-
-       Change change = next.lookupChange(next.size());
-
-       // move the content of the second paragraph to the end of the first one
-       for (pos_type i = 0, j = pos_insert; i <= pos_end; ++i) {
-               if (moveItem(next, 0, par, j, bparams)) {
-                       ++j;
-               }
-       }
-
-       // move the change of the end-of-paragraph character
-       par.setChange(par.size(), change);
-
-       pars.erase(boost::next(pars.begin(), par_offset + 1));
-}
-
-
-pit_type depthHook(pit_type pit, ParagraphList const & pars, depth_type depth)
-{
-       pit_type newpit = pit;
-
-       if (newpit != 0)
-               --newpit;
-
-       while (newpit != 0 && pars[newpit].getDepth() > depth)
-               --newpit;
-
-       if (pars[newpit].getDepth() > depth)
-               return pit;
-
-       return newpit;
-}
-
-
-pit_type outerHook(pit_type par_offset, ParagraphList const & pars)
-{
-       Paragraph const & par = pars[par_offset];
-
-       if (par.getDepth() == 0)
-               return pars.size();
-       return depthHook(par_offset, pars, depth_type(par.getDepth() - 1));
-}
-
-
-bool isFirstInSequence(pit_type par_offset, ParagraphList const & pars)
-{
-       Paragraph const & par = pars[par_offset];
-
-       pit_type dhook_offset = depthHook(par_offset, pars, par.getDepth());
-
-       if (dhook_offset == par_offset)
-               return true;
-
-       Paragraph const & dhook = pars[dhook_offset];
-
-       return dhook.layout() != par.layout()
-               || dhook.getDepth() != par.getDepth();
-}
-
-
-void setLabelWidthStringToSequence(pit_type const par_offset,
-       ParagraphList & pars, docstring const & s)
-{
-       pit_type offset = par_offset;
-       // Find first of same layout in sequence
-       while (!isFirstInSequence(offset, pars)) {
-               offset = depthHook(offset, pars, pars[offset].getDepth());
-       }
-
-       // now apply label width string to every par
-       // in sequence
-       pit_type const end = pars.size();
-       depth_type const depth = pars[offset].getDepth();
-       Layout const & layout = pars[offset].layout();
-       for (pit_type pit = offset; pit != end; ++pit) {
-               while (pars[pit].getDepth() > depth)
-                       ++pit;
-               if (pars[pit].getDepth() < depth)
-                       return;
-               if (pars[pit].layout() != layout)
-                       return;
-               pars[pit].setLabelWidthString(s);
-       }
-}
-
-
-int getEndLabel(pit_type p, ParagraphList const & pars)
-{
-       pit_type pit = p;
-       depth_type par_depth = pars[p].getDepth();
-       while (pit != pit_type(pars.size())) {
-               Layout const & layout = pars[pit].layout();
-               int const endlabeltype = layout.endlabeltype;
-
-               if (endlabeltype != END_LABEL_NO_LABEL) {
-                       if (p + 1 == pit_type(pars.size()))
-                               return endlabeltype;
-
-                       depth_type const next_depth =
-                               pars[p + 1].getDepth();
-                       if (par_depth > next_depth ||
-                           (par_depth == next_depth && layout != pars[p + 1].layout()))
-                               return endlabeltype;
-                       break;
-               }
-               if (par_depth == 0)
-                       break;
-               pit = outerHook(pit, pars);
-               if (pit != pit_type(pars.size()))
-                       par_depth = pars[pit].getDepth();
-       }
-       return END_LABEL_NO_LABEL;
-}
-
-
-Font const outerFont(pit_type par_offset, ParagraphList const & pars)
-{
-       depth_type par_depth = pars[par_offset].getDepth();
-       FontInfo tmpfont = inherit_font;
-
-       // Resolve against environment font information
-       while (par_offset != pit_type(pars.size())
-              && par_depth
-              && !tmpfont.resolved()) {
-               par_offset = outerHook(par_offset, pars);
-               if (par_offset != pit_type(pars.size())) {
-                       tmpfont.realize(pars[par_offset].layout().font);
-                       par_depth = pars[par_offset].getDepth();
-               }
-       }
-
-       return Font(tmpfont);
-}
-
-
-bool isFullyDeleted(ParagraphList const & pars)
-{
-       pit_type const pars_size = static_cast<pit_type>(pars.size());
-
-       // check all paragraphs
-       for (pit_type pit = 0; pit < pars_size; ++pit) {
-               if (!pars[pit].empty())   // prevent assertion failure
-                       if (!pars[pit].isDeleted(0, pars[pit].size()))
-                               return false;
-       }
-       return true;
-}
-
-
-void acceptChanges(ParagraphList & pars, BufferParams const & bparams)
-{
-       pit_type pars_size = static_cast<pit_type>(pars.size());
-
-       // first, accept changes within each individual paragraph
-       // (do not consider end-of-par)
-       for (pit_type pit = 0; pit < pars_size; ++pit) {
-               if (!pars[pit].empty())   // prevent assertion failure
-                       pars[pit].acceptChanges(0, pars[pit].size());
-       }
-
-       // next, accept imaginary end-of-par characters
-       for (pit_type pit = 0; pit < pars_size; ++pit) {
-               pos_type pos = pars[pit].size();
-
-               if (pars[pit].isInserted(pos)) {
-                       pars[pit].setChange(pos, Change(Change::UNCHANGED));
-               } else if (pars[pit].isDeleted(pos)) {
-                       if (pit == pars_size - 1) {
-                               // we cannot remove a par break at the end of the last
-                               // paragraph; instead, we mark it unchanged
-                               pars[pit].setChange(pos, Change(Change::UNCHANGED));
-                       } else {
-                               mergeParagraph(bparams, pars, pit);
-                               --pit;
-                               --pars_size;
-                       }
-               }
-       }
-}
-
-
-} // namespace lyx
diff --git a/src/paragraph_funcs.h b/src/paragraph_funcs.h
deleted file mode 100644 (file)
index 33e9a37..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-// -*- C++ -*-
-/**
- * \file paragraph_funcs.h
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author Lars Gullik Bjønnes
- *
- * Full author contact details are available in file CREDITS.
- */
-
-#ifndef PARAGRAPH_FUNCS_H
-#define PARAGRAPH_FUNCS_H
-
-#include "support/strfwd.h"
-#include "support/types.h"
-
-
-namespace lyx {
-
-class Buffer;
-class BufferParams;
-class Inset;
-class Font;
-class Paragraph;
-class ParagraphList;
-
-/**
- * This breaks a paragraph at the specified position.
- * The new paragraph will:
- * - Decrease depth by one (or change layout to default layout) when
- *    keep_layout == false  
- * - keep current depth and layout when keep_layout == true
- */
-void breakParagraph(BufferParams const & bparams,
-                   ParagraphList & paragraphs,
-                   pit_type par,
-                   pos_type pos,
-                   bool keep_layout);
-
-///
-void breakParagraphConservative(BufferParams const & bparams,
-                               ParagraphList & paragraphs,
-                               pit_type par,
-                               pos_type pos);
-
-/**
- * Append the next paragraph onto the tail of this one.
- * Be careful, this doesent make any check at all.
- */
-void mergeParagraph(BufferParams const & bparams,
-       ParagraphList & paragraphs, pit_type par);
-
-
-/// for the environments
-pit_type depthHook(pit_type par,
-       ParagraphList const & plist, depth_type depth);
-
-pit_type outerHook(pit_type par, ParagraphList const & plist);
-
-/// Is it the first par with same depth and layout?
-bool isFirstInSequence(pit_type par, ParagraphList const & plist);
-
-/** Set Label Width string to all paragraphs of the same layout
-    and depth in a sequence */
-void setLabelWidthStringToSequence(pit_type const par_offset,
-       ParagraphList & pars, docstring const & s);
-
-/** Check if the current paragraph is the last paragraph in a
-    proof environment */
-int getEndLabel(pit_type par, ParagraphList const & plist);
-
-/**
- * Get the font of the "environment" of paragraph \p par_offset in \p pars.
- * All font changes of the paragraph are relative to this font.
- */
-Font const outerFont(pit_type par_offset, ParagraphList const & pars);
-
-/// accept the changes within the complete ParagraphList
-void acceptChanges(ParagraphList & pars, BufferParams const & bparams);
-
-/// return true if the whole ParagraphList is deleted
-bool isFullyDeleted(ParagraphList const & pars);
-
-} // namespace lyx
-
-#endif // PARAGRAPH_FUNCS_H
index 930c44cd694638850efa04cbf0c1e44bf7209367..fffba14109228b38063645c8d53808ad8ebe3834 100644 (file)
@@ -29,7 +29,6 @@
 #include "MetricsInfo.h"
 #include "Paragraph.h"
 #include "ParagraphMetrics.h"
-#include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
 #include "TextMetrics.h"
 #include "VSpace.h"