1<lexer>
2 <config>
3 <name>HTML</name>
4 <alias>html</alias>
5 <filename>*.html</filename>
6 <filename>*.htm</filename>
7 <filename>*.xhtml</filename>
8 <filename>*.xslt</filename>
9 <mime_type>text/html</mime_type>
10 <mime_type>application/xhtml+xml</mime_type>
11 <case_insensitive>true</case_insensitive>
12 <dot_all>true</dot_all>
13 <not_multiline>true</not_multiline>
14 </config>
15 <rules>
16 <state name="script-content">
17 <rule pattern="(<)(\s*)(/)(\s*)(script)(\s*)(>)">
18 <bygroups>
19 <token type="Punctuation"/>
20 <token type="Text"/>
21 <token type="Punctuation"/>
22 <token type="Text"/>
23 <token type="NameTag"/>
24 <token type="Text"/>
25 <token type="Punctuation"/>
26 </bygroups>
27 <pop depth="1"/>
28 </rule>
29 <rule pattern=".+?(?=<\s*/\s*script\s*>)">
30 <using lexer="Javascript"/>
31 </rule>
32 </state>
33 <state name="style-content">
34 <rule pattern="(<)(\s*)(/)(\s*)(style)(\s*)(>)">
35 <bygroups>
36 <token type="Punctuation"/>
37 <token type="Text"/>
38 <token type="Punctuation"/>
39 <token type="Text"/>
40 <token type="NameTag"/>
41 <token type="Text"/>
42 <token type="Punctuation"/>
43 </bygroups>
44 <pop depth="1"/>
45 </rule>
46 <rule pattern=".+?(?=<\s*/\s*style\s*>)">
47 <using lexer="CSS"/>
48 </rule>
49 </state>
50 <state name="attr">
51 <rule pattern="".*?"">
52 <token type="LiteralString"/>
53 <pop depth="1"/>
54 </rule>
55 <rule pattern="'.*?'">
56 <token type="LiteralString"/>
57 <pop depth="1"/>
58 </rule>
59 <rule pattern="[^\s>]+">
60 <token type="LiteralString"/>
61 <pop depth="1"/>
62 </rule>
63 </state>
64 <state name="root">
65 <rule pattern="[^<&]+">
66 <token type="Text"/>
67 </rule>
68 <rule pattern="&\S*?;">
69 <token type="NameEntity"/>
70 </rule>
71 <rule pattern="\<\!\[CDATA\[.*?\]\]\>">
72 <token type="CommentPreproc"/>
73 </rule>
74 <rule pattern="<!--">
75 <token type="Comment"/>
76 <push state="comment"/>
77 </rule>
78 <rule pattern="<\?.*?\?>">
79 <token type="CommentPreproc"/>
80 </rule>
81 <rule pattern="<![^>]*>">
82 <token type="CommentPreproc"/>
83 </rule>
84 <rule pattern="(<)(\s*)(script)(\s*)">
85 <bygroups>
86 <token type="Punctuation"/>
87 <token type="Text"/>
88 <token type="NameTag"/>
89 <token type="Text"/>
90 </bygroups>
91 <push state="script-content" state="tag"/>
92 </rule>
93 <rule pattern="(<)(\s*)(style)(\s*)">
94 <bygroups>
95 <token type="Punctuation"/>
96 <token type="Text"/>
97 <token type="NameTag"/>
98 <token type="Text"/>
99 </bygroups>
100 <push state="style-content" state="tag"/>
101 </rule>
102 <rule pattern="(<)(\s*)([\w:.-]+)">
103 <bygroups>
104 <token type="Punctuation"/>
105 <token type="Text"/>
106 <token type="NameTag"/>
107 </bygroups>
108 <push state="tag"/>
109 </rule>
110 <rule pattern="(<)(\s*)(/)(\s*)([\w:.-]+)(\s*)(>)">
111 <bygroups>
112 <token type="Punctuation"/>
113 <token type="Text"/>
114 <token type="Punctuation"/>
115 <token type="Text"/>
116 <token type="NameTag"/>
117 <token type="Text"/>
118 <token type="Punctuation"/>
119 </bygroups>
120 </rule>
121 </state>
122 <state name="comment">
123 <rule pattern="[^-]+">
124 <token type="Comment"/>
125 </rule>
126 <rule pattern="-->">
127 <token type="Comment"/>
128 <pop depth="1"/>
129 </rule>
130 <rule pattern="-">
131 <token type="Comment"/>
132 </rule>
133 </state>
134 <state name="tag">
135 <rule pattern="\s+">
136 <token type="Text"/>
137 </rule>
138 <rule pattern="([\w:-]+\s*)(=)(\s*)">
139 <bygroups>
140 <token type="NameAttribute"/>
141 <token type="Operator"/>
142 <token type="Text"/>
143 </bygroups>
144 <push state="attr"/>
145 </rule>
146 <rule pattern="[\w:-]+">
147 <token type="NameAttribute"/>
148 </rule>
149 <rule pattern="(/?)(\s*)(>)">
150 <bygroups>
151 <token type="Punctuation"/>
152 <token type="Text"/>
153 <token type="Punctuation"/>
154 </bygroups>
155 <pop depth="1"/>
156 </rule>
157 </state>
158 </rules>
159</lexer>