diff options
| author | 2010-07-25 18:05:54 +0000 | |
|---|---|---|
| committer | 2010-07-25 18:05:54 +0000 | |
| commit | ddce0b0ca1b3ae66643ffdf36394eda67117ca14 (patch) | |
| tree | a6d88f26f28f3fc7273e7a3f88d4648f6eec6e06 /usr.bin/mandoc/html.c | |
| parent | Missing SCSI_DATA_IN flag in dvd_read_copyright() caused (diff) | |
| download | wireguard-openbsd-ddce0b0ca1b3ae66643ffdf36394eda67117ca14.tar.xz wireguard-openbsd-ddce0b0ca1b3ae66643ffdf36394eda67117ca14.zip | |
Sync to bsd.lv; in particular, pull in lots of bug fixes.
new features:
* support the .in macro in man(7)
* support minimal PDF output
* support .Sm in mdoc(7) HTML output
* support .Vb and .nf in man(7) HTML output
* complete the mdoc(7) manual
bug fixes:
* do not let mdoc(7) .Pp produce a newline before/after .Sh; reported by jmc@
* avoid double blank lines related to man(7) .sp and .br
* let man(7) .nf and .fi flush the line; reported by jsg@ and naddy@
* let "\ " produce a non-breaking space; reported by deraadt@
* discard \m colour escape sequences; reported by J.C. Roberts
* map undefined 1-character-escapes to the literal character itself
maintenance:
* express mdoc(7) arguments in terms of an enum for additional type-safety
* simplify mandoc_special() and a2roffdeco()
* use strcspn in term_word() in place of a manual loop
* minor optimisations in the -Tps and -Thtml formatting frontends
Diffstat (limited to 'usr.bin/mandoc/html.c')
| -rw-r--r-- | usr.bin/mandoc/html.c | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/usr.bin/mandoc/html.c b/usr.bin/mandoc/html.c index 16cdb29fd8e..eb9ebda5be3 100644 --- a/usr.bin/mandoc/html.c +++ b/usr.bin/mandoc/html.c @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.12 2010/07/13 01:09:12 schwarze Exp $ */ +/* $Id: html.c,v 1.13 2010/07/25 18:05:54 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> * @@ -84,7 +84,8 @@ static const char *const htmlattrs[ATTR_MAX] = { "summary", }; -static void print_spec(struct html *, const char *, size_t); +static void print_spec(struct html *, enum roffdeco, + const char *, size_t); static void print_res(struct html *, const char *, size_t); static void print_ctag(struct html *, enum htmltag); static void print_doctype(struct html *); @@ -211,30 +212,41 @@ print_gen_head(struct html *h) static void -print_spec(struct html *h, const char *p, size_t len) +print_spec(struct html *h, enum roffdeco d, const char *p, size_t len) { + int cp; const char *rhs; size_t sz; - rhs = chars_a2ascii(h->symtab, p, len, &sz); - - if (NULL == rhs) + if ((cp = chars_spec2cp(h->symtab, p, len)) > 0) { + printf("&#%d;", cp); + return; + } else if (-1 == cp && DECO_SSPECIAL == d) { + fwrite(p, 1, len, stdout); + return; + } else if (-1 == cp) return; - fwrite(rhs, 1, sz, stdout); + + if (NULL != (rhs = chars_spec2str(h->symtab, p, len, &sz))) + fwrite(rhs, 1, sz, stdout); } static void print_res(struct html *h, const char *p, size_t len) { + int cp; const char *rhs; size_t sz; - rhs = chars_a2res(h->symtab, p, len, &sz); - - if (NULL == rhs) + if ((cp = chars_res2cp(h->symtab, p, len)) > 0) { + printf("&#%d;", cp); + return; + } else if (-1 == cp) return; - fwrite(rhs, 1, sz, stdout); + + if (NULL != (rhs = chars_res2str(h->symtab, p, len, &sz))) + fwrite(rhs, 1, sz, stdout); } @@ -330,8 +342,10 @@ print_encode(struct html *h, const char *p, int norecurse) case (DECO_RESERVED): print_res(h, seq, sz); break; + case (DECO_SSPECIAL): + /* FALLTHROUGH */ case (DECO_SPECIAL): - print_spec(h, seq, sz); + print_spec(h, deco, seq, sz); break; case (DECO_PREVIOUS): /* FALLTHROUGH */ @@ -399,6 +413,9 @@ print_otag(struct html *h, enum htmltag tag, printf(" "); } + if ( ! (h->flags & HTML_NONOSPACE)) + h->flags &= ~HTML_NOSPACE; + /* Print out the tag name and attributes. */ printf("<%s", htmltags[tag].name); @@ -526,7 +543,8 @@ print_text(struct html *h, const char *word) assert(word); if ( ! print_encode(h, word, 0)) - h->flags &= ~HTML_NOSPACE; + if ( ! (h->flags & HTML_NONOSPACE)) + h->flags &= ~HTML_NOSPACE; /* * Note that we don't process the pipe: the parser sees it as |
