diff options
-rw-r--r-- | man.c | 46 | ||||
-rw-r--r-- | man.h | 1 | ||||
-rw-r--r-- | mandocdb.c | 4 | ||||
-rw-r--r-- | mdoc.c | 39 | ||||
-rw-r--r-- | mdoc.h | 8 | ||||
-rw-r--r-- | mdoc_validate.c | 8 | ||||
-rw-r--r-- | roff.c | 46 | ||||
-rw-r--r-- | roff.h | 6 |
8 files changed, 58 insertions, 100 deletions
@@ -318,49 +318,3 @@ man_mparse(const struct roff_man *man) assert(man && man->parse); return(man->parse); } - -void -man_deroff(char **dest, const struct roff_node *n) -{ - char *cp; - size_t sz; - - if (n->type != ROFFT_TEXT) { - for (n = n->child; n; n = n->next) - man_deroff(dest, n); - return; - } - - /* Skip leading whitespace and escape sequences. */ - - cp = n->string; - while ('\0' != *cp) { - if ('\\' == *cp) { - cp++; - mandoc_escape((const char **)&cp, NULL, NULL); - } else if (isspace((unsigned char)*cp)) - cp++; - else - break; - } - - /* Skip trailing whitespace. */ - - for (sz = strlen(cp); sz; sz--) - if (0 == isspace((unsigned char)cp[sz-1])) - break; - - /* Skip empty strings. */ - - if (0 == sz) - return; - - if (NULL == *dest) { - *dest = mandoc_strndup(cp, sz); - return; - } - - mandoc_asprintf(&cp, "%s %*s", *dest, (int)sz, cp); - free(*dest); - *dest = cp; -} @@ -64,6 +64,5 @@ __BEGIN_DECLS struct roff_man; const struct mparse *man_mparse(const struct roff_man *); -void man_deroff(char **, const struct roff_node *); __END_DECLS @@ -1476,7 +1476,7 @@ parse_man(struct mpage *mpage, const struct roff_meta *meta, */ title = NULL; - man_deroff(&title, body); + deroff(&title, body); if (NULL == title) return; @@ -1720,7 +1720,7 @@ parse_mdoc_Nd(struct mpage *mpage, const struct roff_meta *meta, { if (n->type == ROFFT_BODY) - mdoc_deroff(&mpage->desc, n); + deroff(&mpage->desc, n); return(0); } @@ -507,42 +507,3 @@ mdoc_isdelim(const char *p) return(DELIM_NONE); } - -void -mdoc_deroff(char **dest, const struct roff_node *n) -{ - char *cp; - size_t sz; - - if (n->type != ROFFT_TEXT) { - for (n = n->child; n; n = n->next) - mdoc_deroff(dest, n); - return; - } - - /* Skip leading whitespace. */ - - for (cp = n->string; '\0' != *cp; cp++) - if (0 == isspace((unsigned char)*cp)) - break; - - /* Skip trailing whitespace. */ - - for (sz = strlen(cp); sz; sz--) - if (0 == isspace((unsigned char)cp[sz-1])) - break; - - /* Skip empty strings. */ - - if (0 == sz) - return; - - if (NULL == *dest) { - *dest = mandoc_strndup(cp, sz); - return; - } - - mandoc_asprintf(&cp, "%s %*s", *dest, (int)sz, cp); - free(*dest); - *dest = cp; -} @@ -279,11 +279,3 @@ extern const char *const *mdoc_macronames; /* Names of macro args. Index is enum mdocargt. */ extern const char *const *mdoc_argnames; - -__BEGIN_DECLS - -struct roff_man; - -void mdoc_deroff(char **, const struct roff_node *); - -__END_DECLS diff --git a/mdoc_validate.c b/mdoc_validate.c index 616e9b10..6c9fff89 100644 --- a/mdoc_validate.c +++ b/mdoc_validate.c @@ -969,7 +969,7 @@ post_nm(POST_ARGS) if (NULL != mdoc->meta.name) return; - mdoc_deroff(&mdoc->meta.name, n); + deroff(&mdoc->meta.name, n); if (NULL == mdoc->meta.name) mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse, @@ -1883,7 +1883,7 @@ post_sh_head(POST_ARGS) secname = NULL; sec = SEC_CUSTOM; - mdoc_deroff(&secname, mdoc->last); + deroff(&secname, mdoc->last); sec = NULL == secname ? SEC_CUSTOM : a2sec(secname); /* The NAME should be first. */ @@ -2132,7 +2132,7 @@ post_dd(POST_ARGS) } datestr = NULL; - mdoc_deroff(&datestr, n); + deroff(&datestr, n); if (mdoc->quick) mdoc->meta.date = datestr; else { @@ -2267,7 +2267,7 @@ post_os(POST_ARGS) free(mdoc->meta.os); mdoc->meta.os = NULL; - mdoc_deroff(&mdoc->meta.os, n); + deroff(&mdoc->meta.os, n); if (mdoc->meta.os) goto out; @@ -1230,6 +1230,52 @@ roff_node_delete(struct roff_man *man, struct roff_node *n) roff_node_free(n); } +void +deroff(char **dest, const struct roff_node *n) +{ + char *cp; + size_t sz; + + if (n->type != ROFFT_TEXT) { + for (n = n->child; n != NULL; n = n->next) + deroff(dest, n); + return; + } + + /* Skip leading whitespace and escape sequences. */ + + cp = n->string; + while (*cp != '\0') { + if ('\\' == *cp) { + cp++; + mandoc_escape((const char **)&cp, NULL, NULL); + } else if (isspace((unsigned char)*cp)) + cp++; + else + break; + } + + /* Skip trailing whitespace. */ + + for (sz = strlen(cp); sz; sz--) + if ( ! isspace((unsigned char)cp[sz-1])) + break; + + /* Skip empty strings. */ + + if (sz == 0) + return; + + if (*dest == NULL) { + *dest = mandoc_strndup(cp, sz); + return; + } + + mandoc_asprintf(&cp, "%s %*s", *dest, (int)sz, cp); + free(*dest); + *dest = cp; +} + /* --- main functions of the roff parser ---------------------------------- */ /* @@ -157,3 +157,9 @@ struct roff_man { enum roff_sec lastnamed; /* Last standard section seen. */ enum roff_next next; /* Where to put the next node. */ }; + +__BEGIN_DECLS + +void deroff(char **, const struct roff_node *); + +__END_DECLS |