=================================================================== RCS file: /cvs/mandoc/html.c,v retrieving revision 1.206 retrieving revision 1.211 diff -u -p -r1.206 -r1.211 --- mandoc/html.c 2017/02/05 19:29:19 1.206 +++ mandoc/html.c 2017/05/12 17:58:21 1.211 @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.206 2017/02/05 19:29:19 schwarze Exp $ */ +/* $Id: html.c,v 1.211 2017/05/12 17:58:21 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2011-2015, 2017 Ingo Schwarze @@ -28,8 +28,9 @@ #include #include -#include "mandoc.h" #include "mandoc_aux.h" +#include "mandoc.h" +#include "roff.h" #include "out.h" #include "html.h" #include "manconf.h" @@ -76,6 +77,7 @@ static const struct htmldata htmltags[TAG_MAX] = { {"dt", HTML_NLAROUND}, {"dd", HTML_NLAROUND | HTML_INDENT}, {"pre", HTML_NLALL | HTML_NOINDENT}, + {"var", 0}, {"cite", 0}, {"b", 0}, {"i", 0}, @@ -235,6 +237,28 @@ print_metaf(struct html *h, enum mandoc_esc deco) } } +char * +html_make_id(const struct roff_node *n) +{ + const struct roff_node *nch; + char *buf, *cp; + + for (nch = n->child; nch != NULL; nch = nch->next) + if (nch->type != ROFFT_TEXT) + return NULL; + + buf = NULL; + deroff(&buf, n); + + /* http://www.w3.org/TR/html5/dom.html#the-id-attribute */ + + for (cp = buf; *cp != '\0'; cp++) + if (*cp == ' ') + *cp = '_'; + + return buf; +} + int html_strlen(const char *cp) { @@ -533,18 +557,25 @@ print_otag(struct html *h, enum htmltag tag, const cha print_byte(h, '='); print_byte(h, '"'); switch (*fmt) { - case 'M': - print_href(h, arg1, arg2, 1); - fmt++; - break; case 'I': print_href(h, arg1, NULL, 0); fmt++; break; + case 'M': + print_href(h, arg1, arg2, 1); + fmt++; + break; case 'R': print_byte(h, '#'); + print_encode(h, arg1, NULL, 1); fmt++; - /* FALLTHROUGH */ + break; + case 'T': + print_encode(h, arg1, NULL, 1); + print_word(h, "\" title=\""); + print_encode(h, arg1, NULL, 1); + fmt++; + break; default: print_encode(h, arg1, NULL, 1); break; @@ -578,13 +609,21 @@ print_otag(struct html *h, enum htmltag tag, const cha SCALE_VS_INIT(su, i); break; case 'w': - case 'W': if ((arg2 = va_arg(ap, char *)) == NULL) break; su = &mysu; a2width(arg2, su); - if (fmt[-1] == 'W') + if (*fmt == '+') { + /* Increase to make even bold text fit. */ + su->scale *= 1.15; + /* Add padding. */ + su->scale += 3.0; + fmt++; + } + if (*fmt == '-') { su->scale *= -1.0; + fmt++; + } break; default: abort();