sync master with lastest vba changes
[ooovba.git] / transex3 / source / cfglex.l
blobdd2d9a45ab59b12d1f68866faf23d3413ce8b882
1 %{
2 /*
3  * lexer for parsing cfg source files
4  *
5  */
8 /* enlarge token buffer to tokenize whole strings */
9 #undef YYLMAX
10 #define YYLMAX 64000
12 /* to enable debug output define LEXDEBUG */
13 #define LEXDEBUG                1
14 #ifdef LEXDEBUG
15 #define OUTPUT  fprintf
16 #else
17 #define OUTPUT(Par1,Par2);
18 #endif
20 /* table of possible token ids */
21 #include "tokens.h"
22 #include <stdlib.h>
23 #include <stdio.h>
25 #if defined __GNUC__
26 #pragma GCC system_header
27 #elif defined __SINPRO_CC
28 #pragma disable_warn
29 #elif defined _MSC_VER
30 #pragma warning(push, 1)
31 #endif
33 /* external functions (C++ code, declared as extren "C" */
34 extern int WorkOnTokenSet( int, char* );
35 extern int InitCfgExport( char * , char *);
36 extern int EndCfgExport();
37 extern int GetError();
38 extern int SetError();
39 extern char *GetOutputFile( int argc, char* argv[]);
40 extern FILE *GetCfgFile();
41 extern int isQuiet();
42 extern void removeTempFile();
43 extern char* getFilename();
44 /* forwards */
45 void YYWarning();
47 int bText=0;
50 %p 24000
51 %e 1200
52 %n 500
56 \<[^\>]*"xml:lang="\""x-no-translate"\"[^\<]*\/\>       {
57         bText = 0;
58         WorkOnTokenSet( CFG_TOKEN_NO_TRANSLATE, yytext );
61 \<.*\/\> {
62         bText = 0;
63         WorkOnTokenSet( ANYTOKEN, yytext );
66 \<[^\>]*"xml:lang="\".*\"[^\<]*\>       {
67         bText = 1;
68         WorkOnTokenSet( CFG_TEXT_START, yytext );
72 \<[^\/\!][^\>]*\>       {
73         bText = 0;
74         WorkOnTokenSet( CFG_TAG, yytext );
77 "<!"DOCTYPE[^\>]*\>     {
78         bText = 0;
79         WorkOnTokenSet( CFG_TAG, yytext );
83 \<\!\-\-        {
84         char c1 = 0, c2 = 0, c3 = input();
85         char pChar[2];
86         pChar[1] = 0x00;
87         pChar[0] = c3;
89         WorkOnTokenSet( COMMEND, yytext );
90         WorkOnTokenSet( COMMEND, pChar );
92         for(;;) {
93                 if ( c3 == EOF )
94                         break;
95                 if ( c1 == '-' && c2 == '-' && c3 == '>' )
96                         break;
97                 c1 = c2;
98                 c2 = c3;
99                 c3 = input();
100                 pChar[0] = c3;
101                 WorkOnTokenSet( COMMEND, pChar );
102         }
105 \<\/[^\>]*\> {
106         bText = 0;
107         WorkOnTokenSet( CFG_CLOSETAG, yytext );
110 \<[^\>\!]*\> {
111         bText = 0;
112         if ( yytext[ 1 ] == '!' && yytext[ 2 ] == '-' && yytext[ 3 ] == '-' )
113                 WorkOnTokenSet( COMMEND, yytext );
114         else
115                 WorkOnTokenSet( CFG_UNKNOWNTAG, yytext );
118 .|\n {
119         if ( bText == 1 )
120                 WorkOnTokenSet( CFG_TEXTCHAR, yytext );
121         else
122                 WorkOnTokenSet( UNKNOWNCHAR, yytext );
128 /*****************************************************************************/
129 int     yywrap(void)
130 /*****************************************************************************/
132         return 1;
135 /*****************************************************************************/
136 void YYWarning( char *s )
137 /*****************************************************************************/
139         /* write warning to stderr */
140         fprintf( stderr,
141                 "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
144 /*****************************************************************************/
145 #ifdef GCC
146 void yyerror ( char *s, ... )
147 #else
148 void yyerror ( char *s )
149 #endif
150 /*****************************************************************************/
152         /* write error to stderr */
153         fprintf( stderr,
154                 "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
155         SetError();
158 /*****************************************************************************/
160 #ifdef WNT
161 _cdecl
162 #endif
163 main( int argc, char* argv[])
164 /*****************************************************************************/
166         /* error level */
167         int nRetValue = 0;
168         char *pOutput;
169         FILE *pFile;
171         pOutput = GetOutputFile( argc, argv );
172         if( !isQuiet() ){
173         fprintf( stdout, "\nCfgEx 0.9 Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.\n" );
174             fprintf( stdout, "======================================================================\n" );
175     }
177     if ( !pOutput ) {
178                 fprintf( stdout, "Syntax: CFGEX[-p Prj][-r PrjRoot]-i FileIn [-o FileOut][-m DataBase][-e][-b][-u][-f][-d DoneFile][-g[:dtd] ][-L l1,l2,...]\n" );
179                 fprintf( stdout, " Prj:      Project\n" );
180                 fprintf( stdout, " PrjRoot:  Path to project root (..\\.. etc.)\n" );
181                 fprintf( stdout, " FileIn:   Source files (*.src)\n" );
182                 fprintf( stdout, " FileOut:  Destination file (*.*)\n" );
183                 fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
184                 fprintf( stdout, " -QQ: quiet output\n" );
185         fprintf( stdout, " -e: Disable writing errorlog\n" );
186                 fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" );
187                 fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" );
188                 fprintf( stdout, " -f: force extraction and merge even if only one language is existent\n" );
189                 fprintf( stdout, " -g[:dtd]: enables generation of properties (dtds if :dtd is set) - in this case FileOut is the output path\n" );
190                 fprintf( stdout, " -d: enables generation of *.don if work is done\n" );
191                 fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US...)\n" );
192                 fprintf( stdout, "     A fallback language can be defined like this: l1=f1.\n" );
193                 fprintf( stdout, "     f1, f2,... are also elements of (de,en-US...)\n" );
194                 fprintf( stdout, "     Example: -L de,es=en-US\n" );
195                 fprintf( stdout, "              Restriction to de and es, en-US will be fallback for es\n" );
196                 return 1;
197         }
199         pFile = GetCfgFile();
200         InitCfgExport( pOutput , getFilename() );
201         if ( !pFile )
202                 return 1;
204         yyin = pFile;
206         /* create global instance of class CfgExport */
207         //InitCfgExport( pOutput );
209         /* start parser */
210         yylex();
212         /* get error info. and end export */
213         nRetValue = GetError();
214         EndCfgExport();
216         if( !isQuiet() ){
217         fprintf( stdout, "\n===================================\n\n" );
218     }
219     
220     removeTempFile();
221 /* return error level */
222         return nRetValue;
225 /*"<!--"[^"-->"]*"-->" {
226         bText = 0;
227         WorkOnTokenSet( COMMEND, yytext );
229 /*"<!"[^\-].*\> {
230         bText = 0;
231         WorkOnTokenSet( CFG_TAG, yytext );