]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/tex2lyx.cpp
tex2lyx: fix a regression
[lyx.git] / src / tex2lyx / tex2lyx.cpp
index 9697c419797d24e481fdaf3f0cc48dd7310f96fd..a7f83c25a34c41c449753b3b080e301cc7ea21f2 100644 (file)
@@ -254,22 +254,21 @@ bool checkModule(string const & name, bool command)
        // This is needed since a module cannot be read on its own, only as
        // part of a document class.
        LayoutFile const & baseClass = LayoutFileList::get()[textclass.name()];
-       typedef map<string, DocumentClass *> ModuleMap;
+       typedef map<string, DocumentClassPtr > ModuleMap;
        static ModuleMap modules;
        static bool init = true;
        if (init) {
                baseClass.load();
-               DocumentClassBundle & bundle = DocumentClassBundle::get();
                LyXModuleList::const_iterator const end = theModuleList.end();
                LyXModuleList::const_iterator it = theModuleList.begin();
-               for (; it != end; it++) {
+               for (; it != end; ++it) {
                        string const module = it->getID();
                        LayoutModuleList m;
                        // FIXME this excludes all modules that depend on another one
                        if (!m.moduleCanBeAdded(module, &baseClass))
                                continue;
                        m.push_back(module);
-                       modules[module] = &bundle.makeDocumentClass(baseClass, m);
+                       modules[module] = getDocumentClass(baseClass, m);
                }
                init = false;
        }
@@ -282,7 +281,7 @@ bool checkModule(string const & name, bool command)
        // needed since it is not unlikely that two different modules define a
        // command with the same name.
        ModuleMap::iterator const end = modules.end();
-       for (ModuleMap::iterator it = modules.begin(); it != end; it++) {
+       for (ModuleMap::iterator it = modules.begin(); it != end; ++it) {
                string const module = it->first;
                if (!used_modules.moduleCanBeAdded(module, &baseClass))
                        continue;
@@ -290,7 +289,7 @@ bool checkModule(string const & name, bool command)
                        continue;
                if (findInsetLayoutWithoutModule(textclass, name, command))
                        continue;
-               DocumentClass const * c = it->second;
+               DocumentClassConstPtr  c = it->second;
                Layout const * layout = findLayoutWithoutModule(*c, name, command);
                InsetLayout const * insetlayout = layout ? 0 :
                        findInsetLayoutWithoutModule(*c, name, command);
@@ -332,6 +331,9 @@ bool checkModule(string const & name, bool command)
 
 bool noweb_mode = false;
 bool pdflatex = false;
+bool xetex = false;
+bool have_CJK = false;
+bool is_nonCJKJapanese = false;
 bool roundtrip = false;
 
 
@@ -354,13 +356,20 @@ void read_command(Parser & p, string command, CommandMap & commands)
                        string const arg = p.getArg('{', '}');
                        if (arg == "translate")
                                arguments.push_back(required);
+                       else if (arg == "group")
+                               arguments.push_back(req_group);
                        else if (arg == "item")
                                arguments.push_back(item);
+                       else if (arg == "displaymath")
+                               arguments.push_back(displaymath);
                        else
                                arguments.push_back(verbatim);
                } else {
-                       p.getArg('[', ']');
-                       arguments.push_back(optional);
+                       string const arg = p.getArg('[', ']');
+                       if (arg == "group")
+                               arguments.push_back(opt_group);
+                       else
+                               arguments.push_back(optional);
                }
        }
        commands[command] = arguments;
@@ -662,6 +671,10 @@ bool tex2lyx(idocstream & is, ostream & os, string encoding)
        active_environments.push_back("document");
        Context context(true, textclass);
        stringstream ss;
+       // store the document language in the context to be able to handle the
+       // commands like \foreignlanguage and \textenglish etc.
+       context.font.language = preamble.language();
+       // parse the main text
        parse_text(p, ss, FLAG_END, true, context);
        if (Context::empty)
                // Empty document body. LyX needs at least one paragraph.
@@ -674,10 +687,10 @@ bool tex2lyx(idocstream & is, ostream & os, string encoding)
        if (!used_modules.empty()) {
                LayoutModuleList::const_iterator const end = used_modules.end();
                LayoutModuleList::const_iterator it = used_modules.begin();
-               for (; it != end; it++)
+               for (; it != end; ++it)
                        preamble.addModule(*it);
        }
-       if (!preamble.writeLyXHeader(os)) {
+       if (!preamble.writeLyXHeader(os, !active_environments.empty())) {
                cerr << "Could write LyX file header." << endl;
                return false;
        }