summaryrefslogtreecommitdiffstats
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
commit7ecbe69366c1257a57ee2a88b71916360b19bdc1 (patch)
tree1ec2a72bc9e9c8a6c3a17744949d2263d583f3f3
parent3ebfba7c53e0e445e1e477d3bc4e9c99f0307dda (diff)
downloadmandoc-7ecbe69366c1257a57ee2a88b71916360b19bdc1.tar.gz
Scaling factor made floating point (as per groff.7) and, e.g., gnu/usr.bin/cvs/man/cvs.1.
-rw-r--r--html.c8
-rw-r--r--out.c34
-rw-r--r--out.h9
3 files changed, 41 insertions, 10 deletions
diff --git a/html.c b/html.c
index 8fa986a6..3ae5e7b2 100644
--- a/html.c
+++ b/html.c
@@ -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 257d5caa..b8b247f3 100644
--- a/out.c
+++ b/out.c
@@ -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 13103aff..34e23272 100644
--- a/out.h
+++ b/out.h
@@ -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 *);