-
/* This file is part of
- * ======================================================
- *
+ * ======================================================
+ *
* LyX, The Document Processor
- *
+ *
* Copyright 1995 Matthias Ettrich
* Copyright 1995-2001 The LyX Team.
*
#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include "lyxlayout.h"
#include "lyxtextclass.h"
#include "lyxlex.h"
// The order of the LayoutTags enum is no more important. [asierra300396]
// Tags indexes.
enum LayoutTags {
- LT_ALIGN = 1,
- LT_ALIGNPOSSIBLE,
- LT_MARGIN,
- LT_BOTTOMSEP,
- LT_COPYSTYLE,
- LT_OBSOLETEDBY,
+ LT_ALIGN = 1,
+ LT_ALIGNPOSSIBLE,
+ LT_MARGIN,
+ LT_BOTTOMSEP,
+ LT_COPYSTYLE,
+ LT_DEPENDSON,
+ LT_OBSOLETEDBY,
//LT_EMPTY,
- LT_END,
- //LT_ENVIRONMENT_DEFAULT,
+ LT_END,
+ //LT_ENVIRONMENT_DEFAULT,
//LT_FANCYHDR,
- LT_FILL_BOTTOM,
- LT_FILL_TOP,
+ LT_FILL_BOTTOM,
+ LT_FILL_TOP,
//LT_FIRST_COUNTER,
- LT_FONT,
- LT_FREE_SPACING,
+ LT_FONT,
+ LT_FREE_SPACING,
LT_PASS_THRU,
//LT_HEADINGS,
- LT_ITEMSEP,
- LT_KEEPEMPTY,
- LT_LABEL_BOTTOMSEP,
- LT_LABELFONT,
+ LT_ITEMSEP,
+ LT_KEEPEMPTY,
+ LT_LABEL_BOTTOMSEP,
+ LT_LABELFONT,
LT_TEXTFONT,
- LT_LABELINDENT,
- LT_LABELSEP,
- LT_LABELSTRING,
- LT_LABELSTRING_APPENDIX,
+ LT_LABELINDENT,
+ LT_LABELSEP,
+ LT_LABELSTRING,
+ LT_LABELSTRING_APPENDIX,
LT_LABELTYPE,
LT_ENDLABELSTRING,
LT_ENDLABELTYPE,
- LT_LATEXNAME,
- LT_LATEXPARAM,
- LT_LATEXTYPE,
- LT_LEFTMARGIN,
- LT_NEED_PROTECT,
- LT_NEWLINE,
- LT_NEXTNOINDENT,
- LT_PARINDENT,
- LT_PARSEP,
- LT_PARSKIP,
+ LT_LATEXNAME,
+ LT_LATEXPARAM,
+ LT_OPTARGS,
+ LT_LATEXTYPE,
+ LT_LEFTMARGIN,
+ LT_NEED_PROTECT,
+ LT_NEWLINE,
+ LT_NEXTNOINDENT,
+ LT_PARINDENT,
+ LT_PARSEP,
+ LT_PARSKIP,
//LT_PLAIN,
- LT_PREAMBLE,
- LT_RIGHTMARGIN,
- LT_SPACING,
- LT_TOPSEP,
- LT_INTITLE
+ LT_PREAMBLE,
+ LT_RIGHTMARGIN,
+ LT_SPACING,
+ LT_TOPSEP,
+ LT_INTITLE
};
/////////////////////
margintype = MARGIN_STATIC;
latextype = LATEX_PARAGRAPH;
intitle = false;
+ optionalargs = 0;
needprotect = false;
keepempty = false;
font = LyXFont(LyXFont::ALL_INHERIT);
{
// This table is sorted alphabetically [asierra 30March96]
keyword_item layoutTags[] = {
- { "align", LT_ALIGN },
- { "alignpossible", LT_ALIGNPOSSIBLE },
- { "bottomsep", LT_BOTTOMSEP },
- { "copystyle", LT_COPYSTYLE },
- { "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 },
- { "labelstringappendix", LT_LABELSTRING_APPENDIX },
- { "labeltype", LT_LABELTYPE },
- { "latexname", LT_LATEXNAME },
- { "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 },
- { "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 }
+ { "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 },
+ { "labelstringappendix", LT_LABELSTRING_APPENDIX },
+ { "labeltype", LT_LABELTYPE },
+ { "latexname", LT_LATEXNAME },
+ { "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 }
};
bool error = false;
// See comment in lyxrc.C.
switch (le) {
case LyXLex::LEX_FEOF:
- continue;
+ continue;
case LyXLex::LEX_UNDEF: // parse error
lexrc.printError("Unknown layout tag `$$Token'");
error = true;
- continue;
+ continue;
default: break;
}
switch (static_cast<LayoutTags>(le)) {
break;
case LT_COPYSTYLE: // initialize with a known style
- if (lexrc.next()) {
- string const style = lowercase(lexrc.getString());
-
+ if (lexrc.next()) {
+ string const style = lexrc.getString();
+
if (tclass.hasLayout(style)) {
- string const tmpname = lowercase(name_);
- this->operator=(tclass[style]);
- name_ = lowercase(tmpname);
+ string const tmpname = name_;
+ this->operator=(*tclass[style]);
+ name_ = tmpname;
} else {
- lyxerr << "Cannot copy unknown style `" << style << "'" << endl;
- LyXTextClass::const_iterator it = tclass.begin();
- LyXTextClass::const_iterator end = tclass.end();
- lyxerr << "All layouts so far:" << endl;
+ lyxerr << "Cannot copy unknown style `"
+ << style << "'\n"
+ << "All layouts so far:"
+ << endl;
+ LyXTextClass::const_iterator it =
+ tclass.begin();
+ LyXTextClass::const_iterator end =
+ tclass.end();
for (; it != end; ++it) {
- //lyxerr << it->name() << endl;
- fprintf(stderr, "%s\n", it->name().c_str());
+ lyxerr << (*it)->name()
+ << endl;
}
-
+
//lexrc.printError("Cannot copy known "
// "style `$$Token'");
}
break;
case LT_OBSOLETEDBY: // replace with a known style
- if (lexrc.next()) {
- string const style = lowercase(lexrc.getString());
-
+ if (lexrc.next()) {
+ string const style = lexrc.getString();
+
if (tclass.hasLayout(style)) {
string const tmpname = name_;
- this->operator=(tclass[style]);
+ this->operator=(*tclass[style]);
name_ = tmpname;
if (obsoleted_by().empty())
obsoleted_by_ = style;
} else {
- lyxerr << "Cannot replace with unknown style `" << style << "'" << endl;
-
- //lexrc.printError("Cannot replace with"
+ lyxerr << "Cannot replace with unknown style `" << style << '\'' << endl;
+
+ //lexrc.printError("Cannot replace with"
// " unknown style "
// "`$$Token'");
}
}
break;
+ case LT_DEPENDSON:
+ if (lexrc.next()) {
+ depends_on_ = lexrc.getString();
+ }
+ break;
+
case LT_MARGIN: // Margin style definition.
readMargin(lexrc);
break;
case LT_INTITLE:
intitle = lexrc.next() && lexrc.getInteger();
break;
-
+
+ case LT_OPTARGS:
+ if (lexrc.next()) {
+ optionalargs = lexrc.getInteger();
+ }
+ break;
+
case LT_NEED_PROTECT:
needprotect = lexrc.next() && lexrc.getInteger();
break;
-
+
case LT_KEEPEMPTY:
keepempty = lexrc.next() && lexrc.getInteger();
break;
break;
case LT_LATEXNAME:
- if (lexrc.next())
- latexname_ = lexrc.getString();
+ if (lexrc.next())
+ latexname_ = lexrc.getString();
break;
-
+
case LT_LATEXPARAM:
if (lexrc.next())
latexparam_ = lexrc.getString();
case LT_ENDLABELTYPE:
readEndLabelType(lexrc);
break;
-
+
case LT_LEFTMARGIN: // left margin type
- if (lexrc.next())
+ if (lexrc.next())
leftmargin = lexrc.getString();
- break;
+ break;
case LT_RIGHTMARGIN: // right margin type
if (lexrc.next())
switch (le) {
case LyXLex::LEX_UNDEF:
lexrc.printError("Unknown alignment `$$Token'");
- return;
+ return;
default: break;
};
switch (static_cast<AlignTags>(le)) {
switch (le) {
case LyXLex::LEX_UNDEF:
lexrc.printError("Unknown alignment `$$Token'");
- continue;
+ continue;
default: break;
};
switch (static_cast<AlignTags>(le)) {
switch (le) {
case LyXLex::LEX_UNDEF:
lexrc.printError("Unknown labeltype tag `$$Token'");
- return;
+ return;
default: break;
}
switch (static_cast<LabelTypeTags>(le)) {
void LyXLayout::readLatexType(LyXLex & lexrc)
{
keyword_item latexTypeTags[] = {
+ { "bib_environment", LATEX_BIB_ENVIRONMENT },
{ "command", LATEX_COMMAND },
{ "environment", LATEX_ENVIRONMENT },
{ "item_environment", LATEX_ITEM_ENVIRONMENT },
case LATEX_COMMAND:
case LATEX_ENVIRONMENT:
case LATEX_ITEM_ENVIRONMENT:
+ case LATEX_BIB_ENVIRONMENT:
case LATEX_LIST_ENVIRONMENT:
latextype = static_cast<LYX_LATEX_TYPES>(le);
break;
string const & LyXLayout::name() const
{
- static string name_t;
- name_t = lowercase(name_);
- return name_t;
+ return name_;
}
void LyXLayout::setName(string const & n)
{
- name_ = lowercase(n);
+ name_ = n;
}
string const & LyXLayout::obsoleted_by() const
{
- static string obsoleted_by_t;
- obsoleted_by_t = lowercase(obsoleted_by_);
- return obsoleted_by_t;
+ return obsoleted_by_;
+}
+
+
+string const & LyXLayout::depends_on() const
+{
+ return depends_on_;
}