X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffactory.C;h=c67e34ac28b88c81b1d6222fd9bf361a68b58642;hb=da65e2b7fbe29c5bca2812a56d5bbdb7efb702e5;hp=f5a79b3ec543ba7d9fae794743371a4f566aac82;hpb=70d0ba900118ac7e253c1e1969fd7a3d64ec8e03;p=lyx.git diff --git a/src/factory.C b/src/factory.C index f5a79b3ec5..c67e34ac28 100644 --- a/src/factory.C +++ b/src/factory.C @@ -52,15 +52,16 @@ #include "insets/inseturl.h" #include "insets/insetvspace.h" #include "insets/insetwrap.h" -#include "mathed/formulamacro.h" -#include "mathed/formula.h" -#include "frontends/Dialogs.h" -#include "frontends/LyXView.h" +#include "mathed/math_macrotemplate.h" +#include "mathed/math_hullinset.h" + #include "support/lstrings.h" -#include "support/std_sstream.h" #include +#include + +#include using lyx::support::compare_ascii_no_case; @@ -69,70 +70,74 @@ using std::endl; using std::string; -InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) +InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) { BufferParams const & params = bv->buffer()->params(); switch (cmd.action) { - case LFUN_HFILL: + case LFUN_HFILL_INSERT: return new InsetHFill; - case LFUN_INSERT_LINE: + case LFUN_LINE_INSERT: return new InsetLine; - case LFUN_INSERT_PAGEBREAK: + case LFUN_PAGEBREAK_INSERT: return new InsetPagebreak; - case LFUN_INSERT_CHARSTYLE: { + case LFUN_CHARSTYLE_INSERT: { string s = cmd.getArg(0); - CharStyles::iterator found_cs = params.getLyXTextClass().charstyle(s); - return new InsetCharStyle(params, found_cs); + LyXTextClass tclass = params.getLyXTextClass(); + CharStyles::iterator found_cs = tclass.charstyle(s); + if (found_cs != tclass.charstyles().end()) + return new InsetCharStyle(params, found_cs); + else + return new InsetCharStyle(params, s); } - case LFUN_INSERT_NOTE: { + case LFUN_NOTE_INSERT: { string arg = cmd.getArg(0); if (arg.empty()) arg = "Note"; return new InsetNote(params, arg); } - case LFUN_INSERT_BOX: { + case LFUN_BOX_INSERT: { string arg = cmd.getArg(0); if (arg.empty()) arg = "Boxed"; return new InsetBox(params, arg); } - case LFUN_INSERT_BRANCH: { + case LFUN_BRANCH_INSERT: { string arg = cmd.getArg(0); if (arg.empty()) arg = "none"; return new InsetBranch(params, InsetBranchParams(arg)); } - case LFUN_INSET_ERT: + case LFUN_ERT_INSERT: return new InsetERT(params); - case LFUN_INSET_FOOTNOTE: + case LFUN_FOOTNOTE_INSERT: return new InsetFoot(params); - case LFUN_INSET_MARGINAL: + case LFUN_MARGINALNOTE_INSERT: return new InsetMarginal(params); - case LFUN_INSET_OPTARG: + case LFUN_OPTIONAL_INSERT: return new InsetOptArg(params); - case LFUN_INSERT_BIBITEM: + case LFUN_BIBITEM_INSERT: return new InsetBibitem(InsetCommandParams("bibitem")); - case LFUN_INSET_FLOAT: + case LFUN_FLOAT_INSERT: // check if the float type exists if (params.getLyXTextClass().floats().typeExist(cmd.argument)) return new InsetFloat(params, cmd.argument); lyxerr << "Non-existent float type: " << cmd.argument << endl; return 0; - case LFUN_INSET_WIDE_FLOAT: + case LFUN_FLOAT_WIDE_INSERT: // check if the float type exists if (params.getLyXTextClass().floats().typeExist(cmd.argument)) { auto_ptr p(new InsetFloat(params, cmd.argument)); @@ -142,7 +147,7 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) lyxerr << "Non-existent float type: " << cmd.argument << endl; return 0; - case LFUN_INSET_WRAP: + case LFUN_WRAP_INSERT: if (cmd.argument == "figure") return new InsetWrap(params, cmd.argument); lyxerr << "Non-existent floatflt type: " << cmd.argument << endl; @@ -152,43 +157,32 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) // Try and generate a valid index entry. InsetCommandParams icp("index"); string const contents = cmd.argument.empty() ? - bv->getLyXText()->getStringToIndex() : + bv->getLyXText()->getStringToIndex(bv->cursor()) : cmd.argument; icp.setContents(contents); - - string data = InsetCommandMailer::params2string("index", icp); - LyXView * lv = bv->owner(); - - if (icp.getContents().empty()) { - lv->getDialogs().show("index", data, 0); - } else { - lv->dispatch(FuncRequest(LFUN_INSET_APPLY, data)); - } - return 0; + return new InsetIndex(icp); } - case LFUN_TABULAR_INSERT: - if (!cmd.argument.empty()) { - std::istringstream ss(cmd.argument); - int r = 0, c = 0; - ss >> r >> c; - if (r <= 0) r = 2; - if (c <= 0) c = 2; - return new InsetTabular(*bv->buffer(), r, c); - } - bv->owner()->getDialogs().show("tabularcreate"); - return 0; + case LFUN_TABULAR_INSERT: { + if (cmd.argument.empty()) + return 0; + std::istringstream ss(cmd.argument); + int r = 0, c = 0; + ss >> r >> c; + if (r <= 0) + r = 2; + if (c <= 0) + c = 2; + return new InsetTabular(*bv->buffer(), r, c); + } - case LFUN_INSET_CAPTION: - if (!bv->innerInset()) { + case LFUN_CAPTION_INSERT: { auto_ptr inset(new InsetCaption(params)); - inset->setOwner(bv->innerInset()); inset->setAutoBreakRows(true); - inset->setDrawFrame(InsetText::LOCKED); + inset->setDrawFrame(true); inset->setFrameColor(LColor::captionframe); return inset.release(); } - return 0; case LFUN_INDEX_PRINT: return new InsetPrintIndex(InsetCommandParams("printindex")); @@ -200,10 +194,10 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) return new InsetEnvironment(params, cmd.argument); #if 0 - case LFUN_INSET_LIST: + case LFUN_LIST_INSERT: return new InsetList; - case LFUN_INSET_THEOREM: + case LFUN_THEOREM_INSERT: return new InsetTheorem; #endif @@ -327,7 +321,7 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) } -InsetOld * readInset(LyXLex & lex, Buffer const & buf) +InsetBase * readInset(LyXLex & lex, Buffer const & buf) { // consistency check if (lex.getString() != "\\begin_inset") { @@ -335,10 +329,10 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) << endl; } - auto_ptr inset; + auto_ptr inset; LyXTextClass tclass = buf.params().getLyXTextClass(); - + lex.next(); string tmptok = lex.getString(); @@ -400,9 +394,9 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) } else if (tmptok == "External") { inset.reset(new InsetExternal); } else if (tmptok == "FormulaMacro") { - inset.reset(new InsetFormulaMacro); + inset.reset(new MathMacroTemplate); } else if (tmptok == "Formula") { - inset.reset(new InsetFormula); + inset.reset(new MathHullInset); } else if (tmptok == "Graphics") { inset.reset(new InsetGraphics); } else if (tmptok == "Note") { @@ -413,7 +407,12 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) lex.next(); string s = lex.getString(); CharStyles::iterator found_cs = tclass.charstyle(s); - inset.reset(new InsetCharStyle(buf.params(), found_cs)); + if (found_cs != tclass.charstyles().end()) + inset.reset(new InsetCharStyle(buf.params(), found_cs)); + else { + // "Undefined" inset + inset.reset(new InsetCharStyle(buf.params(), s)); + } } else if (tmptok == "Branch") { inset.reset(new InsetBranch(buf.params(), InsetBranchParams())); @@ -466,6 +465,20 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) } inset->read(buf, lex); + +#ifdef WITH_WARNINGS +#warning hack.. +#endif + if (inset->lyxCode() == InsetBase::MATHMACRO_CODE) { + MathMacroTemplate const * tmpl = + static_cast(inset.get()); + MacroTable::globalMacros().insert + (tmpl->name(), tmpl->asMacroData()); + lyxerr[Debug::DEBUG] + << BOOST_CURRENT_FUNCTION + << ": creating local macro " << tmpl->name() + << endl; + } } return inset.release();