From f2af245ebaf88c15f236217b6d43cefcff0eda43 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Tue, 27 Jan 2026 17:45:02 +0000 Subject: [PATCH] doc: improve highlighting of single spaced translations * src/system.h (oputs_): Translations sometimes use a single space between an option and its description. They only do this though for long options since they result in less available screen space. Therefore be more strict with option matching once we've encountered a long option, which supports the more varied formats often associated with short options. --- src/system.h | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/system.h b/src/system.h index 3695954db9..7e1fdbff03 100644 --- a/src/system.h +++ b/src/system.h @@ -567,7 +567,6 @@ oputs_ (MAYBE_UNUSED char const* program, char const *option) return; } - char const* first_word = option + strspn (option, " \t\n"); char const *option_text = strchr (option, '-'); if (!option_text) @@ -577,11 +576,24 @@ oputs_ (MAYBE_UNUSED char const* program, char const *option) /* Set highlighted text up to spacing after the full option text. Any single space is included in highlighted text, double space or TAB or newline terminates the option text. */ + bool long_option = false; char const *desc_text = option_text + anchor_len; - while (*desc_text && *desc_text != '\n' - && (! isspace (*desc_text) - || (*desc_text != '\t' && ! isspace (*(desc_text + 1))))) - desc_text++; + while (*desc_text && *desc_text != '\n') + { + if (*desc_text == '-' && *(desc_text + 1) == '-') + long_option = true; + if (isspace (*desc_text)) + { + if (*desc_text == '\t' || isspace (*(desc_text + 1))) + break; + /* With long options we restrict the match as some translations + delimit a long option and description with a single space. */ + if (long_option && *(desc_text + 1) != '-') + break; + } + + desc_text++; + } /* write spaces before option text. */ fwrite (option, 1, first_word - option, stdout); -- 2.47.3