blob: 42ab9e120208af296611ec660cd86509c472e9a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
%option noinput nounput noyywrap noreject 8bit
%option reentrant bison-bridge bison-locations
%option prefix="kalmia"
%start STRING TAG_START TAG
%{
#include <string.h>
#define YYLTYPE KALMIALTYPE
#define YYSTYPE KALMIASTYPE
#include "kalmia.tab.h"
#define YY_USER_ACTION \
yylloc->first_line = yylloc->last_line; \
yylloc->first_column = yylloc->last_column; \
if (*yytext == '\n') { \
yylloc->last_line += 1; \
yylloc->last_column = 0; \
} \
else { \
yylloc->last_column += yyleng; \
}
%}
S \x20\x0a\x0d\x09
ATTR ([\x20\x0a\x0d\x09]*)?"="
%%
<INITIAL>"<?xml".*"?>" {
/* xml prologue */
return PROLOG;
}
<INITIAL>[\x20\x0a\x0d\x09] |
<TAG>[\x20\x0a\x0d\x09] {
/* ignore whitespace */
}
<INITIAL>"<" { BEGIN(TAG_START); return S_TAG_OPEN; }
<INITIAL>"</" { BEGIN(TAG_START); return E_TAG_OPEN; }
<TAG>">" { BEGIN(INITIAL); return TAG_CLOSE; }
<TAG>"/>" { BEGIN(INITIAL); return EMPTY_TAG_CLOSE; }
<TAG_START>[a-zA-Z_:][a-zA-Z0-9\.\-_:]* {
/* generic tag name */
BEGIN(TAG);
yylval->string = strdup(yytext);
return NAME;
}
<TAG>[a-zA-Z_:][a-zA-Z0-9\.\-_:]* {
/* generic attribute key */
yylval->string = strdup(yytext);
return ATTR;
}
<TAG>"=" {
/* attribute "=" */
return *yytext;
}
<TAG>"\"" {
/* begin a string */
BEGIN(STRING);
return *yytext;
}
<STRING>"\"" {
/* end a string */
BEGIN(TAG);
return *yytext;
}
<STRING>[^"]+ {
/* within a string */
yylval->string = strdup(yytext);
return TEXT;
}
<INITIAL>[^\x20\x0a\x0d\x09<][^<]*[^\x20\x0a\x0d\x09<] {
yylval->string = strdup(yytext);
return CONTENT;
}
|