diff options
Diffstat (limited to 'lib/ephy-time-helpers.c')
-rw-r--r-- | lib/ephy-time-helpers.c | 370 |
1 files changed, 185 insertions, 185 deletions
diff --git a/lib/ephy-time-helpers.c b/lib/ephy-time-helpers.c index dc3fe7422..85863309b 100644 --- a/lib/ephy-time-helpers.c +++ b/lib/ephy-time-helpers.c @@ -64,223 +64,223 @@ char * eel_strdup_strftime (const char *format, struct tm *time_pieces) { - GString *string; - const char *remainder, *percent; - char code[4], buffer[512]; - char *piece, *result, *converted; - size_t string_length; - gboolean strip_leading_zeros, turn_leading_zeros_to_spaces; - char modifier; - int i; + GString *string; + const char *remainder, *percent; + char code[4], buffer[512]; + char *piece, *result, *converted; + size_t string_length; + gboolean strip_leading_zeros, turn_leading_zeros_to_spaces; + char modifier; + int i; - /* Format could be translated, and contain UTF-8 chars, - * so convert to locale encoding which strftime uses */ - converted = g_locale_from_utf8 (format, -1, NULL, NULL, NULL); - g_return_val_if_fail (converted != NULL, NULL); + /* Format could be translated, and contain UTF-8 chars, + * so convert to locale encoding which strftime uses */ + converted = g_locale_from_utf8 (format, -1, NULL, NULL, NULL); + g_return_val_if_fail (converted != NULL, NULL); - string = g_string_new (""); - remainder = converted; + string = g_string_new (""); + remainder = converted; - /* Walk from % character to % character. */ - for (;;) { - percent = strchr (remainder, '%'); - if (percent == NULL) { - g_string_append (string, remainder); - break; - } - g_string_append_len (string, remainder, - percent - remainder); + /* Walk from % character to % character. */ + for (;; ) { + percent = strchr (remainder, '%'); + if (percent == NULL) { + g_string_append (string, remainder); + break; + } + g_string_append_len (string, remainder, + percent - remainder); - /* Handle the "%" character. */ - remainder = percent + 1; - switch (*remainder) { - case '-': - strip_leading_zeros = TRUE; - turn_leading_zeros_to_spaces = FALSE; - remainder++; - break; - case '_': - strip_leading_zeros = FALSE; - turn_leading_zeros_to_spaces = TRUE; - remainder++; - break; - case '%': - g_string_append_c (string, '%'); - remainder++; - continue; - case '\0': - g_warning ("Trailing %% passed to eel_strdup_strftime"); - g_string_append_c (string, '%'); - continue; - default: - strip_leading_zeros = FALSE; - turn_leading_zeros_to_spaces = FALSE; - break; - } + /* Handle the "%" character. */ + remainder = percent + 1; + switch (*remainder) { + case '-': + strip_leading_zeros = TRUE; + turn_leading_zeros_to_spaces = FALSE; + remainder++; + break; + case '_': + strip_leading_zeros = FALSE; + turn_leading_zeros_to_spaces = TRUE; + remainder++; + break; + case '%': + g_string_append_c (string, '%'); + remainder++; + continue; + case '\0': + g_warning ("Trailing %% passed to eel_strdup_strftime"); + g_string_append_c (string, '%'); + continue; + default: + strip_leading_zeros = FALSE; + turn_leading_zeros_to_spaces = FALSE; + break; + } - modifier = 0; - if (strchr (SUS_EXTENDED_STRFTIME_MODIFIERS, *remainder) != NULL) { - modifier = *remainder; - remainder++; + modifier = 0; + if (strchr (SUS_EXTENDED_STRFTIME_MODIFIERS, *remainder) != NULL) { + modifier = *remainder; + remainder++; - if (*remainder == 0) { - g_warning ("Unfinished %%%c modifier passed to eel_strdup_strftime", modifier); - break; - } - } + if (*remainder == 0) { + g_warning ("Unfinished %%%c modifier passed to eel_strdup_strftime", modifier); + break; + } + } - if (strchr (C_STANDARD_STRFTIME_CHARACTERS, *remainder) == NULL) { - g_warning ("eel_strdup_strftime does not support " - "non-standard escape code %%%c", - *remainder); - } + if (strchr (C_STANDARD_STRFTIME_CHARACTERS, *remainder) == NULL) { + g_warning ("eel_strdup_strftime does not support " + "non-standard escape code %%%c", + *remainder); + } - /* Convert code to strftime format. We have a fixed - * limit here that each code can expand to a maximum - * of 512 bytes, which is probably OK. There's no - * limit on the total size of the result string. - */ - i = 0; - code[i++] = '%'; - if (modifier != 0) { + /* Convert code to strftime format. We have a fixed + * limit here that each code can expand to a maximum + * of 512 bytes, which is probably OK. There's no + * limit on the total size of the result string. + */ + i = 0; + code[i++] = '%'; + if (modifier != 0) { #ifdef HAVE_STRFTIME_EXTENSION - code[i++] = modifier; + code[i++] = modifier; #endif - } - code[i++] = *remainder; - code[i++] = '\0'; + } + code[i++] = *remainder; + code[i++] = '\0'; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" - /* Format string under control of caller, since this is a wrapper for strftime. */ - string_length = strftime (buffer, sizeof (buffer), - code, time_pieces); + /* Format string under control of caller, since this is a wrapper for strftime. */ + string_length = strftime (buffer, sizeof (buffer), + code, time_pieces); #pragma GCC diagnostic pop - if (string_length == 0) { - /* We could put a warning here, but there's no - * way to tell a successful conversion to - * empty string from a failure. - */ - buffer[0] = '\0'; - } + if (string_length == 0) { + /* We could put a warning here, but there's no + * way to tell a successful conversion to + * empty string from a failure. + */ + buffer[0] = '\0'; + } - /* Strip leading zeros if requested. */ - piece = buffer; - if (strip_leading_zeros || turn_leading_zeros_to_spaces) { - if (strchr (C_STANDARD_NUMERIC_STRFTIME_CHARACTERS, *remainder) == NULL) { - g_warning ("eel_strdup_strftime does not support " - "modifier for non-numeric escape code %%%c%c", - remainder[-1], - *remainder); - } - if (*piece == '0') { - do { - piece++; - } while (*piece == '0'); - if (!g_ascii_isdigit (*piece)) { - piece--; - } - } - if (turn_leading_zeros_to_spaces) { - memset (buffer, ' ', piece - buffer); - piece = buffer; - } - } - remainder++; + /* Strip leading zeros if requested. */ + piece = buffer; + if (strip_leading_zeros || turn_leading_zeros_to_spaces) { + if (strchr (C_STANDARD_NUMERIC_STRFTIME_CHARACTERS, *remainder) == NULL) { + g_warning ("eel_strdup_strftime does not support " + "modifier for non-numeric escape code %%%c%c", + remainder[-1], + *remainder); + } + if (*piece == '0') { + do { + piece++; + } while (*piece == '0'); + if (!g_ascii_isdigit (*piece)) { + piece--; + } + } + if (turn_leading_zeros_to_spaces) { + memset (buffer, ' ', piece - buffer); + piece = buffer; + } + } + remainder++; - /* Add this piece. */ - g_string_append (string, piece); - } + /* Add this piece. */ + g_string_append (string, piece); + } - /* Convert the string back into utf-8. */ - result = g_locale_to_utf8 (string->str, -1, NULL, NULL, NULL); + /* Convert the string back into utf-8. */ + result = g_locale_to_utf8 (string->str, -1, NULL, NULL, NULL); - g_string_free (string, TRUE); - g_free (converted); + g_string_free (string, TRUE); + g_free (converted); - return result; + return result; } /* Based on evolution/mail/message-list.c:filter_date() */ char * ephy_time_helpers_utf_friendly_time (time_t date) { - time_t nowdate; - time_t yesdate; - struct tm then, now, yesterday; - const char *format = NULL; - char *str = NULL; - gboolean done = FALSE; + time_t nowdate; + time_t yesdate; + struct tm then, now, yesterday; + const char *format = NULL; + char *str = NULL; + gboolean done = FALSE; - nowdate = time (NULL); + nowdate = time (NULL); - if (date == 0) - return NULL; + if (date == 0) + return NULL; - localtime_r (&date, &then); - localtime_r (&nowdate, &now); + localtime_r (&date, &then); + localtime_r (&nowdate, &now); - if (then.tm_mday == now.tm_mday && - then.tm_mon == now.tm_mon && - then.tm_year == now.tm_year) { - /* Translators: "friendly time" string for the current day, strftime format. like "Today 12:34 am" */ - format = _("Today %I:%M %p"); - done = TRUE; - } + if (then.tm_mday == now.tm_mday && + then.tm_mon == now.tm_mon && + then.tm_year == now.tm_year) { + /* Translators: "friendly time" string for the current day, strftime format. like "Today 12:34 am" */ + format = _("Today %I:%M %p"); + done = TRUE; + } - if (! done) { - yesdate = nowdate - 60 * 60 * 24; - localtime_r (&yesdate, &yesterday); - if (then.tm_mday == yesterday.tm_mday && - then.tm_mon == yesterday.tm_mon && - then.tm_year == yesterday.tm_year) { - /* Translators: "friendly time" string for the previous day, - * strftime format. e.g. "Yesterday 12:34 am" - */ - format = _("Yesterday %I:%M %p"); - done = TRUE; - } - } + if (!done) { + yesdate = nowdate - 60 * 60 * 24; + localtime_r (&yesdate, &yesterday); + if (then.tm_mday == yesterday.tm_mday && + then.tm_mon == yesterday.tm_mon && + then.tm_year == yesterday.tm_year) { + /* Translators: "friendly time" string for the previous day, + * strftime format. e.g. "Yesterday 12:34 am" + */ + format = _("Yesterday %I:%M %p"); + done = TRUE; + } + } - if (! done) { - int i; - for (i = 2; i < 7; i++) { - yesdate = nowdate - 60 * 60 * 24 * i; - localtime_r (&yesdate, &yesterday); - if (then.tm_mday == yesterday.tm_mday && - then.tm_mon == yesterday.tm_mon && - then.tm_year == yesterday.tm_year) { - /* Translators: "friendly time" string for a day in the current week, - * strftime format. e.g. "Wed 12:34 am" - */ - format = _("%a %I:%M %p"); - done = TRUE; - break; - } - } - } + if (!done) { + int i; + for (i = 2; i < 7; i++) { + yesdate = nowdate - 60 * 60 * 24 * i; + localtime_r (&yesdate, &yesterday); + if (then.tm_mday == yesterday.tm_mday && + then.tm_mon == yesterday.tm_mon && + then.tm_year == yesterday.tm_year) { + /* Translators: "friendly time" string for a day in the current week, + * strftime format. e.g. "Wed 12:34 am" + */ + format = _("%a %I:%M %p"); + done = TRUE; + break; + } + } + } - if (! done) { - if (then.tm_year == now.tm_year) { - /* Translators: "friendly time" string for a day in the current year, - * strftime format. e.g. "Feb 12 12:34 am" - */ - format = _("%b %d %I:%M %p"); - } else { - /* Translators: "friendly time" string for a day in a different year, - * strftime format. e.g. "Feb 12 1997" - */ - format = _("%b %d %Y"); - } - } + if (!done) { + if (then.tm_year == now.tm_year) { + /* Translators: "friendly time" string for a day in the current year, + * strftime format. e.g. "Feb 12 12:34 am" + */ + format = _("%b %d %I:%M %p"); + } else { + /* Translators: "friendly time" string for a day in a different year, + * strftime format. e.g. "Feb 12 1997" + */ + format = _("%b %d %Y"); + } + } - if (format != NULL) { - str = eel_strdup_strftime (format, &then); - } + if (format != NULL) { + str = eel_strdup_strftime (format, &then); + } - if (str == NULL) { - /* impossible time or broken locale settings */ - str = g_strdup (_("Unknown")); - } + if (str == NULL) { + /* impossible time or broken locale settings */ + str = g_strdup (_("Unknown")); + } - return str; + return str; } |