X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.cpp;h=e368f23bbda0e821d3928b0f58538e5290a9e577;hb=51ac7d895cc7a9c4ad91131d0b4734395366d04b;hp=9af627186b0d83a3040ca95af4fc1d32517c731e;hpb=1d894fd5e3d7b945d85e10da21b6f6286c8ff61e;p=lyx.git diff --git a/src/Layout.cpp b/src/Layout.cpp index 9af627186b..e368f23bbd 100644 --- a/src/Layout.cpp +++ b/src/Layout.cpp @@ -15,19 +15,17 @@ #include "Layout.h" #include "TextClass.h" #include "Lexer.h" -#include "debug.h" +#include "Font.h" +#include "support/debug.h" #include "support/lstrings.h" -using std::endl; -using std::string; +#include -namespace lyx { - -using support::subst; -using support::trim; +using namespace std; +using namespace lyx::support; -extern FontInfo lyxRead(Lexer &, FontInfo const & fi = sane_font); +namespace lyx { /// Special value of toclevel for layouts that to not belong in a TOC const int Layout::NOT_IN_TOC = -1000; @@ -39,6 +37,7 @@ enum LayoutTags { LT_ALIGNPOSSIBLE, LT_MARGIN, LT_BOTTOMSEP, + LT_CATEGORY, LT_COMMANDDEPTH, LT_COPYSTYLE, LT_DEPENDSON, @@ -83,6 +82,7 @@ enum LayoutTags { LT_PARSKIP, //LT_PLAIN, LT_PREAMBLE, + LT_REQUIRES, LT_RIGHTMARGIN, LT_SPACING, LT_TOPSEP, @@ -138,6 +138,7 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) { "align", LT_ALIGN }, { "alignpossible", LT_ALIGNPOSSIBLE }, { "bottomsep", LT_BOTTOMSEP }, + { "category", LT_CATEGORY }, { "commanddepth", LT_COMMANDDEPTH }, { "copystyle", LT_COPYSTYLE }, { "dependson", LT_DEPENDSON }, @@ -180,6 +181,7 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) { "parskip", LT_PARSKIP }, { "passthru", LT_PASS_THRU }, { "preamble", LT_PREAMBLE }, + { "requires", LT_REQUIRES }, { "rightmargin", LT_RIGHTMARGIN }, { "spacing", LT_SPACING }, { "textfont", LT_TEXTFONT }, @@ -209,6 +211,11 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) finished = true; break; + case LT_CATEGORY: + if (lexrc.next()) + category_ = lexrc.getDocString(); + break; + case LT_COPYSTYLE: // initialize with a known style if (lexrc.next()) { docstring const style = subst(lexrc.getDocString(), @@ -216,21 +223,17 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) if (tclass.hasLayout(style)) { docstring const tmpname = name_; - this->operator=(*tclass[style]); + this->operator=(tclass[style]); name_ = tmpname; } else { lyxerr << "Cannot copy unknown style `" << to_utf8(style) << "'\n" << "All layouts so far:" << endl; - TextClass::const_iterator it = - tclass.begin(); - TextClass::const_iterator end = - tclass.end(); - for (; it != end; ++it) { - lyxerr << to_utf8((*it)->name()) - << endl; - } + DocumentClass::const_iterator lit = tclass.begin(); + DocumentClass::const_iterator len = tclass.end(); + for (; lit != len; ++lit) + lyxerr << to_utf8(lit->name()) << endl; //lexrc.printError("Cannot copy known " // "style `$$Token'"); @@ -245,7 +248,7 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) if (tclass.hasLayout(style)) { docstring const tmpname = name_; - this->operator=(*tclass[style]); + this->operator=(tclass[style]); name_ = tmpname; if (obsoleted_by().empty()) obsoleted_by_ = style; @@ -311,16 +314,16 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) break; case LT_FONT: - font = lyxRead(lexrc); + font = lyxRead(lexrc, font); labelfont = font; break; case LT_TEXTFONT: - font = lyxRead(lexrc); + font = lyxRead(lexrc, font); break; case LT_LABELFONT: - labelfont = lyxRead(lexrc); + labelfont = lyxRead(lexrc, labelfont); break; case LT_NEXTNOINDENT: // Indent next paragraph? @@ -485,11 +488,19 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) case LT_SPACING: // setspace.sty readSpacing(lexrc); break; + + case LT_REQUIRES: + lexrc.eatLine(); + vector const req = + getVectorFromString(lexrc.getString()); + requires_.insert(req.begin(), req.end()); + break; + } } lexrc.popTable(); - return error; + return !error; } @@ -819,6 +830,16 @@ docstring const & Layout::depends_on() const } +bool Layout::operator==(Layout const & rhs) const +{ + // This is enough for the applications we actually make, + // at least at the moment. But we could check more. + return name() == rhs.name() + && latexname() == rhs.latexname() + && latextype == rhs.latextype; +} + + Layout * Layout::forCaption() { Layout * lay = new Layout();