X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=23fd1eed9a43bb43a5a0fe256ec190c309ead0dd;hb=f76d6997b710f7fb5180f0cd05415786de5d9417;hp=8ebe0e32f278edb73b3f98148d8c294c8cb4efeb;hpb=7bdc34a98700f487a923ea2b3546f476b9d5d98c;p=lyx.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 8ebe0e32f2..23fd1eed9a 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -36,6 +36,7 @@ #include "support/gettext.h" #include "support/lstrings.h" #include "support/os.h" +#include "support/TempFile.h" #include #include @@ -61,7 +62,7 @@ namespace lyx { // development/tools/updatelayouts.sh script, to update the format of // all of our layout files. // -int const LAYOUT_FORMAT = 46; // gb: New Tag "ForceLocal" +int const LAYOUT_FORMAT = 51; //spitz: add ToggleIndent tag namespace { @@ -197,6 +198,7 @@ enum TextClassTags { TC_HTMLSTYLES, TC_PROVIDES, TC_REQUIRES, + TC_PKGOPTS, TC_LEFTMARGIN, TC_RIGHTMARGIN, TC_FLOAT, @@ -218,7 +220,7 @@ enum TextClassTags { TC_CITEENGINETYPE, TC_CITEFORMAT, TC_DEFAULTBIBLIO, - TC_FULLAUTHORLIST, + TC_FULLAUTHORLIST }; @@ -256,6 +258,7 @@ LexerKeyword textClassTags[] = { { "nostyle", TC_NOSTYLE }, { "outputformat", TC_OUTPUTFORMAT }, { "outputtype", TC_OUTPUTTYPE }, + { "packageoptions", TC_PKGOPTS }, { "pagestyle", TC_PAGESTYLE }, { "preamble", TC_PREAMBLE }, { "provides", TC_PROVIDES }, @@ -276,22 +279,24 @@ LexerKeyword textClassTags[] = { bool TextClass::convertLayoutFormat(support::FileName const & filename, ReadType rt) { LYXERR(Debug::TCLASS, "Converting layout file to " << LAYOUT_FORMAT); - FileName const tempfile = FileName::tempName("convert_layout"); + TempFile tmp("convertXXXXXX.layout"); + FileName const tempfile = tmp.name(); bool success = layout2layout(filename, tempfile); if (success) success = readWithoutConv(tempfile, rt) == OK; - tempfile.removeFile(); return success; } std::string TextClass::convert(std::string const & str) { - FileName const fn = FileName::tempName("locallayout"); + TempFile tmp1("localXXXXXX.layout"); + FileName const fn = tmp1.name(); ofstream os(fn.toFilesystemEncoding().c_str()); os << str; os.close(); - FileName const tempfile = FileName::tempName("convert_locallayout"); + TempFile tmp2("convert_localXXXXXX.layout"); + FileName const tempfile = tmp2.name(); bool success = layout2layout(fn, tempfile); if (!success) return ""; @@ -303,7 +308,6 @@ std::string TextClass::convert(std::string const & str) ret += tmp + '\n'; } is.close(); - tempfile.removeFile(); return ret; } @@ -368,7 +372,8 @@ TextClass::ReturnValues TextClass::read(std::string const & str, ReadType rt) return retval; // write the layout string to a temporary file - FileName const tempfile = FileName::tempName("TextClass_read"); + TempFile tmp("TextClass_read"); + FileName const tempfile = tmp.name(); ofstream os(tempfile.toFilesystemEncoding().c_str()); if (!os) { LYXERR0("Unable to create temporary file"); @@ -384,7 +389,6 @@ TextClass::ReturnValues TextClass::read(std::string const & str, ReadType rt) << LAYOUT_FORMAT); return ERROR; } - tempfile.removeFile(); return OK_OLDFORMAT; } @@ -634,6 +638,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) break; } + case TC_PKGOPTS : { + lexrc.next(); + string const pkg = lexrc.getString(); + lexrc.next(); + string const options = lexrc.getString(); + package_options_[pkg] = options; + break; + } + case TC_DEFAULTMODULE: { lexrc.next(); string const module = lexrc.getString(); @@ -962,6 +975,8 @@ bool TextClass::readCiteEngine(Lexer & lexrc) cite_styles_[ENGINE_TYPE_AUTHORYEAR].clear(); if (type & ENGINE_TYPE_NUMERICAL) cite_styles_[ENGINE_TYPE_NUMERICAL].clear(); + if (type & ENGINE_TYPE_DEFAULT) + cite_styles_[ENGINE_TYPE_DEFAULT].clear(); string def; bool getout = false; while (!getout && lexrc.isOK()) { @@ -1001,6 +1016,8 @@ bool TextClass::readCiteEngine(Lexer & lexrc) cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs); if (type & ENGINE_TYPE_NUMERICAL) cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(cs); + if (type & ENGINE_TYPE_DEFAULT) + cite_styles_[ENGINE_TYPE_DEFAULT].push_back(cs); } return getout; } @@ -1008,8 +1025,8 @@ bool TextClass::readCiteEngine(Lexer & lexrc) int TextClass::readCiteEngineType(Lexer & lexrc) const { - int const ENGINE_TYPE_DEFAULT = - ENGINE_TYPE_AUTHORYEAR | ENGINE_TYPE_NUMERICAL; + LATTEST(ENGINE_TYPE_DEFAULT == + (ENGINE_TYPE_AUTHORYEAR | ENGINE_TYPE_NUMERICAL)); if (!lexrc.next()) { lexrc.printError("No cite engine type given for token: `$$Token'."); return ENGINE_TYPE_DEFAULT; @@ -1050,11 +1067,15 @@ bool TextClass::readCiteFormat(Lexer & lexrc) cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; if (type & ENGINE_TYPE_NUMERICAL) cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition; + if (type & ENGINE_TYPE_DEFAULT) + cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition; } else { if (type & ENGINE_TYPE_AUTHORYEAR) cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; if (type & ENGINE_TYPE_NUMERICAL) cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition; + if (type & ENGINE_TYPE_DEFAULT) + cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition; } } return true; @@ -1470,7 +1491,8 @@ Layout TextClass::createBasicLayout(docstring const & name, bool unknown) const DocumentClassPtr getDocumentClass( - LayoutFile const & baseClass, LayoutModuleList const & modlist) + LayoutFile const & baseClass, LayoutModuleList const & modlist, + bool const clone) { DocumentClassPtr doc_class = DocumentClassPtr(new DocumentClass(baseClass)); @@ -1485,10 +1507,11 @@ DocumentClassPtr getDocumentClass( "this document but has not been found in the list of\n" "available modules. If you recently installed it, you\n" "probably need to reconfigure LyX.\n"), from_utf8(modName)); - frontend::Alert::warning(_("Module not available"), msg); + if (!clone) + frontend::Alert::warning(_("Module not available"), msg); continue; } - if (!lm->isAvailable()) { + if (!lm->isAvailable() && !clone) { docstring const prereqs = from_utf8(getStringFromVector(lm->prerequisites(), "\n\t")); docstring const msg = bformat(_("The module %1$s requires a package that is not\n"