/[anubis]/anubis/src/rcfile.l
ViewVC logotype

Diff of /anubis/src/rcfile.l

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by gray, Wed Feb 5 21:44:09 2003 UTC revision 1.2 by gray, Thu Feb 6 15:52:05 2003 UTC
# Line 44  static void string_add(char *s, int len) Line 44  static void string_add(char *s, int len)
44  static void string_add_char(int n);  static void string_add_char(int n);
45  static void string_finish();  static void string_finish();
46  static int escape(int c);  static int escape(int c);
47    char * trimws(char *s);
48    
49  static struct string_list *str_head, *str_tail;  static struct string_list *str_head, *str_tail;
50  int cfg_line_num;  int cfg_line_num;
# Line 57  extern int yydebug; Line 58  extern int yydebug;
58    
59  %}  %}
60    
61  %x STR LIT RX  %x STR LIT RX RXM
62    
63  WS [ \t][ \t]*  WS [ \t][ \t]*
64  IDENT [a-zA-Z_][a-zA-Z_0-9-]+  IDENT [a-zA-Z_][a-zA-Z_0-9-]+
# Line 91  END | Line 92  END |
92  [hH][eE][aA][dD][eE][rR]     return T_HEADER;  [hH][eE][aA][dD][eE][rR]     return T_HEADER;
93  [cC][oO][mM][mM][aA][nN][dD] return T_COMMAND;  [cC][oO][mM][mM][aA][nN][dD] return T_COMMAND;
94           /* Backward compatible (unquoted) regular expressions */           /* Backward compatible (unquoted) regular expressions */
95  !?=[^ \t][^!\n]*/\n {DBG("RX0", yytext);  =[^ \t][^!\n]*/\n  { yylval.string = trimws(strdup(yytext + 1));
96                       yylval.string = strdup(yytext);                       DBG("RX0", yylval.string);
97                         return REGEX; }
98    =[^ \t][^!\n]*!=   { BEGIN(RXM);
99                         yylval.string = malloc(yyleng-2);
100                         memcpy(yylval.string, yytext + 1, yyleng-3);
101                         yylval.string[yyleng-3] = 0;
102                         trimws(yylval.string);
103                         DBG("RX1", yylval.string);
104                         return REGEX; }
105    =[^ \t][^!\n]*!    { BEGIN(RX);
106                         string_begin();
107                         string_add(yytext+1, yyleng-1); }
108    <RX>[^!\n]*!=      { BEGIN(RXM);
109                         string_add(yytext, yyleng - 2);
110                         string_finish();
111                         trimws(yylval.string);
112                         DBG("RX2", yylval.string);
113                       return REGEX; }                       return REGEX; }
114  !?=[^ \t][^!\n]*/!= {DBG("RX1", yytext);  <RX>[^!\n]*/\n     { BEGIN(INITIAL);
115                         string_add(yytext, yyleng);
116                         string_finish();
117                         trimws(yylval.string);
118                         DBG("RX2", yylval.string);
119                         return REGEX; }
120    <RX>[^!\n]*!       { string_add(yytext, yyleng); }
121    <RXM>[^!\n]*/\n    { BEGIN(INITIAL);
122                       yylval.string = strdup(yytext);                       yylval.string = strdup(yytext);
123                         trimws(yylval.string);
124                         DBG("RX3", yylval.string);
125                       return REGEX; }                       return REGEX; }
126  !?=[^ \t][^!\n]*! { BEGIN(RX);  <RXM>[^!\n]*!      { BEGIN(RX);
127                      string_begin();                       string_begin();
128                      string_add(yytext, yyleng); }                       string_add(yytext, yyleng); }
 <RX>[^!\n]*/!=    { BEGIN(INITIAL);  
                     string_add(yytext, yyleng);  
                     string_finish();  
                     DBG("RX2", yylval.string);  
                     return REGEX; }  
 <RX>[^!\n]*/\n    { BEGIN(INITIAL);  
                     string_add(yytext, yyleng);  
                     string_finish();  
                     DBG("RX2", yylval.string);  
                     return REGEX; }  
 <RX>[^!\n]*!      { string_add(yytext, yyleng); }  
129  =                 return EQ;  =                 return EQ;
130  !=                return NE;  !=                return NE;
131  [iI][fF]          return IF;  [iI][fF]          return IF;
# Line 252  escape(int c) Line 267  escape(int c)
267          return c;          return c;
268  }  }
269    
270    char *
271    trimws(char *s)
272    {
273            int len;
274    
275            for (len = strlen(s) - 1; len > 0 && isspace(s[len]); len--)
276                    ;
277            if (len > 0)
278                    s[len+1] = 0;
279            return s;
280    }
281    
282  int  int
283  rc_open(char *name)  rc_open(char *name)
284  {  {

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26