X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffactory.cpp;h=9fdc37da625b8432861c2ce93b19c0d926762c2d;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=a1a375f9b56004a637afe1ffa56baca9dcc3865c;hpb=0e7ab29f49c899cb4fa3b9134cca238ff540a48f;p=lyx.git diff --git a/src/factory.cpp b/src/factory.cpp index a1a375f9b5..9fdc37da62 100644 --- a/src/factory.cpp +++ b/src/factory.cpp @@ -38,6 +38,8 @@ #include "insets/InsetInclude.h" #include "insets/InsetIndex.h" #include "insets/InsetInfo.h" +#include "insets/InsetIPA.h" +#include "insets/InsetIPAMacro.h" #include "insets/InsetLabel.h" #include "insets/InsetLine.h" #include "insets/InsetMarginal.h" @@ -49,6 +51,8 @@ #include "insets/InsetPhantom.h" #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" @@ -61,13 +65,14 @@ #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; @@ -96,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); @@ -129,6 +150,16 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) return new InsetPhantom(buf, arg); } + case LFUN_IPAMACRO_INSERT: { + string const arg1 = cmd.getArg(0); + string const arg2 = cmd.getArg(1); + if (arg1 != "deco") { + LYXERR0("LFUN_IPAMACRO_INSERT: wrong argument"); + return 0; + } + return new InsetIPADeco(buf, arg2); + } + case LFUN_ERT_INSERT: return new InsetERT(buf); @@ -141,14 +172,37 @@ 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: - return new InsetFloat(buf, to_utf8(cmd.argument())); + case LFUN_FLOAT_INSERT: { + string argument = to_utf8(cmd.argument()); + if (!argument.empty()) { + if (!contains(argument, "sideways")) { + if (!contains(argument, "wide")) + argument += "\nwide false"; + argument += "\nsideways false"; + } + } + return new InsetFloat(buf, argument); + } case LFUN_FLOAT_WIDE_INSERT: { - InsetFloat * fl = new InsetFloat(buf, to_utf8(cmd.argument())); + string argument = to_utf8(cmd.argument()); + if (!argument.empty()) { + if (!contains(argument, "sideways")) { + if (!contains(argument, "wide")) + argument += "\nwide true"; + argument += "\nsideways false"; + } + } + InsetFloat * fl = new InsetFloat(buf, argument); fl->setWide(true); return fl; } @@ -166,6 +220,9 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) return new InsetIndex(buf, InsetIndexParams(arg)); } + case LFUN_IPA_INSERT: + return new InsetIPA(buf); + case LFUN_NOMENCL_INSERT: { InsetCommandParams icp(NOMENCL_CODE); icp["symbol"] = cmd.argument(); @@ -185,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); @@ -200,9 +261,6 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) return new InsetPrintNomencl(buf, icp); } - case LFUN_TOC_INSERT: - return new InsetTOC(buf, InsetCommandParams(TOC_CODE)); - case LFUN_INFO_INSERT: { InsetInfo * inset = new InsetInfo(buf, to_utf8(cmd.argument())); inset->updateInfo(); @@ -212,6 +270,12 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case LFUN_PREVIEW_INSERT: return new InsetPreview(buf); + case LFUN_SCRIPT_INSERT: { + InsetScriptParams isp; + InsetScript::string2params("script script " + to_utf8(cmd.argument()), isp); + return new InsetScript(buf, isp); + } + case LFUN_INSET_INSERT: { string const name = cmd.getArg(0); InsetCode code = insetCode(name); @@ -222,19 +286,19 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case BIBITEM_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetBibitem(buf, icp); } case BIBTEX_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetBibtex(buf, icp); } case CITE_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetCitation(buf, icp); } @@ -246,7 +310,7 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) 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(); @@ -255,20 +319,20 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) 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(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetHyperlink(buf, icp); } case INCLUDE_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetInclude(buf, icp); } @@ -279,19 +343,19 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case INDEX_PRINT_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetPrintIndex(buf, icp); } case LABEL_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetLabel(buf, icp); } case LINE_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetLine(buf, icp); } @@ -303,16 +367,22 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case NOMENCL_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetNomencl(buf, icp); } case REF_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetRef(buf, icp); } + case SCRIPT_CODE: { + InsetScriptParams isp; + InsetScript::string2params(to_utf8(cmd.argument()), isp); + return new InsetScript(buf, isp); + } + case SPACE_CODE: { InsetSpaceParams isp; InsetSpace::string2params(to_utf8(cmd.argument()), isp); @@ -321,7 +391,7 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) case TOC_CODE: { InsetCommandParams icp(code); - InsetCommand::string2params(name, to_utf8(cmd.argument()), icp); + InsetCommand::string2params(to_utf8(cmd.argument()), icp); return new InsetTOC(buf, icp); } @@ -355,6 +425,8 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) isp.kind = InsetSpaceParams::NORMAL; else if (name == "protected") isp.kind = InsetSpaceParams::PROTECTED; + else if (name == "visible") + isp.kind = InsetSpaceParams::VISIBLE; else if (name == "thin") isp.kind = InsetSpaceParams::THIN; else if (isp.math && name == "med") @@ -371,9 +443,9 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) isp.kind = InsetSpaceParams::ENSKIP; else if (name == "negthinspace") isp.kind = InsetSpaceParams::NEGTHIN; - else if (isp.math && name == "negmedspace") + else if (name == "negmedspace") isp.kind = InsetSpaceParams::NEGMEDIUM; - else if (isp.math && name == "negthickspace") + else if (name == "negthickspace") isp.kind = InsetSpaceParams::NEGTHICK; else if (name == "hfill") isp.kind = InsetSpaceParams::HFILL; @@ -443,7 +515,7 @@ 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; @@ -469,7 +541,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: @@ -519,13 +591,16 @@ Inset * readInset(Lexer & lex, Buffer * buf) return 0; } 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. + } 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. if (tmptok == "Quotes") { inset.reset(new InsetQuotes(buf)); } else if (tmptok == "External") { @@ -552,6 +627,8 @@ Inset * readInset(Lexer & lex, Buffer * buf) inset.reset(new InsetERT(buf)); } else if (tmptok == "listings") { inset.reset(new InsetListings(buf)); + } else if (tmptok == "script") { + inset.reset(new InsetScript(buf)); } else if (tmptok == "space") { inset.reset(new InsetSpace); } else if (tmptok == "Tabular") { @@ -568,8 +645,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") { @@ -577,13 +656,19 @@ 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") { inset.reset(new InsetFloatList(buf)); } else if (tmptok == "Info") { inset.reset(new InsetInfo(buf)); + } else if (tmptok == "IPA") { + inset.reset(new InsetIPA(buf)); + } else if (tmptok == "IPADeco") { + inset.reset(new InsetIPADeco(buf, tmptok)); } else if (tmptok == "Preview") { inset.reset(new InsetPreview(buf)); } else {