]> git.cameronkatri.com Git - mandoc.git/blobdiff - out.c
Had out.h roff-scale converters accept default unit scale (because -mdoc and -man...
[mandoc.git] / out.c
diff --git a/out.c b/out.c
index 41467209fa8cd06d33bf9a700f3fc8a982600166..73689b3905a1545288301f069d4e66636f39bd30 100644 (file)
--- 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>
  *
 
 /* 
  * 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;