]> git.cameronkatri.com Git - mandoc.git/commitdiff
implement -Tman .Bd -offset and -compact; OpenBSD rev. 1.8
authorIngo Schwarze <schwarze@openbsd.org>
Sat, 7 Jul 2012 13:46:59 +0000 (13:46 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Sat, 7 Jul 2012 13:46:59 +0000 (13:46 +0000)
mdoc_man.c

index 3c56e300767e1df01e1a7497fcdc5a185adc77c8..c68c2d31b881d8dd89c82a9151d37dbc67d828eb 100644 (file)
@@ -1,6 +1,6 @@
-/*     $Id: mdoc_man.c,v 1.10 2012/07/07 13:37:42 schwarze Exp $ */
+/*     $Id: mdoc_man.c,v 1.11 2012/07/07 13:46:59 schwarze Exp $ */
 /*
- * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -22,6 +22,7 @@
 #include <string.h>
 
 #include "mandoc.h"
+#include "out.h"
 #include "man.h"
 #include "mdoc.h"
 #include "main.h"
@@ -68,6 +69,7 @@ static        int       pre_sect(DECL_ARGS);
 static int       pre_ux(DECL_ARGS);
 static int       pre_xr(DECL_ARGS);
 static void      print_word(struct mman *, const char *);
+static void      print_offs(struct mman *, const char *);
 static void      print_node(DECL_ARGS);
 
 static const struct manact manacts[MDOC_MAX + 1] = {
@@ -245,6 +247,29 @@ print_word(struct mman *mm, const char *s)
        }
 }
 
+static void
+print_offs(struct mman *mm, const char *v)
+{
+       char              buf[24];
+       struct roffsu     su;
+       size_t            sz;
+
+       if (NULL == v || '\0' == *v || 0 == strcmp(v, "left"))
+               sz = 0;
+       else if (0 == strcmp(v, "indent"))
+               sz = 6;
+       else if (0 == strcmp(v, "indent-two"))
+               sz = 12;
+       else if (a2roffsu(v, &su, SCALE_MAX)) {
+               print_word(mm, v);
+               return;
+       } else
+               sz = strlen(v);
+
+       snprintf(buf, sizeof(buf), "%ldn", sz);
+       print_word(mm, buf);
+}
+
 void
 man_man(void *arg, const struct man *man)
 {
@@ -445,12 +470,19 @@ static int
 pre_bd(DECL_ARGS)
 {
 
+       if (0 == n->norm->Bd.comp) {
+               mm->need_nl = 1;
+               print_word(mm, ".sp");
+       }
        if (DISP_unfilled == n->norm->Bd.type ||
            DISP_literal  == n->norm->Bd.type) {
                mm->need_nl = 1;
                print_word(mm, ".nf");
        }
        mm->need_nl = 1;
+       print_word(mm, ".RS");
+       print_offs(mm, n->norm->Bd.offs);
+       mm->need_nl = 1;
        return(1);
 }
 
@@ -458,6 +490,8 @@ static void
 post_bd(DECL_ARGS)
 {
 
+       mm->need_nl = 1;
+       print_word(mm, ".RE");
        if (DISP_unfilled == n->norm->Bd.type ||
            DISP_literal  == n->norm->Bd.type) {
                mm->need_nl = 1;