aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-04-04 17:47:18 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-04-04 17:47:18 +0000
commita203fd4e6f05d56d51d63d78b0357f1c67ffec39 (patch)
treeed23dfa1c237f1cd01f66b96ab8912beb1bcd018 /term.c
parentec66e073f559e3a2d8c56fd67060b2ccde12788a (diff)
downloadmandoc-a203fd4e6f05d56d51d63d78b0357f1c67ffec39.tar.gz
mandoc-a203fd4e6f05d56d51d63d78b0357f1c67ffec39.tar.zst
mandoc-a203fd4e6f05d56d51d63d78b0357f1c67ffec39.zip
Rounding rules for horizontal scaling widths are more complicated.
There is a first rounding to basic units on the input side. After that, rounding rules differ between requests and macros. Requests round to the nearest possible character position. Macros round to the next character position to the left. Implement that by changing the return value of term_hspan() to basic units and leaving the second scaling and rounding stage to the formatters instead of doing it in the terminal handler. Improves for example argtable2(3).
Diffstat (limited to 'term.c')
-rw-r--r--term.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/term.c b/term.c
index 6476b0e7..68f3ea04 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.246 2015/04/02 23:48:20 schwarze Exp $ */
+/* $Id: term.c,v 1.247 2015/04/04 17:47:18 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -619,8 +619,7 @@ void
term_setwidth(struct termp *p, const char *wstr)
{
struct roffsu su;
- size_t width;
- int iop;
+ int iop, width;
iop = 0;
width = 0;
@@ -831,11 +830,12 @@ term_vspan(const struct termp *p, const struct roffsu *su)
return(ri < 66 ? ri : 1);
}
+/*
+ * Convert a scaling width to basic units, rounding down.
+ */
int
term_hspan(const struct termp *p, const struct roffsu *su)
{
- double v;
- v = (*p->hspan)(p, su);
- return(v > 0.0 ? v + 0.0005 : v - 0.0005);
+ return((*p->hspan)(p, su));
}