X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flayout.C;h=58fd7f1bb93ec9b31cc1b7a8965196533bbf3521;hb=9f7498dbdf16f61cd5c9ee82e0cb6576d2bf620f;hp=37898f03844cc55ec54a8d4671ed18792e68e559;hpb=5c7e829eff86ccacecc114a5c1d9ee6d8a1691b6;p=lyx.git diff --git a/src/layout.C b/src/layout.C index 37898f0384..58fd7f1bb9 100644 --- a/src/layout.C +++ b/src/layout.C @@ -6,7 +6,8 @@ * Copyright 1995 Matthias Ettrich * Copyright 1995-2000 The LyX Team. * - * ====================================================== */ + * ====================================================== + */ #include @@ -23,11 +24,14 @@ #include "debug.h" #include "gettext.h" #include "support/LAssert.h" +#include "support/lyxfunctional.h" using std::pair; using std::make_pair; using std::sort; using std::endl; +using std::find_if; +using std::remove_if; // Global variable: textclass table. LyXTextClassList textclasslist; @@ -184,7 +188,7 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) while (!finished && lexrc.IsOK() && !error) { int le = lexrc.lex(); // See comment in lyxrc.C. - switch(le) { + switch (le) { case LyXLex::LEX_FEOF: continue; @@ -194,7 +198,7 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) continue; default: break; } - switch(static_cast(le)) { + switch (static_cast(le)) { case LT_END: // end of structure finished = true; break; @@ -425,7 +429,7 @@ void LyXLayout::readAlign(LyXLex & lexrc) return; default: break; }; - switch(static_cast(le)) { + switch (static_cast(le)) { case AT_BLOCK: align = LYX_ALIGN_BLOCK; break; @@ -509,29 +513,6 @@ enum LabelTypeTags { }; -#if 0 -static keyword_item labelTypeTags[] = { - { "bibliography", LA_BIBLIO }, - { "centered_top_environment", LA_CENTERED_TOP_ENVIRONMENT }, - { "counter_chapter", LA_COUNTER_CHAPTER }, - { "counter_enumi", LA_COUNTER_ENUMI }, - { "counter_enumii", LA_COUNTER_ENUMII }, - { "counter_enumiii", LA_COUNTER_ENUMIII }, - { "counter_enumiv", LA_COUNTER_ENUMIV }, - { "counter_paragraph", LA_COUNTER_PARAGRAPH }, - { "counter_section", LA_COUNTER_SECTION }, - { "counter_subparagraph", LA_COUNTER_SUBPARAGRAPH }, - { "counter_subsection", LA_COUNTER_SUBSECTION }, - { "counter_subsubsection", LA_COUNTER_SUBSUBSECTION }, - { "manual", LA_MANUAL }, - { "no_label", LA_NO_LABEL }, - { "sensitive", LA_SENSITIVE }, - { "static", LA_STATIC }, - { "top_environment", LA_TOP_ENVIRONMENT } -}; -#endif - - void LyXLayout::readLabelType(LyXLex & lexrc) { keyword_item labelTypeTags[] = { @@ -617,19 +598,25 @@ void LyXLayout::readLabelType(LyXLex & lexrc) } } -static keyword_item endlabelTypeTags[] = { + +namespace { + +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 LyXLayout::readEndLabelType(LyXLex & lexrc) { pushpophelper pph(lexrc, endlabelTypeTags, END_LABEL_ENUM_LAST-END_LABEL_ENUM_FIRST+1); int le = lexrc.lex(); - switch(le) { + switch (le) { case LyXLex::LEX_UNDEF: lexrc.printError("Unknown labeltype tag `$$Token'"); break; @@ -646,15 +633,6 @@ void LyXLayout::readEndLabelType(LyXLex & lexrc) } } -#if 0 -static keyword_item marginTags[] = { - { "dynamic", MARGIN_DYNAMIC }, - { "first_dynamic", MARGIN_FIRST_DYNAMIC }, - { "manual", MARGIN_MANUAL }, - { "right_address_box", MARGIN_RIGHT_ADDRESS_BOX }, - { "static", MARGIN_STATIC } -}; -#endif void LyXLayout::readMargin(LyXLex & lexrc) { @@ -669,7 +647,7 @@ void LyXLayout::readMargin(LyXLex & lexrc) pushpophelper pph(lexrc, marginTags, MARGIN_RIGHT_ADDRESS_BOX); int le = lexrc.lex(); - switch(le) { + switch (le) { case LyXLex::LEX_UNDEF: lexrc.printError("Unknown margin type tag `$$Token'"); return; @@ -688,17 +666,6 @@ void LyXLayout::readMargin(LyXLex & lexrc) } -#if 0 -static keyword_item latexTypeTags[] = { - { "command", LATEX_COMMAND }, - { "environment", LATEX_ENVIRONMENT }, - { "item_environment", LATEX_ITEM_ENVIRONMENT }, - { "list_environment", LATEX_LIST_ENVIRONMENT }, - { "paragraph", LATEX_PARAGRAPH } -}; -#endif - - void LyXLayout::readLatexType(LyXLex & lexrc) { keyword_item latexTypeTags[] = { @@ -738,16 +705,6 @@ enum SpacingTags { }; -#if 0 -static keyword_item spacingTags[] = { - {"double", ST_SPACING_DOUBLE }, - {"onehalf", ST_SPACING_ONEHALF }, - {"other", ST_OTHER }, - {"single", ST_SPACING_SINGLE } -}; -#endif - - void LyXLayout::readSpacing(LyXLex & lexrc) { keyword_item spacingTags[] = { @@ -759,13 +716,13 @@ void LyXLayout::readSpacing(LyXLex & lexrc) pushpophelper pph(lexrc, spacingTags, ST_OTHER); int le = lexrc.lex(); - switch(le) { + switch (le) { case LyXLex::LEX_UNDEF: lexrc.printError("Unknown spacing token `$$Token'"); return; default: break; } - switch(static_cast(le)) { + switch (static_cast(le)) { case ST_SPACING_SINGLE: spacing.set(Spacing::Single); break; @@ -842,30 +799,6 @@ enum TextClassTags { }; -#if 0 -static keyword_item textClassTags[] = { - { "classoptions", TC_CLASSOPTIONS }, - { "columns", TC_COLUMNS }, - { "defaultfont", TC_DEFAULTFONT }, - { "input", TC_INPUT }, - { "leftmargin", TC_LEFTMARGIN }, - { "maxcounter", TC_MAXCOUNTER }, - { "nostyle", TC_NOSTYLE }, - { "outputtype", TC_OUTPUTTYPE }, - { "pagestyle", TC_PAGESTYLE }, - { "preamble", TC_PREAMBLE }, - { "providesamsmath", TC_PROVIDESAMSMATH }, - { "providesmakeidx", TC_PROVIDESMAKEIDX }, - { "providesurl", TC_PROVIDESURL }, - { "rightmargin", TC_RIGHTMARGIN }, - { "secnumdepth", TC_SECNUMDEPTH }, - { "sides", TC_SIDES }, - { "style", TC_STYLE }, - { "tocdepth", TC_TOCDEPTH } -}; -#endif - - // Reads a textclass structure from file. bool LyXTextClass::Read(string const & filename, bool merge) { @@ -908,7 +841,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) // parsing while (lexrc.IsOK() && !error) { int le = lexrc.lex(); - switch(le) { + switch (le) { case LyXLex::LEX_FEOF: continue; @@ -918,7 +851,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) continue; default: break; } - switch(static_cast(le)) { + switch (static_cast(le)) { case TC_OUTPUTTYPE: // output type definition readOutputType(lexrc); break; @@ -946,7 +879,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) error = do_readStyle(lexrc, lay); } else { LyXLayout lay; - lay.name(name); + lay.setName(name); if (!(error = do_readStyle(lexrc, lay))) layoutlist.push_back(lay); } @@ -974,7 +907,7 @@ bool LyXTextClass::Read(string const & filename, bool merge) case TC_SIDES: if (lexrc.next()) { - switch(lexrc.GetInteger()) { + switch (lexrc.GetInteger()) { case 1: sides_ = OneSide; break; case 2: sides_ = TwoSides; break; default: @@ -1064,15 +997,6 @@ bool LyXTextClass::Read(string const & filename, bool merge) } -#if 0 -static keyword_item outputTypeTags[] = { - { "docbook", DOCBOOK }, - { "latex", LATEX }, - { "linuxdoc", LINUXDOC }, - { "literate", LITERATE } -}; -#endif - void LyXTextClass::readOutputType(LyXLex & lexrc) { keyword_item outputTypeTags[] = { @@ -1085,7 +1009,7 @@ void LyXTextClass::readOutputType(LyXLex & lexrc) pushpophelper pph(lexrc, outputTypeTags, LITERATE); int le = lexrc.lex(); - switch(le) { + switch (le) { case LyXLex::LEX_UNDEF: lexrc.printError("Unknown output type `$$Token'"); return; @@ -1118,22 +1042,6 @@ enum MaxCounterTags { }; -#if 0 -static keyword_item maxCounterTags[] = { - {"counter_chapter", MC_COUNTER_CHAPTER }, - {"counter_enumi", MC_COUNTER_ENUMI }, - {"counter_enumii", MC_COUNTER_ENUMII }, - {"counter_enumiii", MC_COUNTER_ENUMIII }, - {"counter_enumiv", MC_COUNTER_ENUMIV }, - {"counter_paragraph", MC_COUNTER_PARAGRAPH }, - {"counter_section", MC_COUNTER_SECTION }, - {"counter_subparagraph", MC_COUNTER_SUBPARAGRAPH }, - {"counter_subsection", MC_COUNTER_SUBSECTION }, - {"counter_subsubsection", MC_COUNTER_SUBSUBSECTION } -}; -#endif - - void LyXTextClass::readMaxCounter(LyXLex & lexrc) { keyword_item maxCounterTags[] = { @@ -1151,7 +1059,7 @@ void LyXTextClass::readMaxCounter(LyXLex & lexrc) pushpophelper pph(lexrc, maxCounterTags, MC_COUNTER_ENUMIV); int le = lexrc.lex(); - switch(le) { + switch (le) { case LyXLex::LEX_UNDEF: lexrc.printError("Unknown MaxCounter tag `$$Token'"); return; @@ -1200,16 +1108,6 @@ enum ClassOptionsTags { }; -#if 0 -static keyword_item classOptionsTags[] = { - {"end", CO_END }, - {"fontsize", CO_FONTSIZE }, - {"other", CO_OTHER }, - {"pagestyle", CO_PAGESTYLE } -}; -#endif - - void LyXTextClass::readClassOptions(LyXLex & lexrc) { keyword_item classOptionsTags[] = { @@ -1253,49 +1151,43 @@ void LyXTextClass::readClassOptions(LyXLex & lexrc) bool LyXTextClass::hasLayout(string const & name) const { - for (LayoutList::const_iterator cit = layoutlist.begin(); - cit != layoutlist.end(); ++cit) { - if ((*cit).name() == name) - return true; - } - return false; + return find_if(layoutlist.begin(), layoutlist.end(), + compare_memfun(&LyXLayout::name, name)) + != layoutlist.end(); } LyXLayout const & LyXTextClass::GetLayout (string const & name) const { - for (LayoutList::const_iterator cit = layoutlist.begin(); - cit != layoutlist.end(); ++cit) { - if ((*cit).name() == name) - return (*cit); - } - Assert(false); // we actually require the name to exist. - return layoutlist.front(); + LayoutList::const_iterator cit = + find_if(layoutlist.begin(), + layoutlist.end(), + compare_memfun(&LyXLayout::name, name)); + Assert(cit != layoutlist.end()); // we require the name to exist + return (*cit); } LyXLayout & LyXTextClass::GetLayout(string const & name) { - for (LayoutList::iterator it = layoutlist.begin(); - it != layoutlist.end(); ++it) { - if ((*it).name() == name) - return (*it); - } - Assert(false); // we actually require the name to exist. - return layoutlist.front(); + LayoutList::iterator it = + find_if(layoutlist.begin(), + layoutlist.end(), + compare_memfun(&LyXLayout::name, name)); + Assert(it != layoutlist.end()); // we require the name to exist + return (*it); } -bool LyXTextClass::delete_layout (string const & name) +bool LyXTextClass::delete_layout(string const & name) { - for(LayoutList::iterator it = layoutlist.begin(); - it != layoutlist.end(); ++it) { - if ((*it).name() == name) { - layoutlist.erase(it); - return true; - } - } - return false; + LayoutList::iterator it = + remove_if(layoutlist.begin(), layoutlist.end(), + compare_memfun(&LyXLayout::name, name)); + LayoutList::iterator end = layoutlist.end(); + bool const ret = (it != end); + layoutlist.erase(it, end); + return ret; } @@ -1305,7 +1197,7 @@ void LyXTextClass::load() if (loaded) return; // Read style-file - string real_file = LibFileSearch("layouts", name_, "layout"); + string const real_file = LibFileSearch("layouts", name_, "layout"); if (Read(real_file)) { lyxerr << "Error reading `" @@ -1321,15 +1213,15 @@ void LyXTextClass::load() ////////////////////////////////////////// // Gets textclass number from name -pair +pair const LyXTextClassList::NumberOfClass(string const & textclass) const { - for (ClassList::const_iterator cit = classlist.begin(); - cit != classlist.end(); ++cit) { - if ((*cit).name() == textclass) - return make_pair(true, cit - classlist.begin()); - } - return make_pair(false, size_type(0)); + ClassList::const_iterator cit = + find_if(classlist.begin(), classlist.end(), + compare_memfun(&LyXTextClass::name, textclass)); + return cit != classlist.end() ? + make_pair(true, size_type(cit - classlist.begin())) : + make_pair(false, size_type(0)); } @@ -1346,18 +1238,18 @@ LyXTextClassList::Style(LyXTextClassList::size_type textclass, // Gets layout number from name and textclass number -pair +pair const LyXTextClassList::NumberOfLayout(LyXTextClassList::size_type textclass, string const & name) const { classlist[textclass].load(); - for(unsigned int i = 0; i < classlist[textclass].numLayouts(); ++i) { + for (unsigned int i = 0; i < classlist[textclass].numLayouts(); ++i) { if (classlist[textclass][i].name() == name) return make_pair(true, i); } if (name == "dummy") - return make_pair(true, LYX_DUMMY_LAYOUT); - return make_pair(false, LyXTextClass::LayoutList::size_type(0)); // not found + return make_pair(true, LyXTextClassList::size_type(LYX_DUMMY_LAYOUT)); + return make_pair(false, LyXTextClass::size_type(0)); // not found } @@ -1560,3 +1452,4 @@ std::ostream & operator<<(std::ostream & os, LyXTextClass::PageSides p) } return os; } +