Introduce the pv_strwidth() function so that in future we can add support for escape sequences and UTF-8 in format strings.

This commit is contained in:
Andrew Wood
2024-12-08 17:40:12 +00:00
parent 5c5d53e1d1
commit 4ffdee0002
11 changed files with 95 additions and 78 deletions
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n"
"Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n"
@@ -403,37 +403,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr "/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr "FIN"
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr "b"
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr "B"
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "selhala alokace vyrovnávací paměti"
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
"Last-Translator: fnetX <otto@codeberg.org>\n"
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
@@ -426,37 +426,37 @@ msgstr "yzafpnµm kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnµm KMGTPEZY"
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr "/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr "Endzeit"
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr "b"
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr "B"
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -395,37 +395,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr ""
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr ""
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr ""
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr ""
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr ""
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr ""
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr ""
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr ""
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: 2024-10-12 11:13+0000\n"
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
@@ -430,37 +430,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr ""
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr "/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "O/s"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr ""
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr ""
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr "O"
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "échec de l'allocation de mémoire tampon"
+9 -9
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: 2024-10-20 14:07+0000\n"
"Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
@@ -421,37 +421,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr "/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr "FIN"
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr "b"
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr "B"
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "nie udało się zaalokować bufora"
+9 -9
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -409,37 +409,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr ""
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr ""
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr ""
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr ""
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr ""
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "erro alocando o buffer"
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: 2024-10-22 18:07+0000\n"
"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n"
"Language-Team: Russian <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
@@ -404,37 +404,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr "бит/с"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr "/с"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "байт/с"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ОЖИД"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr "ЗАВЕРШ"
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr "бит"
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr "байт"
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "не удалось выделить память для буфера"
+9 -9
View File
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pv 1.8.14\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-08 17:31+0000\n"
"POT-Creation-Date: 2024-12-08 17:39+0000\n"
"PO-Revision-Date: 2024-10-12 23:51+0000\n"
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
@@ -405,37 +405,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:515 src/pv/display.c:894 src/pv/display.c:923
#: src/pv/display.c:515 src/pv/display.c:893 src/pv/display.c:922
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
msgid "/s"
msgstr "/s"
#: src/pv/display.c:519 src/pv/display.c:898 src/pv/display.c:927
#: src/pv/display.c:519 src/pv/display.c:897 src/pv/display.c:926
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:771 src/pv/display.c:775
#: src/pv/display.c:770 src/pv/display.c:774
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:857
#: src/pv/display.c:856
msgid "FIN"
msgstr "FIN"
#: src/pv/display.c:953
#: src/pv/display.c:952
msgid "b"
msgstr "b"
#: src/pv/display.c:956 src/pv/transfer.c:594
#: src/pv/display.c:955 src/pv/transfer.c:594
msgid "B"
msgstr "B"
#: src/pv/display.c:1497 src/pv/transfer.c:1056
#: src/pv/display.c:1495 src/pv/transfer.c:1056
msgid "buffer allocation failed"
msgstr "arabellek tahsisi başarısız oldu"
+5
View File
@@ -115,6 +115,11 @@ extern size_t pv_strlcat(char *, const char *, size_t);
*/
/*@null@ */ /*@temp@ */ extern void *pv_memrchr(const void *, int, size_t);
/*
* Return the displayed width of a string.
*/
extern size_t pv_strwidth(const char *, size_t);
/*
* Functions relating to elapsed time.
*/
+3 -6
View File
@@ -523,8 +523,7 @@ static size_t pv__format_progress_knownsize(pvstate_t state, pvdisplay_t display
after_bar_bytes = strlen(after_bar); /* flawfinder: ignore */
/* flawfinder: always \0-terminated by pv_snprintf() and the earlier memset(). */
/* TODO: calculate display width rather than just bytes */
after_bar_width = after_bar_bytes;
after_bar_width = pv_strwidth(after_bar, after_bar_bytes);
if (width < (after_bar_width + 2))
return 0;
@@ -1386,9 +1385,8 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
display->format[segment].offset = str_start;
display->format[segment].bytes = str_bytes;
display->format[segment].width = pv_strwidth(&(display_format[str_start]), str_bytes);
/* TODO: calculate display width rather than just bytes */
display->format[segment].width = str_bytes;
} else {
char dummy_buffer[4]; /* flawfinder: ignore - unused. */
@@ -1554,8 +1552,7 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl
segment->width = 0;
if (bytes_added > 0) {
/* TODO: calculate display width rather than just bytes */
segment->width = bytes_added;
segment->width = pv_strwidth(&(display_segments[display_segment_offset]), bytes_added);
}
display_segment_offset += bytes_added;
+15
View File
@@ -151,6 +151,7 @@ char *pv_strdup(const char *original)
return duplicate;
}
/*
* Return a pointer to the last matching character in the buffer, or NULL if
* not found.
@@ -179,3 +180,17 @@ void *pv_memrchr(const void *buffer, int match, size_t length)
return NULL;
#endif
}
/*
* Return the displayed width of a string.
*/
size_t pv_strwidth(const char *string, size_t bytes)
{
if (NULL == string)
return 0;
if (0 == bytes)
return 0;
/* TODO: actually calculate displayed width rather than assuming. */
return bytes;
}