diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-05-14 16:28:23 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-05-14 16:28:23 +0000 |
commit | 121fc3d4eff42f9400d7e165b83c068757148a7b (patch) | |
tree | 542cf79d7a2a3064093e486984d4bca92800daa0 /html.c | |
parent | 060aa662da1355a03d3193d7e0dcd9b0bbc33ccc (diff) | |
download | mandoc-121fc3d4eff42f9400d7e165b83c068757148a7b.tar.gz |
Give -Thtml and -Txhtml the gift of recognising escapes when calculating
widths (e.g., `Bl -tag -width "\s[blahblah]bar"). This has long since
been done for -Tascii but escaped noticed with -T[x]html.
Diffstat (limited to 'html.c')
-rw-r--r-- | html.c | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -31,6 +31,7 @@ #include <unistd.h> #include "mandoc.h" +#include "libmandoc.h" #include "out.h" #include "html.h" #include "main.h" @@ -294,6 +295,41 @@ print_metaf(struct html *h, enum mandoc_esc deco) print_otag(h, TAG_I, 0, NULL); } +int +html_strlen(const char *cp) +{ + int ssz, sz; + const char *seq, *p; + + /* + * Account for escaped sequences within string length + * calculations. This follows the logic in term_strlen() as we + * must calculate the width of produced strings. + * Assume that characters are always width of "1". This is + * hacky, but it gets the job done for approximation of widths. + */ + + sz = 0; + while (NULL != (p = strchr(cp, '\\'))) { + sz += (int)(p - cp); + ++cp; + switch (mandoc_escape(&cp, &seq, &ssz)) { + case (ESCAPE_ERROR): + return(sz); + case (ESCAPE_PREDEF): + sz++; + break; + case (ESCAPE_SPECIAL): + sz++; + break; + default: + break; + } + } + + assert(sz >= 0); + return(sz + strlen(cp)); +} static int print_encode(struct html *h, const char *p, int norecurse) |