- switch (*(i+1)) {
- /* Weekday in long and abbreviation */
- case 'A':
- outwalk += sprintf(outwalk, "%s", day_long[dt->week_day]);
- break;
- case 'a':
- outwalk += sprintf(outwalk, "%s", day_short[dt->week_day]);
- break;
- /* Season in long and abbreviation */
- case 'B':
- outwalk += sprintf(outwalk, "%s", season_long[dt->season]);
- break;
- case 'b':
- outwalk += sprintf(outwalk, "%s", season_short[dt->season]);
- break;
- /* Day of the season (ordinal and cardinal) */
- case 'd':
- outwalk += sprintf(outwalk, "%d", dt->season_day + 1);
- break;
- case 'e':
- outwalk += sprintf(outwalk, "%d", dt->season_day + 1);
- switch (dt->season_day % 10) {
- case 0:
- outwalk += sprintf(outwalk, "st");
- break;
- case 1:
- outwalk += sprintf(outwalk, "nd");
- break;
- case 2:
- outwalk += sprintf(outwalk, "rd");
- break;
- default:
- outwalk += sprintf(outwalk, "th");
- break;
- }
- break;
- /* YOLD */
- case 'Y':
- outwalk += sprintf(outwalk, "%d", dt->year);
- break;
- /* Holidays */
- case 'H':
- if (dt->season_day == 4) {
- outwalk += sprintf(outwalk, "%s", holidays[dt->season]);
- }
- if (dt->season_day == 49) {
- outwalk += sprintf(outwalk, "%s", holidays[dt->season + 5]);
- }
- break;
- /* Stop parsing the format string, except on Holidays */
- case 'N':
- if (dt->season_day != 4 && dt->season_day != 49) {
- return (outwalk - orig_outwalk);
- }
- break;
- /* Newline- and Tabbing-characters */
- case 'n':
- outwalk += sprintf(outwalk, "\n");
- break;
- case 't':
- outwalk += sprintf(outwalk, "\t");
- break;
- /* The St. Tib's Day replacement */
- case '{':
- tibs_end = strstr(i, "%}");
- if (tibs_end == NULL) {
- i++;
- break;
- }
- if (dt->st_tibs_day) {
- /* We outpt "St. Tib's Day... */
- outwalk += sprintf(outwalk, "St. Tib's Day");
- } else {
- /* ...or parse the substring between %{ and %} ... */
- *tibs_end = '\0';
- outwalk += format_output(outwalk, i + 2, dt);
- *tibs_end = '%';
- }
- /* ...and continue with the rest */
- i = tibs_end;
- break;
- case '}':
- i++;
- break;
- default:
- /* No escape-sequence, so we just skip */
- outwalk += sprintf(outwalk, "%%%c", *(i+1));
- break;