Allow <blank>s to be used to separate tab stop positions with the -t

argument, not just ASCII space characters and commas. Don't count
non-printing characters when determining column position.
This commit is contained in:
tjr 2002-06-15 10:16:39 +00:00
parent 379207e179
commit 7853af48f5
3 changed files with 27 additions and 5 deletions

View File

@ -95,6 +95,18 @@ are reconverted to maximal strings of tabs. If the
option is given, then tabs are inserted whenever they would compress the
resultant file by replacing two or more characters.
.El
.Sh ENVIRONMENT
The
.Ev LANG ,
.Ev LC_ALL
and
.Ev LC_CTYPE
environment variables affect the execution of
.Nm expand
and
.Nm unexpand
as described in
.Xr environ 7 .
.Sh STANDARDS
The
.Nm expand

View File

@ -47,6 +47,7 @@ static const char rcsid[] =
#include <ctype.h>
#include <err.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@ -69,8 +70,11 @@ main(argc, argv)
register int n;
int rval;
setlocale(LC_CTYPE, "");
/* handle obsolete syntax */
while (argc > 1 && argv[1][0] == '-' && isdigit(argv[1][1])) {
while (argc > 1 && argv[1][0] == '-' &&
isdigit((unsigned char)argv[1][1])) {
getstops(&argv[1][1]);
argc--; argv++;
}
@ -140,7 +144,8 @@ main(argc, argv)
default:
putchar(c);
column++;
if (isprint(c))
column++;
continue;
case '\n':
@ -173,7 +178,7 @@ getstops(cp)
tabstops[nstops++] = i;
if (*cp == 0)
break;
if (*cp != ',' && *cp != ' ')
if (*cp != ',' && !isblank((unsigned char)*cp))
errx(1, "bad tab stop spec");
cp++;
}

View File

@ -48,8 +48,10 @@ static const char sccsid[] = "@(#)unexpand.c 8.1 (Berkeley) 6/6/93";
/*
* unexpand - put tabs into a file replacing blanks
*/
#include <ctype.h>
#include <err.h>
#include <limits.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -71,6 +73,8 @@ main(argc, argv)
int ch, failed;
char *filename;
setlocale(LC_CTYPE, "");
nstops = 1;
tabstops[0] = 8;
while ((ch = getopt(argc, argv, "at:")) != -1) {
@ -176,7 +180,8 @@ tabify()
doneline = ocol = dcol = 0;
} else if (ch != ' ' || dcol > limit) {
putchar(ch);
ocol++, dcol++;
if (isprint(ch))
ocol++, dcol++;
}
/*
@ -213,7 +218,7 @@ getstops(cp)
tabstops[nstops++] = i;
if (*cp == 0)
break;
if (*cp != ',' && *cp != ' ')
if (*cp != ',' && !isblank((unsigned char)*cp))
errx(1, "bad tab stop spec");
cp++;
}