]> cygwin.com Git - cygwin-apps/setup.git/blame - inilex.l
2002-07-13 Robert Collins <rbtcollins@hotmail.com>
[cygwin-apps/setup.git] / inilex.l
CommitLineData
23c9e63c
DD
1%{
2/*
3 * Copyright (c) 2000, Red Hat, Inc.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * A copy of the GNU General Public License can be found at
11 * http://www.gnu.org/
12 *
13 * Written by DJ Delorie <dj@cygnus.com>
aa1e3b4d 14 * Maintained by Robert Collins <rbtcollins@hotmail.com>
23c9e63c
DD
15 *
16 */
17
18/* tokenize the setup.ini files. We parse a string which we've
19 previously downloaded. The program must call ini_init() to specify
20 that string. */
21
b11b49f3 22#include "win32.h"
23c9e63c
DD
23#include <string.h>
24
25#include "ini.h"
26#include "iniparse.h"
3c054baf 27#include "String++.h"
aa1e3b4d 28#include "IniParseFeedback.h"
23c9e63c
DD
29
30#define YY_INPUT(buf,result,max_size) { result = ini_getchar(buf, max_size); }
31
32static int ini_getchar(char *buf, int max_size);
b24c88b3 33static void ignore_line (void);
23c9e63c
DD
34
35%}
36
b11b49f3 37/*%option debug */
23c9e63c 38%option noyywrap
b11b49f3
DD
39%option yylineno
40%option never-interactive
41
aa1e3b4d
RC
42%x descriptionstate
43%x eolstate
44
b1ff53ed 45STR [!a-zA-Z0-9_./:\+-]+
23c9e63c
DD
46
47%%
48
58ee6135
RC
49[0123456789abcdef]{32,32} {
50 yylval = (char *) new unsigned char[16];
51 for (int i=0; i< 16; ++i)
52 ((unsigned char *) yylval) [i] = 0;
53 for (int i=0; i< 32; ++i)
54 {
55 unsigned char val = (unsigned char) yytext[i];
56 if (val > '9')
57 val = val - 'a' + 10;
58 else
59 val = val - '0';
076654e7 60 ((unsigned char *) yylval) [i / 2] += val << ((i % 2) ? 0 : 4);
58ee6135
RC
61 }
62 return MD5;
63}
64
5e0464a1
RC
65\"[^"]*\" { yylval = new char [strlen (yytext+1) + 1];
66 strcpy (yylval, yytext+1);
23c9e63c
DD
67 yylval[strlen (yylval)-1] = 0;
68 return STRING; }
69
70"setup-timestamp:" return SETUP_TIMESTAMP;
13d27274 71"setup-version:" return SETUP_VERSION;
aa1e3b4d
RC
72"Package:" return PACKAGENAME;
73[vV]"ersion:" return PACKAGEVERSION;
74"install:"|"Filename:" return INSTALL;
23c9e63c
DD
75"source:" return SOURCE;
76"sdesc:" return SDESC;
77"ldesc:" return LDESC;
aa1e3b4d
RC
78"Description:" BEGIN (descriptionstate); return DESCTAG;
79"Size:" return FILESIZE;
80"MD5sum:" return MD5LINE;
81"Installed-Size:" return INSTALLEDSIZE;
82"Maintainer:" BEGIN (eolstate); return MAINTAINER;
83"Architecture:" return ARCHITECTURE;
84"Source:" return SOURCEPACKAGE;
233a3e17
RC
85"Binary:" return BINARYPACKAGE;
86"Build-Depends:" return BUILDDEPENDS;
b1ff53ed 87"Build-Depends-Indep:" return BUILDDEPENDS; /* technicallyincorrect :[ */
233a3e17
RC
88"Standards-Version:" return STANDARDSVERSION;
89"Format:" return FORMAT;
90"Directory:" return DIRECTORY;
91"Files:" return FILES;
aa1e3b4d
RC
92
93"category:"|"Section:" return CATEGORY;
94"Priority:" return PRIORITY;
38c97581 95"requires:" return REQUIRES;
aa1e3b4d
RC
96"Depends:" return DEPENDS;
97"Pre-Depends:" return PREDEPENDS;
98"Recommends:" return RECOMMENDS;
99"Suggests:" return SUGGESTS;
100"Conflicts:" return CONFLICTS;
101"Replaces:" return REPLACES;
102"Provides:" return PROVIDES;
38c97581 103
c46a33a9
CF
104"apath:" return APATH;
105"ppath:" return PPATH;
106
107"include-setup:" return INCLUDE_SETUP;
108
c46a33a9
CF
109"download-url:" return DOWNLOAD_URL;
110
b11b49f3
DD
111^{STR}":" ignore_line ();
112
23c9e63c
DD
113"[curr]" return T_CURR;
114"[test]" return T_TEST;
13d27274 115"[exp]" return T_TEST;
23c9e63c
DD
116"[prev]" return T_PREV;
117
aa1e3b4d
RC
118"(" return OPENBRACE;
119")" return CLOSEBRACE;
b1ff53ed
RC
120"[" return OPENSQUARE;
121"]" return CLOSESQUARE;
aa1e3b4d
RC
122"<<" return LT;
123">>" return GT;
124">=" return GTEQUAL;
125"<=" return LTEQUAL;
b1ff53ed
RC
126">" return GT;
127"<" return LT;
aa1e3b4d
RC
128"=" return EQUAL;
129\, return COMMA;
130"|" return OR;
131"@" return AT;
132
133{STR}"@"{STR} { yylval = new char [strlen(yytext) + 1];
134 strcpy (yylval, yytext);
135 return EMAIL; }
5e0464a1
RC
136{STR} { yylval = new char [strlen(yytext) + 1];
137 strcpy (yylval, yytext);
23c9e63c
DD
138 return STRING; }
139
fb2cd8f6 140[ \t\r]+ /* do nothing */;
b11b49f3 141
aa1e3b4d
RC
142^"#".*\n /* do nothing */;
143<descriptionstate>[^\n]+ { yylval = new char [strlen(yytext) + 1];
144 strcpy (yylval, yytext);
145 return STRTOEOL; }
146<descriptionstate>\n { return NL; }
147<descriptionstate>"\n"+ {BEGIN(INITIAL); return PARAGRAPH;}
148<eolstate>[^\n]+ {return STRING; }
149<eolstate>\n {BEGIN(INITIAL); return NL; }
23c9e63c 150
aa1e3b4d
RC
151\n { return NL; }
152. { return *yytext;}
23c9e63c
DD
153
154%%
155
341988b9
RC
156#include "io_stream.h"
157
158static io_stream *input_stream = 0;
076654e7 159extern IniDBBuilder *iniBuilder;
aa1e3b4d 160static IniParseFeedback *iniFeedback;
341988b9 161
23c9e63c 162void
aa1e3b4d 163ini_init(io_stream *stream, IniDBBuilder *aBuilder, IniParseFeedback &aFeedback)
23c9e63c 164{
341988b9 165 input_stream = stream;
076654e7 166 iniBuilder = aBuilder;
aa1e3b4d 167 iniFeedback = &aFeedback;
0d4e0aad
CF
168 YY_FLUSH_BUFFER;
169 yylineno = 1;
23c9e63c
DD
170}
171
172static int
173ini_getchar(char *buf, int max_size)
174{
341988b9 175 if (input_stream)
23c9e63c 176 {
341988b9
RC
177 ssize_t len = input_stream->read (buf, max_size);
178 if (len < 1)
179 {
180 len = 0;
181 input_stream = 0;
23c9e63c 182 }
aa1e3b4d
RC
183 else
184 iniFeedback->progress (input_stream->tell(), input_stream->get_size());
341988b9 185 return len;
23c9e63c 186 }
341988b9 187 return 0;
23c9e63c 188}
b11b49f3
DD
189
190static void
191ignore_line ()
192{
193 char c;
341988b9 194 while ((c = yyinput ()))
b11b49f3
DD
195 {
196 if (c == EOF)
197 return;
198 if (c == '\n')
199 return;
200 }
201}
0d4e0aad
CF
202
203int
204yybol ()
205{
206 return !!YY_AT_BOL ();
207}
This page took 0.052225 seconds and 5 git commands to generate.