-/* $Id: html.c,v 1.107 2010/07/16 22:33:30 kristaps Exp $ */
+/* $Id: html.c,v 1.112 2010/09/04 20:18:53 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
"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 *);
h = calloc(1, sizeof(struct html));
if (NULL == h) {
perror(NULL);
- exit(EXIT_FAILURE);
+ exit((int)MANDOCLEVEL_SYSERR);
}
h->type = type;
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;
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;
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 */
t = malloc(sizeof(struct tag));
if (NULL == t) {
perror(NULL);
- exit(EXIT_FAILURE);
+ exit((int)MANDOCLEVEL_SYSERR);
}
t->tag = tag;
t->next = h->tags.head;
printf(" ");
}
+ if ( ! (h->flags & HTML_NONOSPACE))
+ h->flags &= ~HTML_NOSPACE;
+ else
+ h->flags |= HTML_NOSPACE;
+
/* Print out the tag name and attributes. */
printf("<%s", htmltags[tag].name);
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