summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-10-18 19:02:10 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-10-18 19:02:10 +0000
commit8b811fac9808f46457e2e037bbd37d0e07ea798d (patch)
tree210486faa2258f9d2156f3eedb9b27834e695057
parent168652c764da953d39f7a071f7840a5732020780 (diff)
downloadmandoc-8b811fac9808f46457e2e037bbd37d0e07ea798d.tar.gz
mandoc-8b811fac9808f46457e2e037bbd37d0e07ea798d.tar.zst
mandoc-8b811fac9808f46457e2e037bbd37d0e07ea798d.zip
Had out.h roff-scale converters accept default unit scale (because -mdoc and -man differ).
-rw-r--r--out.c33
-rw-r--r--out.h5
2 files changed, 16 insertions, 22 deletions
diff --git a/out.c b/out.c
index 41467209..73689b39 100644
--- a/out.c
+++ b/out.c
@@ -1,4 +1,4 @@
-/* $Id: out.c,v 1.4 2009/10/09 06:54:11 kristaps Exp $ */
+/* $Id: out.c,v 1.5 2009/10/18 19:02:10 kristaps Exp $ */
/*
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -25,31 +25,18 @@
/*
* Convert a `scaling unit' to a consistent form, or fail. Scaling
- * units are documented in groff.7, which stipulates the following:
- *
- * (1) A scaling unit is a signed/unsigned integer/float with or
- * without a unit.
- *
- * (2) The following units exist:
- * c Centimeter
- * i Inch
- * P Pica = 1/6 inch
- * p Point = 1/72 inch
- * m Em = the font size in points (width of letter m)
- * M 100th of an Em
- * n En = Em/2
- * u Basic unit for actual output device
- * v Vertical line space in basic units scaled point =
- * 1/sizescale of a point (defined in font DESC file)
- * f Scale by 65536.
+ * units are documented in groff.7, mdoc.7, man.7.
*/
int
-a2roffsu(const char *src, struct roffsu *dst)
+a2roffsu(const char *src, struct roffsu *dst, enum roffscale def)
{
char buf[BUFSIZ], hasd;
int i;
enum roffscale unit;
+ if ('\0' == *src)
+ return(0);
+
i = hasd = 0;
switch (*src) {
@@ -63,6 +50,9 @@ a2roffsu(const char *src, struct roffsu *dst)
break;
}
+ if ('\0' == *src)
+ return(0);
+
while (i < BUFSIZ) {
if ( ! isdigit((u_char)*src)) {
if ('.' != *src)
@@ -103,7 +93,10 @@ a2roffsu(const char *src, struct roffsu *dst)
unit = SCALE_EM;
break;
case ('\0'):
- /* FALLTHROUGH */
+ if (SCALE_MAX == def)
+ return(0);
+ unit = SCALE_BU;
+ break;
case ('u'):
unit = SCALE_BU;
break;
diff --git a/out.h b/out.h
index 6737d70e..5f47fb7b 100644
--- a/out.h
+++ b/out.h
@@ -1,4 +1,4 @@
-/* $Id: out.h,v 1.4 2009/10/09 06:54:11 kristaps Exp $ */
+/* $Id: out.h,v 1.5 2009/10/18 19:02:11 kristaps Exp $ */
/*
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -50,7 +50,8 @@ struct roffsu {
(p)->scale = (v); \
(p)->pt = 0; } while (/*CONSTCOND*/0)
-int a2roffsu(const char *, struct roffsu *);
+int a2roffsu(const char *,
+ struct roffsu *, enum roffscale);
__END_DECLS