]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
partial framebox support
[lyx.git] / src / paragraph.C
index 8b4a2e1ed7318eb3d8f53cc12a48ad04344ee07f..fe8cf4f368657cfa9632ceb52f6f3a82215597b4 100644 (file)
@@ -32,6 +32,7 @@
 #include "insets/insetinclude.h"
 #include "insets/insetbib.h"
 #include "insets/insettext.h"
+#include "insets/insetoptarg.h"
 
 #include "support/filetools.h"
 #include "support/lstrings.h"
@@ -163,9 +164,9 @@ Paragraph::~Paragraph()
 }
 
 
-void Paragraph::writeFile(Buffer const * buf, ostream & os,
+void Paragraph::write(Buffer const * buf, ostream & os,
                          BufferParams const & bparams,
-                         depth_type dth) const
+                         depth_type dth) const
 {
        // The beginning or end of a deeper (i.e. nested) area?
        if (dth != params().depth()) {
@@ -317,10 +318,6 @@ void Paragraph::writeFile(Buffer const * buf, ostream & os,
                        break;
                }
        }
-
-       // now write the next paragraph
-       if (next_)
-               next_->writeFile(buf, os, bparams, dth);
 }
 
 
@@ -736,79 +733,6 @@ Paragraph const * Paragraph::previous() const
 #endif
 
 
-void Paragraph::breakParagraph(BufferParams const & bparams,
-                                 pos_type pos,
-                                 int flag)
-{
-       // create a new paragraph
-       Paragraph * tmp = new Paragraph(this);
-       tmp->layout(bparams.getLyXTextClass().defaultLayout());
-       // remember to set the inset_owner
-       tmp->setInsetOwner(inInset());
-
-       // this is an idea for a more userfriendly layout handling, I will
-       // see what the users say
-
-       // layout stays the same with latex-environments
-       if (flag) {
-               tmp->layout(layout());
-               tmp->setLabelWidthString(params().labelWidthString());
-       }
-
-       bool isempty = (layout()->keepempty && empty());
-
-       if (!isempty && (size() > pos || empty() || flag == 2)) {
-               tmp->layout(layout());
-               tmp->params().align(params().align());
-               tmp->setLabelWidthString(params().labelWidthString());
-
-               tmp->params().lineBottom(params().lineBottom());
-               params().lineBottom(false);
-               tmp->params().pagebreakBottom(params().pagebreakBottom());
-               params().pagebreakBottom(false);
-               tmp->params().spaceBottom(params().spaceBottom());
-               params().spaceBottom(VSpace(VSpace::NONE));
-
-               tmp->params().depth(params().depth());
-               tmp->params().noindent(params().noindent());
-
-               // copy everything behind the break-position
-               // to the new paragraph
-               pos_type pos_end = size() - 1;
-               pos_type i = pos;
-               pos_type j = pos;
-               for (; i <= pos_end; ++i) {
-                       cutIntoMinibuffer(bparams, i);
-                       if (tmp->insertFromMinibuffer(j - pos))
-                               ++j;
-               }
-               for (i = pos_end; i >= pos; --i) {
-                       erase(i);
-               }
-       }
-
-       // just an idea of me
-       if (!isempty && !pos) {
-               tmp->params().lineTop(params().lineTop());
-               tmp->params().pagebreakTop(params().pagebreakTop());
-               tmp->params().spaceTop(params().spaceTop());
-               tmp->bibkey = bibkey;
-
-               bibkey = 0;
-               params().clear();
-
-               layout(bparams.getLyXTextClass().defaultLayout());
-
-               // layout stays the same with latex-environments
-               if (flag) {
-                       layout(tmp->layout());
-                       setLabelWidthString(tmp->params().labelWidthString());
-                       params().depth(tmp->params().depth());
-               }
-       }
-}
-
-
 void Paragraph::makeSameLayout(Paragraph const * par)
 {
        layout(par->layout());
@@ -842,66 +766,6 @@ bool Paragraph::hasSameLayout(Paragraph const * par) const
 }
 
 
-void Paragraph::breakParagraphConservative(BufferParams const & bparams,
-                                          pos_type pos)
-{
-       // create a new paragraph
-       Paragraph * tmp = new Paragraph(this);
-       tmp->makeSameLayout(this);
-
-       // When can pos > Last()?
-       // I guess pos == Last() is possible.
-       if (size() > pos) {
-               // copy everything behind the break-position to the new
-               // paragraph
-               pos_type pos_end = size() - 1;
-
-               //pos_type i = pos;
-               //pos_type j = pos;
-               for (pos_type i = pos, j = pos; i <= pos_end; ++i) {
-                       cutIntoMinibuffer(bparams, i);
-                       if (tmp->insertFromMinibuffer(j - pos))
-                               ++j;
-               }
-
-               for (pos_type k = pos_end; k >= pos; --k) {
-                       erase(k);
-               }
-       }
-}
-
-
-// Be carefull, this does not make any check at all.
-// This method has wrong name, it combined this par with the next par.
-// In that sense it is the reverse of break paragraph. (Lgb)
-void Paragraph::pasteParagraph(BufferParams const & bparams)
-{
-       // copy the next paragraph to this one
-       Paragraph * the_next = next();
-
-       // first the DTP-stuff
-       params().lineBottom(the_next->params().lineBottom());
-       params().spaceBottom(the_next->params().spaceBottom());
-       params().pagebreakBottom(the_next->params().pagebreakBottom());
-
-       pos_type pos_end = the_next->pimpl_->size() - 1;
-       pos_type pos_insert = size();
-
-       // ok, now copy the paragraph
-       for (pos_type i = 0, j = 0; i <= pos_end; ++i) {
-               the_next->cutIntoMinibuffer(bparams, i);
-               if (insertFromMinibuffer(pos_insert + j))
-                       ++j;
-       }
-
-       // delete the next paragraph
-       Paragraph * ppar = the_next->previous_;
-       Paragraph * npar = the_next->next_;
-       delete the_next;
-       ppar->next(npar);
-}
-
-
 int Paragraph::getEndLabel() const
 {
        Paragraph const * par = this;
@@ -1092,6 +956,23 @@ int Paragraph::getPositionOfInset(Inset const * inset) const
        return -1;
 }
 
+namespace {
+
+InsetOptArg * optArgInset(Paragraph const & par)
+{
+       // Find the entry.
+       InsetList::iterator it = par.insetlist.begin();
+       InsetList::iterator end = par.insetlist.end();
+       for (; it != end; ++it) {
+               Inset * ins = it.getInset();
+               if (ins->lyxCode() == Inset::OPTARG_CODE) {
+                       return static_cast<InsetOptArg *>(ins);
+               }
+       }
+       return 0;
+}
+
+} // end namespace
 
 Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
                                 BufferParams const & bparams,
@@ -1190,8 +1071,16 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
        switch (style->latextype) {
        case LATEX_COMMAND:
                os << '\\'
-                  << style->latexname()
-                  << style->latexparam();
+                  << style->latexname();
+
+               // Separate handling of optional argument inset.
+               if (style->optionalargs == 1) {
+                       InsetOptArg * it = optArgInset(*this);
+                       if (it != 0)
+                               it->latexOptional(buf, os, false, false);
+               }
+               else
+                       os << style->latexparam();
                break;
        case LATEX_ITEM_ENVIRONMENT:
                if (bibkey) {