X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxlayout.C;h=b81ea994251c7bcc7da7ffffd2770320830d31bd;hb=e7f4618bcce770369cf46335c2c7f0164b4b8857;hp=fc691697f7c0abb7a19f9e020024aa32fa337f53;hpb=92d522b7f1be6046adcac062c558bbf0bf021612;p=lyx.git diff --git a/src/lyxlayout.C b/src/lyxlayout.C index fc691697f7..b81ea99425 100644 --- a/src/lyxlayout.C +++ b/src/lyxlayout.C @@ -1,12 +1,13 @@ -/* This file is part of - * ====================================================== +/** + * \file lyxlayout.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author André Pönitz * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. - * - * ====================================================== + * Full author contact details are available in file CREDITS. */ #include @@ -18,9 +19,17 @@ #include "support/lstrings.h" -using namespace lyx::support; + +namespace lyx { + +using support::subst; +using support::trim; using std::endl; +using std::string; + +/// Special value of toclevel for layouts that to not belong in a TOC +const int LyXLayout::NOT_IN_TOC = -1000; // The order of the LayoutTags enum is no more important. [asierra300396] // Tags indexes. @@ -29,6 +38,7 @@ enum LayoutTags { LT_ALIGNPOSSIBLE, LT_MARGIN, LT_BOTTOMSEP, + LT_COMMANDDEPTH, LT_COPYSTYLE, LT_DEPENDSON, LT_OBSOLETEDBY, @@ -52,6 +62,7 @@ enum LayoutTags { LT_LABELSEP, LT_LABELSTRING, LT_LABELSTRING_APPENDIX, + LT_LABELCOUNTER, LT_LABELTYPE, LT_ENDLABELSTRING, LT_ENDLABELTYPE, @@ -74,7 +85,11 @@ enum LayoutTags { LT_RIGHTMARGIN, LT_SPACING, LT_TOPSEP, - LT_INTITLE + LT_TOCLEVEL, + LT_INNERTAG, + LT_LABELTAG, + LT_ITEMTAG, + LT_INTITLE // keep this last! }; ///////////////////// @@ -111,58 +126,66 @@ LyXLayout::LyXLayout () free_spacing = false; pass_thru = false; is_environment = false; + toclevel = NOT_IN_TOC; + commanddepth = 0; } // Reads a layout definition from file -bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) +bool LyXLayout::read(LyXLex & lexrc, LyXTextClass const & tclass) { // This table is sorted alphabetically [asierra 30March96] keyword_item layoutTags[] = { - { "align", LT_ALIGN }, - { "alignpossible", LT_ALIGNPOSSIBLE }, - { "bottomsep", LT_BOTTOMSEP }, - { "copystyle", LT_COPYSTYLE }, - { "dependson", LT_DEPENDSON }, - { "end", LT_END }, - { "endlabelstring", LT_ENDLABELSTRING }, - { "endlabeltype", LT_ENDLABELTYPE }, - { "fill_bottom", LT_FILL_BOTTOM }, - { "fill_top", LT_FILL_TOP }, - { "font", LT_FONT }, - { "freespacing", LT_FREE_SPACING }, - { "intitle", LT_INTITLE }, - { "itemsep", LT_ITEMSEP }, - { "keepempty", LT_KEEPEMPTY }, - { "labelbottomsep", LT_LABEL_BOTTOMSEP }, - { "labelfont", LT_LABELFONT }, - { "labelindent", LT_LABELINDENT }, - { "labelsep", LT_LABELSEP }, - { "labelstring", LT_LABELSTRING }, + { "align", LT_ALIGN }, + { "alignpossible", LT_ALIGNPOSSIBLE }, + { "bottomsep", LT_BOTTOMSEP }, + { "commanddepth", LT_COMMANDDEPTH }, + { "copystyle", LT_COPYSTYLE }, + { "dependson", LT_DEPENDSON }, + { "end", LT_END }, + { "endlabelstring", LT_ENDLABELSTRING }, + { "endlabeltype", LT_ENDLABELTYPE }, + { "fill_bottom", LT_FILL_BOTTOM }, + { "fill_top", LT_FILL_TOP }, + { "font", LT_FONT }, + { "freespacing", LT_FREE_SPACING }, + { "innertag", LT_INNERTAG }, + { "intitle", LT_INTITLE }, + { "itemsep", LT_ITEMSEP }, + { "itemtag", LT_ITEMTAG }, + { "keepempty", LT_KEEPEMPTY }, + { "labelbottomsep", LT_LABEL_BOTTOMSEP }, + { "labelcounter", LT_LABELCOUNTER }, + { "labelfont", LT_LABELFONT }, + { "labelindent", LT_LABELINDENT }, + { "labelsep", LT_LABELSEP }, + { "labelstring", LT_LABELSTRING }, { "labelstringappendix", LT_LABELSTRING_APPENDIX }, - { "labeltype", LT_LABELTYPE }, - { "latexfooter", LT_LATEXFOOTER }, - { "latexheader", LT_LATEXHEADER }, - { "latexname", LT_LATEXNAME }, - { "latexparagraph", LT_LATEXPARAGRAPH }, - { "latexparam", LT_LATEXPARAM }, - { "latextype", LT_LATEXTYPE }, - { "leftmargin", LT_LEFTMARGIN }, - { "margin", LT_MARGIN }, - { "needprotect", LT_NEED_PROTECT }, - { "newline", LT_NEWLINE }, - { "nextnoindent", LT_NEXTNOINDENT }, - { "obsoletedby", LT_OBSOLETEDBY }, - { "optionalargs", LT_OPTARGS }, - { "parindent", LT_PARINDENT }, - { "parsep", LT_PARSEP }, - { "parskip", LT_PARSKIP }, - { "passthru", LT_PASS_THRU }, - { "preamble", LT_PREAMBLE }, - { "rightmargin", LT_RIGHTMARGIN }, - { "spacing", LT_SPACING }, - { "textfont", LT_TEXTFONT }, - { "topsep", LT_TOPSEP } + { "labeltag", LT_LABELTAG }, + { "labeltype", LT_LABELTYPE }, + { "latexfooter", LT_LATEXFOOTER }, + { "latexheader", LT_LATEXHEADER }, + { "latexname", LT_LATEXNAME }, + { "latexparagraph", LT_LATEXPARAGRAPH }, + { "latexparam", LT_LATEXPARAM }, + { "latextype", LT_LATEXTYPE }, + { "leftmargin", LT_LEFTMARGIN }, + { "margin", LT_MARGIN }, + { "needprotect", LT_NEED_PROTECT }, + { "newline", LT_NEWLINE }, + { "nextnoindent", LT_NEXTNOINDENT }, + { "obsoletedby", LT_OBSOLETEDBY }, + { "optionalargs", LT_OPTARGS }, + { "parindent", LT_PARINDENT }, + { "parsep", LT_PARSEP }, + { "parskip", LT_PARSKIP }, + { "passthru", LT_PASS_THRU }, + { "preamble", LT_PREAMBLE }, + { "rightmargin", LT_RIGHTMARGIN }, + { "spacing", LT_SPACING }, + { "textfont", LT_TEXTFONT }, + { "toclevel", LT_TOCLEVEL }, + { "topsep", LT_TOPSEP } }; bool error = false; @@ -189,7 +212,8 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) case LT_COPYSTYLE: // initialize with a known style if (lexrc.next()) { - string const style = lexrc.getString(); + string const style = subst(lexrc.getString(), + '_', ' '); if (tclass.hasLayout(style)) { string const tmpname = name_; @@ -236,9 +260,8 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) break; case LT_DEPENDSON: - if (lexrc.next()) { + if (lexrc.next()) depends_on_ = lexrc.getString(); - } break; case LT_MARGIN: // margin style definition. @@ -268,10 +291,14 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) intitle = lexrc.next() && lexrc.getInteger(); break; + case LT_TOCLEVEL: + lexrc.next(); + toclevel = lexrc.getInteger(); + break; + case LT_OPTARGS: - if (lexrc.next()) { + if (lexrc.next()) optionalargs = lexrc.getInteger(); - } break; case LT_NEED_PROTECT: @@ -302,6 +329,11 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) nextnoindent = false; break; + case LT_COMMANDDEPTH: + lexrc.next(); + commanddepth = lexrc.getInteger(); + break; + case LT_LATEXNAME: if (lexrc.next()) latexname_ = lexrc.getString(); @@ -309,11 +341,26 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) case LT_LATEXPARAM: if (lexrc.next()) - latexparam_ = lexrc.getString(); + latexparam_ = subst(lexrc.getString(), """, "\""); + break; + + case LT_INNERTAG: + if (lexrc.next()) + innertag_ = lexrc.getString(); + break; + + case LT_LABELTAG: + if (lexrc.next()) + labeltag_ = lexrc.getString(); + break; + + case LT_ITEMTAG: + if (lexrc.next()) + itemtag_ = lexrc.getString(); break; case LT_PREAMBLE: - preamble_ = lexrc.getLongString("EndPreamble"); + preamble_ = from_utf8(lexrc.getLongString("EndPreamble")); break; case LT_LABELTYPE: @@ -404,17 +451,22 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) case LT_LABELSTRING: // label string definition if (lexrc.next()) - labelstring_ = trim(lexrc.getString()); + labelstring_ = trim(lexrc.getDocString()); break; case LT_ENDLABELSTRING: // endlabel string definition if (lexrc.next()) - endlabelstring_ = trim(lexrc.getString()); + endlabelstring_ = trim(lexrc.getDocString()); break; case LT_LABELSTRING_APPENDIX: // label string appendix definition if (lexrc.next()) - labelstring_appendix_ = trim(lexrc.getString()); + labelstring_appendix_ = trim(lexrc.getDocString()); + break; + + case LT_LABELCOUNTER: // name of counter to use + if (lexrc.next()) + counter = lyx::from_ascii(trim(lexrc.getString())); break; case LT_FREE_SPACING: // Allow for free spacing. @@ -433,6 +485,9 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass) } } lexrc.popTable(); + + if (labelstring_appendix_.empty()) + labelstring_appendix_ = labelstring_; return error; } @@ -534,16 +589,9 @@ enum LabelTypeTags { LA_CENTERED_TOP_ENVIRONMENT, LA_STATIC, LA_SENSITIVE, - LA_COUNTER_CHAPTER, - LA_COUNTER_SECTION, - LA_COUNTER_SUBSECTION, - LA_COUNTER_SUBSUBSECTION, - LA_COUNTER_PARAGRAPH, - LA_COUNTER_SUBPARAGRAPH, - LA_COUNTER_ENUMI, - LA_COUNTER_ENUMII, - LA_COUNTER_ENUMIII, - LA_COUNTER_ENUMIV, + LA_COUNTER, + LA_ENUMERATE, + LA_ITEMIZE, LA_BIBLIO }; @@ -553,16 +601,9 @@ void LyXLayout::readLabelType(LyXLex & lexrc) 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 }, + { "counter", LA_COUNTER }, + { "enumerate", LA_ENUMERATE }, + { "itemize", LA_ITEMIZE }, { "manual", LA_MANUAL }, { "no_label", LA_NO_LABEL }, { "sensitive", LA_SENSITIVE }, @@ -597,35 +638,14 @@ void LyXLayout::readLabelType(LyXLex & lexrc) case LA_SENSITIVE: labeltype = LABEL_SENSITIVE; break; - case LA_COUNTER_CHAPTER: - labeltype = LABEL_COUNTER_CHAPTER; + case LA_COUNTER: + labeltype = LABEL_COUNTER; break; - case LA_COUNTER_SECTION: - labeltype = LABEL_COUNTER_SECTION; + case LA_ENUMERATE: + labeltype = LABEL_ENUMERATE; break; - case LA_COUNTER_SUBSECTION: - labeltype = LABEL_COUNTER_SUBSECTION; - break; - case LA_COUNTER_SUBSUBSECTION: - labeltype = LABEL_COUNTER_SUBSUBSECTION; - break; - case LA_COUNTER_PARAGRAPH: - labeltype = LABEL_COUNTER_PARAGRAPH; - break; - case LA_COUNTER_SUBPARAGRAPH: - labeltype = LABEL_COUNTER_SUBPARAGRAPH; - break; - case LA_COUNTER_ENUMI: - labeltype = LABEL_COUNTER_ENUMI; - break; - case LA_COUNTER_ENUMII: - labeltype = LABEL_COUNTER_ENUMII; - break; - case LA_COUNTER_ENUMIII: - labeltype = LABEL_COUNTER_ENUMIII; - break; - case LA_COUNTER_ENUMIV: - labeltype = LABEL_COUNTER_ENUMIV; + case LA_ITEMIZE: + labeltype = LABEL_ITEMIZE; break; case LA_BIBLIO: labeltype = LABEL_BIBLIO; @@ -771,7 +791,7 @@ void LyXLayout::readSpacing(LyXLex & lexrc) break; case ST_OTHER: lexrc.next(); - spacing.set(Spacing::Other, lexrc.getFloat()); + spacing.set(Spacing::Other, lexrc.getString()); break; } } @@ -799,3 +819,6 @@ string const & LyXLayout::depends_on() const { return depends_on_; } + + +} // namespace lyx