version 1.65, 2012/05/31 22:38:16 |
version 1.67, 2013/06/20 22:39:30 |
Line 432 mandoc_getarg(struct mparse *parse, char **cpp, int ln |
|
Line 432 mandoc_getarg(struct mparse *parse, char **cpp, int ln |
|
pairs = 0; |
pairs = 0; |
white = 0; |
white = 0; |
for (cp = start; '\0' != *cp; cp++) { |
for (cp = start; '\0' != *cp; cp++) { |
/* Move left after quoted quotes and escaped backslashes. */ |
|
|
/* |
|
* Move the following text left |
|
* after quoted quotes and after "\\" and "\t". |
|
*/ |
if (pairs) |
if (pairs) |
cp[-pairs] = cp[0]; |
cp[-pairs] = cp[0]; |
|
|
if ('\\' == cp[0]) { |
if ('\\' == cp[0]) { |
if ('\\' == cp[1]) { |
/* |
/* Poor man's copy mode. */ |
* In copy mode, translate double to single |
|
* backslashes and backslash-t to literal tabs. |
|
*/ |
|
switch (cp[1]) { |
|
case ('t'): |
|
cp[0] = '\t'; |
|
/* FALLTHROUGH */ |
|
case ('\\'): |
pairs++; |
pairs++; |
cp++; |
cp++; |
} else if (0 == quoted && ' ' == cp[1]) |
break; |
|
case (' '): |
/* Skip escaped blanks. */ |
/* Skip escaped blanks. */ |
cp++; |
if (0 == quoted) |
|
cp++; |
|
break; |
|
default: |
|
break; |
|
} |
} else if (0 == quoted) { |
} else if (0 == quoted) { |
if (' ' == cp[0]) { |
if (' ' == cp[0]) { |
/* Unescaped blanks end unquoted args. */ |
/* Unescaped blanks end unquoted args. */ |
Line 601 mandoc_eos(const char *p, size_t sz, int enclosed) |
|
Line 619 mandoc_eos(const char *p, size_t sz, int enclosed) |
|
} |
} |
|
|
return(found && !enclosed); |
return(found && !enclosed); |
} |
|
|
|
/* |
|
* Find out whether a line is a macro line or not. If it is, adjust the |
|
* current position and return one; if it isn't, return zero and don't |
|
* change the current position. |
|
*/ |
|
int |
|
mandoc_getcontrol(const char *cp, int *ppos) |
|
{ |
|
int pos; |
|
|
|
pos = *ppos; |
|
|
|
if ('\\' == cp[pos] && '.' == cp[pos + 1]) |
|
pos += 2; |
|
else if ('.' == cp[pos] || '\'' == cp[pos]) |
|
pos++; |
|
else |
|
return(0); |
|
|
|
while (' ' == cp[pos] || '\t' == cp[pos]) |
|
pos++; |
|
|
|
*ppos = pos; |
|
return(1); |
|
} |
} |
|
|
/* |
/* |