version 1.157, 2010/07/04 22:04:04 |
version 1.162, 2010/08/08 14:51:32 |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
|
#include <assert.h> |
#include <assert.h> |
#include <ctype.h> |
|
#include <stdarg.h> |
#include <stdarg.h> |
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
|
#include <time.h> |
#include <time.h> |
|
|
#include "mandoc.h" |
#include "mandoc.h" |
#include "regs.h" |
|
#include "libmdoc.h" |
#include "libmdoc.h" |
#include "libmandoc.h" |
#include "libmandoc.h" |
|
|
Line 722 mdoc_ptext(struct mdoc *m, int line, char *buf, int of |
|
Line 720 mdoc_ptext(struct mdoc *m, int line, char *buf, int of |
|
|
|
assert(buf < end); |
assert(buf < end); |
|
|
if (mandoc_eos(buf+offs, (size_t)(end-buf-offs))) |
if (mandoc_eos(buf+offs, (size_t)(end-buf-offs), 0)) |
m->last->flags |= MDOC_EOS; |
m->last->flags |= MDOC_EOS; |
|
|
return(1); |
return(1); |
Line 765 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
Line 763 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
|
|
i = offs; |
i = offs; |
|
|
/* Accept whitespace after the initial control char. */ |
/* Accept tabs/whitespace after the initial control char. */ |
|
|
if (' ' == buf[i]) { |
if (' ' == buf[i] || '\t' == buf[i]) { |
i++; |
i++; |
while (buf[i] && ' ' == buf[i]) |
while (buf[i] && (' ' == buf[i] || '\t' == buf[i])) |
i++; |
i++; |
if ('\0' == buf[i]) |
if ('\0' == buf[i]) |
return(1); |
return(1); |
Line 777 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
Line 775 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
|
|
sv = i; |
sv = i; |
|
|
/* Copy the first word into a nil-terminated buffer. */ |
/* |
|
* Copy the first word into a nil-terminated buffer. |
|
* Stop copying when a tab, space, or eoln is encountered. |
|
*/ |
|
|
for (j = 0; j < 4; j++, i++) { |
j = 0; |
if ('\0' == (mac[j] = buf[i])) |
while (j < 4 && '\0' != buf[i] && ' ' != buf[i] && '\t' != buf[i]) |
break; |
mac[j++] = buf[i++]; |
else if (' ' == buf[i]) |
|
break; |
|
|
|
/* Check for invalid characters. */ |
|
|
|
if (isgraph((u_char)buf[i])) |
|
continue; |
|
if ( ! mdoc_pmsg(m, ln, i, MANDOCERR_BADCHAR)) |
|
return(0); |
|
i--; |
|
} |
|
|
|
mac[j] = '\0'; |
mac[j] = '\0'; |
|
|
if (j == 4 || j < 2) { |
if (j == 4 || j < 2) { |
Line 808 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
Line 797 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
return(1); |
return(1); |
} |
} |
|
|
/* The macro is sane. Jump to the next word. */ |
/* Disregard the first trailing tab, if applicable. */ |
|
|
|
if ('\t' == buf[i]) |
|
i++; |
|
|
|
/* Jump to the next non-whitespace word. */ |
|
|
while (buf[i] && ' ' == buf[i]) |
while (buf[i] && ' ' == buf[i]) |
i++; |
i++; |