version 1.188, 2013/12/25 00:50:05 |
version 1.191, 2014/01/06 23:46:07 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2010, 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 109 struct roffreg { |
|
Line 109 struct roffreg { |
|
struct roff { |
struct roff { |
enum mparset parsetype; /* requested parse type */ |
enum mparset parsetype; /* requested parse type */ |
struct mparse *parse; /* parse point */ |
struct mparse *parse; /* parse point */ |
|
int quick; /* skip standard macro deletion */ |
struct roffnode *last; /* leaf of stack */ |
struct roffnode *last; /* leaf of stack */ |
enum roffrule rstack[RSTACK_MAX]; /* stack of !`ie' rules */ |
enum roffrule rstack[RSTACK_MAX]; /* stack of !`ie' rules */ |
char control; /* control character */ |
char control; /* control character */ |
Line 447 roff_free1(struct roff *r) |
|
Line 448 roff_free1(struct roff *r) |
|
void |
void |
roff_reset(struct roff *r) |
roff_reset(struct roff *r) |
{ |
{ |
int i; |
|
|
|
roff_free1(r); |
roff_free1(r); |
|
|
r->control = 0; |
r->control = 0; |
|
|
for (i = 0; i < PREDEFS_MAX; i++) |
|
roff_setstr(r, predefs[i].name, predefs[i].str, 0); |
|
} |
} |
|
|
|
|
Line 468 roff_free(struct roff *r) |
|
Line 464 roff_free(struct roff *r) |
|
|
|
|
|
struct roff * |
struct roff * |
roff_alloc(enum mparset type, struct mparse *parse) |
roff_alloc(enum mparset type, struct mparse *parse, int quick) |
{ |
{ |
struct roff *r; |
struct roff *r; |
int i; |
|
|
|
r = mandoc_calloc(1, sizeof(struct roff)); |
r = mandoc_calloc(1, sizeof(struct roff)); |
r->parsetype = type; |
r->parsetype = type; |
r->parse = parse; |
r->parse = parse; |
|
r->quick = quick; |
r->rstackpos = -1; |
r->rstackpos = -1; |
|
|
roffhash_init(); |
roffhash_init(); |
|
|
for (i = 0; i < PREDEFS_MAX; i++) |
|
roff_setstr(r, predefs[i].name, predefs[i].str, 0); |
|
|
|
return(r); |
return(r); |
} |
} |
|
|
Line 646 roff_parsetext(char **bufp, size_t *szp, int pos, int |
|
Line 639 roff_parsetext(char **bufp, size_t *szp, int pos, int |
|
if ('\\' == *p) { |
if ('\\' == *p) { |
/* Skip over escapes. */ |
/* Skip over escapes. */ |
p++; |
p++; |
esc = mandoc_escape |
esc = mandoc_escape((const char **)&p, NULL, NULL); |
((const char const **)&p, NULL, NULL); |
|
if (ESCAPE_ERROR == esc) |
if (ESCAPE_ERROR == esc) |
break; |
break; |
continue; |
continue; |
Line 1498 roff_Dd(ROFF_ARGS) |
|
Line 1490 roff_Dd(ROFF_ARGS) |
|
{ |
{ |
const char *const *cp; |
const char *const *cp; |
|
|
if (MPARSE_MDOC != r->parsetype) |
if (0 == r->quick && MPARSE_MDOC != r->parsetype) |
for (cp = __mdoc_reserved; *cp; cp++) |
for (cp = __mdoc_reserved; *cp; cp++) |
roff_setstr(r, *cp, NULL, 0); |
roff_setstr(r, *cp, NULL, 0); |
|
|
Line 1511 roff_TH(ROFF_ARGS) |
|
Line 1503 roff_TH(ROFF_ARGS) |
|
{ |
{ |
const char *const *cp; |
const char *const *cp; |
|
|
if (MPARSE_MDOC != r->parsetype) |
if (0 == r->quick && MPARSE_MDOC != r->parsetype) |
for (cp = __man_reserved; *cp; cp++) |
for (cp = __man_reserved; *cp; cp++) |
roff_setstr(r, *cp, NULL, 0); |
roff_setstr(r, *cp, NULL, 0); |
|
|
Line 1902 static const char * |
|
Line 1894 static const char * |
|
roff_getstrn(const struct roff *r, const char *name, size_t len) |
roff_getstrn(const struct roff *r, const char *name, size_t len) |
{ |
{ |
const struct roffkv *n; |
const struct roffkv *n; |
|
int i; |
|
|
for (n = r->strtab; n; n = n->next) |
for (n = r->strtab; n; n = n->next) |
if (0 == strncmp(name, n->key.p, len) && |
if (0 == strncmp(name, n->key.p, len) && |
'\0' == n->key.p[(int)len]) |
'\0' == n->key.p[(int)len]) |
return(n->val.p); |
return(n->val.p); |
|
|
|
for (i = 0; i < PREDEFS_MAX; i++) |
|
if (0 == strncmp(name, predefs[i].name, len) && |
|
'\0' == predefs[i].name[(int)len]) |
|
return(predefs[i].str); |
|
|
return(NULL); |
return(NULL); |
} |
} |