Branch data Line data Source code
1 : : %{
2 : : /*
3 : : * lexer for parsing xml-property source files (*.xml)
4 : : *
5 : : */
6 : :
7 : : /* enlarge token buffer to tokenize whole strings */
8 : : #undef YYLMAX
9 : : #define YYLMAX 64000
10 : :
11 : : /* to enable debug output define LEXDEBUG */
12 : : #define LEXDEBUG 1
13 : : #ifdef LEXDEBUG
14 : : #define OUTPUT fprintf
15 : : #else
16 : : #define OUTPUT(Par1,Par2);
17 : : #endif
18 : :
19 : : /* table of possible token ids */
20 : : #include "tokens.h"
21 : : #include <stdlib.h>
22 : : #include <stdio.h>
23 : :
24 : : #include "sal/main.h"
25 : :
26 : : #if defined __GNUC__
27 : : #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
28 : : #pragma GCC diagnostic ignored "-Wunused-function"
29 : : #pragma GCC diagnostic ignored "-Wunused-label"
30 : : #endif
31 : : #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
32 : : #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
33 : : #endif
34 : : #elif defined __SINPRO_CC
35 : : #pragma disable_warn
36 : : #elif defined _MSC_VER
37 : : #pragma warning(push, 1)
38 : : #endif
39 : :
40 : : /* external functions (C++ code, declared as extern "C" */
41 : : extern "C" int WorkOnTokenSet( int, char* );
42 : : extern "C" int Argument( char * );
43 : : extern "C" int InitXrmExport( char * , char * );
44 : : extern "C" int EndXrmExport();
45 : : extern "C" int GetError();
46 : : extern "C" int SetError();
47 : : extern "C" char *GetOutputFile( int argc, char* argv[]);
48 : : extern "C" FILE *GetXrmFile();
49 : : extern "C" int isQuiet();
50 : : extern "C" char* getFilename();
51 : :
52 : : /* forwards */
53 : : void YYWarning();
54 : :
55 : : int bText=0;
56 : : %}
57 : :
58 : : %option yylineno
59 : : %option never-interactive
60 : :
61 : : %p 24000
62 : : %e 1200
63 : : %n 500
64 : :
65 : : %%
66 : :
67 : : "<p "[^\>]*xml:lang[^\>]*\> {
68 : 0 : WorkOnTokenSet( XRM_TEXT_START , yytext );
69 : : }
70 : 0 :
71 : : "</p>" {
72 : 0 : WorkOnTokenSet( XRM_TEXT_END, yytext );
73 : : }
74 : 0 :
75 : : "<h1 "[^\>]*xml:lang[^\>]*\> {
76 : 0 : WorkOnTokenSet( XRM_TEXT_START , yytext );
77 : : }
78 : 0 :
79 : : "</h1>" {
80 : 0 : WorkOnTokenSet( XRM_TEXT_END, yytext );
81 : : }
82 : 0 : "<h2 "[^\>]*xml:lang[^\>]*\> {
83 : 0 : WorkOnTokenSet( XRM_TEXT_START , yytext );
84 : : }
85 : 0 :
86 : : "</h2>" {
87 : 0 : WorkOnTokenSet( XRM_TEXT_END, yytext );
88 : : }
89 : 0 : "<h3 "[^\>]*xml:lang[^\>]*\> {
90 : 0 : WorkOnTokenSet( XRM_TEXT_START , yytext );
91 : : }
92 : 0 :
93 : : "</h3>" {
94 : 0 : WorkOnTokenSet( XRM_TEXT_END, yytext );
95 : : }
96 : 0 : "<h4 "[^\>]*xml:lang[^\>]*\> {
97 : 0 : WorkOnTokenSet( XRM_TEXT_START , yytext );
98 : : }
99 : 0 :
100 : : "</h4>" {
101 : 0 : WorkOnTokenSet( XRM_TEXT_END, yytext );
102 : : }
103 : 0 : "<h5 "[^\>]*xml:lang[^\>]*\> {
104 : 0 : WorkOnTokenSet( XRM_TEXT_START , yytext );
105 : : }
106 : 0 :
107 : : "</h5>" {
108 : 0 : WorkOnTokenSet( XRM_TEXT_END, yytext );
109 : : }
110 : 0 :
111 : : "<display-name>" {
112 : 0 : WorkOnTokenSet( DESC_DISPLAY_NAME_START , yytext );
113 : : }
114 : 0 :
115 : : "</display-name>" {
116 : 0 : WorkOnTokenSet( DESC_DISPLAY_NAME_END, yytext );
117 : : }
118 : 0 :
119 : : "<name "[^\>]*lang[^\>]*\> {
120 : 0 : WorkOnTokenSet( DESC_TEXT_START , yytext );
121 : : }
122 : 0 :
123 : : "</name>" {
124 : 0 : WorkOnTokenSet( DESC_TEXT_END, yytext );
125 : : }
126 : 0 :
127 : : "<extension-description>" {
128 : 0 : WorkOnTokenSet( DESC_EXTENSION_DESCRIPTION_START , yytext );
129 : : }
130 : 0 :
131 : : "</extension-description>" {
132 : 0 : WorkOnTokenSet( DESC_EXTENSION_DESCRIPTION_END , yytext );
133 : : }
134 : 0 :
135 : : "<src "[^\>]*lang[^\>]*\> {
136 : 0 : WorkOnTokenSet( DESC_EXTENSION_DESCRIPTION_SRC , yytext );
137 : : }
138 : 0 :
139 : :
140 : :
141 : : "<!--" {
142 : 0 : char c1 = 0, c2 = 0, c3 = yyinput();
143 : : char pChar[2];
144 : 0 : pChar[1] = 0x00;
145 : 0 : pChar[0] = c3;
146 : :
147 : 0 : WorkOnTokenSet( COMMEND, yytext );
148 : 0 : WorkOnTokenSet( COMMEND, pChar );
149 : :
150 : 0 : for(;;) {
151 : 0 : if ( c3 == EOF )
152 : 0 : break;
153 : 0 : if ( c1 == '-' && c2 == '-' && c3 == '>' )
154 : 0 : break;
155 : 0 : c1 = c2;
156 : 0 : c2 = c3;
157 : 0 : c3 = yyinput();
158 : 0 : pChar[0] = c3;
159 : 0 : WorkOnTokenSet( COMMEND, pChar );
160 : : }
161 : : }
162 : 0 :
163 : : .|\n {
164 : 0 : if ( bText == 1 )
165 : 0 : WorkOnTokenSet( XML_TEXTCHAR, yytext );
166 : : else
167 : 0 : WorkOnTokenSet( UNKNOWNCHAR, yytext );
168 : : }
169 : 0 :
170 : :
171 : 0 : %%
172 : 0 :
173 : : /*****************************************************************************/
174 : : int yywrap(void)
175 : 0 : /*****************************************************************************/
176 : : {
177 : : return 1;
178 : 0 : }
179 : :
180 : : /*****************************************************************************/
181 : : void YYWarning( const char *s )
182 : 0 : /*****************************************************************************/
183 : : {
184 : : /* write warning to stderr */
185 : : fprintf( stderr,
186 : : "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext );
187 : 0 : }
188 : 0 :
189 : : /*****************************************************************************/
190 : : void yyerror ( const char *s )
191 : 0 : /*****************************************************************************/
192 : : {
193 : : /* write error to stderr */
194 : : fprintf( stderr,
195 : : "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext );
196 : 0 : SetError();
197 : 0 : }
198 : 0 :
199 : : SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
200 : 0 : /* error level */
201 : : int nRetValue = 0;
202 : 0 : char *pOutput;
203 : : FILE *pFile;
204 : :
205 : : pOutput = GetOutputFile( argc, argv );
206 : 0 :
207 : : if ( !pOutput ) {
208 : 0 : fprintf( stdout, "Syntax: XRMEX[-p Prj][-r PrjRoot]-i FileIn [-o FileOut][-m DataBase][-e][-b][-u][-NOUTF8][-L l1,l2,...]\n" );
209 : 0 : fprintf( stdout, " Prj: Project\n" );
210 : 0 : fprintf( stdout, " PrjRoot: Path to project root (..\\.. etc.)\n" );
211 : 0 : fprintf( stdout, " FileIn: Source files (*.src)\n" );
212 : 0 : fprintf( stdout, " FileOut: Destination file (*.*)\n" );
213 : 0 : fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" );
214 : 0 : fprintf( stdout, " -e: Disable writing errorlog\n" );
215 : 0 : fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" );
216 : 0 : fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" );
217 : 0 : fprintf( stdout, " -NOUTF8: disable UTF8 as language independent encoding\n" );
218 : 0 : fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US,es...)\n" );
219 : 0 : return 1;
220 : 0 : }
221 : : pFile = GetXrmFile();
222 : 0 : InitXrmExport( pOutput , getFilename() );
223 : 0 :
224 : : if ( !pFile )
225 : 0 : return 1;
226 : 0 :
227 : : yyin = pFile;
228 : 0 :
229 : : /* create global instance of class XmlExport */
230 : : //InitXrmExport( pOutput );
231 : :
232 : : /* start parser */
233 : : yylex();
234 : 0 :
235 : : /* get error info. and end export */
236 : : nRetValue = GetError();
237 : 0 : EndXrmExport();
238 : 0 :
239 : : /* return error level */
240 : : return nRetValue;
241 : 0 : }
|