]> git.lyx.org Git - lyx.git/blobdiff - src/factory.cpp
Change the "empty layout" to the "plain layout", to try to avoid confusion.
[lyx.git] / src / factory.cpp
index 8e562bb75944ea5912f33fab750f3bc06ad5cbbd..eba16dcc30bf7782fa4838363e8c1032b6feba0f 100644 (file)
@@ -25,7 +25,6 @@
 #include "insets/InsetCaption.h"
 #include "insets/InsetCitation.h"
 #include "insets/InsetFlex.h"
-#include "insets/InsetEnvironment.h"
 #include "insets/InsetERT.h"
 #include "insets/InsetListings.h"
 #include "insets/InsetExternal.h"
@@ -40,6 +39,8 @@
 #include "insets/InsetLabel.h"
 #include "insets/InsetLine.h"
 #include "insets/InsetMarginal.h"
+#include "insets/InsetNewline.h"
+#include "insets/InsetNewpage.h"
 #include "insets/InsetNote.h"
 #include "insets/InsetBox.h"
 #include "insets/InsetBranch.h"
@@ -62,7 +63,7 @@
 #include "support/lstrings.h"
 #include "support/ExceptionMessage.h"
 
-#include <boost/assert.hpp>
+#include "support/lassert.h"
 
 #include <sstream>
 
@@ -85,21 +86,23 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                case LFUN_LINE_INSERT:
                        return new InsetLine;
 
-               case LFUN_NEWPAGE_INSERT:
-                       return new InsetNewpage;
-
-               case LFUN_PAGEBREAK_INSERT:
-                       return new InsetPagebreak;
-
-               case LFUN_CLEARPAGE_INSERT:
-                       return new InsetClearPage;
-
-               case LFUN_CLEARDOUBLEPAGE_INSERT:
-                       return new InsetClearDoublePage;
+               case LFUN_NEWPAGE_INSERT: {
+                       string const name = cmd.getArg(0);
+                       InsetNewpageParams inp;
+                       if (name.empty() || name == "newpage")
+                               inp.kind = InsetNewpageParams::NEWPAGE;
+                       else if (name == "pagebreak")
+                               inp.kind = InsetNewpageParams::PAGEBREAK;
+                       else if (name == "clearpage")
+                               inp.kind = InsetNewpageParams::CLEARPAGE;
+                       else if (name == "cleardoublepage")
+                               inp.kind = InsetNewpageParams::CLEARDOUBLEPAGE;
+                       return new InsetNewpage(inp);
+               }
 
                case LFUN_FLEX_INSERT: {
                        string s = cmd.getArg(0);
-                       return new InsetFlex(buf, buf.params().documentClassPtr(), s);
+                       return new InsetFlex(buf, s);
                }
 
                case LFUN_NOTE_INSERT: {
@@ -138,9 +141,6 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                case LFUN_OPTIONAL_INSERT:
                        return new InsetOptArg(buf);
 
-               case LFUN_BIBITEM_INSERT:
-                       return new InsetBibitem(InsetCommandParams(BIBITEM_CODE));
-
                case LFUN_FLOAT_INSERT: {
                        // check if the float type exists
                        string const argument = to_utf8(cmd.argument());
@@ -154,7 +154,7 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                        string const argument = to_utf8(cmd.argument());
                        if (params.documentClass().floats().typeExist(argument)) {
                                auto_ptr<InsetFloat> p(new InsetFloat(buf, argument));
-                               p->wide(true, params);
+                               p->setWide(true, params);
                                return p.release();
                        }
                        lyxerr << "Non-existent float type: " << argument << endl;
@@ -203,11 +203,11 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                case LFUN_TOC_INSERT:
                        return new InsetTOC(InsetCommandParams(TOC_CODE));
 
-               case LFUN_ENVIRONMENT_INSERT:
-                       return new InsetEnvironment(buf, cmd.argument());
-
-               case LFUN_INFO_INSERT:
-                       return new InsetInfo(buf, to_utf8(cmd.argument()));
+               case LFUN_INFO_INSERT: {
+                       InsetInfo * inset = new InsetInfo(buf, to_utf8(cmd.argument()));
+                       inset->updateInfo();
+                       return inset;
+               }
 
                case LFUN_INSET_INSERT: {
                        string const name = cmd.getArg(0);
@@ -219,59 +219,59 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                        
                        case BIBITEM_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
-                               return new InsetBibitem(icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
+                               return new InsetBibitem(buf, icp);
                        }
                        
                        case BIBTEX_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
-                               return new InsetBibtex(icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
+                               return new InsetBibtex(buf, icp);
                        }
                        
                        case CITE_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
                                return new InsetCitation(icp);
                        }
                        
                        case ERT_CODE: {
-                               InsetCollapsable::CollapseStatus st;
-                               InsetERTMailer::string2params(to_utf8(cmd.argument()), st);
-                               return new InsetERT(buf, st);
+                               return new InsetERT(buf,
+                                       InsetERT::string2params(to_utf8(cmd.argument())));
                        }
                                
                        case LISTINGS_CODE: {
                                InsetListingsParams par;
-                               InsetListingsMailer::string2params(to_utf8(cmd.argument()), par);
+                               InsetListings::string2params(to_utf8(cmd.argument()), par);
                                return new InsetListings(buf, par);
                        }
                        
                        case EXTERNAL_CODE: {
                                InsetExternalParams iep;
-                               InsetExternalMailer::string2params(to_utf8(cmd.argument()), buf, iep);
-                               auto_ptr<InsetExternal> inset(new InsetExternal);
+                               InsetExternal::string2params(to_utf8(cmd.argument()), buf, iep);
+                               auto_ptr<InsetExternal> inset(new InsetExternal(buf));
+                               inset->setBuffer(buf);
                                inset->setParams(iep);
                                return inset.release();
                        }
                        
                        case GRAPHICS_CODE: {
                                InsetGraphicsParams igp;
-                               InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buf, igp);
-                               auto_ptr<InsetGraphics> inset(new InsetGraphics);
+                               InsetGraphics::string2params(to_utf8(cmd.argument()), buf, igp);
+                               auto_ptr<InsetGraphics> inset(new InsetGraphics(buf));
                                inset->setParams(igp);
                                return inset.release();
                        }
                        
                        case HYPERLINK_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
                                return new InsetHyperlink(icp);
                        }
                        
                        case INCLUDE_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
                                return new InsetInclude(icp);
                        }
                        
@@ -280,37 +280,37 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                        
                        case NOMENCL_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, lyx::to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, lyx::to_utf8(cmd.argument()), icp);
                                return new InsetNomencl(icp);
                        }
                        
                        case LABEL_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
                                return new InsetLabel(icp);
                        }
                        
                        case REF_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
                                return new InsetRef(buf, icp);
                        }
 
                        case SPACE_CODE: {
                                InsetSpaceParams isp;
-                               InsetSpaceMailer::string2params(to_utf8(cmd.argument()), isp);
+                               InsetSpace::string2params(to_utf8(cmd.argument()), isp);
                                return new InsetSpace(isp);
                        }
                        
                        case TOC_CODE: {
                                InsetCommandParams icp(code);
-                               InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp);
+                               InsetCommand::string2params(name, to_utf8(cmd.argument()), icp);
                                return new InsetTOC(icp);
                        }
                        
                        case VSPACE_CODE: {
                                VSpace vspace;
-                               InsetVSpaceMailer::string2params(to_utf8(cmd.argument()), vspace);
+                               InsetVSpace::string2params(to_utf8(cmd.argument()), vspace);
                                return new InsetVSpace(vspace);
                        }
                        
@@ -348,6 +348,8 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                                isp.kind = InsetSpaceParams::NEGTHIN;
                        else if (name == "hfill")
                                isp.kind = InsetSpaceParams::HFILL;
+                       else if (name == "hfill*")
+                               isp.kind = InsetSpaceParams::HFILL_PROTECTED;
                        else if (name == "dotfill")
                                isp.kind = InsetSpaceParams::DOTFILL;
                        else if (name == "hrulefill")
@@ -386,17 +388,17 @@ Inset * createInsetHelper(Buffer & buf, FuncRequest const & cmd)
                if (message.type_ == ErrorException) {
                        // This should never happen!
                        Alert::error(message.title_, message.details_);
-                       LyX::cref().exit(1);
+                       lyx_exit(1);
                } else if (message.type_ == WarningException) {
                        Alert::warning(message.title_, message.details_);
                        return 0;
                }
        }
 
-
        return 0;
 }
 
+
 Inset * createInset(Buffer & buf, FuncRequest const & cmd)
 {
        Inset * inset = createInsetHelper(buf, cmd);
@@ -405,28 +407,27 @@ Inset * createInset(Buffer & buf, FuncRequest const & cmd)
        return inset;
 }
 
+
 Inset * readInset(Lexer & lex, Buffer const & buf)
 {
        // consistency check
-       if (lex.getString() != "\\begin_inset") {
-               lyxerr << "Buffer::readInset: Consistency check failed."
-                      << endl;
-       }
+       if (lex.getString() != "\\begin_inset")
+               LYXERR0("Buffer::readInset: Consistency check failed.");
 
        auto_ptr<Inset> inset;
 
-       lex.next();
-       string tmptok = lex.getString();
+       string tmptok;
+       lex >> tmptok;
 
        // test the different insets
        
-       //FIXME It would be better if we did not have this branch and could
-       //just do one massive switch for all insets. But at present, it's easier 
-       //to do it this way, and we can't do the massive switch until the conversion 
-       //mentioned below. 
-       //Note that if we do want to do a single switch, we need to remove
-       //this "CommandInset" line---or replace it with a single "InsetType" line
-       //that would be used in all insets.
+       // FIXME It would be better if we did not have this branch and could
+       // just do one massive switch for all insets. But at present, it's
+       // easier to do it this way, and we can't do the massive switch until
+       // the conversion mentioned below.  Note that if we do want to do a
+       // single switch, we need to remove this "CommandInset" line---or
+       // replace it with a single "InsetType" line that would be used in all
+       // insets.
        if (tmptok == "CommandInset") {
                lex.next();
                string const insetType = lex.getString();
@@ -443,10 +444,10 @@ Inset * readInset(Lexer & lex, Buffer const & buf)
 
                switch (code) {
                        case BIBITEM_CODE:
-                               inset.reset(new InsetBibitem(inscmd));
+                               inset.reset(new InsetBibitem(buf, inscmd));
                                break;
                        case BIBTEX_CODE:
-                               inset.reset(new InsetBibtex(inscmd));
+                               inset.reset(new InsetBibtex(buf, inscmd));
                                break;
                        case CITE_CODE: 
                                inset.reset(new InsetCitation(inscmd));
@@ -470,8 +471,9 @@ Inset * readInset(Lexer & lex, Buffer const & buf)
                                inset.reset(new InsetPrintNomencl(inscmd));
                                break;
                        case REF_CODE:
-                               if (!inscmd["name"].empty() || !inscmd["reference"].empty())
-                                       inset.reset(new InsetRef(buf, inscmd));
+                               if (inscmd["name"].empty() && inscmd["reference"].empty())
+                                       return 0;
+                               inset.reset(new InsetRef(buf, inscmd));
                                break;
                        case TOC_CODE:
                                inset.reset(new InsetTOC(inscmd));
@@ -495,13 +497,13 @@ Inset * readInset(Lexer & lex, Buffer const & buf)
                if (tmptok == "Quotes") {
                        inset.reset(new InsetQuotes);
                } else if (tmptok == "External") {
-                       inset.reset(new InsetExternal);
+                       inset.reset(new InsetExternal(const_cast<Buffer &>(buf)));
                } else if (tmptok == "FormulaMacro") {
                        inset.reset(new MathMacroTemplate);
                } else if (tmptok == "Formula") {
                        inset.reset(new InsetMathHull);
                } else if (tmptok == "Graphics") {
-                       inset.reset(new InsetGraphics);
+                       inset.reset(new InsetGraphics(const_cast<Buffer &>(buf)));
                } else if (tmptok == "Note") {
                        inset.reset(new InsetNote(buf, tmptok));
                } else if (tmptok == "Box") {
@@ -509,22 +511,17 @@ Inset * readInset(Lexer & lex, Buffer const & buf)
                } else if (tmptok == "Flex") {
                        lex.next();
                        string s = lex.getString();
-                       inset.reset(new InsetFlex(buf, 
-                               buf.params().documentClassPtr(), s));
+                       inset.reset(new InsetFlex(buf, s));
                } else if (tmptok == "Branch") {
-                       inset.reset(new InsetBranch(buf,
-                                                   InsetBranchParams()));
-               } else if (tmptok == "Environment") {
-                       lex.next();
-                       inset.reset(new InsetEnvironment(buf, lex.getDocString()));
+                       inset.reset(new InsetBranch(buf, InsetBranchParams()));
                } else if (tmptok == "ERT") {
                        inset.reset(new InsetERT(buf));
                } else if (tmptok == "listings") {
                        inset.reset(new InsetListings(buf));
-               } else if (tmptok == "Space") {
+               } else if (tmptok == "space") {
                        inset.reset(new InsetSpace);
                } else if (tmptok == "Tabular") {
-                       inset.reset(new InsetTabular(buf));
+                       inset.reset(new InsetTabular(const_cast<Buffer &>(buf)));
                } else if (tmptok == "Text") {
                        inset.reset(new InsetText(buf));
                } else if (tmptok == "VSpace") {
@@ -533,6 +530,10 @@ Inset * readInset(Lexer & lex, Buffer const & buf)
                        inset.reset(new InsetFoot(buf));
                } else if (tmptok == "Marginal") {
                        inset.reset(new InsetMarginal(buf));
+               } else if (tmptok == "Newpage") {
+                       inset.reset(new InsetNewpage);
+               } else if (tmptok == "Newline") {
+                       inset.reset(new InsetNewline);
                } else if (tmptok == "OptArg") {
                        inset.reset(new InsetOptArg(buf));
                } else if (tmptok == "Float") {
@@ -543,10 +544,6 @@ Inset * readInset(Lexer & lex, Buffer const & buf)
                        lex.next();
                        string tmptok = lex.getString();
                        inset.reset(new InsetWrap(buf, tmptok));
-#if 0
-               } else if (tmptok == "Theorem") {
-                       inset.reset(new InsetList);
-#endif
                } else if (tmptok == "Caption") {
                        inset.reset(new InsetCaption(buf));
                } else if (tmptok == "Index") {