=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.118 retrieving revision 1.119 diff -u -p -r1.118 -r1.119 --- mandoc/roff.c 2011/01/02 10:10:57 1.118 +++ mandoc/roff.c 2011/01/03 22:42:37 1.119 @@ -1,7 +1,7 @@ -/* $Id: roff.c,v 1.118 2011/01/02 10:10:57 kristaps Exp $ */ +/* $Id: roff.c,v 1.119 2011/01/03 22:42:37 schwarze Exp $ */ /* - * Copyright (c) 2010 Kristaps Dzonsons - * Copyright (c) 2010 Ingo Schwarze + * Copyright (c) 2010, 2011 Kristaps Dzonsons + * Copyright (c) 2010, 2011 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -1201,53 +1201,16 @@ roff_userdef(ROFF_ARGS) { const char *arg[9]; char *cp, *n1, *n2; - int i, quoted, pairs; + int i; /* * Collect pointers to macro argument strings * and null-terminate them. */ cp = *bufp + pos; - for (i = 0; i < 9; i++) { - /* Quoting can only start with a new word. */ - if ('"' == *cp) { - quoted = 1; - cp++; - } else - quoted = 0; - arg[i] = cp; - for (pairs = 0; '\0' != *cp; cp++) { - /* Unquoted arguments end at blanks. */ - if (0 == quoted) { - if (' ' == *cp) - break; - continue; - } - /* After pairs of quotes, move left. */ - if (pairs) - cp[-pairs] = cp[0]; - /* Pairs of quotes do not end words, ... */ - if ('"' == cp[0] && '"' == cp[1]) { - pairs++; - cp++; - continue; - } - /* ... but solitary quotes do. */ - if ('"' != *cp) - continue; - if (pairs) - cp[-pairs] = '\0'; - *cp = ' '; - break; - } - /* Last argument; the remaining ones are empty strings. */ - if ('\0' == *cp) - continue; - /* Null-terminate argument and move to the next one. */ - *cp++ = '\0'; - while (' ' == *cp) - cp++; - } + for (i = 0; i < 9; i++) + arg[i] = '\0' == *cp ? NULL : + mandoc_getarg(&cp, r->msg, r->data, ln, &pos); /* * Expand macro arguments.