X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fdtimep.lex;h=8e78245265285f884a2af963a2e6ca38e2104dc2;hb=3995a01bfe4a35251a62c69ff118b436b311594d;hp=2e79c46c9da2af88aad9639748a2d258a970dd92;hpb=2bb7e26c6ae27f9b8a0ca9e5b7ddd1c824bcedda;p=mmh diff --git a/sbr/dtimep.lex b/sbr/dtimep.lex index 2e79c46..8e78245 100644 --- a/sbr/dtimep.lex +++ b/sbr/dtimep.lex @@ -1,7 +1,3 @@ -%e 2000 -%p 5000 -%n 1000 -%a 4000 %{ #include #include @@ -153,6 +149,34 @@ static int day_map[] = { --cp; } #define SKIPTOSP() { while ( !isspace(*cp++) ) ; \ --cp; } + +#ifdef ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST +# ifdef TIME_WITH_SYS_TIME +# include +# include +# else +# ifdef HAVE_SYS_TIME_H +# include +# else +# include +# endif +# endif + +static void +zonehack (struct tws *tw) +{ + register struct tm *tm; + + if (dmktime (tw) == (time_t) -1) + return; + + tm = localtime (&tw->tw_clock); + if (tm->tm_isdst) { + tw->tw_flags |= TW_DST; + tw->tw_zone -= 60; + } +} +#endif /* ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST */ %} sun ([Ss]un(day)?) @@ -327,16 +351,23 @@ d [0-9] 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(); + } "-"?("ut"|"UT") INIT(); SETZONE(0); "-"?("gmt"|"GMT") INIT(); SETZONE(0); -"-"?("jst"|"JST") INIT(); SETZONE(200); -"-"?("jdt"|"JDT") INIT(); SETDST(); SETZONE(2); "-"?("est"|"EST") INIT(); SETZONE(-500); "-"?("edt"|"EDT") INIT(); SETDST(); SETZONE(-500); "-"?("cst"|"CST") INIT(); SETZONE(-600); @@ -348,21 +379,7 @@ d [0-9] "-"?("nst"|"NST") INIT(); SETZONE(-330); "-"?("ast"|"AST") INIT(); SETZONE(-400); "-"?("adt"|"ADT") INIT(); SETDST(); SETZONE(-400); -"-"?("yst"|"YST") INIT(); SETZONE(-900); -"-"?("ydt"|"YDT") INIT(); SETDST(); SETZONE(-900); "-"?("hst"|"HST") INIT(); SETZONE(-1000); "-"?("hdt"|"HDT") INIT(); SETDST(); SETZONE(-1000); -"-"?("bst"|"BST") INIT(); SETDST(); SETZONE(-100); -[a-iA-I] { - INIT(); - SETZONE(100*(('a'-1) - tolower(*cp))); - } -[k-mK-M] { - INIT(); - SETZONE(100*('a' - tolower(*cp))); - } -[n-yN-Y] { - INIT(); - SETZONE(100*(tolower(*cp) - 'm')); - } +"-"?([a-z]{3}|[A-Z]{3}) ; .|\n