aboutsummaryrefslogtreecommitdiffstatshomepage
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
commitedd3f03c572dea751a39384a378cee53fa006b40 (patch)
tree5074e4148e8fb150925be69a61a27b2aefcec79f /term.c
parentd3e6fef4a71622fd3252adf76291635c5f503090 (diff)
downloadmandoc-edd3f03c572dea751a39384a378cee53fa006b40.tar.gz
mandoc-edd3f03c572dea751a39384a378cee53fa006b40.tar.zst
mandoc-edd3f03c572dea751a39384a378cee53fa006b40.zip
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.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/term.c b/term.c
index 72ec556f..8d05afc4 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.238 2014/12/19 17:12:04 schwarze Exp $ */
+/* $Id: term.c,v 1.239 2014/12/23 06:16:46 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -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