summaryrefslogtreecommitdiffstats
path: root/term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-10-18 13:34:16 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-10-18 13:34:16 +0000
commit3415d08a3770d6230f784e7a7f2a11e555d18fae (patch)
tree4b5265d25450e7ddbcef067ae64470c3e03934ea /term.c
parent3bb28bd52ee8e4f2384f550bdc6f9eb7f58a67ec (diff)
downloadmandoc-3415d08a3770d6230f784e7a7f2a11e555d18fae.tar.gz
Arbitrary horizontal and vertical scaling widths now handled by -mdoc -Tascii.
Terminal scaling backend pushed into term.c.
Diffstat (limited to 'term.c')
-rw-r--r--term.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/term.c b/term.c
index c12b04b7..d08112a3 100644
--- a/term.c
+++ b/term.c
@@ -25,6 +25,7 @@
#include "man.h"
#include "mdoc.h"
#include "main.h"
+#include "out.h"
/* FIXME: accomodate non-breaking, non-collapsing white-space. */
/* FIXME: accomodate non-breaking, collapsing white-space. */
@@ -558,3 +559,85 @@ encode(struct termp *p, char c)
}
buffer(p, c);
}
+
+
+int
+a2height(const char *p)
+{
+ struct roffsu su;
+ double r;
+
+ if ( ! a2roffsu(p, &su))
+ return(-1);
+
+ switch (su.unit) {
+ case (SCALE_CM):
+ r = su.scale * 2;
+ break;
+ case (SCALE_IN):
+ r = su.scale * 6;
+ break;
+ case (SCALE_PC):
+ r = su.scale;
+ break;
+ case (SCALE_PT):
+ r = su.scale / 8;
+ break;
+ case (SCALE_MM):
+ r = su.scale / 1000;
+ break;
+ case (SCALE_VS):
+ r = su.scale;
+ break;
+ default:
+ r = su.scale - 1;
+ break;
+ }
+
+ if (r < 0.0)
+ r = 0.0;
+ return(/* LINTED */(int)
+ r);
+}
+
+
+int
+a2width(const char *p)
+{
+ struct roffsu su;
+ double r;
+
+ if ( ! a2roffsu(p, &su))
+ return(-1);
+
+ switch (su.unit) {
+ case (SCALE_CM):
+ r = (4 * su.scale) + 2; /* FIXME: double-check. */
+ break;
+ case (SCALE_IN):
+ r = (10 * su.scale) + 2; /* FIXME: double-check. */
+ break;
+ case (SCALE_PC):
+ r = (10 * su.scale) / 6; /* FIXME: double-check. */
+ break;
+ case (SCALE_PT):
+ r = (10 * su.scale) / 72; /* FIXME: double-check. */
+ break;
+ case (SCALE_MM):
+ r = su.scale / 1000; /* FIXME: double-check. */
+ break;
+ case (SCALE_VS):
+ r = su.scale * 2 - 1; /* FIXME: double-check. */
+ break;
+ default:
+ r = su.scale + 2;
+ break;
+ }
+
+ if (r < 0.0)
+ r = 0.0;
+ return((int)/* LINTED */
+ r);
+}
+
+