version 1.337, 2018/08/20 17:25:09 |
version 1.338, 2018/08/21 18:15:22 |
Line 3156 roff_als(ROFF_ARGS) |
|
Line 3156 roff_als(ROFF_ARGS) |
|
if (oldsz == 0) |
if (oldsz == 0) |
return ROFF_IGN; |
return ROFF_IGN; |
|
|
valsz = mandoc_asprintf(&value, ".%.*s \\$*\\\"\n", |
valsz = mandoc_asprintf(&value, ".%.*s \\$@\\\"\n", |
(int)oldsz, oldn); |
(int)oldsz, oldn); |
roff_setstrn(&r->strtab, newn, newsz, value, valsz, 0); |
roff_setstrn(&r->strtab, newn, newsz, value, valsz, 0); |
roff_setstrn(&r->rentab, newn, newsz, NULL, 0, 0); |
roff_setstrn(&r->rentab, newn, newsz, NULL, 0, 0); |
Line 3380 roff_userdef(ROFF_ARGS) |
|
Line 3380 roff_userdef(ROFF_ARGS) |
|
{ |
{ |
const char *arg[16], *ap; |
const char *arg[16], *ap; |
char *cp, *n1, *n2; |
char *cp, *n1, *n2; |
int argc, expand_count, i, ib, ie; |
int argc, expand_count, i, ib, ie, quote_args; |
size_t asz, esz, rsz; |
size_t asz, esz, rsz; |
|
|
/* |
/* |
Line 3415 roff_userdef(ROFF_ARGS) |
|
Line 3415 roff_userdef(ROFF_ARGS) |
|
continue; |
continue; |
if (*cp++ != '$') |
if (*cp++ != '$') |
continue; |
continue; |
if (*cp == '*') { /* \\$* inserts all arguments */ |
|
|
quote_args = 0; |
|
switch (*cp) { |
|
case '@': /* \\$@ inserts all arguments, quoted */ |
|
quote_args = 1; |
|
/* FALLTHROUGH */ |
|
case '*': /* \\$* inserts all arguments, unquoted */ |
ib = 0; |
ib = 0; |
ie = argc - 1; |
ie = argc - 1; |
} else { /* \\$1 .. \\$9 insert one argument */ |
break; |
|
default: /* \\$1 .. \\$9 insert one argument */ |
ib = ie = *cp - '1'; |
ib = ie = *cp - '1'; |
if (ib < 0 || ib > 8) |
if (ib < 0 || ib > 8) |
continue; |
continue; |
|
break; |
} |
} |
cp -= 2; |
cp -= 2; |
|
|
Line 3447 roff_userdef(ROFF_ARGS) |
|
Line 3455 roff_userdef(ROFF_ARGS) |
|
|
|
asz = ie > ib ? ie - ib : 0; /* for blanks */ |
asz = ie > ib ? ie - ib : 0; /* for blanks */ |
for (i = ib; i <= ie; i++) { |
for (i = ib; i <= ie; i++) { |
|
if (quote_args) |
|
asz += 2; |
for (ap = arg[i]; *ap != '\0'; ap++) { |
for (ap = arg[i]; *ap != '\0'; ap++) { |
asz++; |
asz++; |
if (*ap == '"') |
if (*ap == '"') |
Line 3493 roff_userdef(ROFF_ARGS) |
|
Line 3503 roff_userdef(ROFF_ARGS) |
|
|
|
n2 = cp; |
n2 = cp; |
for (i = ib; i <= ie; i++) { |
for (i = ib; i <= ie; i++) { |
|
if (quote_args) |
|
*n2++ = '"'; |
for (ap = arg[i]; *ap != '\0'; ap++) { |
for (ap = arg[i]; *ap != '\0'; ap++) { |
if (*ap == '"') { |
if (*ap == '"') { |
memcpy(n2, "\\(dq", 4); |
memcpy(n2, "\\(dq", 4); |
Line 3500 roff_userdef(ROFF_ARGS) |
|
Line 3512 roff_userdef(ROFF_ARGS) |
|
} else |
} else |
*n2++ = *ap; |
*n2++ = *ap; |
} |
} |
|
if (quote_args) |
|
*n2++ = '"'; |
if (i < ie) |
if (i < ie) |
*n2++ = ' '; |
*n2++ = ' '; |
} |
} |