bug-groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #60802] Make .substring handle an empty result


From: G. Branden Robinson
Subject: [bug #60802] Make .substring handle an empty result
Date: Mon, 5 Jul 2021 00:44:08 -0400 (EDT)
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

Update of bug #60802 (project groff):

                  Status:                    None => Need Info              
             Assigned to:                    None => gbranden               

    _______________________________________________________

Follow-up Comment #3:

Hi Jim,

Thank you!  This is really helpful.  It's already led me to a preliminary
patch that resolves every test case you presented, with one exception which
you seem to have anticipated.

The use of negative indices to count backward from the end of the string is a
common semantic in programming languages that support array slicing (which is
basically what .substring does).

I'm not sure the groff community will be willing to give up that feature, and
in-tree groff code already uses it.

Anyway, with my very first stab at a patch to src/roff/troff/input.cpp, I've
got the following output:


$ bash ./substring_test_revised.bash 
Exit status was 1
--- Pick a single character from non-empty ---
.substring 'abc' 0 0 -> 'a' (OK)
.substring 'abc' 1 1 -> 'b' (OK)
.substring 'abc' 2 2 -> 'c' (OK)
--- Pick multiple characters from non-empty ---
.substring 'abcd' 0 1 -> 'ab' (OK)
.substring 'abcd' 1 1 -> 'b' (OK)
.substring 'abcd' 0 3 -> 'abcd' (OK)
.substring 'abcd' 1 3 -> 'bcd' (OK)
.substring 'abcd' 2 3 -> 'cd' (OK)
.substring 'abcd' 3 3 -> 'd' (OK)
--- Omit n2 with non-empty input and non-empty result ---
.substring 'abc' 0 -> 'abc' (OK)
.substring 'abc' 1 -> 'bc' (OK)
.substring 'abc' 2 -> 'c' (OK)
.substring 'a' 0 -> 'a' (OK)
--- Specify empty substring with n2==(n1-1) ---
.substring 'abcd' 3 2 -> '' (OK)
.substring 'abcd' 2 1 -> '' (OK)
.substring 'abcd' 1 0 -> '' (OK)
ERROR: .substring 'abcd' 0 -1 yielded 'abcd', EXPECTED ''
--- Specify empty substring with n1==length and n2 omitted ---
troff: ./substring_test_revised.bash:78: warning: start and end index of
substring out of range
.substring 'abcd' 4 -> '' (OK)
troff: ./substring_test_revised.bash:79: warning: start and end index of
substring out of range
.substring 'abc' 3 -> '' (OK)
troff: ./substring_test_revised.bash:80: warning: start and end index of
substring out of range
.substring 'ab' 2 -> '' (OK)
troff: ./substring_test_revised.bash:81: warning: start and end index of
substring out of range
.substring 'a' 1 -> '' (OK)
troff: ./substring_test_revised.bash:82: warning: start and end index of
substring out of range
.substring '' 0 -> '' (OK)
Aborting, got 1 errors.


Also, I don't think we should talk about "undefined behavior" in our
documentation.  We are implementors, not a standards body, so we should
document how .substring works.  It's okay for us to say "it is an error
if...", and our Texinfo manual already has language like this in many places.

What do you think?

    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?60802>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]