X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffactory.cpp;h=faa386251c7a4fbf9c34cb1c5f6ddd2ad649a946;hb=2492def7daba4c5e98725bd81bf482122e9e6c6e;hp=242a4fd2fac3c8c039d1e823200fac4e95dc5dc8;hpb=39e79d8602920eefe36e898c9f415afb979521b2;p=lyx.git diff --git a/src/factory.cpp b/src/factory.cpp index 242a4fd2fa..faa386251c 100644 --- a/src/factory.cpp +++ b/src/factory.cpp @@ -18,18 +18,18 @@ #include "debug.h" #include "FloatList.h" #include "FuncRequest.h" -#include "LColor.h" +#include "Color.h" #include "Lexer.h" #include "LyX.h" -#include "Paragraph.h" #include "insets/InsetBibitem.h" #include "insets/InsetBibtex.h" #include "insets/InsetCaption.h" #include "insets/InsetCitation.h" -#include "insets/InsetCharStyle.h" -#include "insets/InsetEnv.h" +#include "insets/InsetFlex.h" +#include "insets/InsetEnvironment.h" #include "insets/InsetERT.h" +#include "insets/InsetListings.h" #include "insets/InsetExternal.h" #include "insets/InsetFloat.h" #include "insets/InsetFloatList.h" @@ -58,7 +58,7 @@ #include "mathed/MathMacroTemplate.h" #include "mathed/InsetMathHull.h" -#include "frontends/Alert.h" +#include "frontends/alert.h" #include "support/lstrings.h" #include "support/ExceptionMessage.h" @@ -68,6 +68,10 @@ #include +using std::auto_ptr; +using std::endl; +using std::string; + namespace lyx { @@ -75,14 +79,10 @@ namespace Alert = frontend::Alert; using support::compare_ascii_no_case; -using std::auto_ptr; -using std::endl; -using std::string; - -InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) +Inset * createInset(BufferView * bv, FuncRequest const & cmd) { - BufferParams const & params = bv->buffer()->params(); + BufferParams const & params = bv->buffer().params(); try { @@ -102,14 +102,11 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) case LFUN_CLEARDOUBLEPAGE_INSERT: return new InsetClearDoublePage; - case LFUN_CHARSTYLE_INSERT: { + case LFUN_FLEX_INSERT: { string s = cmd.getArg(0); - 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); + TextClass tclass = params.getTextClass(); + InsetLayout il = tclass.insetlayout(from_utf8(s)); + return new InsetFlex(params, il); } case LFUN_NOTE_INSERT: { @@ -136,6 +133,9 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) case LFUN_ERT_INSERT: return new InsetERT(params); + case LFUN_LISTING_INSERT: + return new InsetListings(params); + case LFUN_FOOTNOTE_INSERT: return new InsetFoot(params); @@ -151,7 +151,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) case LFUN_FLOAT_INSERT: { // check if the float type exists string const argument = to_utf8(cmd.argument()); - if (params.getLyXTextClass().floats().typeExist(argument)) + if (params.getTextClass().floats().typeExist(argument)) return new InsetFloat(params, argument); lyxerr << "Non-existent float type: " << argument << endl; return 0; @@ -160,7 +160,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) case LFUN_FLOAT_WIDE_INSERT: { // check if the float type exists string const argument = to_utf8(cmd.argument()); - if (params.getLyXTextClass().floats().typeExist(argument)) { + if (params.getTextClass().floats().typeExist(argument)) { auto_ptr p(new InsetFloat(params, argument)); p->wide(true, params); return p.release(); @@ -171,20 +171,14 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) case LFUN_WRAP_INSERT: { string const argument = to_utf8(cmd.argument()); - if (argument == "figure") + if (argument == "figure" || argument == "table") return new InsetWrap(params, argument); - lyxerr << "Non-existent floatflt type: " << argument << endl; + lyxerr << "Non-existent wrapfig type: " << argument << endl; return 0; } - case LFUN_INDEX_INSERT: { - // Try and generate a valid index entry. - InsetCommandParams icp("index"); - icp["name"] = cmd.argument().empty() ? - bv->cursor().innerText()->getStringToIndex(bv->cursor()) : - cmd.argument(); - return new InsetIndex(icp); - } + case LFUN_INDEX_INSERT: + return new InsetIndex(params); case LFUN_NOMENCL_INSERT: { InsetCommandParams icp("nomenclature"); @@ -204,28 +198,28 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) r = 2; if (c <= 0) c = 2; - return new InsetTabular(*bv->buffer(), r, c); + return new InsetTabular(bv->buffer(), r, c); } case LFUN_CAPTION_INSERT: { auto_ptr inset(new InsetCaption(params)); inset->setAutoBreakRows(true); inset->setDrawFrame(true); - inset->setFrameColor(LColor::captionframe); + inset->setFrameColor(Color::captionframe); return inset.release(); } case LFUN_INDEX_PRINT: - return new InsetPrintIndex(InsetCommandParams("printindex")); + return new InsetPrintIndex(InsetCommandParams("index_print")); case LFUN_NOMENCL_PRINT: - return new InsetPrintNomencl(InsetCommandParams("printnomenclature")); + return new InsetPrintNomencl(InsetCommandParams("nomencl_print")); case LFUN_TOC_INSERT: - return new InsetTOC(InsetCommandParams("tableofcontents")); + return new InsetTOC(InsetCommandParams("toc")); case LFUN_ENVIRONMENT_INSERT: - return new InsetEnvironment(params, to_utf8(cmd.argument())); + return new InsetEnvironment(params, cmd.argument()); #if 0 case LFUN_LIST_INSERT: @@ -251,7 +245,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) return new InsetBibtex(icp); } else if (name == "citation") { - InsetCommandParams icp("cite"); + InsetCommandParams icp("citation"); InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp); return new InsetCitation(icp); @@ -261,8 +255,13 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) InsetERTMailer::string2params(to_utf8(cmd.argument()), st); return new InsetERT(params, st); + } else if (name == "listings") { + InsetListingsParams par; + InsetListingsMailer::string2params(to_utf8(cmd.argument()), par); + return new InsetListings(params, par); + } else if (name == "external") { - Buffer const & buffer = *bv->buffer(); + Buffer const & buffer = bv->buffer(); InsetExternalParams iep; InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, iep); @@ -271,7 +270,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) return inset.release(); } else if (name == "graphics") { - Buffer const & buffer = *bv->buffer(); + Buffer const & buffer = bv->buffer(); InsetGraphicsParams igp; InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buffer, igp); @@ -285,10 +284,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) return new InsetInclude(iip); } else if (name == "index") { - InsetCommandParams icp(name); - InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), - icp); - return new InsetIndex(icp); + return new InsetIndex(params); } else if (name == "nomenclature") { InsetCommandParams icp(name); @@ -306,10 +302,10 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) InsetCommandParams icp(name); InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp); - return new InsetRef(icp, *bv->buffer()); + return new InsetRef(icp, bv->buffer()); } else if (name == "toc") { - InsetCommandParams icp("tableofcontents"); + InsetCommandParams icp("toc"); InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), icp); return new InsetTOC(icp); @@ -372,7 +368,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) } -InsetBase * readInset(Lexer & lex, Buffer const & buf) +Inset * readInset(Lexer & lex, Buffer const & buf) { // consistency check if (lex.getString() != "\\begin_inset") { @@ -380,71 +376,55 @@ InsetBase * readInset(Lexer & lex, Buffer const & buf) << endl; } - auto_ptr inset; + auto_ptr inset; - LyXTextClass tclass = buf.params().getLyXTextClass(); + TextClass tclass = buf.params().getTextClass(); lex.next(); string tmptok = lex.getString(); // test the different insets - if (tmptok == "LatexCommand") { + if (tmptok == "CommandInset") { lex.next(); - string const cmdName = lex.getString(); - lex.pushToken(cmdName); - - InsetCommandParams inscmd(cmdName); + string const insetType = lex.getString(); + lex.pushToken(insetType); + + //FIXME + //Inset::Code const code = Inset::translate(insetType); + //if (code == Inset::NO_CODE) { choke as below; } + //InsetCommandParams inscmd(); + InsetCommandParams inscmd(insetType); inscmd.read(lex); - // This strange command allows LyX to recognize "natbib" style - // citations: citet, citep, Citet etc. - // FIXME: We already have partial support for \\fullcite and - // the various \\footcite commands. We should increase the - // file format number and read these commands here, too. - // Then we should use is_possible_cite_command() in - // src/frontends/controllers/frontend_helpers.cpp to test for valid cite - // commands. - if (compare_ascii_no_case(cmdName.substr(0,4), "cite") == 0) { + if (insetType == "citation") { inset.reset(new InsetCitation(inscmd)); - } else if (cmdName == "bibitem") { + } else if (insetType == "bibitem") { inset.reset(new InsetBibitem(inscmd)); - } else if (cmdName == "bibtex") { + } else if (insetType == "bibtex") { inset.reset(new InsetBibtex(inscmd)); - } else if (cmdName == "index") { - inset.reset(new InsetIndex(inscmd)); - } else if (cmdName == "nomenclature") { + } else if (insetType == "index") { + inset.reset(new InsetIndex(buf.params())); + } else if (insetType == "nomenclature") { inset.reset(new InsetNomencl(inscmd)); - } else if (cmdName == "include") { + } else if (insetType == "include") { inset.reset(new InsetInclude(inscmd)); - } else if (cmdName == "label") { + } else if (insetType == "label") { inset.reset(new InsetLabel(inscmd)); - } else if (cmdName == "url" - || cmdName == "htmlurl") { + } else if (insetType == "url") { inset.reset(new InsetUrl(inscmd)); - } else if (cmdName == "ref" - || cmdName == "eqref" - || cmdName == "pageref" - || cmdName == "vref" - || cmdName == "vpageref" - || cmdName == "prettyref") { + } else if (insetType == "ref") { if (!inscmd["name"].empty() || !inscmd["reference"].empty()) { inset.reset(new InsetRef(inscmd, buf)); } - } else if (cmdName == "tableofcontents") { + } else if (insetType == "toc") { inset.reset(new InsetTOC(inscmd)); - } else if (cmdName == "listofalgorithms") { - inset.reset(new InsetFloatList("algorithm")); - } else if (cmdName == "listoffigures") { - inset.reset(new InsetFloatList("figure")); - } else if (cmdName == "listoftables") { - inset.reset(new InsetFloatList("table")); - } else if (cmdName == "printindex") { + } else if (insetType == "index_print") { inset.reset(new InsetPrintIndex(inscmd)); - } else if (cmdName == "printnomenclature") { + } else if (insetType == "nomencl_print") { inset.reset(new InsetPrintNomencl(inscmd)); } else { - lyxerr << "unknown CommandInset '" << cmdName + lyxerr << "unknown CommandInset '" << insetType << "'" << std::endl; while (lex.isOK() && lex.getString() != "\\end_inset") lex.next(); @@ -465,16 +445,11 @@ InsetBase * readInset(Lexer & lex, Buffer const & buf) inset.reset(new InsetNote(buf.params(), tmptok)); } else if (tmptok == "Box") { inset.reset(new InsetBox(buf.params(), tmptok)); - } else if (tmptok == "CharStyle") { + } else if (tmptok == "Flex") { lex.next(); string s = lex.getString(); - CharStyles::iterator found_cs = tclass.charstyle(s); - if (found_cs != tclass.charstyles().end()) - inset.reset(new InsetCharStyle(buf.params(), found_cs)); - else { - // "Undefined" inset - inset.reset(new InsetCharStyle(buf.params(), s)); - } + InsetLayout il = tclass.insetlayout(from_utf8(s)); + inset.reset(new InsetFlex(buf.params(), il)); } else if (tmptok == "Branch") { inset.reset(new InsetBranch(buf.params(), InsetBranchParams())); @@ -483,9 +458,11 @@ InsetBase * readInset(Lexer & lex, Buffer const & buf) inset.reset(new InsetInclude(p)); } else if (tmptok == "Environment") { lex.next(); - inset.reset(new InsetEnvironment(buf.params(), lex.getString())); + inset.reset(new InsetEnvironment(buf.params(), lex.getDocString())); } else if (tmptok == "ERT") { inset.reset(new InsetERT(buf.params())); + } else if (tmptok == "listings") { + inset.reset(new InsetListings(buf.params())); } else if (tmptok == "InsetSpace") { inset.reset(new InsetSpace); } else if (tmptok == "Tabular") { @@ -516,6 +493,8 @@ InsetBase * readInset(Lexer & lex, Buffer const & buf) #endif } else if (tmptok == "Caption") { inset.reset(new InsetCaption(buf.params())); + } else if (tmptok == "Index") { + inset.reset(new InsetIndex(buf.params())); } else if (tmptok == "FloatList") { inset.reset(new InsetFloatList); } else { @@ -528,10 +507,8 @@ InsetBase * readInset(Lexer & lex, Buffer const & buf) inset->read(buf, lex); -#ifdef WITH_WARNINGS -#warning hack.. -#endif - if (inset->lyxCode() == InsetBase::MATHMACRO_CODE) { +// FIXME: hack.. + if (inset->lyxCode() == Inset::MATHMACRO_CODE) { MathMacroTemplate const * tmpl = static_cast(inset.get()); MacroTable::globalMacros().insert