Date: Fri, 26 Feb 2010 07:22:07 +0000 (UTC) From: Edwin Groothuis <edwin@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r204350 - user/edwin/calendar Message-ID: <201002260722.o1Q7M7b6069079@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: edwin Date: Fri Feb 26 07:22:07 2010 New Revision: 204350 URL: http://svn.freebsd.org/changeset/base/204350 Log: Be able to handle national versions of first, second, third, fourth, fifth and last. Modified: user/edwin/calendar/calendar.1 user/edwin/calendar/calendar.h user/edwin/calendar/io.c user/edwin/calendar/locale.c user/edwin/calendar/parsedata.c Modified: user/edwin/calendar/calendar.1 ============================================================================== --- user/edwin/calendar/calendar.1 Fri Feb 26 07:22:01 2010 (r204349) +++ user/edwin/calendar/calendar.1 Fri Feb 26 07:22:07 2010 (r204350) @@ -112,6 +112,10 @@ To handle calendars in your national cod .Dq LANG=<locale_name> in the calendar file as early as possible. .Pp +To handle the local name of sequences, you can specify them as: +.Dq SEQUENCE=<first> <second> <third> <fourth> <fifth> <last> +in the calendar file as early as possible. +.Pp The names of the following special days are recognized: .Bl -tag -width 123456789012345 -compact .It Easter Modified: user/edwin/calendar/calendar.h ============================================================================== --- user/edwin/calendar/calendar.h Fri Feb 26 07:22:01 2010 (r204349) +++ user/edwin/calendar/calendar.h Fri Feb 26 07:22:07 2010 (r204350) @@ -146,16 +146,19 @@ struct fixs { int len; }; +extern const char *days[]; +extern const char *fdays[]; +extern const char *fmonths[]; +extern const char *months[]; +extern const char *sequences[]; extern struct fixs fndays[8]; /* full national days names */ -extern struct fixs ndays[8]; /* short national days names */ extern struct fixs fnmonths[13]; /* full national months names */ +extern struct fixs ndays[8]; /* short national days names */ extern struct fixs nmonths[13]; /* short national month names */ -extern const char *months[]; -extern const char *fmonths[]; -extern const char *days[]; -extern const char *fdays[]; +extern struct fixs nsequences[10]; void setnnames(void); +void setnsequences(char *); /* day.c */ extern const struct tm tm0; Modified: user/edwin/calendar/io.c ============================================================================== --- user/edwin/calendar/io.c Fri Feb 26 07:22:01 2010 (r204349) +++ user/edwin/calendar/io.c Fri Feb 26 07:22:07 2010 (r204350) @@ -152,6 +152,10 @@ cal(void) REPLACE("SepEquinox=", 11, nsepequinox); REPLACE("JunSolstice=", 12, njunsolstice); REPLACE("DecSolstice=", 12, ndecsolstice); + if (strncmp(buf, "SEQUENCE=", 9) == 0) { + setnsequences(buf + 9); + continue; + } /* * If the line starts with a tab, the data has to be Modified: user/edwin/calendar/locale.c ============================================================================== --- user/edwin/calendar/locale.c Fri Feb 26 07:22:01 2010 (r204349) +++ user/edwin/calendar/locale.c Fri Feb 26 07:22:07 2010 (r204350) @@ -62,10 +62,15 @@ const char *months[] = { "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL, }; +const char *sequences[] = { + "First", "Second", "Third", "Fourth", "Fifth", "Last" +}; + struct fixs fndays[8]; /* full national days names */ struct fixs ndays[8]; /* short national days names */ struct fixs fnmonths[13]; /* full national months names */ struct fixs nmonths[13]; /* short national month names */ +struct fixs nsequences[10]; /* national sequence names */ void @@ -129,3 +134,35 @@ setnnames(void) fnmonths[i].len = strlen(buf); } } + +void +setnsequences(char *seq) +{ + int i; + char *p; + + p = seq; + for (i = 0; i < 5; i++) { + nsequences[i].name = p; + if ((p = strchr(p, ' ')) == NULL) { + for (i = 0; i < 5; i++) { + nsequences[i].name = NULL; + nsequences[i].len = -1; + return; + } + + } + *p = '\0'; + p++; + } + nsequences[i].name = p; + + for (i = 0; i < 5; i++) { + nsequences[i].name = strdup(nsequences[i].name); + nsequences[i].len = nsequences[i + 1].name - nsequences[i].name; + } + nsequences[i].name = strdup(nsequences[i].name); + nsequences[i].len = strlen(nsequences[i].name); + + return; +} Modified: user/edwin/calendar/parsedata.c ============================================================================== --- user/edwin/calendar/parsedata.c Fri Feb 26 07:22:01 2010 (r204349) +++ user/edwin/calendar/parsedata.c Fri Feb 26 07:22:07 2010 (r204350) @@ -880,18 +880,26 @@ isonlydigits(char *s, int nostar) static int indextooffset(char *s) { - if (strcasecmp(s, "first") == 0) - return (1); - if (strcasecmp(s, "second") == 0) - return (2); - if (strcasecmp(s, "third") == 0) - return (3); - if (strcasecmp(s, "fourth") == 0) - return (4); - if (strcasecmp(s, "fifth") == 0) - return (5); - if (strcasecmp(s, "last") == 0) - return (-1); + int i; + struct fixs *n; + + for (i = 0; i < 6; i++) { + if (strcasecmp(s, sequences[i]) == 0) { + if (i == 5) + return (-1); + return (i + 1); + } + } + for (i = 0; i < 6; i++) { + n = nsequences + i; + if (n->len == -1) + continue; + if (strncasecmp(s, n->name, n->len) == 0) { + if (i == 5) + return (-1); + return (i + 1); + } + } return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002260722.o1Q7M7b6069079>