X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fdtimep.lex;h=0a65672f3844bef0f2ab30344a0a578b31f8ed7d;hb=62f8542a68c21c0ec009e9275cbe54f0c921f2ea;hp=2e79c46c9da2af88aad9639748a2d258a970dd92;hpb=2bb7e26c6ae27f9b8a0ca9e5b7ddd1c824bcedda;p=mmh diff --git a/sbr/dtimep.lex b/sbr/dtimep.lex index 2e79c46..0a65672 100644 --- a/sbr/dtimep.lex +++ b/sbr/dtimep.lex @@ -153,6 +153,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,11 +355,20 @@ 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); @@ -353,16 +390,5 @@ d [0-9] "-"?("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