Branch libreoffice-5-0-4
[LibreOffice.git] / l10ntools / source / srclex.l
blob979df751292439b428ad7761f9b49d0c63626582
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 #include "srclex.hxx"
48 #ifdef __GNUC__
49 #pragma GCC diagnostic ignored "-Wunused-function"
50 #pragma GCC diagnostic ignored "-Wunused-label"
51 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
52 #elif defined _MSC_VER
53 #pragma warning(push, 1)
54 #endif
55 #define YY_NO_UNISTD_H
57 /* forwards */
58 void YYWarning();
61 %option yylineno
62 %option never-interactive
64 %p 24000
65 %e 1200
66 %n 500
70 ^[\t ]*"#pragma".*      {
71         WorkOnTokenSet( PRAGMA, yytext );
74 ^[ \t]*\n {
75         WorkOnTokenSet( EMPTYLINE, yytext );
78 [\t ]+                          |
79 ^[\t ]*"#include".*     |
80 ^[\t ]*"#undef".*       |
81 "//".*                          |
82 ";"                             |
83 "<"                                     |
84 ">"                                     |
85 \n      {
86         WorkOnTokenSet( IGNOREDTOKENS, yytext );
88 "/*"    {
89         char c1 = 0;
90         int c2 = yyinput();
91         char pChar[2];
92         pChar[1] = 0x00;
93         pChar[0] = c2;
95         WorkOnTokenSet( COMMENT, yytext );
96         WorkOnTokenSet( COMMENT, pChar );
97         for(;;) {
98                 if ( c2 == EOF )
99                         break;
100                 if ( c1 == '*' && c2 == '/' )
101                         break;
102                 c1 = c2;
103                 c2 = yyinput();
104                 pChar[0] = c2;
105                 WorkOnTokenSet( COMMENT, pChar );
106         }
109 ^[\t ]*"#ifndef".+$     |
110 ^[\t ]*"#ifdef".+$      |
111 ^[\t ]*"#if".+$         |
112 ^[\t ]*"#elif".*$       |
113 ^[\t ]*"#else".*$       |
114 ^[\t ]*"#endif".*$      {
115         WorkOnTokenSet( CONDITION, yytext );
118 [a-zA-Z]+[\t ]+[^={\n]+[\t ] {
119 /* defined Res */
120         WorkOnTokenSet( DEFINEDRES, yytext );
123 [a-zA-Z]+[ \t]+[^={;\n]+\n[ \t]*"#".*\n[ \t]*"{"        |
124 [a-zA-Z]+[ \t]+[^={;\n]+\n?([ \t]*"//".*\n)*[ \t]*"{"   {
125 /* RESOURCE // String TTT_XX ... */
126         WorkOnTokenSet( RESOURCE, yytext );
129 ^[\t ]*[a-zA-Z_]+[\t ]*"\\"?[\t ]*\n?[ \t]*"{"[\t ]*"\\"?       {
130 /* SMALRESOURCE // String ... */
131         WorkOnTokenSet( SMALRESOURCE, yytext );
134 [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?=[ \t]*L?\".*\".*\n? {
135 /* TEXTLINE // TextTyp = "A Text" */
136         WorkOnTokenSet( TEXTLINE, yytext );
139 [\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]*))*;   {
140 /* LONGTEXTLINE // TextTyp = "A Text" HHH_XXX "A Text" ZZZ_TTT ... */
141         WorkOnTokenSet( LONGTEXTLINE, yytext );
144 \".*\" {
145 /* TEXT // "A Text" */
146         WorkOnTokenSet( TEXT, yytext );
149 "{"[ \t]*\\?    {
150 /* LEVELUP */
151         WorkOnTokenSet( LEVELUP, yytext );
154 "}"[ \t]*;([ \t]*\\)?   {
155 /* LEVELDOWN */
156         WorkOnTokenSet( LEVELDOWN, yytext );
159 [a-zA-Z0-9_]+[ \t]*"="[ \t]*"MAP_APPFONT"[ \t]*"(".+")".*       {
160 /* APPFONTMAPPING  Typ = MAP_APPFONT( ... ) */
161         WorkOnTokenSet( APPFONTMAPPING, yytext );
164 [a-zA-Z0-9_]+[ \t]*"="[\t ]*([ \t]*"//".*\n)*.* |
165 [a-zA-Z0-9_]+[ \t]*"=".*        {
166 /* ASSIGNMENT  Typ = ...  */
167  WorkOnTokenSet( ASSIGNMENT, yytext );
172 [a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]*"<"      {
173 /* LISTASSIGNMENT  Typ [ ... ] = ... */
174         WorkOnTokenSet( LISTASSIGNMENT, yytext );
177 "StringList"+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]* {
178 /* LISTASSIGNMENT  Typ [ ... ] = ... */
179         WorkOnTokenSet( LISTASSIGNMENT, yytext );
182 "<"?[ \t]*L?\".*\".*">" {
183 /* LISTTEXT */
184         WorkOnTokenSet( LISTTEXT, yytext );
187 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.*"\\"        {
188 /* RSCDEFINE  #define ... */
189         WorkOnTokenSet( RSCDEFINE, yytext );
192 [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.+ {
193 /* #define ... */
194         WorkOnTokenSet( NORMDEFINE, yytext );
197 "\\" {
198 /* RSCDEFINELEND */
199         WorkOnTokenSet( RSCDEFINELEND, yytext );
202 [a-zA-Z0-9_]+[ \t]*; {
203 /* allowed other tokens like "49 ;" or "SFX_... ;" */
204         WorkOnTokenSet( ANYTOKEN, yytext );
207 .       {
208         WorkOnTokenSet( UNKNOWNCHAR, yytext );
209 /*      YYWarning( "Unknown Char" ); */
212 "{"?[ \t]*\".*\"[ \t]*";"[ \t]*"}" {
213 /* _LISTTEXT */
214         WorkOnTokenSet( _LISTTEXT, yytext );
219 /*****************************************************************************/
220 int     yywrap(void)
221 /*****************************************************************************/
223         return 1;
226 /*****************************************************************************/
227 void YYWarning( const char *s )
228 /*****************************************************************************/
230         /* write warning to stderr */
231         fprintf( stderr, "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
234 /*****************************************************************************/
235 void yyerror( const char *s )
236 /*****************************************************************************/
238         /* write error to stderr */
239         fprintf( stderr, "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext  );
240         SetError();
243 SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
244     int e;
245     yyin = init(argc, argv);
246     yylex();
247     e = GetError();
248     Close();
249     return EXIT_SUCCESS;