xref: /trunk/main/l10ntools/source/xrmlex.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 xml-property source files (*.xml)
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 Argument( char * );
56 extern int InitXrmExport( char * , char * );
57 extern int EndXrmExport();
58 extern int GetError();
59 extern int SetError();
60 extern char *GetOutputFile( int argc, char* argv[]);
61 extern FILE *GetXrmFile();
62 extern int isQuiet();
63 extern void removeTempFile();
64 extern char* getFilename();
65 
66 /* forwards */
67 void YYWarning();
68 
69 int bText=0;
70 %}
71 
72 %p 24000
73 %e 1200
74 %n 500
75 
76 %%
77 
78 "<p "[^\>]*xml:lang[^\>]*\> {
79 	WorkOnTokenSet( XRM_TEXT_START , yytext );
80 }
81 
82 "</p>" {
83 	WorkOnTokenSet( XRM_TEXT_END, yytext );
84 }
85 
86 "<h1 "[^\>]*xml:lang[^\>]*\> {
87 	WorkOnTokenSet( XRM_TEXT_START , yytext );
88 }
89 
90 "</h1>" {
91 	WorkOnTokenSet( XRM_TEXT_END, yytext );
92 }
93 "<h2 "[^\>]*xml:lang[^\>]*\> {
94 	WorkOnTokenSet( XRM_TEXT_START , yytext );
95 }
96 
97 "</h2>" {
98 	WorkOnTokenSet( XRM_TEXT_END, yytext );
99 }
100 "<h3 "[^\>]*xml:lang[^\>]*\> {
101 	WorkOnTokenSet( XRM_TEXT_START , yytext );
102 }
103 
104 "</h3>" {
105 	WorkOnTokenSet( XRM_TEXT_END, yytext );
106 }
107 "<h4 "[^\>]*xml:lang[^\>]*\> {
108 	WorkOnTokenSet( XRM_TEXT_START , yytext );
109 }
110 
111 "</h4>" {
112 	WorkOnTokenSet( XRM_TEXT_END, yytext );
113 }
114 "<h5 "[^\>]*xml:lang[^\>]*\> {
115 	WorkOnTokenSet( XRM_TEXT_START , yytext );
116 }
117 
118 "</h5>" {
119 	WorkOnTokenSet( XRM_TEXT_END, yytext );
120 }
121 
122 
123 
124 
125 
126 
127 "<!--"	{
128 	char c1 = 0, c2 = 0, c3 = input();
129 	char pChar[2];
130 	pChar[1] = 0x00;
131 	pChar[0] = c3;
132 
133 	WorkOnTokenSet( COMMENT, yytext );
134 	WorkOnTokenSet( COMMENT, pChar );
135 
136 	for(;;) {
137 		if ( c3 == EOF )
138 			break;
139 		if ( c1 == '-' && c2 == '-' && c3 == '>' )
140 			break;
141 		c1 = c2;
142 		c2 = c3;
143 		c3 = input();
144 		pChar[0] = c3;
145 		WorkOnTokenSet( COMMENT, pChar );
146 	}
147 }
148 
149 .|\n {
150 	if ( bText == 1 )
151 		WorkOnTokenSet( XML_TEXTCHAR, yytext );
152 	else
153 		WorkOnTokenSet( UNKNOWNCHAR, yytext );
154 }
155 
156 
157 %%
158 
159 /*****************************************************************************/
160 int	yywrap(void)
161 /*****************************************************************************/
162 {
163 	return 1;
164 }
165 
166 /*****************************************************************************/
167 void YYWarning( char *s )
168 /*****************************************************************************/
169 {
170 	/* write warning to stderr */
171 	fprintf( stderr,
172 		"Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext );
173 }
174 
175 /*****************************************************************************/
176 #ifdef GCC
177 void yyerror ( char *s, ... )
178 #else
179 void yyerror ( char *s )
180 #endif
181 /*****************************************************************************/
182 {
183 	/* write error to stderr */
184 	fprintf( stderr,
185 		"Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext );
186 	SetError();
187 }
188 
189 /*****************************************************************************/
190 int
191 #ifdef WNT
192 _cdecl
193 #endif
194 main( int argc, char* argv[])
195 /*****************************************************************************/
196 {
197 	/* error level */
198 	int nRetValue = 0;
199 	char *pOutput;
200 	FILE *pFile;
201 
202 	pOutput = GetOutputFile( argc, argv );
203 
204 	if ( !pOutput ) {
205 		fprintf( stdout, "Syntax: XRMEX[-p Prj][-r PrjRoot]-i FileIn [-o FileOut][-m DataBase][-e][-b][-u][-NOUTF8][-L l1,l2,...]\n" );
206 		fprintf( stdout, " Prj:      Project\n" );
207 		fprintf( stdout, " PrjRoot:  Path to project root (..\\.. etc.)\n" );
208 		fprintf( stdout, " FileIn:   Source files (*.src)\n" );
209 		fprintf( stdout, " FileOut:  Destination file (*.*)\n" );
210 		fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
211 		fprintf( stdout, " -e: Disable writing errorlog\n" );
212 		fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" );
213 		fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" );
214 		fprintf( stdout, " -NOUTF8: disable UTF8 as language independent encoding\n" );
215 		fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US,es...)\n" );
216 		fprintf( stdout, "     A fallback language can be defined like this: l1=f1.\n" );
217 		fprintf( stdout, "     f1, f2,... are also elements of (de,en-US,es...)\n" );
218 		fprintf( stdout, "     Example: -L en-US,es=de\n" );
219 		fprintf( stdout, "              Restriction to es and en-US, de will be fallback for 99\n" );
220 //		fprintf( stdout, " -ISO99: IsoCode is the full qualified ISO language code for language 99" );
221 		return 1;
222 	}
223 	pFile = GetXrmFile();
224 	InitXrmExport( pOutput , getFilename() );
225 
226 	if ( !pFile )
227 		return 1;
228 
229 	yyin = pFile;
230 
231 	/* create global instance of class XmlExport */
232 	//InitXrmExport( pOutput );
233 
234 	/* start parser */
235 	yylex();
236 
237 	/* get error info. and end export */
238 	nRetValue = GetError();
239 	EndXrmExport();
240 
241 	removeTempFile();
242 	/* return error level */
243 	return nRetValue;
244 }
245 
246