]> git.lyx.org Git - lyx.git/blobdiff - src/factory.cpp
provide wrap tables based on the current wrap float implementation
[lyx.git] / src / factory.cpp
index 242a4fd2fac3c8c039d1e823200fac4e95dc5dc8..faa386251c7a4fbf9c34cb1c5f6ddd2ad649a946 100644 (file)
 #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"
 
 #include <sstream>
 
+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<InsetFloat> 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<InsetCaption> 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<InsetBase> inset;
+       auto_ptr<Inset> 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<MathMacroTemplate*>(inset.get());
                        MacroTable::globalMacros().insert