]> git.sesse.net Git - vlc/blob - modules/gui/skins2/parser/skin.l
* modules/gui/skins/*:
[vlc] / modules / gui / skins2 / parser / skin.l
1 /* Validating XML processor for skin.dtd.
2  * Generated 2004/01/03 15:23:36.
3  *
4  * This program was generated with the FleXML XML processor generator,
5  * (Id: flexml.pl,v 1.24 1999/12/13 16:18:30 krisrose Exp).
6  * Copyright © 1999 Kristoffer Rose.  All rights reserved.
7  *
8  * You can redistribute and/or modify this program provided the following
9  * two conditions hold:
10  *
11  * 1. The program is distributed WITHOUT ANY WARRANTY from the author of
12  *    FleXML; without even the implied warranty of MERCHANTABILITY or
13  *    FITNESS FOR A PARTICULAR PURPOSE.
14  *
15  * 2. The program distribution conditions do not in any way affect the
16  *    distribution conditions of the FleXML system used to generate this
17  *    file or any version of FleXML derived from that system.
18  *
19  * Notice that these are explicit rights granted to you for files
20  * generated by the FleXML system.  For your rights in connection with
21  * the FleXML system itself please consult the GNU General Public License.
22  */
23
24 %{
25
26 /* Version strings. */
27 const char rcs_flexml_skeleton[] =
28  "$" "Id: skel,v 1.16 1999/12/09 04:01:51 krisrose Exp $";
29 const char rcs_flexml[] =
30  "$" "Id: flexml.pl,v 1.24 1999/12/13 16:18:30 krisrose Exp $";
31
32 /* ANSI headers. */
33 #include <unistd.h>
34 #include <stdio.h>
35 #include <string.h>
36 #include <assert.h>
37 #include <stdarg.h>
38 #include <ctype.h>
39
40 /* Generated definitions. */
41 #define FLEXML_BUFFERSTACKSIZE 100000
42
43 /* XML processor api. */
44 #include "skin.h"
45
46 /* FleXML-provided data. */
47 char* pcdata;
48 AT_Text_id A_Text_id;
49 AT_ThemeInfo_author A_ThemeInfo_author;
50 AT_Playlist_fgcolor A_Playlist_fgcolor;
51 AT_CheckBox_down2 A_CheckBox_down2;
52 AT_Image_lefttop A_Image_lefttop;
53 AT_Slider_visible A_Slider_visible;
54 AT_CheckBox_down1 A_CheckBox_down1;
55 AT_Image_rightbottom A_Image_rightbottom;
56 AT_Event_id A_Event_id;
57 AT_Rectangle_h A_Rectangle_h;
58 AT_Slider_lefttop A_Slider_lefttop;
59 AT_Slider_over A_Slider_over;
60 AT_Window_id A_Window_id;
61 AT_Theme_alpha A_Theme_alpha;
62 AT_Text_text A_Text_text;
63 AT_Playlist_rightbottom A_Playlist_rightbottom;
64 AT_Event_event A_Event_event;
65 AT_Slider_value A_Slider_value;
66 AT_Font_underline A_Font_underline;
67 AT_Image_onclick A_Image_onclick;
68 AT_Anchor_priority A_Anchor_priority;
69 AT_Font_italic A_Font_italic;
70 AT_Button_y A_Button_y;
71 AT_RadialSlider_sequence A_RadialSlider_sequence;
72 AT_Playlist_var A_Playlist_var;
73 AT_CheckBox_y A_CheckBox_y;
74 AT_Window_playondrop A_Window_playondrop;
75 AT_RadialSlider_minangle A_RadialSlider_minangle;
76 AT_RadialSlider_visible A_RadialSlider_visible;
77 AT_Playlist_playcolor A_Playlist_playcolor;
78 AT_Anchor_range A_Anchor_range;
79 AT_Theme_fadetime A_Theme_fadetime;
80 AT_CheckBox_x A_CheckBox_x;
81 AT_Bitmap_file A_Bitmap_file;
82 AT_Slider_down A_Slider_down;
83 AT_CheckBox_over2 A_CheckBox_over2;
84 AT_Slider_y A_Slider_y;
85 AT_Slider_id A_Slider_id;
86 AT_Window_dragdrop A_Window_dragdrop;
87 AT_Text_x A_Text_x;
88 AT_Image_y A_Image_y;
89 AT_Font_color A_Font_color;
90 AT_Slider_rightbottom A_Slider_rightbottom;
91 AT_Group_y A_Group_y;
92 AT_Text_font A_Text_font;
93 AT_Button_over A_Button_over;
94 AT_Theme_version A_Theme_version;
95 AT_Image_id A_Image_id;
96 AT_CheckBox_lefttop A_CheckBox_lefttop;
97 AT_Text_scrollspace A_Text_scrollspace;
98 AT_Button_action A_Button_action;
99 AT_Button_lefttop A_Button_lefttop;
100 AT_Button_id A_Button_id;
101 AT_Rectangle_visible A_Rectangle_visible;
102 AT_Rectangle_color A_Rectangle_color;
103 AT_Playlist_width A_Playlist_width;
104 AT_RadialSlider_maxangle A_RadialSlider_maxangle;
105 AT_Window_y A_Window_y;
106 AT_Slider_help A_Slider_help;
107 AT_Text_width A_Text_width;
108 AT_Slider_points A_Slider_points;
109 AT_CheckBox_up1 A_CheckBox_up1;
110 AT_Theme_magnet A_Theme_magnet;
111 AT_Theme_movealpha A_Theme_movealpha;
112 AT_RadialSlider_lefttop A_RadialSlider_lefttop;
113 AT_Button_up A_Button_up;
114 AT_RadialSlider_y A_RadialSlider_y;
115 AT_CheckBox_action1 A_CheckBox_action1;
116 AT_Playlist_id A_Playlist_id;
117 AT_Text_align A_Text_align;
118 AT_CheckBox_tooltiptext1 A_CheckBox_tooltiptext1;
119 AT_Group_x A_Group_x;
120 AT_Text_display A_Text_display;
121 AT_Bitmap_id A_Bitmap_id;
122 AT_Playlist_y A_Playlist_y;
123 AT_Text_scroll A_Text_scroll;
124 AT_Playlist_lefttop A_Playlist_lefttop;
125 AT_Rectangle_x A_Rectangle_x;
126 AT_Layout_minheight A_Layout_minheight;
127 AT_Button_rightbottom A_Button_rightbottom;
128 AT_Slider_thickness A_Slider_thickness;
129 AT_RadialSlider_tooltiptext A_RadialSlider_tooltiptext;
130 AT_RadialSlider_value A_RadialSlider_value;
131 AT_Text_visible A_Text_visible;
132 AT_Slider_tooltiptext A_Slider_tooltiptext;
133 AT_Rectangle_onclick A_Rectangle_onclick;
134 AT_Layout_width A_Layout_width;
135 AT_Rectangle_help A_Rectangle_help;
136 AT_CheckBox_tooltiptext2 A_CheckBox_tooltiptext2;
137 AT_Layout_maxheight A_Layout_maxheight;
138 AT_RadialSlider_help A_RadialSlider_help;
139 AT_Playlist_font A_Playlist_font;
140 AT_Rectangle_id A_Rectangle_id;
141 AT_CheckBox_help A_CheckBox_help;
142 AT_Image_help A_Image_help;
143 AT_Playlist_bgcolor1 A_Playlist_bgcolor1;
144 AT_Bitmap_alphacolor A_Bitmap_alphacolor;
145 AT_Image_image A_Image_image;
146 AT_Font_id A_Font_id;
147 AT_Button_x A_Button_x;
148 AT_CheckBox_id A_CheckBox_id;
149 AT_Layout_id A_Layout_id;
150 AT_Event_key A_Event_key;
151 AT_CheckBox_over1 A_CheckBox_over1;
152 AT_Slider_up A_Slider_up;
153 AT_Layout_minwidth A_Layout_minwidth;
154 AT_CheckBox_rightbottom A_CheckBox_rightbottom;
155 AT_Anchor_x A_Anchor_x;
156 AT_Font_font A_Font_font;
157 AT_Layout_maxwidth A_Layout_maxwidth;
158 AT_Playlist_help A_Playlist_help;
159 AT_Playlist_visible A_Playlist_visible;
160 AT_Slider_x A_Slider_x;
161 AT_CheckBox_up2 A_CheckBox_up2;
162 AT_Text_help A_Text_help;
163 AT_CheckBox_action2 A_CheckBox_action2;
164 AT_CheckBox_state A_CheckBox_state;
165 AT_Font_size A_Font_size;
166 AT_ThemeInfo_webpage A_ThemeInfo_webpage;
167 AT_RadialSlider_x A_RadialSlider_x;
168 AT_Button_tooltiptext A_Button_tooltiptext;
169 AT_Image_visible A_Image_visible;
170 AT_Window_visible A_Window_visible;
171 AT_RadialSlider_id A_RadialSlider_id;
172 AT_Anchor_y A_Anchor_y;
173 AT_RadialSlider_nbimages A_RadialSlider_nbimages;
174 AT_Playlist_bgcolor2 A_Playlist_bgcolor2;
175 AT_Playlist_x A_Playlist_x;
176 AT_ThemeInfo_email A_ThemeInfo_email;
177 AT_Window_x A_Window_x;
178 AT_Button_down A_Button_down;
179 AT_Playlist_height A_Playlist_height;
180 AT_Layout_height A_Layout_height;
181 AT_ThemeInfo_name A_ThemeInfo_name;
182 AT_Button_help A_Button_help;
183 AT_Text_y A_Text_y;
184 AT_Rectangle_w A_Rectangle_w;
185 AT_Image_x A_Image_x;
186 AT_Rectangle_y A_Rectangle_y;
187 AT_Playlist_selcolor A_Playlist_selcolor;
188 AT_RadialSlider_rightbottom A_RadialSlider_rightbottom;
189
190 /* XML state. */
191 #ifdef FLEX_DEBUG
192 # define ENTER(state)   debug_enter(state,#state)
193 # define LEAVE          debug_leave()
194 # define SET(state)     debug_set(state,#state)
195   static void debug_enter(int, char*);
196   static void debug_leave(void);
197   static void debug_set(int, char*);
198 #else
199 # define ENTER(state)   (yy_push_state(state))
200 # define LEAVE          (yy_pop_state())
201 # define SET(state)     BEGIN(state)
202 #endif
203
204 /* Generic actions. */
205 #define SKIP    /*skip*/
206 #define SUCCEED return 0
207
208 #define FAIL    return fail
209 static int fail(const char*, ...);
210
211 /* Text buffer stack handling. */
212 char bufferstack[FLEXML_BUFFERSTACKSIZE];
213 char* limit = bufferstack + FLEXML_BUFFERSTACKSIZE;
214 typedef struct BufferLast_s {
215   struct BufferLast_s *old; char* saved; char new[1];
216 } BufferLast;
217 BufferLast* last = (BufferLast*)0;
218 char* next = bufferstack;
219
220 #define BUFFERSET(P)  (P = next)
221 #define BUFFERPUTC(C) (assert(next<limit), *(next++) = (C))
222 #define BUFFERDONE    (BUFFERPUTC('\0'))
223
224 #define BUFFERLITERAL(C,P) bufferliteral(C,&(P),yytext)
225 static void bufferliteral(char c, char** pp, char* text)
226 {
227   char *s = strchr(text,c), *e = strrchr(text,c);
228   assert(s <= e); BUFFERSET(*pp);
229   while (++s<e) {
230     if (isspace(*s)) { BUFFERPUTC(' '); while (isspace(*s)) ++s; }
231     else BUFFERPUTC(*s);
232   } 
233   BUFFERDONE;
234 }
235
236 #ifdef FLEXML_HasMixed
237 static void pushbuffer(char* p)
238 {
239   BufferLast* l = (BufferLast*)next;
240   assert(next < limit);
241   l->old = last;
242   l->saved = p;
243   next = l->new;
244   last = l;
245 }
246
247 static char* popbuffer(void)
248 {
249   BufferLast* l = last;
250   assert(last != (BufferLast*)0);
251   last = l->old;
252   next = (char*)l;
253   return l->saved;
254 }
255 #endif
256
257 /* General internal entities are `unput' back onto the input stream... */
258 #define ENTITYTEXT(T) \
259   { char *s = (T), *e = s+strlen(s);\
260     while (--e >= s) { unput(*e); }}
261 %}
262
263 /* Flex standard options. */
264 %option stack
265 %option noyy_top_state
266 %option noinput
267 %option noreject
268 %option noyymore
269 %option noyywrap
270
271 /* Flex user-requested options. */
272 %option nounput
273
274 /* XML character classes (currently restricted to ASCII). */
275
276 /* "Common syntactic structures." */
277 S               [ \t\n\r\f]+
278 s               [ \t\n\r\f]*
279
280 /* "Names and Tokens." */
281 NameChar        [A-Za-z0-9.:_-]
282 Name            [A-Za-z_:]{NameChar}*
283 Names           {Name}({S}{Name})*
284 Nmtoken         ({NameChar})+
285 Nmtokens        {Nmtoken}({S}{Nmtoken})*
286
287 /* Miscellaneous. */
288 VersionNum      [a-zA-Z0-9_.:-]+
289 Eq              {s}"="{s}
290 Literal         \'[^'']*\'|\"[^""]*\"
291
292 /* Parser states (flex `exclusive start conditions'):
293  *
294  * PROLOG       the XML prolog of the document before <?xml...>
295  * DOCTYPE      the XML prolog of the document after <?xml...>
296  * EPILOG       after the root element
297  * INCOMMENT    inside an XML comment <!--....-->
298  * INPI         inside an XML PI <?...?>
299  * VALUE1       inside a '...'-delimited literal
300  * VALUE2       inside a "..."-delimited literal
301  * CDATA        inside a <![CDATA[...]]> section.
302  * ROOT_<tag>   expect root element <tag>
303  * AL_<tag>     inside the attribute list for <tag>
304  * IN_<tag>     inside a <tag> with element contents (ready for end tag)
305  * IMPOSSIBLE   dummy to permit disabling rules; must be last
306  */
307 %x PROLOG DOCTYPE EPILOG INCOMMENT INPI VALUE1 VALUE2 CDATA
308 %x ROOT_Theme AL_Theme S_Theme S_Theme_1 S_Theme_2 S_Theme_3 E_Theme
309 %x ROOT_Bitmap AL_Bitmap E_Bitmap
310 %x ROOT_Event AL_Event E_Event
311 %x ROOT_Font AL_Font E_Font
312 %x ROOT_ThemeInfo AL_ThemeInfo E_ThemeInfo
313 %x ROOT_Window AL_Window S_Window S_Window_1 S_Window_2 E_Window
314 %x ROOT_Layout AL_Layout S_Layout E_Layout
315 %x ROOT_Group AL_Group S_Group S_Group_1 S_Group_2 E_Group
316 %x ROOT_Anchor AL_Anchor E_Anchor
317 %x ROOT_Image AL_Image E_Image
318 %x ROOT_Rectangle AL_Rectangle E_Rectangle
319 %x ROOT_Button AL_Button E_Button
320 %x ROOT_CheckBox AL_CheckBox E_CheckBox
321 %x ROOT_Slider AL_Slider E_Slider
322 %x ROOT_RadialSlider AL_RadialSlider E_RadialSlider
323 %x ROOT_Text AL_Text E_Text
324 %x ROOT_Playlist AL_Playlist S_Playlist E_Playlist
325 %x IMPOSSIBLE
326
327 %{
328 /* State names. */
329 char* statenames[IMPOSSIBLE];
330
331 void FleXML_init(void)
332 {
333   statenames[PROLOG] = NULL;
334   statenames[DOCTYPE] = NULL;
335   statenames[EPILOG] = NULL;
336   statenames[INCOMMENT] = NULL;
337   statenames[INPI] = NULL;
338   statenames[VALUE1] = NULL;
339   statenames[VALUE2] = NULL;
340   statenames[CDATA] = NULL;
341   statenames[ROOT_Theme] = NULL;
342   statenames[AL_Theme] = NULL;
343   statenames[S_Theme] = "Theme";
344   statenames[S_Theme_1] = "Theme";
345   statenames[S_Theme_2] = "Theme";
346   statenames[S_Theme_3] = "Theme";
347   statenames[E_Theme] = "Theme";
348   statenames[ROOT_Bitmap] = NULL;
349   statenames[AL_Bitmap] = NULL;
350   statenames[E_Bitmap] = "Bitmap";
351   statenames[ROOT_Event] = NULL;
352   statenames[AL_Event] = NULL;
353   statenames[E_Event] = "Event";
354   statenames[ROOT_Font] = NULL;
355   statenames[AL_Font] = NULL;
356   statenames[E_Font] = "Font";
357   statenames[ROOT_ThemeInfo] = NULL;
358   statenames[AL_ThemeInfo] = NULL;
359   statenames[E_ThemeInfo] = "ThemeInfo";
360   statenames[ROOT_Window] = NULL;
361   statenames[AL_Window] = NULL;
362   statenames[S_Window] = "Window";
363   statenames[S_Window_1] = "Window";
364   statenames[S_Window_2] = "Window";
365   statenames[E_Window] = "Window";
366   statenames[ROOT_Layout] = NULL;
367   statenames[AL_Layout] = NULL;
368   statenames[S_Layout] = "Layout";
369   statenames[E_Layout] = "Layout";
370   statenames[ROOT_Group] = NULL;
371   statenames[AL_Group] = NULL;
372   statenames[S_Group] = "Group";
373   statenames[S_Group_1] = "Group";
374   statenames[S_Group_2] = "Group";
375   statenames[E_Group] = "Group";
376   statenames[ROOT_Anchor] = NULL;
377   statenames[AL_Anchor] = NULL;
378   statenames[E_Anchor] = "Anchor";
379   statenames[ROOT_Image] = NULL;
380   statenames[AL_Image] = NULL;
381   statenames[E_Image] = "Image";
382   statenames[ROOT_Rectangle] = NULL;
383   statenames[AL_Rectangle] = NULL;
384   statenames[E_Rectangle] = "Rectangle";
385   statenames[ROOT_Button] = NULL;
386   statenames[AL_Button] = NULL;
387   statenames[E_Button] = "Button";
388   statenames[ROOT_CheckBox] = NULL;
389   statenames[AL_CheckBox] = NULL;
390   statenames[E_CheckBox] = "CheckBox";
391   statenames[ROOT_Slider] = NULL;
392   statenames[AL_Slider] = NULL;
393   statenames[E_Slider] = "Slider";
394   statenames[ROOT_RadialSlider] = NULL;
395   statenames[AL_RadialSlider] = NULL;
396   statenames[E_RadialSlider] = "RadialSlider";
397   statenames[ROOT_Text] = NULL;
398   statenames[AL_Text] = NULL;
399   statenames[E_Text] = "Text";
400   statenames[ROOT_Playlist] = NULL;
401   statenames[AL_Playlist] = NULL;
402   statenames[S_Playlist] = "Playlist";
403   statenames[E_Playlist] = "Playlist";
404 }
405 %}
406
407 %%
408
409  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
410  SET(PROLOG); FleXML_init();
411
412  /* COMMENTS and PIs: handled uniformly for efficiency. */
413
414 <ROOT_Theme,AL_Theme,S_Theme,S_Theme_1,S_Theme_2,S_Theme_3,E_Theme,ROOT_Bitmap,AL_Bitmap,E_Bitmap,ROOT_Event,AL_Event,E_Event,ROOT_Font,AL_Font,E_Font,ROOT_ThemeInfo,AL_ThemeInfo,E_ThemeInfo,ROOT_Window,AL_Window,S_Window,S_Window_1,S_Window_2,E_Window,ROOT_Layout,AL_Layout,S_Layout,E_Layout,ROOT_Group,AL_Group,S_Group,S_Group_1,S_Group_2,E_Group,ROOT_Anchor,AL_Anchor,E_Anchor,ROOT_Image,AL_Image,E_Image,ROOT_Rectangle,AL_Rectangle,E_Rectangle,ROOT_Button,AL_Button,E_Button,ROOT_CheckBox,AL_CheckBox,E_CheckBox,ROOT_Slider,AL_Slider,E_Slider,ROOT_RadialSlider,AL_RadialSlider,E_RadialSlider,ROOT_Text,AL_Text,E_Text,ROOT_Playlist,AL_Playlist,S_Playlist,E_Playlist,PROLOG,DOCTYPE,EPILOG>{
415  "<!--" ENTER(INCOMMENT);
416  "<?" ENTER(INPI);
417 }
418 <INCOMMENT>{
419  "-->"          LEAVE;
420  "--"           |
421  .              |
422  \n             SKIP;
423  <<EOF>>        FAIL("EOF in comment.");
424 }
425 <INPI>{
426  "?>"           LEAVE;
427  .              |
428  \n             SKIP;
429  <<EOF>>        FAIL("EOF in PI (processing instruction).");
430 }
431
432  /* SPACES: skipped uniformly */
433
434 <ROOT_Theme,AL_Theme,S_Theme,S_Theme_1,S_Theme_2,S_Theme_3,E_Theme,ROOT_Bitmap,AL_Bitmap,E_Bitmap,ROOT_Event,AL_Event,E_Event,ROOT_Font,AL_Font,E_Font,ROOT_ThemeInfo,AL_ThemeInfo,E_ThemeInfo,ROOT_Window,AL_Window,S_Window,S_Window_1,S_Window_2,E_Window,ROOT_Layout,AL_Layout,S_Layout,E_Layout,ROOT_Group,AL_Group,S_Group,S_Group_1,S_Group_2,E_Group,ROOT_Anchor,AL_Anchor,E_Anchor,ROOT_Image,AL_Image,E_Image,ROOT_Rectangle,AL_Rectangle,E_Rectangle,ROOT_Button,AL_Button,E_Button,ROOT_CheckBox,AL_CheckBox,E_CheckBox,ROOT_Slider,AL_Slider,E_Slider,ROOT_RadialSlider,AL_RadialSlider,E_RadialSlider,ROOT_Text,AL_Text,E_Text,ROOT_Playlist,AL_Playlist,S_Playlist,E_Playlist,PROLOG,DOCTYPE,EPILOG>{S} SKIP;
435
436  /* PROLOG: determine root element and process it. */
437
438 <PROLOG>{
439  "<?xml"({S}version{Eq}(\'{VersionNum}\'|\"{VersionNum}\"))?"?>" SET(DOCTYPE);
440  "<?xml"[^>]*">" FAIL("Bad declaration %s.",yytext);
441 }
442
443 <PROLOG,DOCTYPE>{
444  "<!DOCTYPE"{S}"Layout"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Layout);
445  "<!DOCTYPE"{S}"Event"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Event);
446  "<!DOCTYPE"{S}"Image"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Image);
447  "<!DOCTYPE"{S}"Playlist"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Playlist);
448  "<!DOCTYPE"{S}"Text"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Text);
449  "<!DOCTYPE"{S}"Rectangle"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Rectangle);
450  "<!DOCTYPE"{S}"Anchor"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Anchor);
451  "<!DOCTYPE"{S}"Group"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Group);
452  "<!DOCTYPE"{S}"Theme"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Theme);
453  "<!DOCTYPE"{S}"Font"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Font);
454  "<!DOCTYPE"{S}"RadialSlider"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_RadialSlider);
455  "<!DOCTYPE"{S}"ThemeInfo"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_ThemeInfo);
456  "<!DOCTYPE"{S}"Slider"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Slider);
457  "<!DOCTYPE"{S}"CheckBox"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_CheckBox);
458  "<!DOCTYPE"{S}"Button"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Button);
459  "<!DOCTYPE"{S}"Bitmap"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Bitmap);
460  "<!DOCTYPE"{S}"Window"{S}SYSTEM{S}("'skin.dtd'"|"\"skin.dtd\""){s}">" SET(ROOT_Window);
461  "<!"[^>-][^>]*">" FAIL("Bad declaration %s.",yytext);
462  .              FAIL("Unexpected character `%c' in prolog.", yytext[0]);
463  <<EOF>>        FAIL("EOF in prolog.");
464 }
465
466  /* RULES DERIVED FROM DTD. */
467
468  /* <!--
469   * -->  */
470
471  /*         version     CDATA   "1.0"
472   *         magnet      CDATA   "15"
473   *         alpha       CDATA   "255"
474   *         movealpha   CDATA   "255"
475   *         fadetime    CDATA   "400"
476   *     >  */
477
478 <ROOT_Theme>"<Theme"{s} {
479   A_Theme_version = "1.0";
480   A_Theme_magnet = "15";
481   A_Theme_alpha = "255";
482   A_Theme_movealpha = "255";
483   A_Theme_fadetime = "400";
484   ENTER(AL_Theme);
485 }
486
487 <AL_Theme>{
488  "version"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Theme_version);
489  "version"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Theme_version);
490
491  "magnet"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Theme_magnet);
492  "magnet"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Theme_magnet);
493
494  "alpha"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Theme_alpha);
495  "alpha"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Theme_alpha);
496
497  "movealpha"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Theme_movealpha);
498  "movealpha"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Theme_movealpha);
499
500  "fadetime"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Theme_fadetime);
501  "fadetime"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Theme_fadetime);
502
503  ">" {
504   LEAVE; STag_Theme(); pcdata = NULL; ENTER(S_Theme);
505  }
506  "/>" FAIL("`Theme' element cannot be empty.");
507  .       FAIL("Unexpected character `%c' in attribute list of Theme element.", yytext[0]);
508  {Name} FAIL("Bad attribute `%s' in `Theme' element start tag.",yytext);
509  <<EOF>> FAIL("EOF in attribute list of `Theme' element.");
510 }
511
512 <E_Theme,S_Theme_1,S_Theme_3>{
513  "</Theme"{s}">" {
514   LEAVE;
515   ETag_Theme();
516   switch (YY_START) {
517    case ROOT_Theme: SET(EPILOG); break;
518   }
519  }
520  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Theme>' expected.",yytext);
521  .       FAIL("Unexpected character `%c': `</Theme>' expected.",yytext[0]);
522  <<EOF>> FAIL("Premature EOF: `</Theme>' expected.");
523 }
524
525  /* <!-- main elements -->  */
526
527  /*         id          CDATA   #REQUIRED
528   *         file        CDATA   #REQUIRED
529   *         alphacolor  CDATA   #REQUIRED
530   *     >  */
531
532 <ROOT_Bitmap,S_Theme_2,S_Theme_1,S_Theme_3>"<Bitmap"{s} {
533   A_Bitmap_id = NULL;
534   A_Bitmap_file = NULL;
535   A_Bitmap_alphacolor = NULL;
536   ENTER(AL_Bitmap);
537 }
538
539 <AL_Bitmap>{
540  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Bitmap_id);
541  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Bitmap_id);
542
543  "file"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Bitmap_file);
544  "file"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Bitmap_file);
545
546  "alphacolor"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Bitmap_alphacolor);
547  "alphacolor"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Bitmap_alphacolor);
548
549  ">" {
550   if (!A_Bitmap_id) FAIL("Required attribute `id' not set for `Bitmap' element.");
551   if (!A_Bitmap_file) FAIL("Required attribute `file' not set for `Bitmap' element.");
552   if (!A_Bitmap_alphacolor) FAIL("Required attribute `alphacolor' not set for `Bitmap' element.");
553   LEAVE; STag_Bitmap(); pcdata = NULL; ENTER(E_Bitmap);
554  }
555  "/>" {
556   if (!A_Bitmap_id) FAIL("Required attribute `id' not set for `Bitmap' element.");
557   if (!A_Bitmap_file) FAIL("Required attribute `file' not set for `Bitmap' element.");
558   if (!A_Bitmap_alphacolor) FAIL("Required attribute `alphacolor' not set for `Bitmap' element.");
559   LEAVE; STag_Bitmap(); pcdata = NULL; ETag_Bitmap();
560   switch (YY_START) {
561    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
562    case ROOT_Bitmap: SET(EPILOG); break;
563   }
564  }
565  .       FAIL("Unexpected character `%c' in attribute list of Bitmap element.", yytext[0]);
566  {Name} FAIL("Bad attribute `%s' in `Bitmap' element start tag.",yytext);
567  <<EOF>> FAIL("EOF in attribute list of `Bitmap' element.");
568 }
569
570 <E_Bitmap>{
571  "</Bitmap"{s}">" {
572   LEAVE;
573   ETag_Bitmap();
574   switch (YY_START) {
575    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
576    case ROOT_Bitmap: SET(EPILOG); break;
577   }
578  }
579  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Bitmap>' expected.",yytext);
580  .       FAIL("Unexpected character `%c': `</Bitmap>' expected.",yytext[0]);
581  <<EOF>> FAIL("Premature EOF: `</Bitmap>' expected.");
582 }
583
584  /*         id          CDATA   #REQUIRED
585   *         event       CDATA   #REQUIRED
586   *         key         CDATA   "none"
587   *     >  */
588
589 <ROOT_Event,S_Theme_2,S_Theme_1,S_Theme_3>"<Event"{s} {
590   A_Event_id = NULL;
591   A_Event_event = NULL;
592   A_Event_key = "none";
593   ENTER(AL_Event);
594 }
595
596 <AL_Event>{
597  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Event_id);
598  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Event_id);
599
600  "event"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Event_event);
601  "event"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Event_event);
602
603  "key"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Event_key);
604  "key"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Event_key);
605
606  ">" {
607   if (!A_Event_id) FAIL("Required attribute `id' not set for `Event' element.");
608   if (!A_Event_event) FAIL("Required attribute `event' not set for `Event' element.");
609   LEAVE; STag_Event(); pcdata = NULL; ENTER(E_Event);
610  }
611  "/>" {
612   if (!A_Event_id) FAIL("Required attribute `id' not set for `Event' element.");
613   if (!A_Event_event) FAIL("Required attribute `event' not set for `Event' element.");
614   LEAVE; STag_Event(); pcdata = NULL; ETag_Event();
615   switch (YY_START) {
616    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
617    case ROOT_Event: SET(EPILOG); break;
618   }
619  }
620  .       FAIL("Unexpected character `%c' in attribute list of Event element.", yytext[0]);
621  {Name} FAIL("Bad attribute `%s' in `Event' element start tag.",yytext);
622  <<EOF>> FAIL("EOF in attribute list of `Event' element.");
623 }
624
625 <E_Event>{
626  "</Event"{s}">" {
627   LEAVE;
628   ETag_Event();
629   switch (YY_START) {
630    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
631    case ROOT_Event: SET(EPILOG); break;
632   }
633  }
634  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Event>' expected.",yytext);
635  .       FAIL("Unexpected character `%c': `</Event>' expected.",yytext[0]);
636  <<EOF>> FAIL("Premature EOF: `</Event>' expected.");
637 }
638
639  /*         id          CDATA   #REQUIRED
640   *         font        CDATA   "arial"
641   *         size        CDATA   "12"
642   *         color       CDATA   "#000000"
643   *         italic      CDATA   "false"
644   *         underline   CDATA   "false"
645   *     >  */
646
647 <ROOT_Font,S_Theme_2,S_Theme_1,S_Theme_3>"<Font"{s} {
648   A_Font_id = NULL;
649   A_Font_font = "arial";
650   A_Font_size = "12";
651   A_Font_color = "#000000";
652   A_Font_italic = "false";
653   A_Font_underline = "false";
654   ENTER(AL_Font);
655 }
656
657 <AL_Font>{
658  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Font_id);
659  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Font_id);
660
661  "font"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Font_font);
662  "font"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Font_font);
663
664  "size"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Font_size);
665  "size"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Font_size);
666
667  "color"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Font_color);
668  "color"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Font_color);
669
670  "italic"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Font_italic);
671  "italic"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Font_italic);
672
673  "underline"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Font_underline);
674  "underline"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Font_underline);
675
676  ">" {
677   if (!A_Font_id) FAIL("Required attribute `id' not set for `Font' element.");
678   LEAVE; STag_Font(); pcdata = NULL; ENTER(E_Font);
679  }
680  "/>" {
681   if (!A_Font_id) FAIL("Required attribute `id' not set for `Font' element.");
682   LEAVE; STag_Font(); pcdata = NULL; ETag_Font();
683   switch (YY_START) {
684    case ROOT_Font: SET(EPILOG); break;
685    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
686   }
687  }
688  .       FAIL("Unexpected character `%c' in attribute list of Font element.", yytext[0]);
689  {Name} FAIL("Bad attribute `%s' in `Font' element start tag.",yytext);
690  <<EOF>> FAIL("EOF in attribute list of `Font' element.");
691 }
692
693 <E_Font>{
694  "</Font"{s}">" {
695   LEAVE;
696   ETag_Font();
697   switch (YY_START) {
698    case ROOT_Font: SET(EPILOG); break;
699    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
700   }
701  }
702  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Font>' expected.",yytext);
703  .       FAIL("Unexpected character `%c': `</Font>' expected.",yytext[0]);
704  <<EOF>> FAIL("Premature EOF: `</Font>' expected.");
705 }
706
707  /*         name        CDATA   #IMPLIED
708   *         author      CDATA   #IMPLIED
709   *         email       CDATA   #IMPLIED
710   *         webpage     CDATA   #IMPLIED
711   *     >  */
712
713 <ROOT_ThemeInfo,S_Theme>"<ThemeInfo"{s} {
714   A_ThemeInfo_name = NULL;
715   A_ThemeInfo_author = NULL;
716   A_ThemeInfo_email = NULL;
717   A_ThemeInfo_webpage = NULL;
718   ENTER(AL_ThemeInfo);
719 }
720
721 <AL_ThemeInfo>{
722  "name"{Eq}\' ENTER(VALUE1); BUFFERSET(A_ThemeInfo_name);
723  "name"{Eq}\" ENTER(VALUE2); BUFFERSET(A_ThemeInfo_name);
724
725  "author"{Eq}\' ENTER(VALUE1); BUFFERSET(A_ThemeInfo_author);
726  "author"{Eq}\" ENTER(VALUE2); BUFFERSET(A_ThemeInfo_author);
727
728  "email"{Eq}\' ENTER(VALUE1); BUFFERSET(A_ThemeInfo_email);
729  "email"{Eq}\" ENTER(VALUE2); BUFFERSET(A_ThemeInfo_email);
730
731  "webpage"{Eq}\' ENTER(VALUE1); BUFFERSET(A_ThemeInfo_webpage);
732  "webpage"{Eq}\" ENTER(VALUE2); BUFFERSET(A_ThemeInfo_webpage);
733
734  ">" {
735   LEAVE; STag_ThemeInfo(); pcdata = NULL; ENTER(E_ThemeInfo);
736  }
737  "/>" {
738   LEAVE; STag_ThemeInfo(); pcdata = NULL; ETag_ThemeInfo();
739   switch (YY_START) {
740    case S_Theme: SET(S_Theme_1); break;
741    case ROOT_ThemeInfo: SET(EPILOG); break;
742   }
743  }
744  .       FAIL("Unexpected character `%c' in attribute list of ThemeInfo element.", yytext[0]);
745  {Name} FAIL("Bad attribute `%s' in `ThemeInfo' element start tag.",yytext);
746  <<EOF>> FAIL("EOF in attribute list of `ThemeInfo' element.");
747 }
748
749 <E_ThemeInfo>{
750  "</ThemeInfo"{s}">" {
751   LEAVE;
752   ETag_ThemeInfo();
753   switch (YY_START) {
754    case S_Theme: SET(S_Theme_1); break;
755    case ROOT_ThemeInfo: SET(EPILOG); break;
756   }
757  }
758  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</ThemeInfo>' expected.",yytext);
759  .       FAIL("Unexpected character `%c': `</ThemeInfo>' expected.",yytext[0]);
760  <<EOF>> FAIL("Premature EOF: `</ThemeInfo>' expected.");
761 }
762
763  /*         id          CDATA   #REQUIRED
764   *         visible     CDATA   "true"
765   *         x           CDATA   "\0"
766   *         y           CDATA   "\0"
767   *         dragdrop    CDATA   "true"
768   *         playondrop  CDATA   "true"
769   *     >  */
770
771 <ROOT_Window,S_Theme_2,S_Theme_1,S_Theme_3>"<Window"{s} {
772   A_Window_id = NULL;
773   A_Window_visible = "true";
774   A_Window_x = "\0";
775   A_Window_y = "\0";
776   A_Window_dragdrop = "true";
777   A_Window_playondrop = "true";
778   ENTER(AL_Window);
779 }
780
781 <AL_Window>{
782  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Window_id);
783  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Window_id);
784
785  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Window_visible);
786  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Window_visible);
787
788  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Window_x);
789  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Window_x);
790
791  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Window_y);
792  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Window_y);
793
794  "dragdrop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Window_dragdrop);
795  "dragdrop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Window_dragdrop);
796
797  "playondrop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Window_playondrop);
798  "playondrop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Window_playondrop);
799
800  ">" {
801   if (!A_Window_id) FAIL("Required attribute `id' not set for `Window' element.");
802   LEAVE; STag_Window(); pcdata = NULL; ENTER(S_Window);
803  }
804  "/>" FAIL("`Window' element cannot be empty.");
805  .       FAIL("Unexpected character `%c' in attribute list of Window element.", yytext[0]);
806  {Name} FAIL("Bad attribute `%s' in `Window' element start tag.",yytext);
807  <<EOF>> FAIL("EOF in attribute list of `Window' element.");
808 }
809
810 <S_Window_2,E_Window>{
811  "</Window"{s}">" {
812   LEAVE;
813   ETag_Window();
814   switch (YY_START) {
815    case ROOT_Window: SET(EPILOG); break;
816    case S_Theme_2: case S_Theme_1: case S_Theme_3: SET(S_Theme_3); break;
817   }
818  }
819  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Window>' expected.",yytext);
820  .       FAIL("Unexpected character `%c': `</Window>' expected.",yytext[0]);
821  <<EOF>> FAIL("Premature EOF: `</Window>' expected.");
822 }
823
824  /*         id          CDATA   "none"
825   *         width       CDATA   #REQUIRED
826   *         height      CDATA   #REQUIRED
827   *         minwidth    CDATA   "-1"
828   *         maxwidth    CDATA   "-1"
829   *         minheight   CDATA   "-1"
830   *         maxheight   CDATA   "-1"
831   *     >  */
832
833 <ROOT_Layout,S_Window,S_Window_1,S_Window_2>"<Layout"{s} {
834   A_Layout_id = "none";
835   A_Layout_width = NULL;
836   A_Layout_height = NULL;
837   A_Layout_minwidth = "-1";
838   A_Layout_maxwidth = "-1";
839   A_Layout_minheight = "-1";
840   A_Layout_maxheight = "-1";
841   ENTER(AL_Layout);
842 }
843
844 <AL_Layout>{
845  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_id);
846  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_id);
847
848  "width"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_width);
849  "width"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_width);
850
851  "height"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_height);
852  "height"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_height);
853
854  "minwidth"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_minwidth);
855  "minwidth"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_minwidth);
856
857  "maxwidth"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_maxwidth);
858  "maxwidth"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_maxwidth);
859
860  "minheight"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_minheight);
861  "minheight"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_minheight);
862
863  "maxheight"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Layout_maxheight);
864  "maxheight"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Layout_maxheight);
865
866  ">" {
867   if (!A_Layout_width) FAIL("Required attribute `width' not set for `Layout' element.");
868   if (!A_Layout_height) FAIL("Required attribute `height' not set for `Layout' element.");
869   LEAVE; STag_Layout(); pcdata = NULL; ENTER(S_Layout);
870  }
871  "/>" FAIL("`Layout' element cannot be empty.");
872  .       FAIL("Unexpected character `%c' in attribute list of Layout element.", yytext[0]);
873  {Name} FAIL("Bad attribute `%s' in `Layout' element start tag.",yytext);
874  <<EOF>> FAIL("EOF in attribute list of `Layout' element.");
875 }
876
877 <E_Layout>{
878  "</Layout"{s}">" {
879   LEAVE;
880   ETag_Layout();
881   switch (YY_START) {
882    case S_Window: case S_Window_1: case S_Window_2: SET(S_Window_2); break;
883    case ROOT_Layout: SET(EPILOG); break;
884   }
885  }
886  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Layout>' expected.",yytext);
887  .       FAIL("Unexpected character `%c': `</Layout>' expected.",yytext[0]);
888  <<EOF>> FAIL("Premature EOF: `</Layout>' expected.");
889 }
890
891  /*                  Rectangle|Anchor)+>  */
892
893  /*         x           CDATA   "\0"
894   *         y           CDATA   "\0"
895   *     >  */
896
897 <ROOT_Group,S_Group_2,S_Layout,S_Group_1,S_Group>"<Group"{s} {
898   A_Group_x = "\0";
899   A_Group_y = "\0";
900   ENTER(AL_Group);
901 }
902
903 <AL_Group>{
904  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Group_x);
905  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Group_x);
906
907  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Group_y);
908  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Group_y);
909
910  ">" {
911   LEAVE; STag_Group(); pcdata = NULL; ENTER(S_Group);
912  }
913  "/>" FAIL("`Group' element cannot be empty.");
914  .       FAIL("Unexpected character `%c' in attribute list of Group element.", yytext[0]);
915  {Name} FAIL("Bad attribute `%s' in `Group' element start tag.",yytext);
916  <<EOF>> FAIL("EOF in attribute list of `Group' element.");
917 }
918
919 <S_Group_2,E_Group>{
920  "</Group"{s}">" {
921   LEAVE;
922   ETag_Group();
923   switch (YY_START) {
924    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
925    case S_Layout: SET(E_Layout); break;
926    case ROOT_Group: SET(EPILOG); break;
927   }
928  }
929  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Group>' expected.",yytext);
930  .       FAIL("Unexpected character `%c': `</Group>' expected.",yytext[0]);
931  <<EOF>> FAIL("Premature EOF: `</Group>' expected.");
932 }
933
934  /* <!-- Anchors -->  */
935
936  /*         x           CDATA   "\0"
937   *         y           CDATA   "\0"
938   *         priority    CDATA   #REQUIRED
939   *         range       CDATA   "10"
940   *     >  */
941
942 <ROOT_Anchor,S_Group_2,S_Group_1,S_Group>"<Anchor"{s} {
943   A_Anchor_x = "\0";
944   A_Anchor_y = "\0";
945   A_Anchor_priority = NULL;
946   A_Anchor_range = "10";
947   ENTER(AL_Anchor);
948 }
949
950 <AL_Anchor>{
951  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Anchor_x);
952  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Anchor_x);
953
954  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Anchor_y);
955  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Anchor_y);
956
957  "priority"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Anchor_priority);
958  "priority"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Anchor_priority);
959
960  "range"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Anchor_range);
961  "range"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Anchor_range);
962
963  ">" {
964   if (!A_Anchor_priority) FAIL("Required attribute `priority' not set for `Anchor' element.");
965   LEAVE; STag_Anchor(); pcdata = NULL; ENTER(E_Anchor);
966  }
967  "/>" {
968   if (!A_Anchor_priority) FAIL("Required attribute `priority' not set for `Anchor' element.");
969   LEAVE; STag_Anchor(); pcdata = NULL; ETag_Anchor();
970   switch (YY_START) {
971    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
972    case ROOT_Anchor: SET(EPILOG); break;
973   }
974  }
975  .       FAIL("Unexpected character `%c' in attribute list of Anchor element.", yytext[0]);
976  {Name} FAIL("Bad attribute `%s' in `Anchor' element start tag.",yytext);
977  <<EOF>> FAIL("EOF in attribute list of `Anchor' element.");
978 }
979
980 <E_Anchor>{
981  "</Anchor"{s}">" {
982   LEAVE;
983   ETag_Anchor();
984   switch (YY_START) {
985    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
986    case ROOT_Anchor: SET(EPILOG); break;
987   }
988  }
989  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Anchor>' expected.",yytext);
990  .       FAIL("Unexpected character `%c': `</Anchor>' expected.",yytext[0]);
991  <<EOF>> FAIL("Premature EOF: `</Anchor>' expected.");
992 }
993
994  /* <!-- Controls -->  */
995
996  /*         id          CDATA   "none"
997   *         visible     CDATA   "true"
998   *         x           CDATA   "\0"
999   *         y           CDATA   "\0"
1000   *         lefttop     CDATA   "lefttop"
1001   *         rightbottom CDATA   "lefttop"
1002   *         image       CDATA   #REQUIRED
1003   *         onclick     CDATA   "none"
1004   *         help        CDATA   "\0"
1005   *     >  */
1006
1007 <ROOT_Image,S_Group_2,S_Group_1,S_Group>"<Image"{s} {
1008   A_Image_id = "none";
1009   A_Image_visible = "true";
1010   A_Image_x = "\0";
1011   A_Image_y = "\0";
1012   A_Image_lefttop = "lefttop";
1013   A_Image_rightbottom = "lefttop";
1014   A_Image_image = NULL;
1015   A_Image_onclick = "none";
1016   A_Image_help = "\0";
1017   ENTER(AL_Image);
1018 }
1019
1020 <AL_Image>{
1021  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_id);
1022  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_id);
1023
1024  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_visible);
1025  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_visible);
1026
1027  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_x);
1028  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_x);
1029
1030  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_y);
1031  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_y);
1032
1033  "lefttop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_lefttop);
1034  "lefttop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_lefttop);
1035
1036  "rightbottom"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_rightbottom);
1037  "rightbottom"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_rightbottom);
1038
1039  "image"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_image);
1040  "image"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_image);
1041
1042  "onclick"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_onclick);
1043  "onclick"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_onclick);
1044
1045  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Image_help);
1046  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Image_help);
1047
1048  ">" {
1049   if (!A_Image_image) FAIL("Required attribute `image' not set for `Image' element.");
1050   LEAVE; STag_Image(); pcdata = NULL; ENTER(E_Image);
1051  }
1052  "/>" {
1053   if (!A_Image_image) FAIL("Required attribute `image' not set for `Image' element.");
1054   LEAVE; STag_Image(); pcdata = NULL; ETag_Image();
1055   switch (YY_START) {
1056    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1057    case ROOT_Image: SET(EPILOG); break;
1058   }
1059  }
1060  .       FAIL("Unexpected character `%c' in attribute list of Image element.", yytext[0]);
1061  {Name} FAIL("Bad attribute `%s' in `Image' element start tag.",yytext);
1062  <<EOF>> FAIL("EOF in attribute list of `Image' element.");
1063 }
1064
1065 <E_Image>{
1066  "</Image"{s}">" {
1067   LEAVE;
1068   ETag_Image();
1069   switch (YY_START) {
1070    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1071    case ROOT_Image: SET(EPILOG); break;
1072   }
1073  }
1074  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Image>' expected.",yytext);
1075  .       FAIL("Unexpected character `%c': `</Image>' expected.",yytext[0]);
1076  <<EOF>> FAIL("Premature EOF: `</Image>' expected.");
1077 }
1078
1079  /*         id          CDATA   "none"
1080   *         visible     CDATA   "true"
1081   *         x           CDATA   "\0"
1082   *         y           CDATA   "\0"
1083   *         w           CDATA   "50"
1084   *         h           CDATA   "50"
1085   *         color       CDATA   "#C0C0C0"
1086   *         onclick     CDATA   "none"
1087   *         help        CDATA   "\0"
1088   *     >  */
1089
1090 <ROOT_Rectangle,S_Group_2,S_Group_1,S_Group>"<Rectangle"{s} {
1091   A_Rectangle_id = "none";
1092   A_Rectangle_visible = "true";
1093   A_Rectangle_x = "\0";
1094   A_Rectangle_y = "\0";
1095   A_Rectangle_w = "50";
1096   A_Rectangle_h = "50";
1097   A_Rectangle_color = "#C0C0C0";
1098   A_Rectangle_onclick = "none";
1099   A_Rectangle_help = "\0";
1100   ENTER(AL_Rectangle);
1101 }
1102
1103 <AL_Rectangle>{
1104  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_id);
1105  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_id);
1106
1107  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_visible);
1108  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_visible);
1109
1110  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_x);
1111  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_x);
1112
1113  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_y);
1114  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_y);
1115
1116  "w"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_w);
1117  "w"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_w);
1118
1119  "h"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_h);
1120  "h"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_h);
1121
1122  "color"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_color);
1123  "color"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_color);
1124
1125  "onclick"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_onclick);
1126  "onclick"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_onclick);
1127
1128  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Rectangle_help);
1129  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Rectangle_help);
1130
1131  ">" {
1132   LEAVE; STag_Rectangle(); pcdata = NULL; ENTER(E_Rectangle);
1133  }
1134  "/>" {
1135   LEAVE; STag_Rectangle(); pcdata = NULL; ETag_Rectangle();
1136   switch (YY_START) {
1137    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1138    case ROOT_Rectangle: SET(EPILOG); break;
1139   }
1140  }
1141  .       FAIL("Unexpected character `%c' in attribute list of Rectangle element.", yytext[0]);
1142  {Name} FAIL("Bad attribute `%s' in `Rectangle' element start tag.",yytext);
1143  <<EOF>> FAIL("EOF in attribute list of `Rectangle' element.");
1144 }
1145
1146 <E_Rectangle>{
1147  "</Rectangle"{s}">" {
1148   LEAVE;
1149   ETag_Rectangle();
1150   switch (YY_START) {
1151    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1152    case ROOT_Rectangle: SET(EPILOG); break;
1153   }
1154  }
1155  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Rectangle>' expected.",yytext);
1156  .       FAIL("Unexpected character `%c': `</Rectangle>' expected.",yytext[0]);
1157  <<EOF>> FAIL("Premature EOF: `</Rectangle>' expected.");
1158 }
1159
1160  /*         id          CDATA   "none"
1161   *         x           CDATA   "\0"
1162   *         y           CDATA   "\0"
1163   *         lefttop     CDATA   "lefttop"
1164   *         rightbottom CDATA   "lefttop"
1165   *         up          CDATA   #REQUIRED
1166   *         down        CDATA   "none"
1167   *         over        CDATA   "none"
1168   *         action      CDATA   "none"
1169   *         tooltiptext CDATA   "\0"
1170   *         help        CDATA   "\0"
1171   *     >  */
1172
1173 <ROOT_Button,S_Group_2,S_Group_1,S_Group>"<Button"{s} {
1174   A_Button_id = "none";
1175   A_Button_x = "\0";
1176   A_Button_y = "\0";
1177   A_Button_lefttop = "lefttop";
1178   A_Button_rightbottom = "lefttop";
1179   A_Button_up = NULL;
1180   A_Button_down = "none";
1181   A_Button_over = "none";
1182   A_Button_action = "none";
1183   A_Button_tooltiptext = "\0";
1184   A_Button_help = "\0";
1185   ENTER(AL_Button);
1186 }
1187
1188 <AL_Button>{
1189  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_id);
1190  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_id);
1191
1192  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_x);
1193  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_x);
1194
1195  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_y);
1196  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_y);
1197
1198  "lefttop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_lefttop);
1199  "lefttop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_lefttop);
1200
1201  "rightbottom"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_rightbottom);
1202  "rightbottom"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_rightbottom);
1203
1204  "up"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_up);
1205  "up"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_up);
1206
1207  "down"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_down);
1208  "down"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_down);
1209
1210  "over"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_over);
1211  "over"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_over);
1212
1213  "action"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_action);
1214  "action"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_action);
1215
1216  "tooltiptext"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_tooltiptext);
1217  "tooltiptext"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_tooltiptext);
1218
1219  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Button_help);
1220  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Button_help);
1221
1222  ">" {
1223   if (!A_Button_up) FAIL("Required attribute `up' not set for `Button' element.");
1224   LEAVE; STag_Button(); pcdata = NULL; ENTER(E_Button);
1225  }
1226  "/>" {
1227   if (!A_Button_up) FAIL("Required attribute `up' not set for `Button' element.");
1228   LEAVE; STag_Button(); pcdata = NULL; ETag_Button();
1229   switch (YY_START) {
1230    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1231    case ROOT_Button: SET(EPILOG); break;
1232   }
1233  }
1234  .       FAIL("Unexpected character `%c' in attribute list of Button element.", yytext[0]);
1235  {Name} FAIL("Bad attribute `%s' in `Button' element start tag.",yytext);
1236  <<EOF>> FAIL("EOF in attribute list of `Button' element.");
1237 }
1238
1239 <E_Button>{
1240  "</Button"{s}">" {
1241   LEAVE;
1242   ETag_Button();
1243   switch (YY_START) {
1244    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1245    case ROOT_Button: SET(EPILOG); break;
1246   }
1247  }
1248  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Button>' expected.",yytext);
1249  .       FAIL("Unexpected character `%c': `</Button>' expected.",yytext[0]);
1250  <<EOF>> FAIL("Premature EOF: `</Button>' expected.");
1251 }
1252
1253  /*         id           CDATA   "none"
1254   *         x            CDATA   "\0"
1255   *         y            CDATA   "\0"
1256   *         lefttop      CDATA   "lefttop"
1257   *         rightbottom  CDATA   "lefttop"
1258   *         up1          CDATA   #REQUIRED
1259   *         down1        CDATA   "none"
1260   *         over1        CDATA   "none"
1261   *         up2          CDATA   #REQUIRED
1262   *         down2        CDATA   "none"
1263   *         over2        CDATA   "none"
1264   *         state        CDATA   #REQUIRED
1265   *         action1      CDATA   "none"
1266   *         action2      CDATA   "none"
1267   *         tooltiptext1 CDATA   "\0"
1268   *         tooltiptext2 CDATA   "\0"
1269   *         help         CDATA   "\0"
1270   *     >  */
1271
1272 <ROOT_CheckBox,S_Group_2,S_Group_1,S_Group>"<CheckBox"{s} {
1273   A_CheckBox_id = "none";
1274   A_CheckBox_x = "\0";
1275   A_CheckBox_y = "\0";
1276   A_CheckBox_lefttop = "lefttop";
1277   A_CheckBox_rightbottom = "lefttop";
1278   A_CheckBox_up1 = NULL;
1279   A_CheckBox_down1 = "none";
1280   A_CheckBox_over1 = "none";
1281   A_CheckBox_up2 = NULL;
1282   A_CheckBox_down2 = "none";
1283   A_CheckBox_over2 = "none";
1284   A_CheckBox_state = NULL;
1285   A_CheckBox_action1 = "none";
1286   A_CheckBox_action2 = "none";
1287   A_CheckBox_tooltiptext1 = "\0";
1288   A_CheckBox_tooltiptext2 = "\0";
1289   A_CheckBox_help = "\0";
1290   ENTER(AL_CheckBox);
1291 }
1292
1293 <AL_CheckBox>{
1294  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_id);
1295  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_id);
1296
1297  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_x);
1298  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_x);
1299
1300  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_y);
1301  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_y);
1302
1303  "lefttop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_lefttop);
1304  "lefttop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_lefttop);
1305
1306  "rightbottom"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_rightbottom);
1307  "rightbottom"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_rightbottom);
1308
1309  "up1"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_up1);
1310  "up1"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_up1);
1311
1312  "down1"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_down1);
1313  "down1"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_down1);
1314
1315  "over1"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_over1);
1316  "over1"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_over1);
1317
1318  "up2"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_up2);
1319  "up2"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_up2);
1320
1321  "down2"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_down2);
1322  "down2"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_down2);
1323
1324  "over2"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_over2);
1325  "over2"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_over2);
1326
1327  "state"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_state);
1328  "state"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_state);
1329
1330  "action1"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_action1);
1331  "action1"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_action1);
1332
1333  "action2"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_action2);
1334  "action2"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_action2);
1335
1336  "tooltiptext1"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_tooltiptext1);
1337  "tooltiptext1"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_tooltiptext1);
1338
1339  "tooltiptext2"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_tooltiptext2);
1340  "tooltiptext2"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_tooltiptext2);
1341
1342  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_CheckBox_help);
1343  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_CheckBox_help);
1344
1345  ">" {
1346   if (!A_CheckBox_up1) FAIL("Required attribute `up1' not set for `CheckBox' element.");
1347   if (!A_CheckBox_up2) FAIL("Required attribute `up2' not set for `CheckBox' element.");
1348   if (!A_CheckBox_state) FAIL("Required attribute `state' not set for `CheckBox' element.");
1349   LEAVE; STag_CheckBox(); pcdata = NULL; ENTER(E_CheckBox);
1350  }
1351  "/>" {
1352   if (!A_CheckBox_up1) FAIL("Required attribute `up1' not set for `CheckBox' element.");
1353   if (!A_CheckBox_up2) FAIL("Required attribute `up2' not set for `CheckBox' element.");
1354   if (!A_CheckBox_state) FAIL("Required attribute `state' not set for `CheckBox' element.");
1355   LEAVE; STag_CheckBox(); pcdata = NULL; ETag_CheckBox();
1356   switch (YY_START) {
1357    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1358    case ROOT_CheckBox: SET(EPILOG); break;
1359   }
1360  }
1361  .       FAIL("Unexpected character `%c' in attribute list of CheckBox element.", yytext[0]);
1362  {Name} FAIL("Bad attribute `%s' in `CheckBox' element start tag.",yytext);
1363  <<EOF>> FAIL("EOF in attribute list of `CheckBox' element.");
1364 }
1365
1366 <E_CheckBox>{
1367  "</CheckBox"{s}">" {
1368   LEAVE;
1369   ETag_CheckBox();
1370   switch (YY_START) {
1371    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1372    case ROOT_CheckBox: SET(EPILOG); break;
1373   }
1374  }
1375  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</CheckBox>' expected.",yytext);
1376  .       FAIL("Unexpected character `%c': `</CheckBox>' expected.",yytext[0]);
1377  <<EOF>> FAIL("Premature EOF: `</CheckBox>' expected.");
1378 }
1379
1380  /*         id          CDATA   "none"
1381   *         visible     CDATA   "true"
1382   *         x           CDATA   "\0"
1383   *         y           CDATA   "\0"
1384   *         lefttop     CDATA   "lefttop"
1385   *         rightbottom CDATA   "lefttop"
1386   *         up          CDATA   #REQUIRED
1387   *         down        CDATA   "none"
1388   *         over        CDATA   "none"
1389   *         points      CDATA   #REQUIRED
1390   *         thickness   CDATA   "10"
1391   *         value       CDATA   "none"
1392   *         tooltiptext CDATA   "\0"
1393   *         help        CDATA   "\0"
1394   *     >  */
1395
1396 <ROOT_Slider,S_Playlist,S_Group_2,S_Group_1,S_Group>"<Slider"{s} {
1397   A_Slider_id = "none";
1398   A_Slider_visible = "true";
1399   A_Slider_x = "\0";
1400   A_Slider_y = "\0";
1401   A_Slider_lefttop = "lefttop";
1402   A_Slider_rightbottom = "lefttop";
1403   A_Slider_up = NULL;
1404   A_Slider_down = "none";
1405   A_Slider_over = "none";
1406   A_Slider_points = NULL;
1407   A_Slider_thickness = "10";
1408   A_Slider_value = "none";
1409   A_Slider_tooltiptext = "\0";
1410   A_Slider_help = "\0";
1411   ENTER(AL_Slider);
1412 }
1413
1414 <AL_Slider>{
1415  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_id);
1416  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_id);
1417
1418  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_visible);
1419  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_visible);
1420
1421  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_x);
1422  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_x);
1423
1424  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_y);
1425  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_y);
1426
1427  "lefttop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_lefttop);
1428  "lefttop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_lefttop);
1429
1430  "rightbottom"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_rightbottom);
1431  "rightbottom"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_rightbottom);
1432
1433  "up"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_up);
1434  "up"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_up);
1435
1436  "down"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_down);
1437  "down"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_down);
1438
1439  "over"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_over);
1440  "over"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_over);
1441
1442  "points"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_points);
1443  "points"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_points);
1444
1445  "thickness"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_thickness);
1446  "thickness"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_thickness);
1447
1448  "value"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_value);
1449  "value"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_value);
1450
1451  "tooltiptext"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_tooltiptext);
1452  "tooltiptext"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_tooltiptext);
1453
1454  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Slider_help);
1455  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Slider_help);
1456
1457  ">" {
1458   if (!A_Slider_up) FAIL("Required attribute `up' not set for `Slider' element.");
1459   if (!A_Slider_points) FAIL("Required attribute `points' not set for `Slider' element.");
1460   LEAVE; STag_Slider(); pcdata = NULL; ENTER(E_Slider);
1461  }
1462  "/>" {
1463   if (!A_Slider_up) FAIL("Required attribute `up' not set for `Slider' element.");
1464   if (!A_Slider_points) FAIL("Required attribute `points' not set for `Slider' element.");
1465   LEAVE; STag_Slider(); pcdata = NULL; ETag_Slider();
1466   switch (YY_START) {
1467    case S_Playlist: SET(E_Playlist); break;
1468    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1469    case ROOT_Slider: SET(EPILOG); break;
1470   }
1471  }
1472  .       FAIL("Unexpected character `%c' in attribute list of Slider element.", yytext[0]);
1473  {Name} FAIL("Bad attribute `%s' in `Slider' element start tag.",yytext);
1474  <<EOF>> FAIL("EOF in attribute list of `Slider' element.");
1475 }
1476
1477 <E_Slider>{
1478  "</Slider"{s}">" {
1479   LEAVE;
1480   ETag_Slider();
1481   switch (YY_START) {
1482    case S_Playlist: SET(E_Playlist); break;
1483    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1484    case ROOT_Slider: SET(EPILOG); break;
1485   }
1486  }
1487  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Slider>' expected.",yytext);
1488  .       FAIL("Unexpected character `%c': `</Slider>' expected.",yytext[0]);
1489  <<EOF>> FAIL("Premature EOF: `</Slider>' expected.");
1490 }
1491
1492  /*         id          CDATA   "none"
1493   *         visible     CDATA   "true"
1494   *         x           CDATA   "\0"
1495   *         y           CDATA   "\0"
1496   *         lefttop     CDATA   "lefttop"
1497   *         rightbottom CDATA   "lefttop"
1498   *         sequence    CDATA   #REQUIRED
1499   *         nbimages    CDATA   #REQUIRED
1500   *         minangle    CDATA   "\0"
1501   *         maxangle    CDATA   "360"
1502   *         value       CDATA   "none"
1503   *         tooltiptext CDATA   "\0"
1504   *         help        CDATA   "\0"
1505   *     >  */
1506
1507 <ROOT_RadialSlider,S_Group_2,S_Group_1,S_Group>"<RadialSlider"{s} {
1508   A_RadialSlider_id = "none";
1509   A_RadialSlider_visible = "true";
1510   A_RadialSlider_x = "\0";
1511   A_RadialSlider_y = "\0";
1512   A_RadialSlider_lefttop = "lefttop";
1513   A_RadialSlider_rightbottom = "lefttop";
1514   A_RadialSlider_sequence = NULL;
1515   A_RadialSlider_nbimages = NULL;
1516   A_RadialSlider_minangle = "\0";
1517   A_RadialSlider_maxangle = "360";
1518   A_RadialSlider_value = "none";
1519   A_RadialSlider_tooltiptext = "\0";
1520   A_RadialSlider_help = "\0";
1521   ENTER(AL_RadialSlider);
1522 }
1523
1524 <AL_RadialSlider>{
1525  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_id);
1526  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_id);
1527
1528  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_visible);
1529  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_visible);
1530
1531  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_x);
1532  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_x);
1533
1534  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_y);
1535  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_y);
1536
1537  "lefttop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_lefttop);
1538  "lefttop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_lefttop);
1539
1540  "rightbottom"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_rightbottom);
1541  "rightbottom"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_rightbottom);
1542
1543  "sequence"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_sequence);
1544  "sequence"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_sequence);
1545
1546  "nbimages"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_nbimages);
1547  "nbimages"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_nbimages);
1548
1549  "minangle"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_minangle);
1550  "minangle"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_minangle);
1551
1552  "maxangle"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_maxangle);
1553  "maxangle"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_maxangle);
1554
1555  "value"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_value);
1556  "value"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_value);
1557
1558  "tooltiptext"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_tooltiptext);
1559  "tooltiptext"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_tooltiptext);
1560
1561  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_RadialSlider_help);
1562  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_RadialSlider_help);
1563
1564  ">" {
1565   if (!A_RadialSlider_sequence) FAIL("Required attribute `sequence' not set for `RadialSlider' element.");
1566   if (!A_RadialSlider_nbimages) FAIL("Required attribute `nbimages' not set for `RadialSlider' element.");
1567   LEAVE; STag_RadialSlider(); pcdata = NULL; ENTER(E_RadialSlider);
1568  }
1569  "/>" {
1570   if (!A_RadialSlider_sequence) FAIL("Required attribute `sequence' not set for `RadialSlider' element.");
1571   if (!A_RadialSlider_nbimages) FAIL("Required attribute `nbimages' not set for `RadialSlider' element.");
1572   LEAVE; STag_RadialSlider(); pcdata = NULL; ETag_RadialSlider();
1573   switch (YY_START) {
1574    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1575    case ROOT_RadialSlider: SET(EPILOG); break;
1576   }
1577  }
1578  .       FAIL("Unexpected character `%c' in attribute list of RadialSlider element.", yytext[0]);
1579  {Name} FAIL("Bad attribute `%s' in `RadialSlider' element start tag.",yytext);
1580  <<EOF>> FAIL("EOF in attribute list of `RadialSlider' element.");
1581 }
1582
1583 <E_RadialSlider>{
1584  "</RadialSlider"{s}">" {
1585   LEAVE;
1586   ETag_RadialSlider();
1587   switch (YY_START) {
1588    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1589    case ROOT_RadialSlider: SET(EPILOG); break;
1590   }
1591  }
1592  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</RadialSlider>' expected.",yytext);
1593  .       FAIL("Unexpected character `%c': `</RadialSlider>' expected.",yytext[0]);
1594  <<EOF>> FAIL("Premature EOF: `</RadialSlider>' expected.");
1595 }
1596
1597  /*         id          CDATA   "none"
1598   *         visible     CDATA   "true"
1599   *         x           CDATA   "\0"
1600   *         y           CDATA   "\0"
1601   *         text        CDATA   ""
1602   *         font        CDATA   #REQUIRED
1603   *         align       CDATA   "left"
1604   *         width       CDATA   "\0"
1605   *         display     CDATA   "none"
1606   *         scroll      CDATA   "true"
1607   *         scrollspace CDATA   "20"
1608   *         help        CDATA   "\0"
1609   *     >  */
1610
1611 <ROOT_Text,S_Group_2,S_Group_1,S_Group>"<Text"{s} {
1612   A_Text_id = "none";
1613   A_Text_visible = "true";
1614   A_Text_x = "\0";
1615   A_Text_y = "\0";
1616   A_Text_text = NULL;
1617   A_Text_font = NULL;
1618   A_Text_align = "left";
1619   A_Text_width = "\0";
1620   A_Text_display = "none";
1621   A_Text_scroll = "true";
1622   A_Text_scrollspace = "20";
1623   A_Text_help = "\0";
1624   ENTER(AL_Text);
1625 }
1626
1627 <AL_Text>{
1628  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_id);
1629  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_id);
1630
1631  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_visible);
1632  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_visible);
1633
1634  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_x);
1635  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_x);
1636
1637  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_y);
1638  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_y);
1639
1640  "text"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_text);
1641  "text"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_text);
1642
1643  "font"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_font);
1644  "font"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_font);
1645
1646  "align"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_align);
1647  "align"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_align);
1648
1649  "width"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_width);
1650  "width"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_width);
1651
1652  "display"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_display);
1653  "display"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_display);
1654
1655  "scroll"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_scroll);
1656  "scroll"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_scroll);
1657
1658  "scrollspace"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_scrollspace);
1659  "scrollspace"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_scrollspace);
1660
1661  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Text_help);
1662  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Text_help);
1663
1664  ">" {
1665   if (!A_Text_font) FAIL("Required attribute `font' not set for `Text' element.");
1666   LEAVE; STag_Text(); pcdata = NULL; ENTER(E_Text);
1667  }
1668  "/>" {
1669   if (!A_Text_font) FAIL("Required attribute `font' not set for `Text' element.");
1670   LEAVE; STag_Text(); pcdata = NULL; ETag_Text();
1671   switch (YY_START) {
1672    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1673    case ROOT_Text: SET(EPILOG); break;
1674   }
1675  }
1676  .       FAIL("Unexpected character `%c' in attribute list of Text element.", yytext[0]);
1677  {Name} FAIL("Bad attribute `%s' in `Text' element start tag.",yytext);
1678  <<EOF>> FAIL("EOF in attribute list of `Text' element.");
1679 }
1680
1681 <E_Text>{
1682  "</Text"{s}">" {
1683   LEAVE;
1684   ETag_Text();
1685   switch (YY_START) {
1686    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1687    case ROOT_Text: SET(EPILOG); break;
1688   }
1689  }
1690  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Text>' expected.",yytext);
1691  .       FAIL("Unexpected character `%c': `</Text>' expected.",yytext[0]);
1692  <<EOF>> FAIL("Premature EOF: `</Text>' expected.");
1693 }
1694
1695  /*         id          CDATA   #REQUIRED
1696   *         visible     CDATA   "true"
1697   *         x           CDATA   "\0"
1698   *         y           CDATA   "\0"
1699   *         width       CDATA   "\0"
1700   *         height      CDATA   "\0"
1701   *         lefttop     CDATA   "lefttop"
1702   *         rightbottom CDATA   "lefttop"
1703   *         font        CDATA   #REQUIRED
1704   *         var         CDATA   "playlist"
1705   *         fgcolor     CDATA   "#000000"
1706   *         playcolor   CDATA   "#FF0000"
1707   *         bgcolor1    CDATA   "#FFFFFF"
1708   *         bgcolor2    CDATA   "#FFFFFF"
1709   *         selcolor    CDATA   "#0000FF"
1710   *         help        CDATA   "\0"
1711   *     >  */
1712
1713 <ROOT_Playlist,S_Group_2,S_Group_1,S_Group>"<Playlist"{s} {
1714   A_Playlist_id = NULL;
1715   A_Playlist_visible = "true";
1716   A_Playlist_x = "\0";
1717   A_Playlist_y = "\0";
1718   A_Playlist_width = "\0";
1719   A_Playlist_height = "\0";
1720   A_Playlist_lefttop = "lefttop";
1721   A_Playlist_rightbottom = "lefttop";
1722   A_Playlist_font = NULL;
1723   A_Playlist_var = "playlist";
1724   A_Playlist_fgcolor = "#000000";
1725   A_Playlist_playcolor = "#FF0000";
1726   A_Playlist_bgcolor1 = "#FFFFFF";
1727   A_Playlist_bgcolor2 = "#FFFFFF";
1728   A_Playlist_selcolor = "#0000FF";
1729   A_Playlist_help = "\0";
1730   ENTER(AL_Playlist);
1731 }
1732
1733 <AL_Playlist>{
1734  "id"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_id);
1735  "id"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_id);
1736
1737  "visible"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_visible);
1738  "visible"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_visible);
1739
1740  "x"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_x);
1741  "x"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_x);
1742
1743  "y"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_y);
1744  "y"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_y);
1745
1746  "width"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_width);
1747  "width"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_width);
1748
1749  "height"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_height);
1750  "height"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_height);
1751
1752  "lefttop"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_lefttop);
1753  "lefttop"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_lefttop);
1754
1755  "rightbottom"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_rightbottom);
1756  "rightbottom"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_rightbottom);
1757
1758  "font"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_font);
1759  "font"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_font);
1760
1761  "var"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_var);
1762  "var"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_var);
1763
1764  "fgcolor"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_fgcolor);
1765  "fgcolor"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_fgcolor);
1766
1767  "playcolor"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_playcolor);
1768  "playcolor"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_playcolor);
1769
1770  "bgcolor1"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_bgcolor1);
1771  "bgcolor1"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_bgcolor1);
1772
1773  "bgcolor2"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_bgcolor2);
1774  "bgcolor2"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_bgcolor2);
1775
1776  "selcolor"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_selcolor);
1777  "selcolor"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_selcolor);
1778
1779  "help"{Eq}\' ENTER(VALUE1); BUFFERSET(A_Playlist_help);
1780  "help"{Eq}\" ENTER(VALUE2); BUFFERSET(A_Playlist_help);
1781
1782  ">" {
1783   if (!A_Playlist_id) FAIL("Required attribute `id' not set for `Playlist' element.");
1784   if (!A_Playlist_font) FAIL("Required attribute `font' not set for `Playlist' element.");
1785   LEAVE; STag_Playlist(); pcdata = NULL; ENTER(S_Playlist);
1786  }
1787  "/>" FAIL("`Playlist' element cannot be empty.");
1788  .       FAIL("Unexpected character `%c' in attribute list of Playlist element.", yytext[0]);
1789  {Name} FAIL("Bad attribute `%s' in `Playlist' element start tag.",yytext);
1790  <<EOF>> FAIL("EOF in attribute list of `Playlist' element.");
1791 }
1792
1793 <E_Playlist>{
1794  "</Playlist"{s}">" {
1795   LEAVE;
1796   ETag_Playlist();
1797   switch (YY_START) {
1798    case S_Group_2: case S_Group_1: case S_Group: SET(S_Group_2); break;
1799    case ROOT_Playlist: SET(EPILOG); break;
1800   }
1801  }
1802  "</"{Name}{s}">" FAIL("Unexpected end-tag `%s': `</Playlist>' expected.",yytext);
1803  .       FAIL("Unexpected character `%c': `</Playlist>' expected.",yytext[0]);
1804  <<EOF>> FAIL("Premature EOF: `</Playlist>' expected.");
1805 }
1806
1807  /* EPILOG: after the root element. */
1808
1809 <EPILOG>{
1810  .              FAIL("Unexpected character `%c' after document.", yytext[0]);
1811  <<EOF>>        SUCCEED;
1812 }
1813
1814  /* CHARACTER DATA. */
1815
1816 <IMPOSSIBLE,VALUE1,VALUE2>{
1817  /* Non-defined standard entities... */
1818 "&amp;"  BUFFERPUTC('&');
1819 "&lt;"   BUFFERPUTC('<');
1820 "&gt;"   BUFFERPUTC('>');
1821 "&apos;" BUFFERPUTC('\'');
1822 "&quot;" BUFFERPUTC('"');
1823
1824  /* Character entities. */
1825  "&#"[[:digit:]]+";"    BUFFERPUTC((unsigned char)atoi(yytext+2));
1826  "&#x"[[:xdigit:]]+";"  BUFFERPUTC((unsigned char)strtol(yytext+3,NULL,16));
1827 }
1828
1829 <IMPOSSIBLE,VALUE1,VALUE2,CDATA>{
1830  "\n"           |
1831  "\r"           |
1832  "\r\n"         |
1833  "\n\r"         BUFFERPUTC('\n');
1834 }
1835
1836 <IMPOSSIBLE>{
1837  "<![CDATA["    ENTER(CDATA);
1838  "]]>"          FAIL("Unexpected `]]>' in character data.");
1839 }
1840
1841 <VALUE1>{
1842  \'             BUFFERDONE; LEAVE;
1843  <<EOF>>        FAIL("EOF in literal (\"'\" expected).");
1844 }
1845
1846 <VALUE2>{
1847  \"             BUFFERDONE; LEAVE;
1848  <<EOF>>        FAIL("EOF in literal (`\"' expected).");
1849 }
1850
1851 <IMPOSSIBLE,VALUE1,VALUE2>{
1852  [^<&]          BUFFERPUTC(yytext[0]);
1853  [<&]           FAIL("Spurious `%c' in character data.",yytext[0]);
1854 }
1855
1856 <CDATA>{
1857  "]]>"          LEAVE;
1858  "]]"           BUFFERPUTC(yytext[0]); BUFFERPUTC(yytext[1]);
1859  .              BUFFERPUTC(yytext[0]);
1860  <<EOF>>        FAIL("EOF in CDATA section.");
1861 }
1862
1863  /* Impossible rules to avoid warnings from flex(1). */
1864
1865 <INITIAL,IMPOSSIBLE>{
1866  .|[\n] FAIL("The Impossible Happened: INITIAL or IMPOSSIBLE state entered?");
1867 }
1868
1869 %%
1870
1871 /* Element context stack lookup. */
1872 int element_context(int i)
1873 {
1874   return (0<i && i<yy_start_stack_depth
1875           ? yy_start_stack[yy_start_stack_ptr - i]
1876           : 0);
1877 }
1878
1879 #ifdef FLEX_DEBUG
1880 void print_yy_stack(char* fmt, ...)
1881 {
1882   int i = 0; va_list ap; va_start(ap, fmt);
1883   vfprintf(stderr, fmt, ap);
1884   for (i=1; i<yy_start_stack_ptr; i++)
1885     fprintf(stderr, "%s/", statenames[yy_start_stack[i]]);
1886   fprintf(stderr,"%s\n", statenames[YY_START]);
1887   va_end(ap);
1888 }
1889
1890 static void debug_enter(int state, char* statename) {
1891   yy_push_state(state);
1892   if (yy_flex_debug) print_yy_stack("--ENTER(%s) : ",statename);
1893 }
1894
1895 static void debug_leave(void) {
1896   if (yy_flex_debug) print_yy_stack("--LEAVE : ");
1897   yy_pop_state();
1898 }
1899
1900 static void debug_set(int state, char* statename) {
1901   BEGIN(state);
1902   if (yy_flex_debug) print_yy_stack("--SET(%s) : ",statename);
1903 }
1904 #endif
1905
1906
1907 static int fail(const char* fmt, ...)
1908 {
1909   va_list ap; va_start(ap, fmt);
1910 #ifdef FLEXML_yylineno
1911   fprintf(stderr, "Invalid XML (XML input line %d, state %d): ", yylineno, YY_START);
1912 #else
1913   fprintf(stderr, "Invalid XML (state %d): ",YY_START);
1914 #endif
1915   vfprintf(stderr, fmt, ap);
1916   fprintf(stderr, "\n");
1917   va_end(ap);
1918   return 1;
1919 }