xref: /trunk/main/l10ntools/source/cfglex.l (revision 3fdeb968)
1 %{
2 /**************************************************************
3  *
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  *
21  *************************************************************/
22 /*
23  * lexer for parsing cfg source files
24  *
25  */
26 
27 
28 /* enlarge token buffer to tokenize whole strings */
29 #undef YYLMAX
30 #define YYLMAX 64000
31 
32 /* to enable debug output define LEXDEBUG */
33 #define LEXDEBUG		1
34 #ifdef LEXDEBUG
35 #define OUTPUT	fprintf
36 #else
37 #define OUTPUT(Par1,Par2);
38 #endif
39 
40 /* table of possible token ids */
41 #include "tokens.h"
42 #include <stdlib.h>
43 #include <stdio.h>
44 
45 #if defined __GNUC__
46 #pragma GCC system_header
47 #elif defined __SINPRO_CC
48 #pragma disable_warn
49 #elif defined _MSC_VER
50 #pragma warning(push, 1)
51 #endif
52 
53 /* external functions (C++ code, declared as extern "C" */
54 extern int WorkOnTokenSet( int, char* );
55 extern int InitCfgExport( char * , char *);
56 extern int EndCfgExport();
57 extern int GetError();
58 extern int SetError();
59 extern char *GetOutputFile( int argc, char* argv[]);
60 extern FILE *GetCfgFile();
61 extern int isQuiet();
62 extern void removeTempFile();
63 extern char* getFilename();
64 /* forwards */
65 void YYWarning();
66 
67 int bText=0;
68 %}
69 
70 %p 24000
71 %e 1200
72 %n 500
73 
74 %%
75 
76 \<[^\>]*"xml:lang="\""x-no-translate"\"[^\<]*\/\>	{
77 	bText = 0;
78 	WorkOnTokenSet( CFG_TOKEN_NO_TRANSLATE, yytext );
79 }
80 
81 \<.*\/\> {
82 	bText = 0;
83 	WorkOnTokenSet( ANYTOKEN, yytext );
84 }
85 
86 \<[^\>]*"xml:lang="\".*\"[^\<]*\>	{
87 	bText = 1;
88 	WorkOnTokenSet( CFG_TEXT_START, yytext );
89 }
90 
91 
92 \<[^\/\!][^\>]*\>	{
93 	bText = 0;
94 	WorkOnTokenSet( CFG_TAG, yytext );
95 }
96 
97 "<!"DOCTYPE[^\>]*\>	{
98 	bText = 0;
99 	WorkOnTokenSet( CFG_TAG, yytext );
100 }
101 
102 
103 \<\!\-\-	{
104 	char c1 = 0, c2 = 0, c3 = input();
105 	char pChar[2];
106 	pChar[1] = 0x00;
107 	pChar[0] = c3;
108 
109 	WorkOnTokenSet( COMMENT, yytext );
110 	WorkOnTokenSet( COMMENT, pChar );
111 
112 	for(;;) {
113 		if ( c3 == EOF )
114 			break;
115 		if ( c1 == '-' && c2 == '-' && c3 == '>' )
116 			break;
117 		c1 = c2;
118 		c2 = c3;
119 		c3 = input();
120 		pChar[0] = c3;
121 		WorkOnTokenSet( COMMENT, pChar );
122 	}
123 }
124 
125 \<\/[^\>]*\> {
126 	bText = 0;
127 	WorkOnTokenSet( CFG_CLOSETAG, yytext );
128 }
129 
130 \<[^\>\!]*\> {
131 	bText = 0;
132 	if ( yytext[ 1 ] == '!' && yytext[ 2 ] == '-' && yytext[ 3 ] == '-' )
133 		WorkOnTokenSet( COMMENT, yytext );
134 	else
135 		WorkOnTokenSet( CFG_UNKNOWNTAG, yytext );
136 }
137 
138 .|\n {
139 	if ( bText == 1 )
140 		WorkOnTokenSet( CFG_TEXTCHAR, yytext );
141 	else
142 		WorkOnTokenSet( UNKNOWNCHAR, yytext );
143 }
144 
145 
146 %%
147 
148 /*****************************************************************************/
149 int	yywrap(void)
150 /*****************************************************************************/
151 {
152 	return 1;
153 }
154 
155 /*****************************************************************************/
156 void YYWarning( char *s )
157 /*****************************************************************************/
158 {
159 	/* write warning to stderr */
160 	fprintf( stderr,
161 		"Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext );
162 }
163 
164 /*****************************************************************************/
165 #ifdef GCC
166 void yyerror ( char *s, ... )
167 #else
168 void yyerror ( char *s )
169 #endif
170 /*****************************************************************************/
171 {
172 	/* write error to stderr */
173 	fprintf( stderr,
174 		"Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext );
175 	SetError();
176 }
177 
178 /*****************************************************************************/
179 int
180 #ifdef WNT
181 _cdecl
182 #endif
183 main( int argc, char* argv[])
184 /*****************************************************************************/
185 {
186 	/* error level */
187 	int nRetValue = 0;
188 	char *pOutput;
189 	FILE *pFile;
190 
191 	pOutput = GetOutputFile( argc, argv );
192 
193 	if ( !pOutput ) {
194 		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" );
195 		fprintf( stdout, " Prj:      Project\n" );
196 		fprintf( stdout, " PrjRoot:  Path to project root (..\\.. etc.)\n" );
197 		fprintf( stdout, " FileIn:   Source files (*.src)\n" );
198 		fprintf( stdout, " FileOut:  Destination file (*.*)\n" );
199 		fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
200 		fprintf( stdout, " -e: Disable writing errorlog\n" );
201 		fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" );
202 		fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" );
203 		fprintf( stdout, " -f: force extraction and merge even if only one language is existent\n" );
204 		fprintf( stdout, " -g[:dtd]: enables generation of properties (dtds if :dtd is set) - in this case FileOut is the output path\n" );
205 		fprintf( stdout, " -d: enables generation of *.don if work is done\n" );
206 		fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US...)\n" );
207 		fprintf( stdout, "     A fallback language can be defined like this: l1=f1.\n" );
208 		fprintf( stdout, "     f1, f2,... are also elements of (de,en-US...)\n" );
209 		fprintf( stdout, "     Example: -L de,es=en-US\n" );
210 		fprintf( stdout, "              Restriction to de and es, en-US will be fallback for es\n" );
211 		return 1;
212 	}
213 
214 	pFile = GetCfgFile();
215 	InitCfgExport( pOutput , getFilename() );
216 	if ( !pFile )
217 		return 1;
218 
219 	yyin = pFile;
220 
221 	/* create global instance of class CfgExport */
222 	//InitCfgExport( pOutput );
223 
224 	/* start parser */
225 	yylex();
226 
227 	/* get error info. and end export */
228 	nRetValue = GetError();
229 	EndCfgExport();
230 
231 
232 	removeTempFile();
233 /* return error level */
234 	return nRetValue;
235 }
236 
237