-/* 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 <config.h>
#include "support/lstrings.h"
+using lyx::support::subst;
+using lyx::support::trim;
+
using std::endl;
+using std::string;
+
// The order of the LayoutTags enum is no more important. [asierra300396]
// Tags indexes.
LT_LABELSEP,
LT_LABELSTRING,
LT_LABELSTRING_APPENDIX,
+ LT_LABELCOUNTER,
LT_LABELTYPE,
LT_ENDLABELSTRING,
LT_ENDLABELTYPE,
LT_LATEXPARAM,
LT_OPTARGS,
LT_LATEXTYPE,
+ LT_LATEXHEADER,
+ LT_LATEXFOOTER,
+ LT_LATEXPARAGRAPH,
LT_LEFTMARGIN,
LT_NEED_PROTECT,
LT_NEWLINE,
LT_RIGHTMARGIN,
LT_SPACING,
LT_TOPSEP,
+ LT_TOCLEVEL,
LT_INTITLE
};
newline_allowed = true;
free_spacing = false;
pass_thru = false;
+ is_environment = false;
+ toclevel = 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[] = {
{ "itemsep", LT_ITEMSEP },
{ "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 },
{ "rightmargin", LT_RIGHTMARGIN },
{ "spacing", LT_SPACING },
{ "textfont", LT_TEXTFONT },
+ { "toclevel", LT_TOCLEVEL },
{ "topsep", LT_TOPSEP }
};
break;
case LT_DEPENDSON:
- if (lexrc.next()) {
+ if (lexrc.next())
depends_on_ = lexrc.getString();
- }
break;
- case LT_MARGIN: // Margin style definition.
+ case LT_MARGIN: // margin style definition.
readMargin(lexrc);
break;
- case LT_LATEXTYPE: // Latex style definition.
+ case LT_LATEXTYPE: // LaTeX style definition.
readLatexType(lexrc);
break;
+ case LT_LATEXHEADER: // header for environments
+ lexrc.next();
+ latexheader = lexrc.getString();
+ break;
+
+ case LT_LATEXFOOTER: // footer for environments
+ lexrc.next();
+ latexfooter = lexrc.getString();
+ break;
+
+ case LT_LATEXPARAGRAPH:
+ lexrc.next();
+ latexparagraph = lexrc.getString();
+ break;
+
case LT_INTITLE:
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:
case LT_LABELSTRING: // label string definition
if (lexrc.next())
- labelstring_ = lexrc.getString();
+ labelstring_ = trim(lexrc.getString());
break;
case LT_ENDLABELSTRING: // endlabel string definition
if (lexrc.next())
- endlabelstring_ = lexrc.getString();
+ endlabelstring_ = trim(lexrc.getString());
break;
case LT_LABELSTRING_APPENDIX: // label string appendix definition
if (lexrc.next())
- labelstring_appendix_ = lexrc.getString();
+ labelstring_appendix_ = trim(lexrc.getString());
+ break;
+
+ case LT_LABELCOUNTER: // name of counter to use
+ if (lexrc.next())
+ counter = trim(lexrc.getString());
break;
case LT_FREE_SPACING: // Allow for free spacing.
}
}
lexrc.popTable();
+
+ if (labelstring_appendix_.empty())
+ labelstring_appendix_ = labelstring_;
return error;
}
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
};
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 },
{ "static", LA_STATIC },
{ "top_environment", LA_TOP_ENVIRONMENT }
-};
+ };
pushpophelper pph(lexrc, labelTypeTags, LA_BIBLIO);
int le = lexrc.lex();
case LA_SENSITIVE:
labeltype = LABEL_SENSITIVE;
break;
- case LA_COUNTER_CHAPTER:
- labeltype = LABEL_COUNTER_CHAPTER;
- break;
- case LA_COUNTER_SECTION:
- labeltype = LABEL_COUNTER_SECTION;
- 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;
+ case LA_COUNTER:
+ labeltype = LABEL_COUNTER;
break;
- case LA_COUNTER_ENUMIII:
- labeltype = LABEL_COUNTER_ENUMIII;
+ case LA_ENUMERATE:
+ labeltype = LABEL_ENUMERATE;
break;
- case LA_COUNTER_ENUMIV:
- labeltype = LABEL_COUNTER_ENUMIV;
+ case LA_ITEMIZE:
+ labeltype = LABEL_ITEMIZE;
break;
case LA_BIBLIO:
labeltype = LABEL_BIBLIO;