On 2011/03/10 21:22, Nigel Taylor wrote:
> > "translit(`+,-12345', `+--1-5', `<;>a-c-a')
> > 
> > This fails to give the correct reasult on OpenBSD a-c-a expected to be
> > equivalent to abcba, -a on the end is treated as -a." Back to back ranges 
> > not
> > implemented yet.
> > 
> > I think the info m4 examples should be in the regression tests. All but the 
> > back
> > to back range worked (-g only gnu), with the updated version attached, I 
> > have
> > fixed that as below, result from test m4 vs gm4 as per m4 info.


So the translit fix is in, here's the chunk of the diff with
the fix and test for back-to-back ranges.

I haven't got autoconf-2.67 working yet though, testing with
lighttpd I'm getting 'configure:13699: error: possibly undefined
macro: AS_MESSAGE_LOG_FDdnl'.

Index: usr.bin/m4/eval.c
===================================================================
RCS file: /cvs/src/usr.bin/m4/eval.c,v
retrieving revision 1.69
diff -u -p -r1.69 eval.c
--- usr.bin/m4/eval.c   24 Mar 2011 11:23:08 -0000      1.69
+++ usr.bin/m4/eval.c   28 Mar 2011 18:02:28 -0000
@@ -975,7 +975,7 @@ handledash(char *buffer, char *end, cons
                        unsigned char i;
                        if ((unsigned char)src[0] <= (unsigned char)src[2]) {
                                for (i = (unsigned char)src[0]; 
-                                   i <= (unsigned char)src[2]; i++) {
+                                   i < (unsigned char)src[2]; i++) {
                                        *p++ = i;
                                        if (p == end) {
                                                *p = '\0';
@@ -984,7 +984,7 @@ handledash(char *buffer, char *end, cons
                                }
                        } else {
                                for (i = (unsigned char)src[0]; 
-                                   i >= (unsigned char)src[2]; i--) {
+                                   i > (unsigned char)src[2]; i--) {
                                        *p++ = i;
                                        if (p == end) {
                                                *p = '\0';
@@ -992,7 +992,36 @@ handledash(char *buffer, char *end, cons
                                        }
                                }
                        }
-                       src += 3;
+                       src += 2;
+                       /* check for back to back range */
+                       if (src[1] == '-' && src[2]) {
+                               if ((unsigned char)src[0] <= (unsigned 
char)src[2]) {
+                                       for (i = (unsigned char)src[0]; 
+                                           i <= (unsigned char)src[2]; i++) {
+                                               *p++ = i;
+                                               if (p == end) {
+                                                       *p = '\0';
+                                                       return buffer;
+                                               }
+                                       }
+                               } else {
+                                       for (i = (unsigned char)src[0]; 
+                                           i >= (unsigned char)src[2]; i--) {
+                                               *p++ = i;
+                                               if (p == end) {
+                                                       *p = '\0';
+                                                       return buffer;
+                                               }
+                                       }
+                               }
+                               src += 3;
+                       } else {
+                               *p++ = *src++;
+                               if (p == end) {
+                                       *p = '\0';
+                                       return buffer;
+                               }
+                       }
                } else
                        *p++ = *src++;
                if (p == end)
Index: regress/usr.bin/m4/gnutranslit2.out
===================================================================
RCS file: /cvs/src/regress/usr.bin/m4/gnutranslit2.out,v
retrieving revision 1.1
diff -u -p -r1.1 gnutranslit2.out
--- regress/usr.bin/m4/gnutranslit2.out 24 Mar 2011 11:28:19 -0000      1.1
+++ regress/usr.bin/m4/gnutranslit2.out 28 Mar 2011 18:02:28 -0000
@@ -4,3 +4,5 @@ ABCDEFGHIJ
 ABCDEFGHIJ
 ABC-0980-ZYX 
 ABC-0980-ZYX 
+<;>abcba
+bgced
Index: regress/usr.bin/m4/translit2.m4
===================================================================
RCS file: /cvs/src/regress/usr.bin/m4/translit2.m4,v
retrieving revision 1.1
diff -u -p -r1.1 translit2.m4
--- regress/usr.bin/m4/translit2.m4     24 Mar 2011 11:28:19 -0000      1.1
+++ regress/usr.bin/m4/translit2.m4     28 Mar 2011 18:02:28 -0000
@@ -6,3 +6,5 @@ translit(`0123456789', `0123456789', `AB
 translit(`0123456789', `[0-9]', `[A-J]')
 translit(`abc-0980-zyx', `abcdefghijklmnopqrstuvwxyz', 
`ABCDEFGHIJKLMNOPQRSTUVWXYZ') 
 translit(`abc-0980-zyx', `[a-z]', `[A-Z]') 
+translit(`+,-12345', `+--1-5', `<;>a-c-a')
+translit(`abcdef', `aabdef', `bcged')
Index: regress/usr.bin/m4/translit2.out
===================================================================
RCS file: /cvs/src/regress/usr.bin/m4/translit2.out,v
retrieving revision 1.1
diff -u -p -r1.1 translit2.out
--- regress/usr.bin/m4/translit2.out    24 Mar 2011 11:28:19 -0000      1.1
+++ regress/usr.bin/m4/translit2.out    28 Mar 2011 18:02:28 -0000
@@ -4,3 +4,5 @@ ABCDEFGHIJ
 A12345678J
 ABC-0980-ZYX 
 Abc-0980-Zyx 
+<,;a234c
+bgced

Reply via email to