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