aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-10-09 06:54:11 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-10-09 06:54:11 +0000
commitb91662305e6d87cdb8d5494c0fc742b1dd45b29c (patch)
treecda57f136096de0daea7fbe17e7c4c9c1bbbc131
parent390db1686bea8852d19f42029363d12254349a44 (diff)
downloadmandoc-b91662305e6d87cdb8d5494c0fc742b1dd45b29c.tar.gz
mandoc-b91662305e6d87cdb8d5494c0fc742b1dd45b29c.tar.zst
mandoc-b91662305e6d87cdb8d5494c0fc742b1dd45b29c.zip
Scaling factor made floating point (as per groff.7) and, e.g., gnu/usr.bin/cvs/man/cvs.1.
-rw-r--r--html.c10
-rw-r--r--out.c36
-rw-r--r--out.h11
3 files changed, 44 insertions, 13 deletions
diff --git a/html.c b/html.c
index 00094522..5ab4c877 100644
--- 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 4b30ad40..41467209 100644
--- 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>
*
@@ -46,17 +46,39 @@
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 db956b5b..6737d70e 100644
--- 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 *);