attributes work

This commit is contained in:
anon 2023-11-09 18:31:24 +01:00
parent 8d8b77bfe9
commit 6810550c32

27
main.l
View File

@ -25,19 +25,18 @@ static const char ATTRIBUTE_VALUE_END[] = "'";
bool push_tag() { bool push_tag() {
if (tag_candidate == "") { if (tag_candidate == "") {
exit(3);
return false; return false;
} }
boost::trim(tag_candidate); boost::trim(tag_candidate);
tag_stack.push(tag_candidate); tag_stack.push(tag_candidate);
ECHOS(("<" + tag_stack.top() + ">").c_str());
tag_candidate = ""; tag_candidate = "";
return true; return true;
} }
bool pop_tag() { bool pop_tag() {
ECHOS(("</" + tag_stack.top() + ">").c_str());
tag_stack.pop(); tag_stack.pop();
tag_candidate = ""; tag_candidate = "";
@ -68,20 +67,23 @@ identifier [A-z][A-z0-9]*
BEGIN COMMENT_MULTILINE; BEGIN COMMENT_MULTILINE;
ECHOS(COMMENT_START); ECHOS(COMMENT_START);
} }
{identifier}{wsnl}+ { {identifier}{wsnl}* {
ECHO_CANDIDATE; ECHO_CANDIDATE;
tag_candidate = yytext; tag_candidate = yytext;
//BEGIN SWALLOW; //BEGIN SWALLOW;
} }
\( { \( {
push_tag(); push_tag();
ECHOS(("<" + tag_stack.top() + " ").c_str());
BEGIN HEAD; BEGIN HEAD;
} }
\{ { \{ {
push_tag(); push_tag();
ECHOS(("<" + tag_stack.top() + ">").c_str());
} }
\} { \} {
ECHO_CANDIDATE; ECHO_CANDIDATE;
ECHOS(("</" + tag_stack.top() + ">").c_str());
pop_tag(); pop_tag();
} }
.|{wsnl} { .|{wsnl} {
@ -124,20 +126,33 @@ identifier [A-z][A-z0-9]*
} }
<HEAD>{ <HEAD>{
\){wsnl}\{ { \){wsnl}*\{ {
ECHOS(">");
BEGIN BODY; BEGIN BODY;
} }
: { :{wsnl}* {
ECHOS("="); ECHOS("=");
ECHOS(ATTRIBUTE_VALUE_START); ECHOS(ATTRIBUTE_VALUE_START);
BEGIN HEAD_VALUE; BEGIN HEAD_VALUE;
} }
.* { .|\n {
ECHO; ECHO;
} }
} }
<HEAD_VALUE>{ <HEAD_VALUE>{
, {
ECHOS(ATTRIBUTE_VALUE_END);
BEGIN HEAD;
}
\) {
ECHOS(ATTRIBUTE_VALUE_END);
yyless(0);
BEGIN HEAD;
}
.|\n {
ECHO;
}
} }
%% %%