X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2Ftex2lyx.cpp;h=a7f83c25a34c41c449753b3b080e301cc7ea21f2;hb=f0335cef1e21810e2d020801f06364ac462e7899;hp=5f2df53c513e9b804e2a1e55a042b8f154798647;hpb=c93c44bf64475f67f26634a4d90e18d425a0c80b;p=lyx.git diff --git a/src/tex2lyx/tex2lyx.cpp b/src/tex2lyx/tex2lyx.cpp index 5f2df53c51..a7f83c25a3 100644 --- a/src/tex2lyx/tex2lyx.cpp +++ b/src/tex2lyx/tex2lyx.cpp @@ -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 ModuleMap; + typedef map 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; @@ -639,7 +648,7 @@ namespace { * You must ensure that \p parentFilePath is properly set before calling * this function! */ -void tex2lyx(idocstream & is, ostream & os, string encoding) +bool tex2lyx(idocstream & is, ostream & os, string encoding) { // Set a sensible default encoding. // This is used until an encoding command is found. @@ -662,6 +671,10 @@ void 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. @@ -671,18 +684,16 @@ void tex2lyx(idocstream & is, ostream & os, string encoding) active_environments.pop_back(); // We know the used modules only after parsing the full text - ostringstream ms; if (!used_modules.empty()) { - ms << "\\begin_modules\n"; LayoutModuleList::const_iterator const end = used_modules.end(); LayoutModuleList::const_iterator it = used_modules.begin(); - for (; it != end; it++) - ms << *it << '\n'; - ms << "\\end_modules\n"; + for (; it != end; ++it) + preamble.addModule(*it); + } + if (!preamble.writeLyXHeader(os, !active_environments.empty())) { + cerr << "Could write LyX file header." << endl; + return false; } - ostringstream ps; - preamble.writeLyXHeader(ps); - os << preamble.addModules(ps.str(), ms.str()); ss.seekg(0); os << ss.str(); @@ -693,6 +704,7 @@ void tex2lyx(idocstream & is, ostream & os, string encoding) parsertest << p.get_token().asInput(); // and parsertest.tex should now have identical content #endif + return true; } @@ -710,9 +722,9 @@ bool tex2lyx(FileName const & infilename, ostream & os, string const & encoding) } string const oldParentFilePath = parentFilePath; parentFilePath = onlyPath(infilename.absFileName()); - tex2lyx(is, os, encoding); + bool retval = tex2lyx(is, os, encoding); parentFilePath = oldParentFilePath; - return true; + return retval; } } // anonymous namespace