From c20b532c7a4f54923438e0dcabd4fd3db082460d Mon Sep 17 00:00:00 2001 From: Carter Li Date: Tue, 2 Jun 2026 16:03:04 +0800 Subject: [PATCH] Common (Format): adds `|` for center aligning --- src/common/impl/format.c | 11 ++++++++--- tests/format.c | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/common/impl/format.c b/src/common/impl/format.c index ae3e89c60..b230db7bb 100644 --- a/src/common/impl/format.c +++ b/src/common/impl/format.c @@ -614,7 +614,7 @@ static bool parseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, uint3 char* pSep = placeholderValue.chars; char cSep = '\0'; - while (*pSep && *pSep != ':' && *pSep != '<' && *pSep != '>' && *pSep != '~') { + while (*pSep && *pSep != ':' && *pSep != '<' && *pSep != '>' && *pSep != '|' && *pSep != '~') { ++pSep; } if (*pSep) { @@ -717,12 +717,17 @@ static bool parseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, uint3 } else if (cSep == ':') { ffStrbufAppend(buffer, &tempString); } else { - if (cSep == '<') { + if (cSep == '<') { // left align ffStrbufAppend(buffer, &tempString); ffStrbufAppendNC(buffer, (uint32_t) truncLength - tempString.length, ' '); - } else { + } else if (cSep == '>') { // right align ffStrbufAppendNC(buffer, (uint32_t) truncLength - tempString.length, ' '); ffStrbufAppend(buffer, &tempString); + } else if (cSep == '|') { // center align + uint32_t padding = ((uint32_t) truncLength - tempString.length) / 2; + ffStrbufAppendNC(buffer, padding, ' '); + ffStrbufAppend(buffer, &tempString); + ffStrbufAppendNC(buffer, (uint32_t) truncLength - tempString.length - padding, ' '); } } diff --git a/tests/format.c b/tests/format.c index 390b8e91a..2366f5588 100644 --- a/tests/format.c +++ b/tests/format.c @@ -62,6 +62,18 @@ int main(void) { VERIFY("output({>})", "12345 67890", "output()"); } + { + VERIFY("output({1|20})", "12345 67890", "output( 12345 67890 )"); + VERIFY("output({1|-20})", "12345 67890", "output( 12345 67890 )"); + VERIFY("output({1|11})", "12345 67890", "output(12345 67890)"); + VERIFY("output({1|-11})", "12345 67890", "output(12345 67890)"); + VERIFY("output({1|6})", "12345 67890", "output(12345 )"); + VERIFY("output({|6})", "12345 67890", "output(12345 )"); + VERIFY("output({|-6})", "12345 67890", "output(12345…)"); + VERIFY("output({|0})", "12345 67890", "output()"); + VERIFY("output({|})", "12345 67890", "output()"); + } + { VERIFY("output({1n>20})", "12345 67890", "output({1n>20})"); VERIFY("output({120})", "12345 67890", "output({120})"); @@ -123,6 +135,8 @@ int main(void) { VERIFY("output({1<8})", "\e[1m12345\e[m", "output(\e[1m12345 \e[m)"); VERIFY("output({1>8})", "\e[1m12345\e[m", "output(\e[1m 12345\e[m)"); VERIFY("output({1<1})", "\e[30;47m12345\e[m", "output(\e[30;47m1\e[m)"); + VERIFY("output({1|8})", "\e[1m12345\e[m", "output(\e[1m 12345 \e[m)"); + VERIFY("output({1|1})", "\e[30;47m12345\e[m", "output(\e[30;47m1\e[m)"); } {