mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
more Lexer;
also move tex2lyx specific code to tex2lyx git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24129 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
c9052c48a5
commit
835d051ae3
341
src/Layout.cpp
341
src/Layout.cpp
@ -131,7 +131,7 @@ Layout::Layout()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Layout::read(Lexer & lexrc, TextClass const & tclass)
|
bool Layout::read(Lexer & lex, TextClass const & tclass)
|
||||||
{
|
{
|
||||||
// This table is sorted alphabetically [asierra 30March96]
|
// This table is sorted alphabetically [asierra 30March96]
|
||||||
LexerKeyword layoutTags[] = {
|
LexerKeyword layoutTags[] = {
|
||||||
@ -191,17 +191,17 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass)
|
|||||||
|
|
||||||
bool error = false;
|
bool error = false;
|
||||||
bool finished = false;
|
bool finished = false;
|
||||||
lexrc.pushTable(layoutTags);
|
lex.pushTable(layoutTags);
|
||||||
// parse style section
|
// parse style section
|
||||||
while (!finished && lexrc.isOK() && !error) {
|
while (!finished && lex.isOK() && !error) {
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
// See comment in LyXRC.cpp.
|
// See comment in LyXRC.cpp.
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_FEOF:
|
case Lexer::LEX_FEOF:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case Lexer::LEX_UNDEF: // parse error
|
case Lexer::LEX_UNDEF: // parse error
|
||||||
lexrc.printError("Unknown layout tag `$$Token'");
|
lex.printError("Unknown layout tag `$$Token'");
|
||||||
error = true;
|
error = true;
|
||||||
continue;
|
continue;
|
||||||
default: break;
|
default: break;
|
||||||
@ -212,293 +212,264 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_CATEGORY:
|
case LT_CATEGORY:
|
||||||
if (lexrc.next())
|
lex >> category_;
|
||||||
category_ = lexrc.getDocString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_COPYSTYLE: // initialize with a known style
|
case LT_COPYSTYLE: { // initialize with a known style
|
||||||
if (lexrc.next()) {
|
docstring style;
|
||||||
docstring const style = subst(lexrc.getDocString(),
|
lex >> style;
|
||||||
'_', ' ');
|
style = subst(style, '_', ' ');
|
||||||
|
|
||||||
if (tclass.hasLayout(style)) {
|
if (tclass.hasLayout(style)) {
|
||||||
docstring const tmpname = name_;
|
docstring const tmpname = name_;
|
||||||
this->operator=(tclass[style]);
|
this->operator=(tclass[style]);
|
||||||
name_ = tmpname;
|
name_ = tmpname;
|
||||||
} else {
|
} else {
|
||||||
lyxerr << "Cannot copy unknown style `"
|
lyxerr << "Cannot copy unknown style `"
|
||||||
<< to_utf8(style) << "'\n"
|
<< to_utf8(style) << "'\n"
|
||||||
<< "All layouts so far:"
|
<< "All layouts so far:"
|
||||||
<< endl;
|
<< endl;
|
||||||
DocumentClass::const_iterator lit = tclass.begin();
|
DocumentClass::const_iterator lit = tclass.begin();
|
||||||
DocumentClass::const_iterator len = tclass.end();
|
DocumentClass::const_iterator len = tclass.end();
|
||||||
for (; lit != len; ++lit)
|
for (; lit != len; ++lit)
|
||||||
lyxerr << to_utf8(lit->name()) << endl;
|
lyxerr << to_utf8(lit->name()) << endl;
|
||||||
|
|
||||||
//lexrc.printError("Cannot copy known "
|
//lex.printError("Cannot copy known "
|
||||||
// "style `$$Token'");
|
// "style `$$Token'");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case LT_OBSOLETEDBY: // replace with a known style
|
case LT_OBSOLETEDBY: { // replace with a known style
|
||||||
if (lexrc.next()) {
|
docstring style;
|
||||||
docstring const style =
|
lex >> style;
|
||||||
subst(lexrc.getDocString(), '_', ' ');
|
style = subst(style, '_', ' ');
|
||||||
|
|
||||||
if (tclass.hasLayout(style)) {
|
if (tclass.hasLayout(style)) {
|
||||||
docstring const tmpname = name_;
|
docstring const tmpname = name_;
|
||||||
this->operator=(tclass[style]);
|
this->operator=(tclass[style]);
|
||||||
name_ = tmpname;
|
name_ = tmpname;
|
||||||
if (obsoleted_by().empty())
|
if (obsoleted_by().empty())
|
||||||
obsoleted_by_ = style;
|
obsoleted_by_ = style;
|
||||||
} else {
|
} else {
|
||||||
lyxerr << "Cannot replace with unknown style `"
|
lyxerr << "Cannot replace with unknown style `"
|
||||||
<< to_utf8(style) << '\'' << endl;
|
<< to_utf8(style) << '\'' << endl;
|
||||||
|
|
||||||
//lexrc.printError("Cannot replace with"
|
//lex.printError("Cannot replace with"
|
||||||
// " unknown style "
|
// " unknown style "
|
||||||
// "`$$Token'");
|
// "`$$Token'");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case LT_DEPENDSON:
|
case LT_DEPENDSON:
|
||||||
if (lexrc.next())
|
lex >> depends_on_;
|
||||||
depends_on_ = subst(lexrc.getDocString(), '_', ' ');
|
depends_on_ = subst(depends_on_, '_', ' ');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_MARGIN: // margin style definition.
|
case LT_MARGIN: // margin style definition.
|
||||||
readMargin(lexrc);
|
readMargin(lex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LATEXTYPE: // LaTeX style definition.
|
case LT_LATEXTYPE: // LaTeX style definition.
|
||||||
readLatexType(lexrc);
|
readLatexType(lex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LATEXHEADER: // header for environments
|
case LT_LATEXHEADER: // header for environments
|
||||||
lexrc.next();
|
lex >> latexheader;
|
||||||
latexheader = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LATEXFOOTER: // footer for environments
|
case LT_LATEXFOOTER: // footer for environments
|
||||||
lexrc.next();
|
lex >> latexfooter;
|
||||||
latexfooter = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LATEXPARAGRAPH:
|
case LT_LATEXPARAGRAPH:
|
||||||
lexrc.next();
|
lex >> latexparagraph;
|
||||||
latexparagraph = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_INTITLE:
|
case LT_INTITLE:
|
||||||
intitle = lexrc.next() && lexrc.getInteger();
|
lex >> intitle;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_TOCLEVEL:
|
case LT_TOCLEVEL:
|
||||||
lexrc.next();
|
lex >> toclevel;
|
||||||
toclevel = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_OPTARGS:
|
case LT_OPTARGS:
|
||||||
if (lexrc.next())
|
lex >> optionalargs ;
|
||||||
optionalargs = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_NEED_PROTECT:
|
case LT_NEED_PROTECT:
|
||||||
needprotect = lexrc.next() && lexrc.getInteger();
|
lex >> needprotect;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_KEEPEMPTY:
|
case LT_KEEPEMPTY:
|
||||||
keepempty = lexrc.next() && lexrc.getInteger();
|
lex >> keepempty;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_FONT:
|
case LT_FONT:
|
||||||
font = lyxRead(lexrc, font);
|
font = lyxRead(lex, font);
|
||||||
labelfont = font;
|
labelfont = font;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_TEXTFONT:
|
case LT_TEXTFONT:
|
||||||
font = lyxRead(lexrc, font);
|
font = lyxRead(lex, font);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELFONT:
|
case LT_LABELFONT:
|
||||||
labelfont = lyxRead(lexrc, labelfont);
|
labelfont = lyxRead(lex, labelfont);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_NEXTNOINDENT: // Indent next paragraph?
|
case LT_NEXTNOINDENT: // Indent next paragraph?
|
||||||
if (lexrc.next() && lexrc.getInteger())
|
lex >> nextnoindent;
|
||||||
nextnoindent = true;
|
|
||||||
else
|
|
||||||
nextnoindent = false;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_COMMANDDEPTH:
|
case LT_COMMANDDEPTH:
|
||||||
lexrc.next();
|
lex >> commanddepth;
|
||||||
commanddepth = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LATEXNAME:
|
case LT_LATEXNAME:
|
||||||
if (lexrc.next())
|
lex >> latexname_;
|
||||||
latexname_ = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LATEXPARAM:
|
case LT_LATEXPARAM:
|
||||||
if (lexrc.next())
|
lex >> latexparam_;
|
||||||
latexparam_ = subst(lexrc.getString(), """, "\"");
|
latexparam_ = subst(latexparam_, """, "\"");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_INNERTAG:
|
case LT_INNERTAG:
|
||||||
if (lexrc.next())
|
lex >> innertag_;
|
||||||
innertag_ = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELTAG:
|
case LT_LABELTAG:
|
||||||
if (lexrc.next())
|
lex >> labeltag_;
|
||||||
labeltag_ = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_ITEMTAG:
|
case LT_ITEMTAG:
|
||||||
if (lexrc.next())
|
lex >> itemtag_;
|
||||||
itemtag_ = lexrc.getString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_PREAMBLE:
|
case LT_PREAMBLE:
|
||||||
preamble_ = from_utf8(lexrc.getLongString("EndPreamble"));
|
preamble_ = from_utf8(lex.getLongString("EndPreamble"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELTYPE:
|
case LT_LABELTYPE:
|
||||||
readLabelType(lexrc);
|
readLabelType(lex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_ENDLABELTYPE:
|
case LT_ENDLABELTYPE:
|
||||||
readEndLabelType(lexrc);
|
readEndLabelType(lex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LEFTMARGIN: // left margin type
|
case LT_LEFTMARGIN: // left margin type
|
||||||
if (lexrc.next())
|
lex >> leftmargin;
|
||||||
leftmargin = lexrc.getDocString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_RIGHTMARGIN: // right margin type
|
case LT_RIGHTMARGIN: // right margin type
|
||||||
if (lexrc.next())
|
lex >> rightmargin;
|
||||||
rightmargin = lexrc.getDocString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELINDENT: // label indenting flag
|
case LT_LABELINDENT: // label indenting flag
|
||||||
if (lexrc.next())
|
lex >> labelindent;
|
||||||
labelindent = lexrc.getDocString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_PARINDENT: // paragraph indent. flag
|
case LT_PARINDENT: // paragraph indent. flag
|
||||||
if (lexrc.next())
|
lex >> parindent;
|
||||||
parindent = lexrc.getDocString();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_PARSKIP: // paragraph skip size
|
case LT_PARSKIP: // paragraph skip size
|
||||||
if (lexrc.next())
|
lex >> parskip;
|
||||||
parskip = lexrc.getFloat();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_ITEMSEP: // item separation size
|
case LT_ITEMSEP: // item separation size
|
||||||
if (lexrc.next())
|
lex >> itemsep;
|
||||||
itemsep = lexrc.getFloat();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_TOPSEP: // top separation size
|
case LT_TOPSEP: // top separation size
|
||||||
if (lexrc.next())
|
lex >> topsep;
|
||||||
topsep = lexrc.getFloat();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_BOTTOMSEP: // bottom separation size
|
case LT_BOTTOMSEP: // bottom separation size
|
||||||
if (lexrc.next())
|
lex >> bottomsep;
|
||||||
bottomsep = lexrc.getFloat();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABEL_BOTTOMSEP: // label bottom separation size
|
case LT_LABEL_BOTTOMSEP: // label bottom separation size
|
||||||
if (lexrc.next())
|
lex >> labelbottomsep;
|
||||||
labelbottomsep = lexrc.getFloat();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELSEP: // label separator
|
case LT_LABELSEP: // label separator
|
||||||
if (lexrc.next()) {
|
lex >> labelsep;
|
||||||
labelsep = from_utf8(subst(lexrc.getString(), 'x', ' '));
|
labelsep = subst(labelsep, 'x', ' ');
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_PARSEP: // par. separation size
|
case LT_PARSEP: // par. separation size
|
||||||
if (lexrc.next())
|
lex >> parsep;
|
||||||
parsep = lexrc.getFloat();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_FILL_TOP: // fill top flag
|
case LT_FILL_TOP: // fill top flag
|
||||||
if (lexrc.next())
|
lex >> fill_top;
|
||||||
fill_top = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_FILL_BOTTOM: // fill bottom flag
|
case LT_FILL_BOTTOM: // fill bottom flag
|
||||||
if (lexrc.next())
|
lex >> fill_bottom;
|
||||||
fill_bottom = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_NEWLINE: // newlines allowed?
|
case LT_NEWLINE: // newlines allowed?
|
||||||
if (lexrc.next())
|
lex >> newline_allowed;
|
||||||
newline_allowed = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_ALIGN: // paragraph align
|
case LT_ALIGN: // paragraph align
|
||||||
readAlign(lexrc);
|
readAlign(lex);
|
||||||
break;
|
break;
|
||||||
case LT_ALIGNPOSSIBLE: // paragraph allowed align
|
case LT_ALIGNPOSSIBLE: // paragraph allowed align
|
||||||
readAlignPossible(lexrc);
|
readAlignPossible(lex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELSTRING: // label string definition
|
case LT_LABELSTRING: // label string definition
|
||||||
if (lexrc.next()) {
|
// FIXME: this means LT_ENDLABELSTRING may only
|
||||||
labelstring_ = trim(lexrc.getDocString());
|
// occur after LT_LABELSTRING
|
||||||
labelstring_appendix_ = labelstring_;
|
lex >> labelstring_;
|
||||||
}
|
labelstring_ = trim(labelstring_);
|
||||||
|
labelstring_appendix_ = labelstring_;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_ENDLABELSTRING: // endlabel string definition
|
case LT_ENDLABELSTRING: // endlabel string definition
|
||||||
if (lexrc.next())
|
lex >> endlabelstring_;
|
||||||
endlabelstring_ = trim(lexrc.getDocString());
|
endlabelstring_ = trim(endlabelstring_);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELSTRING_APPENDIX: // label string appendix definition
|
case LT_LABELSTRING_APPENDIX: // label string appendix definition
|
||||||
if (lexrc.next())
|
lex >> labelstring_appendix_;
|
||||||
labelstring_appendix_ = trim(lexrc.getDocString());
|
labelstring_appendix_ = trim(labelstring_appendix_);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_LABELCOUNTER: // name of counter to use
|
case LT_LABELCOUNTER: // name of counter to use
|
||||||
if (lexrc.next())
|
lex >> counter;
|
||||||
counter = lyx::from_ascii(trim(lexrc.getString()));
|
counter = trim(counter);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_FREE_SPACING: // Allow for free spacing.
|
case LT_FREE_SPACING: // Allow for free spacing.
|
||||||
if (lexrc.next())
|
lex >> free_spacing;
|
||||||
free_spacing = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_PASS_THRU: // Allow for pass thru.
|
case LT_PASS_THRU: // Allow for pass thru.
|
||||||
if (lexrc.next())
|
lex >> pass_thru;
|
||||||
pass_thru = lexrc.getInteger();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_SPACING: // setspace.sty
|
case LT_SPACING: // setspace.sty
|
||||||
readSpacing(lexrc);
|
readSpacing(lex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LT_REQUIRES:
|
case LT_REQUIRES:
|
||||||
lexrc.eatLine();
|
lex.eatLine();
|
||||||
vector<string> const req =
|
vector<string> const req =
|
||||||
getVectorFromString(lexrc.getString());
|
getVectorFromString(lex.getString());
|
||||||
requires_.insert(req.begin(), req.end());
|
requires_.insert(req.begin(), req.end());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lexrc.popTable();
|
lex.popTable();
|
||||||
|
|
||||||
return !error;
|
return !error;
|
||||||
}
|
}
|
||||||
@ -512,21 +483,23 @@ enum {
|
|||||||
AT_LAYOUT
|
AT_LAYOUT
|
||||||
};
|
};
|
||||||
|
|
||||||
void Layout::readAlign(Lexer & lexrc)
|
|
||||||
{
|
|
||||||
LexerKeyword alignTags[] = {
|
|
||||||
{ "block", AT_BLOCK },
|
|
||||||
{ "center", AT_CENTER },
|
|
||||||
{ "layout", AT_LAYOUT },
|
|
||||||
{ "left", AT_LEFT },
|
|
||||||
{ "right", AT_RIGHT }
|
|
||||||
};
|
|
||||||
|
|
||||||
PushPopHelper pph(lexrc, alignTags);
|
LexerKeyword alignTags[] = {
|
||||||
int le = lexrc.lex();
|
{ "block", AT_BLOCK },
|
||||||
|
{ "center", AT_CENTER },
|
||||||
|
{ "layout", AT_LAYOUT },
|
||||||
|
{ "left", AT_LEFT },
|
||||||
|
{ "right", AT_RIGHT }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void Layout::readAlign(Lexer & lex)
|
||||||
|
{
|
||||||
|
PushPopHelper pph(lex, alignTags);
|
||||||
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown alignment `$$Token'");
|
lex.printError("Unknown alignment `$$Token'");
|
||||||
return;
|
return;
|
||||||
default: break;
|
default: break;
|
||||||
};
|
};
|
||||||
@ -550,24 +523,16 @@ void Layout::readAlign(Lexer & lexrc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Layout::readAlignPossible(Lexer & lexrc)
|
void Layout::readAlignPossible(Lexer & lex)
|
||||||
{
|
{
|
||||||
LexerKeyword alignTags[] = {
|
lex.pushTable(alignTags);
|
||||||
{ "block", AT_BLOCK },
|
|
||||||
{ "center", AT_CENTER },
|
|
||||||
{ "layout", AT_LAYOUT },
|
|
||||||
{ "left", AT_LEFT },
|
|
||||||
{ "right", AT_RIGHT }
|
|
||||||
};
|
|
||||||
|
|
||||||
lexrc.pushTable(alignTags);
|
|
||||||
alignpossible = LYX_ALIGN_NONE | LYX_ALIGN_LAYOUT;
|
alignpossible = LYX_ALIGN_NONE | LYX_ALIGN_LAYOUT;
|
||||||
int lineno = lexrc.lineNumber();
|
int lineno = lex.lineNumber();
|
||||||
do {
|
do {
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown alignment `$$Token'");
|
lex.printError("Unknown alignment `$$Token'");
|
||||||
continue;
|
continue;
|
||||||
default: break;
|
default: break;
|
||||||
};
|
};
|
||||||
@ -588,12 +553,12 @@ void Layout::readAlignPossible(Lexer & lexrc)
|
|||||||
alignpossible |= LYX_ALIGN_LAYOUT;
|
alignpossible |= LYX_ALIGN_LAYOUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (lineno == lexrc.lineNumber());
|
} while (lineno == lex.lineNumber());
|
||||||
lexrc.popTable();
|
lex.popTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Layout::readLabelType(Lexer & lexrc)
|
void Layout::readLabelType(Lexer & lex)
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
LA_NO_LABEL = 1,
|
LA_NO_LABEL = 1,
|
||||||
@ -622,11 +587,11 @@ void Layout::readLabelType(Lexer & lexrc)
|
|||||||
{ "top_environment", LA_TOP_ENVIRONMENT }
|
{ "top_environment", LA_TOP_ENVIRONMENT }
|
||||||
};
|
};
|
||||||
|
|
||||||
PushPopHelper pph(lexrc, labelTypeTags);
|
PushPopHelper pph(lex, labelTypeTags);
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown labeltype tag `$$Token'");
|
lex.printError("Unknown labeltype tag `$$Token'");
|
||||||
return;
|
return;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
@ -665,7 +630,7 @@ void Layout::readLabelType(Lexer & lexrc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Layout::readEndLabelType(Lexer & lexrc)
|
void Layout::readEndLabelType(Lexer & lex)
|
||||||
{
|
{
|
||||||
static LexerKeyword endlabelTypeTags[] = {
|
static LexerKeyword endlabelTypeTags[] = {
|
||||||
{ "box", END_LABEL_BOX },
|
{ "box", END_LABEL_BOX },
|
||||||
@ -674,11 +639,11 @@ void Layout::readEndLabelType(Lexer & lexrc)
|
|||||||
{ "static", END_LABEL_STATIC }
|
{ "static", END_LABEL_STATIC }
|
||||||
};
|
};
|
||||||
|
|
||||||
PushPopHelper pph(lexrc, endlabelTypeTags);
|
PushPopHelper pph(lex, endlabelTypeTags);
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown labeltype tag `$$Token'");
|
lex.printError("Unknown labeltype tag `$$Token'");
|
||||||
break;
|
break;
|
||||||
case END_LABEL_STATIC:
|
case END_LABEL_STATIC:
|
||||||
case END_LABEL_BOX:
|
case END_LABEL_BOX:
|
||||||
@ -687,14 +652,14 @@ void Layout::readEndLabelType(Lexer & lexrc)
|
|||||||
endlabeltype = static_cast<EndLabelType>(le);
|
endlabeltype = static_cast<EndLabelType>(le);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lyxerr << "Unhandled value " << le
|
LYXERR0("Unhandled value " << le
|
||||||
<< " in Layout::readEndLabelType." << endl;
|
<< " in Layout::readEndLabelType.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Layout::readMargin(Lexer & lexrc)
|
void Layout::readMargin(Lexer & lex)
|
||||||
{
|
{
|
||||||
LexerKeyword marginTags[] = {
|
LexerKeyword marginTags[] = {
|
||||||
{ "dynamic", MARGIN_DYNAMIC },
|
{ "dynamic", MARGIN_DYNAMIC },
|
||||||
@ -704,12 +669,12 @@ void Layout::readMargin(Lexer & lexrc)
|
|||||||
{ "static", MARGIN_STATIC }
|
{ "static", MARGIN_STATIC }
|
||||||
};
|
};
|
||||||
|
|
||||||
PushPopHelper pph(lexrc, marginTags);
|
PushPopHelper pph(lex, marginTags);
|
||||||
|
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown margin type tag `$$Token'");
|
lex.printError("Unknown margin type tag `$$Token'");
|
||||||
return;
|
return;
|
||||||
case MARGIN_STATIC:
|
case MARGIN_STATIC:
|
||||||
case MARGIN_MANUAL:
|
case MARGIN_MANUAL:
|
||||||
@ -726,7 +691,7 @@ void Layout::readMargin(Lexer & lexrc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Layout::readLatexType(Lexer & lexrc)
|
void Layout::readLatexType(Lexer & lex)
|
||||||
{
|
{
|
||||||
LexerKeyword latexTypeTags[] = {
|
LexerKeyword latexTypeTags[] = {
|
||||||
{ "bib_environment", LATEX_BIB_ENVIRONMENT },
|
{ "bib_environment", LATEX_BIB_ENVIRONMENT },
|
||||||
@ -737,11 +702,11 @@ void Layout::readLatexType(Lexer & lexrc)
|
|||||||
{ "paragraph", LATEX_PARAGRAPH }
|
{ "paragraph", LATEX_PARAGRAPH }
|
||||||
};
|
};
|
||||||
|
|
||||||
PushPopHelper pph(lexrc, latexTypeTags);
|
PushPopHelper pph(lex, latexTypeTags);
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown latextype tag `$$Token'");
|
lex.printError("Unknown latextype tag `$$Token'");
|
||||||
return;
|
return;
|
||||||
case LATEX_PARAGRAPH:
|
case LATEX_PARAGRAPH:
|
||||||
case LATEX_COMMAND:
|
case LATEX_COMMAND:
|
||||||
@ -759,7 +724,7 @@ void Layout::readLatexType(Lexer & lexrc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Layout::readSpacing(Lexer & lexrc)
|
void Layout::readSpacing(Lexer & lex)
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
ST_SPACING_SINGLE = 1,
|
ST_SPACING_SINGLE = 1,
|
||||||
@ -775,11 +740,11 @@ void Layout::readSpacing(Lexer & lexrc)
|
|||||||
{"single", ST_SPACING_SINGLE }
|
{"single", ST_SPACING_SINGLE }
|
||||||
};
|
};
|
||||||
|
|
||||||
PushPopHelper pph(lexrc, spacingTags);
|
PushPopHelper pph(lex, spacingTags);
|
||||||
int le = lexrc.lex();
|
int le = lex.lex();
|
||||||
switch (le) {
|
switch (le) {
|
||||||
case Lexer::LEX_UNDEF:
|
case Lexer::LEX_UNDEF:
|
||||||
lexrc.printError("Unknown spacing token `$$Token'");
|
lex.printError("Unknown spacing token `$$Token'");
|
||||||
return;
|
return;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
@ -794,8 +759,8 @@ void Layout::readSpacing(Lexer & lexrc)
|
|||||||
spacing.set(Spacing::Double);
|
spacing.set(Spacing::Double);
|
||||||
break;
|
break;
|
||||||
case ST_OTHER:
|
case ST_OTHER:
|
||||||
lexrc.next();
|
lex.next();
|
||||||
spacing.set(Spacing::Other, lexrc.getString());
|
spacing.set(Spacing::Other, lex.getString());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -835,14 +800,4 @@ bool Layout::operator==(Layout const & rhs) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Layout * Layout::forCaption()
|
|
||||||
{
|
|
||||||
Layout * lay = new Layout();
|
|
||||||
lay->name_ = from_ascii("Caption");
|
|
||||||
lay->latexname_ = "caption";
|
|
||||||
lay->latextype = LATEX_COMMAND;
|
|
||||||
lay->optionalargs = 1;
|
|
||||||
return lay;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
@ -234,10 +234,12 @@ public:
|
|||||||
/// until it has proper support for the caption inset (JMarc)
|
/// until it has proper support for the caption inset (JMarc)
|
||||||
static Layout * forCaption();
|
static Layout * forCaption();
|
||||||
|
|
||||||
private:
|
|
||||||
/// Name of the layout/paragraph environment
|
/// Name of the layout/paragraph environment
|
||||||
docstring name_;
|
docstring name_;
|
||||||
|
/// LaTeX name for environment
|
||||||
|
std::string latexname_;
|
||||||
|
|
||||||
|
private:
|
||||||
/** Name of an layout that has replaced this layout.
|
/** Name of an layout that has replaced this layout.
|
||||||
This is used to rename a layout, while keeping backward
|
This is used to rename a layout, while keeping backward
|
||||||
compatibility
|
compatibility
|
||||||
@ -250,8 +252,6 @@ private:
|
|||||||
*/
|
*/
|
||||||
docstring depends_on_;
|
docstring depends_on_;
|
||||||
|
|
||||||
/// LaTeX name for environment
|
|
||||||
std::string latexname_;
|
|
||||||
/// Label string. "Abstract", "Reference", "Caption"...
|
/// Label string. "Abstract", "Reference", "Caption"...
|
||||||
docstring labelstring_;
|
docstring labelstring_;
|
||||||
///
|
///
|
||||||
|
@ -24,7 +24,7 @@ namespace lyx {
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void begin_layout(ostream & os, LayoutPtr const & layout, TeXFont const & font,
|
void begin_layout(ostream & os, Layout const * const & layout, TeXFont const & font,
|
||||||
TeXFont const & normalfont)
|
TeXFont const & normalfont)
|
||||||
{
|
{
|
||||||
os << "\n\\begin_layout " << to_utf8(layout->name()) << "\n";
|
os << "\n\\begin_layout " << to_utf8(layout->name()) << "\n";
|
||||||
@ -84,7 +84,7 @@ bool Context::empty = true;
|
|||||||
|
|
||||||
Context::Context(bool need_layout_,
|
Context::Context(bool need_layout_,
|
||||||
TeX2LyXDocClass const & textclass_,
|
TeX2LyXDocClass const & textclass_,
|
||||||
LayoutPtr layout_, LayoutPtr parent_layout_,
|
Layout const * layout_, Layout const * parent_layout_,
|
||||||
TeXFont font_)
|
TeXFont font_)
|
||||||
: need_layout(need_layout_),
|
: need_layout(need_layout_),
|
||||||
need_end_layout(false), need_end_deeper(false),
|
need_end_layout(false), need_end_deeper(false),
|
||||||
|
@ -78,8 +78,8 @@ class Context {
|
|||||||
public:
|
public:
|
||||||
Context(bool need_layout_,
|
Context(bool need_layout_,
|
||||||
TeX2LyXDocClass const & textclass_,
|
TeX2LyXDocClass const & textclass_,
|
||||||
LayoutPtr layout_ = LayoutPtr(),
|
Layout const * layout_ = 0,
|
||||||
LayoutPtr parent_layout_= LayoutPtr(),
|
Layout const * parent_layout_= 0,
|
||||||
TeXFont font_ = TeXFont());
|
TeXFont font_ = TeXFont());
|
||||||
~Context();
|
~Context();
|
||||||
|
|
||||||
@ -142,9 +142,9 @@ public:
|
|||||||
/// The textclass of the document. Could actually be a global variable
|
/// The textclass of the document. Could actually be a global variable
|
||||||
TeX2LyXDocClass const & textclass;
|
TeX2LyXDocClass const & textclass;
|
||||||
/// The layout of the current paragraph
|
/// The layout of the current paragraph
|
||||||
LayoutPtr layout;
|
Layout const * layout;
|
||||||
/// The layout of the outer paragraph (for environment layouts)
|
/// The layout of the outer paragraph (for environment layouts)
|
||||||
LayoutPtr parent_layout;
|
Layout const * parent_layout;
|
||||||
/// font attributes of this context
|
/// font attributes of this context
|
||||||
TeXFont font;
|
TeXFont font;
|
||||||
/// font attributes of normal text
|
/// font attributes of normal text
|
||||||
|
@ -40,10 +40,6 @@ using namespace lyx::support::os;
|
|||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
// Hacks to allow the thing to link in the lyxlayout stuff
|
|
||||||
LayoutPtr captionlayout;
|
|
||||||
|
|
||||||
|
|
||||||
string const trim(string const & a, char const * p)
|
string const trim(string const & a, char const * p)
|
||||||
{
|
{
|
||||||
// BOOST_ASSERT(p);
|
// BOOST_ASSERT(p);
|
||||||
@ -400,7 +396,6 @@ void tex2lyx(istream & is, ostream & os)
|
|||||||
stringstream ss;
|
stringstream ss;
|
||||||
TeX2LyXDocClass textclass;
|
TeX2LyXDocClass textclass;
|
||||||
parse_preamble(p, ss, documentclass, textclass);
|
parse_preamble(p, ss, documentclass, textclass);
|
||||||
captionlayout = LayoutPtr(Layout::forCaption());
|
|
||||||
|
|
||||||
active_environments.push_back("document");
|
active_environments.push_back("document");
|
||||||
Context context(true, textclass);
|
Context context(true, textclass);
|
||||||
|
@ -26,8 +26,6 @@ namespace lyx {
|
|||||||
|
|
||||||
namespace support { class FileName; }
|
namespace support { class FileName; }
|
||||||
|
|
||||||
typedef Layout const * LayoutPtr;
|
|
||||||
|
|
||||||
class Context;
|
class Context;
|
||||||
|
|
||||||
/// A trivial subclass, just to give us a public default constructor
|
/// A trivial subclass, just to give us a public default constructor
|
||||||
@ -40,7 +38,6 @@ void parse_preamble(Parser & p, std::ostream & os,
|
|||||||
|
|
||||||
/// used packages with options
|
/// used packages with options
|
||||||
extern std::map<std::string, std::vector<std::string> > used_packages;
|
extern std::map<std::string, std::vector<std::string> > used_packages;
|
||||||
extern LayoutPtr captionlayout;
|
|
||||||
|
|
||||||
/// in text.cpp
|
/// in text.cpp
|
||||||
std::string translate_len(std::string const &);
|
std::string translate_len(std::string const &);
|
||||||
|
@ -424,23 +424,37 @@ void handle_comment(ostream & os, string const & s, Context & context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LayoutPtr findLayout(TextClass const & textclass, string const & name)
|
Layout const * findLayout(TextClass const & textclass, string const & name)
|
||||||
{
|
{
|
||||||
DocumentClass::const_iterator lit = textclass.begin();
|
DocumentClass::const_iterator lit = textclass.begin();
|
||||||
DocumentClass::const_iterator len = textclass.end();
|
DocumentClass::const_iterator len = textclass.end();
|
||||||
for (; lit != len; ++lit)
|
for (; lit != len; ++lit)
|
||||||
if (lit->latexname() == name)
|
if (lit->latexname() == name)
|
||||||
return &*lit;
|
return &*lit;
|
||||||
return LayoutPtr();
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void eat_whitespace(Parser &, ostream &, Context &, bool);
|
void eat_whitespace(Parser &, ostream &, Context &, bool);
|
||||||
|
|
||||||
|
|
||||||
|
Layout * captionlayout()
|
||||||
|
{
|
||||||
|
static Layout * lay = 0;
|
||||||
|
if (!lay) {
|
||||||
|
lay = new Layout;
|
||||||
|
lay->name_ = from_ascii("Caption");
|
||||||
|
lay->latexname_ = "caption";
|
||||||
|
lay->latextype = LATEX_COMMAND;
|
||||||
|
lay->optionalargs = 1;
|
||||||
|
}
|
||||||
|
return lay;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void output_command_layout(ostream & os, Parser & p, bool outer,
|
void output_command_layout(ostream & os, Parser & p, bool outer,
|
||||||
Context & parent_context,
|
Context & parent_context,
|
||||||
LayoutPtr newlayout)
|
Layout const * newlayout)
|
||||||
{
|
{
|
||||||
parent_context.check_end_layout(os);
|
parent_context.check_end_layout(os);
|
||||||
Context context(true, parent_context.textclass, newlayout,
|
Context context(true, parent_context.textclass, newlayout,
|
||||||
@ -696,7 +710,7 @@ void parse_unknown_environment(Parser & p, string const & name, ostream & os,
|
|||||||
void parse_environment(Parser & p, ostream & os, bool outer,
|
void parse_environment(Parser & p, ostream & os, bool outer,
|
||||||
Context & parent_context)
|
Context & parent_context)
|
||||||
{
|
{
|
||||||
LayoutPtr newlayout;
|
Layout const * newlayout;
|
||||||
string const name = p.getArg('{', '}');
|
string const name = p.getArg('{', '}');
|
||||||
const bool is_starred = suffixIs(name, '*');
|
const bool is_starred = suffixIs(name, '*');
|
||||||
string const unstarred_name = rtrim(name, "*");
|
string const unstarred_name = rtrim(name, "*");
|
||||||
@ -1105,7 +1119,7 @@ void parse_noweb(Parser & p, ostream & os, Context & context)
|
|||||||
void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
||||||
Context & context)
|
Context & context)
|
||||||
{
|
{
|
||||||
LayoutPtr newlayout;
|
Layout const * newlayout = 0;
|
||||||
// store the current selectlanguage to be used after \foreignlanguage
|
// store the current selectlanguage to be used after \foreignlanguage
|
||||||
string selectlang;
|
string selectlang;
|
||||||
// Store the latest bibliographystyle (needed for bibtex inset)
|
// Store the latest bibliographystyle (needed for bibtex inset)
|
||||||
@ -1539,9 +1553,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
|||||||
// Special handling for \caption
|
// Special handling for \caption
|
||||||
// FIXME: remove this when InsetCaption is supported.
|
// FIXME: remove this when InsetCaption is supported.
|
||||||
else if (context.new_layout_allowed &&
|
else if (context.new_layout_allowed &&
|
||||||
t.cs() == captionlayout->latexname()) {
|
t.cs() == captionlayout()->latexname()) {
|
||||||
output_command_layout(os, p, outer, context,
|
output_command_layout(os, p, outer, context,
|
||||||
captionlayout);
|
captionlayout());
|
||||||
p.skip_spaces();
|
p.skip_spaces();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user