]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
doc: improve highlighting of single spaced translations
authorPádraig Brady <P@draigBrady.com>
Tue, 27 Jan 2026 17:45:02 +0000 (17:45 +0000)
committerPádraig Brady <P@draigBrady.com>
Tue, 27 Jan 2026 17:59:38 +0000 (17:59 +0000)
* 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

index 3695954db92d77ae6c01b14e2c6ce47011267a9a..7e1fdbff0328e265b3b45c1b2ce80e37e631dca3 100644 (file)
@@ -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);