xref: /AOO41X/main/l10ntools/source/xrmlex.l (revision ccf472fac61345b90df128c9d70828ae943e6a52)
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