]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
Rob's latest and greatest dialog tweaking.
[lyx.git] / src / paragraph.C
index f63f2c1be024e7df9853b0162c4b26980e907c36..e425d46f4d0f06f20ea99543b65ef63e0d0ce124 100644 (file)
@@ -29,9 +29,8 @@
 #include "ParameterStruct.h"
 #include "gettext.h"
 
-#include "insets/insetinclude.h"
 #include "insets/insetbib.h"
-#include "insets/insettext.h"
+#include "insets/insetoptarg.h"
 
 #include "support/filetools.h"
 #include "support/lstrings.h"
@@ -165,7 +164,7 @@ Paragraph::~Paragraph()
 
 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()) {
@@ -253,11 +252,7 @@ void Paragraph::write(Buffer const * buf, ostream & os,
                // Write font changes
                LyXFont font2 = getFontSettings(bparams, i);
                if (font2 != font1) {
-#ifndef INHERIT_LANGUAGE
                        font2.lyxWriteChanges(font1, os);
-#else
-                       font2.lyxWriteChanges(font1, bparams.language, os);
-#endif
                        column = 0;
                        font1 = font2;
                }
@@ -475,10 +470,6 @@ LyXFont const Paragraph::getFontSettings(BufferParams const & bparams,
                retfont = getFontSettings(bparams, pos - 1);
        } else
                retfont = LyXFont(LyXFont::ALL_INHERIT, getParLanguage(bparams));
-#ifdef INHERIT_LANGUAGE
-       if (retfont.language() == inherit_language)
-               retfont.setLanguage(bparams.language);
-#endif
 
        return retfont;
 }
@@ -519,11 +510,7 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams,
                layoutfont = lout->font;
 
        LyXFont tmpfont = getFontSettings(bparams, pos);
-#ifndef INHERIT_LANGUAGE
        tmpfont.realize(layoutfont);
-#else
-       tmpfont.realize(layoutfont, bparams.language);
-#endif
 
        return pimpl_->realizeFont(tmpfont, bparams);
 }
@@ -732,79 +719,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());
@@ -838,66 +752,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;
@@ -1088,6 +942,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,
@@ -1186,8 +1057,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) {
@@ -1799,17 +1678,7 @@ Language const *
 Paragraph::getParLanguage(BufferParams const & bparams) const
 {
        if (!empty()) {
-#ifndef INHERIT_LANGUAGE
                return getFirstFontSettings().language();
-#else
-               Language const * lang = getFirstFontSettings().language();
-#ifdef WITH_WARNINGS
-#warning We should make this somewhat better, any ideas? (Jug)
-#endif
-               if (lang == inherit_language || lang == ignore_language)
-                       lang = bparams.language;
-               return lang;
-#endif
        } else if (previous_)
                return previous_->getParLanguage(bparams);
        else
@@ -1848,9 +1717,6 @@ bool Paragraph::isMultiLingual(BufferParams const & bparams)
        for (; cit != end; ++cit)
                if (cit->font().language() != ignore_language &&
                    cit->font().language() != latex_language &&
-#ifdef INHERIT_LANGUAGE
-                       cit->font().language() != inherit_language &&
-#endif
                        cit->font().language() != doc_language)
                        return true;
        return false;