diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-10-09 06:54:11 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-10-09 06:54:11 +0000 |
commit | b91662305e6d87cdb8d5494c0fc742b1dd45b29c (patch) | |
tree | cda57f136096de0daea7fbe17e7c4c9c1bbbc131 /out.c | |
parent | 390db1686bea8852d19f42029363d12254349a44 (diff) | |
download | mandoc-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.c | 36 |
1 files changed, 30 insertions, 6 deletions
@@ -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); } |