]> git.cameronkatri.com Git - mandoc.git/commitdiff
Fitted -man -Tascii with scaling units (.5i, etc.).
authorKristaps Dzonsons <kristaps@bsd.lv>
Sun, 18 Oct 2009 11:52:18 +0000 (11:52 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Sun, 18 Oct 2009 11:52:18 +0000 (11:52 +0000)
man_term.c

index d6582d59fd2c61a6d671a1c1fc474844f9f89bf1..b5196503b99dab7c29afa196d901a4fa034960fe 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.37 2009/10/18 11:14:04 kristaps Exp $ */
+/*     $Id: man_term.c,v 1.38 2009/10/18 11:52:18 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -140,6 +140,7 @@ static      void              print_foot(struct termp *,
 static void              fmt_block_vspace(struct termp *, 
                                const struct man_node *);
 static int               a2width(const char *);
+static int               a2height(const char *);
 
 
 void
@@ -195,6 +196,46 @@ fmt_block_vspace(struct termp *p, const struct man_node *n)
 }
 
 
+static 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);
+}
+
+
 static int
 a2width(const char *p)
 {
@@ -435,7 +476,9 @@ pre_sp(DECL_ARGS)
                return(0);
        }
 
-       len = atoi(n->child->string);
+       assert(MAN_TEXT == n->child->type);
+       len = a2height(n->child->string);
+
        if (0 == len)
                term_newln(p);
        for (i = 0; i < len; i++)