X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffactory.cpp;h=653a12876108184617fdd2a0ce516ebdf5189b64;hb=9a31c1b90b0f08fbc3ac2a51f4aa179e879f8d4f;hp=b640c6b2ae09a60412fe9540254d538c0aca5be4;hpb=b95c17cfdd469aac842304073a56e3fb64bfe629;p=lyx.git diff --git a/src/factory.cpp b/src/factory.cpp index b640c6b2ae..653a128761 100644 --- a/src/factory.cpp +++ b/src/factory.cpp @@ -52,25 +52,27 @@ #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" #include "insets/InsetVSpace.h" #include "insets/InsetWrap.h" -#include "mathed/MathMacroTemplate.h" +#include "mathed/InsetMathMacroTemplate.h" #include "mathed/InsetMathHull.h" #include "frontends/alert.h" #include "support/debug.h" -#include "support/lstrings.h" #include "support/ExceptionMessage.h" - #include "support/lassert.h" +#include "support/lstrings.h" +#include "support/unique_ptr.h" #include + using namespace std; using namespace lyx::support; @@ -99,6 +101,22 @@ 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 if (name == "latexpar") + inp.kind = InsetSeparatorParams::LATEXPAR; + 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); @@ -137,7 +155,7 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) string const arg2 = cmd.getArg(1); if (arg1 != "deco") { LYXERR0("LFUN_IPAMACRO_INSERT: wrong argument"); - return 0; + return nullptr; } return new InsetIPADeco(buf, arg2); } @@ -158,7 +176,7 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) string arg = cmd.getArg(0); if (arg.empty()) { LYXERR0("argument-insert needs an argument!"); - return 0; + return nullptr; } return new InsetArgument(buf, arg); } @@ -194,7 +212,7 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) if (argument == "figure" || argument == "table") return new InsetWrap(buf, argument); lyxerr << "Non-existent wrapfig type: " << argument << endl; - return 0; + return nullptr; } case LFUN_INDEX_INSERT: { @@ -213,7 +231,7 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case LFUN_TABULAR_INSERT: { if (cmd.argument().empty()) - return 0; + return nullptr; istringstream ss(to_utf8(cmd.argument())); int r = 0, c = 0; ss >> r >> c; @@ -224,8 +242,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); @@ -241,7 +263,6 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case LFUN_INFO_INSERT: { InsetInfo * inset = new InsetInfo(buf, to_utf8(cmd.argument())); - inset->updateInfo(); return inset; } @@ -260,95 +281,95 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) switch (code) { case NO_CODE: lyxerr << "No such inset '" << name << "'."; - return 0; - + return nullptr; + case BIBITEM_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetBibitem(buf, icp); } - + case BIBTEX_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetBibtex(buf, icp); } - + case CITE_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetCitation(buf, icp); } - + case ERT_CODE: { return new InsetERT(buf, InsetERT::string2params(to_utf8(cmd.argument()))); } - + case EXTERNAL_CODE: { InsetExternalParams iep; InsetExternal::string2params(to_utf8(cmd.argument()), *buf, iep); - auto_ptr inset(new InsetExternal(buf)); + auto inset = make_unique(buf); inset->setBuffer(*buf); inset->setParams(iep); return inset.release(); } - + case GRAPHICS_CODE: { InsetGraphicsParams igp; InsetGraphics::string2params(to_utf8(cmd.argument()), *buf, igp); - auto_ptr inset(new InsetGraphics(buf)); + auto inset = make_unique(buf); inset->setParams(igp); return inset.release(); } - + case HYPERLINK_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetHyperlink(buf, icp); } - + case INCLUDE_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetInclude(buf, icp); } - + case INDEX_CODE: { docstring arg = cmd.argument(); return new InsetIndex(buf, InsetIndexParams(arg)); } - + case INDEX_PRINT_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetPrintIndex(buf, icp); } - + case LABEL_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetLabel(buf, icp); } - + case LINE_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetLine(buf, icp); } - + case LISTINGS_CODE: { InsetListingsParams par; InsetListings::string2params(to_utf8(cmd.argument()), par); return new InsetListings(buf, par); } - + case NOMENCL_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetNomencl(buf, icp); } - + case REF_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); @@ -366,13 +387,13 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) InsetSpace::string2params(to_utf8(cmd.argument()), isp); return new InsetSpace(isp); } - + case TOC_CODE: { InsetCommandParams icp(code); InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetTOC(buf, icp); } - + case VSPACE_CODE: { VSpace vspace; InsetVSpace::string2params(to_utf8(cmd.argument()), vspace); @@ -381,12 +402,12 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case PREVIEW_CODE: return new InsetPreview(buf); - + default: lyxerr << "Inset '" << name << "' not permitted with LFUN_INSET_INSERT." << endl; - return 0; - + return nullptr; + } } //end LFUN_INSET_INSERT @@ -457,7 +478,6 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) } return new InsetSpace(isp); } - break; default: break; @@ -470,11 +490,11 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) lyx_exit(1); } else if (message.type_ == WarningException) { Alert::warning(message.title_, message.details_); - return 0; + return nullptr; } } - return 0; + return nullptr; } @@ -493,13 +513,13 @@ Inset * readInset(Lexer & lex, Buffer * buf) if (lex.getString() != "\\begin_inset") LYXERR0("Buffer::readInset: Consistency check failed."); - auto_ptr inset; + unique_ptr inset; 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 @@ -511,15 +531,15 @@ Inset * readInset(Lexer & lex, Buffer * buf) lex.next(); string const insetType = lex.getString(); lex.pushToken(insetType); - + InsetCode const code = insetCode(insetType); - + //FIXME If we do the one massive switch, we cannot do this here, since //we do not know in advance that we're dealing with a command inset. //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: @@ -528,7 +548,7 @@ Inset * readInset(Lexer & lex, Buffer * buf) case BIBTEX_CODE: inset.reset(new InsetBibtex(buf, inscmd)); break; - case CITE_CODE: + case CITE_CODE: inset.reset(new InsetCitation(buf, inscmd)); break; case HYPERLINK_CODE: @@ -554,7 +574,7 @@ Inset * readInset(Lexer & lex, Buffer * buf) break; case REF_CODE: if (inscmd["name"].empty() && inscmd["reference"].empty()) - return 0; + return nullptr; inset.reset(new InsetRef(buf, inscmd)); break; case TOC_CODE: @@ -566,10 +586,10 @@ Inset * readInset(Lexer & lex, Buffer * buf) << "'" << endl; while (lex.isOK() && lex.getString() != "\\end_inset") lex.next(); - return 0; + return nullptr; } inset->setBuffer(*buf); - } else { + } 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 @@ -584,7 +604,7 @@ Inset * readInset(Lexer & lex, Buffer * buf) } else if (tmptok == "External") { inset.reset(new InsetExternal(buf)); } else if (tmptok == "FormulaMacro") { - inset.reset(new MathMacroTemplate(buf)); + inset.reset(new InsetMathMacroTemplate(buf)); } else if (tmptok == "Formula") { inset.reset(new InsetMathHull(buf)); } else if (tmptok == "Graphics") { @@ -623,16 +643,20 @@ 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, tmptok)); } else if (tmptok == "Float") { inset.reset(new InsetFloat(buf, string())); } else if (tmptok == "Wrap") { lex.next(); - string tmptok = lex.getString(); - inset.reset(new InsetWrap(buf, tmptok)); + string tmptok2 = lex.getString(); + inset.reset(new InsetWrap(buf, tmptok2)); } 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") { @@ -650,11 +674,11 @@ Inset * readInset(Lexer & lex, Buffer * buf) << "'" << endl; while (lex.isOK() && lex.getString() != "\\end_inset") lex.next(); - return 0; + return nullptr; } // Set the buffer reference for proper parsing of some insets - // (InsetCollapsable for example) + // (InsetCollapsible for example) inset->setBuffer(*buf); inset->read(lex); // Set again the buffer for insets that are created inside this inset