]> git.lyx.org Git - lyx.git/blobdiff - src/factory.cpp
Fix #9792 cyrtext and textcyr in the preamble of every document.
[lyx.git] / src / factory.cpp
index 858e53f138de902f1d0823688d070a588f03b9e1..b7320d0143bb6e1e49db03fec77f6580cc2f3a0a 100644 (file)
@@ -52,6 +52,7 @@
 #include "insets/InsetPreview.h"
 #include "insets/InsetRef.h"
 #include "insets/InsetScript.h"
+#include "insets/InsetSeparator.h"
 #include "insets/InsetSpace.h"
 #include "insets/InsetTabular.h"
 #include "insets/InsetTOC.h"
@@ -99,6 +100,20 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
                        return new InsetNewpage(inp);
                }
 
+               case LFUN_SEPARATOR_INSERT: {
+                       string const name = cmd.getArg(0);
+                       InsetSeparatorParams inp;
+                       if (name.empty() || name == "plain")
+                               inp.kind = InsetSeparatorParams::PLAIN;
+                       else if (name == "parbreak")
+                               inp.kind = InsetSeparatorParams::PARBREAK;
+                       else {
+                               lyxerr << "Wrong argument for LyX function 'separator-insert'." << endl;
+                               break;
+                       }
+                       return new InsetSeparator(inp);
+               }
+
                case LFUN_FLEX_INSERT: {
                        string s = cmd.getArg(0);
                        return new InsetFlex(buf, s);
@@ -154,8 +169,14 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
                case LFUN_MARGINALNOTE_INSERT:
                        return new InsetMarginal(buf);
 
-               case LFUN_ARGUMENT_INSERT:
-                       return new InsetArgument(buf);
+               case LFUN_ARGUMENT_INSERT: {
+                       string arg = cmd.getArg(0);
+                       if (arg.empty()) {
+                               LYXERR0("argument-insert needs an argument!");
+                               return 0;
+                       }
+                       return new InsetArgument(buf, arg);
+               }
 
                case LFUN_FLOAT_INSERT: {
                        string argument = to_utf8(cmd.argument());
@@ -218,8 +239,12 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd)
                        return new InsetTabular(buf, r, c);
                }
 
-               case LFUN_CAPTION_INSERT:
-                       return new InsetCaption(buf);
+               case LFUN_CAPTION_INSERT: {
+                       string arg = cmd.getArg(0);
+                       if (arg.empty())
+                               arg = "Standard";
+                       return new InsetCaption(buf, arg);
+               }
 
                case LFUN_INDEX_PRINT:  {
                        InsetCommandParams icp(INDEX_PRINT_CODE);
@@ -513,7 +538,7 @@ Inset * readInset(Lexer & lex, Buffer * buf)
                //Worst case, we could put it in each case below. Better, we could
                //pass the lexer to the constructor and let the params be built there.
                InsetCommandParams inscmd(code);
-               inscmd.read(lex);
+               inscmd.Read(lex, buf);
 
                switch (code) {
                        case BIBITEM_CODE:
@@ -564,12 +589,15 @@ Inset * readInset(Lexer & lex, Buffer * buf)
                }
                inset->setBuffer(*buf);
        } else { 
-               // FIXME This branch should be made to use inset codes as the preceding 
-               // branch does. Unfortunately, that will take some doing. It requires
-               // converting the representation of the insets in LyX files so that they
-               // use the inset names listed in Inset.cpp. Then, as above, the inset names
-               // can be translated to inset codes using insetCode(). And the insets'
-               // write() routines should use insetName() rather than hardcoding it.
+               // FIXME This branch should be made to use inset codes
+               // as the preceding branch does. Unfortunately, that
+               // will take some doing. It requires converting the
+               // representation of the insets in LyX files so that
+               // they use the inset names listed in Inset.cpp. Then,
+               // as above, the inset names can be translated to
+               // inset codes using insetCode(). And the insets'
+               // write() routines should use insetName() rather than
+               // hardcoding it.
                if (tmptok == "Quotes") {
                        inset.reset(new InsetQuotes(buf));
                } else if (tmptok == "External") {
@@ -614,8 +642,10 @@ Inset * readInset(Lexer & lex, Buffer * buf)
                        inset.reset(new InsetNewpage);
                } else if (tmptok == "Newline") {
                        inset.reset(new InsetNewline);
+               } else if (tmptok == "Separator") {
+                       inset.reset(new InsetSeparator);
                } else if (tmptok == "Argument") {
-                       inset.reset(new InsetArgument(buf));
+                       inset.reset(new InsetArgument(buf, tmptok));
                } else if (tmptok == "Float") {
                        inset.reset(new InsetFloat(buf, string()));
                } else if (tmptok == "Wrap") {
@@ -623,7 +653,9 @@ Inset * readInset(Lexer & lex, Buffer * buf)
                        string tmptok = lex.getString();
                        inset.reset(new InsetWrap(buf, tmptok));
                } else if (tmptok == "Caption") {
-                       inset.reset(new InsetCaption(buf));
+                       lex.eatLine();
+                       string s = lex.getString();
+                       inset.reset(new InsetCaption(buf, s));
                } else if (tmptok == "Index") {
                        inset.reset(new InsetIndex(buf, InsetIndexParams()));
                } else if (tmptok == "FloatList") {