xref: /aoo41x/main/l10ntools/source/cfglex.l (revision cdf0e10c)
1 %{
2 /*
3  * lexer for parsing cfg source files
4  *
5  */
6 
7 
8 /* enlarge token buffer to tokenize whole strings */
9 #undef YYLMAX
10 #define YYLMAX 64000
11 
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
19 
20 /* table of possible token ids */
21 #include "tokens.h"
22 #include <stdlib.h>
23 #include <stdio.h>
24 
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
32 
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();
46 
47 int bText=0;
48 %}
49 
50 %p 24000
51 %e 1200
52 %n 500
53 
54 %%
55 
56 \<[^\>]*"xml:lang="\""x-no-translate"\"[^\<]*\/\>	{
57 	bText = 0;
58 	WorkOnTokenSet( CFG_TOKEN_NO_TRANSLATE, yytext );
59 }
60 
61 \<.*\/\> {
62 	bText = 0;
63 	WorkOnTokenSet( ANYTOKEN, yytext );
64 }
65 
66 \<[^\>]*"xml:lang="\".*\"[^\<]*\>	{
67 	bText = 1;
68 	WorkOnTokenSet( CFG_TEXT_START, yytext );
69 }
70 
71 
72 \<[^\/\!][^\>]*\>	{
73 	bText = 0;
74 	WorkOnTokenSet( CFG_TAG, yytext );
75 }
76 
77 "<!"DOCTYPE[^\>]*\>	{
78 	bText = 0;
79 	WorkOnTokenSet( CFG_TAG, yytext );
80 }
81 
82 
83 \<\!\-\-	{
84 	char c1 = 0, c2 = 0, c3 = input();
85 	char pChar[2];
86 	pChar[1] = 0x00;
87 	pChar[0] = c3;
88 
89 	WorkOnTokenSet( COMMEND, yytext );
90 	WorkOnTokenSet( COMMEND, pChar );
91 
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 	}
103 }
104 
105 \<\/[^\>]*\> {
106 	bText = 0;
107 	WorkOnTokenSet( CFG_CLOSETAG, yytext );
108 }
109 
110 \<[^\>\!]*\> {
111 	bText = 0;
112 	if ( yytext[ 1 ] == '!' && yytext[ 2 ] == '-' && yytext[ 3 ] == '-' )
113 		WorkOnTokenSet( COMMEND, yytext );
114 	else
115 		WorkOnTokenSet( CFG_UNKNOWNTAG, yytext );
116 }
117 
118 .|\n {
119 	if ( bText == 1 )
120 		WorkOnTokenSet( CFG_TEXTCHAR, yytext );
121 	else
122 		WorkOnTokenSet( UNKNOWNCHAR, yytext );
123 }
124 
125 
126 %%
127 
128 /*****************************************************************************/
129 int	yywrap(void)
130 /*****************************************************************************/
131 {
132 	return 1;
133 }
134 
135 /*****************************************************************************/
136 void YYWarning( char *s )
137 /*****************************************************************************/
138 {
139 	/* write warning to stderr */
140 	fprintf( stderr,
141 		"Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
142 }
143 
144 /*****************************************************************************/
145 #ifdef GCC
146 void yyerror ( char *s, ... )
147 #else
148 void yyerror ( char *s )
149 #endif
150 /*****************************************************************************/
151 {
152 	/* write error to stderr */
153 	fprintf( stderr,
154 		"Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
155 	SetError();
156 }
157 
158 /*****************************************************************************/
159 int
160 #ifdef WNT
161 _cdecl
162 #endif
163 main( int argc, char* argv[])
164 /*****************************************************************************/
165 {
166 	/* error level */
167 	int nRetValue = 0;
168 	char *pOutput;
169 	FILE *pFile;
170 
171 	pOutput = GetOutputFile( argc, argv );
172 
173     if ( !pOutput ) {
174 		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" );
175 		fprintf( stdout, " Prj:      Project\n" );
176 		fprintf( stdout, " PrjRoot:  Path to project root (..\\.. etc.)\n" );
177 		fprintf( stdout, " FileIn:   Source files (*.src)\n" );
178 		fprintf( stdout, " FileOut:  Destination file (*.*)\n" );
179 		fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
180         fprintf( stdout, " -e: Disable writing errorlog\n" );
181 		fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" );
182 		fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" );
183 		fprintf( stdout, " -f: force extraction and merge even if only one language is existent\n" );
184 		fprintf( stdout, " -g[:dtd]: enables generation of properties (dtds if :dtd is set) - in this case FileOut is the output path\n" );
185 		fprintf( stdout, " -d: enables generation of *.don if work is done\n" );
186 		fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US...)\n" );
187 		fprintf( stdout, "     A fallback language can be defined like this: l1=f1.\n" );
188 		fprintf( stdout, "     f1, f2,... are also elements of (de,en-US...)\n" );
189 		fprintf( stdout, "     Example: -L de,es=en-US\n" );
190 		fprintf( stdout, "              Restriction to de and es, en-US will be fallback for es\n" );
191 		return 1;
192 	}
193 
194 	pFile = GetCfgFile();
195 	InitCfgExport( pOutput , getFilename() );
196 	if ( !pFile )
197 		return 1;
198 
199    	yyin = pFile;
200 
201 	/* create global instance of class CfgExport */
202 	//InitCfgExport( pOutput );
203 
204 	/* start parser */
205    	yylex();
206 
207 	/* get error info. and end export */
208 	nRetValue = GetError();
209 	EndCfgExport();
210 
211 
212     removeTempFile();
213 /* return error level */
214 	return nRetValue;
215 }
216 
217 
218