diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-12-23 06:16:46 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-12-23 06:16:46 +0000 |
commit | 561cc96be291e4e8b9c01bd646f9404b4e1845ea (patch) | |
tree | 7eeb48b35b7a5410c62d6063739d246c4fe8dfaa | |
parent | cd00c92275e7ad8c19a87730f2935a07840174b4 (diff) | |
download | mandoc-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.
-rw-r--r-- | term.c | 25 |
1 files changed, 18 insertions, 7 deletions
@@ -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 |