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 | 7ecbe69366c1257a57ee2a88b71916360b19bdc1 (patch) | |
tree | 1ec2a72bc9e9c8a6c3a17744949d2263d583f3f3 /out.c | |
parent | 3ebfba7c53e0e445e1e477d3bc4e9c99f0307dda (diff) | |
download | mandoc-7ecbe69366c1257a57ee2a88b71916360b19bdc1.tar.gz |
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 | 34 |
1 files changed, 29 insertions, 5 deletions
@@ -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); } |