-/* $Id: html.c,v 1.122 2010/12/24 00:46:49 kristaps Exp $ */
+/* $Id: html.c,v 1.126 2011/01/30 16:05:37 schwarze Exp $ */
/*
- * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
{"pre", HTML_CLRLINE }, /* TAG_PRE */
{"b", 0 }, /* TAG_B */
{"i", 0 }, /* TAG_I */
- {"u", 0 }, /* TAG_U */
{"code", 0 }, /* TAG_CODE */
{"small", 0 }, /* TAG_SMALL */
};
"id", /* ATTR_ID */
"summary", /* ATTR_SUMMARY */
"align", /* ATTR_ALIGN */
+ "colspan", /* ATTR_COLSPAN */
};
+static void print_num(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_num(struct html *h, const char *p, size_t len)
+{
+ const char *rhs;
+
+ rhs = chars_num2char(p, len);
+ if (rhs)
+ putchar((int)*rhs);
+}
+
+
static void
print_spec(struct html *h, enum roffdeco d, const char *p, size_t len)
{
len = a2roffdeco(&deco, &seq, &sz);
switch (deco) {
+ case (DECO_NUMBERED):
+ print_num(h, seq, sz);
+ break;
case (DECO_RESERVED):
print_res(h, seq, sz);
break;
struct tag *tag;
while ((tag = h->tags.head) != NULL) {
+ /*
+ * Remember to close out and nullify the current
+ * meta-font and table, if applicable.
+ */
if (tag == h->metaf)
h->metaf = NULL;
+ if (tag == h->tblt)
+ h->tblt = NULL;
print_ctag(h, tag->tag);
h->tags.head = tag->next;
free(tag);
while ((tag = h->tags.head) != NULL) {
if (suntil && tag == suntil)
return;
+ /*
+ * Remember to close out and nullify the current
+ * meta-font and table, if applicable.
+ */
if (tag == h->metaf)
h->metaf = NULL;
+ if (tag == h->tblt)
+ h->tblt = NULL;
print_ctag(h, tag->tag);
h->tags.head = tag->next;
free(tag);
{
int ssz;
- assert(sz);
+ assert(sz > 2);
/* Cf. <http://www.w3.org/TR/html4/types.html#h-6.2>. */
- for ( ; *dst != '\0' && sz; dst++, sz--)
- /* Jump to end. */ ;
-
- assert(sz > 2);
-
/* We can't start with a number (bah). */
- *dst++ = 'x';
- *dst = '\0';
- sz--;
+ if ('#' == *dst) {
+ dst++;
+ sz--;
+ }
+ if ('\0' == *dst) {
+ *dst++ = 'x';
+ *dst = '\0';
+ sz--;
+ }
+
+ for ( ; *dst != '\0' && sz; dst++, sz--)
+ /* Jump to end. */ ;
for ( ; *src != '\0' && sz > 1; src++) {
ssz = snprintf(dst, (size_t)sz, "%.2x", *src);