X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxtextclass.C;h=d44748b0e5cec4e526fcc78bc15a8bef6348f259;hb=69cf3b62043861ccad5f8ad7ffb4981fe50b078d;hp=f1ee3e12c01df1b5743500898ec45f2f593917ec;hpb=2b834e310b067b5b5f4e1cb7cc9e856413dec085;p=lyx.git diff --git a/src/lyxtextclass.C b/src/lyxtextclass.C index f1ee3e12c0..d44748b0e5 100644 --- a/src/lyxtextclass.C +++ b/src/lyxtextclass.C @@ -11,14 +11,11 @@ #include -#ifdef __GNUG__ -#pragma implementation -#endif - #include "lyxtextclass.h" #include "debug.h" #include "lyxlex.h" #include "counters.h" +#include "FloatList.h" #include "support/lstrings.h" #include "support/LAssert.h" @@ -49,7 +46,8 @@ struct compare_name { LyXTextClass::LyXTextClass(string const & fn, string const & cln, string const & desc) - : name_(fn), latexname_(cln), description_(desc), ctrs_(new Counters) + : name_(fn), latexname_(cln), description_(desc), + floatlist_(new FloatList), ctrs_(new Counters) { outputType_ = LATEX; columns_ = 1; @@ -62,6 +60,8 @@ LyXTextClass::LyXTextClass(string const & fn, string const & cln, opt_fontsize_ = "10|11|12"; opt_pagestyle_ = "empty|plain|headings|fancy"; provides_ = nothing; + titletype_ = TITLE_COMMAND_AFTER; + titlename_ = "maketitle"; loaded = false; } @@ -72,18 +72,12 @@ bool LyXTextClass::do_readStyle(LyXLex & lexrc, LyXLayout & lay) if (!lay.Read(lexrc, *this)) { // Resolve fonts lay.resfont = lay.font; -#ifndef INHERIT_LANGUAGE lay.resfont.realize(defaultfont()); lay.reslabelfont = lay.labelfont; lay.reslabelfont.realize(defaultfont()); -#else - lay.resfont.realize(defaultfont(), default_language); - lay.reslabelfont = lay.labelfont; - lay.reslabelfont.realize(defaultfont(), default_language); -#endif return false; // no errors } - lyxerr << "Error parsing style `" << lay.name() << "'" << endl; + lyxerr << "Error parsing style `" << lay.name() << '\'' << endl; return true; } @@ -110,10 +104,12 @@ enum TextClassTags { TC_LEFTMARGIN, TC_RIGHTMARGIN, TC_FLOAT, - TC_COUNTER + TC_COUNTER, + TC_NOFLOAT, + TC_TITLELATEXNAME, + TC_TITLELATEXTYPE }; - // Reads a textclass structure from file. bool LyXTextClass::Read(string const & filename, bool merge) { @@ -127,6 +123,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) { "input", TC_INPUT }, { "leftmargin", TC_LEFTMARGIN }, { "maxcounter", TC_MAXCOUNTER }, + { "nofloat", TC_NOFLOAT }, { "nostyle", TC_NOSTYLE }, { "outputtype", TC_OUTPUTTYPE }, { "pagestyle", TC_PAGESTYLE }, @@ -139,6 +136,8 @@ bool LyXTextClass::Read(string const & filename, bool merge) { "secnumdepth", TC_SECNUMDEPTH }, { "sides", TC_SIDES }, { "style", TC_STYLE }, + { "titlelatexname", TC_TITLELATEXNAME }, + { "titlelatextype", TC_TITLELATEXTYPE }, { "tocdepth", TC_TOCDEPTH } }; @@ -151,7 +150,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) << MakeDisplayPath(filename) << endl; - LyXLex lexrc(textClassTags, TC_COUNTER); + LyXLex lexrc(textClassTags, TC_TITLELATEXTYPE); bool error = false; lexrc.setFile(filename); @@ -230,7 +229,8 @@ bool LyXTextClass::Read(string const & filename, bool merge) string const style = subst(lexrc.getString(), '_', ' '); if (!delete_layout(style)) - lyxerr << "Cannot delete style `" << style << "'" << endl; + lyxerr << "Cannot delete style `" + << style << '\'' << endl; // lexrc.printError("Cannot delete style" // " `$$Token'"); } @@ -266,12 +266,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) if (!defaultfont_.resolved()) { lexrc.printError("Warning: defaultfont should " "be fully instantiated!"); -#ifndef INHERIT_LANGUAGE defaultfont_.realize(LyXFont(LyXFont::ALL_SANE)); -#else - defaultfont_.realize(LyXFont(LyXFont::ALL_SANE), - default_language); -#endif } break; @@ -333,6 +328,19 @@ bool LyXTextClass::Read(string const & filename, bool merge) case TC_COUNTER: readCounter(lexrc); break; + case TC_TITLELATEXTYPE: + readTitleType(lexrc); + break; + case TC_TITLELATEXNAME: + if (lexrc.next()) + titlename_ = lexrc.getString(); + break; + case TC_NOFLOAT: + if (lexrc.next()) { + string const nofloat = lexrc.getString(); + floatlist_->erase(nofloat); + } + break; } } @@ -354,6 +362,33 @@ bool LyXTextClass::Read(string const & filename, bool merge) } +void LyXTextClass::readTitleType(LyXLex & lexrc) +{ + keyword_item titleTypeTags[] = { + { "commandafter", TITLE_COMMAND_AFTER }, + { "environment", TITLE_ENVIRONMENT } + }; + + pushpophelper pph(lexrc, titleTypeTags, TITLE_ENVIRONMENT); + + int le = lexrc.lex(); + switch (le) { + case LyXLex::LEX_UNDEF: + lexrc.printError("Unknown output type `$$Token'"); + return; + case TITLE_COMMAND_AFTER: + case TITLE_ENVIRONMENT: + titletype_ = static_cast(le); + break; + default: + lyxerr << "Unhandled value " << le + << " in LyXTextClass::readTitleType." << endl; + + break; + } +} + + void LyXTextClass::readOutputType(LyXLex & lexrc) { keyword_item outputTypeTags[] = { @@ -599,7 +634,7 @@ void LyXTextClass::readFloat(LyXLex & lexrc) if (getout) { Floating newfloat(type, placement, ext, within, style, name, listname, builtin); - floatlist_.newFloat(newfloat); + floatlist_->newFloat(newfloat); } lexrc.popTable(); @@ -768,13 +803,13 @@ bool LyXTextClass::load() const FloatList & LyXTextClass::floats() { - return floatlist_; + return *floatlist_.get(); } FloatList const & LyXTextClass::floats() const { - return floatlist_; + return *floatlist_.get(); } @@ -888,6 +923,21 @@ int LyXTextClass::maxcounter() const } +LYX_TITLE_LATEX_TYPES LyXTextClass::titletype() const +{ + return titletype_; +} + + +string const & LyXTextClass::titlename() const +{ + return titlename_; +} + + + + + int LyXTextClass::size() const { return layoutlist_.size(); @@ -898,10 +948,10 @@ ostream & operator<<(ostream & os, LyXTextClass::PageSides p) { switch (p) { case LyXTextClass::OneSide: - os << "1"; + os << '1'; break; case LyXTextClass::TwoSides: - os << "2"; + os << '2'; break; } return os;