update credits
[LibreOffice.git] / l10ntools / source / srclex.l
blob91742a11c2fffd7766a5360398a76f7fefc4c42a
2 %{
3 /*
4  * This file is part of the LibreOffice project.
5  *
6  * This Source Code Form is subject to the terms of the Mozilla Public
7  * License, v. 2.0. If a copy of the MPL was not distributed with this
8  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9  *
10  * This file incorporates work covered by the following license notice:
11  *
12  *   Licensed to the Apache Software Foundation (ASF) under one or more
13  *   contributor license agreements. See the NOTICE file distributed
14  *   with this work for additional information regarding copyright
15  *   ownership. The ASF licenses this file to you under the Apache
16  *   License, Version 2.0 (the "License"); you may not use this file
17  *   except in compliance with the License. You may obtain a copy of
18  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
19  */
22  * lexer for parsing resource source files (*.src)
23  */
25 #include "sal/config.h"
27 /* enlarge token buffer to tokenize whole strings */
28 #undef YYLMAX
29 #define YYLMAX 64000
31 /* to enable debug output define LEXDEBUG */
32 #define LEXDEBUG                1
33 #ifdef LEXDEBUG
34 #define OUTPUT  fprintf
35 #else
36 #define OUTPUT(Par1,Par2);
37 #endif
39 /* table of possible token ids */
40 #include "tokens.h"
41 #include <stdlib.h>
42 #include <stdio.h>
44 #include "sal/main.h"
46 #if HAVE_GCC_PRAGMA_DIAGNOSTIC_MODIFY
47 #pragma GCC diagnostic ignored "-Wunused-function"
48 #pragma GCC diagnostic ignored "-Wunused-label"
49 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
50 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
51 #endif
52 #elif defined __SUNPRO_CC
53 #pragma disable_warn
54 #elif defined _MSC_VER
55 #pragma warning(push, 1)
56 #endif
57 #define YY_NO_UNISTD_H
59 /* external functions (C++ code, declared as extern "C" */
60 extern "C" int WorkOnTokenSet( int, char* );
61 extern "C" FILE * init(int, char **);
62 extern "C" int SetError();
63 extern "C" int GetError();
64 extern "C" void Close();
66 /* forwards */
67 void YYWarning();
70 %option yylineno
71 %option never-interactive
73 %p 24000
74 %e 1200
75 %n 500
79 ^[\t ]*"#pragma".*      {
80         WorkOnTokenSet( PRAGMA, yytext );
83 ^[ \t]*\n {
84         WorkOnTokenSet( EMPTYLINE, yytext );
87 [\t ]+                          |
88 ^[\t ]*"#include".*     |
89 ^[\t ]*"#undef".*       |
90 "//".*                          |
91 ";"                             |
92 "<"                                     |
93 ">"                                     |
94 \n      {
95         WorkOnTokenSet( IGNOREDTOKENS, yytext );
97 "/*"    {
98         char c1 = 0;
99         int c2 = yyinput();
100         char pChar[2];
101         pChar[1] = 0x00;
102         pChar[0] = c2;
104         WorkOnTokenSet( COMMENT, yytext );
105         WorkOnTokenSet( COMMENT, pChar );
106         for(;;) {
107                 if ( c2 == EOF )
108                         break;
109                 if ( c1 == '*' && c2 == '/' )
110                         break;
111                 c1 = c2;
112                 c2 = yyinput();
113                 pChar[0] = c2;
114                 WorkOnTokenSet( COMMENT, pChar );
115         }
118 ^[\t ]*"#ifndef".+$     |
119 ^[\t ]*"#ifdef".+$      |
120 ^[\t ]*"#if".+$         |
121 ^[\t ]*"#elif".*$       |
122 ^[\t ]*"#else".*$       |
123 ^[\t ]*"#endif".*$      {
124         WorkOnTokenSet( CONDITION, yytext );
127 [a-zA-Z]+[\t ]+[^={\n]+[\t ] {
128 /* defined Res */
129         WorkOnTokenSet( DEFINEDRES, yytext );
132 [a-zA-Z]+[ \t]+[^={;\n]+\n[ \t]*"#".*\n[ \t]*"{"        |
133 [a-zA-Z]+[ \t]+[^={;\n]+\n?([ \t]*"//".*\n)*[ \t]*"{"   {
134 /* RESOURCE // String TTT_XX ... */
135         WorkOnTokenSet( RESOURCE, yytext );
138 ^[\t ]*[a-zA-Z_]+[\t ]*"\\"?[\t ]*\n?[ \t]*"{"[\t ]*"\\"?       {
139 /* SMALRESOURCE // String ... */
140         WorkOnTokenSet( SMALRESOURCE, yytext );
143 [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?=[ \t]*L?\".*\".*\n? {
144 /* TEXTLINE // TextTyp = "A Text" */
145         WorkOnTokenSet( TEXTLINE, yytext );
148 [\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]*))*;   {
149 /* LONGTEXTLINE // TextTyp = "A Text" HHH_XXX "A Text" ZZZ_TTT ... */
150         WorkOnTokenSet( LONGTEXTLINE, yytext );
153 \".*\" {
154 /* TEXT // "A Text" */
155         WorkOnTokenSet( TEXT, yytext );
158 "{"[ \t]*\\?    {
159 /* LEVELUP */
160         WorkOnTokenSet( LEVELUP, yytext );
163 "}"[ \t]*;([ \t]*\\)?   {
164 /* LEVELDOWN */
165         WorkOnTokenSet( LEVELDOWN, yytext );
168 [a-zA-Z0-9_]+[ \t]*"="[ \t]*"MAP_APPFONT"[ \t]*"(".+")".*       {
169 /* APPFONTMAPPING  Typ = MAP_APPFONT( ... ) */
170         WorkOnTokenSet( APPFONTMAPPING, yytext );
173 [ \t]*[a-zA-Z0-9_]+[ \t]*=[ \t]*[0123456789]{1,5}[ \t]*";"?\\? {
174 /* TEXTREFID // TextTyp = 12345 */
175         WorkOnTokenSet( TEXTREFID, yytext );
178 [a-zA-Z0-9_]+[ \t]*"="[\t ]*([ \t]*"//".*\n)*.* |
179 [a-zA-Z0-9_]+[ \t]*"=".*        {
180 /* ASSIGNMENT  Typ = ...  */
181  WorkOnTokenSet( ASSIGNMENT, yytext );
186 [a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]*"<"      {
187 /* LISTASSIGNMENT  Typ [ ... ] = ... */
188         WorkOnTokenSet( LISTASSIGNMENT, yytext );
191 "StringList"+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]* {
192 /* LISTASSIGNMENT  Typ [ ... ] = ... */
193         WorkOnTokenSet( LISTASSIGNMENT, yytext );
196 "UIEntries"[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"     {
197 /* UIENTRIES */
198         WorkOnTokenSet( UIENTRIES, yytext );
201 "<"?[ \t]*L?\".*\".*">" {
202 /* LISTTEXT */
203         WorkOnTokenSet( LISTTEXT, yytext );
206 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.*"\\"        {
207 /* RSCDEFINE  #define ... */
208         WorkOnTokenSet( RSCDEFINE, yytext );
211 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.+ {
212 /* #define ... */
213         WorkOnTokenSet( NORMDEFINE, yytext );
216 "\\" {
217 /* RSCDEFINELEND */
218         WorkOnTokenSet( RSCDEFINELEND, yytext );
221 [a-zA-Z0-9_]+[ \t]*; {
222 /* allowed other tokens like "49 ;" or "SFX_... ;" */
223         WorkOnTokenSet( ANYTOKEN, yytext );
226 .       {
227         WorkOnTokenSet( UNKNOWNCHAR, yytext );
228 /*      YYWarning( "Unknown Char" ); */
231 "{"?[ \t]*\".*\"[ \t]*";"[ \t]*"}" {
232 /* _LISTTEXT */
233         WorkOnTokenSet( _LISTTEXT, yytext );
238 /*****************************************************************************/
239 int     yywrap(void)
240 /*****************************************************************************/
242         return 1;
245 /*****************************************************************************/
246 void YYWarning( const char *s )
247 /*****************************************************************************/
249         /* write warning to stderr */
250         fprintf( stderr, "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
253 /*****************************************************************************/
254 void yyerror( const char *s )
255 /*****************************************************************************/
257         /* write error to stderr */
258         fprintf( stderr, "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
259         SetError();
262 SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
263     int e;
264     yyin = init(argc, argv);
265     yylex();
266     e = GetError();
267     Close();
268     return EXIT_SUCCESS;