]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
nl: reset numbering for each section
authorKOBAYASHI Takashi <a1415tk@aiit.ac.jp>
Sun, 1 May 2016 12:47:25 +0000 (13:47 +0100)
committerPádraig Brady <P@draigBrady.com>
Sat, 14 May 2016 11:41:43 +0000 (12:41 +0100)
* NEWS: Mention the bug fix.
* src/nl.c (proc_body, proc_footer): Reset numbering here too.
* doc/coreutils.texi (nl invocation): Adjust for behavior change.
* tests/misc/nl.sh: Add a test case.

NEWS
doc/coreutils.texi
src/nl.c
tests/misc/nl.sh

diff --git a/NEWS b/NEWS
index 56ab1f13a9581dfb069c910cb17cada395b17dbf..71b5c24ed09f4f079ade8154b05b77267799fbdf 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,9 @@ GNU coreutils NEWS                                    -*- outline -*-
    System V style platforms where this information is available only
    in the global variable 'tzname'. [bug introduced in coreutils-8.24]
 
+   nl now resets numbering for each page section rather than just for each page.
+   [This bug was present in "the beginning".]
+
    stty --help no longer outputs extraneous gettext header lines
    for translated languages. [bug introduced in coreutils-8.24]
 
index 5630201488ab815f5e1bfae39bc2ebc6ebbe0339..6a671bb8e39718e66107e1f651dc4c8df07eb5b6 100644 (file)
@@ -1741,10 +1741,10 @@ nl [@var{option}]@dots{} [@var{file}]@dots{}
 @end example
 
 @cindex logical pages, numbering on
-@command{nl} decomposes its input into (logical) pages; by default, the
-line number is reset to 1 at the top of each logical page.  @command{nl}
-treats all of the input files as a single document; it does not reset
-line numbers or logical pages between files.
+@command{nl} decomposes its input into (logical) page sections;
+by default, the line number is reset to 1 at each logical page section.
+@command{nl} treats all of the input files as a single document;
+it does not reset line numbers or logical pages between files.
 
 @cindex headers, numbering
 @cindex body, numbering
index a4a48bca8b61f05b82a86dacc1760bd2f7dc8ca8..b276f0935916fb902c9b9f2704dfebd250e55016 100644 (file)
--- a/src/nl.c
+++ b/src/nl.c
@@ -185,7 +185,7 @@ Write each FILE to standard output, with line numbers added.\n\
 
       fputs (_("\
   -b, --body-numbering=STYLE      use STYLE for numbering body lines\n\
-  -d, --section-delimiter=CC      use CC for separating logical pages\n\
+  -d, --section-delimiter=CC      use CC for logical page delimiters\n\
   -f, --footer-numbering=STYLE    use STYLE for numbering footer lines\n\
 "), stdout);
       fputs (_("\
@@ -193,20 +193,20 @@ Write each FILE to standard output, with line numbers added.\n\
   -i, --line-increment=NUMBER     line number increment at each line\n\
   -l, --join-blank-lines=NUMBER   group of NUMBER empty lines counted as one\n\
   -n, --number-format=FORMAT      insert line numbers according to FORMAT\n\
-  -p, --no-renumber               do not reset line numbers at logical pages\n\
+  -p, --no-renumber               do not reset line numbers for each section\n\
   -s, --number-separator=STRING   add STRING after (possible) line number\n\
 "), stdout);
       fputs (_("\
-  -v, --starting-line-number=NUMBER  first line number on each logical page\n\
+  -v, --starting-line-number=NUMBER  first line number for each section\n\
   -w, --number-width=NUMBER       use NUMBER columns for line numbers\n\
 "), stdout);
       fputs (HELP_OPTION_DESCRIPTION, stdout);
       fputs (VERSION_OPTION_DESCRIPTION, stdout);
       fputs (_("\
 \n\
-By default, selects -v1 -i1 -l1 -sTAB -w6 -nrn -hn -bt -fn.  CC are\n\
-two delimiter characters for separating logical pages, a missing\n\
-second character implies :.  Type \\\\ for \\.  STYLE is one of:\n\
+By default, selects -v1 -i1 -l1 -sTAB -w6 -nrn -hn -bt -fn.\n\
+CC are two delimiter characters used to construct logical page delimiters,\n\
+a missing second character implies :.  Type \\\\ for \\.  STYLE is one of:\n\
 "), stdout);
       fputs (_("\
 \n\
@@ -298,6 +298,8 @@ proc_body (void)
 {
   current_type = body_type;
   current_regex = &body_regex;
+  if (reset_numbers)
+    line_no = starting_line_number;
   putchar ('\n');
 }
 
@@ -308,6 +310,8 @@ proc_footer (void)
 {
   current_type = footer_type;
   current_regex = &footer_regex;
+  if (reset_numbers)
+    line_no = starting_line_number;
   putchar ('\n');
 }
 
index e111d7a015f78f8f2effff553e6b4d5238c1503a..826894af24f8171d4e94fd97758292c0cb2a1d37 100755 (executable)
@@ -37,7 +37,22 @@ cat <<\EOF > exp
      1^Ia$
        $
 EOF
+compare exp out || fail=1
 
+# Ensure numbering reset at each delimiter.
+# coreutils <= v8.25 only reset at a page header.
+printf '%s\n' '\:\:\:' a '\:\:' b '\:' c > in.txt || framework_failure_
+nl -ha -fa in.txt > out.tmp || fail=1
+nl -p -ha -fa in.txt >> out.tmp || fail=1
+sed '/^$/d' < out.tmp > out || framework_failure_
+cat <<\EOF > exp
+     1 a
+     1 b
+     1 c
+     1 a
+     2 b
+     3 c
+EOF
 compare exp out || fail=1
 
 Exit $fail