Bump for 3.6-28
[LibreOffice.git] / l10ntools / source / cfglex.l
blobdda0246ff909d1b51cd46592f40829476f0837d2
1 %{
2 /*
3  * lexer for parsing cfg source files
4  *
5  */
7 /* enlarge token buffer to tokenize whole strings */
8 #undef YYLMAX
9 #define YYLMAX 64000
11 /* to enable debug output define LEXDEBUG */
12 #define LEXDEBUG                1
13 #ifdef LEXDEBUG
14 #define OUTPUT  fprintf
15 #else
16 #define OUTPUT(Par1,Par2);
17 #endif
19 /* table of possible token ids */
20 #include "tokens.h"
21 #include <stdlib.h>
22 #include <stdio.h>
24 #include "sal/main.h"
26 #if defined __GNUC__
27 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
28 #pragma GCC diagnostic ignored "-Wunused-function"
29 #pragma GCC diagnostic ignored "-Wunused-label"
30 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
31 #endif
32 #elif defined __SINPRO_CC
33 #pragma disable_warn
34 #elif defined _MSC_VER
35 #pragma warning(push, 1)
36 #endif
38 int yycolumn = 1;
39 #define YY_USER_ACTION yycolumn += yyleng;
41 /* external functions (C++ code, declared as extern "C" */
42 extern "C" void workOnTokenSet( int, char* );
43 extern "C" FILE * init(int, char **);
45 int bText=0;
48 %option yylineno
49 %option never-interactive
51 %p 24000
52 %e 1200
53 %n 500
57 \<[^\>]*"xml:lang="\""x-no-translate"\"[^\<]*\/\>       {
58         bText = 0;
59         workOnTokenSet( CFG_TOKEN_NO_TRANSLATE, yytext );
62 \<.*\/\> {
63         bText = 0;
64         workOnTokenSet( ANYTOKEN, yytext );
67 \<[^\>]*"xml:lang="\".*\"[^\<]*\>       {
68         bText = 1;
69         workOnTokenSet( CFG_TEXT_START, yytext );
73 \<[^\/\!][^\>]*\>       {
74         bText = 0;
75         workOnTokenSet( CFG_TAG, yytext );
78 "<!"DOCTYPE[^\>]*\>     {
79         bText = 0;
80         workOnTokenSet( CFG_TAG, yytext );
84 \<\!\-\-        {
85         char c1 = 0, c2 = 0, c3 = yyinput();
86         char pChar[2];
87         pChar[1] = 0x00;
88         pChar[0] = c3;
90         workOnTokenSet( COMMEND, yytext );
91         workOnTokenSet( COMMEND, pChar );
93         for(;;) {
94                 if ( c3 == EOF )
95                         break;
96                 if ( c1 == '-' && c2 == '-' && c3 == '>' )
97                         break;
98                 c1 = c2;
99                 c2 = c3;
100                 c3 = yyinput();
102                 pChar[0] = c3;
103                 workOnTokenSet( COMMEND, pChar );
104         }
107 \<\/[^\>]*\> {
108         bText = 0;
109         workOnTokenSet( CFG_CLOSETAG, yytext );
112 \<[^\>\!]*\> {
113         bText = 0;
114         if ( yytext[ 1 ] == '!' && yytext[ 2 ] == '-' && yytext[ 3 ] == '-' )
115                 workOnTokenSet( COMMEND, yytext );
116         else
117                 workOnTokenSet( CFG_UNKNOWNTAG, yytext );
120 .|\n {
121     yycolumn = 1;
122         if ( bText == 1 )
123                 workOnTokenSet( CFG_TEXTCHAR, yytext );
124         else
125                 workOnTokenSet( UNKNOWNCHAR, yytext );
131 /*****************************************************************************/
132 int     yywrap(void)
133 /*****************************************************************************/
135         return 1;
138 /*****************************************************************************/
139 void YYWarning( const char *s )
140 /*****************************************************************************/
142         /* write warning to stderr */
143         fprintf( stderr,
144                 "Warning: \"%s\" in line %d, column %d: \"%s\"\n", s, yylineno, yycolumn, yytext  );
147 /*****************************************************************************/
148 void yyerror ( const char *s )
149 /*****************************************************************************/
151         /* write error to stderr */
152         fprintf( stderr,
153                 "Error: \"%s\" in line %d, column %d: \"%s\"\n", s, yylineno, yycolumn, yytext  );
154         exit(EXIT_FAILURE);
157 SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
158     yyin = init(argc, argv);
159     yylex();
160     return EXIT_SUCCESS;