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