version 1.11, 2010/08/20 00:53:35 |
version 1.12, 2010/09/13 22:04:01 |
|
|
char **, size_t *, int); |
char **, size_t *, int); |
static void roff_setstr(struct roff *, |
static void roff_setstr(struct roff *, |
const char *, const char *); |
const char *, const char *); |
|
static char *roff_strdup(const char *); |
|
|
/* See roff_hash_find() */ |
/* See roff_hash_find() */ |
|
|
|
|
l = r->last; |
l = r->last; |
roffnode_cleanscope(r); |
roffnode_cleanscope(r); |
|
|
if (l != r->last) |
if (ROFF_MAX == (t = roff_parse(*bufp, &pos))) { |
|
if ('\\' == (*bufp)[pos] && '}' == (*bufp)[pos + 1]) |
|
return(roff_ccond |
|
(r, ROFF_ccond, bufp, szp, |
|
ln, pos, pos + 2, offs)); |
return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); |
return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); |
|
} |
|
|
if (ROFF_MAX == (t = roff_parse(*bufp, &pos))) |
|
return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); |
|
|
|
/* |
/* |
* A denied conditional must evaluate its children if and only |
* A denied conditional must evaluate its children if and only |
* if they're either structurally required (such as loops and |
* if they're either structurally required (such as loops and |
|
|
} |
} |
|
|
|
|
|
static char * |
|
roff_strdup(const char *name) |
|
{ |
|
char *namecopy, *sv; |
|
|
|
/* |
|
* This isn't a nice simple mandoc_strdup() because we must |
|
* handle roff's stupid double-escape rule. |
|
*/ |
|
sv = namecopy = mandoc_malloc(strlen(name) + 1); |
|
while (*name) { |
|
if ('\\' == *name && '\\' == *(name + 1)) |
|
name++; |
|
*namecopy++ = *name++; |
|
} |
|
|
|
*namecopy = '\0'; |
|
return(sv); |
|
} |
|
|
|
|
static void |
static void |
roff_setstr(struct roff *r, const char *name, const char *string) |
roff_setstr(struct roff *r, const char *name, const char *string) |
{ |
{ |
|
|
} else |
} else |
free(n->string); |
free(n->string); |
|
|
n->string = string ? strdup(string) : NULL; |
/* Don't use mandoc_strdup: clean out double-escapes. */ |
|
n->string = string ? roff_strdup(string) : NULL; |
} |
} |
|
|
|
|