X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/0a032eea07f6d77ac6ea4d5a39c9491c34358058..c576ad2674c37a1c63f004c71049998f38854c64:/sbr/dtimep.l diff --git a/sbr/dtimep.l b/sbr/dtimep.l index 445b74ff..bd36c64a 100644 --- a/sbr/dtimep.l +++ b/sbr/dtimep.l @@ -1,4 +1,6 @@ -/* dtimep.lex exceeds the default table capacities for some old versions +/* dtimep.l -- parse dates and times. + * + * This exceeds the default table capacities for some old versions * of lex (and the minimum defaults as specified by POSIX). The following * choices meet or exceed the lex defaults for older SunOS4.x, Solaris, * HPUX, and AIX. @@ -9,6 +11,8 @@ %a5000 %{ #include +#include +#include #include /* Since we're looking at a string at a time, don't worry about @@ -33,7 +37,7 @@ */ #define YY_DECL struct tws *dparsetime(char *lexstr) - /* yyerminate() is called after the input string is matched to + /* yyterminate() is called after the input string is matched to * completion (actually, when the lexer reaches an EOF). The only * thing that really needs to be in this macro function is the * return call, which must be substituted inline into dparsetime. @@ -41,21 +45,13 @@ #define yyterminate() (void)yy_delete_buffer(lexhandle); \ if(!(tw.tw_flags & TW_SUCC)) { \ - return (struct tws *)NULL; \ + return NULL; \ } \ if(tw.tw_year < 1970) \ tw.tw_year += 1900; \ if(tw.tw_year < 1970) \ tw.tw_year += 100; \ - return(&tw) - -/* - * Patchable flag that says how to interpret NN/NN/NN dates. When - * true, we do it European style: DD/MM/YY. When false, we do it - * American style: MM/DD/YY. Of course, these are all non-RFC822 - * compliant. - */ -int europeandate = 0; + return &tw /* * Table to convert month names to numeric month. We use the @@ -165,7 +161,6 @@ static int day_map[] = { #define SKIPTOSP() { while ( !isspace((unsigned char) *cp++) ) ; \ --cp; } -#ifdef ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST # ifdef HAVE_SYS_TIME_H # include # endif @@ -185,35 +180,34 @@ zonehack (struct tws *tw) tw->tw_zone -= 60; } } -#endif /* ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST */ %} -sun ([Ss]un(day)?) -mon ([Mm]on(day)?) -tue ([Tt]ue(sday)?) -wed ([Ww]ed(nesday)?) -thu ([Tt]hu(rsday)?) -fri ([Ff]ri(day)?) -sat ([Ss]at(urday)?) - -DAY ({sun}|{mon}|{tue}|{wed}|{thu}|{fri}|{sat}) - -jan ([Jj]an(uary)?) -feb ([Ff]eb(ruary)?) -mar ([Mm]ar(ch)?) -apr ([Aa]pr(il)?) -may ([Mm]ay) -jun ([Jj]un(e)?) -jul ([Jj]ul(y)?) -aug ([Aa]ug(ust)?) -sep ([Ss]ep(tember)?) -oct ([Oo]ct(ober)?) -nov ([Nn]ov(ember)?) -dec ([Dd]ec(ember)?) - -MONTH ({jan}|{feb}|{mar}|{apr}|{may}|{jun}|{jul}|{aug}|{sep}|{oct}|{nov}|{dec}) - -TIME ({D}:{d}{d}(:{d}{d})?) +sun [Ss]un(day)? +mon [Mm]on(day)? +tue [Tt]ue(sday)? +wed [Ww]ed(nesday)? +thu [Tt]hu(rsday)? +fri [Ff]ri(day)? +sat [Ss]at(urday)? + +DAY {sun}|{mon}|{tue}|{wed}|{thu}|{fri}|{sat} + +jan [Jj]an(uary)? +feb [Ff]eb(ruary)? +mar [Mm]ar(ch)? +apr [Aa]pr(il)? +may [Mm]ay +jun [Jj]une? +jul [Jj]uly? +aug [Aa]ug(ust)? +sep [Ss]ep(tember)? +oct [Oo]ct(ober)? +nov [Nn]ov(ember)? +dec [Dd]ec(ember)? + +MONTH {jan}|{feb}|{mar}|{apr}|{may}|{jun}|{jul}|{aug}|{sep}|{oct}|{nov}|{dec} + +TIME {D}:{d}{d}(:{d}{d})? /* The year can either be 2 digits, or 4. However, after Y2K, we found that some MUA were reporting the year 100, hence @@ -221,11 +215,11 @@ TIME ({D}:{d}{d}(:{d}{d})?) issues with 2-digit years. */ -YEAR (({d}{d})|(1{d}{d})|({d}{4})) +YEAR ({d}{d})|(1{d}{d})|({d}{4}) -w ([ \t]*) -W ([ \t]+) -D ([0-9]?[0-9]) +w [ \t]* +W [ \t]+ +D [0-9]?[0-9] d [0-9] nl [ \t\n()] @@ -239,7 +233,7 @@ nl [ \t\n()] char *cp; static struct tws tw; - memset(&tw,0,sizeof(struct tws)); + ZERO(&tw); lexhandle = yy_scan_string(lexstr); %} @@ -321,17 +315,10 @@ nl [ \t\n()] } {D}("-"|"/"){D}("-"|"/"){YEAR}{W}{TIME} { INIT(); - if(europeandate) { - /* DD/MM/YY */ - SETDAY(); - SKIPTOD(); - SETMON_NUM(); - } else { - /* MM/DD/YY */ + /* MM/DD/YY */ SETMON_NUM(); SKIPTOD(); SETDAY(); - } SKIPTOD(); SETYEAR(); SKIPTOD(); @@ -339,17 +326,10 @@ nl [ \t\n()] } {D}("-"|"/"){D}("-"|"/"){YEAR} { INIT(); - if(europeandate) { - /* DD/MM/YY */ - SETDAY(); - SKIPTOD(); - SETMON_NUM(); - } else { - /* MM/DD/YY */ + /* MM/DD/YY */ SETMON_NUM(); SKIPTOD(); SETDAY(); - } SKIPTOD(); SETYEAR(); } @@ -361,18 +341,14 @@ nl [ \t\n()] INIT(); SKIPTOD(); SETZONE(atoi(cp)); -#ifdef ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST zonehack (&tw); -#endif /* ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST */ yyterminate(); } "-"{D}{d}{d} { INIT(); SKIPTOD(); SETZONE(-atoi(cp)); -#ifdef ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST zonehack (&tw); -#endif /* ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST */ yyterminate(); }