summaryrefslogtreecommitdiffstats
path: root/out.c
diff options
context:
space:
mode:
Diffstat (limited to 'out.c')
-rw-r--r--out.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/out.c b/out.c
index b8b247f3..ce09af1c 100644
--- a/out.c
+++ b/out.c
@@ -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;