Update ooo320-m1
[ooovba.git] / transex3 / source / srclex.l
blobfef251e47224ef88cd297a238f9e2293f5e9d175
2 %{
3 /*
4  * lexer for parsing ressource source files (*.src)
5  *
6  */
9 /* enlarge token buffer to tokenize whole strings */
10 #undef YYLMAX
11 #define YYLMAX 64000
13 /* to enable debug output define LEXDEBUG */
14 #define LEXDEBUG                1
15 #ifdef LEXDEBUG
16 #define OUTPUT  fprintf
17 #else
18 #define OUTPUT(Par1,Par2);
19 #endif
21 /* table of possible token ids */
22 #include "tokens.h"
23 #include <stdlib.h>
24 #include <stdio.h>
26 #if defined __GNUC__
27 #pragma GCC system_header
28 #elif defined __SINPRO_CC
29 #pragma disable_warn
30 #elif defined _MSC_VER
31 #pragma warning(push, 1)
32 #endif
34 /* external functions (C++ code, declared as extren "C" */
35 extern int WorkOnTokenSet( int, char* );
36 extern int InitExport( char * , char * );
37 extern int Parse( int nTyp, char *pTokenText );
38 extern int EndExport();
39 extern int SetError();
40 extern int GetError();
41 extern char *GetOutputFile( int argc, char* argv[]);
42 extern FILE *GetNextFile();
43 extern int isQuiet();
44 extern void Close();
45 extern char* getFilename();
47 /* forwards */
48 void YYWarning();
51 %p 24000
52 %e 1200
53 %n 500
57 ^[\t ]*"#pragma".*      {
58         WorkOnTokenSet( PRAGMA, yytext );
61 ^[ \t]*\n {
62         WorkOnTokenSet( EMPTYLINE, yytext );
65 [\t ]+                          |
66 ^[\t ]*"#include".*     |
67 ^[\t ]*"#undef".*       |
68 "//".*                          |
69 ";"                             |
70 "<"                                     |
71 ">"                                     |
72 \n      {
73         WorkOnTokenSet( IGNOREDTOKENS, yytext );
75 "/*"    {
76         char c1 = 0, c2 = input();
77         char pChar[2];
78         pChar[1] = 0x00;
79         pChar[0] = c2;
81         WorkOnTokenSet( COMMEND, yytext );
82         WorkOnTokenSet( COMMEND, pChar );
83         for(;;) {
84                 if ( c2 == EOF )
85                         break;
86                 if ( c1 == '*' && c2 == '/' )
87                         break;
88                 c1 = c2;
89                 c2 = input();
90                 pChar[0] = c2;
91                 WorkOnTokenSet( COMMEND, pChar );
92         }
95 ^[\t ]*"#ifndef".+$     |
96 ^[\t ]*"#ifdef".+$      |
97 ^[\t ]*"#if".+$         |
98 ^[\t ]*"#elif".*$       |
99 ^[\t ]*"#else".*$       |
100 ^[\t ]*"#endif".*$      {
101         WorkOnTokenSet( CONDITION, yytext );
104 [a-zA-Z]+[\t ]+[^={\n]+[\t ] {
105 /* defined Res */
106         WorkOnTokenSet( DEFINEDRES, yytext );
109 [a-zA-Z]+[ \t]+[^={;\n]+\n[ \t]*"#".*\n[ \t]*"{"        |
110 [a-zA-Z]+[ \t]+[^={;\n]+\n?([ \t]*"//".*\n)*[ \t]*"{"   {
111 /* RESSOURCE // String TTT_XX ... */
112         WorkOnTokenSet( RESSOURCE, yytext );
115 ^[\t ]*[a-zA-Z_]+[\t ]*"\\"?[\t ]*\n?[ \t]*"{"[\t ]*"\\"?       {
116 /* SMALRESSOURCE // String ... */
117         WorkOnTokenSet( SMALRESSOURCE, yytext );
120 [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?=[ \t]*L?\".*\".*\n? {
121 /* TEXTLINE // TextTyp = "A Text" */
122         WorkOnTokenSet( TEXTLINE, yytext );
125 [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?(\n[ \t]*)?=([ \t]*\n)?(([a-zA-Z0-9_]+)|(\".*\")|([ \t\n]*))*\".*\"(([a-zA-Z0-9_]+)|(\".*\")|([ \t\n]*))*;   {
126 /* LONGTEXTLINE // TextTyp = "A Text" HHH_XXX "A Text" ZZZ_TTT ... */
127         WorkOnTokenSet( LONGTEXTLINE, yytext );
130 \".*\" {
131 /* TEXT // "A Text" */
132         WorkOnTokenSet( TEXT, yytext );
135 "{"[ \t]*\\?    {
136 /* LEVELUP */
137         WorkOnTokenSet( LEVELUP, yytext );
140 "}"[ \t]*;([ \t]*\\)?   {
141 /* LEVELDOWN */
142         WorkOnTokenSet( LEVELDOWN, yytext );
145 [a-zA-Z0-9_]+[ \t]*"="[ \t]*"MAP_APPFONT"[ \t]*"(".+")".*       {
146 /* APPFONTMAPPING  Typ = MAP_APPFONT( ... ) */
147         WorkOnTokenSet( APPFONTMAPPING, yytext );
150 [ \t]*[a-zA-Z0-9_]+[ \t]*=[ \t]*[0123456789]{1,5}[ \t]*";"?\\? {
151 /* TEXTREFID // TextTyp = 12345 */
152         WorkOnTokenSet( TEXTREFID, yytext );
155 [a-zA-Z0-9_]+[ \t]*"="[\t ]*([ \t]*"//".*\n)*.* | 
156 [a-zA-Z0-9_]+[ \t]*"=".*        { 
157 /* ASSIGNMENT  Typ = ...  */
158  WorkOnTokenSet( ASSIGNMENT, yytext );
163 [a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]*"<"      {
164 /* LISTASSIGNMENT  Typ [ ... ] = ... */
165         WorkOnTokenSet( LISTASSIGNMENT, yytext );
168 "StringList"+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]* {
169 /* LISTASSIGNMENT  Typ [ ... ] = ... */
170         WorkOnTokenSet( LISTASSIGNMENT, yytext );
173 "UIEntries"[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"     {
174 /* UIENTRIES */
175         WorkOnTokenSet( UIENTRIES, yytext );
178 "<"?[ \t]*L?\".*\".*">" {
179 /* LISTTEXT */
180         WorkOnTokenSet( LISTTEXT, yytext );
183 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.*"\\"        {
184 /* RSCDEFINE  #define ... */
185         WorkOnTokenSet( RSCDEFINE, yytext );
188 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.+ {
189 /* #define ... */
190         WorkOnTokenSet( NORMDEFINE, yytext );
193 "\\" {
194 /* RSCDEFINELEND */
195         WorkOnTokenSet( RSCDEFINELEND, yytext );
198 [a-zA-Z0-9_]+[ \t]*; {
199 /* allowed other tokens like "49 ;" or "SFX_... ;" */
200         WorkOnTokenSet( ANYTOKEN, yytext );
203 .       {
204         WorkOnTokenSet( UNKNOWNCHAR, yytext );
205 /*      YYWarning( "Unknown Char" ); */
208 "{"?[ \t]*\".*\"[ \t]*";"[ \t]*"}" {
209 /* _LISTTEXT */
210         WorkOnTokenSet( _LISTTEXT, yytext );
215 /*****************************************************************************/
216 int     yywrap(void)
217 /*****************************************************************************/
219         FILE *pFile;
220         pFile = GetNextFile();
221         if ( pFile ) {
222                 yyin = pFile;
223                 yylineno = 0;
224                 return 0;
225         }
227    /* end of input reached */
228         return 1;
231 /*****************************************************************************/
232 void YYWarning( char *s )
233 /*****************************************************************************/
235         /* write warning to stderr */
236         fprintf( stderr, "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
239 /*****************************************************************************/
240 void yyerror( char *s )
241 /*****************************************************************************/
243         /* write error to stderr */
244         fprintf( stderr, "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
245         SetError();
248 /*****************************************************************************/
250 #ifdef WNT
251 _cdecl
252 #endif
253 main( int argc, char* argv[])
254 /*****************************************************************************/
256         /* error level */
257         int nRetValue = 0;
258         char *pOutput;
259         FILE *pFile;
260     
261         pOutput = GetOutputFile( argc, argv );
262         if( !isQuiet() ){ 
263         fprintf( stdout, "\nTransEx 3.1 Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.\n" );
264             fprintf( stdout, "========================================================================\n" );
265     }
267     if ( !pOutput ) {
268                 fprintf( stdout, "Syntax:TRANSEX[-p Prj][-r PrjRoot]-i FileIn...[-o FileOut][-m DataBase][-e][-b][-u][-L l1,l2,...]\n" );
269                 fprintf( stdout, " Prj:      Project\n" );
270                 fprintf( stdout, " PrjRoot:  Path to project root (..\\.. etc.)\n" );
271                 fprintf( stdout, " FileIn:   Source files (*.src)\n" );
272                 fprintf( stdout, " FileOut:  Destination file (*.*)\n" );
273                 fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
274                 fprintf( stdout, " -QQ: quiet output\n" );
275         fprintf( stdout, " -e: Disable writing errorlog\n" );
276                 fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" );
277                 fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" );
278                 fprintf( stdout, " -NOUTF8: disable UTF8 as language independent encoding\n" );
279                 fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US...)\n" );
280                 fprintf( stdout, "     A fallback language can be defined like this: l1=f1.\n" );
281                 fprintf( stdout, "     f1, f2,... are also elements of (de,en-US...)\n" );
282                 fprintf( stdout, "     Example: -L de,es=en-US\n" );
283                 fprintf( stdout, "              Restriction to de and es, en-US will be fallback for es\n" );
284                 return 1;
285         }
286     
287         InitExport( pOutput , getFilename() );
288         pFile = GetNextFile();
289         if ( !pFile )
290                 return 1;
291     
292         yyin = pFile;
294         /* create global instance of class Export */
296         /* start parser */
297         yylex();
298         Close();
300         /* get error info. and end export */
301         nRetValue = GetError();
302         EndExport();
304         if( !isQuiet() ) fprintf( stdout, "\n===================================\n\n" ); 
306         /* return error level */
307         return nRetValue;