1 --- coreutils-8.26/po/pl.po.orig 2017-02-08 09:48:16.712532143 +0000
2 +++ coreutils-8.26/po/pl.po 2017-02-08 09:50:39.112530540 +0000
3 @@ -4440,12 +4440,14 @@
6 " -t, --tagged-paragraph indentation of first line different from second\n"
7 -" -u, --uniform-spacing one space between words, two after sentences\n"
8 +" -u, --uniform-spacing one space between words, two between sentences\n"
9 +" -n, --single-spaces single spaces between sentences\n"
10 " -w, --width=WIDTH maximum line width (default of 75 columns)\n"
11 " -g, --goal=WIDTH goal width (default of 93% of width)\n"
13 " -t, --tagged-paragraph wcięcie pierwszej linii inne niż drugiej\n"
14 " -u, --uniform-spacing jedna spacja między słowami, dwie między zdaniami\n"
15 +" -n, --single-spaces pojedyncze spacje między zdaniami\n"
16 " -w, --width=SZEROKOŚĆ maksymalna SZEROKOŚĆ linii (domyślnie 75 kolumn)\n"
17 " -g, --goal=SZEROKOŚĆ docelowa SZEROKOŚĆ (domyślnie 93% of szerokości\n"
19 --- coreutils-8.19/src/fmt.c.orig 2012-07-21 16:54:31.000000000 +0200
20 +++ coreutils-8.19/src/fmt.c 2012-10-14 11:02:27.109233796 +0200
22 /* Written by Ross Paterson <rap@doc.ic.ac.uk>. */
27 #include <sys/types.h>
30 /* The following parameters represent the program's idea of what is
31 "best". Adjust to taste, subject to the caveats given. */
33 -/* Default longest permitted line length (max_width). */
34 +/* Default longest permitted line width (max_width). */
37 /* Prefer lines to be LEEWAY % shorter than the maximum width, giving
41 /* Costs and bonuses are expressed as the equivalent departure from the
42 - optimal line length, multiplied by 10. e.g. assigning something a
43 + optimal line width, multiplied by 10. e.g. assigning something a
44 cost of 50 means that it is as bad as a line 5 characters too short
45 or too long. The definition of SHORT_COST(n) should not be changed.
46 However, EQUIV(n) may need tuning. */
48 #define LINE_COST EQUIV (70)
50 /* Cost of breaking a line after the first word of a sentence, where
51 - the length of the word is N. */
52 + the width of the word is N. */
53 #define WIDOW_COST(n) (EQUIV (200) / ((n) + 2))
55 /* Cost of breaking a line before the last word of a sentence, where
56 - the length of the word is N. */
57 + the width of the word is N. */
58 #define ORPHAN_COST(n) (EQUIV (150) / ((n) + 2))
60 /* Bonus for breaking a line at the end of a sentence. */
65 +/* Wide character support */
68 +xgetwc (FILE *stream)
70 + wint_t c = getwc (stream);
71 + if (c == WEOF && ferror (stream))
72 + error (EXIT_FAILURE, errno, _("read error"));
77 +xwcwidth (wchar_t wc)
79 + int w = wcwidth (wc);
80 + return w < 0 ? 0 : w;
83 /* Extra ctype(3)-style macros. */
85 -#define isopen(c) (strchr ("(['`\"", c) != NULL)
86 -#define isclose(c) (strchr (")]'\"", c) != NULL)
87 -#define isperiod(c) (strchr (".?!", c) != NULL)
89 + (wcschr (L"(['`\"\u2018\u201A\u201B\u201C\u201E\u201F", c) != NULL)
90 +#define isclose(c) (wcschr (L")]'\"\u2018\u2019\u201C\u201D", c) != NULL)
91 +#define isperiod(c) (wcschr (L".?!", c) != NULL)
93 /* Size of a tab stop, for expansion on input and re-introduction on
97 /* Static attributes determined during input. */
99 - const char *text; /* the text of the word */
100 - int length; /* length of this word */
101 + const wchar_t *text; /* the text of the word */
102 + int length; /* length of this word, in characters */
103 + int width; /* width of this word, in columns */
104 int space; /* the size of the following space */
105 unsigned int paren:1; /* starts with open paren */
106 unsigned int period:1; /* ends in [.?!])* */
109 /* The remaining fields are computed during the optimization. */
111 - int line_length; /* length of the best line starting here */
112 + int line_width; /* width of the best line starting here */
113 COST best_cost; /* cost of best paragraph starting here */
114 WORD *next_break; /* break which achieves best_cost */
116 @@ -154,16 +175,16 @@
117 static void set_prefix (char *p);
118 static void fmt (FILE *f);
119 static bool get_paragraph (FILE *f);
120 -static int get_line (FILE *f, int c);
121 -static int get_prefix (FILE *f);
122 -static int get_space (FILE *f, int c);
123 -static int copy_rest (FILE *f, int c);
124 -static bool same_para (int c);
125 +static wint_t get_line (FILE *f, wint_t c);
126 +static wint_t get_prefix (FILE *f);
127 +static wint_t get_space (FILE *f, wint_t c);
128 +static wint_t copy_rest (FILE *f, wint_t c);
129 +static bool same_para (wint_t c);
130 static void flush_paragraph (void);
131 static void fmt_paragraph (void);
132 static void check_punctuation (WORD *w);
133 static COST base_cost (WORD *this);
134 -static COST line_cost (WORD *next, int len);
135 +static COST line_cost (WORD *next, int wid);
136 static void put_paragraph (WORD *finish);
137 static void put_line (WORD *w, int indent);
138 static void put_word (WORD *w);
140 /* If true, don't preserve inter-word spacing (default false). */
143 +/* How many spaces to put after a sentence (1 or 2). */
144 +static int sentence_space;
146 /* Prefix minus leading and trailing spaces (default ""). */
147 -static const char *prefix;
148 +static wchar_t *prefix;
150 /* User-supplied maximum line width (default WIDTH). The only output
151 lines longer than this will each comprise a single word. */
152 @@ -192,14 +216,14 @@
154 /* Values derived from the option values. */
156 -/* The length of prefix minus leading space. */
157 -static int prefix_full_length;
158 +/* The width of prefix minus leading space. */
159 +static int prefix_full_width;
161 -/* The length of the leading space trimmed from the prefix. */
162 +/* The width of the leading space trimmed from the prefix. */
163 static int prefix_lead_space;
165 -/* The length of prefix minus leading and trailing space. */
166 -static int prefix_length;
167 +/* The width of prefix minus leading and trailing space. */
168 +static int prefix_width;
170 /* The preferred width of text lines, set to LEEWAY % less than max_width. */
171 static int goal_width;
172 @@ -214,10 +238,10 @@
174 /* Space for the paragraph text -- longer paragraphs are handled neatly
175 (cf. flush_paragraph()). */
176 -static char parabuf[MAXCHARS];
177 +static wchar_t parabuf[MAXCHARS];
179 /* A pointer into parabuf, indicating the first unused character position. */
181 +static wchar_t *wptr;
183 /* The words of a paragraph -- longer paragraphs are handled neatly
184 (cf. flush_paragraph()). */
185 @@ -249,16 +273,16 @@
186 prefix (next_prefix_indent). See get_paragraph() and copy_rest(). */
188 /* The last character read from the input file. */
189 -static int next_char;
190 +static wint_t next_char;
192 /* The space before the trimmed prefix (or part of it) on the next line
193 after the current paragraph. */
194 static int next_prefix_indent;
196 -/* If nonzero, the length of the last line output in the current
197 +/* If nonzero, the width of the last line output in the current
198 paragraph, used to charge for raggedness at the split point for long
199 paragraphs chosen by fmt_paragraph(). */
200 -static int last_line_length;
201 +static int last_line_width;
206 format string: xgettext:no-c-format */
208 -t, --tagged-paragraph indentation of first line different from second\n\
209 - -u, --uniform-spacing one space between words, two after sentences\n\
210 + -u, --uniform-spacing one space between words, two between sentences\n\
211 + -n, --single-spaces single spaces between sentences\n\
212 -w, --width=WIDTH maximum line width (default of 75 columns)\n\
213 -g, --goal=WIDTH goal width (default of 93% of width)\n\
216 {"split-only", no_argument, NULL, 's'},
217 {"tagged-paragraph", no_argument, NULL, 't'},
218 {"uniform-spacing", no_argument, NULL, 'u'},
219 + {"single-spaces", no_argument, NULL, 'n'},
220 {"width", required_argument, NULL, 'w'},
221 {"goal", required_argument, NULL, 'g'},
222 {GETOPT_HELP_OPTION_DECL},
224 atexit (close_stdout);
226 crown = tagged = split = uniform = false;
227 + sentence_space = 2;
230 - prefix_length = prefix_lead_space = prefix_full_length = 0;
232 + prefix_width = prefix_lead_space = prefix_full_width = 0;
234 if (argc > 1 && argv[1][0] == '-' && ISDIGIT (argv[1][1]))
240 - while ((optchar = getopt_long (argc, argv, "0123456789cstuw:p:g:",
241 + while ((optchar = getopt_long (argc, argv, "0123456789cstunw:p:g:",
250 + sentence_space = 1;
254 max_width_option = optarg;
256 @@ -461,26 +492,32 @@
259 /* Trim space from the front and back of the string P, yielding the prefix,
260 - and record the lengths of the prefix and the space trimmed. */
261 + and record the widths of the prefix and the space trimmed. */
270 prefix_lead_space = 0;
278 - prefix_full_length = strlen (p);
279 - s = p + prefix_full_length;
280 - while (s > p && s[-1] == ' ')
283 - prefix_length = s - p;
284 + len = mbsrtowcs (NULL, (const char **) &p, 0, NULL);
285 + prefix = xmalloc (len * sizeof (wchar_t));
286 + mbsrtowcs (prefix, (const char **) &p, len, NULL);
287 + for (s = prefix; *s; s++)
288 + prefix_full_width += xwcwidth (*s);
289 + prefix_width = prefix_full_width;
290 + while (s > prefix && s[-1] == L' ')
298 /* read file F and send formatted output to stdout. */
299 @@ -550,24 +587,24 @@
301 get_paragraph (FILE *f)
306 - last_line_length = 0;
307 + last_line_width = 0;
310 /* Scan (and copy) blank lines, and lines not introduced by the prefix. */
312 - while (c == '\n' || c == EOF
313 + while (c == L'\n' || c == WEOF
314 || next_prefix_indent < prefix_lead_space
315 - || in_column < next_prefix_indent + prefix_full_length)
316 + || in_column < next_prefix_indent + prefix_full_width)
318 c = copy_rest (f, c);
331 @@ -628,26 +665,26 @@
332 that failed to match the prefix. In the latter, C is \n or EOF.
333 Return the character (\n or EOF) ending the line. */
336 -copy_rest (FILE *f, int c)
338 +copy_rest (FILE *f, wint_t c)
344 - if (in_column > next_prefix_indent || (c != '\n' && c != EOF))
345 + if (in_column > next_prefix_indent || (c != L'\n' && c != WEOF))
347 put_space (next_prefix_indent);
348 for (s = prefix; out_column != in_column && *s; out_column++)
350 - if (c != EOF && c != '\n')
352 + if (c != WEOF && c != L'\n')
353 put_space (in_column - out_column);
354 - if (c == EOF && in_column >= next_prefix_indent + prefix_length)
356 + if (c == WEOF && in_column >= next_prefix_indent + prefix_width)
359 - while (c != '\n' && c != EOF)
360 + while (c != L'\n' && c != WEOF)
369 @@ -657,11 +694,11 @@
374 +same_para (wint_t c)
376 return (next_prefix_indent == prefix_indent
377 - && in_column >= next_prefix_indent + prefix_full_length
378 - && c != '\n' && c != EOF);
379 + && in_column >= next_prefix_indent + prefix_full_width
380 + && c != L'\n' && c != WEOF);
383 /* Read a line from input file F, given first non-blank character C
384 @@ -672,11 +709,11 @@
386 Return the first non-blank character of the next line. */
389 -get_line (FILE *f, int c)
391 +get_line (FILE *f, wint_t c)
394 - char *end_of_parabuf;
395 + wchar_t *end_of_parabuf;
398 end_of_parabuf = ¶buf[MAXCHARS];
402 word_limit->text = wptr;
403 + word_limit->width = 0;
406 if (wptr == end_of_parabuf)
407 @@ -696,10 +734,12 @@
412 + word_limit->width += xwcwidth (c);
415 - while (c != EOF && !isspace (c));
416 - in_column += word_limit->length = wptr - word_limit->text;
417 + while (c != WEOF && !isspace (c));
418 + word_limit->length = wptr - word_limit->text;
419 + in_column += word_limit->width;
420 check_punctuation (word_limit);
422 /* Scan inter-word space. */
423 @@ -707,11 +747,11 @@
425 c = get_space (f, c);
426 word_limit->space = in_column - start;
427 - word_limit->final = (c == EOF
428 + word_limit->final = (c == WEOF
429 || (word_limit->period
430 - && (c == '\n' || word_limit->space > 1)));
431 - if (c == '\n' || c == EOF || uniform)
432 - word_limit->space = word_limit->final ? 2 : 1;
433 + && (c == L'\n' || word_limit->space > 1)));
434 + if (c == L'\n' || c == WEOF || uniform)
435 + word_limit->space = word_limit->final ? sentence_space : 1;
436 if (word_limit == end_of_word)
438 set_other_indent (true);
439 @@ -719,34 +759,34 @@
443 - while (c != '\n' && c != EOF);
444 + while (c != L'\n' && c != WEOF);
445 return get_prefix (f);
448 /* Read a prefix from input file F. Return either first non-matching
449 character, or first non-blank character after the prefix. */
459 - c = get_space (f, getc (f));
460 - if (prefix_length == 0)
461 + c = get_space (f, xgetwc (f));
462 + if (prefix_width == 0)
463 next_prefix_indent = prefix_lead_space < in_column ?
464 prefix_lead_space : in_column;
469 next_prefix_indent = in_column;
470 - for (p = prefix; *p != '\0'; p++)
471 + for (p = prefix; *p != L'\0'; p++)
473 - unsigned char pc = *p;
481 c = get_space (f, c);
483 @@ -756,21 +796,21 @@
484 /* Read blank characters from input file F, starting with C, and keeping
485 in_column up-to-date. Return first non-blank character. */
488 -get_space (FILE *f, int c)
490 +get_space (FILE *f, wint_t c)
497 - else if (c == '\t')
498 + else if (c == L'\t')
501 in_column = (in_column / TABWIDTH + 1) * TABWIDTH;
512 check_punctuation (WORD *w)
514 - char const *start = w->text;
515 - char const *finish = start + (w->length - 1);
516 - unsigned char fin = *finish;
517 + wchar_t const *start = w->text;
518 + wchar_t const *finish = start + (w->length - 1);
519 + wchar_t fin = *finish;
521 w->paren = isopen (*start);
522 w->punct = !! ispunct (fin);
525 if (word_limit == word)
527 - fwrite (parabuf, sizeof *parabuf, wptr - parabuf, stdout);
529 + for (outptr = parabuf; outptr < wptr; outptr++)
530 + putwchar (*outptr);
535 /* Copy text of words down to start of parabuf -- we use memmove because
536 the source and target may overlap. */
538 - memmove (parabuf, split_point->text, wptr - split_point->text);
539 + memmove (parabuf, split_point->text,
540 + (wptr - split_point->text) * sizeof (wchar_t));
541 shift = split_point->text - parabuf;
544 @@ -861,53 +904,53 @@
554 word_limit->best_cost = 0;
555 - saved_length = word_limit->length;
556 - word_limit->length = max_width; /* sentinel */
557 + saved_width = word_limit->width;
558 + word_limit->width = max_width; /* sentinel */
560 for (start = word_limit - 1; start >= word; start--)
563 - len = start == word ? first_indent : other_indent;
564 + wid = start == word ? first_indent : other_indent;
566 /* At least one word, however long, in the line. */
575 /* Consider breaking before w. */
577 - wcost = line_cost (w, len) + w->best_cost;
578 - if (start == word && last_line_length > 0)
579 - wcost += RAGGED_COST (len - last_line_length);
580 + wcost = line_cost (w, wid) + w->best_cost;
581 + if (start == word && last_line_width > 0)
582 + wcost += RAGGED_COST (wid - last_line_width);
586 start->next_break = w;
587 - start->line_length = len;
588 + start->line_width = wid;
591 - /* This is a kludge to keep us from computing 'len' as the
592 - sum of the sentinel length and some non-zero number.
593 - Since the sentinel w->length may be INT_MAX, adding
594 + /* This is a kludge to keep us from computing 'wid' as the
595 + sum of the sentinel width and some non-zero number.
596 + Since the sentinel w->width may be INT_MAX, adding
597 to that would give a negative result. */
601 - len += (w - 1)->space + w->length; /* w > start >= word */
602 + wid += (w - 1)->space + w->width; /* w > start >= word */
604 - while (len < max_width);
605 + while (wid < max_width);
606 start->best_cost = best + base_cost (start);
609 - word_limit->length = saved_length;
610 + word_limit->width = saved_width;
613 /* Return the constant component of the cost of breaking before the
614 @@ -932,33 +975,33 @@
615 else if ((this - 1)->punct)
617 else if (this > word + 1 && (this - 2)->final)
618 - cost += WIDOW_COST ((this - 1)->length);
619 + cost += WIDOW_COST ((this - 1)->width);
624 else if (this->final)
625 - cost += ORPHAN_COST (this->length);
626 + cost += ORPHAN_COST (this->width);
631 /* Return the component of the cost of breaking before word NEXT that
632 - depends on LEN, the length of the line beginning there. */
633 + depends on WID, the width of the line beginning there. */
636 -line_cost (WORD *next, int len)
637 +line_cost (WORD *next, int wid)
642 if (next == word_limit)
644 - n = goal_width - len;
645 + n = goal_width - wid;
646 cost = SHORT_COST (n);
647 if (next->next_break != word_limit)
649 - n = len - next->line_length;
650 + n = wid - next->line_width;
651 cost += RAGGED_COST (n);
657 put_space (prefix_indent);
658 - fputs (prefix, stdout);
659 - out_column += prefix_length;
660 + fputws (prefix, stdout);
661 + out_column += prefix_width;
662 put_space (indent - out_column);
664 endline = w->next_break - 1;
666 put_space (w->space);
669 - last_line_length = out_column;
671 + last_line_width = out_column;
675 /* Output to stdout the word W. */
676 @@ -1007,13 +1050,13 @@
685 for (n = w->length; n != 0; n--)
687 - out_column += w->length;
689 + out_column += w->width;
692 /* Output to stdout SPACE spaces, or equivalent tabs. */
693 @@ -1030,13 +1073,13 @@
694 if (out_column + 1 < tab_target)
695 while (out_column < tab_target)
699 out_column = (out_column / TABWIDTH + 1) * TABWIDTH;
702 while (out_column < space_target)