Bump for 3.6-28
[LibreOffice.git] / l10ntools / source / srclex.l
blob60017259503f9a363990f921a27656c49054459f
2 %{
3 /*
4  * lexer for parsing ressource source files (*.src)
5  *
6  */
8 /* enlarge token buffer to tokenize whole strings */
9 #undef YYLMAX
10 #define YYLMAX 64000
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
20 /* table of possible token ids */
21 #include "tokens.h"
22 #include <stdlib.h>
23 #include <stdio.h>
25 #include "sal/main.h"
27 #if defined __GNUC__
28 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
29 #pragma GCC diagnostic ignored "-Wunused-function"
30 #pragma GCC diagnostic ignored "-Wunused-label"
31 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
32 #endif
33 #elif defined __SINPRO_CC
34 #pragma disable_warn
35 #elif defined _MSC_VER
36 #pragma warning(push, 1)
37 #endif
39 /* external functions (C++ code, declared as extern "C" */
40 extern "C" int WorkOnTokenSet( int, char* );
41 extern "C" FILE * init(int, char **);
42 extern "C" int SetError();
43 extern "C" int GetError();
44 extern "C" void Close();
46 /* forwards */
47 void YYWarning();
50 %option yylineno
51 %option never-interactive
53 %p 24000
54 %e 1200
55 %n 500
59 ^[\t ]*"#pragma".*      {
60         WorkOnTokenSet( PRAGMA, yytext );
63 ^[ \t]*\n {
64         WorkOnTokenSet( EMPTYLINE, yytext );
67 [\t ]+                          |
68 ^[\t ]*"#include".*     |
69 ^[\t ]*"#undef".*       |
70 "//".*                          |
71 ";"                             |
72 "<"                                     |
73 ">"                                     |
74 \n      {
75         WorkOnTokenSet( IGNOREDTOKENS, yytext );
77 "/*"    {
78         char c1 = 0,c2 = yyinput();
79         char pChar[2];
80         pChar[1] = 0x00;
81         pChar[0] = c2;
83         WorkOnTokenSet( COMMEND, yytext );
84         WorkOnTokenSet( COMMEND, pChar );
85         for(;;) {
86                 if ( c2 == EOF )
87                         break;
88                 if ( c1 == '*' && c2 == '/' )
89                         break;
90                 c1 = c2;
91                 c2 = yyinput();
92                 pChar[0] = c2;
93                 WorkOnTokenSet( COMMEND, pChar );
94         }
97 ^[\t ]*"#ifndef".+$     |
98 ^[\t ]*"#ifdef".+$      |
99 ^[\t ]*"#if".+$         |
100 ^[\t ]*"#elif".*$       |
101 ^[\t ]*"#else".*$       |
102 ^[\t ]*"#endif".*$      {
103         WorkOnTokenSet( CONDITION, yytext );
106 [a-zA-Z]+[\t ]+[^={\n]+[\t ] {
107 /* defined Res */
108         WorkOnTokenSet( DEFINEDRES, yytext );
111 [a-zA-Z]+[ \t]+[^={;\n]+\n[ \t]*"#".*\n[ \t]*"{"        |
112 [a-zA-Z]+[ \t]+[^={;\n]+\n?([ \t]*"//".*\n)*[ \t]*"{"   {
113 /* RESSOURCE // String TTT_XX ... */
114         WorkOnTokenSet( RESSOURCE, yytext );
117 ^[\t ]*[a-zA-Z_]+[\t ]*"\\"?[\t ]*\n?[ \t]*"{"[\t ]*"\\"?       {
118 /* SMALRESSOURCE // String ... */
119         WorkOnTokenSet( SMALRESSOURCE, yytext );
122 [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?=[ \t]*L?\".*\".*\n? {
123 /* TEXTLINE // TextTyp = "A Text" */
124         WorkOnTokenSet( TEXTLINE, yytext );
127 [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?(\n[ \t]*)?=([ \t]*\n)?(([a-zA-Z0-9_]+)|(\".*\")|([ \t\n]*))*\".*\"(([a-zA-Z0-9_]+)|(\".*\")|([ \t\n]*))*;   {
128 /* LONGTEXTLINE // TextTyp = "A Text" HHH_XXX "A Text" ZZZ_TTT ... */
129         WorkOnTokenSet( LONGTEXTLINE, yytext );
132 \".*\" {
133 /* TEXT // "A Text" */
134         WorkOnTokenSet( TEXT, yytext );
137 "{"[ \t]*\\?    {
138 /* LEVELUP */
139         WorkOnTokenSet( LEVELUP, yytext );
142 "}"[ \t]*;([ \t]*\\)?   {
143 /* LEVELDOWN */
144         WorkOnTokenSet( LEVELDOWN, yytext );
147 [a-zA-Z0-9_]+[ \t]*"="[ \t]*"MAP_APPFONT"[ \t]*"(".+")".*       {
148 /* APPFONTMAPPING  Typ = MAP_APPFONT( ... ) */
149         WorkOnTokenSet( APPFONTMAPPING, yytext );
152 [ \t]*[a-zA-Z0-9_]+[ \t]*=[ \t]*[0123456789]{1,5}[ \t]*";"?\\? {
153 /* TEXTREFID // TextTyp = 12345 */
154         WorkOnTokenSet( TEXTREFID, yytext );
157 [a-zA-Z0-9_]+[ \t]*"="[\t ]*([ \t]*"//".*\n)*.* | 
158 [a-zA-Z0-9_]+[ \t]*"=".*        { 
159 /* ASSIGNMENT  Typ = ...  */
160  WorkOnTokenSet( ASSIGNMENT, yytext );
165 [a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]*"<"      {
166 /* LISTASSIGNMENT  Typ [ ... ] = ... */
167         WorkOnTokenSet( LISTASSIGNMENT, yytext );
170 "StringList"+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]* {
171 /* LISTASSIGNMENT  Typ [ ... ] = ... */
172         WorkOnTokenSet( LISTASSIGNMENT, yytext );
175 "UIEntries"[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"     {
176 /* UIENTRIES */
177         WorkOnTokenSet( UIENTRIES, yytext );
180 "<"?[ \t]*L?\".*\".*">" {
181 /* LISTTEXT */
182         WorkOnTokenSet( LISTTEXT, yytext );
185 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.*"\\"        {
186 /* RSCDEFINE  #define ... */
187         WorkOnTokenSet( RSCDEFINE, yytext );
190 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.+ {
191 /* #define ... */
192         WorkOnTokenSet( NORMDEFINE, yytext );
195 "\\" {
196 /* RSCDEFINELEND */
197         WorkOnTokenSet( RSCDEFINELEND, yytext );
200 [a-zA-Z0-9_]+[ \t]*; {
201 /* allowed other tokens like "49 ;" or "SFX_... ;" */
202         WorkOnTokenSet( ANYTOKEN, yytext );
205 .       {
206         WorkOnTokenSet( UNKNOWNCHAR, yytext );
207 /*      YYWarning( "Unknown Char" ); */
210 "{"?[ \t]*\".*\"[ \t]*";"[ \t]*"}" {
211 /* _LISTTEXT */
212         WorkOnTokenSet( _LISTTEXT, yytext );
217 /*****************************************************************************/
218 int     yywrap(void)
219 /*****************************************************************************/
221         return 1;
224 /*****************************************************************************/
225 void YYWarning( const char *s )
226 /*****************************************************************************/
228         /* write warning to stderr */
229         fprintf( stderr, "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
232 /*****************************************************************************/
233 void yyerror( const char *s )
234 /*****************************************************************************/
236         /* write error to stderr */
237         fprintf( stderr, "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
238         SetError();
241 SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
242     int e;
243     yyin = init(argc, argv);
244     yylex();
245     e = GetError();
246     Close();
247     return EXIT_SUCCESS;