gdatetime: Pad numbers with numeric space

Padding numbers with a typical space character doesn't align them well
because it has a different size. Instead, we need to use the "U+2007"
figure (numeric) space that has the same size as a numerical digit.
This is only visible when using the `tnum` font feature that
makes numbers monospace.

Closes #2655
This commit is contained in:
Maksym Hazevych 2022-05-28 16:57:06 +03:00 committed by Philip Withnall
parent f1916032e4
commit 7074122f30
2 changed files with 9 additions and 9 deletions

View File

@ -3189,11 +3189,11 @@ g_date_time_format_utf8 (GDateTime *datetime,
g_date_time_get_day_of_year (datetime));
break;
case 'k':
format_number (outstr, alt_digits, pad_set ? pad : " ", 2,
format_number (outstr, alt_digits, pad_set ? pad : "\u2007", 2,
g_date_time_get_hour (datetime));
break;
case 'l':
format_number (outstr, alt_digits, pad_set ? pad : " ", 2,
format_number (outstr, alt_digits, pad_set ? pad : "\u2007", 2,
(g_date_time_get_hour (datetime) + 11) % 12 + 1);
break;
case 'm':
@ -3366,9 +3366,9 @@ g_date_time_format_utf8 (GDateTime *datetime,
* - \%I: the hour as a decimal number using a 12-hour clock (range 01 to 12)
* - \%j: the day of the year as a decimal number (range 001 to 366)
* - \%k: the hour (24-hour clock) as a decimal number (range 0 to 23);
* single digits are preceded by a blank
* single digits are preceded by a figure space
* - \%l: the hour (12-hour clock) as a decimal number (range 1 to 12);
* single digits are preceded by a blank
* single digits are preceded by a figure space
* - \%m: the month as a decimal number (range 01 to 12)
* - \%M: the minute as a decimal number (range 00 to 59)
* - \%f: the microsecond as a decimal number (range 000000 to 999999)

View File

@ -1611,11 +1611,11 @@ GDateTime *__dt = g_date_time_new_local (2009, 10, 24, 0, 0, 0);\
TEST_PRINTF_TIME (12, 0, 0, "%I", "12");
TEST_PRINTF_TIME (15, 0, 0, "%I", "03");
TEST_PRINTF ("%j", "297");
TEST_PRINTF ("%k", " 0");
TEST_PRINTF ("%k", "\u20070");
TEST_PRINTF_TIME (13, 13, 13, "%k", "13");
TEST_PRINTF ("%l", "12");
TEST_PRINTF_TIME (12, 0, 0, "%I", "12");
TEST_PRINTF_TIME (13, 13, 13, "%l", " 1");
TEST_PRINTF_TIME (13, 13, 13, "%l", "\u20071");
TEST_PRINTF_TIME (10, 13, 13, "%l", "10");
TEST_PRINTF ("%m", "10");
TEST_PRINTF ("%M", "00");
@ -1711,7 +1711,7 @@ test_non_utf8_printf (void)
TEST_PRINTF_TIME (13, 13, 13, "%k", "13");
TEST_PRINTF ("%l", "12");
TEST_PRINTF_TIME (12, 0, 0, "%I", "12");
TEST_PRINTF_TIME (13, 13, 13, "%l", " 1");
TEST_PRINTF_TIME (13, 13, 13, "%l", "\u20071");
TEST_PRINTF_TIME (10, 13, 13, "%l", "10");
TEST_PRINTF ("%m", "10");
TEST_PRINTF ("%M", "00");
@ -1807,12 +1807,12 @@ test_modifiers (void)
TEST_PRINTF_TIME (23, 0, 0, "%-I", "11");
TEST_PRINTF_TIME (23, 0, 0, "%0I", "11");
TEST_PRINTF_TIME ( 1, 0, 0, "%k", " 1");
TEST_PRINTF_TIME ( 1, 0, 0, "%k", "\u20071");
TEST_PRINTF_TIME ( 1, 0, 0, "%_k", " 1");
TEST_PRINTF_TIME ( 1, 0, 0, "%-k", "1");
TEST_PRINTF_TIME ( 1, 0, 0, "%0k", "01");
TEST_PRINTF_TIME ( 1, 0, 0, "%l", " 1");
TEST_PRINTF_TIME ( 1, 0, 0, "%l", "\u20071");
TEST_PRINTF_TIME ( 1, 0, 0, "%_l", " 1");
TEST_PRINTF_TIME ( 1, 0, 0, "%-l", "1");
TEST_PRINTF_TIME ( 1, 0, 0, "%0l", "01");