X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.cpp;h=7fedb3209c11fc16da9b7edc43a6c3d4626958e2;hb=0362c6aae73c293d1c20277c12d362acfe0b2ef6;hp=903fb24162dad4021a1bba84bffb4897a06c4db0;hpb=4a53fa6e018c2809a3e829c7d8d90590e420a2e3;p=lyx.git diff --git a/src/Layout.cpp b/src/Layout.cpp index 903fb24162..7fedb3209c 100644 --- a/src/Layout.cpp +++ b/src/Layout.cpp @@ -15,18 +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" +#include -namespace lyx { - -using support::subst; -using support::trim; +using namespace std; +using namespace lyx::support; -using std::endl; -using std::string; +namespace lyx { /// Special value of toclevel for layouts that to not belong in a TOC const int Layout::NOT_IN_TOC = -1000; @@ -82,6 +81,7 @@ enum LayoutTags { LT_PARSKIP, //LT_PLAIN, LT_PREAMBLE, + LT_REQUIRES, LT_RIGHTMARGIN, LT_SPACING, LT_TOPSEP, @@ -94,8 +94,7 @@ enum LayoutTags { ///////////////////// -// Constructor for layout -Layout::Layout () +Layout::Layout() { margintype = MARGIN_STATIC; latextype = LATEX_PARAGRAPH; @@ -103,10 +102,10 @@ Layout::Layout () optionalargs = 0; needprotect = false; keepempty = false; - font = Font(Font::ALL_INHERIT); - labelfont = Font(Font::ALL_INHERIT); - resfont = Font(Font::ALL_SANE); - reslabelfont = Font(Font::ALL_SANE); + font = inherit_font; + labelfont = inherit_font; + resfont = sane_font; + reslabelfont = sane_font; nextnoindent = false; parskip = 0.0; itemsep = 0; @@ -115,7 +114,7 @@ Layout::Layout () labelbottomsep = 0.0; parsep = 0; align = LYX_ALIGN_BLOCK; - alignpossible = LYX_ALIGN_BLOCK; + alignpossible = LYX_ALIGN_NONE | LYX_ALIGN_LAYOUT; labeltype = LABEL_NO_LABEL; endlabeltype = END_LABEL_NO_LABEL; // Should or should not. That is the question. @@ -131,7 +130,6 @@ Layout::Layout () } -// Reads a layout definition from file bool Layout::read(Lexer & lexrc, TextClass const & tclass) { // This table is sorted alphabetically [asierra 30March96] @@ -181,6 +179,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 }, @@ -224,14 +223,9 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) << 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()) + for (size_t i = 0; i != tclass.layoutCount(); ++i) + lyxerr << to_utf8(tclass.layout(i)->name()) << endl; - } //lexrc.printError("Cannot copy known " // "style `$$Token'"); @@ -241,7 +235,8 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) case LT_OBSOLETEDBY: // replace with a known style if (lexrc.next()) { - docstring const style = lexrc.getDocString(); + docstring const style = + subst(lexrc.getDocString(), '_', ' '); if (tclass.hasLayout(style)) { docstring const tmpname = name_; @@ -262,7 +257,7 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) case LT_DEPENDSON: if (lexrc.next()) - depends_on_ = lexrc.getDocString(); + depends_on_ = subst(lexrc.getDocString(), '_', ' '); break; case LT_MARGIN: // margin style definition. @@ -311,16 +306,16 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) break; case LT_FONT: - font.lyxRead(lexrc); - labelfont= font; + 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? @@ -374,22 +369,22 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) case LT_LEFTMARGIN: // left margin type if (lexrc.next()) - leftmargin = lexrc.getString(); + leftmargin = lexrc.getDocString(); break; case LT_RIGHTMARGIN: // right margin type if (lexrc.next()) - rightmargin = lexrc.getString(); + rightmargin = lexrc.getDocString(); break; case LT_LABELINDENT: // label indenting flag if (lexrc.next()) - labelindent = lexrc.getString(); + labelindent = lexrc.getDocString(); break; case LT_PARINDENT: // paragraph indent. flag if (lexrc.next()) - parindent = lexrc.getString(); + parindent = lexrc.getDocString(); break; case LT_PARSKIP: // paragraph skip size @@ -419,7 +414,7 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) case LT_LABELSEP: // label separator if (lexrc.next()) { - labelsep = subst(lexrc.getString(), 'x', ' '); + labelsep = from_utf8(subst(lexrc.getString(), 'x', ' ')); } break; @@ -485,11 +480,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; } @@ -551,7 +554,7 @@ void Layout::readAlignPossible(Lexer & lexrc) }; lexrc.pushTable(alignTags, AT_LAYOUT); - alignpossible = LYX_ALIGN_NONE; + alignpossible = LYX_ALIGN_NONE | LYX_ALIGN_LAYOUT; int lineno = lexrc.getLineNo(); do { int le = lexrc.lex(); @@ -655,17 +658,14 @@ void Layout::readLabelType(Lexer & lexrc) } -namespace { - -keyword_item endlabelTypeTags[] = { +static keyword_item endlabelTypeTags[] = +{ { "box", END_LABEL_BOX }, { "filled_box", END_LABEL_FILLED_BOX }, { "no_label", END_LABEL_NO_LABEL }, { "static", END_LABEL_STATIC } }; -} // namespace anon - void Layout::readEndLabelType(Lexer & lexrc) { @@ -680,7 +680,7 @@ void Layout::readEndLabelType(Lexer & lexrc) case END_LABEL_BOX: case END_LABEL_FILLED_BOX: case END_LABEL_NO_LABEL: - endlabeltype = static_cast(le); + endlabeltype = static_cast(le); break; default: lyxerr << "Unhandled value " << le @@ -712,7 +712,7 @@ void Layout::readMargin(Lexer & lexrc) case MARGIN_DYNAMIC: case MARGIN_FIRST_DYNAMIC: case MARGIN_RIGHT_ADDRESS_BOX: - margintype = static_cast(le); + margintype = static_cast(le); break; default: lyxerr << "Unhandled value " << le @@ -745,7 +745,7 @@ void Layout::readLatexType(Lexer & lexrc) case LATEX_ITEM_ENVIRONMENT: case LATEX_BIB_ENVIRONMENT: case LATEX_LIST_ENVIRONMENT: - latextype = static_cast(le); + latextype = static_cast(le); break; default: lyxerr << "Unhandled value " << le @@ -804,9 +804,9 @@ docstring const & Layout::name() const } -void Layout::setName(docstring const & n) +void Layout::setName(docstring const & name) { - name_ = n; + name_ = name; } @@ -832,6 +832,4 @@ Layout * Layout::forCaption() return lay; } - - } // namespace lyx