]> git.cameronkatri.com Git - mandoc.git/commitdiff
Scaling factor made floating point (as per groff.7) and, e.g., gnu/usr.bin/cvs/man...
authorKristaps Dzonsons <kristaps@bsd.lv>
Fri, 9 Oct 2009 06:54:11 +0000 (06:54 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Fri, 9 Oct 2009 06:54:11 +0000 (06:54 +0000)
html.c
out.c
out.h

diff --git a/html.c b/html.c
index 000945224075fef7a7dbd3e89cb06a460b4e3bf9..5ab4c877d74320fc65ab14bbe34b71b077eed31c 100644 (file)
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/*     $Id: html.c,v 1.61 2009/10/07 15:27:11 kristaps Exp $ */
+/*     $Id: html.c,v 1.62 2009/10/09 06:54:11 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -599,7 +599,7 @@ buffmt_man(struct html *h,
 void
 bufcat_su(struct html *h, const char *p, const struct roffsu *su)
 {
-       int              v;
+       double           v;
        char            *u;
 
        v = su->scale;
@@ -639,5 +639,9 @@ bufcat_su(struct html *h, const char *p, const struct roffsu *su)
                break;
        }
 
-       buffmt(h, "%s: %d%s;", p, v, u);
+       if (su->pt)
+               buffmt(h, "%s: %f%s;", p, v, u);
+       else
+               /* LINTED */
+               buffmt(h, "%s: %d%s;", p, (int)v, u);
 }
diff --git a/out.c b/out.c
index 4b30ad40e43418df7bbf578f18a4a746f27acb4b..41467209fa8cd06d33bf9a700f3fc8a982600166 100644 (file)
--- a/out.c
+++ b/out.c
@@ -1,4 +1,4 @@
-/*     $Id: out.c,v 1.3 2009/10/07 12:35:24 kristaps Exp $ */
+/*     $Id: out.c,v 1.4 2009/10/09 06:54:11 kristaps Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
 int
 a2roffsu(const char *src, struct roffsu *dst)
 {
-       char             buf[BUFSIZ], *p;
+       char             buf[BUFSIZ], hasd;
        int              i;
        enum roffscale   unit;
 
-       for (p = buf, i = 0; i < BUFSIZ && isdigit((u_char)*src); i++)
-               *p++ = *src++;
+       i = hasd = 0;
+
+       switch (*src) {
+       case ('+'):
+               src++;
+               break;
+       case ('-'):
+               buf[i++] = *src++;
+               break;
+       default:
+               break;
+       }
+
+       while (i < BUFSIZ) {
+               if ( ! isdigit((u_char)*src)) {
+                       if ('.' != *src)
+                               break;
+                       else if (hasd)
+                               break;
+                       else
+                               hasd = 1;
+               }
+               buf[i++] = *src++;
+       }
 
        if (BUFSIZ == i || (*src && *(src + 1)))
                return(0);
 
-       *p = '\0';
+       buf[i] = '\0';
 
        switch (*src) {
        case ('c'):
@@ -95,8 +117,10 @@ a2roffsu(const char *src, struct roffsu *dst)
                return(0);
        }
 
-       if ((dst->scale = atoi(buf)) < 0)
+       if ((dst->scale = atof(buf)) < 0)
                dst->scale = 0;
        dst->unit = unit;
+       dst->pt = hasd;
+
        return(1);
 }
diff --git a/out.h b/out.h
index db956b5b171eaf070dbd95b9d895387ac6f0e710..6737d70ec7e07ade3026ed4985633b626ef0a923 100644 (file)
--- a/out.h
+++ b/out.h
@@ -1,4 +1,4 @@
-/*     $Id: out.h,v 1.3 2009/10/07 12:35:24 kristaps Exp $ */
+/*     $Id: out.h,v 1.4 2009/10/09 06:54:11 kristaps Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -35,17 +35,20 @@ enum        roffscale {
 
 struct roffsu {
        enum roffscale    unit;
-       int               scale;
+       double            scale;
+       int               pt;
 };
 
 #define        SCALE_INVERT(p) \
        do { (p)->scale = -(p)->scale; } while (/*CONSTCOND*/0)
 #define        SCALE_VS_INIT(p, v) \
        do { (p)->unit = SCALE_VS; \
-            (p)->scale = (v); } while (/*CONSTCOND*/0)
+            (p)->scale = (v); \
+            (p)->pt = 0; } while (/*CONSTCOND*/0)
 #define        SCALE_HS_INIT(p, v) \
        do { (p)->unit = SCALE_BU; \
-            (p)->scale = (v); } while (/*CONSTCOND*/0)
+            (p)->scale = (v); \
+            (p)->pt = 0; } while (/*CONSTCOND*/0)
 
 int              a2roffsu(const char *, struct roffsu *);