summaryrefslogtreecommitdiffstats
path: root/term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-12-23 06:16:46 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-12-23 06:16:46 +0000
commit561cc96be291e4e8b9c01bd646f9404b4e1845ea (patch)
tree7eeb48b35b7a5410c62d6063739d246c4fe8dfaa /term.c
parentcd00c92275e7ad8c19a87730f2935a07840174b4 (diff)
downloadmandoc-561cc96be291e4e8b9c01bd646f9404b4e1845ea.tar.gz
Fix vertical scaling. Obviously, nobody ever had a serious look at this.
Basic units, centimeters, points, ens, ems, and the rounding algorithm were all wrong, only inches, pica, and the default vertical span worked.
Diffstat (limited to 'term.c')
-rw-r--r--term.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/term.c b/term.c
index 30abb13f..78dd69f1 100644
--- a/term.c
+++ b/term.c
@@ -776,32 +776,43 @@ term_vspan(const struct termp *p, const struct roffsu *su)
double r;
switch (su->unit) {
+ case SCALE_BU:
+ r = su->scale / 40.0;
+ break;
case SCALE_CM:
- r = su->scale * 2.0;
+ r = su->scale * 6.0 / 2.54;
+ break;
+ case SCALE_FS:
+ r = su->scale * 65536.0 / 40.0;
break;
case SCALE_IN:
r = su->scale * 6.0;
break;
+ case SCALE_MM:
+ r = su->scale * 0.006;
+ break;
case SCALE_PC:
r = su->scale;
break;
case SCALE_PT:
- r = su->scale / 8.0;
+ r = su->scale / 12.0;
break;
- case SCALE_MM:
- r = su->scale / 1000.0;
+ case SCALE_EN:
+ /* FALLTHROUGH */
+ case SCALE_EM:
+ r = su->scale * 0.6;
break;
case SCALE_VS:
r = su->scale;
break;
default:
- r = su->scale - 1.0;
- break;
+ abort();
+ /* NOTREACHED */
}
if (r < 0.0)
r = 0.0;
- return((size_t)(r + 0.0005));
+ return((size_t)(r + 0.4995));
}
size_t