]> TLD Linux GIT Repositories - packages/coreutils.git/blobdiff - coreutils-fmt-wchars.patch
- merged 9.5 from PLD
[packages/coreutils.git] / coreutils-fmt-wchars.patch
index 6f05bc178749ca25065e8703704a4c5ae900dc3c..066adfdbb3f30ffa9e18da44c67b8c46d0657d8b 100644 (file)
@@ -24,9 +24,9 @@
  
  #include <config.h>
 +#include <wchar.h>
+ #include <ctype.h>
  #include <stdio.h>
  #include <sys/types.h>
- #include <getopt.h>
 @@ -40,7 +41,7 @@
  /* The following parameters represent the program's idea of what is
     "best".  Adjust to taste, subject to the caveats given.  */
 +
  /* Extra ctype(3)-style macros.  */
  
--#define isopen(c)     (strchr ("(['`\"", c) != NULL)
--#define isclose(c)    (strchr (")]'\"", c) != NULL)
--#define isperiod(c)   (strchr (".?!", c) != NULL)
+-#define isopen(c)     (strchr ("(['`\"", c) != nullptr)
+-#define isclose(c)    (strchr (")]'\"", c) != nullptr)
+-#define isperiod(c)   (strchr (".?!", c) != nullptr)
 +#define isopen(c)     \
-+  (wcschr (L"(['`\"\u2018\u201A\u201B\u201C\u201E\u201F", c) != NULL)
-+#define isclose(c)    (wcschr (L")]'\"\u2018\u2019\u201C\u201D", c) != NULL)
-+#define isperiod(c)   (wcschr (L".?!", c) != NULL)
++  (wcschr (L"(['`\"\u2018\u201A\u201B\u201C\u201E\u201F", c) != nullptr)
++#define isclose(c)    (wcschr (L")]'\"\u2018\u2019\u201C\u201D", c) != nullptr)
++#define isperiod(c)   (wcschr (L".?!", c) != nullptr)
  
  /* Size of a tab stop, for expansion on input and re-introduction on
     output.  */
@@ -97,9 +97,9 @@
  
      /* Static attributes determined during input.  */
  
--    const char *text;         /* the text of the word */
+-    char const *text;         /* the text of the word */
 -    int length;                       /* length of this word */
-+    const wchar_t *text;      /* the text of the word */
++    wchar_t const *text;      /* the text of the word */
 +    int length;                       /* length of this word, in characters */
 +    int width;                        /* width of this word, in columns */
      int space;                        /* the size of the following space */
    };
 @@ -154,16 +175,16 @@
  static void set_prefix (char *p);
- static void fmt (FILE *f);
+ static bool fmt (FILE *f, char const *);
  static bool get_paragraph (FILE *f);
 -static int get_line (FILE *f, int c);
 -static int get_prefix (FILE *f);
 +static int sentence_space;
 +
  /* Prefix minus leading and trailing spaces (default "").  */
--static const char *prefix;
+-static char const *prefix;
 +static wchar_t *prefix;
  
  /* User-supplied maximum line width (default WIDTH).  The only output
    -g, --goal=WIDTH          goal width (default of 93% of width)\n\
  "), stdout);
 @@ -311,6 +336,7 @@
-   {"split-only", no_argument, NULL, 's'},
-   {"tagged-paragraph", no_argument, NULL, 't'},
-   {"uniform-spacing", no_argument, NULL, 'u'},
-+  {"single-spaces", no_argument, NULL, 'n'},
-   {"width", required_argument, NULL, 'w'},
-   {"goal", required_argument, NULL, 'g'},
+   {"split-only", no_argument, nullptr, 's'},
+   {"tagged-paragraph", no_argument, nullptr, 't'},
+   {"uniform-spacing", no_argument, nullptr, 'u'},
++  {"single-spaces", no_argument, nullptr, 'n'},
+   {"width", required_argument, nullptr, 'w'},
+   {"goal", required_argument, nullptr, 'g'},
    {GETOPT_HELP_OPTION_DECL},
 @@ -335,9 +361,10 @@
    atexit (close_stdout);
  
 -  while ((optchar = getopt_long (argc, argv, "0123456789cstuw:p:g:",
 +  while ((optchar = getopt_long (argc, argv, "0123456789cstunw:p:g:",
-                                  long_options, NULL))
+                                  long_options, nullptr))
           != -1)
      switch (optchar)
 @@ -378,6 +405,10 @@
 +  *s = L'\0';
  }
  
- /* read file F and send formatted output to stdout.  */
+ /* Read F and send formatted output to stdout.
 @@ -550,24 +587,24 @@
  static bool
  get_paragraph (FILE *f)
 +static wint_t
 +copy_rest (FILE *f, wint_t c)
  {
--  const char *s;
-+  const wchar_t *s;
+-  char const *s;
++  wchar_t const *s;
  
    out_column = 0;
 -  if (in_column > next_prefix_indent || (c != '\n' && c != EOF))
 +          word_limit->width += xwcwidth (c);
 +          c = xgetwc (f);
          }
--      while (c != EOF && !isspace (c));
+-      while (c != EOF && !c_isspace (c));
 -      in_column += word_limit->length = wptr - word_limit->text;
 +      while (c != WEOF && !isspace (c));
 +      word_limit->length = wptr - word_limit->text;
        prefix_lead_space : in_column;
    else
      {
--      const char *p;
-+      const wchar_t *p;
+-      char const *p;
++      wchar_t const *p;
        next_prefix_indent = in_column;
 -      for (p = prefix; *p != '\0'; p++)
 +      for (p = prefix; *p != L'\0'; p++)
 +  word_limit->width = saved_width;
  }
  
- /* Return the constant component of the cost of breaking before the
+ /* Work around <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109628>.  */
 @@ -932,33 +975,33 @@
        else if ((this - 1)->punct)
          cost -= PUNCT_BONUS;
  static void
  put_word (WORD *w)
  {
--  const char *s;
-+  const wchar_t *s;
+-  char const *s;
++  wchar_t const *s;
    int n;
  
    s = w->text;