aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/out.c
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 /out.c
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.
Diffstat (limited to 'out.c')
-rw-r--r--out.c36
1 files changed, 30 insertions, 6 deletions
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);
}